Skip to content

skill lost: a body that is not its own — and the prototype that was right because one alternative was dead - #3214

Merged
gHashTag merged 18 commits into
masterfrom
loop/a-body-that-is-not-its-own
Sep 5, 2026
Merged

gHashTag merged 18 commits into
masterfrom
loop/a-body-that-is-not-its-own

Conversation

@gHashTag

@gHashTag gHashTag commented Sep 5, 2026

Copy link
Copy Markdown
Collaborator

#3212 repaired one entry carrying another's body, found by accident while fixing something else. The
question it left: was that a case or a class?

tri skill lost now asks it — an entry whose body names none of its own identifiers and does name
one another entry owns.

Measured: 1 on the damaged base, 0 on the repaired tree, 0 in SKILL.md across 524 sections.

The naive question is useless here

58 of the 63 docs/NOW.md entries with a wave number in the heading mention some other wave,
because an entry routinely points at the next one. Naming none of its own is what discriminates —
SW-conformance — gf48 carried 39 lines of Wave Loop 434 and never said gf48.

The prototype gave the right number because one alternative was dead

The python sketch reported 1 on the damaged file. Ported to Rust it reported 49. One
alternative accounts for it:

python:  \b(?:…|#(\d{3,5}))\b

\b# requires a word character immediately before the #. There is never one — that branch
matched nothing, ever. The sketch silently compared wave and format identifiers only, which
happens to be the correct population, and reported the correct number while carrying a rule it
never applied
.

Had it shipped, the code would have said "issue numbers count" and the behaviour would have said
otherwise, until someone fixed the regex and the tool changed its mind for no visible reason.

Issue numbers are now excluded deliberately, with that measurement written beside the pattern —
with #NNNN live, 49 of 312 entries flag and the one real case is buried.

Both fixtures were wrong, and both tests were right to fail

  • XADC_LIVE_W434_OPERATING_POINT does not match: the _ before W434 is a word character, so
    \bW fails. What made the live case detectable was the plain `wave-loop-434` on its branch line.
  • A fixture with entry 889's body naming 888 and 890 but not 889 asserted no flag — which is
    exactly the shape that should flag.

Two fixtures, two failures, both because the fixture was unrepresentative and the code was right.
Same lesson as #3210, one pass later.

744 crate tests. Five mutants run, all killed — two only after the fixtures were corrected, and two
more (call site never asks; foreign ids not required to be owned by a heading) after the first
round left them alive.

SKILL 568. Refs #3195

SKILL 556 found two headings in docs/NOW.md with nothing under them, at
lines 6359 and 6361. Repairing them turned up a third entry the
empty-body check could not see, because it HAD a body -- just not its
own.

    SW-conformance — gf96          0 lines  ->  its own 23
    Wave Loop 434 — boot-evidence  0 lines  ->  its own 45
    SW-conformance — gf48          39 lines, all W434's  ->  its own 17

Fifty lines below its heading, gf48 carried "### What landed (Variant B
-- board reachable, P12/relay still blocked)" and
XADC_LIVE_W434_OPERATING_POINT: FPGA boot evidence under a software
conformance promotion. All 39 of its lines came from W434's 45, and six
of W434's were gone outright.

SKILL 556 reported "31 of Wave Loop 434's 34 substantial lines are still
elsewhere in the file, so most of that content survives". Both halves are
true and the conclusion is wrong: they survive under the WRONG heading,
which is misattribution and worse than loss. Nineteen of the thirty-four
appear exactly once and are W434-specific, and every one of those sat
under gf48; the other fifteen appear up to twenty-five times each and are
boilerplate. "Still in the file" is the same unit error as "50 red
workflows" -- the container is not the claim.

Restoring gf48 from its last NON-EMPTY body would have restored the
damage: at 5057850 that body was W434's. The selector has to be
content, not emptiness -- the last version whose first lines actually
mention `gf48 (GoldenFloat48`. Same shape as SKILL 559: absence is not
the discriminator, identity is.

Verified: 310 headings before and after, 0 titles lost, 0 empty bodies,
exactly 3 bodies changed.

SKILL 565.

Refs #3195
SKILL 565 found one entry carrying another's body, by accident, while
repairing something else. The question left was whether that was a case
or a class. This asks it: an entry whose body names NONE of its own
identifiers and does name one another entry owns.

