Skip to content

ledger: book v1.30.0 — the row from the tag, the cookbook commit that locks it, and gate T green again (PMAT-557, closes #557) - #571

Merged
noahgift merged 15 commits into
mainfrom
PMAT-557-book-v1.30.0
Sep 15, 2026
Merged

noahgift merged 15 commits into
mainfrom
PMAT-557-book-v1.30.0

Conversation

@noahgift

@noahgift noahgift commented Sep 15, 2026 •

Copy link
Copy Markdown
Contributor

Closes #557. This is the booking for v1.30.0, a release that was tagged and never declared. It changes no code.

What

Measured

Receipt: docs/audits/impl-PMAT-557-receipt.md. Quorum receipt: .quorum/PMAT-557-book-v1.30.0.json (kind triage).

🤖 Generated with Claude Code

Which rows changed, by id

Hunk context can make the line above a hunk look like the row being edited. This compares rows by id instead:

python3 - <<'PY'
import yaml, subprocess
load=lambda ref: {r["id"]: r for r in yaml.safe_load(subprocess.run(["git","show",ref+":docs/roadmaps/roadmap.yaml"],capture_output=True,text=True).stdout)["roadmap"]}
b, h = load("origin/main"), load("HEAD")
print("added", sorted(set(h)-set(b)), "removed", sorted(set(b)-set(h)))
print("changed", [i for i in b if i in h and b[i] != h[i]])
PY

Output: 6 rows added (PMAT-557/558/559/561/566/567), 0 removed, and 6 changed (PMAT-526, 528, 529, 547, 555, 562). PMAT-545 and PMAT-527 are identical.

noahgift and others added 11 commits September 15, 2026 19:38
Pmat-Ticket: PMAT-557
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
#557)

Row measured from the tag: cut 2026-09-13T20:52:01Z, ten PRs, eleven tickets, the dogfood and crux documents. The cookbook field still names 0be3e1ec, which locks forjar 1.29.0; it is replaced by the paiml/forjar-cookbook#21 merge commit that locks 1.30.0 before this PR is opened. next.tag v1.31.0 due 2026-09-15T20:52:01Z. Tickets labelled release:v1.30.0 that v1.30.0 did not ship (PMAT-526, 528, 529) move to release:v1.31.0.

Pmat-Ticket: PMAT-557
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ree shipped rows say completed (Refs #557)

docs/audits/dogfood-1.30.0-receipt.md ends on a complete sentence and carries its one verdict: line (GO), so it was not truncated — it was committed without DOGFOOD-1.30.0-RECEIPT-END, which gate T requires. PMAT-555 (the 1.30.0 cut), PMAT-547 (#548) and PMAT-562 (#563) have merged and their issues are closed; their rows said planned/inprogress, which CB-2112 counts as ISSUE-CLOSED and CB-2115 as orphaned. CB-2112 37 -> 34, CB-2115 53 -> 50.

Pmat-Ticket: PMAT-557
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…estone (Refs #557)

#558, #559, #561, #566 and #567 were open GitHub issues with no roadmap row (CB-2115 ORPHAN-GITHUB). Each is minted from its issue so the id is the issue number, put on the new 1.32.0 milestone, and carries release: 1.32.0 so CB-2114 does not grow. CB-2115 53 -> 45 on this branch; the rows for #560, #564 and #565 arrive with PRs #568, #569 and #570.

Pmat-Ticket: PMAT-557
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…aiml/forjar-cookbook#21 (Refs #557)

60acf9c9 is the squash of forjar-cookbook#21: forjar = "1.30", Cargo.lock pins 1.30.0, cargo check --workspace --locked clean. 0be3e1ec, which the cut script copied from the previous row, locks 1.29.0 and gate T refused it.

Pmat-Ticket: PMAT-557
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… carry release:v1.31.0 (Refs #557)

Pmat-Ticket: PMAT-557
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Pmat-Ticket: PMAT-557
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Pmat-Ticket: PMAT-557
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Pmat-Ticket: PMAT-557
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ed, 3 refuted (Refs #557)

Pmat-Ticket: PMAT-557
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… ran (Refs #557)

Pmat-Ticket: PMAT-557
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@noahgift

Copy link
Copy Markdown
Contributor Author

quorum-review (AD-04): NOT agreed (auto_merge: checked=true was_armed=false disarmed=false)

{
 "ticket": "PMAT-557",
 "head": "05a58ba90d820563b1f7b344f33005931ecfd467",
 "width": 3,
 "executor": "agy",
 "agreed": false,
 "auto_merge": {
  "checked": true,
  "was_armed": false,
  "disarmed": false,
  "note": "auto-merge not armed"
 },
 "lanes": [
  {
   "lane": 1,
   "verdict": "FAIL",
   "findings": 2
  },
  {
   "lane": 2,
   "verdict": "PASS",
   "findings": 6
  },
  {
   "lane": 3,
   "verdict": "FAIL",
   "findings": 3
  }
 ]
}

noahgift and others added 2 commits September 15, 2026 20:50
…rds the merge rail's two findings (Refs #557)

The merge rail's lane 1 was right twice: the digest said the three shipped rows changed only status (the cut and sync steps also bump updated: and add labels on two of them), and the ticket asked only for the booking while the branch also repairs the records gates T and B refuse. The acceptance criteria now name that repair. Lane 3's claim that PMAT-545 and PMAT-527 were edited instead of PMAT-555 and PMAT-526 was checked by attributing every changed line to its row, and refuted.

Pmat-Ticket: PMAT-557
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… (Refs #557)

Pmat-Ticket: PMAT-557
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@noahgift

Copy link
Copy Markdown
Contributor Author

quorum-review (AD-04): NOT agreed (auto_merge: checked=true was_armed=false disarmed=false)

{
 "ticket": "PMAT-557",
 "head": "ce25c2f501d9cd594084d39df65624e2ccc3fbef",
 "width": 3,
 "executor": "agy",
 "agreed": false,
 "auto_merge": {
  "checked": true,
  "was_armed": false,
  "disarmed": false,
  "note": "auto-merge not armed"
 },
 "lanes": [
  {
   "lane": 1,
   "verdict": "FAIL",
   "findings": 3
  },
  {
   "lane": 2,
   "verdict": "PASS",
   "findings": 6
  },
  {
   "lane": 3,
   "verdict": "PASS",
   "findings": 0
  }
 ]
}

noahgift and others added 2 commits September 15, 2026 20:59
… (Refs #557)

A merge-rail lane twice read hunk context as the edited row and claimed PMAT-545 and PMAT-527 were changed. Parsing roadmap.yaml at origin/main and at HEAD and comparing rows by id: six rows added, none removed, six changed (PMAT-526/528/529/547/555/562), PMAT-545 and PMAT-527 identical. Recorded as the instrument in the evidence.

Pmat-Ticket: PMAT-557
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Pmat-Ticket: PMAT-557
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@noahgift

Copy link
Copy Markdown
Contributor Author

quorum-review (AD-04): three PASS — agreed (auto_merge: checked=true was_armed=false disarmed=false)

{
 "ticket": "PMAT-557",
 "head": "1c8d7a18a706a5d99be2f11be625612e31394167",
 "width": 3,
 "executor": "agy",
 "agreed": true,
 "auto_merge": {
  "checked": true,
  "was_armed": false,
  "disarmed": false,
  "note": "auto-merge not armed"
 },
 "lanes": [
  {
   "lane": 1,
   "verdict": "PASS",
   "findings": 0
  },
  {
   "lane": 2,
   "verdict": "PASS",
   "findings": 6
  },
  {
   "lane": 3,
   "verdict": "PASS",
   "findings": 0
  }
 ]
}

@noahgift
noahgift enabled auto-merge (squash) September 15, 2026 19:08
@noahgift
noahgift merged commit cb94fc2 into main Sep 15, 2026
23 of 25 checks passed
@noahgift
noahgift deleted the PMAT-557-book-v1.30.0 branch September 15, 2026 19:47
noahgift added a commit that referenced this pull request Sep 16, 2026
…n convention (Refs PMAT-574)

Round 4: lane 1 FAIL, lane 2 PASS, lane 3 FAIL. Two new claims, both refuted by
measurement, both now in the digest:

  gate R reports 6 PR(s) since v1.30.0 while gates A, E and T report 5. Both are
  right about different windows: gh lists five merged after the tag's timestamp
  (#571 #569 #568 #563 #548), and gate R's six are those plus #556 — the release
  PR whose squash commit IS the tag (`git rev-list -n1 v1.30.0` and #556's merge
  commit are both ddd0c44). The receipt says so where it quotes gate R.

  the CHANGELOG should cite #569 (the PR) rather than #564 for PMAT-564. The
  file's convention is the ISSUE, unbroken through the 1.30.0 section:
  (PMAT-549, #549), (PMAT-534, #534), (PMAT-540, #540), (PMAT-542, #542),
  (PMAT-535, #535).

Two lanes now share the same line-number error — the first bullet at
CHANGELOG.md:13 and the version line at README.md:97. Re-measured at HEAD by
numbering each blob out of git: CHANGELOG.md:10 heading, :11 blank, :12 bullet;
README.md:95 comment, :96 version. Two lanes agreeing does not move a
measurement.

6 confirmed, 8 refuted, 4 rounds, none agreed — recorded as it happened.

Pmat-Ticket: PMAT-574
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
noahgift added a commit that referenced this pull request Sep 16, 2026
* release: forjar 1.31.0 — the cut (PMAT-574, refs #574)

Version, lock, the CHANGELOG heading over the three-PR window, and the crux
comparison each behaviour owes.

The window is paiml/infra#605 answered end to end: drift's verdict reaches the
exit code (PMAT-562, #563), a run that inspected none of the resources it was
asked about declines instead of reporting zero drift (PMAT-564, #569), and a
service is converged only while the loaded unit executes the declared program
(PMAT-560, #568).

GATE H PASS 3 of 3 behaviour bullet(s) under [1.31.0] reconciled in
docs/audits/crux-1.31.0.md, each naming >= 3 of the 28 surveyed systems. The
rows carry no backticks inside the key span, because the gate greps the bullet's
first six words LITERALLY and `forjar drift` does not contain "forjar drift".

The bookkeeping gate B measures is part of the cut, not around it. Arm 7 was RED
on this branch: CB-2112 37 against 35, CB-2114 36 against 34, CB-2115 49 against
43. Repaired rather than raised, by the baseline's own convention (a row whose id
tail is the issue number, a milestone, and a bare `release:`):

  PMAT-557 #557, PMAT-560 #560, PMAT-564 #564  ->  status completed; their
                                                   issues are closed, so the
                                                   open rows read as
                                                   ORPHAN-ROADMAP and
                                                   ISSUE-CLOSED both
  PMAT-560, PMAT-574                           ->  release: 1.31.0
  #565 #572 #573                               ->  rows minted under their
                                                   issue numbers, release:
                                                   1.32.0, milestone 1.32.0
  PMAT-559                                     ->  its row's title was
                                                   truncated when it was
                                                   minted, which is what the
                                                   DRIFT finding was

Measured after, on this tree: CB-2112 34 (ceiling 35), CB-2114 34 (34),
CB-2115 43 (43). Nothing is lowered here — a ceiling may only be lowered from a
measurement of the COMMITTED tree.

PMAT-574 stays inprogress: a ticket is open in its own PR and the booking PR
marks it completed, which is the rule the commit-msg hook enforced when this
commit first said completed.

PMAT-565 is NOT in this release: #570 was still open when the cut was made, so
its behaviour owes no crux row and its ticket carries release: 1.32.0.

Pmat-Ticket: PMAT-574
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* release(1.31.0): the dogfood receipt, the cut log, and the README's version lines (Refs PMAT-574)

`make dogfood-release` exited 0 on the committed tree at 9e3a474 with all nine
gates green:

GATE A PASS 5 of 5 merged PR(s) since v1.30.0 carry a harness receipt
GATE B PASS ... CB-2112=34/35 CB-2114=34/34 CB-2115=42/43 held
GATE C PASS 211 CLI name(s), 12 MCP tool(s), 12 HTTP verb(s)
GATE D PASS 18 documented invocation(s); version claims reconcile with Cargo.toml
GATE E PASS 5 of 5 merged PR(s) since v1.30.0 carry a quorum receipt
GATE F PASS line coverage 96.43% >= 95%; nothing to mutate (no .rs differs)
GATE G PASS 43 contract(s) validate
GATE H PASS 3 of 3 behaviour bullet(s) reconciled in docs/audits/crux-1.31.0.md
GATE T PASS ... cut in flight: Cargo.toml is at 1.31.0

The three reds cleared BEFORE that run are in docs/audits/logs/PMAT-574-cut.log
with the measurement either side, because a gate that was never red proves
nothing about itself.

The README's two version lines move 1.30 -> 1.31. Gate D passed either way —
Cargo reads `forjar = "1.30"` as `>=1.30.0, <2.0.0`, which admits what this cut
ships — so this is the cut keeping the documented version equal to the shipped
one, not a gate forcing it. The first draft of the receipt claimed the lines
were already correct; they were not, and the claim is replaced by what the file
says.

Pmat-Ticket: PMAT-574
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* docs(PMAT-574): the receipt's diff list names itself; the round's evidence (Refs PMAT-574)

Lane 1 (gemini-3.1-pro-high, cited at impl-PMAT-574-receipt.md:1) read the
receipt's `## The diff` section and found it did not name the receipt doing the
listing, nor the quorum artifacts. True, and corrected.

The lane's other half — that the receipt is an unrequested file — is refuted by
scripts/dogfood/harness.sh: gate A fails any merged PR whose ticket has no
docs/audits/impl-<ticket>-receipt.md at HEAD ending in
IMPL-<ticket>-RECEIPT-END. Both halves are recorded in
.quorum/evidence/release-1.31.0-lanes.md rather than the convenient one.

The other two lanes returned NO-VERDICT (one wrote no verdict object, one hit
`UNAVAILABLE (code 503): No capacity available for model gpt-oss-120b-medium`),
and the evidence says so. A NO-VERDICT is not a PASS.

Pmat-Ticket: PMAT-574
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* quorum(PMAT-574): committed receipt — 1 round of 3 lanes, 6 confirmed, 4 refuted (Refs PMAT-574)

The round did not agree and the receipt says so: lane 1 FAIL with one cited
finding, lanes 2 and 3 NO-VERDICT (no verdict object; 503 with no capacity for
gpt-oss-120b-medium). lane_errors=2.

Three of the four refutations came from instruments that ruled before any lane
saw the branch — gate H on the crux keys, the commit-msg hook on a completed
ticket, and README.md itself on the receipt's claim that its version lines were
already right. judges_note says so rather than letting judges=3 read as three
independent tiers.

Pmat-Ticket: PMAT-574
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* docs(PMAT-574): the after-line sums, and the 42-vs-43 gap gets its real cause (Refs PMAT-574)

Round 3's lane 1 (gemini-3.1-pro-high) refuted two claims this branch had
written:

  1. the cut log's after-composition read `CB-2115 43 (ORPHAN-ROADMAP 24,
     ORPHAN-GITHUB 8, DRIFT 10)`, and 24 + 8 + 10 = 42. A total that
     contradicts its own breakdown is the black box this format exists to
     refuse.
  2. both the cut log and the dogfood receipt explained the 42-vs-43 difference
     as "the receipts this commit had not yet added". A markdown file cannot
     move ORPHAN-ROADMAP, ORPHAN-GITHUB or DRIFT.

Re-measured at 06:40Z: CB-2115 42, composition 24 + 8 + 10, which sums. `pmat
comply` reads GitHub LIVE and stamps every run with `snapshot: gh paiml/forjar
taken <ts>`, so 43 at 05:00Z and 42 since are two measurements of a moving
source. Both documents say that now.

The same lane's four other findings are off-by-one citation claims and are
refuted in .quorum/evidence/release-1.31.0-judges.md by re-reading each cited
file — CHANGELOG.md:12 IS the first bullet, crux-1.31.0.md:31 IS the first row,
README.md:96 IS `forjar = "1.31"`, and CB-2114's repair is two rows rather than
four because three were minted already carrying `release: 1.32.0`.

Receipt now records three rounds, 6 confirmed and 6 refuted, and names
gemini-3.8-flash-* as the lane that returned a SUCCESS envelope with no verdict
object in all three.

Pmat-Ticket: PMAT-574
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* quorum(PMAT-574): round 4 — gate R's six PRs, the CHANGELOG's citation convention (Refs PMAT-574)

Round 4: lane 1 FAIL, lane 2 PASS, lane 3 FAIL. Two new claims, both refuted by
measurement, both now in the digest:

  gate R reports 6 PR(s) since v1.30.0 while gates A, E and T report 5. Both are
  right about different windows: gh lists five merged after the tag's timestamp
  (#571 #569 #568 #563 #548), and gate R's six are those plus #556 — the release
  PR whose squash commit IS the tag (`git rev-list -n1 v1.30.0` and #556's merge
  commit are both ddd0c44). The receipt says so where it quotes gate R.

  the CHANGELOG should cite #569 (the PR) rather than #564 for PMAT-564. The
  file's convention is the ISSUE, unbroken through the 1.30.0 section:
  (PMAT-549, #549), (PMAT-534, #534), (PMAT-540, #540), (PMAT-542, #542),
  (PMAT-535, #535).

Two lanes now share the same line-number error — the first bullet at
CHANGELOG.md:13 and the version line at README.md:97. Re-measured at HEAD by
numbering each blob out of git: CHANGELOG.md:10 heading, :11 blank, :12 bullet;
README.md:95 comment, :96 version. Two lanes agreeing does not move a
measurement.

6 confirmed, 8 refuted, 4 rounds, none agreed — recorded as it happened.

Pmat-Ticket: PMAT-574
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* quorum(PMAT-574): round 5 — the evidence prose now matches its own tables (Refs PMAT-574)

Round 5's lane 1 was right, three times in one finding: lanes.md still opened
"Three rounds were run" and called 203d8a6 the final head, agy.md still said
"One round", and claims.md still said "The round reviewed head 203d8a6" — while
the table underneath and the receipt said four. Prose contradicting its own
table is exactly the shape this format exists to refuse.

All three now describe every round on the head it ran against (203d8a6,
e65a1fa twice, 1da75f2, b0ccb46) and say why the count moves: a round that
raises a real finding produces a fix, the fix moves the head, and the next round
reviews a head no earlier round saw. The rail's final round reviews the final
head and cannot, by construction, be described in a file it is reviewing.

6 confirmed, 9 refuted, 5 rounds, none agreed.

Pmat-Ticket: PMAT-574
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* quorum(PMAT-574): rounds 6-8, and the receipt's own counts (Refs PMAT-574)

Rounds 6 and 7 raised NO finding: every lane that returned a verdict passed, and
each round collapsed only because one lane hit `UNAVAILABLE (code 503): No
capacity available` for its model. That is the state of the agy backend this
morning, not a property of this branch, and the evidence says so.

Round 8's lane 1 raised four findings and all four were this receipt's own stale
counts: `recorded_at` said three author claims where four had been refuted by
lanes, `judges_note` said three rounds and four refutations where the digest
said five and nine, and two "three rounds" phrases had survived incremental
editing. Every one is corrected. That is the second time a lane has caught the
bookkeeping OF the bookkeeping, which is the argument for running it.

8 rounds, 6 confirmed, 10 refuted, none agreed.

Pmat-Ticket: PMAT-574
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* quorum(PMAT-574): the round count lives in ONE place now (Refs PMAT-574)

Rounds 8 and 9 refuted the same thing, and round 9 did it from two lanes at
once: the round count and the refutation count were restated in four files, and
had gone stale in three of them. agy.md still said five rounds, claims.md still
listed heads up to b0ccb46, and judges.md's opening said nine refutations over
ten items.

Fixed structurally rather than by another pass of hand-editing four numbers:

  - the per-round table in .quorum/evidence/release-1.31.0-lanes.md is the ONLY
    place rounds are counted and heads are named
  - agy.md and claims.md refer to that table and restate no number
  - judges.md states the adjudication count once, where the gate reads it
  - the receipt keeps rounds / claims_confirmed / claims_refuted, which the
    gate validates against the digest's own items

The lanes table also says out loud what it cannot cover: the merge rail runs its
round on the FINAL head, and that round cannot be described in a file it is
reviewing.

6 confirmed, 11 refuted.

Pmat-Ticket: PMAT-574
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* quorum(PMAT-574): the stale strings a silent no-op edit left behind (Refs PMAT-574)

Round 11 refuted, from all three lanes, the claim that the structural fix had
landed:

  - .quorum/evidence/release-1.31.0-lanes.md still opened "Eight rounds were
    run" and named b0ccb46 as the last head. The edit meant to replace that
    paragraph matched nothing and reported success, which is the failure mode
    worth naming: a replacement that silently applies to zero bytes.
  - agy_teamwork.mode still read "one round of three sandboxed agy quorum
    lanes" beside "rounds": 9.
  - docs/audits/impl-PMAT-574-receipt.md still said "the round that produced
    it".

All three fixed, and this time the tree was SWEPT — every count beside the word
"round" in the evidence, the receipt and both audit documents — rather than
assumed. The sweep also separated the live claims from the QUOTATIONS: the
digest quotes stale strings so its findings can be checked, and the lanes table
now says so in its own words.

Round 10's three findings are recorded as false: it claimed the evidence
sha256s and byte counts were stale, every one matches byte for byte at HEAD,
and the total it proposed does not equal the sum it listed.

6 confirmed, 12 refuted.

Pmat-Ticket: PMAT-574
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.

release goal: RED — GATE T FAIL v1.30.0 is reachable from HEAD, at or above the floor v1.25.0, and h

1 participant