tri skill lost: the audit that found nothing in SKILL.md, and two bare headings in docs/NOW.md - #3206
Conversation
…s the result
SKILL 552 repaired one section whose body the tooling destroyed. The
obvious next question is whether it was the only one.
`tri skill lost` walks every commit that touched the file, records each
section's body the first time it appeared, and reports any whose body on
the base is a strict PREFIX of that first version. An edit in place is
not a prefix; a truncation is.
Measured over 281 commits and 518 titles ever written:
titles ever written 518
present on master 516
bodies that are a strict prefix of an earlier 40
of those, trailing blank lines only 38
real cut tails 2
Both real cut tails are reorganisations, checked rather than assumed: an
unnumbered `## Writing a gate here` block that moved (a body runs to the
next NUMBERED heading, so a moved unnumbered block reads exactly like a
truncation), and one paragraph. Both still on master.
Both absent titles are deliberate: one rewritten under a longer heading
with 43 of 43 substantial lines alive, and one withdrawn on purpose by
7071b07, whose subject is "withdraw a claim of mine" and whose body
gives the two master runs that refuted it.
Zero unexplained losses. SKILL 550 was the only one, it was caused by the
tool in this session, and it is repaired. A clean audit is what makes
that a closed incident rather than a sample of an unknown population.
The command prints the caveats in its own output, because the next reader
hits the same two false leads: a missing title is not a loss, and a cut
tail is not a loss when an unnumbered block moved.
Eighth pass running whose surviving mutant was the wiring -- `if
truncated(then, n)` replaced with `if false` makes the command walk 281
commits, find nothing by construction, and report health forever, with
all three tests on `truncated` green. FIRST one found by mutating the
call site before writing any test for the helper, which is the rule the
previous seven produced.
SKILL 553.
Refs #3195
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
PR DashboardGenerated at: 2026-09-04 22:37:42 UTC
Summary
Seal Status
|
The plan was "run the same audit over docs/NOW.md". Checked before built:
that file has ZERO numbered headings. 312 of them, every one shaped
`## fix(...)` or `## Wave Loop 434 — ...`. A --file flag on a command
that insists on `## N. ` would have walked 810 commits, found an empty
population, and printed a clean bill of health. The check that stopped it
cost one grep -c, and it is the same question as "does this gate have a
subject".
So the key generalised instead: strip a leading `N. ` when there is one,
otherwise the heading IS the key. Renumbering stays invisible -- half of
what happens to SKILL.md is renumbering -- and NOW.md becomes a
population for the first time.
Found present tense, with no history at all:
2 heading(s) with an EMPTY body on origin/master:
SW-conformance — gf96 promoted to strict SW-bitexact (Closes #1366)
Wave Loop 434 — FPGA boot-evidence live XADC validation ...
docs/NOW.md lines 6359 and 6361 -- two CONSECUTIVE bare headings, nothing
under either. SKILL.md: 0 of 523. Their history says how much: 25 and 59
lines. For Wave Loop 434, 31 of 34 substantial lines survive elsewhere in
the file. For SW-conformance, 2 of 21 survive and the rest is in no
tracked file.
This question is strictly cheaper than the history walk and answers most
of it -- one read against 810 `git show` -- so it is asked first.
NOT published as a finding: the same run says 792 titles ever, 310
present. Those 482 are not 482 losses. NOW.md mixes rotating status
sections meant to be replaced with per-change entries that are not, and
separating them is a different measurement. The command prints the figure
and does not characterise it.
Three mutants, all killed after two survived first: the hollow filter was
inline so an inverted test built its own copy, and section_key's fixtures
had no non-numeric dotted prefix to discriminate `v1. Something`.
SKILL 556.
Refs #3195
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
PR DashboardGenerated at: 2026-09-04 22:44:38 UTC
Summary
Seal Status
|
Update:
|
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
`tri skill renumber` REFUSED this merge, naming the section it would
drop -- the guard shipped two passes ago, working exactly as designed.
I then resolved the conflict with `git checkout --ours`, which takes my
side wholesale and discarded master's new section anyway.
master 518 -> 520 lost 1
Debt a fix cannot retire is a different kind of debt
The guard lives in the tool. My hand procedure walks around it. That is
SKILL 536 -- the fix lived in the tool and the probe went around it --
repeating, with the probe now being a git command rather than a shell
pipeline.
Rebuilt on master by TITLE: 520 sections, nothing of master's lost, all
three of this branch's sections present, ascending, no duplicates.
Refs #3195
PR DashboardGenerated at: 2026-09-04 23:03:29 UTC
Summary
Seal Status
|
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
PR DashboardGenerated at: 2026-09-04 23:04:00 UTC
Summary
Seal Status
|
The previous commit rebuilt this file on master by TITLE, keeping every section present here and absent there. One of them was 554 'Debt a fix cannot retire is a different kind of debt' -- and master did not LACK it, master had rewritten it, in 6a49402 'Correct #3205', because the claim was wrong. A by-title rebuild cannot tell a section I authored from one the base deliberately removed. Both read as 'present here, absent there'. Eight passes of resolving this file that way, and the hole only showed the first time master withdrew something. Two discriminators failed before one worked: - the MERGE BASE is useless once you have already merged: it becomes master's head, and both sections look equally new. - ANCESTRY is useless because master squashes: the commit that introduced the withdrawn section is not an ancestor of master, and neither are mine. What works is master's own HISTORY of the text: git log origin/master -S'<title>' -- SKILL.md 'Debt a fix cannot retire' -> 2 commits: 6d333d3 added it (#3205), 6a49402 removed it (#3207). My two sections -> 0 commits each. A title master's history has ever held, but its head does not, was taken out on purpose. 520 sections, nothing of master's lost, nothing withdrawn resurrected. Refs #3195
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
PR DashboardGenerated at: 2026-09-04 23:06:31 UTC
Summary
Seal Status
|
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
PR DashboardGenerated at: 2026-09-04 23:06:55 UTC
Summary
Seal Status
|
#3203 repaired one section whose body the tooling destroyed. The obvious next question is whether it
was the only one.
tri skill lostasks it: walk every commit that touched the file, record each section's body thefirst time it appeared, and report any whose body on the base is a strict prefix of that first
version. An edit in place is not a prefix. A truncation is.
Measured over 281 commits and 518 titles ever written
Both real cut tails are reorganisations, checked rather than assumed:
Renaming a CI job silently breaks branch protection, −21 lines. What left was an unnumbered## Writing a gate hereblock and its list. A body runs to the next numbered heading, so anunnumbered block that later moved elsewhere reads exactly like a truncation.
grepfinds it onmaster.
Emitter-class repair, −5 lines: one paragraph, still on master.Both absent titles are deliberate, and both were read before being judged:
What to do when the fix is behind a sealwas rewritten under a longer title — 43 of its 43substantial lines live on master under
… -- and how to check it is.A gate that never runs on master has no baselinewas withdrawn on purpose, by7071b071,whose subject is "withdraw a claim of mine" and whose body gives the two master runs that
refuted it.
Zero unexplained losses
§550 was the only one, it was caused by the tool in this session, and it is repaired. A clean audit
is what makes that a closed incident rather than a sample of an unknown population.
Three ways this audit could have lied
real ones under an artefact of where a section ends.
grepeach settled it.The audit's value was entirely in the four checks that turned findings back into non-findings, so
the command prints those caveats in its own output — the next reader hits the same two false leads.
Eighth wiring mutant — and the first found before the helper was tested
if truncated(then, n)→if falsemakes the command walk 281 commits, find nothing byconstruction, and print a clean bill of health for any file forever, with all three tests on
truncatedgreen.This one was found by mutating the call site first, before writing a single test for the helper —
which is the rule the previous seven produced. The rule works, and it took seven repetitions to
write down.
733 crate tests. SKILL 553. Refs #3195