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:
@@ -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.
|
||||
Reference in New Issue
Block a user