Skip to content

docs(claude): re-derive the gate table's callers against bh 0.15.0, and replace the citation form that failed (phaze-g9cus) - #538

Merged
SimplicityGuy merged 3 commits into
mainfrom
wt/bead/issue/phaze-g9cus
Aug 25, 2026
Merged

docs(claude): re-derive the gate table's callers against bh 0.15.0, and replace the citation form that failed (phaze-g9cus)#538
SimplicityGuy merged 3 commits into
mainfrom
wt/bead/issue/phaze-g9cus

Conversation

@SimplicityGuy

Copy link
Copy Markdown
Owner

Re-derives the "Boundary → recipe" table's caller citations against the bh actually installed, and replaces the citation form that failed rather than refreshing its digits.

What was wrong

The table cited bh 0.14.0 and seven work.py line numbers. bh 0.15.0 split that module, leaving work.py at 1777 lines, so sed -n "${n}p" returned empty for all seven (1909, 2417, 3557, 2923, 2948, 2972, 3525). They did not point at the wrong code — a wrong citation can be read and recognised as wrong. They dangled: unreadable, uncheckable, and nothing about the table's appearance changed.

What this does

Re-derived all seven by reading each new call site, not by mapping numbers forward or diffing versions. No boundary's resolved recipe changed. The BLOCK → COMMAND half was re-executed against the live ~/.beadhive/config.yaml on 0.15.0 and reproduces exactly; the BOUNDARY → PHASE half stays I, as the table's own discipline requires.

Changed the citation form. Each row now cites module.py::symbol plus the resolver call as written, the bh version sits in the table header, and a one-command recipe regenerates the whole boundary population. A bare line number is a pointer with no redundancy — sed -n '3557p' succeeds against any file long enough — which is this repo's ADR-numbering argument one level down. Not an argument from principle: all seven boundaries changed file and line, and all seven are still findable by symbol and phase literal.

Also in scope, because bumping a version citation without re-checking the claims attached to it is the defect this bead exists to fix:

  • Three sharpeningsmerge/merge-main is a post-land re-test with rollback, postland is molecule-only, union can only fire on a per-bead merge.
  • Group-merge sits outside the negative control. It resolves the bare validate_cmd, no work.validate key can reach it, the schema accepts an inert batch:/check: key, and a batch of parent-less beads lands on main past merge-main. Escalated to HQ as hq-f9w.
  • work.validate_precheck no longer exists in 0.15.0; work.always_run documented in its place.
  • Ledger field list corrected to seven plus a conditional eighth, framed as two of the seven are the key and five are not, and stated as a property of the entry rather than of replay — with the command that answers it, and a note on why --git-common-dir is load-bearing.
  • Stopped re-enumerating the ledger's fields in two further sections (separate commit, droppable on its own). Both listed six fields, one as an emphatic "Take from the ledger only what it stores". Pointers replace the lists; the arguments around them are untouched.
  • A merge-main bounce that ran zero tests is an unmeasured gate, not a red one — cited as a dated observation, with the general form: a gate is RED only if its own pytest summary line says so.

Evidence

Three gate runs, each forced by a base move rather than by rework. The last, quoted from the log body:

phaze test database: 'phaze_bhcite_bcfa3043_test' on localhost:5433 (from TEST_DATABASE_URL, exclusive)
🎯 selector: escalate 1 changed file(s) have no coverage, no test reaching them and no paired test: CLAUDE.md
== 8038 passed, 3 skipped, 180 deselected, 96 warnings in 1264.05s (0:21:04) ===
TOTAL                                               18199    169   3922    141  98.56%
Required test coverage of 95.0% reached. Total coverage: 98.56%
GATE_EXIT=0

Submit replayed that verdict rather than re-running it:

✓ validation verdict reused (sha 4976dfc, tree e1b24a2, recorded 2026-08-25T12:33:31-07:00)

