chore(phase-2.1): delete root Mustfile and Dustfile - #814
Conversation
Phase 2.1 of the reorg plan — the first of the four deletions, taken first
because it is two files and trivially reversible, so it proves the CI story
before anything larger moves.
WHAT AND WHY
Root `Mustfile` (15 lines, YAML `checks:` list) and `Dustfile` (32 lines,
`recovery:`/`generated:`/`templates:` handlers) are extension-less contractiles
sitting at the repository root, superseded by
`.machine_readable/contractiles/{must,dust}/`. The map entry already said so:
from = "Mustfile"
target = "DELETE"
kind = "superseded-contractile"
note = "extension-less contractiles at root, superseded by
machine-readable/contractiles/. Two naming conventions in one tree."
This commit is that map entry being carried out, not a new decision. That note
IS the naming-convention contradiction Phase 2.1 was scheduled to clear.
NEITHER FILE WAS LOAD-BEARING
Both CI consumers of these contractiles already read the dotted copies, and
neither reads the root ones:
scripts/check-mustfile-structure.sh default: .machine_readable/contractiles/must/Mustfile.a2ml
scripts/run-mustfile.sh default: .machine_readable/contractiles/must/Mustfile.a2ml
Both dotted files exist and are untouched. The remaining grep hits for
"Mustfile"/"Dustfile" are prose about the *convention* (`.claude/CLAUDE.md`,
`.githooks/pre-commit`, the Makefile blocker, `validate-a2ml.sh`); no document
links to the root files and no script sources them. `tasks/Mustfile`,
`contractiles/must/Mustfile` and the ~20 others elsewhere in the tree are out of
scope and untouched — this deletes the root pair only.
THE MAP MOVES WITH THE FILES
Gate D is bidirectional (assertion 1: every `from` exists; assertion 2: every
top-level entry is mapped), so deleting the files without deleting their map
entries would have failed assertion 1. Both `[[entry]]` blocks are removed and
`entry_count` goes 120 -> 118 in the same commit — the property that makes Gate D
able to police a deletion at all.
WITNESSES
Gate D [1] all 118 mapped paths exist
[2] all 118 top-level entries are mapped
[3] ok [4] ok
[5] entry_count = 118
GATE D PASSED
Gate A passed 8 failed 0 skipped 2 GATE A PASSED
Gate A is unaffected by design: `standards-map.toml`, `Mustfile` and `Dustfile`
are not named in canon.lock [canon.artifacts] (criteria, gates, applicability,
lifecycle, constitution), so this is not a canon change and no version bump is
required or made.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (3)
💤 Files with no reviewable changes (2)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📜 Recent review details⏰ Context from checks skipped due to timeout. (2)
|
| Layer / File(s) | Summary |
|---|---|
Remove obsolete configuration files Dustfile, Mustfile |
Deletes the recovery and deprecation definitions from Dustfile. Deletes the four mandatory checks from Mustfile. |
Reconcile the standards map standards-map.toml |
Removes the Dustfile and Mustfile entries. Changes entry_count from 120 to 118. |
Priority: ⬇️ Low
Estimated code review effort: 2 (Simple) | ~10 minutes
Change: Other
Suggested reviewers: joshuajewell
Merge Risk: ⚪ Minimal · up to d119d
CI continues to use the replacement contractiles, and the standards map is consistent with the two deletions. No merge-blocking behavior remains.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
| Check name | Status | Explanation |
|---|---|---|
| Title check | ✅ Passed | The title clearly identifies the deletion of the root Mustfile and Dustfile. It matches the main change in the pull request. |
| Description check | ✅ Passed | The description directly explains the deletion, its purpose, scope, map update, and validation results. It is related to the changeset. |
| Docstring Coverage | ✅ Passed | No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0… |
| Linked Issues check | ✅ Passed | Check skipped because no linked issues were found for this pull request. |
| Out of Scope Changes check | ✅ Passed | Check skipped because no linked issues were found for this pull request. |
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
- Commit to this branch
- Create a new PR
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
A rabbit reads each line,
The patch grows clear beneath the moon,
Small changes hop in place,
Tests guard the garden path,
Reviews bloom before the dawn.
Comment @coderabbitai help to get the list of available commands.
|



Phase 2.1 of the reorg plan — the first of the four deletions. Taken first because it is two files and trivially reversible, so it proves the CI story before anything larger moves.
The plan says of this step: "Trivially reversible; two files; clears a naming-convention contradiction. Do it first to prove the CI story." That is what this is.
What and why
Root
Mustfile(15 lines, YAMLchecks:list) andDustfile(32 lines,recovery:/generated:/templates:handlers) are extension-less contractiles at the repository root, superseded by.machine_readable/contractiles/{must,dust}/.This is the map entry being carried out, not a new decision.
standards-map.tomlalready declared it:That note is the naming-convention contradiction Phase 2.1 was scheduled to clear.
Neither file was load-bearing
Both CI consumers read the dotted copies, and neither reads the root ones:
scripts/check-mustfile-structure.sh.machine_readable/contractiles/must/Mustfile.a2mlscripts/run-mustfile.sh.machine_readable/contractiles/must/Mustfile.a2mlBoth dotted files exist and are untouched. The remaining grep hits for "Mustfile"/"Dustfile" are prose about the convention (
.claude/CLAUDE.md,.githooks/pre-commit, the Makefile blocker,validate-a2ml.sh); no document links to the root files and no script sources them.tasks/Mustfile,contractiles/must/Mustfileand the ~20 others elsewhere in the tree are out of scope and untouched — this deletes the root pair only.The map moves with the files
Gate D is bidirectional — assertion 1 requires every
fromto exist, assertion 2 requires every top-level entry to be mapped — so deleting the files without deleting their map entries would have failed assertion 1. Both[[entry]]blocks are removed andentry_countgoes 120 → 118 in the same commit. That bidirectionality is precisely what lets Gate D police a deletion at all.Witnesses
Gate A is unaffected by design:
standards-map.toml,MustfileandDustfileare not named incanon.lock [canon.artifacts](criteria, gates, applicability, lifecycle, constitution), so this is not a canon change and no version bump is required or made.Next
Phase 2.2 — extract
rhodium-standard-repositories/spec/(11 files) to0-canon/rsr/, then delete the surrounding directory (−1,138 files, 43% of the repo). That is the single highest-value change in the plan and is deliberately left to its own PR so this one stays reviewable.Phase 2.3 (the
machine-readable/rename) remains blocked on ruling R-A, and I've flagged a conflict in that ruling for your attention separately.