Skip to content

I3147 — The effective governance has one digest, computed by one function and shown by the preflight

Compute a digest over the sources of the effective governance, declared once in policy.yaml (project and vendored rules at their versions, profiles, workflows, skills, prompts, scope.yaml, the declared share/schemas entries, the hook wiring in .claude/settings.json and a declared list of governing policy keys), as sha256 over a canonical manifest of (input id, content hash) from working-tree bytes, and show the digest and its manifest in the preflight's governance check and on every entry surface.

BLOCKED wave 0 · p1 · implementation profile · parallel safe

Part of entry-proves-what-it-handed — An episode records the governance and briefing it was handed, and a change is told.

Blocked. This issue cannot start until milestone:entry-proves-what-it-handed is done. The status is derived from that, not declared.

Objective

Compute a digest over the sources of the effective governance, declared once in policy.yaml (project and vendored rules at their versions, profiles, workflows, skills, prompts, scope.yaml, the declared share/schemas entries, the hook wiring in .claude/settings.json and a declared list of governing policy keys), as sha256 over a canonical manifest of (input id, content hash) from working-tree bytes, and show the digest and its manifest in the preflight's governance check and on every entry surface.

Why

On 2026-09-10 the owner asked to see at every start that governance is in force; the assistant's answer named a fingerprint to prove what an agent started under, detect a change and pin handovers. On master the preflight counts rules but no digest exists; intent_binding's plan_revision pins intents only. Proposed in ADR 0181 (An episode records the governance and the briefing it was handed, each by one digest) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c103#2.

Current state

environment/cache.rs fingerprints cache tiers by path, size and modification time (fingerprint_of); environment/preflight.rs has no governance digest; docs/PREFLIGHT.md 'Governance status' names none.

Desired state

environment.preflight answers governance.digest; the same tree gives the same digest on every surface.

Scope

  • apps/majordomus-cli/src/environment
  • apps/majordomus-cli/src/capability/builtin/environment.rs
  • .ai/repo/policy.yaml
  • docs/PREFLIGHT.md

Out of scope

  • Recording the digest per episode (I3148)

Dependencies

None. This issue is a root of the graph.

What waits on this

Acceptance criteria

  • Editing a rule changes the digest
  • Touching a timestamp or a non-governance file does not
  • The input set is declared once and the preflight names it

Validation

  • cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test preflight
  • bash test/run.sh 190_entry_is_automatic

Evidence required

  • test_governance_digest_is_stable

Evidence

None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.

Timeline

started
—
verified
—
completed
—

Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.

Canonical record: .ai/repo/project/issues/I3147.yaml. Read it back with majordomus plan show I3147.

Searches the titles and descriptions of every page this site publishes.