Reviewer notes

  • The verbatim operator question and two dated measurements keep their 0.14.0 citations, with re-verification appended rather than substituted. Editing a quoted question so the asker appears to have said something they did not would falsify the durable record; a measurement is a property of a run at a time. Correct a standing claim, preserve a dated one.
  • docs/design/0016-transferred-model-verification.md §3.3 describes this table's pre-repair state and explicitly defers the fix here ("Tracked as phaze-g9cus; do not repair them from here"). Its Consequence row reads present-tense and will describe a state that no longer exists once this lands. Left alone deliberately — an ADR is a dated analytical record, and it points at this bead — but flagging it for whoever next touches that file.

🤖 Generated with Claude Code

https://claude.ai/code/session_01GazEx6kCcyQuRvifWb3aBF

SimplicityGuy and others added 3 commits August 25, 2026 12:11
…haze-g9cus)

The "Boundary -> recipe" table cited bh 0.14.0 and seven `work.py` line
numbers. bh 0.15.0 split that module, leaving `work.py` at 1777 lines, so all
seven numbers were past EOF: `sed -n "${n}p"` returned empty for every one.
They did not point at the wrong code, they dangled -- unreadable and
uncheckable, with nothing about the table's appearance changed.

Re-derive all seven by reading each new call site rather than mapping numbers
forward. No boundary's resolved recipe changed; the BLOCK -> COMMAND mapping
was re-executed against the live config on 0.15.0 and reproduces exactly.

Replace the citation form rather than refreshing the digits: `module.py::symbol`
plus the resolver call as written, the bh version in the table header, and a
command that regenerates the whole boundary population. A bare line number is a
pointer with no redundancy, so nothing can check it -- this file's
ADR-numbering argument one level down.

Also:
- three sharpenings: merge/merge-main is a POST-land re-test with rollback,
  postland is molecule-only, union can only fire on a per-bead merge
- group-merge sits outside what the five pinned keys can cover; the schema
  accepts an inert `batch:`/`check:` key, and an ad-hoc batch lands on main
  past `merge-main`. Escalated as hq-f9w
- `work.validate_precheck` no longer exists; `work.always_run` documented
- ledger fields corrected to seven plus a conditional eighth, with the
  two-of-seven-are-the-key framing
- a `merge-main` bounce that ran zero tests is an unmeasured gate, not a red one
- the fixed-enumeration trap generalised alongside the line-number one

The two dated measurements and the verbatim operator question keep their 0.14.0
citations, with re-verification appended: correct a standing claim, preserve a
dated one.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GazEx6kCcyQuRvifWb3aBF
…phaze-g9cus)

The previous wording said no verdict in the ledger holds test counts "even in
principle" -- a standing claim about a permanent property. It was true when
measured (0 of 49) and false the same day (1 of 56): a hive opts into the drop
zone from its own test config, and the field is per-entry, so both shapes
coexist and nothing rewrites old entries.

Restate it as a property of the ENTRY rather than of replay, quote the measured
ratio with its date, say explicitly not to read the ratio forward, and give the
one command that answers it. Landing a permanent claim that had already gone
stale would have been this bead's own defect, committed inside the fix for it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GazEx6kCcyQuRvifWb3aBF
…ces (phaze-g9cus)

Two sections landed a `{tree, cmd_hash, rc, at, host, sha}` list -- six fields,
missing `shas` -- one of them as an emphatic "take from the ledger only what it
stores". The live ledger records seven plus a conditional eighth, so both were
already wrong when written, in the same way the ledger section's own list was
before this bead corrected it.

Point at the canonical list instead of repeating it. A fixed enumeration is a
pointer with no redundancy -- nothing in it says whether it is complete -- so
every copy is an independent thing to go stale, and this file had three. The
arguments around them (rc=143 vs rc=1 being indistinguishable; what the two
killed runs do and do not establish) are untouched; only the list is.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GazEx6kCcyQuRvifWb3aBF
@SimplicityGuy
SimplicityGuy merged commit 2cd919a into main Aug 25, 2026
11 checks passed
@SimplicityGuy
SimplicityGuy deleted the wt/bead/issue/phaze-g9cus branch August 25, 2026 19:44
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