Source-of-Truth Map
ICN no longer uses one global hierarchy such as "code > state docs > ADRs > maps" for every disagreement. Different sources answer different kinds of questions.
The machine-readable ownership map is `ops/state/truth/sources.json`. This file explains how to use it.
The rule
Classify the claim, then resolve the owner/evidence plane for that claim.
A source can be authoritative for one question and irrelevant for another.
| Claim type | Source/evidence plane |
|---|---|
| Provider-neutral agent operating rules/invariants | AGENTS.md |
| Agent context/memory workflow | registered agent_workflow owner |
| Domain semantics / allowed substitutions / normative contract | that domain's owner in ops/state/truth/sources.json plus accepted decisions it incorporates |
| Implemented behavior | current source code, tests, schemas, generated bytes, and reproducible behavior |
| Current branch/PR/review/CI state | live Git/GitHub |
| Current sprint/task board | registered sprint-state owner |
| Merge readiness/policy | registered merge-policy owner plus live branch protection/checks |
| Repository/worktree topology | registered repo-topology owner |
| Deployment/runtime liveness | the registered operational/private source for that environment |
| Historical rationale | ADRs, PR/issue history, git history, archived design docs, handoffs |
| Generated orientation | project-index/generated artifacts, interpreted as projections of their inputs |
Why there is no universal rank
Code does not own intent
Current code is strongest evidence for what the checkout does. It does not silently redefine a normative semantic contract. If code violates a registered contract, that is a defect or an explicit proposal, not an automatic change in project meaning.
Normative docs do not prove implementation
A closed contract or accepted ADR establishes what is allowed/required. It does not prove the Rust/runtime/deployment implements it.
Live state expires quickly
Branch, PR, review, CI, issue, and runtime state can change while a session is open. Query them live. Do not promote a handoff or generated snapshot into a current-state owner.
Generated maps are projections
Indexes, file records, live-state overlays, website projections, and Agent Context Spine outputs are useful because they compress and route. Their source wins when they disagree.
Memory is historical evidence
Handoffs and model/session memory may preserve exact observations and rationale. They must label observation time and revalidation targets. They never outrank live state or a registered durable owner.
Conflict protocol
When two surfaces disagree:
- Write down the disputed claim in one sentence.
- Classify the claim type/domain.
- Resolve the registered owner, if one exists.
- Inspect current implementation/live evidence if the claim depends on it.
- Determine which layer is stale or whether the ownership map is incomplete.
- Repair only that layer or open a bounded reconciliation issue.
Do not create a synthetic compromise statement just because two sources disagree.
Missing owners
If an important durable claim has no owner in ops/state/truth/sources.json, report MISSING TRUTH OWNER.
A missing owner is not permission to declare the nearest detailed document canonical. Establish ownership deliberately, then update/reregister downstream projections.
Decision-status interpretation
Document status still matters within a domain:
- accepted/canonical/normative: binding only for the scope/domain the document owns;
- living/descriptive: maintained evidence/orientation, not automatically normative;
- proposed/draft/design-direction: intended direction, not ratified behavior;
- superseded/archive/historical: rationale/archaeology, not current guidance;
- generated/
Canonical: no: projection/navigation.
Always read the document's scope. A canonical identity-semantics document is not automatically canonical for deployment, economics, or live state.
STATE.md, PHASE_PROGRESS.md, and status.toml
These remain useful, but their roles are bounded:
docs/STATE.md: historical/current-state narrative from the earlier truth-sync workflow;docs/PHASE_PROGRESS.md: phase-model/history narrative;docs/status.toml: descriptive subsystem assessment with its own evidence/freshness metadata.
None is a universal override for registered domain semantics, current implementation behavior, or live execution state.
Claim labels
When summarizing work, prefer labels that expose the evidence boundary:
normative / design-only;implemented;implemented but partial;library/type/test-only;integrated runtime path;feature-gated;fixture-backed;rehearsal/demo witnessed;deployed — <environment + evidence time>;unknown / requires verification;historical.
Do not let "implemented" silently become "integrated," "deployed," "production-ready," "adopted," or "used by a real institution."
Agent use
A fresh session should normally read:
AGENTS.md;ops/state/truth/sources.json;- the registered owner(s) for the question;
- live Git/GitHub when volatile state matters;
- current code/tests when implementation matters;
- generated maps for navigation;
- historical/memory material only when needed.
This map exists to teach that resolution process. It does not compete with the machine-readable ownership spine.