Reviewer: GPT-6-Astra via Codex, on Paul's instruction.
Reviewed feat/r2-shared-chrome at 92e74ea310ec53cec85c0ab46a8b525e13332f54 as one diff from merge base/main 7543cf5ad22a603ed33eb668abffa65bf3c58519, against AGENTS.md, REVIEW-BRIEF, R2-BRIEF and shared-chrome spec 49c7b01. Review only in detached /tmp worktrees; no branch edits, commits, pushes or merges.
VERDICT: CHANGES-REQUIRED
- P2 / blocking —
internal/docs/signin_return.go:95(alsointernal/docs/home_routes.go:123): an existing session is not sufficient to redirect away from sign-in. A guest signs in through a document share; the owner revokes the guest's last share. The admission guard still correctly refuses that session and sends GET/to/signin. The new shortcut sees the still-valid session cookie and sends/signinstraight to/, forever. Reproduced through HTTP:/303/signin,/signin303/, repeated. A scratch integration test of this exact grant/sign-in/revoke sequence passes on main (the sign-in page is 200) and fails on this branch (303 back to/). Fix the shortcut so it only skips sign-in for a currently resolved/admitted identity; a rejected identity must get a reachable sign-in/access-denied/sign-out route. Apply the same principle to the Home session shortcut and add a regression through the real router.
- P2 / blocking —
internal/docs/auth.go:479, interacting withinternal/docs/signin_return.go:105: “Use a different address” discards the deep-link destination. The sent page links to bare/signin; the new standalone handler treats that as a fresh start and overwrites the sealed return cookie with/. Browser reproduction: open/d/<id>?from=mailsigned out, submit an address, click “Use a different address”, finish sign-in: lands on/. The otherwise identical flow without that click returns to the exact document/query. Preserve the validated remembered destination in this explicit retry link/flow while retaining the intended reset for a genuinely fresh bare/signin. Add a real-browser or router regression for the retry path.
- P2 / blocking dependency —
internal/docs/handlers.go:648and the pinned estilochrome/chrome.css:107,120: the new phone rename control is obscured by the bar's end controls. With the configured switcher at 390px, focused Rename spans x=173..248 and overlaps Menu starting at x=202; the button's centre hits Menu. At 320px, the input overlaps Menu even before focus and the focused Rename centre hits the switcher. The 52px/no-overflow checks pass despite this. Fix in estilo (posted to oficina/estilo #10), consume the corrected main pin, and add focused/unfocused 320/390px collision and hit-target checks in the adopter. Do not merge the current dependency.
- P3 / nonblocking —
fixtures/browser-drive.mjs:1039and:1106: the existing browser drive still depends on the removed topbar. It queries[rst-shell-brand], which no longer exists, and retains a <=4-tab expectation derived from the old controls. Its anchor assertion now necessarily fails; later measurements start from the wrong place. Update it to[estilo-bar-brand]and verify the new tab sequence, preferably asserting that each enhanced toolbar contributes one stop rather than pinning an obsolete total. Production markup/JS/CSS no longer depends on the removed shell; this runnable verification script still does.
Verification and limits:
- Ran the full
.amadan/ci.d/10-gate. Node tests, reproducible bundle rebuild, Rust fmt/clippy/build/tests, wasm freshness, both directions of Yjs wire compatibility, Go vet and all Go packages other than the release test pass. Separately ran the remaining full-tree gofmt check andCGO_ENABLED=0 go build ./...; both pass. No bundle changes after rebuilding: both committed hashes match their committed sources. - The gate's only failure is
TestReleaseBinaryReportsItsVersion. Verified the same failure on freshly fetched main: macOS rejects the Unix socket pathname under/var/folders/.../TestReleaseBinaryReportsItsVersion.../001/docs.sockwithbind: invalid argument.TMPDIR=/tmpmakes that test pass on both main and this branch. This is not a branch regression. Remote CI reports passed at exactly 92e74ea. - New-test mutation: removed the pressed-state write from
fixtures/menu.mjs; both new current-style and view-mode tests fail. Restored it and all seven menu tests pass. Estilo's new specificity test was independently proved red under a CSS mutation and green after restoration. - Ran
r2-chrome-check.mjswithr2-docs-check.config.mjs, using a fresh scratch dev server, seeded DB andHOME_DIRECTORY_ORIGIN=https://oficina.works: 422/422 pass. All tested navigation CLS values were 0.0000, with bar top/height 0/52. Finding 3 demonstrates a gap in those assertions, not a contradiction of their output. - Keyboard binding table is unchanged. Live checks passed for select-all, bold, italic, undo, both redo chords, Shift+Enter, Tab/Shift+Tab indentation, Mod+K/Escape, menubar arrows/Escape and opening the shortcuts dialog. The old unbuilt commands are absent. Native rename still returns 204, including writer/reader/stranger coverage in the passing native tests; browser rename returns 303. Permission checks still use Store.Rename and the route remains behind CSRF.
- Security: return paths use
handoff.SafePathorsessions.SafeReturn. Standalone return memory reuses the purpose/origin-bound sealed cookie with a key derived from the instance key, strict decoding/canonical payload validation, a 600-second lifetime, one-cookie requirement,__Host-name, Path=/, no Domain, Secure, HttpOnly and SameSite=Lax./appearanceis inside CSRF and outside session protection; its requested redirect is validated. Accept only selects the response representation; HTML templates escape untrusted strings. Panic values/stacks remain in server logs, not response bodies. The inner recoverer is correctly mounted after session middleware; its new unit test does not protect that production wiring, as the author already disclosed. Home's full external sign-in/sign-out chain was not exercised locally. - Inspected supplied before/after screenshots for desktop list, phone document, sign-in, account and Format menus, plus fresh focused-title screenshots. Desktop chrome and sign-in are much more coherent. The result is not yet uniformly a finished product: the new phone rename collision is blocking; the pre-existing multi-row phone toolbar and unstyled Share form still look unfinished and remain R3 work. Inspected new in-flow highlights are square; rounded floats and bordered controls follow the agreed exception.
The intentional unmerged estilo pin is understood, not an independent surprise finding: estilo must merge its fix first; Docs must repin to that main revision, push and get green CI before merge. The declared Home sign-out-chain/Help deferrals remain follow-up scope, not features verified by this review.