Inspector, Observations & sources
Snapshots are derived; observations and sources are the truth. Inspector exposes both as first-class browsable surfaces so operators can audit exactly which writes produced the current snapshot, and which raw artifact (file, API response, signed request) backed each write.
Observations list
Observations are immutable. Every store, correct, or merge produces one or more rows here, and none of them are ever mutated or deleted. The list at /observations shows them in reverse chronological order with filters for entity, field, agent, trust tier, and observation_source (sensor, workflow_state, llm_summary, human, import).
| When | Field | Value | Agent | Source | Reducer |
|---|---|---|---|---|---|
| 12:41 | amount | 20.00 | claude-code | llm_summary | winner |
| 12:38 | category | subscription | operator | human | winner |
| 12:30 | merchant | Vercel | claude-code | llm_summary | superseded |
| 12:30 | merchant | Vercel Inc. | claude-code | llm_summary | winner |
| 11:08 | amount | $20 | ingest-pipeline | import | superseded |
Reducer transparency
Each observation displays which row currently "wins" for its field. The reducer order is documented and visible: higher source_priority wins, with observation_source as the tie-break (sensor < workflow_state < llm_summary < human < import). Inspector shows this in the row metadata so operators don't have to guess why a "human" correction did or did not override an automated row.
Source registry
Every observation that came from an external artifact carries a source_id. The Sources page (/sources) lists those artifacts: PDFs, CSVs, JSON dumps, screenshots, signed API responses, even raw email bodies. Each row links to GET /sources/:id/content so you can open the original file inline (browser-viewable types) or download it.
Source detail
Source detail pages show the artifact's metadata (mime type, size, ingestion agent, idempotency key, when it was first observed) and the full list of observations that cite it. The combined-store contract guarantees each file_path / file_content persisted via store_structured becomes one row here, making "what raw artifact backs this fact?" a one-click question.
Provenance chains
From any observation row, you can trace forward (what entity it contributed to, which fields it currently or once won) or backward (which source artifact, which agent, which trust tier). This is the same chain the per-field provenance hover on Entities surfaces, the difference is direction: that view starts from the snapshot, this one starts from the writes themselves.