SectionCurrent referenceStatusdescriptiveLast reviewed2026-08-19

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:

  1. Write down the disputed claim in one sentence.
  2. Classify the claim type/domain.
  3. Resolve the registered owner, if one exists.
  4. Inspect current implementation/live evidence if the claim depends on it.
  5. Determine which layer is stale or whether the ownership map is incomplete.
  6. 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:

  1. AGENTS.md;
  2. ops/state/truth/sources.json;
  3. the registered owner(s) for the question;
  4. live Git/GitHub when volatile state matters;
  5. current code/tests when implementation matters;
  6. generated maps for navigation;
  7. historical/memory material only when needed.

This map exists to teach that resolution process. It does not compete with the machine-readable ownership spine.