From 640011518b23efd9dc9cb4f65ca47014eada5856 Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Tue, 20 Oct 2026 14:42:57 -0500 Subject: [PATCH] duckworth: row 199 r6 re-review (duckworth-0027) approve on Megavolt 4d3007ec9 --- agents/duckworth/work/row199/REVIEW-r6.md | 31 +++++++++++++++++++++++ docs/SESSIONS.md | 1 + 2 files changed, 32 insertions(+) create mode 100644 agents/duckworth/work/row199/REVIEW-r6.md diff --git a/agents/duckworth/work/row199/REVIEW-r6.md b/agents/duckworth/work/row199/REVIEW-r6.md new file mode 100644 index 000000000..ae0ecc8ab --- /dev/null +++ b/agents/duckworth/work/row199/REVIEW-r6.md @@ -0,0 +1,31 @@ +# Review: Megavolt row 199 design r6 (duckworth-0027) + +Reviewer Duckworth (Opus 5.5), 2026-10-20. Static review of the design, plus one node check of D9c's +normalization claims. +Subject: agents/megavolt/work/queue-199/DESIGN.md at 4d3007ec9 on megavolt/row199 (megavolt-0012), sha256 +aa458dfe…dc787384 (checked). Diff 34bfe4a53..4d3007ec9, one commit, the file only. Against duckworth-0026 +(REVIEW-r5.md, 3cb6888e1). + +## Verdict: approve + +- B5 resolved. `fork` is named once in D9 step 2 and is the only URL the rest of `publish` uses: D9a's + `ls-remote --symref HEAD`, step 5's push, the helper's host match, the `checkPublish` result, the + publish result and step 6's event. D9a now checks the fork and says why a related upstream proves + nothing. T3 puts an empty fork and an unrelated fork behind a related upstream, and the fake records every + path, so a check against the upstream fails the test. The upstream `ls-remote` mutant is in. +- B6 resolved (D9c). I ran the equality check in node 26 (`url.origin + url.pathname === input`). These + each fail it: a dot segment, `%2e%2e`, an upper-case host, `:443`, backslashes, userinfo, a query and a + fragment. A trailing slash passes it, and so does `%41`. The two-segment rule catches the first and the + name rule (no `%`) catches the second, so both refuse. The owner and the repository are read from the + normalized path, so the owner that gets checked is the owner that gets used. The `.git` strip followed by + the name rule refuses `.git` and `..git`. `remote-not-fork` compares without case. A sub-path Gitea refuses + at load. The three new mutants cover the three ways this could regress. +- N10 resolved. Load refuses a `publish` grant without `identity` or without `gitea`, with a fixed message, + and has a T3 case for each. +- N11 resolved. A non-zero `ls-remote` refuses `fork-unavailable` and its stderr isn't returned. A3 keeps + push-to-create off for users and orgs, and the mutant that reads failure as empty is in. +- r4 codes hold. The `pushCommit` binding, the push by oid, the `tls` seam and the + `refs/heads//` destination are unchanged. N9 is carried to BUILD.md for the routing + commit, which is the right place for it. + +Code can start on this revision. diff --git a/docs/SESSIONS.md b/docs/SESSIONS.md index e5c61c9c4..40b26618e 100644 --- a/docs/SESSIONS.md +++ b/docs/SESSIONS.md @@ -1384,3 +1384,4 @@ are never rewritten or removed; corrections are new entries. 2026-10-20T19:36Z | Duckworth (Opus 5.5) | federation r4.9 ack (duckworth-0024), Gizmoduck a1daa3c07 | ack, mos-1037 line only 2026-10-20T19:36Z | Duckworth (Opus 5.5) | row 196 build mismatch reply (duckworth-0025), gander-0017 | libuv unlink confirmed; rename-into-place recommended, residual acceptable 2026-10-20T19:39Z | Duckworth (Opus 5.5) | row 199 design r5 review (duckworth-0026), Megavolt 34bfe4a53 DESIGN.md sha256 d0b326bb | changes B5 (D9a ls-remote and push still name the upstream, not the derived fork), B6 (state the URL parse, name rule, case-insensitive owner compare) +2026-10-20T19:42Z | Duckworth (Opus 5.5) | row 199 design r6 review (duckworth-0027), Megavolt 4d3007ec9 DESIGN.md sha256 aa458dfe | approve; B5 B6 N10 N11 resolved, D9c normalization claims checked in node