Repository navigation
feat(console): the setup on one screen: your account, your site (FRU-239) - #267
Conversation
There was a problem hiding this comment.
Score de confiance : 3/5 · ✅ Rien de bloquant · Pas de défaut confirmé dans le code relu, mais la route de renommage (autorisation, origine, rôle) est dans apps/worker/src/console-api.ts, non relue : à vérifier avant fusion.
🔍 Une revue plus poussée est conseillée : Vérifier dans apps/worker/src/console-api.ts que la route de renommage refuse membres et invités, contrôle l'Origin et ne transmet que le nom à renameWorkspaceWithPlugin, et que setup.tsx n'appelle plus EmailForm avec before ni les exports retirés de api.ts.
Commentez @sakuga-review review balanced (environ 5 centimes) ou @sakuga-review review heavy (10 centimes à 1 dollar).
Niveau lite · anthropic/claude-haiku-5.5 · 0,011 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
There was a problem hiding this comment.
Score de confiance : 3/5 · ✅ Rien de bloquant · Ne pas fusionner en l'état : la revue n'a pas pu lire setup.tsx ni console-api.ts, qui portent le nouvel écran de mise en place et la route de renommage, et le mode de contrôle ne prouve pas leur comportement.
🔍 Une revue plus poussée est conseillée : Vérifier dans apps/worker/src/console-api.ts que la route de renommage applique le rôle owner/admin et l'Origin avant d'appeler renameWorkspace, et dans setup.tsx que l'écran ne renvoie pas un utilisateur vers une route sans site.
Commentez @sakuga-review review balanced (environ 5 centimes) ou @sakuga-review review heavy (10 centimes à 1 dollar).
Niveau lite · anthropic/claude-haiku-5.5 · 0,010 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
There was a problem hiding this comment.
Score de confiance : 3/5 ·
🔍 Une revue plus poussée est conseillée : Vérifier dans apps/worker/src/console-api.ts le handler de POST /console/workspaces/ (rôle lu, validation du nom, appel à renameWorkspace) et dans overlay.ts la numérotation des pins après filtrage par stage.
Commentez @sakuga-review review balanced (environ 5 centimes) ou @sakuga-review review heavy (10 centimes à 1 dollar).
Niveau lite · anthropic/claude-haiku-5.5 · 0,010 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
|
On the finding of the That file is not changed by this pull request. It is in the diff because this branch holds a merge of What this pull request changes is the console: |
d0028ae to
591cd89
Compare
fab2f91 to
c4137b1
Compare
There was a problem hiding this comment.
Score de confiance : 2/5 · ⛔ 1 point bloquant · À ne pas fusionner en l'état : un membre sans site est envoyé sur une étape où le formulaire d'ajout de site ne peut pas aboutir, ce qui est un défaut majeur sur le parcours de mise en place.
Niveau lite · anthropic/claude-haiku-5.5 · 0,010 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
There was a problem hiding this comment.
Score de confiance : 3/5 ·
🔍 Une revue plus poussée est conseillée : Vérifier dans les routes du worker que POST /console/workspaces/ applique les droits owner/admin et que la route GET des sites renvoie bien la forme attendue par setup.tsx et home.tsx.
Commentez @sakuga-review review balanced (environ 5 centimes) ou @sakuga-review review heavy (10 centimes à 1 dollar).
Niveau lite · anthropic/claude-haiku-5.5 · 0,010 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
Remplacée par la revue du dernier commit.
|
On the two findings of the 1. P1, « Change »: the removal of the old site can fail after the new one is added. This is the intended behaviour, and the person is told. When the 2. P2, the answer of « Rename » is not checked. The route is |
|
@sakuga-review review balanced Asked for when its diff became its own: since 2026-10-13 the branch is one commit on |
There was a problem hiding this comment.
Score de confiance : 2/5 · ⛔ 1 point bloquant · Fusion possible après correction : le refus de création du workspace est affiché dans une étape qui ne le rend plus quand le compte est déjà connecté.
Niveau balanced · anthropic/claude-sonnet-5.5 · 0,197 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
There was a problem hiding this comment.
Score de confiance : 3/5 ·
🔍 Une revue plus poussée est conseillée : Vérifier dans setup.tsx la fonction firstWorkspace et son verrou navigator.locks, ainsi que la route de renommage du worker, car ces chemins touchent la création de données et la concurrence entre onglets.
Commentez @sakuga-review review balanced (environ 5 centimes) ou @sakuga-review review heavy (10 centimes à 1 dollar).
Niveau lite · anthropic/claude-haiku-5.5 · 0,009 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
Remplacée par la revue du dernier commit.
|
On the P2 of the |
There was a problem hiding this comment.
Score de confiance : 3/5 ·
Niveau balanced · anthropic/claude-sonnet-5.5 · 0,196 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
…f one screen (FRU-239) console-account.spec.ts (FRU-248, merged after this branch was made) signed in through the setup of before: a name typed before the link, « Continue », « Where should feedback go? ». Its browsers now ask for the link with « Email me a link », wait for the second step, and open the Sites screen of the workspace the console read. Co-Authored-By: Claude Opus 5.5 <[email protected]>
b3e9e56 to
de4b8c8
Compare
|
On the balanced review of b3e9e56: P2, The red |
There was a problem hiding this comment.
Score de confiance : 3/5 ·
🔍 Une revue plus poussée est conseillée : Vérifier setup.tsx en entier : la création unique du workspace sous verrou navigator.locks, la reprise par étape et la logique « Change » qui peut supprimer un site.
Commentez @sakuga-review review balanced (environ 5 centimes) ou @sakuga-review review heavy (10 centimes à 1 dollar).
Niveau lite · anthropic/claude-haiku-5.5 · 0,008 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
|
On the four findings of the
Nothing to change. |
There was a problem hiding this comment.
Score de confiance : 3/5 ·
Niveau balanced · anthropic/claude-sonnet-5.5 · 0,175 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
…t (FRU-239) The name of the first workspace now goes through the rule of the worker: spaces of any kind as one, none at the ends. An address whose part before the @ is only spaces gave a name the worker refused; it now gives « Workspace ». Answers the balanced review of de4b8c8. Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
On the balanced review of de4b8c8:
|
There was a problem hiding this comment.
Score de confiance : 3/5 · ✅ Rien de bloquant · À bloquer tant que apps/console/app/routes/setup.tsx, fichier de plus de 1000 lignes qui porte le verrou de création du workspace et les étapes, n'a pas été relu : la revue ne peut pas confirmer ce chemin.
🔍 Une revue plus poussée est conseillée : Relire setup.tsx en entier pour vérifier que le verrou navigator.locks empêche bien la création de deux workspaces et que la prop before retirée n'a plus d'appelant.
Commentez @sakuga-review review balanced (environ 5 centimes) ou @sakuga-review review heavy (10 centimes à 1 dollar).
Niveau lite · anthropic/claude-haiku-5.5 · 0,009 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
…Join », then « You are in » (FRU-241) The commits of the branch as one, on the branch of #267 after its rebase on main. Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
@sakuga-review review heavy Every lite and balanced review of this pull request says it could not read
|
There was a problem hiding this comment.
Score de confiance : 3/5 · ✅ Rien de bloquant · Les fichiers lus ne montrent aucun défaut bloquant, mais le cœur du changement, setup.tsx (plus de 1000 lignes), n'a pas été relu : il porte le verrou du premier workspace, le renommage et le « Change » qui retire un site.
Niveau heavy · anthropic/claude-opus-5.5 · 0,387 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
… change of behaviour (FRU-239) setup.tsx was 700 lines, and no review read it whole. Now: - setup-stage.ts: where the person is (invitations, the first workspace under its lock, the sites, where to send them), with no React and no network. The screen gives the calls. - setup-stage.test.ts: those decisions on a worker of fakes; two of them planted to fail. - routes/setup-account.tsx: step 1 (the address, the link on its way, the workspace not made, the account and « Rename »). - routes/setup-site.tsx: step 2 (the form and the summary). - routes/setup.tsx: the screen, 242 lines. No spec changed; the specs of the setup, the sign-in and the console pass as they were. Co-Authored-By: Claude Opus 5.5 <[email protected]>
There was a problem hiding this comment.
Score de confiance : 4/5 · ✅ Rien de bloquant · Mergeable en l'état : je n'ai trouvé aucun défaut certain dans la diff. Le point à vérifier avant fusion est l'autorisation côté worker de la route de renommage et l'unicité du premier workspace, que la diff ne montre pas.
🔍 Une revue plus poussée est conseillée : Vérifier que la route de renommage du worker et la création du premier workspace refusent bien un second workspace ou un renommage par un membre, car la console seule ne protège pas ces cas.
Commentez @sakuga-review review balanced (environ 5 centimes) ou @sakuga-review review heavy (10 centimes à 1 dollar).
Niveau lite · anthropic/claude-haiku-5.5 · 0,012 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
…Join », then « You are in » (FRU-241) The commits of the branch as one, on the branch of #267 after its rebase on main. Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
@sakuga-review review heavy The heavy review of 66b0fc5 had no finding, and said only that
No spec changed. The lite of 9e2ef5c gives 4/5. On its remark: the worker refuses a rename by a member ( |
There was a problem hiding this comment.
Score de confiance : 4/5 · setup-stage.ts est cohérente et testée, et le seul défaut trouvé est un état d'étape faux sur un chemin d'erreur.
Niveau heavy · anthropic/claude-opus-5.5 · 0,537 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
… known (FRU-239) With invitations that could not be read, the setup marked « Your account » done and announced « Your site » as the current step, empty. The first step is now done only once a workspace is known. The case of console-setup.spec.ts reads the headings, and fails with the old code. Answers the heavy review of 9e2ef5c. Co-Authored-By: Claude Opus 5.5 <[email protected]>
There was a problem hiding this comment.
Score de confiance : 4/5 · ✅ Rien de bloquant · Aucun défaut confirmé dans le diff lu : la PR peut être fusionnée après vérification des imports et des appelants des symboles retirés (rememberWorkspaceName, takeWorkspaceName, snippetFor, prop before de EmailForm) et des clés de messages.fr.ts, que le contexte ne montre pas.
🔍 Une revue plus poussée est conseillée : Vérifier les appelants hors diff de snippetFor, de EmailForm (prop before retirée) et de rememberWorkspaceName/takeWorkspaceName, ainsi que la forme de la réponse de renameWorkspace, car un import cassé ou une prop manquante ne sont pas visibles ici.
Commentez @sakuga-review review balanced (environ 5 centimes) ou @sakuga-review review heavy (10 centimes à 1 dollar).
Niveau lite · anthropic/claude-haiku-5.5 · 0,013 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
…Join », then « You are in » (FRU-241) The commits of the branch as one, on the branch of #267 after its rebase on main. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…Join », then « You are in » (FRU-241) (#270) * feat(console): the screen of an invitation: who invites, the role, « Join », then « You are in » (FRU-241) The commits of the branch as one, on the branch of #267 after its rebase on main. Co-Authored-By: Claude Opus 5.5 <[email protected]> * test(console): « You are in » when the sites of the workspace cannot be read (FRU-241) After « Join », the console reads the sites of the workspace to name the first one. Two cases hold what happens when it cannot: the worker refuses the list, or the request does not arrive. The invitation is accepted, the screen says « You are in » and names no site, and nothing stays busy. Answers the balanced review of c43a272. Co-Authored-By: Claude Opus 5.5 <[email protected]> --------- Co-authored-by: Mathieu Audebert <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]>
…page in the preview (FRU-242) The commits of the branch as one, on main. Step 3 is in routes/setup-install.tsx, after the split of the setup in #267. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…page in the preview (FRU-242) (#271) The commits of the branch as one, on main. Step 3 is in routes/setup-install.tsx, after the split of the setup in #267. Co-authored-by: Mathieu Audebert <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]>
Not critical (no new route; it uses the rename route of FRU-236, merged in #250), but it is the first screen of the product: review
balancedasked below. The orchestrator may merge it.Base
main: the stack under it (#254, #255, #259, #260) is merged, and the branch is its own commit onmainsince 2026-10-13. FRU-241 (#270) and FRU-242 (#271) come after it.Closes FRU-239. Parent: FRU-230 (« Simpler flow »). Screen 01 of the mockup of 2026-10-13, states
email,sentandsite. The last step is FRU-242.Arbitrations that apply (orchestrator, 2026-10-13, on delegation from Mathieu). Q4: the DNS proof of FRU-103 stays, so the hint of « Site address » stops at « Any page of it will do. » and names no pattern. Q5: the preview is a fixed picture; here it is still the empty frame.
What changes in the path
?step=is gone.workspace-name.ts):[email protected]→ « Acme »; a public mailbox (the eleven of the ticket) gives what is before the@; a subdomain and a suffix of two parts (mail.acme.co.uk) are read past. « Rename » changes it in place (FRU-236).localStoragekeeps nothing any more (fruitback:pending-workspaceis gone).Three things that are not on the mockup, and why
firstWorkspacetakes a lock of the browser (navigator.locks); the tab that gets it second reads/console/meagain and finds the workspace of the first. The spec holds the first request open and lets a second tab arrive: the worker is asked once. Planted: without the lock it is asked twice, and the test fails./invitations. Before, the screen « Name your workspace » stood in the way; now a workspace is made with no question, so this had to be said.States the mockup does not draw, and what was chosen
problems.ts; the address and the choice stay as they were.install-options.tsx, now with the kit's snippet), and « Finish ».Against the mockup
Built at 1440 × 900 and 390 × 844, system font. The sample words are as wide as the mockup's in that font (measured: « Havane » 53.5 px for the 53.2 px of the mockup's name,
[email protected]149.8 px for 153.8 px), so the lines wrap where the mockup wraps them, with no word of the mockup's sample data copied. Boxes of the mockup from itsmeasures.json; tolerance of the brief: 2 px at 1440, 4 px at 390.h1email: step 1 titleemail: fieldemail: « Email me a link »email: Google, GitHubemail: steps 2 and 3sent: calloutsent: « Send again in 0:41 »sent: « Use another address »site: check of step 1site: step 2 titlesite: fieldsite: cardssite: « Add site »emailsentsiteWhat differs, and why.
Captures cannot be uploaded from the agent. They are on the machine
sakuga-mini: built,~/.claude/agent-coord/scratch/fru-sf-entree/fru-239/built-01-setup-<email|sent|site>-<1440|390>.pngwith every box inbuilt-boxes.json; mockup,~/.claude/agent-coord/maquettes/simpler-flow/shots/01-setup-<state>-<1440|390>.png.Found while testing, and fixed
Snippetnow, on the Sites screen too.messages.test.tsread only sentences between single quotes, and the formatter writes « a client's site » between double quotes: that sentence would have had no French, in silence. The guard reads both, with a control.French, sentence by sentence (the mockup has none)
Removed with the screens that are gone: 36 sentences of the four steps of before (« Create your workspace », « Name your workspace », « Where should feedback go? », « Which site do you review? », « Install it », « Step {step} of {total} » and their parts).
Tests
e2e/console-setup.spec.ts, 16 tests. Five against a worker on PGlite: a new address, its link opened in another tab, the setup at step 2 by itself with the workspace « Acme », « Rename », « Add site », and the return of the person; two tabs and one workspace; a refused name; « Change », in the visit and in a visit after; somebody invited. Eleven against the mockup with stubs: the boxes of the three states at 1440, the order of the keyboard and the focus ring, the refusals, the two failures of reading, the roles, 390 and 320 px in English and French with a long address and a long host, axe on each state (no violation), French.apps/console/app/workspace-name.test.ts: a company, a public mailbox, a subdomain, capitals, a suffix of two parts, and a name the worker always takes.console-cookie-session,console-invitation,console-sign-in,console-no-sign-in,console-site-address,console-kit(the test of FRU-168). No assertion about the cookie, the token or the storage changed. The/setupcases ofconsole-narrowmoved to the setup's spec.console-setup-sources.spec.tsis removed with its step.Ran locally
pnpm format,pnpm lint,pnpm typecheck,pnpm test(7 projects) pass. Console specs against this branch:console-setup16,console-sign-in20,console-cookie-session8,console-invitation2,console-kit18,console-narrow5,console-no-sign-in2,console-site-address4,console-confirm4,console-domains3,console-destinations2,console-source-panel7: all pass.Not verified
The boxes of the mockup are compared on macOS only. The mockup is measured in the system font of macOS; the CI draws the system font of Linux, where a line of text with no line height of its own is 1 or 2 px taller and a word is not as wide (measured in the
e2ejob of feat(console): a sign-in page of its own, and the tab that asked for the link goes on by itself (FRU-235) #259: the field at y 271.2 for 269).expectNeardoes nothing there; every other assertion of the same tests runs everywhere. The four sentences this screen shares with the Sites screen (feat(console): the Sites screen is the table of the mockup, with a menu on each row (FRU-243) #262) have its French.Firefox and Safari (
navigator.locksis in all three; the spec runs in Chromium). A browser without it makes the workspace without the lock.A screen reader.
Shared files touched:
messages.fr.ts,messages.test.ts,api.ts(renameWorkspace; the two functions of the pending name are gone),routes/home.tsx.🤖 Generated with Claude Code
Sakuga Review · Score de confiance : 4/5
Aucun défaut confirmé dans le diff lu : la PR peut être fusionnée après vérification des imports et des appelants des symboles retirés (rememberWorkspaceName, takeWorkspaceName, snippetFor, prop before de EmailForm) et des clés de messages.fr.ts, que le contexte ne montre pas.
🔍 Une revue plus poussée est conseillée : Vérifier les appelants hors diff de snippetFor, de EmailForm (prop before retirée) et de rememberWorkspaceName/takeWorkspaceName, ainsi que la forme de la réponse de renameWorkspace, car un import cassé ou une prop manquante ne sont pas visibles ici.
Commentez
@sakuga-review review balanced(environ 5 centimes) ou@sakuga-review review heavy(10 centimes à 1 dollar).Résumé
La PR remplace l'assistant de mise en place en trois étapes sur un seul écran (compte, site, installation), avec un workspace nommé d'après l'adresse, un verrou navigator.locks contre la double création, et un front door qui renvoie vers la mise en place un workspace sans site. J'ai relu la logique de resolveStage, siteStage, firstWorkspace, workspaceNameFrom, SiteForm (changement de site) et le front door : je n'ai trouvé aucun chemin de données, de sécurité ou de contrat cassé dans le code affiché. La vérification reste partielle, car les appelants hors diff ne sont pas dans le contexte.
Diagramme
%%{init: {'theme': 'neutral'}}%% flowchart LR A["home.tsx"] --> B["resolveStage"] B --> C["firstWorkspace (lock)"] B --> D["siteStage"] D --> E["setup-site.tsx SiteForm"] E --> F["POST /console/workspaces/id/sites"] E --> G["DELETE site (fresh only)"]Non relu
Revues (15) · Dernier commit relu : fix(console): the first step stays the one to d... · Niveau
lite·anthropic/claude-haiku-5.5· 0,013 $