Measured: 1 on the damaged base, 0 on the repaired tree, 0 in SKILL.md
across 524 sections.

The naive question is useless here. 58 of the 63 docs/NOW.md entries with
a wave number in the heading mention some OTHER wave, because an entry
routinely points at the next one. Naming none of its own discriminates.

THE PROTOTYPE GAVE THE RIGHT NUMBER FOR THE WRONG REASON. The python
sketch reported 1 on the damaged file; ported to Rust it reported 49. The
difference is one alternative: `\b#` requires a word character
immediately before the `#`, and there is never one, so that branch
matched nothing ever. The sketch silently compared waves and formats
only -- which happens to be the correct population -- and reported the
correct number while carrying a rule it never applied. Had it shipped,
the code would have said "issue numbers count" and the behaviour would
have said otherwise until someone fixed the regex, at which point the
tool would have changed its mind for no visible reason.

Issue numbers are now excluded deliberately, with that measurement
written beside the pattern.

Both test fixtures were wrong and both tests were right to fail:
XADC_LIVE_W434_OPERATING_POINT does not match, because the `_` before
W434 is a word character and the pattern is anchored on a word boundary
-- what made the live case detectable was the plain `wave-loop-434` on
its branch line. And a fixture with entry 889's body naming 888 and 890
but not 889 asserted no flag, which is exactly the shape that should
flag.

SKILL 568.

Refs #3195
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-09-05 00:20:07 UTC

Summary

Status Count
Total Open PRs 14
PRs with Failing Checks 11
PRs with All Checks Green 3
READY 1
FAILING 11
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=3c8c4b4c629b != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

…ns on sets

644 identifier occurrences visible to the shipped matcher, 988 to a wider
one: 35% invisible, 79 of them the underscore form W<nnn> inside a longer
identifier. Real, and the wrong number.

The check operates on SETS. Those 344 extra occurrences buy FOUR extra
distinct identifiers (339, 470, 825, 883); only 10 of 310 entries have a
different body id-set; and the verdict is 0 on the repaired file and 1 on
the damaged one under both matchers.

Constructed the blind spot by hand as well -- strip the single plain
 line from the damaged entry, leaving underscore forms
only. Both matchers still find it: the body names W431 and W432 in prose.
The predicted blind spot has no instance in this repository.

Declined. Widening costs a false-positive surface and buys nothing
measurable. The audit's value was not the answer but learning that the
worry was counted in occurrences while the thing it threatened was set
membership -- SKILL 535 turned on the instrument instead of the report.

SKILL 571.

Refs #3195
The message of b299090 lost a literal. It was written in a heredoc that
the shell expanded, and the phrase in backticks -- the branch line
wave-loop-434, spelled with backticks around it -- was run as a command
rather than quoted. The sentence now reads "strip the single plain / line
from the damaged entry".

