Give each restated rule one owner

AL
12d ago
+33-34

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

RuleKept byRoutes from
The GDB stub's refusal of x86_64elfuse-debugelfuse-guest-abi
What check-atomics.py cannot seeelfuse-conventionselfuse-security
A proof binds the arithmetic, not its callerselfuse-verifyelfuse-security
The lock ordering recordelfuse-syscallelfuse-conventions, elfuse-refactor, elfuse-security
The change-area-to-command tabledocs/testing.mdelfuse-syscall, elfuse-refactor
Recompute a number, take the baseline first, name the lane that could not runelfuse-verifyelfuse-refactor
Where a new file or shared declaration goeselfuse-conventionselfuse-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-syscall owns the lock ordering record; elfuse-verify owns the validation table, proof limits, and reporting rules; elfuse-conventions owns file placement and the check-atomics.py blind spot; elfuse-debug owns 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-refs resolves every path, target, section, and cross-reference across the 12 skill files.