---
summary: "Observation mirror, catalog cache, request echoes"
breaking: false
security: false
---

# 0.4.0 — 2026-06-04

## Added

- **LABSTAT observation mirror** (#26) — opt-in SQLite-backed mirror of raw observation data via the `defineMirror` framework primitive. Default OFF; enable with `BLS_OBSERVATIONS_MIRROR_ENABLED=true`. Ingest runs in an event-loop-safe subprocess. Out-of-band bootstrap supported via `BLS_OBSERVATIONS_MIRROR_BOOTSTRAP=true`. Config: `BLS_OBSERVATIONS_MIRROR_PATH`, `BLS_OBSERVATIONS_MIRROR_SURVEYS`, `BLS_OBSERVATIONS_MIRROR_SYNC_INTERVAL_HOURS`.
- **Persistent catalog cache** (#32) — parsed LABSTAT flat-file catalog now survives process restarts. Configure with `BLS_CATALOG_CACHE_PATH` (SQLite file) and `BLS_CATALOG_CACHE_TTL_HOURS` (default: 24h).
- **Request-parameter echoes in `structuredContent`** (#29, #30) — `bls_search_series`, `bls_list_surveys`, and `bls_get_series` now reflect the resolved input parameters back in `structuredContent.request`, aiding agents that need to correlate results to their queries.

## Changed

- **Catalog cold fetch** (#32) — network concurrency during cold LABSTAT downloads is now bounded (small pool), reducing hammering on download.bls.gov.

## Dependencies

- `better-sqlite3` ^12.10.0 (new — Node SQLite driver for the observation mirror; fulfils the framework's optional `better-sqlite3` peer dependency)
