Give each restated rule one owner
Eight rules were written out in two skills each, which is the shape
references/prose-register.md warns about: a rule copied to a second place is
a rule that can drift. Each now sits with the skill that owns the mechanism, or
with the tracked file that holds it, and the second site names that owner
rather than restating it.
What moved
| Rule | Kept by | Routes from |
|---|---|---|
| The GDB stub's refusal of x86_64 | elfuse-debug | elfuse-guest-abi |
What check-atomics.py cannot see | elfuse-conventions | elfuse-security |
| A proof binds the arithmetic, not its callers | elfuse-verify | elfuse-security |
| The lock ordering record | elfuse-syscall | elfuse-conventions, elfuse-refactor, elfuse-security |
| The change-area-to-command table | docs/testing.md | elfuse-syscall, elfuse-refactor |
| Recompute a number, take the baseline first, name the lane that could not run | elfuse-verify | elfuse-refactor |
| Where a new file or shared declaration goes | elfuse-conventions | elfuse-syscall |
Two skills also stated a rule twice inside themselves: elfuse-security on the
lock record, once in the shared-pages rule and once in the gate list beneath
it, and elfuse-refactor on make lint never having been clean.
What this does not do
It does not make the skills shorter. 2234 lines to 2229, because a pointer
costs about what the restatement cost. The saving is one home per rule rather
than bytes.
The volume is in elfuse-conventions at 402 lines, elfuse-security at 310
and elfuse-guest-abi at 291, and there it is subject matter rather than
repetition. Cutting it means merging skills or dropping sections, which changes
which skill fires on which task, so it is a different change from this one.
One candidate is left in place deliberately. "This skill is a working summary.
These are tracked and survive a fresh clone, so prefer them when the two
disagree:" appears verbatim in five skills, and looks like the clearest
boilerplate in the set. Skills load independently, so a reader who loaded only
elfuse-debug would lose what its authoritative sources list is for.
Verification
make check-skill-refs resolves every path, target, section and
cross-reference across the 12 files, and scripts/check-commit-log.sh accepts
all five commits. Documentation only: no build or test target reads these
files.
Summary by cubic
Consolidates duplicated rules so each has a single owning skill. Rules that were restated in more than one skill now live only with the skill that owns their mechanism; other sites name that skill instead of repeating the rule, so copies can no longer drift.
elfuse-syscallowns the lock ordering record;elfuse-verifyowns the validation table, proof limits, and reporting rules;elfuse-conventionsowns file placement and thecheck-atomics.pyblind spot;elfuse-debugowns the GDB stub refusal.- Two skills also dropped rules they had stated twice inside themselves.
- Skills stay nearly the same length (2234 → 2229 lines) because a pointer costs about what the restatement did; the win is one home per rule, not fewer bytes.
- One boilerplate block ("This skill is a working summary...") deliberately remains in five skills because each skill loads independently and a reader of only one would not know what its sources list is for.
- Documentation only;
make check-skill-refsresolves every path, target, section, and cross-reference across the 12 skill files.