<!-- Full-page Markdown export (rendered HTML → GFM). Source: https://neotoma.io/ar/inspector/observations-and-sources Generated: 2026-04-27T12:48:30.821Z --> # 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). inspector.neotoma.io/observations?entity=ent\_4ad… Inspector Neotoma Dashboard Conversations Turns Compliance Activity Feedback Entities Observations Sources Relationships Graph Explorer Schemas Timeline Interpretations Agents Agent grants Settings Observations Subscription · Vercel · 8 rows obs\_source: anyGroup by field | 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 | The full immutable history for one entity. The 'reducer' column shows which row currently wins for each field. ◆ ## 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. inspector.neotoma.io/sources?type=email Inspector Neotoma Dashboard Conversations Turns Compliance Activity Feedback Entities Observations Sources Relationships Graph Explorer Schemas Timeline Interpretations Agents Agent grants Settings Sources 2,154 artifacts · 312 unique mime: application/pdfsize < 1MB vercel-2026-04.pdf ingested by claude-code · 12 observations downstream application/pdfOpen wise-transfer-58812.json ingested by ingest-pipeline · 6 observations downstream application/jsonOpen screenshot-2026-04-22.png ingested by cursor-agent · 3 observations downstream image/pngOpen calendar-week-17.ics ingested by ingest-pipeline · 14 observations downstream text/calendarOpen Each source row preserves the original artifact, its mime type, the agent that ingested it, and downstream observations. ◆ ## 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](/inspector/entities) surfaces, the difference is direction: that view starts from the snapshot, this one starts from the writes themselves.