I1991 — A comment-only edit of the policy regenerates no bootstrap
Derive the policy fingerprint stamped into generated bootstraps from the parsed policy rather than its bytes, so that editing a comment does not rewrite AGENTS.md, CLAUDE.md and GEMINI.md.
DONE wave 0 · p3 · implementation profile · parallel safe
Objective
Derive the policy fingerprint stamped into generated bootstraps from the parsed policy rather than its bytes, so that editing a comment does not rewrite AGENTS.md, CLAUDE.md and GEMINI.md.
Why
OSCILLA db62a1f: a comment-only edit of policy.yaml moved the policy hash (ca779e02f878 to 9535da72e6a6) and rewrote all three bootstraps.
Current state
The stamp hashes the file's bytes (lib/update.sh, apps/majordomus-cli/src/providers.rs).
Desired state
Both renderers hash the same canonical form; a comment edit is a no-op for update.
Scope
- lib/update.sh
- apps/majordomus-cli/src/providers.rs
- apps/majordomus-cli/src/policy.rs
- apps/majordomus-cli/tests/providers_projection.rs
- lib/common.sh
- test/cases
Dependencies
None. This issue is a root of the graph.
Acceptance criteria
- Adding a comment to policy.yaml leaves `majordomus update --dry-run` reporting every target unchanged (update has no --check flag)
Validation
- bin/majordomus plan validate
- MJ_TEST_JOBS=4 bash test/run.sh <the case this issue adds>
Evidence required
- comment_edit_noop_case
Evidence
| covers | type | command | result | at commit |
|---|---|---|---|---|
| comment_edit_noop_case | test | MJ_TEST_JOBS=2 bash test/run.sh 3018_a_comment_in_the_policy_moves_no_bootstrap && cargo test --locked --manifest-path apps/majordomus-cli/Cargo.toml --test providers_projection | tests: 1 passed; test result: ok. 4 passed: the shell's and Rust's normal forms agree (run 2026-10-14 13:30Z on master 4ec504616c plus this change) | 4ec5046 |
Timeline
- started
- 2026-10-14T13:31:22Z
- verified
- —
- completed
- 2026-10-14T13:31:41Z
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/I1991.yaml. Read it back with majordomus plan show I1991.