The intended sentence: strip the single plain wave-loop-434 line (the one
on the entry's Branch: row) from the damaged entry, leaving only the
underscore forms. Both matchers still find it.

Fourth time in this session that backticks inside a double-quoted or
heredoc string have been expanded. It is recorded in my notes and I wrote
it anyway; the note now says to use a quoted heredoc delimiter for any
message containing backticks, which is what this one uses.

The commit cannot be amended -- force-push is forbidden here -- so this
is the correction of record.

Refs #3195
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-09-05 00:44:24 UTC

Summary

Status Count
Total Open PRs 13
PRs with Failing Checks 11
PRs with All Checks Green 2
READY 0
FAILING 11
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=7f1f58f33681 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-09-05 01:14:15 UTC

Summary

Status Count
Total Open PRs 13
PRs with Failing Checks 11
PRs with All Checks Green 2
READY 0
FAILING 11
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=6d3d457606a6 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

…ong one

SKILL 571 asked in which unit a check DECIDES against the unit a reader
AUDITS it in, and declined to widen a matcher because the two agreed. A
fan-out over the whole CLI asked that everywhere. The strongest survivor
is in the code that pass wrote.

`bodies()` keys by section title -- correct for the history walk, since a
title is the identity that survives renumbering. Every OTHER question was
asked over that map too. A repeated heading text is one key, and the
later insert OVERWRITES, so only the last copy's body is ever examined.

Measured on docs/NOW.md: 312 heading lines, 310 distinct texts.
`Honesty limits (BINDING)` at 1479 and 1708; a `Wave Loop 777` subject at
4504 and 4601. The command printed "present on origin/master 310" for a
312-heading file and asked "does every heading have a body?" over 310
seats -- while four comments in that same source file said 312.

I measured 312-vs-310 in SKILL 556, wrote it into the prose, and then
built the tool on the map that collapses them.

The verdict was right by luck: all four colliding occurrences have bodies
(30/18 and 34/34 non-blank), so hollow is 0 either way. It flips the
first time a repeated subject's EARLIER copy is bare.

Fixed by separating the two questions instead of picking one:

    titles ever written    792
    headings on origin/master 312   (## lines)
    distinct titles        310   (what the history walk compares)

Hollow and misattribution now run over occurrences(), which collapses
nothing; the history walk keeps the title map, because that is what makes
renumbering invisible to it.

Both structural tests failed again and both were right to -- second time
in two passes that restructuring a guard broke the test pinning it. They
now assert the ARGUMENT rather than the call, so two of the three mutants
no longer compile.

SKILL 577.

Refs #3195
@gHashTag

gHashTag commented Sep 5, 2026

Copy link
Copy Markdown
Collaborator Author

Update: the units fan-out found this PR's own code

A workflow swept the whole CLI asking "in which unit does this count DECIDE, and in which unit would
a reader AUDIT it?"
— the question from SKILL 571. The strongest survivor is in the code this PR
adds.

bodies() keys by section title. That is correct for the history walk — a title is the identity that
survives renumbering — and every other question was asked over that map too. A repeated heading
text is ONE key, and the later insert overwrites, so only the last copy's body is ever examined.

Measured on docs/NOW.md:

grep -c '^## '            312
distinct heading texts    310

Honesty limits (BINDING) appears at lines 1479 and 1708; a Wave Loop 777 subject at 4504 and 4601.
So the command printed present on origin/master 310 for a 312-heading file, and asked "does
every heading have a body?"
over 310 seats — while four comments in that same source file say
312
.

I measured 312-vs-310 in SKILL 556, wrote it into the prose, and then built the tool on the map that
collapses them.

The verdict was right, by luck

All four colliding occurrences have bodies (30/18 and 34/34 non-blank lines), so hollow is 0 either
way. It flips the first time a repeated subject's earlier copy is bare — routine for an append-only
log of commit subjects that already repeats two of them.

Fixed by separating the questions, not picking one

titles ever written    792
headings on origin/master 312   (## lines)
distinct titles        310   (what the history walk compares)

Hollow and misattribution run over occurrences(), which collapses nothing. The history walk keeps
the title map, because that is what makes renumbering invisible to it. Two questions, two
populations, both printed with their unit.

Both structural tests failed again, and are now pinned to the population

They asserted hollow_headings(&now); the argument became &here. Second time in two passes that
restructuring a guard broke the test pinning it, and the second time that was the test working. They
now assert the argument, not merely the call — so two of the three mutants no longer compile,
which is the strongest form of a killed mutant.

745 crate tests. SKILL 577.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-09-05 01:18:23 UTC

Summary

Status Count
Total Open PRs 13
PRs with Failing Checks 11
PRs with All Checks Green 2
READY 0
FAILING 11
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=9f4e7ae386ba != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-09-05 01:38:48 UTC

Summary

Status Count
Total Open PRs 13
PRs with Failing Checks 11
PRs with All Checks Green 2
READY 0
FAILING 11
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=9f4e7ae386ba != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-09-05 02:01:51 UTC

Summary

Status Count
Total Open PRs 16
PRs with Failing Checks 11
PRs with All Checks Green 5
READY 1
FAILING 11
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=9f4e7ae386ba != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-09-05 02:23:22 UTC

Summary

Status Count
Total Open PRs 17
PRs with Failing Checks 11
PRs with All Checks Green 6
READY 1
FAILING 11
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=9f4e7ae386ba != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@gHashTag
gHashTag enabled auto-merge (squash) September 5, 2026 02:24
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-09-05 02:30:50 UTC

Summary

Status Count
Total Open PRs 17
PRs with Failing Checks 12
PRs with All Checks Green 5
READY 1
FAILING 12
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=9f4e7ae386ba != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@gHashTag
gHashTag merged commit 838fb81 into master Sep 5, 2026
28 of 30 checks passed
@gHashTag
gHashTag deleted the loop/a-body-that-is-not-its-own branch October 26, 2026 06:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant