Home / Projects / Orchestrata Ultimate / Decisions / ADR index / ADR-0096

ADR-0096: ADR body-drift dispositions — the graph sync treats wiki pointer entries as pointers, the three-way check compares bodies, ADR-0073's graph body is re-baselined once to its docs body, and the post-acceptance edits of ADR-0004 and ADR-0019 are ratified as their accepted text

field value
Status Accepted — Accepted (ruling, Mohamed, 2026-10-13, verbatim: "fix the sync and the check, re-baseline 0073, ratify 0004 and 0019")
Date 2026-10-13
Register factory (docs/adr, 4-digit ids)
Source docs/adr/0096-adr-body-drift-dispositions-sync-skips-wiki-pointers-check-compares-bodies-0073-rebaselined-0004-and-0019-ratified.md — permalink at 639cc9f62 (unchanged on master since that commit)
Wiki register entry ADR-0096 (wiki status: Accepted)

← ADR-0095 · ADR-0097 →

The record

Status: Accepted (ruling, Mohamed, 2026-10-13, verbatim: "fix the sync and the check, re-baseline 0073, ratify 0004 and 0019") · Date: 2026-10-13 · Applies ADR-0046 (three homes), ADR-0047 (two registers), ADR-0085 (every ruling recoverable and logged) · Evidence: scratchpad/adr-body-drift-audit-2026-10-13.md (auditor, 36 ids, graph read live)

Context

The 2026-10-13 run of scripts/sync_architecture_to_graph.py --adrs refused 36 BODY_DRIFT writes against Accepted ArchitectureDecision nodes while scripts/check_adr_graph_sync.py reported "120 ids examined, no drift". The audit measured:

Decision (Mohamed's ruling, restated as the executable rule)

  1. Fix the sync. The wiki pass recognises a pointer entry (an entry whose body is one paragraph ending in Full record: docs/adr/<file>) and does not hash or write a body for it; factory-register ids are written from docs/adr/ only. parse_adr_file reads a bare Status: line. The immutability guard is unchanged.
  2. Fix the check. check_adr_graph_sync.py compares body_sha between the docs body and the graph for every factory id, treating wiki pointers as pointers, and reports body drift as a violation. A green check now means titles, presence and bodies agree.
  3. Re-baseline ADR-0073 once. After rule 1 lands, the graph node for ADR-0073 is rewritten from its docs body (full context, decision, alternatives, consequences, status Accepted) through an explicit, logged, single-id re-baseline path that names this ADR as its authority; the path is not a general override and refuses any id this ADR does not name.
  4. Ratify ADR-0004 and ADR-0019 as they stand. Their current docs text, including the post-acceptance additions named in Context, is the accepted text; the graph already holds it; no superseding ADR is written. Future in-place edits of Accepted bodies remain forbidden; this ratification is retrospective and closed.
  5. Hash policy unchanged. Provenance stays inside the hashed body for now (Mohamed did not rule on excluding it); the sync's parser fix in rule 1 is scoped to pointers and the status line.

Alternatives rejected

Consequences

Provenance

Mohamed, 2026-10-13, verbatim in Status, after the coordinator presented the audit's four decisions. Audit by a read-only auditor agent the same day; scratch data (graph_adrs.json, analysis.json, wiki_cmp.json, wiki_hist.json) beside the report. Recorded by the coordinating session; the code change is delegated under the brief above.

Rulings cited

None.

Specs cited

None (or no spec page exists for the ones named).