R77.D contract — count-reconcile policy for CLAUDE.md §9.2
This contract binds the R77.D executor. It names the authoritative data, the measurement protocol, and the forbidden surfaces. The packet (next chain step) translates this into exact edits.
1. Authority
For the §9.2 zoned manifest, the only authoritative values are the output of:
find <dir> -name "*.md" -type f | wc -l
run from the worktree root at commit e2305277, with no filtering. Parent-task dispatch numbers, memory claims, prior CLAUDE.md values, and GitHub Pages counts are advisory, not authoritative. Where they disagree with the find output, the find output wins.
2. Count contract per row
For each top-level directory listed in §9.2, the value in the .md column is:
- Numeric-only by default: a non-negative integer.
- Exceptions preserved:
temp/column contains"1 + scratch"— keeps the+ scratchqualifier because scratch files are untracked and churn per-session..vscode/column contains"2 tracked"— legacy idiom covering two files even though only one is.md. Keep a qualifier form but reflect the correct.mdcount. See §4.3.
No tilde approximation (~N) is acceptable when an exact count exists at a known SHA. Drop existing tildes.
3. In-scope edits
R77.D is authorized to edit ONLY:
| Surface | What may change |
|---|---|
CLAUDE.md §9.2 table |
numeric values in the .md column for rows where measured reality differs from the displayed value |
CLAUDE.md §9.2 table |
the .vscode/ cell prose, to reflect 1 tracked (+1 .json) instead of the misleading 2 tracked |
CLAUDE.md footer block |
append a new *Updated R77 Wave 2 — ... paragraph, below the existing R75 Wave I paragraph; do not remove or rewrite prior paragraphs |
4. Out-of-scope surfaces
R77.D MUST NOT touch:
4.1. Structural columns
- The
Pathcolumn (filename/anchor): unchanged. - The
Zonecolumn (CANON / HERITAGE / MIRROR / SCRATCH / VENDOR): unchanged. - The
Rolecolumn (narrative description): unchanged, even if numbers in the prose drift. - The
Edit rulecolumn: unchanged.
4.2. Rows themselves
- Do not add a new row.
- Do not remove a row, even if its measured count is
0(see.venv-tools/). The zoned manifest is a governance document; row removal is a structural decision. - Do not reorder rows.
4.3. .vscode/ prose
The cell currently says 2 tracked. The numeric reality is 1 .md + 1 .json tracked. The contracted form is 1 tracked (+1 .json) — preserves the “two files are tracked” idea while making the column numerically coherent. This is the only prose deviation allowed in this chain.
4.4. Adjacent sections
Under no circumstance may this chain touch:
§9.1(Phase 0 code targets) — R77 ships nosrc/code.§9.3(Root-level files) — R77 added no root file.§9.4(Before citing a fact) — policy prose.§10(System identity) — maturity claims are handled by R75 Wave I already.- Any other section (
§1–§13body text or its two existing footer paragraphs).
4.5. External surfaces
MEMORY.md— user auto-memory, not repo canon. Out of scope. A memory refresh is a PM-scheduled action, not an executor action.docs/inventory-r74-2.md— already deleted; do not recreate..agents/skills/<any>/SKILL.md— canon skill docs, out of scope..claude/skills/<any>/SKILL.md— mirror zone, out of scope per CLAUDE.md §9.2 edit rule.
5. Rollback protocol
A single commit implements the §9.2 numeric edits. A separate commit updates the footer. If any later step fails:
- Revert:
git reset --hard origin/mainon the feature worktree, delete branch withgit branch -D, start over. This is safe because the branch has no downstream consumers until the PR opens.
6. Acceptance criteria
The implementation commit (chain Step 4) is accepted if and only if:
git diff HEAD~1 HEAD -- CLAUDE.mdshows exactly the cells listed in §3 above, nothing else.npm run buildgreen (no code changes, should be a no-op for the build).npm run lintgreen.npm testreports 1085/1085 tests passing (or 1084; both are live baselines — verify match the main-branch baseline ate2305277).
7. Verification grade
Documentation-only executor task, no colibri_code impact, no proof_grade requirement. Standard §7 writeback (task_update + thought_record) only. No audit_verify_chain / merkle_finalize required.