duckworth: row 195 DESIGN r7 (duckworth-0087) approve on Darkwing 5425ea2f3

This commit is contained in:
2026-10-21 02:18:28 -05:00
parent 7c8c38b698
commit 58d930f893
2 changed files with 65 additions and 0 deletions
+64
View File
@@ -0,0 +1,64 @@
# Row 195 DESIGN r7 (duckworth-0087)
Reviewer Duckworth (Opus 5.5), 2026-10-21. Darkwing asked for this review. Candidate `darkwing/row195-r7`
5425ea2f3 on c515273db, `agents/darkwing/work/queue-195/DESIGN.md` blob 17dfbad95b (388 lines). The r6
design was approved as b7239bb66 (duckworth-0055, REVIEW-r5.md). 7398b7dd7 carries r6 unchanged, so
`git diff 7398b7dd7 5425ea2f3` is the whole r7 change. Gate: this design, then the manifest.
## Verdict: approve
1. Business id (§7). `packages/cli/systemd/mosaic-hostcheck.service` at 5425ea2f3 has
`[email protected]`. That holds for .53's id `mosaic-stack`, so DEFERRED 240 N1
(da3051ccc, an ancestor of the candidate) doesn't bind. Per DEFERRED, the fix is due "before the first
install whose business id isn't `mosaic-stack`", and §7 stops the window before W8 if a go names
another id. P11 checks `Before=` on the host. N2 stays deferred, and the design doesn't edit the run
sheet.
2. Nothing touches .53. §6 opens with sage-1809. Every root step is ops-01's and waits on a Jason
decision. §9 changes only `case1-accept.sh`, its test, TOOLS.md and BUILD.md. The test fakes every
host binary and has no path to .53 or to dragon-lin's live state.
3. §1 dev.args is consistent with `scripts/case2-unit.sh`.
- The usage is at :54. The unit names are at :51-52 (F1). The factory-only `--tester-port` is at :163,
with the 1024..65535 floor at `webui/src/cli.mjs:33`. `--port` and `--business` are at :167. The
factory refusals are at :168-169. `ENV_FILE` is at :243 and `MOSAIC_CLAUDE_BIN` at :247.
- `stack-upgrade.sh` read_args (:124-148) requires a root-owned args file with no group or other
write and exactly one 40-hex `--copy`. It refuses unknown pre-`--` args. The `root:root` 0644
file §1 describes passes.
4. §4 is consistent with `stack-upgrade.sh`.
- The `--no-rehearsal` cites are :323-324 (`no-backup`, `rehearsal-required`).
- The exits at :29-30 match: 5 is `args-failed` with the new stack live, and 2 leaves both units
stopped (:239-240, :247).
- The re-install now stops the Console, then the bus, before the render. That settles row 230 N1
(webby-0046), which was on my carry list. `stop_wait` (:211-214) does the same in the driver.
5. §5 case1-accept.
- F1-F11 and P1-P11 are stated with commands and marks. `curl /healthz` (F2) is
`webui/src/serve.mjs:641`. `mosaic talk <role> <text> --wait <seconds> --tester` (F3) is at
`cli/src/cli.mjs:56`. `mosaic launches list [--json]` (F7) is at cli.mjs:63, with `launch.by`
at `launcher.mjs:236`.
- P9's eight items are hostcheck 1-6, the jarvis bwrap refusal and the empty `mosaic` group. They
follow from run sheet section 4's `dpkg-statoverride --add root mosaic 0750 /usr/bin/bwrap`. The
`^ok [1-6] ` match fits `case1-hostcheck.sh`'s pass() output (:69).
- The `--root` seam is refused as root, as at `case1-hostcheck.sh:52`. Every mutant names a killing
case, and the cases cover all 12.
6. §6 lists W0-W14, each with an owner. The run sheet section cites in W2-W10 match the run sheet's
ten headings at 5425ea2f3. The five row 226 items are listed. Item 4 (who writes `dev.args`) is open, as Darkwing
says. The run sheet at section 7 says "I2's install writes it", and `mosaic` can't write
`/etc/mosaic-stack`. So row 226 has to answer it before W10, and the design says the run sheet takes
that answer. That's the right place for it.
7. §9's manifest is four paths with no change to the landed scripts, the run sheet or live state. The
row 230 r2 N1 exclusion holds: on .53 both the install and the upgrade start from stopped units, so
the "still on copy" line isn't reached.
The carry items in my row195-build-carry list are handled. The A2f `stale-start` line is in §4 point 3.
The claude path is `/opt` under sage-1522 (§1 and run sheet section 3). Row 230 N1 is item 4 above.
## Notes (no block)
- N1. §1:82 cites `broker.mjs:245` for "human id not `tester`". That cite was carried from r6, and at
5425ea2f3 :245 is `THREAD_PAGE`. The check is `broker.mjs:321` (`b.human === 'tester'` →
`invalid-business`). Doc-only.
- Not a finding: :21 and :326 say row 226 is "unclaimed". Darkwing already flagged this as known. 226 is
Gosalyn's, briefed, not started (sage-1814), and it's fixed in the next revision or BUILD.md.
## My runs
None. Design review only. All cites were read with `git show 5425ea2f3:<path>`.
+1
View File
@@ -1440,3 +1440,4 @@ are never rewritten or removed; corrections are new entries.
2026-10-21T04:53Z | Duckworth (Opus 5.5) | row 234 r1 content review (duckworth-0084) on Gizmoduck 861182fa6, manifest 2114a09d | approve on content, N10 hosts verb check by plain-object key, A9 needs no behaviour mutant, record waits on r2 merge check |
2026-10-21T05:03Z | Duckworth (Opus 5.5) | row 234 r2 rebase check (duckworth-0085) on Gizmoduck b0320d395, manifest 08306afe | approve: 13 = range-diff, runtime.mjs and cli/README.md clean 3-way merges, thread-launch 4/7 in my session left to Sage's gate (sage-1732), recorded against 29923 |
2026-10-21T05:51Z | Duckworth (Opus 5.5) | row 234 r3 schema count tests (duckworth-0086) on Gizmoduck c783d5e39, manifest 4782c8b5 | approve: counts 18/71, two T46 untimed lines only vs 233 blob, five hosts writes each in a tx with a grant.* event, 38 r2 blobs unchanged; no runs of mine; record waits on Sage's comment id |
2026-10-21T07:18Z | Duckworth (Opus 5.5) | row 195 DESIGN r7 review (duckworth-0087) on Darkwing 5425ea2f3 | approve; N1 stale broker.mjs:245 cite (now :321), doc-only; agents/duckworth/work/row195/REVIEW-r7.md |