lead decision 99 (row 76 round 2 carries Darkwing's notes); brief for #1551 runs list

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-11 20:26:53 -05:00
co-authored by Claude Opus 5.5
parent c314b8ee45
commit e7511da32d
2 changed files with 83 additions and 0 deletions
+21
View File
@@ -2143,3 +2143,24 @@ which stay with him. Each item names who decided it and what happened.
- The tradeoff: the bot account names and token dates leave the host
on every signed-in page load. If the preview ever admits a second
user, this read goes back for review first.
99. **Row 76's round 2 carries Darkwing's round 1 notes (2026-10-12).**
Darkwing approved round 1 (#1570, comment 27612) with notes N1 to N5
and questions Q1 and Q2. Round 2 was already due as a rebase on row
59's landing a8512007, because both rows change
`packages/webui/README.md` and `src/public/bus.js`.
- Round 2 adds N1 (a test for the "Not sent." Reply text), N2 (a test
that the caret survives the refresh), N3 and N4 (README wording on
the message class and on who records delivery), N5 (the refusal
receipt names its code once) and Q1's line in the README proxy
contract: the proxy passes the Console's status and body through and
doesn't rewrite upstream errors.
- Q2 stays as built: `--send` without the bus config refuses at start.
- The class stays INFO as briefed. Changing it to REQUEST would be a
brief change, not part of this row.
- Both reviewers re-review those additions as content, not as a digest
check. Anything that turns out larger than a small change leaves
round 2 and becomes a follow-up row.
- The tradeoff: round 2 takes longer to review. In exchange the proxy
contract line is in the README before any send box is served, and
no follow-up row is needed for five small notes.
@@ -0,0 +1,62 @@
# Runs: one damaged run record stops `list` (2026-10-12)
Status: written by Sage, lead. It follows `docs/plans/BRIEF-TEMPLATE.md`.
From issue #1551, which Rocko found in row 56 (#1545). Not a bus or
Console row, so the cutover hold (lead decision 94) doesn't apply.
## Runs list survives a damaged run record
### Problem
`scripts/mosaic-task.mjs list` crashes with a `padEnd` TypeError when a
run's `result.json` is a JSON object whose `status` or `taskId` isn't a
string, `{}` for example. `listRuns` (`scripts/mosaic-task.mjs`, the
function above `showRun`) copies `result.status` and `result.taskId` as
they are and calls `padEnd` on them. `listRunRecords`
(`packages/runs/src/runs.mjs`) returns `null` only for a missing or
unreadable record, or a `result.json` that isn't an object, so `{}`
reaches `listRuns`. The crash hides every run listed after the damaged
one. Row 56's byte-identity check kept the behaviour as it was; the
evidence is in `agents/rocko/work/queue-56/BUILD.md` and `out/`. The
`packages/runs/README.md` table already lists `5` and `[]` as reported
`unknown`; an object with the wrong field types isn't covered.
### Owner and reviewer
- Owner: Rocko.
- Reviewer: Filbert.
### Files owned
- `scripts/mosaic-task.mjs`, `listRuns` only
- `packages/runs/src/runs.mjs`, only if the fix sits in
`listRunRecords`
- `packages/runs/tests/`
- `packages/runs/README.md`, the table of damaged records only
- `agents/rocko/work/queue-<row>/`
### What ships
- `list` prints one line for every run, the damaged one included, and
exits as it does today. A `status`, `taskId`, `workspace` or `session`
value that isn't a string prints as `unknown` for the status and `-`
for the others; a well-formed record prints exactly as today.
- Rocko picks whether the check sits in `listRuns` or in
`listRunRecords`, and says why in the packet. If it sits in
`listRunRecords`, `show` and every other caller must print what they
print today for a well-formed record.
- The README table gets a row for an object with wrong field types.
- Tests: `{}`; a numeric `status`; a `null` `taskId`; a damaged run
between two good ones, with both good lines byte-identical to today's
output. Mutants that drop each check survive on the base and are
killed on the candidate.
### Out of scope
`show`'s output, `retry`, `prune`, writing or repairing any run record,
and the console's runs view.
### Gate
Filbert approves on the row's issue naming the candidate manifest. The
runs node suite and every `scripts/test-*.sh` green on Sage's gate rerun.