v0.5.0 — typed annotations
Typed name/value annotations on graph entities — assumptions, questions, notes, observations, comments, and custom types — with the semantics services need to treat them differently.
Typed annotations
- One
typefield on each annotation (no enum): fixed typesnote/observation/comment(informational),assumption/question(advisory),community(system-derived), plus arbitrary custom types stored + queried identically. advisoryis computed from the type —assumption/questionsurface asadvisory: trueso an agent never reads them as fact (R7). Confidence keeps its own meaning.- Stored on the existing annotations table (one additive column); idempotent migration; pre-0.5 untyped annotations read back as
note. Multiple per entity, stableSymbolIdkeying.
Surfaces
- CLI:
annotate --type <t> --key K --value V;annotations <name> [--type <t>] --json;annotations+annotation_summary {count, by_type, has_advisory}innodes --jsonandsource --json. clusters --annotatewrites each symbol's community as a system-authoredcommunityannotation (opt-in; no mutation without the flag).- MCP:
RetrieveEntityreturnsannotations+annotation_summary+ per-itemadvisory, capped at 20/entity (advisory-class first;countis the true total).
The known types are service conventions, never a storage match — a new framework or custom type is data, not a core change.
Gates
cargo build --workspace (0 warnings) · cargo test --workspace (44 suites, 0 failures, GraphStore conformance covers typed annotations on both stores) · cargo clippy --workspace --all-targets -- -D warnings · cargo fmt --all --check — all green at the tag.
Consumer contract: docs/recon/annotation-consumer-spec.md.
🤖 Generated with Claude Code