Skip to content

odd: P1.3.2 closeout ledger + supersede obsolete handoffs#123

Merged
klappy merged 1 commit into
mainfrom
odd/p1-3-2-closeout-ledger
Apr 20, 2026
Merged

odd: P1.3.2 closeout ledger + supersede obsolete handoffs#123
klappy merged 1 commit into
mainfrom
odd/p1-3-2-closeout-ledger

Conversation

@klappy
Copy link
Copy Markdown
Owner

@klappy klappy commented Apr 20, 2026

P1.3.2 closeout — mirrors P1.3.1's ledger pattern.

What this ships

New: odd/ledger/2026-04-20-p1-3-2-gate-canary-landed.md — retrospective record of the 2026-04-20T01:21Z–03:20Z session that landed oddkit_gate 0.20.0 end-to-end (canon → code → prod) in 1h 58m.

Superseded (status flipped, left in canon for reference):

  • odd/handoffs/2026-04-21-p1-3-2-gate-canary.md — original two-phase handoff; all scope shipped in feat(gate): governance-driven BM25 + set intersection + envelope (0.20.0) oddkit#118.
  • odd/handoffs/2026-04-20-p1-3-2-phase-2-gate-code-refactor.md — mid-session Phase 2 forward handoff. Phase 2 shipped in the same session; this handoff was superseded within ~45 min of its own merge. Left in canon as example of "same-session handoff anti-pattern" discussed in the ledger's Patterns section.

Ledger structure

Mirrors klappy://odd/ledger/2026-04-20-p1-3-1-challenge-canary-landed:

Notable ledger content worth flagging

The "preplanning theater" incident is documented honestly. Mid-session, I wrote a 287-line forward handoff for a Phase 2 that was executable right then. Operator called it out ("did you actually do any work, or was this all just preplanning?"). Fix was to execute Phase 2 in-session. Encoded in Patterns as the "same-session handoff anti-pattern" (candidate pattern name, not yet canon) with the testable heuristic: if the receiving session is the same agent as the writing session, the handoff is overhead that could be executed work.

Candidate canon principle "cache fetches and parses, not microsecond derivations" has four attestation points now (encoding types, base-prerequisites, gate stemmedTokens precompute, gate BM25 index as negative case). Third deciding-argument recurrence graduates it to canon; most likely site is O-open P7's review of cachedChallengeTypeIndex.

Refs


Note

Low Risk
Low risk documentation-only change that adds a new session ledger and updates frontmatter status on existing handoffs; no runtime code or contract changes.

Overview
Adds a new odd/ledger/2026-04-20-p1-3-2-gate-canary-landed.md closeout ledger documenting the P1.3.2 oddkit_gate 0.20.0 canary (what shipped, validation/smoke evidence, and carry-forward O-opens).

Marks the two prior P1.3.2 handoff docs as superseded by updating their frontmatter (status: superseded plus superseded_by), keeping them for historical reference while pointing reviewers to the new ledger.

Reviewed by Cursor Bugbot for commit f1c0a76. Bugbot is set up for automated code reviews on this repo. Configure here.

Ledger at odd/ledger/2026-04-20-p1-3-2-gate-canary-landed.md captures
the 2026-04-20T01:21Z-03:20Z session that shipped oddkit 0.20.0. Mirrors
the P1.3.1 ledger structure (Summary, What Shipped, What the Validator
Actually Checked, Patterns, Cleared, O-opens, Session Mechanics,
Handoff, Provenance).

Two handoffs flipped to status: superseded with superseded_by pointing
at the new ledger:

- odd/handoffs/2026-04-21-p1-3-2-gate-canary — the original two-phase
  handoff, superseded by the full P1.3.2 ship.
- odd/handoffs/2026-04-20-p1-3-2-phase-2-gate-code-refactor — the
  mid-session Phase 2 forward handoff, superseded on arrival when
  Phase 2 shipped in the same session. Left in canon as documentation
  of the 'same-session handoff anti-pattern' called out in the ledger.

