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
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
- I3148BLOCKED An episode records the governance digest and the briefing digest it was handed at start
- I3150BLOCKED A handover carries the governance digest it was written under, and resolving it says when governance moved
- I3151BLOCKED Every entry surface reports the same governance digest for one checkout
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.