Inspector, Schemas
Neotoma is schema-agnostic at write time but schema-aware at read time. The Schemas section of Inspector is where operators see what types have actually been registered, what fields each one carries, which fields define identity, and how that schema has evolved.
Schema list
The list at /schemas shows every registered entity_type with its current schema version, field count, identity rule, and how many entities of that type currently exist. The same numbers back the histogram on the dashboard, but here you can sort by churn, last write, or observation cardinality.
| Type | Version | Fields | Identity | Entities |
|---|---|---|---|---|
| agent_message | v1.4 | 9 | turn_key | 4,910 |
| transaction | v0.9 | 12 | schema_rule | 3,104 |
| contact | v0.6 | 8 | schema_rule | 2,231 |
| task | v0.4 | 7 | canonical_name | 1,556 |
| event | v0.3 | 11 | schema_rule | 902 |
| file_asset | v0.2 | 6 | schema_rule | 612 |
Schema detail, fields & identity
Click a type to drill into its schema. The detail view shows each field's name, inferred JSON type, whether it's part of the identity rule, when it was first observed, and the example values that produced its inferred type. The identity rule itself,schema_rule, canonical_name, or turn_key, is highlighted because it determines how deduplication works at write time.
| Field | Type | Identity? | First seen | Coverage |
|---|---|---|---|---|
| amount | number | identity | v0.1 | 100% |
| merchant | string | identity | v0.1 | 100% |
| billing_period | string | identity | v0.2 | 98% |
| category | string | - | v0.3 | 92% |
| currency | string | - | v0.4 | 100% |
| source_quote | string | - | v0.7 | 61% |
| api_response_data | object | - | v0.8 | 44% |
Schema evolution
Schemas evolve via update_schema_incremental. Adding fields bumps the minor version; removing fields bumps the major version (and removes them from snapshots while preserving the underlying observations). Inspector shows the version history per type with a diff between adjacent versions, so operators can see when a field was introduced, deprecated, or restored.
Identity rules
Three identity bases are exposed:
- schema_rule, a tuple of fields uniquely identifies the entity (e.g.
(amount, merchant, billing_period)fortransaction). - canonical_name, a single human-readable name uniquely identifies the row (common for
contact,company,place). - turn_key, used for chat bookkeeping:
conversation_messagerows resolve per-turn so multiple observations from the same turn collapse to one entity.
Heuristic-name resolution is also surfaced as a fallback identity basis for entities that didn't match a strict rule; the entity list filter for identity_basis uses the same enum.
Suggested fields
When a write introduces a previously-unseen field, the schema registry records it at low coverage. Inspector flags low-coverage fields so operators can decide to: promote them (formalise into the schema), prune them (remove via fields_to_remove), or leave them as ad-hoc metadata. See REST API for the schema mutation endpoints.