docs(plans): brief, ledger guideposts beyond messages per closed issue (#1514)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
# Ledger guideposts beyond messages per closed issue
|
||||
|
||||
Brief for one queue row. Written by Sage on 2026-10-04 after Jason's
|
||||
ruling on row 7 (lead decision 42, item 7): "We are chasing a metric that
|
||||
may be useless. A good starting point perhaps, but we will need to augment
|
||||
the guideposts over time." It's also the second brief toward row 11's gate.
|
||||
|
||||
## Ledger: Jason's overhead per finished piece, unattended pieces, rework and wait time
|
||||
|
||||
### Problem
|
||||
|
||||
The ledger's one success number is human messages per closed issue
|
||||
(`packages/ledger/src/ledger.mjs`, `humanMessagesPerClosedIssue`). The
|
||||
2026-09-28 run gave 33.0 against row 7's gate of under 10. The number
|
||||
counts every message Jason sends to a mosaic-stack T3 thread the same way.
|
||||
A ruling he alone can make ("1. pass" on Gate G) counts the same as a
|
||||
message he shouldn't have had to send: launching a seat, relaying between
|
||||
seats, finding a credential, correcting an agent, or asking "Did you
|
||||
actually start?" after Sage said it had. The goal is for Jason's time to go
|
||||
to decisions, not admin, and the current number can't tell the two apart.
|
||||
It also divides by Gitea issues, while work is done and accepted per queue
|
||||
row.
|
||||
|
||||
### Owner and reviewer
|
||||
|
||||
- Owner: darkwing, who built the ledger's queue section (Piece E).
|
||||
- Reviewer: filbert.
|
||||
|
||||
### Files owned
|
||||
|
||||
- `packages/ledger/src/ledger.mjs`, `packages/ledger/src/cli.mjs`,
|
||||
`packages/ledger/src/t3.mjs`, `packages/ledger/src/queue-checks.mjs`
|
||||
- a new `packages/ledger/src/guideposts.mjs` if the owner prefers to keep
|
||||
this apart
|
||||
- `packages/ledger/tests/` (new or changed test files and fixtures)
|
||||
- `packages/ledger/README.md` (the guideposts section and the weekly
|
||||
routine)
|
||||
|
||||
### What ships
|
||||
|
||||
All four measures cover the run's date range. Each prints next to the
|
||||
current totals line, which stays unchanged.
|
||||
|
||||
1. **Overhead per finished piece (the headline).** A tag file named with
|
||||
`--tags FILE` lists Jason's in-range mosaic-stack messages by T3
|
||||
message id.
|
||||
- Each entry is `{ "id": "<message_id>", "kind": "decision" | "overhead", "row": <id or null> }`.
|
||||
An overhead entry also has `"why": "launch" | "relay" | "credential" | "correction" | "status" | "other"`.
|
||||
- The file holds ids and tags only, never message text. The ledger
|
||||
prints no transcript, and the tag file doesn't either.
|
||||
- Overhead per finished piece is overhead messages divided by rows that
|
||||
moved to `done` in range, read from the queue log.
|
||||
- Every in-range human message id the ledger counts must be tagged. An
|
||||
untagged id, a duplicate, an unknown id or an unknown kind makes the
|
||||
measure `incomplete` and names the ids. It never guesses.
|
||||
- Without `--tags`, the measure prints `not tagged`.
|
||||
2. **Unattended pieces.** Of the rows done in range, the share with no
|
||||
overhead message tagged to them. Overhead tagged `row: null` counts in
|
||||
measure 1 but not here, and the output prints that count.
|
||||
3. **Rework.** For rows done in range, the review rounds and the
|
||||
`changes` verdicts in the queue log, per row and as a total.
|
||||
4. **Waiting on Jason.** For each row that sat in `waiting-on-jason`
|
||||
during the range, the hours it spent there, from the queue log's
|
||||
moves. This one is reported, not scored. It shows where the queue
|
||||
stalls, not a mark against Jason.
|
||||
|
||||
The `--json` output carries the same fields. Tests use fixture queue logs,
|
||||
fixture T3 databases and fixture tag files covering:
|
||||
- every refusal above;
|
||||
- a row closed and reopened in range;
|
||||
- a range with no done rows, where the per-piece measures print `none`
|
||||
rather than dividing by zero.
|
||||
|
||||
`node --test packages/ledger/tests/` and `bash scripts/test-queue.sh` pass.
|
||||
|
||||
The README's weekly routine gains one step. Sage writes the week's tag
|
||||
file at `agents/sage/work/ledger/<date>_tags.json`, commits it with the
|
||||
run, and Jason corrects any tag by saying so. Sage commits the correction
|
||||
as a new file, never by editing the old one.
|
||||
|
||||
### Out of scope
|
||||
|
||||
- Row 7's gate and whether these measures replace the current number.
|
||||
That stays Jason's decision once a few weeks of runs exist.
|
||||
- Automatic tagging by a model. Sage tags by hand at first, and the
|
||||
ledger only checks the file.
|
||||
- Corrections recorded in BUILD-LOG and fixes after a commit. Neither has
|
||||
a machine-readable form yet, so they wait on that.
|
||||
- Messages in other T3 projects. The ledger already scopes T3 to the
|
||||
mosaic-stack project.
|
||||
|
||||
### Gate
|
||||
|
||||
Filbert approves through the queue (`queue review record`). Then Sage
|
||||
commits the candidate, and the suites above must pass on it. Before
|
||||
closing, Sage runs the ledger with `--tags` on the 2026-09-27 to
|
||||
2026-10-03 week and posts that run on #1514 next to the plain run.
|
||||
Reference in New Issue
Block a user