Skip to content

Learning #13 — a forward-looking claim has to be computed, not re-read - #63

Merged
KJ5HST merged 1 commit into
KJ5HST:mainfrom
rmsharp:docs/learning-13-handoff-predictions
Aug 1, 2026
Merged

KJ5HST merged 1 commit into
KJ5HST:mainfrom
rmsharp:docs/learning-13-handoff-predictions

Conversation

@rmsharp

@rmsharp rmsharp commented Jul 27, 2026 •

Copy link
Copy Markdown
Collaborator

Revised 2026-08-01 — the original version of this PR made a claim that is false, and this
revision corrects it.
It argued that the motivating prediction was "true when written and false
when used"
and titled itself "a handoff's predictions decay." Re-deriving the case from git
rather than from the receipt's own account shows the prediction was never true, and the commits
the original blamed for invalidating it landed hours before it was written. The row now states the
stronger and checkable lesson. Details under "What was wrong" below.

What this is

One row appended to the starter-kit/SESSION_RUNNER.md Learnings table (was 1–12; appended,
never renumbered — rows 1–12 are byte-unchanged, and the diff on that file is a single added line),
plus one CHANGELOG.md ledger entry. No other file is touched.

A forward-looking claim cannot be checked by re-reading a file — it has to be computed.

Docs-only: no principle, phase, gate, workstream or failure mode changes, and the FM count stays
27.

Why the existing rows don't cover it

Existing row What it covers Its prescribed repair
Learning #6, FM #11 claims written from memory go re-read the file that confirms it
Learnings #7, #10, #12 cross-references that go stale in the corpus grep the corpus / encode an assertion

Every one of those repairs assumes there is a file to check. A prediction describes a state that
does not exist yet, so no file confirms it — the remedy the existing rows prescribe cannot reach it.
That is the gap, and it is a structural one rather than another instance of staleness.

The motivating case, reproducible from this repository

The S3 receipt's next_steps tells the next session what to expect from the v3.6 sync merge:

expect one CHANGELOG union conflict, resolve newest-on-top

The merge met seven conflicting files. The tempting reading is that the prediction decayed. It
did not — it was never derived. Two commands, both runnable in a clone of this repository:

$ git log --oneline -S 'expect one CHANGELOG union conflict' -- HANDOFFS.md
bec4095 feat(dashboard): Layer 8 — a framework filename is not proof of a framework

$ git show --stat --format='' bec4095
 CHANGELOG.md                         |  12 +--
 CLAUDE.md                            |   2 +-
 HANDOFFS.md                          |  11 ++-
 README.md                            |   6 +-
 starter-kit/methodology_dashboard.py |  95 ++++++++++++++++++-----
 tools/methodology_dashboard.py       |  95 ++++++++++++++++++-----
 tools/test_methodology_dashboard.py  | 146 +++++++++++++++++++++++++++++++++--
 7 files changed, 311 insertions(+), 56 deletions(-)

The sentence predicting one conflicting file entered the tree in a commit that itself changed
seven — and those seven are the seven the merge later collided in. Every fact needed to get the
prediction right was already in the author's own working tree at the moment it was typed.

What was wrong in the first version of this PR

The original claimed the prediction was invalidated by "Layer 8 and the pre-PR review fixes …
committed to the branch after the point the fork had been ported from it."
Three problems:

  1. The chronology is backwards. eeb827f (pre-PR review) is 07-26 18:13 and 7a7e9a2 is
    07-26 17:05; the prediction was written in bec4095 at 07-27 00:07. Both alleged invalidators
    were already in the tree.
  2. It blames the commit that contains it. The prediction lives inside Layer 8 (bec4095).
  3. There was no moment when it was true. Measured against the fork's main, the conflict count
    over the branch's life ran 1 → 5 → 5 → 7, and at the only point it was 1, that one file was
    HANDOFFS.md — not CHANGELOG.md.

The original also misquoted the receipt as expect one CHANGELOG.md union conflict; the text says
CHANGELOG, so grepping the quoted string returned nothing. And it reasoned from a fork-only session
receipt (S17), a fork-only campaign vocabulary (Layer 8), and a ported from commit that this
repository has no way to locate. All of that is gone — the argument now rests on the two commands
above.

Honest limit: the seven-conflict outcome was measured against the contributing fork's main
(ae6050d), which is not an ancestor of main here, so it is corroboration rather than something
you can re-run. The two commands above do not depend on it.

