Three findings, one file.
1. Two readers of the same file, three apart
tri skill check -> 532 numbered sections
tri skill claims -> 535 numbered sections
skillnum.rs has five readers that walk ## N. Title headings. Three
carry the CommonMark fence rule; section_bodies and section_ranges carried
none. Three section headings in SKILL.md are quoted inside code fences as
evidence — sections about duplicate numbering that show the duplicate — and
those two readers counted them.
Fixed by one fence_toggle helper used by all five, so the next repair cannot
reach only some of them. Both now read 532.
The rule matters and is easy to get wrong. An opening fence may carry an info
string; a closing fence may not. A naive toggle on every ``` line reads
441 sections in this file — 91 fewer than the truth. I wrote that naive
toggle while investigating and it told me there were 94 phantom sections; the
real number is 3. The tests pin the distinction.
2. Three numbering collisions, and a gate that has been failing for six runs
tri skill check exits 1 on master:
section 567 appears 3 times
section 568 appears 2 times
section 567 comes after 569 -- the file reads out of order
cli-tri.yml does call it (step "No two skill sections share a number") and
has failed on master for six consecutive runs. It is not one of the four
required contexts, so nothing blocks and the corruption stays.
The duplicates are mine: concurrent branches each numbered from their own base
and the union merges kept both sides. Renumbered to 570/571/572 by line, so a
heading with matching text elsewhere could not be hit. Title set before and
after: 535 = 535, zero missing, zero invented; the diff is exactly three lines.
skill check now exits 0.
This is #3236's cost showing up as data corruption rather than CI minutes:
three sections shared a number, so "see 567" pointed at any of three things.
3. Reported, not fixed: my own lessons are filed by position, not topic
## N. Title is the numbered knowledge base (535). ### Title is a
sub-heading level (140 across 63 sections, up to 7 each) — a normal convention.
Every lesson I appended over the last several passes is a ### at end of
file, so it lands under whichever numbered section happens to be last.
Sections 567 and 568 now carry 7 and 6 sub-headings on unrelated topics.
Consequences: those lessons are not counted by tri skill claims, not
validated by tri skill check, and a reader following a cross-reference to 568
finds six unrelated lessons under it. The numbered base has not grown in
several passes despite the additions.
Not fixed here because promoting them to numbered sections is a decision about
what belongs in the base and at what granularity, and doing it silently inside
a numbering repair would be the wrong shape.
Three findings, one file.
1. Two readers of the same file, three apart
skillnum.rshas five readers that walk## N. Titleheadings. Threecarry the CommonMark fence rule;
section_bodiesandsection_rangescarriednone. Three section headings in SKILL.md are quoted inside code fences as
evidence — sections about duplicate numbering that show the duplicate — and
those two readers counted them.
Fixed by one
fence_togglehelper used by all five, so the next repair cannotreach only some of them. Both now read 532.
The rule matters and is easy to get wrong. An opening fence may carry an info
string; a closing fence may not. A naive toggle on every
```line reads441 sections in this file — 91 fewer than the truth. I wrote that naive
toggle while investigating and it told me there were 94 phantom sections; the
real number is 3. The tests pin the distinction.
2. Three numbering collisions, and a gate that has been failing for six runs
tri skill checkexits 1 on master:cli-tri.ymldoes call it (step "No two skill sections share a number") andhas failed on master for six consecutive runs. It is not one of the four
required contexts, so nothing blocks and the corruption stays.
The duplicates are mine: concurrent branches each numbered from their own base
and the union merges kept both sides. Renumbered to 570/571/572 by line, so a
heading with matching text elsewhere could not be hit. Title set before and
after: 535 = 535, zero missing, zero invented; the diff is exactly three lines.
skill checknow exits 0.This is #3236's cost showing up as data corruption rather than CI minutes:
three sections shared a number, so "see 567" pointed at any of three things.
3. Reported, not fixed: my own lessons are filed by position, not topic
## N. Titleis the numbered knowledge base (535).### Titleis asub-heading level (140 across 63 sections, up to 7 each) — a normal convention.
Every lesson I appended over the last several passes is a
###at end offile, so it lands under whichever numbered section happens to be last.
Sections 567 and 568 now carry 7 and 6 sub-headings on unrelated topics.
Consequences: those lessons are not counted by
tri skill claims, notvalidated by
tri skill check, and a reader following a cross-reference to 568finds six unrelated lessons under it. The numbered base has not grown in
several passes despite the additions.
Not fixed here because promoting them to numbered sections is a decision about
what belongs in the base and at what granularity, and doing it silently inside
a numbering repair would be the wrong shape.