duckworth: row 199 r2+r3 re-review (duckworth-0017) changes B3-B4 on Megavolt c2c729ddf, row 193 r5 (duckworth-0018) approve on Morgana e2d161e2e, federation r4.6 (duckworth-0019) approve on Gizmoduck 1b32e65e3

This commit is contained in:
jason.woltje committed 2026-10-20 14:29:50 -05:00
1 parent 6ab9cd9271
commit 4065ed59f9
4 files changed
+96

No files matched your search

@@ -0,0 +1,14 @@
# Review: Gizmoduck federation design r4.6 (duckworth-0019)
Reviewer Duckworth (Opus 5.5), 2026-10-20. Static review, no code run.
Subject: agents/gizmoduck/work/federation/DESIGN.md, diff acd5f1f42..1b32e65e3 (one commit, gizmoduck-0025).
DESIGN.md at 1b32e65e3 has sha256 ebd7a291…8d678c14, checked. The commit also appends one SESSIONS line.
## Verdict: approve
- N21 resolved. 3.6 item 7 and the R6 row carry row 193 r5's sentence (e2d161e2e, 5.7), word for word. R6
tests that the notice equals it exactly.
- The start-order line now matches the section 7 table. R1 starts now, R5 lands after R1, and R2 and R6
wait on Sage's #412 phase 1.
The host variables still wait on Jason's Q2, and R8 refuses to start until they're resolved.
+11
View File
@@ -0,0 +1,11 @@
# Review: Morgana row 193 design r5 (duckworth-0018)
Reviewer Duckworth (Opus 5.5), 2026-10-20. Static review, no code run.
Subject: agents/morgana/work/queue-193/DESIGN.md, diff edc794933..e2d161e2e (one commit, morgana-0011).
DESIGN.md at e2d161e2e has sha256 dd7fcb41…b523, checked. Doc-only.
## Verdict: approve
The 5.7 sentence now names every governance read the table marks visible: decisions, inbox, `agents`
(claims), `tasks` and `project.file`. The governance pin checks each one, so the sentence and the test
can't drift apart. FED r4.6 uses the same sentence word for word (duckworth-0019).
+68
View File
@@ -0,0 +1,68 @@
# Review: Megavolt row 199 design r2 and r3 (duckworth-0017)
Reviewer Duckworth (Opus 5.5), 2026-10-20. Static review, no code run.
Subject: agents/megavolt/work/queue-199/DESIGN.md on megavolt/row199. r2 is e806656b1 (sha256 435ee3b1…2e19,
checked, megavolt-0004). r3 is c2c729ddf (sha256 d1ef44c6…d90d, checked, megavolt-0006), which supersedes r2.
Diffs 624e8ea3a..e806656b1 and e806656b1..c2c729ddf, one commit each. Code read at 992650232.
Against duckworth-0013 (REVIEW.md, 6ab9cd927).
## Verdict: changes, B3 and B4
## r1 codes
- B1 resolved (D3a, T1, T5, mutants). ENOENT on a `store` path loads as absent and shows `not-issued`. Every
other defect still refuses start, and `{file}` keeps E2's behavior. Both mutants are in.
- B2 resolved in the design text (D9 step 5, step 2). `protocol.https.allow=always` and
`http.followRedirects=false` are the only additions to SAFE (seat/src/working.mjs:92-98). The helper is
bound to https and host:port, and step 2 compares the port. working.mjs runs git under seat
`gitEnv` (checkout.mjs:79-88), which passes only PATH from the bus env, so no proxy or `GIT_SSL_*`
variable reaches it. The test for B2 is B3 below.
- N1 to N5 done. N3: `work-not-yours` reads the last `recordPush`. N4: D9a. N5: D9b, and no op returns a
token.
## Blockers
B3. T3 can't run with the flags it tests. The fake Gitea is "a node http server on 127.0.0.1" (section 11),
which is plain http. `publish` allows only https (D9 step 5), and the helper answers only `protocol=https`.
So the happy path fails, or the test loosens the flags it is meant to check. The 302 test passes either way:
git refuses the http transport before any request, so "the second port receives no request with an
Authorization header" holds with the redirect check removed, and the `http.followRedirects=false` mutant
survives.
Fix: the fake serves TLS with a scratch CA. The test passes the CA through a test-only seam, the way
`FSCK` is replaced in tests (working.mjs:100), and production adds no CA flag. The 302 test also checks
that the first port received the request, so it can't pass by never connecting. Same for the wrong-port
and `remote-unrelated` tests.
B4. The decision doesn't bind the commit that gets published. D9 step 1 says the decision "names the
commit" and cites `checkLand`. But `#authorityFor` binds a decision to action, role, thread and `target`
(the task ref) only (broker.mjs:769-798). `checkLand` gets its commit from somewhere else: `readLanding`
reads the review verdict's commit (bus/src/landing.mjs:144-150), and `#landFacts` compares it with
`#latestPush` (broker.mjs:936-937). D9 names no field that carries a commit for `git.push.remote`, and
`decision.raise` has none today. Without one, Jason approves a publish while the task's latest push is A.
The agent pushes B to the working repo, then publishes B under the same decision. `#latestPush` is B and
the source is B, so every check passes.
Separately, step 5 pushes `<src>`, the work ref, by name. A push to the working repo between
`checkPublish` and the git call moves that ref, so even a bound commit isn't what goes out.
Fix:
- Name the carrier: a `commit` in the raise's context for `git.push.remote` (or another field), and the
code that reads it.
- `checkPublish` refuses unless that commit equals `#latestPush(...).commit` and the work ref's tip.
- Step 5 pushes that oid, `git push <remote> <oid>:<dst>`, not the ref name.
- T3's "decision for another commit" test covers the A-then-B case above, and a mutant pushes the ref name.
## Notes (do not block)
N6. D9a: main follows root only in `seed` (working.mjs:164-176), which runs in push, review and land. Say
whether `publish` seeds first. If not, a human pull into root reaches main only at the agent's next push,
and `remote-unrelated` stays until then.
N7. D9a also means each publish carries root commits between upstream's tip and main, which is landed work
not yet upstream, onto the agent's fork. That fits O1. Say it in D9a so nobody reads the fork as holding
only the agent's commits.
N8. Citation: `vocabulary.mjs` is
packages/business/src/vocabulary.mjs, and its ROUTED starts at :58, not :52-55.
## r3 rulings (mos-1027)
The hard wait is right for now. `git.push.remote` is in neither ROUTED (broker.mjs:44-69, vocabulary.mjs:58),
so it's gated and every publish needs a human-resolved decision, spent once. B4 is what makes that decision
mean "this commit". O1, Q-M3 and Q-M4 match my r1 inputs.
+3
View File
@@ -1374,3 +1374,6 @@ are never rewritten or removed; corrections are new entries.
2026-10-20T19:22Z | Duckworth (Opus 5.5) | federation design r4.5 re-review (duckworth-0012), Gizmoduck b67bc6de9..acd5f1f42 | approve, B9 N20 resolved, note N21 R6 notice wording
2026-10-20T19:25Z | Duckworth (Opus 5.5) | row 199 design r1 review (duckworth-0013), Megavolt 624e8ea3a | changes B1 (missing store file stops bus start), B2 (token not bound to remote host, redirects), notes N1-N5
2026-10-20T19:25Z | Duckworth (Opus 5.5) | row 193 design r4 re-review (duckworth-0014), Morgana 76f4605e1..edc794933 | approve, B3 and N5 resolved
2026-10-20T19:29Z | Duckworth (Opus 5.5) | row 199 design r2+r3 re-review (duckworth-0017), Megavolt c2c729ddf | changes B3 (T3 fake is http, https-only flags untested), B4 (decision binds no commit, push by ref name)
2026-10-20T19:29Z | Duckworth (Opus 5.5) | row 193 design r5 re-review (duckworth-0018), Morgana e2d161e2e | approve
2026-10-20T19:29Z | Duckworth (Opus 5.5) | federation design r4.6 re-review (duckworth-0019), Gizmoduck 1b32e65e3 | approve