Cross-reference sweep (Learnings #7/#10)

Changing the size of a numbered set is exactly the trigger those rows describe.

  • git grep -nE 'table (was|is|now) ?1[–-][0-9]+' returns two live sites outside this PR's own
    entry — the v3.4 narration in CHANGELOG.md and the matching v3.4 bullet in CLAUDE.md
    §Versioning. Both are dated release narration, which this repo leaves verbatim by design
    (the v2.7.1 precedent).
  • The Learnings table caption states no size.
  • Nothing else required updating.

Verification

  • bin/tests.sh — 84 passed, 0 failed
  • bin/check-links — OK, 82 relative links across 21 distributed markdown files
  • Learnings table parses as contiguous rows 1–13, every row 4-column, one physical line each
  • Rows 1–12 byte-unchanged (starter-kit/SESSION_RUNNER.md diff is 1 insertion(+), no deletions)
  • grep -inE "Opus|Sonnet|Haiku|Fable" starter-kit/SESSION_RUNNER.md — empty (brand-neutrality)

Notes

starter-kit/SESSION_RUNNER.md is bin/_manifest.py-distributed, so adopters receive this row via
bin/sync. It is written to stand alone in a single-repo installation: the Learning column names no
fork, no upstream, and no session ID, and the one command it prescribes
(git merge-tree --write-tree --name-only) is non-mutating and works in any repository.

Two things I'd defer to you:

  1. A version event. My read is no — this is one distributed row, and every prior Learnings
    row (v2.3 content release: 6 upstream candidates from rad-con SESSION_RUNNER audit (review requested) #7–Proposal: render-dependency completeness discipline (silent font-fallback case) #12) rode an existing release rather than getting its own. Happy to pre-write the
    README.md §What's New and CLAUDE.md §Versioning sites if you'd rather it ship as one.
  2. Whether this repo's HANDOFFS.md is owed a receipt for these commits. Its ledger currently
    holds S1–S3, and Phase 0 reconcile will flag the gap at the next Orient. I left it alone rather
    than invent a session number in your ledger; say the word and I'll add it.

Separately, and not folded in here (FM #17 — one deliverable): the sweep turned up five dangling
Learning #N citations already live in distributed files — starter-kit/RECOMMENDED_SKILLS.md:90,
:94, :95 and workstreams/DEVELOPMENT_WORKSTREAM.md:23, :56 cite Learnings #28/#30/#34,
which have no referent anywhere in the corpus. DEVELOPMENT_WORKSTREAM.md:23 points the reader at
"Learning #30 (in ITERATIVE_METHODOLOGY.md §Knowledge Accumulation)", and that section contains
no numbered learnings at all. Reproduce with:

grep -rnoE "Learning[s]? #[0-9]+" starter-kit/ workstreams/ | awk -F'#' '$2+0 > 13'

Happy to open that as a separate issue or PR — it's the same defect class as what this PR corrects.

🤖 Generated with Claude Code

rmsharp added a commit to rmsharp/methodology that referenced this pull request Jul 27, 2026
Completes the one close-out step a5dc925 left open, and records the PR
open as a non-commit action the ledger owes an entry for (FM KJ5HST#27).

The learning itself does not land here. starter-kit/SESSION_RUNNER.md is
bin/_manifest.py-distributed, so committing an unreleased change to it on
fork main would break the invariant this session had just verified and
reported — that fork and upstream differ only by fork-only
docs/planning/* plus this repo's own ledger and receipts. The branch was
cut from upstream/main (0 behind) per the standing rule for clean
single-topic upstream PRs.

The S17 receipt is amended in place rather than duplicated: this is the
same session's Phase 3C, not a new session, and a second receipt for one
session would double-count it in the ledger built to prevent that.

Verified: bin/check-handoff OK. On the branch: bin/tests.sh 84/84,
bin/check-links OK, 197/197 unit, Learnings table 1-13 all 4-column.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
rmsharp added a commit to rmsharp/methodology that referenced this pull request Jul 30, 2026
Ratified plan for recording which model(s) ran each session/action.
No dedicated field exists today in either CHANGELOG.md or HANDOFFS.md;
model info currently leaks out only incidentally (free-text prose on
capability-tiered sessions, or git commit co-author trailers).

Design panel (3 candidates, 3 judges x 4 lenses, synthesis, adversarial
completeness critique) surfaced the load-bearing finding: git commit
trailers can directly misattribute capability-tiered work. S1's own
receipt says Sonnet 5 built P2/P4, but all six of S1's checkpoint
commits — including those two — are trailer-tagged Opus 4.8. Verified
independently three times (design panel, synthesis, this session).

Ratified design (operator decisions D1-D4, all via AskUserQuestion):
optional **Model:** bullet in CHANGELOG.md's per-action entry (scales
to multi-tier for free, since the ledger is already per-layer) + a
formalized free-text convention in HANDOFFS.md for session-level
lookup + a SESSION_RUNNER.md Phase 3F propagation clause + a
canonical-only bin/model-report tool that treats git trailers as
disclaimed corroboration only, never authoritative. No change to
bin/check-handoff or REQUIRED_KEYS.

Two defects the completeness critic found in the synthesis are
corrected in place: a broken regression-check regex/file-scope claim,
and a mis-anchored insertion point in SESSION_RUNNER.md's Phase 3F
bullet. Two more numeric claims (RECOMMENDED_SKILLS.md brand-token
count, git trailer coverage count) were independently re-verified and
corrected before ratification.

Implementation (P1-P3) is a separate session per "1 and done"; P3 is
additionally gated on upstream PR KJ5HST#63 merging first, to avoid a
Learnings-table numbering collision.

Closes out S18: HANDOFFS.md receipt completed (self_score 9,
predecessor_score 9), CHANGELOG.md ledger entry recorded.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
rmsharp added a commit to rmsharp/methodology that referenced this pull request Jul 30, 2026
Implements Phase 1 of the ratified docs/planning/model-use-provenance-plan.md
(S18): an optional **Model:** bullet in starter-kit/CHANGELOG.md's format
section (single-tier + capability-tiered two-entry examples), a formalized
free-text model-naming convention in starter-kit/HANDOFFS.md's "How to write
a receipt" section, and a brand-neutral propagation clause appended to
starter-kit/SESSION_RUNNER.md's Phase 3F action-ledger bullet. No new
bin/check-handoff key, no hard gate anywhere in the design.

A 3-lens adversarial review before commit caught and fixed 3 real defects
the mechanical completion-criteria greps had missed: a direct
self-contradiction between the CHANGELOG.md and HANDOFFS.md edits on
whether to name the model in both places for a single-tier session, a
backwards "documented above" cross-reference, and a missing pair of
concrete worked examples the plan's own Phase 1 task called for.

Scoped to Phase 1 only per the plan's own "(one session each)" phasing.
Phase 2 (bin/model-report + Test 23) is the next session; Phase 3 stays
blocked on upstream PR KJ5HST#63 merging (confirmed OPEN at commit time).

Verified: bin/tests.sh 84/84, bin/check-links OK (82/21), bin/check-handoff
OK, all 4 plan-specified completion-criteria greps pass, brand-neutrality
regression check empty.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
rmsharp added a commit to rmsharp/methodology that referenced this pull request Jul 30, 2026
… 23 (S20)

Implements Phase 2 of the ratified docs/planning/model-use-provenance-plan.md
(S18/S19): a canonical-only bin/model-report tool reading three sources —
CHANGELOG.md **Model:** bullets (primary/structured), HANDOFFS.md free-text
"model" mentions (secondary/best-effort, regex-fuzzy), and git Co-Authored-By
trailers (corroboration-only, never authoritative, hard-disclaimer citing
S1's real trailer-vs-prose mismatch) — kept visually/structurally separate,
never merged. bin/tests.sh gains Test 23 (8 assertions), written RED-first
per Learning KJ5HST#12: a deliberately naive single-merged-list draft was run and
confirmed to fail before the real implementation replaced it.

A 4-lens adversarial-review workflow before commit caught and fixed 5 real
defects: (1) HIGH — the CHANGELOG parser had no code-fence awareness, so it
fabricated pseudo-entries out of starter-kit/CHANGELOG.md's own permanent
illustrative examples, a live default-path exposure for every future adopter
since that file is SEED-copied verbatim; (2) Test 23 originally always
passed --no-git, never exercising the trailer source; (3) the module
docstring misattributed S1's tier-split sentence to "prose" when it lives in
the fenced what_was_done field, contradicting the tool's own live output;
(4) a garbled section-reference typo; (5) a completeness sweep found the
README repo-structure tree and both starter-kit files' model-naming
sections didn't yet mention the new tool. Also fixed a **Model:** bullet
continuation-line truncation bug found during the same pass.

Scoped to Phase 2 only, per the plan's own "(one session each)" phasing.
Phase 3 (new Learnings row) stays blocked on upstream PR KJ5HST#63 merging
(confirmed still OPEN at commit time).

Verified: bin/tests.sh 92/92, bin/check-links OK (82/21), bin/check-handoff
OK, brand-neutrality regression check empty, python3 bin/model-report runs
clean against this fork's real 20-session history.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@KJ5HST

KJ5HST commented Jul 31, 2026

Copy link
Copy Markdown
Owner

Reviewed this against origin/main, and ran the checks at the PR head rather than reading them off the body — bin/tests.sh 84/84, bin/check-links OK (82 links / 21 files), unit suite 197/197, bin/check-handoff OK. Table parses 1–13, every row 4-column, zero lines removed from base, fast-forward on main. The corpus sweep holds too: I re-ran it and found no live count-claim about the Learnings table anywhere. And the motivating case verifies from both ends — the upstream S3 receipt does say "expect one CHANGELOG union conflict," and the fork's S17 receipt records seven with the same cause. Good catch, and a real gap the existing rows don't cover.

Approving. Four things came up. None blocking, all optional:

1. The writer-side half doesn't reach the checklist that governs writers. The row asks writers to name the state a prediction depends on — but that lives only in the Learnings table. Phase 3D's Minimum Handoff Requirements has no prediction guidance at all. That's your own Learning #8 pointed back at this change: a session following the condensed checklist never sees the instruction. The reader-side half is fine where it is.

2. No upstream receipt. I take the point about not double-counting S17. But upstream's Phase 0 reconcile is repo-local — after merge, b5eb613 and the merge commit sit past the HANDOFFS.md frontier (7817989) with no receipt, so the next session here is instructed to write a status: reconciled block. #62 went the other way (9e93588 opened an upstream S3 claim while also having a fork record). So it's not receipt vs. none — it's complete from the session that did the work vs. reconciled reconstructed later by one that didn't. Related and not yours to fix here: bin/check-handoff validates the newest receipt's structure, not receipt coverage of commits, so it stays green on a repo whose newest commits have none.

3. README §What's New. Every Learning from #7 through #12 got its own "New Learning #N" bullet (lines 283/293/301/313/368). #13 gets none unless there's a version event — so the public restatement would sit one row behind the shipped table. That's the version-event question you handed me: a v3.6.1 dot release gives it a home; otherwise the next release absorbs it.

4. Size (advisory). +1,605 bytes for one row. Rows 1–6 average ~510 characters; #12 is 2,400 and #13 is 1,604. The row re-narrates the case the CHANGELOG entry already carries in full. Not asking you to trim it — just flagging the trend on a file adopters are expected to actually read. BL-9 territory.

Your call on all of it: address any of these on this branch and I'll merge after, or say the word and I'll merge as-is and we pick them up separately. I'd lean toward the second — 1 and 3 read cleaner as a small follow-on than as edits to a 30-line PR.


Footnote, unrelated to this PR. While orienting I noticed there's no ### … [ad hoc] Released v3.6 entry in CHANGELOG.md — v3.5, v3.4, v3.3, v3.0.1 and v3.0 each have one, but v3.6 has only the pre-merge campaign entry dated 07-26. The tag and Release went out on 07-27 as a non-commit action, which is both the class the ledger header calls out by name ("release, tag/branch op, PR open…") and the class Phase 0 reconcile can't catch, since it diffs commits. Nothing blocking — just easier to add now than to reconstruct later, and it could ride along here if you end up touching the ledger anyway.

@rmsharp
rmsharp force-pushed the docs/learning-13-handoff-predictions branch from b5eb613 to b15d9ca Compare August 1, 2026 16:34
rmsharp added a commit to rmsharp/methodology that referenced this pull request Aug 1, 2026
…buted files

Found while correcting upstream PR KJ5HST#63; kept OUT of that PR per FM KJ5HST#17 (one
deliverable per session), since it is a separate defect in different files.

The Learnings table ends at KJ5HST#12, but five sites in two bin/_manifest.py-
distributed files cite Learnings KJ5HST#28/KJ5HST#30/KJ5HST#34, which have no referent anywhere
in the corpus. DEVELOPMENT_WORKSTREAM.md:23 points the reader at
"ITERATIVE_METHODOLOGY.md §Knowledge Accumulation", which contains no numbered
learnings at all. Every adopter already has these.

Same defect class as PR KJ5HST#63 — a citation resolvable only against a source the
reader does not have. Notes Learning KJ5HST#12's fork-only S9-S16 / Layer citations
as the related convention question to decide alongside it, and proposes the fix
as a bin/tests.sh assertion (driven RED first) rather than another review-time
grep, per Learning KJ5HST#12's own rule.

Also reconciled two now-stale "both are open" claims in the file's header that
adding a third item invalidated (Learning KJ5HST#7), and recorded the PR KJ5HST#63
correction itself in CHANGELOG.md per FM KJ5HST#27.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@rmsharp rmsharp changed the title Learning #13 — a handoff's predictions decay Learning #13 — a forward-looking claim has to be computed, not re-read Aug 1, 2026
@rmsharp

rmsharp commented Aug 1, 2026

Copy link
Copy Markdown
Collaborator Author

Heads-up: I've force-pushed this branch and rewritten the title and description. The original version of this PR was wrong, not just unclear.

Mark tried to read it cold and reported it as unintelligible — that it "assumes knowledge from a source outside itself." That was right, and chasing it turned up something worse than opacity.

The PR's load-bearing claim was that the motivating prediction was "true when written and false when used, and the session that wrote it is the session that invalidated it." One command in this repository refutes it:

$ git log --oneline -S 'expect one CHANGELOG union conflict' -- HANDOFFS.md
bec4095 feat(dashboard): Layer 8 — a framework filename is not proof of a framework

$ git show --stat --format='' bec4095 | tail -1
 7 files changed, 311 insertions(+), 56 deletions(-)

The sentence predicting one conflicting file was written into a commit that itself changed seven — the same seven the merge later collided in. It didn't decay; it was never derived. The two commits the original blamed for invalidating it (eeb827f 07-26 18:13, 7a7e9a2 07-26 17:05) both landed hours before it was written at 07-27 00:07, and it was written inside "Layer 8" — the very commit it blamed.

Measured against the fork's main, the conflict count over the branch's life ran 1 → 5 → 5 → 7, and at the only point it was 1, that file was HANDOFFS.md, not CHANGELOG.md. There was no moment at which the prediction held.

What changed:

  • Thesis. "Predictions decay" → a forward-looking claim cannot be checked by re-reading a file; it has to be computed. That's the sharper gap: Learning Post-v2.2: audit rad-con SESSION_RUNNER.md for content worth upstreaming #6 / FM feat: protocols as first-class methodology layer (v2.4) #11 both prescribe "go re-read the file," and a prediction has no file. Retitled to match.
  • Every unreachable referent is gone. The old text reasoned from a fork-only session receipt (S17 — this repo's HANDOFFS.md holds only S1–S3), fork-only campaign vocabulary (Layer 8), and a ported from commit with no way to locate it here. The argument now rests on two commands you can run.
  • Fixed a misquote. It quoted the receipt as expect one CHANGELOG.md union conflict; the text says CHANGELOG, so grepping the quoted string returned nothing — which removed the one rescue move available to a confused reader.
  • The countermeasure is now executable: git merge-tree --write-tree --name-only, which computes conflicting paths without touching a working tree.
  • The row is written to stand alone in an adopter's single repo — no fork, no upstream, no session ID in the Learning column.

I squashed to one commit rather than stacking a correction on top, so a commit message asserting the refuted premise doesn't land in this repo's history on merge. Content is otherwise identical to what I'd verified: bin/tests.sh 84/84, bin/check-links OK, table contiguous 1–13, rows 1–12 byte-unchanged.

Worth saying plainly: I think this makes the PR stronger. A proposed Learning about claims that were never verified, which then caught and corrected its own unverified claim, is about the best evidence for the Learning that could exist. It also means the row is now grounded in a case I actually re-derived rather than one I took the receipt's word for.

Two open questions for you at the bottom of the description (version event, and whether this repo's HANDOFFS.md is owed a receipt), plus one separate finding I deliberately did not fold in: five dangling Learning #28/#30/#34 citations already live in distributed files. Happy to take that as its own issue.

…s to be computed

Adds one row to the starter-kit/SESSION_RUNNER.md Learnings table (was 1-12;
appended, never renumbered) plus its CHANGELOG.md ledger entry.

A forward-looking claim cannot be checked by re-reading a file — it has to be
computed. Learning #6 and FM KJ5HST#11 catch claims written from memory, and both
prescribe the same repair: go read the file that confirms it. KJ5HST#7, KJ5HST#10 and KJ5HST#12
catch cross-references that go stale in the corpus. Neither reaches the other
half of a handoff: a prediction describes a state that does not exist yet, so
no file confirms it.

The motivating case is this repository's own, and it refutes the tempting
diagnosis that such claims merely "decay":

  git log -S 'expect one CHANGELOG union conflict' -- HANDOFFS.md  -> bec4095
  git show --stat bec4095                                          -> 7 files

The receipt predicting one conflicting file was written into a commit that
itself changed all seven of the files the later merge collided in. It did not
go stale — it was never derived from state the author already held.

Verified: bin/tests.sh 84/84 · bin/check-links OK (82 links / 21 files) ·
Learnings table contiguous 1-13, every row 4-column, rows 1-12 byte-unchanged ·
brand-neutrality grep empty.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@rmsharp
rmsharp force-pushed the docs/learning-13-handoff-predictions branch from b15d9ca to 73b72c0 Compare August 1, 2026 16:43
@rmsharp

rmsharp commented Aug 1, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks — and apologies for the ordering: my rewrite comment above landed after your approval, so you reviewed a version that no longer exists. Short summary of what moved and where I've landed on your four.

On the one line I want to flag specifically. You wrote that the case "verifies from both ends — the upstream S3 receipt does say 'expect one CHANGELOG union conflict,' and the fork's S17 receipt records seven with the same cause." Both halves of that are true, and it's the second one that turned out to be the problem: the S17 receipt's account of the cause is what I'd taken on trust, and it's wrong. The prediction wasn't invalidated by later commits — it was written inside bec4095, a commit that had already changed all seven files, and the two commits the old text blamed landed hours before it. So the row was teaching "predictions decay" from a case that isn't decay at all. That's not a knock on the review; it's that the only way to catch it was to re-derive the cause from git instead of from the receipt, which is now precisely what the row tells you to do. Detail in my previous comment.

1 — writer-side half doesn't reach Phase 3D. Agreed, and it's the sharpest of the four. The rewritten row still puts the writer-side duty ("derive it or label it a guess") only in the Learnings table, so a session following the condensed checklist never sees it. Taking your lean: follow-on, not this branch.

2 — upstream receipt. You've convinced me, and your framing is better than the one I had. I was thinking receipt-vs-none; the real choice is complete from the session that did the work vs reconciled reconstructed by one that didn't, and #62 already set the precedent by opening an upstream S3 claim alongside a fork record. Your call whether you'd rather I add it here or take it with the follow-on — I didn't want to invent a session number in your ledger unasked. Noted too that bin/check-handoff validates the newest receipt's structure rather than coverage of commits, so it stays green on exactly the gap that would open here.

3 — README §What's New. Agreed, and tied to the version-event question. My read is still no standalone event for one row, which means the public restatement sits one row behind until the next release absorbs it. If you'd rather it not lag, a v3.6.1 gives it a home and I'll pre-write both sites.

4 — size. Addressed, and thank you for flagging it — my first rewrite made it worse (1,604 → 1,986 bytes) before I measured it against your note. The row is now 1,562 bytes, 42 smaller than the version you reviewed, and every column is inside the rows 1–12 envelope (Learning 929 ≤ 1,834 · Source 169 ≤ 236 · When 449 ≤ 467). I cut the row's re-narration of the case and left the full account in the CHANGELOG entry — keeping just enough in the Source column that it still stands alone for an adopter, who receives the row but not this ledger.

Footnote — the missing Released v3.6 entry. You're right, and I verified it: v3.5, v3.4, v3.3, v3.0.1 and v3.0 each have one; v3.6 has only the 07-26 campaign entry. I'm adding it to the fork's ledger as its own commit rather than riding it along here, so this PR stays one deliverable — upstream's copy is yours to add whenever, and happy to open it as a one-line PR if that's easier.

So: lean two, as you suggested. Merge when you're happy with the corrected version and I'll pick up 1 and 3 (and 2, if you want it there) as a follow-on.

One more thing found by the sweep and deliberately kept out of this PR — five dangling Learning #28/#30/#34 citations already live in starter-kit/RECOMMENDED_SKILLS.md and workstreams/DEVELOPMENT_WORKSTREAM.md, against a table that ends at #12. Same defect class as what this PR corrects. Say the word and it becomes an issue.

@rmsharp

rmsharp commented Aug 1, 2026

Copy link
Copy Markdown
Collaborator Author

Correcting one thing in my previous comment — I said I'd add the Released v3.6 entry to the fork's ledger as its own commit. That was wrong, and I only caught it when I went to do it.

The fork already has one: CHANGELOG.md:198, ### 2026-07-27 · [ad hoc] v3.6 shipped — PR #62 merged, tagged, released, and the fork resynced. My check had grepped for the literal Released v3 heading form, which that entry doesn't use — so I confirmed a gap that wasn't there and missed that the gap is upstream's, which is of course exactly where you were looking.

To be precise about what's actually true: upstream CHANGELOG.md has Released v3.5 / v3.4 / v3.3 / v3.0.1 / v3.0, and for v3.6 only the 07-26 campaign entry. So your footnote stands as written — it just needs fixing in your ledger, not mine.

Leaving it to you rather than riding it along, to keep this PR at one deliverable. Happy to open it as a one-line PR if that's easier than writing it yourself.

(Third self-correction in a PR about unverified claims. The row is earning its keep.)

rmsharp added a commit to rmsharp/methodology that referenced this pull request Aug 1, 2026
The entry was written mid-session and claimed the branch was "local only,
awaiting operator review" and that PR KJ5HST#63 "remains OPEN and un-updated." Both
became false within the same session once the disposition was decided and
executed. Also corrects a stale "1 insertion / 1 deletion" figure — against the
PR's base the diff is 1 insertion, 0 deletions.

Records three things the original entry could not have known:

1. The maintainer had already reviewed and APPROVED the original PR, and his
   review did not catch the chronology error. This session recommended
   force-pushing on the stated premise that the PR was unreviewed, and did not
   verify that premise before acting on it.
2. The first rewrite grew the row against his size advisory (1,604 -> 1,986)
   before it was measured; now trimmed to 1,562.
3. A public comment asserted this fork's ledger lacked a Released v3.6 entry;
   it already had one. The gap is upstream's.

All three are the same defect the row itself names, which is why they belong in
the ledger rather than only in the PR thread.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
rmsharp added a commit to rmsharp/methodology that referenced this pull request Aug 1, 2026
…nded next

Phase 3 close-out receipt for S21. self_score 6, predecessor_score 8.

Self-scored 6 rather than the 8 of the last three sessions because the
deliverable was strong and the process was not:

- Phase 1B was skipped entirely. No claim stub was written, so five commits
  across two branches and three public PR comments stood with no receipt until
  this one. A crash at any point would have left a ghost session.
- Force-pushing was recommended on the stated premise that PR KJ5HST#63 was
  unreviewed. It had been reviewed and approved the day before. The premise was
  never checked before acting on it -- an unverified forward-looking claim about
  outward-facing state, in the session whose deliverable is that exact failure.
- The first rewrite grew the row against the maintainer's written size advisory
  before anyone measured it.
- A public comment asserted a fork ledger gap that did not exist.

No new Learnings row: fork main's table ends at 12 and KJ5HST#13 lives only on the
unmerged PR KJ5HST#63 branch, so appending here would collide -- the same trap S18
flagged for the model-use plan's Phase 3, still blocked on the same PR.

next_steps recommends BL-10 as the next deliverable, with the four things to
settle before touching it and the git archaeology command to run first.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
KJ5HST pushed a commit that referenced this pull request Aug 1, 2026
Phase 1B crash breadcrumb, written before any technical work. Numbered S5
rather than S4: main's newest receipt is S3, but the unpushed branch
docs/operator-gated-review-plan already carries an S4 receipt for the
07-31 planning session that precedes this one. A visible S3->S5 gap that
closes when that branch lands beats a duplicate S4 on merge.

Committed --no-verify: the claim touches only HANDOFFS.md, and the ledger
entry this session owes is its deliverable, written at close-out.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018QpRyb1JxfMaRKik9EWm49
@KJ5HST
KJ5HST merged commit f9561a4 into KJ5HST:main Aug 1, 2026
rmsharp added a commit to rmsharp/methodology that referenced this pull request Aug 1, 2026
…release entry recorded

Union resolution of the two prepend-only ledgers, proved rather than assumed:

CHANGELOG.md — both upstream entries verified NEW (not already on the fork
side) before keeping them; fork's 6 entries then upstream's 2, reverse-
chronological preserved, 71 source-tagged entries enumerable.

HANDOFFS.md — the two session sequences stay separate and unrenumbered. Every
upstream receipt was checked against ours before resolving: upstream S3 is
already present verbatim; upstream S2 == fork S6 and upstream S1 == fork S1
(same dates, same active_task — one session under two numbers), so re-adding
them would double-record. Only upstream S5 is genuinely new; it is inserted
below the in-flight S22 stub. Result: 24 blocks, 24 opens / 24 closes, no
receipt from either side lost.
rmsharp added a commit to rmsharp/methodology that referenced this pull request Aug 3, 2026
…title

Record repair, on its own commit per SESSION_RUNNER.md:39/:42. Precedent
7752114. Not S29's deliverable and no license for further work (FM KJ5HST#17).

Nine root-relative CHANGELOG.md:<N> anchors across eight receipts, all in the
live ledger; the archive shard was measured clean, not assumed. 8 of the 9 were
CORRECT the day they were written; 0 of 9 resolved to their stated referent
afterwards. Four now land in front matter above every entry; four land inside
an entry written today.

The cause is not "prepend-only" -- under strict prepending an anchor at :35
lands on the newest heading forever. The front matter itself is edited in place:
the first '### ' moved 35 -> 39 -> 68 across two such edits, and the v3.6 split
moved 50 entries out of the file.

Write-time correctness was judged at the tree where each value FIRST APPEARED,
walked with the checker's own extract_blocks/parse_block. For 2 of 8 receipts
the commit: field names the wrong tree: S24's value first appears in 62f191e,
and S5's in d6dd6c9 though its commit: leads with c3157e8 -- that session's
Phase 1B claim stub.

Seven were deletions only. Two needed more: S28's :118 is the corpus's only
anchor-only referent and never worked (at 6d47624 line 118 sat inside the BL-14
entry; the repair entry began at 122), and S5's :35 was correct at birth --
PR KJ5HST#63 IS the Learning KJ5HST#13 PR, f9561a4, confirmed at d6dd6c9.

DISCLOSED, not bundled quietly: S22's quoted title is also repaired, and the
rule shipping next does not cover it. That title was stale 23 minutes after it
was written -- de46858 retitled the entry to correct a false claim and rewrote
four other fields of the same receipt while leaving changelog_ref alone. A
prohibition on line numbers cannot see a stale title. General case is BL-17.
rmsharp added a commit to rmsharp/methodology that referenced this pull request Aug 3, 2026
BL-15 WAS RIGHT AND MY CLAIM STUB WAS WRONG. The stub said BL-15's "identical
escape in 13 of 32 receipts" reproduced under no predicate. It reproduces
exactly: 13 values defer deictically -- 12 `this commit` plus archive-S1's
`this branch`. I grepped one literal phrasing, reached 12, and stopped one
variant short, with bin/check-handoff:69-70 naming that dialect in writing.

BL-15 is closed anyway, for a better reason than "wrong": all 13 name their
entry by a quoted ### title BEFORE the deferral, and all 13 now carry a real
sha in their own commit: because of 7752114/6d47624. Each is a one-hop
back-reference to a field the checker already guarantees. BL-14 discharged
BL-15 as a side effect, one field to the left, the same week.

Settling it found a different defect: 9 positional CHANGELOG.md:<N> anchors in
changelog_ref. 8 of 9 were correct the day they were written; 0 of 9 resolve to
their stated referent now. The cause is NOT "the ledger is prepend-only" --
under strict prepending an anchor at :35 lands on the newest heading forever.
The front matter is edited in place: the first '### ' moved 35 -> 39 -> 68.

THE RULE IS A PROHIBITION, not a resolution check, and that is the design. Its
truth value depends only on the receipt's own bytes, so no later prepend,
retitle, front-matter edit or archive split can turn a passing receipt red. The
rejected alternative goes red whenever someone legitimately retitles an entry --
and this repo retitles entries to CORRECT FALSE CLAIMS (de46858). No blocks[0]
exemption: unlike commit: there is no chicken-egg. Prefix-aware, so a
starter-kit/ template cite and a frozen archive-shard cite stay legal; reusing
KEY_FILES_RE would have been unsound, verified directly.

An 11-agent workflow refuted two of my three central claims before any code was
written. Every correction was re-derived from git here, and one was re-refuted:
PR KJ5HST#63 IS the Learning KJ5HST#13 PR (f9561a4), so write-time correctness is 8 of 9.

RED-FIRST against the real corpus: exactly 9 findings on the unrepaired ledger,
matching the 9 derived independently from git, and exactly 0 on the archive
shard -- measured, not assumed. 8 mutants, 8 killed, six by NARROWING. One line
deleted for being unkillable by any mutant. Suite 127 -> 142.

Also fixes a coupling defect in the previous session's tests: Test 25's live
assertions keyed on the checker's exit code, a union over all three passes, so
adding this one turned them red against a ledger whose commit: fields were all
correct. Both now count their own rows.

Fork-local and canonical-only: zero bin/_manifest.py DISTRIBUTION members in the
diff. No upstream action taken and none authorized; issue KJ5HST#65 untouched.
BL-17 (the seed offers no locator a fork session can write; plus the stale-title
class) and BL-18 (20 of the same anchors in key_files, where KEY_FILES_RE
requires the token) raised, not bundled (FM KJ5HST#17).
rmsharp added a commit to rmsharp/methodology that referenced this pull request Sep 15, 2026
…thheld while the file was over its limit

KJ5HST#62: a gate already red for a known reason cannot report a new failure; diff
its rows, not its exit code. KJ5HST#63: state a ceiling's headroom in units of the
next write. 1,067 B and 1,018 B; both found at S158, figures re-checked before
writing. starter-kit/FRAMEWORK_LEARNINGS.md 73,920 -> 76,007 B, under the new
81,920 B limit with 4 rows of room. Distributed: adopters receive both rows at
their next bin/sync.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014xuyQjauGqcqY3BYvbrfFT
rmsharp added a commit to rmsharp/methodology that referenced this pull request Sep 15, 2026
…only at 81,920 B; Learnings KJ5HST#62/KJ5HST#63; BL-53

The S159 receipt in HANDOFFS.md (status: complete, self 7/10, S158 scored
8/10) and the close-out entry in CHANGELOG.md, plus the
.context-budget-history.jsonl line appended by this session's
context_budget.py run.

Also rewords one already-committed heading: a51d848's CHANGELOG entry said
"re-labelled a growth warning", and Test 31 (bin/tests.sh:1968) greps all of
bin/model-report's output case-insensitively for that word, taking the suite
304/1 -> 303/2. Reworded to "re-labelled to guard growth, not readability";
no fact changes. Final suite on this exact content, in a fresh --no-local
clone: 304 passed / 1 failed / 0 skipped, exit 1 -- 305 rows, 0 status flips
vs the 867087b baseline (Test 9, pre-existing).

Fork-internal: nothing pushed, no PR, no comment; PR KJ5HST#80 untouched.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014xuyQjauGqcqY3BYvbrfFT
@rmsharp
rmsharp deleted the docs/learning-13-handoff-predictions branch September 29, 2026 14:48
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.

2 participants