🤖 Opened by Claude (Opus 5.5), agent account.
Why
Polish audit r3 SUMMARY items 6/7: every app's door carried its own copy, and Memoria's still said "Email me a link" under a marketing lede. Paul's rulings: the submit reads "Sign in", never "Email me a link" (2026-10-01); Oficina is the suite and the hub is never named to people (2026-09-23). estilo feat/door-copy (fbd14e7, oficina/estilo #19) now owns the door's words (chrome.English); this branch pins it and deletes Memoria's overrides.
What changed (9 files, +48/-36)
go.mod/go.sum: estilo → v0.0.0-20261001075355-fbd14e759027 (fbd14e7). Vendored chrome/sky assets regenerated with go run ./scripts/writeestilo: no change.handlers.go localSignin: the chrome.SignIn literal keeps only Icon/App/Sky/Action (+Hidden/Error). The sent state is chrome.SignInNotice{…}.Sent(back), where back is the existing form path (kept ?force=1).home_render.go: connect's signedout state is now chrome.SignInNotice{…}.SignedOut(data.Action). These are the door's words, with connect's Action as the href. Connect's "Signed out / You can sign in again with Home / Sign in with Home" is gone.templates/signin.html: the title define uses .Sent.Title / .SignedOut.Title / .Door.Title. layout.html and render.go are untouched.auth.go: Subject: chrome.EmailSubject("Memoria") → "Sign in to Memoria".
Deleted (app-owned strings the door now owns)
signinLede const "Memoria holds your team's work in one place. Sign in with your email and we'll send you a link." (marketing copy; local mode has no lede)- door overrides
Heading: "Sign in", AddressLabel: "Email address", Submit: "Email me a link" - sent
Heading: "Check your email", Body: "We've sent you a link to sign in.", link "Back to sign in" signinOutcome's sent sentence "Check your email. We've sent you a link to sign in." (it now returns "", "good", and the door says it)- title literals
Sign in — Memoria and {{.Heading}} · Memoria - email subject "Your memoria sign-in link"
Kept
- One Lede,
?reauth=1 → "Sign in again to continue." It is a state message (why the form is back), not an introduction, and it doesn't contradict the door. - The
?err= sentences (door Error): state, not door copy. auth.go renderOAuth (the Keymail continuation notice) keeps its own copy. It isn't a door state.
Tests: red → green
Updated, none deleted: memoriatest/signin_door_test.go (title, >Sign in</button>, help line, and absence of "Email me a link" / "holds your team" / "Sign in — Memoria"), memoriatest/signinoutcome_test.go (sent body, "Check your email · Memoria", <a href="/signin">Use a different address</a>), memoria/home_router_test.go TestSignedOutIsTheDoor ("Signed out · Memoria", "You’re signed out", "You’ve signed out of Memoria on this device.", href=…>Sign in</a>, and no "Home" anywhere on the page).
Before the bump (make test):
--- FAIL: TestSignedOutIsTheDoor
home_router_test.go:399: /signed-out lacks "<h1>You’re signed out</h1>"
home_router_test.go:399: /signed-out lacks "You’ve signed out of Memoria on this device."
home_router_test.go:399: /signed-out lacks "href=\"/signin\">Sign in</a>"
home_router_test.go:404: /signed-out names Home:
--- FAIL: TestSigninPageIsTheDoor
signin_door_test.go:54: the sign-in page lacks "<title>Sign in · Memoria</title>"
signin_door_test.go:54: the sign-in page lacks ">Sign in</button>"
signin_door_test.go:54: the sign-in page lacks "We’ll email you a link that signs you in. It works once and expires in 15 minutes."
signin_door_test.go:61: the sign-in page still says "Email me a link"
signin_door_test.go:61: the sign-in page still says "holds your team"
signin_door_test.go:61: the sign-in page still says "Sign in — Memoria"
--- FAIL: TestSigninPageSaysWhatHappened
signinoutcome_test.go:80: the sent page is not the door's check-your-email notice:
signinoutcome_test.go:86: the sent page's tab title is not "Check your email · Memoria"
signinoutcome_test.go:89: the sent notice does not link back to the form as "Use a different address":
After: all three pass, and memoriatest and the rest of make ci are green. The one exception is locally: TestAModelResponseIsCheapToProcess/a_row_whose_processing_crosses_the_deadline_is_dropped failed 3/3 with "search took 7–9s … no row with time to spare". That is a wall-clock deadline test, and the machine's load average was 230–265 (other sessions). It has nothing to do with the door. Hub CI is the clean run.
Local verification (standalone, no Home; local-signedout.mjs, 1440px)
| path | title | h1 | button | help / body | links | |---|---|---|---|---|---| | /signin | Sign in · Memoria | Sign in | Sign in | We’ll email you a link that signs you in. It works once and expires in 15 minutes. | (none) | | /signin?sent=1 | Check your email · Memoria | Check your email | (none) | If that address can sign in here, we’ve sent it a link. It works once and expires in 15 minutes. | Use a different address | | /signin?err=expired | Sign in · Memoria | Sign in | Sign in | error callout + help | (none) | | /signin?reauth=1 | Sign in · Memoria | Sign in | Sign in | lede "Sign in again to continue." + help | (none) | | /signed-out | 404, as on main: Home-only in this branch's base | | | | |
The Home-configured /signed-out is covered by TestSignedOutIsTheDoor above. A local POST logged the mail with subject="Sign in to Memoria".
Dependency
Must not merge before estilo feat/door-copy lands. Re-pin to estilo main after its squash.
Follow-up: email body
The body is still rastrillo's ("Open this link to sign in: …"). rastrillo auth can't set it yet. A rastrillo branch is drafting Config.Body, and once it lands Memoria sets Body: chrome.EmailBody("Memoria"). No workaround here.
Expected conflicts
feat/r2-shared-chrome (917e2b6, still being worked) conflicts in 8 files: go.mod, go.sum, internal/memoria/auth.go, internal/memoria/handlers.go, internal/memoria/home_render.go, internal/memoria/home_router_test.go, internal/memoria/templates/signin.html, internal/memoriatest/signin_door_test.go. (signinoutcome_test.go auto-merges.) r2 already moves toward the same words, but it writes them as app constants against the old estilo. Against fbd14e7, r2's Heading/AddressLabel/Help/Submit fields fail to compile. Resolution:
go.mod/go.sum: take the newer estilo (fbd14e7, or estilo main once it lands), then go mod tidy.auth.go: take r2's landedPath and this branch's Subject: chrome.EmailSubject("Memoria").handlers.go: keep r2's structure (return-to, again path, frames, OpenSource). Drop its signinHelp/signinSentBody constants and the Heading/AddressLabel/Help/Submit fields. Build the sent state as chrome.SignInNotice{Icon, App: appName, Sky}.Sent(again).home_render.go: take r2's version (delegates to a.signedOut). In r2's return.go signedOut, use chrome.SignInNotice{…}.SignedOut(signinPath) instead of the literal heading/body/link. r2's homeCopy["signedout_body"/"signedout_action"] overrides then become dead, so delete them.templates/signin.html: take r2's (its title comes from the layout frame). Check that r2's frame renders exactly Sign in · Memoria, Check your email · Memoria, Signed out · Memoria. If the layout appends · Memoria, pass .Page().signin_door_test.go, home_router_test.go: union the assertions. Keep r2's footer/open-source checks plus this branch's title and "no Home" checks.
feat/home-consumer (6030871) conflicts only in go.mod/go.sum: take the newer estilo and go mod tidy. handlers.go and home_router_test.go auto-merge.
This branch doesn't touch layout.html, render.go or home.go.
Nothing is merged or deployed.