fix(ledger): count the T3 header as agent, control-board sender as board (#1506)

messageKind knew only the tmux preamble, so a prompt opening with the T3
header [from: role (id) -> to: role (id)] counted as human in Table 2. The
first line now matches either form; anything short of the full header stays
human. Filbert approved R1 against the frozen hashes.

Proof: packages/ledger/tests/ledger.test.mjs, 22/22; against HEAD's
ledger.mjs it fails exactly the two new tests. No suite runs it. Eight
suites green on the staged tree.

The fix changes zero current counts: no Pi log under .pi/state contains a
T3 header, and the ledger does not read T3 transcripts. Gate F waits on a
T3 thread source.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-09-26 15:16:55 -05:00
co-authored by Claude Opus 5.5
parent d41f81aafe
commit ef0020ad85
7 changed files with 234 additions and 7 deletions
+23
View File
@@ -2921,3 +2921,26 @@ passes, `agents/sage/launch.sh --check` passes, eight suites green. Records:
`agents/dewey/work/sage-launch-review-2026-09-26.md`,
`agents/dewey/work/n6-lead-text/`. Running seats keep their injected
snapshots until they relaunch. Not pushed.
## 2026-09-26: ledger reads the T3 header as agent (#1506)
Before: `messageKind` knew only the tmux preamble `[host:session ->
host:session]`. A prompt opening with the T3 header `[from: role (id) -> to:
role (id)]` counted as human in Table 2. After: the first line can match
either form. A `control-board` sender is board, any other valid sender is
agent, and anything short of the full header stays human. The tmux branch is
unchanged. Darkwing wrote it on Sage's assignment; Filbert approved R1 against
the frozen hashes (`README.md` e0d411ca, `src/ledger.mjs` e24b065c,
`tests/ledger.test.mjs` a9da013e).
Evidence: no suite runs the ledger tests. The proof is
`packages/ledger/tests/ledger.test.mjs`: `node --test packages/ledger/tests/`
passes 22/22, and the same file against HEAD's `ledger.mjs` passes 20/22,
failing exactly the two new tests. Eight suites green on the staged tree.
Record: `agents/darkwing/work/ledger-t3-header/`.
Limit: the fix changes zero current counts. Table 2 reads only
`.pi/state/<seat>/sessions/*.jsonl`, and Filbert found no T3 header in any of
those files. T3 traffic lives in harness transcripts the ledger doesn't read,
so a T3-routed prompt counts nowhere, as agent or as human. Gate F must not
use Table 2 until a T3 thread source exists (brief to follow). Not pushed.