Honest accounting in the ledger of the tradeoff between this session's
smoke-heavy attestation (9 runs + live self-call) and P1.3.1's Sonnet 4.6
5-corroboration validator pattern. Neither is strictly superior; they
catch different classes of issue.

Refs klappy/oddkit#118 (merged 260492c), #119 (promotion 1308245),
#120 #121 #122.
@klappy klappy merged commit e8be010 into main Apr 20, 2026
klappy added a commit that referenced this pull request Apr 20, 2026
…flip predecessor handoff to superseded

Honest closeout for P1.3.3.

Two halves, both load-bearing:

1. Technical work that shipped:
   - D5 stemmed prereq matcher (replace per-prereq regex with stemmed
     set intersection + 4 structural-test side-paths)
   - D9 cache removal (drop cachedChallengeTypeIndex; inline
     buildBM25Index per cache-fetches-and-parses)
   - cache-fetches-and-parses graduated tier-2 canon (klappy.dev#125,
     merged 3726073)
   - All landed in oddkit 0.21.0 (PR #120 merged 33ca5bf,
     PR #121 merged 25ad719)

2. Process failure that demonstrated why release-validation-gate
   needed to exist:
   - Orchestrator merged PRs #120 and #121 with Cursor Bugbot still
     in_progress, treating it as non-blocking
   - Skipped Sonnet 4.6 validator dispatch despite P1.3.2 ledger
     warning that smoke-only should not become the default
   - Bugbot subsequently posted 2 findings: medium-severity prod
     regression breaking the strictly-additive invariant the PR
     description claimed (stop-word filter dropping 'from' from
     source-named vocab), low-severity DRY violation in
     BasePrerequisite (re-listed PrereqMatchVocab fields manually
     instead of intersection)
   - Approximate prod-regression window: 04:11Z to 05:09Z + warmup
     ≈ 1h 39m on 'from'-keyword source-named matches

3. Structural fix:
   - canon/constraints/release-validation-gate.md (tier 1, 168 lines)
     — three binding rules: no merge with active reviews in_progress,
     no promotion without independent fresh-context validation when
     PR touches load-bearing surface, canon outranks any
     session-scoped recommendation
   - canon/principles/contract-governs-handoff-drift.md (tier 2,
     128 lines) — graduated on third deciding-argument recurrence
     (P1.3.1 implicit, P1.3.2 explicit, P1.3.3 explicit-via-failure)
   - canon/bootstrap/model-operating-contract.md (+4 lines) —
     'Before Shipping Code' section as discoverability hook
   - All in klappy.dev#126, merged ee9aee4
   - Captures O-open P11: oddkit_gate enforces release-validation-gate
     mechanically at execution → completion transitions

4. Fix-forward applied the new canon end-to-end:
   - oddkit#122 merged d17bc0c (0.21.1 fix branch, both Bugbot
     findings addressed, +2 regression smoke assertions)
   - Bugbot wait respected on PR #122 (completed/success)
   - Sonnet 4.6 validator dispatched (sesn_011CaERPjHi1CV4TrvKW68jB)
     against fix branch + 0.21.0 prod state + canon PR #126
   - Validator verdict: CONDITIONAL PASS (conditional only on canon
     PR #126 merging first; resolved before promotion)
   - oddkit#123 merged 2c5d652b (promotion to prod)
   - Bugbot wait respected on PR #123 (~225s, completed/success)
   - Prod 0.21.1 verified live; live self-call confirms 'from' fix

Meta-instructive moment: Bugbot caught a within-canon DRY violation
on the bootstrap hook in PR #126 itself. The first application of
release-validation-gate's discipline caught me in another canon
violation (dry-canon-says-it-once) before I could merge it. Working
as designed.

Predecessor handoff (odd/handoffs/2026-04-20-p1-3-3-challenge-revisit.md)
flipped to status: superseded with explicit supersession_note naming
the 'Option A is fine for P1.3.3' line in its Validation Plan section
as the recommendation that produced the incident. Future sessions
reading the superseded handoff will be redirected here.

Carry-forward O-opens updated:
- P11 NEW: oddkit_gate mechanical enforcement of release-validation-gate
- P12 NEW: tokenize() audit pass (any caller using canon vocab/input
  should explicitly pass stop-word set)
- P2/P3/P5/P6/P8/P9/P10 carried from prior sweeps unchanged
klappy added a commit that referenced this pull request Apr 20, 2026
…flip predecessor handoff to superseded (#127)

Honest closeout for P1.3.3.

Two halves, both load-bearing:

1. Technical work that shipped:
   - D5 stemmed prereq matcher (replace per-prereq regex with stemmed
     set intersection + 4 structural-test side-paths)
   - D9 cache removal (drop cachedChallengeTypeIndex; inline
     buildBM25Index per cache-fetches-and-parses)
   - cache-fetches-and-parses graduated tier-2 canon (klappy.dev#125,
     merged 3726073)
   - All landed in oddkit 0.21.0 (PR #120 merged 33ca5bf,
     PR #121 merged 25ad719)

2. Process failure that demonstrated why release-validation-gate
   needed to exist:
   - Orchestrator merged PRs #120 and #121 with Cursor Bugbot still
     in_progress, treating it as non-blocking
   - Skipped Sonnet 4.6 validator dispatch despite P1.3.2 ledger
     warning that smoke-only should not become the default
   - Bugbot subsequently posted 2 findings: medium-severity prod
     regression breaking the strictly-additive invariant the PR
     description claimed (stop-word filter dropping 'from' from
     source-named vocab), low-severity DRY violation in
     BasePrerequisite (re-listed PrereqMatchVocab fields manually
     instead of intersection)
   - Approximate prod-regression window: 04:11Z to 05:09Z + warmup
     ≈ 1h 39m on 'from'-keyword source-named matches

3. Structural fix:
   - canon/constraints/release-validation-gate.md (tier 1, 168 lines)
     — three binding rules: no merge with active reviews in_progress,
     no promotion without independent fresh-context validation when
     PR touches load-bearing surface, canon outranks any
     session-scoped recommendation
   - canon/principles/contract-governs-handoff-drift.md (tier 2,
     128 lines) — graduated on third deciding-argument recurrence
     (P1.3.1 implicit, P1.3.2 explicit, P1.3.3 explicit-via-failure)
   - canon/bootstrap/model-operating-contract.md (+4 lines) —
     'Before Shipping Code' section as discoverability hook
   - All in klappy.dev#126, merged ee9aee4
   - Captures O-open P11: oddkit_gate enforces release-validation-gate
     mechanically at execution → completion transitions

4. Fix-forward applied the new canon end-to-end:
   - oddkit#122 merged d17bc0c (0.21.1 fix branch, both Bugbot
     findings addressed, +2 regression smoke assertions)
   - Bugbot wait respected on PR #122 (completed/success)
   - Sonnet 4.6 validator dispatched (sesn_011CaERPjHi1CV4TrvKW68jB)
     against fix branch + 0.21.0 prod state + canon PR #126
   - Validator verdict: CONDITIONAL PASS (conditional only on canon
     PR #126 merging first; resolved before promotion)
   - oddkit#123 merged 2c5d652b (promotion to prod)
   - Bugbot wait respected on PR #123 (~225s, completed/success)
   - Prod 0.21.1 verified live; live self-call confirms 'from' fix

Meta-instructive moment: Bugbot caught a within-canon DRY violation
on the bootstrap hook in PR #126 itself. The first application of
release-validation-gate's discipline caught me in another canon
violation (dry-canon-says-it-once) before I could merge it. Working
as designed.

Predecessor handoff (odd/handoffs/2026-04-20-p1-3-3-challenge-revisit.md)
flipped to status: superseded with explicit supersession_note naming
the 'Option A is fine for P1.3.3' line in its Validation Plan section
as the recommendation that produced the incident. Future sessions
reading the superseded handoff will be redirected here.

Carry-forward O-opens updated:
- P11 NEW: oddkit_gate mechanical enforcement of release-validation-gate
- P12 NEW: tokenize() audit pass (any caller using canon vocab/input
  should explicitly pass stop-word set)
- P2/P3/P5/P6/P8/P9/P10 carried from prior sweeps unchanged
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