Skip to content

feat(console): the setup on one screen: your account, your site (FRU-239) - #267

Merged
sakuga-agent[bot] merged 9 commits into
mainfrom
mathieu/fru-239-console-la-mise-en-place-en-un-ecran-your-account-et-your
Oct 13, 2026
Merged

sakuga-agent[bot] merged 9 commits into
mainfrom
mathieu/fru-239-console-la-mise-en-place-en-un-ecran-your-account-et-your

Conversation

@sakuga-agent

@sakuga-agent sakuga-agent Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

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 balanced asked 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 on main since 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, sent and site. 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

  • One screen, three steps: « Your account », « Your site », « Put it on the site ». A step that is done is a summary. The step is read from the worker at each visit (nobody signed in, no workspace, no site, a site), so the setup resumes anywhere, and ?step= is gone.
  • The step « Source » is gone. A tracker is chosen in Connectors.
  • Nobody names a workspace. The first one of a person takes its name from their address (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). localStorage keeps nothing any more (fruitback:pending-workspace is gone).
  • The setup goes on by itself when its link is opened in another tab (the carry-on 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 front door sends a workspace with no site back to the setup, for an owner or an admin. A list of sites that could not be read is not an empty list: the Sites screen says so itself.

Three things that are not on the mockup, and why

  1. One workspace, whatever the number of tabs. The tab that waited for the link and the tab of the link can both reach the setup in the same second, and each would make a workspace. firstWorkspace takes a lock of the browser (navigator.locks); the tab that gets it second reads /console/me again 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.
  2. Somebody who was invited gets no workspace made behind their back. With an invitation that waits, the setup sends to /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.
  3. « Change » never removes a site that may hold notes. The worker has no route that changes a site, and a site that is removed takes its notes with it. « Change » adds the site again with the new values, and removes the one it replaces only when that one was added in this visit of the setup. A site of a visit before stays; the summary says so (« … is still in your sites, with its notes. Remove it in Sites if you no longer review it. »), and the Sites screen removes it with its two presses (FRU-165).

States the mockup does not draw, and what was chosen

State Choice
« Rename » (inventory A9) The name becomes a field with « Save » and « Cancel »; the field takes focus, Escape and « Cancel » give the name back, and focus returns to « Rename ». A refusal keeps the field as typed, with the sentence of the worker. Only an owner or an admin sees « Rename » and « Change ».
The workspace could not be made Step 1 stays the current one: « Signed in as … », the name it would have taken in a field, the reason, « Try again ».
The sites could not be read Step 2 says « Fruitback did not answer. Your sites are not lost. » with « Try again », and shows no form: it would add a site twice.
A site that is refused The sentence of problems.ts; the address and the choice stay as they were.
No provider, or no sign-in at all As on the sign-in page (#259): no button, no « or »; the alert of FRU-217 in step 1.
The last step, until FRU-242 The script and « Connect this browser » of today (install-options.tsx, now with the kit's snippet), and « Finish ».
The preview once a site is added The frame with the address of the site and no sentence: « Your site shows here once you add it » would be false. Its picture is FRU-242.

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 its measures.json; tolerance of the brief: 2 px at 1440, 4 px at 390.

Element, at 1440 Mockup x, y, w, h Built x, y, w, h
header 0, 0, 1440, 65 0, 0, 1440, 65
« Self-hosting guide » 1241, 24, 118.8, 17 1241.2, 23.5, 118.8, 17
h1 112, 113, 400.2, 34.5 112, 113, 400.2, 34.5
email: step 1 title 160, 240, 352.2, 26 160, 239.5, 352.2, 26
email: field 160, 361, 352.2, 44 160, 360.5, 352.2, 44
email: « Email me a link » 160, 415, 142.5, 44 160, 414.5, 142.5, 44
email: Google, GitHub y 562, 616 y 561.5, 615.5
email: steps 2 and 3 y 692, 773 y 691.5, 772.5
preview 568, 113, 759.8, 698.5 568.2, 113, 759.8, 698.5
sent: callout 160, 278, 352.2, 283.5 160, 277.5, 352.2, 283.5
sent: « Send again in 0:41 » 181, 455, 157.5, 40 181, 455, 157.5, 40
sent: « Use another address » 181, 505, 139.9, 37 181, 505, 139.9, 37
site: check of step 1 122, 247, 13, 13 121.5, 247, 13, 13
site: step 2 title 160, 353, 352.2, 26 160, 352.5, 352.2, 26
site: field 160, 413, 352.2, 44 160, 412.5, 352.2, 44
site: cards y 546 (90 high), 644 (70.5) y 526 (90), 624 (70.5)
site: « Add site » 160, 734, 98.6, 44 160, 714.5, 98.6, 44
Document at 390 Mockup Built
email 390 × 1668 390 × 1668
sent 390 × 1569 390 × 1569
site 390 × 1725 390 × 1705

What differs, and why.

  • Under the hint of « Site address », everything is 19.5 px higher (the cards, « Add site », step 3, and the page at 390): the hint is one line and not two, by Q4. The spec holds the mockup's positions less 19.5 px.
  • « Rename » and « Change » are 33 px high, not 21 (inventory A23, WCAG 2.5.8): the words are where the mockup has them, and the line keeps its height.
  • The radios are the kit's (HeroUI), 16 px and ink when chosen as on the mockup, not the native control of the mockup.
  • Noted, and kept as drawn: the logo is at x 80 and the content at x 112 (the header's padding is outside its 1280 px).

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>.png with every box in built-boxes.json; mockup, ~/.claude/agent-coord/maquettes/simpler-flow/shots/01-setup-<state>-<1440|390>.png.

Found while testing, and fixed

  • At 320 px a long address in « Check your inbox » made the page scroll sideways, and at 390 px a long host did in the last step (the script took the width of its longest line). The callout and the host now wrap, and the script scrolls in its own box.
  • axe: the script was a scrollable box a keyboard could not reach. It is the kit's Snippet now, on the Sites screen too.
  • messages.test.ts read 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)

English French
Set up Fruitback Mettre en place Fruitback
Current step: Étape en cours :
Running your own server? Vous hébergez votre propre serveur ?
Self-hosting guide Guide d’auto-hébergement
Three steps to your first note on a live page. Hosted in Europe. Trois étapes jusqu’à votre première note sur une page en ligne. Hébergé en Europe.
Your account Votre compte
Your site Votre site
The address you review. L’adresse que vous relisez.
Put it on the site Le mettre sur le site
The extension, or a script tag. L’extension, ou une balise de script.
Preview of your site Aperçu de votre site
your site votre site
Your site shows here once you add it, with its pins. Votre site s’affiche ici une fois ajouté, avec ses pins.
A preview of your site. Pins show the same way on the real page. Un aperçu de votre site. Les pins s’affichent de la même façon sur la vraie page.
We send you a sign-in link. No password to make up. Nous vous envoyons un lien de connexion. Aucun mot de passe à inventer.
Your workspace takes the name of your domain. Rename it whenever you like. Votre workspace prend le nom de votre domaine. Renommez-le quand vous voulez.
A sign-in link is on its way to {email}. Open it in this browser: this page carries on by itself. Un lien de connexion est en route vers {email}. Ouvrez-le dans ce navigateur : cette page continue toute seule.
The link works once, for fifteen minutes. Nothing in it asks for a password. Le lien fonctionne une fois, pendant quinze minutes. Rien n’y demande un mot de passe.
Signed in as {email} Connecté en tant que {email}
The workspace was not renamed. Try again. Le workspace n’a pas été renommé. Réessayez.
Only an owner or an admin of the workspace renames it. Seul un propriétaire ou un admin du workspace le renomme.
Save Enregistrer
Rename Renommer
Any page of it will do. N’importe laquelle de ses pages convient.
Who sees the notes? Qui voit les notes ?
Members of {workspace} Les membres de {workspace}
Visitors of the site see nothing. Right for staging and for a client's site. Les visiteurs du site ne voient rien. Convient à un staging et au site d’un client.
Everyone who visits Tous les visiteurs
A public way to report a problem on a live site. Un moyen public de signaler un problème sur un site en ligne.
Add site Ajouter le site
Members of {workspace} see the notes Les membres de {workspace} voient les notes
Everyone who visits sees the notes Tous les visiteurs voient les notes
Change Modifier
{site} is still in your sites, with its notes. Remove it in Sites if you no longer review it. {site} est toujours dans vos sites, avec ses notes. Retirez-le dans Sites si vous ne le relisez plus.

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.
  • Specs that went through the setup of before follow the new one: 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 /setup cases of console-narrow moved to the setup's spec. console-setup-sources.spec.ts is removed with its step.

Ran locally

pnpm format, pnpm lint, pnpm typecheck, pnpm test (7 projects) pass. Console specs against this branch: console-setup 16, console-sign-in 20, console-cookie-session 8, console-invitation 2, console-kit 18, console-narrow 5, console-no-sign-in 2, console-site-address 4, console-confirm 4, console-domains 3, console-destinations 2, console-source-panel 7: all pass.

Not verified

🤖 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)"]
Loading
Non relu
  • apps/console/app/routes/sites.tsx et autres routes : imports de InstallOptions et de snippetFor depuis setup.tsx, dont l'export snippetFor a été retiré, non vérifiés
  • apps/console/app/sign-in.tsx ou autres appelants de EmailForm : la prop before a été retirée, des appelants qui la passent ne sont pas dans le contexte
  • apps/console/app/api.ts : des appelants restants de rememberWorkspaceName et takeWorkspaceName (supprimés) hors de setup.tsx ne sont pas visibles
  • apps/console/app/messages.fr.ts : des clés retirées (Fruitback Cloud, Set up, Steps, etc.) peuvent encore être utilisées par des écrans non montrés ; le garde messages.test.ts ne peut pas être exécuté ici
  • apps/console/app/setup-site.tsx : le comportement du POST d'un site déjà présent (même origine, autre visibilité) dépend de la route du worker, non visible
  • apps/console/app/setup-account.tsx : la réponse de renameWorkspace peut ne pas porter le rôle, ce qui masquerait le bouton Rename ; le contrat du worker n'est pas dans le contexte
  • e2e/*.spec.ts : exécution non possible ; les tests lisent des compteurs d'invitations fragiles (poll à 3) non évalués
  • design/ et docs/decisions/console.md : seulement lus en partie, non vérifiés contre les maquettes

Revues (15) · Dernier commit relu : fix(console): the first step stays the one to d... · Niveau lite · anthropic/claude-haiku-5.5 · 0,013 $

@sakuga-review sakuga-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@sakuga-review sakuga-review Bot added the review: 3/5 Score de confiance de Sakuga Review (5 : prête à merger) label Oct 13, 2026

@sakuga-review sakuga-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@sakuga-review sakuga-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Score de confiance : 3/5 · ⚠️ Rien de bloquant · Ne pas fusionner en l'état : le changement de nom de workspace et le nouveau parcours de configuration touchent des routes d'écriture et des contrats, et plusieurs fichiers modifiés (setup.tsx, overlay.ts, console-api.ts) n'ont pas pu être relus.

🔍 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.

@sakuga-agent

sakuga-agent Bot commented Oct 13, 2026

Copy link
Copy Markdown
Contributor Author

On the finding of the lite review of 4ac5fe4, « the rename is outside the lock of a workspace » (apps/worker/src/app.ts:379):

That file is not changed by this pull request. It is in the diff because this branch holds a merge of main (for the rename route of #250, which the spec calls on a real worker), and the branches under it in the stack do not yet: the pull request says so in its second paragraph. The route and its lock were read in #250 and #253, which are on main (SECURITY.md there says which routes the lock covers). The finding is for the owner of that route, not a change to make here; I pass it to the orchestrator.

What this pull request changes is the console: apps/console/app/routes/setup.tsx, workspace-name.ts, install-options.tsx, sign-in-form.tsx, routes/home.tsx, api.ts, the messages and the specs. The review says it did not read setup.tsx: a balanced review is asked for once the stack under this branch is merged and the diff is its own.

@sakuga-agent
sakuga-agent Bot force-pushed the fru-sf-entree/fru-232-kit-steps-preview branch from d0028ae to 591cd89 Compare October 13, 2026 13:15
Base automatically changed from fru-sf-entree/fru-232-kit-steps-preview to main October 13, 2026 13:24
@sakuga-agent
sakuga-agent Bot force-pushed the mathieu/fru-239-console-la-mise-en-place-en-un-ecran-your-account-et-your branch 2 times, most recently from fab2f91 to c4137b1 Compare October 13, 2026 13:49

@sakuga-review sakuga-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread apps/console/app/routes/setup.tsx
@sakuga-review sakuga-review Bot added review: 2/5 Score de confiance de Sakuga Review (5 : prête à merger) and removed review: 3/5 Score de confiance de Sakuga Review (5 : prête à merger) labels Oct 13, 2026

@sakuga-review sakuga-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Score de confiance : 3/5 · ⚠️ Rien de bloquant · Fusion déconseillée en l'état : la logique de création du workspace et la reprise du setup sont modifiées, et plusieurs chemins (rename, changement de site, reprise) n'ont pas pu être vérifiés contre le worker ; un défaut majeur possible sur le changement de site est signalé.

🔍 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.

@sakuga-review
sakuga-review Bot dismissed their stale review October 13, 2026 13:54

Remplacée par la revue du dernier commit.

@sakuga-review sakuga-review Bot added review: 3/5 Score de confiance de Sakuga Review (5 : prête à merger) and removed review: 2/5 Score de confiance de Sakuga Review (5 : prête à merger) labels Oct 13, 2026
@sakuga-agent

sakuga-agent Bot commented Oct 13, 2026

Copy link
Copy Markdown
Contributor Author

On the two findings of the lite review of 593788e (in the description, no thread):

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 DELETE of the replaced site fails, onDone gets left: before, and the summary shows role="status": « {site} is still in your sites, with its notes. Remove it in Sites if you no longer review it. » Nothing retries the DELETE, here or elsewhere. Only the Sites screen removes that site, after two presses (FRU-165). The order is on purpose: adding first means that a refused add removes nothing. Removing first would lose the only site if the add then failed. And the DELETE is sent only for a site added in this same visit (fresh), on which nobody has noted anything yet. Nothing to change.

2. P2, the answer of « Rename » is not checked. The route is POST /console/workspaces/<id> of #250 (apps/worker/src/console-api.ts). It checks manage-workspace, refuses an invalid name with 400, and answers 200 with the renamed workspace and its role. On a refusal, onRenamed is not called and the field keeps what was typed. e2e/console-setup.spec.ts renames against the real worker on PGlite. It reads « Workspace Acme Studio » on the screen, then reads /console/me again and finds the new name. Nothing to change.

@sakuga-agent

sakuga-agent Bot commented Oct 13, 2026

Copy link
Copy Markdown
Contributor Author

@sakuga-review review balanced

Asked for when its diff became its own: since 2026-10-13 the branch is one commit on main (the stack under it is merged). The last commit fixes the P1 of the lite of c4137b1: a member of a workspace with no site goes to its Sites screen, as the front door does.

@sakuga-review sakuga-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread apps/console/app/routes/setup.tsx
@sakuga-review sakuga-review Bot added review: 2/5 Score de confiance de Sakuga Review (5 : prête à merger) and removed review: 3/5 Score de confiance de Sakuga Review (5 : prête à merger) labels Oct 13, 2026

@sakuga-review sakuga-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Score de confiance : 3/5 · ⚠️ Rien de bloquant · Fusion déconseillée en l'état : la première création de workspace et le lien de connexion passent par un verrou navigateur non vérifiable ici, et le setup en une page change plusieurs parcours sans que les appelants soient visibles.

🔍 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.

@sakuga-review
sakuga-review Bot dismissed their stale review October 13, 2026 14:09

Remplacée par la revue du dernier commit.

@sakuga-review sakuga-review Bot added review: 3/5 Score de confiance de Sakuga Review (5 : prête à merger) and removed review: 2/5 Score de confiance de Sakuga Review (5 : prête à merger) labels Oct 13, 2026
@sakuga-agent

sakuga-agent Bot commented Oct 13, 2026

Copy link
Copy Markdown
Contributor Author

On the P2 of the lite review of feaeea6, « the error of the workspace is shown at the wrong step »: it is already so. signedIn is account !== undefined && stage.kind !== 'unnamed' (setup.tsx), so for « unnamed » the first step is current and the second is pending. e2e/console-setup.spec.ts asserts it: in « a workspace the worker did not make is asked for again », the heading « Current step: Your account » is visible with the alert. Nothing to change.

@sakuga-agent

sakuga-agent Bot commented Oct 13, 2026

Copy link
Copy Markdown
Contributor Author

@sakuga-review review balanced

Since the balanced of 593788e, feaeea6 answers its finding: the form of a workspace that was not made opens on what the worker answered to the first try (new case with invalid-name, the 503 case now expects « Fruitback did not answer »).

@sakuga-review sakuga-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Score de confiance : 3/5 · ⚠️ Rien de bloquant · Fusion possible après correction d'un point : le tableau de bord peut renvoyer vers /setup un utilisateur dont le workspace est vide, avec un risque de boucle si le formulaire ne peut pas aboutir.

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]>
@sakuga-agent
sakuga-agent Bot force-pushed the mathieu/fru-239-console-la-mise-en-place-en-un-ecran-your-account-et-your branch from b3e9e56 to de4b8c8 Compare October 13, 2026 14:49
@sakuga-agent

sakuga-agent Bot commented Oct 13, 2026

Copy link
Copy Markdown
Contributor Author

On the balanced review of b3e9e56:

P2, home.tsx: « a loop between the front door and the setup, and a read of the sites that is not handled ». There is no loop. The setup never sends to /: its only two redirections go to /invitations (an invitation waits) and to /w/<id>/sites (a member or a guest with no site). The front door sends to /setup only an owner or an admin whose list of sites was read and is empty. A list that could not be read goes to the Sites screen, on purpose. That screen says the read failed and offers « Try again », and never « No site yet » (FRU-162, console-sites.spec.ts). A 401 is the notice of a session that ended, from call, as everywhere in the console. Nothing to change.

The red e2e. It was console-account.spec.ts (FRU-248, merged in main after this branch was made). Its helper still signed in through the setup of before. de4b8c8 rebases on main and moves it to the setup of one screen. The 17 console specs pass locally on the new head.

@sakuga-review sakuga-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Score de confiance : 3/5 · ⚠️ Rien de bloquant · Ne pas fusionner en l'état : le setup en un écran change le parcours de création de workspace et de site, et plusieurs points ne peuvent pas être vérifiés depuis le diff seul.

🔍 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.

@sakuga-agent

sakuga-agent Bot commented Oct 13, 2026

Copy link
Copy Markdown
Contributor Author

On the four findings of the lite review of de4b8c8 (CI green on this head):

  1. P1, the front door waits without end for the sites. It does not. Every call of the console goes through transport.ts, which aborts at CALL_TIMEOUT_MS (AbortSignal.timeout). A read that fails goes to the Sites screen, which says so and offers « Try again » (FRU-162). The setup is the same: invitations that cannot be read show « Try again » (b3e9e56), and sites that cannot be read are « unread ».
  2. P2, stopped is not checked before each navigate. It is checked after each answer that can come back after an unmount: after myInvitations() and after the read of the sites. The first navigate runs in the callback of callUntilAnswered, whose stop the cleanup calls.
  3. P2, [email protected] gives « Com ». This is a known limit, written in workspace-name.test.ts. The name is a first guess, and « Rename » is next to it.
  4. P2, the test counts three readings of the invitations. The count is the control of the two-tab case. The third reading proves that the second tab is past its own check while the first tab holds the creation. Without it, the planted no-lock version passed. It is commented as such at that line.

Nothing to change.

@sakuga-agent

sakuga-agent Bot commented Oct 13, 2026

Copy link
Copy Markdown
Contributor Author

@sakuga-review review balanced

Since the balanced of b3e9e56: rebased on main, and de4b8c8 moves console-account.spec.ts (FRU-248) to the setup of one screen. CI is green on this head.

@sakuga-review sakuga-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Score de confiance : 3/5 · ⚠️ Rien de bloquant · Le changement principal (setup.tsx, plus de 1000 lignes) n'a pas pu être relu ; le reste est cohérent mais un point d'accessibilité du bloc de messages mérite un coup d'œil.

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]>
@sakuga-agent

sakuga-agent Bot commented Oct 13, 2026

Copy link
Copy Markdown
Contributor Author

On the balanced review of de4b8c8:

  1. P2, the front door sends an owner with no site to /setup at each visit. That is the decision of FRU-239, in docs/decisions/console.md: « the front door sends a workspace with no site back to the setup, for who adds a site ». It applies only to /. The rail and every address of the workspace (/w/<id>/connectors, /members, /sites) still lead to their screens, and the setup links to the console. Nothing to change.
  2. P2, a name made of spaces. Right, fixed in 66b0fc5. workspaceNameFrom now applies the rule of the worker (workspaceName in console-api.ts): spaces of any kind count as one, with none at the ends. A part before the @ made only of spaces gives « Workspace ». Two asserts in workspace-name.test.ts; with the old code, one fails (planted).

@sakuga-review sakuga-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

sakuga-agent Bot pushed a commit that referenced this pull request Oct 13, 2026
…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-agent

sakuga-agent Bot commented Oct 13, 2026

Copy link
Copy Markdown
Contributor Author

@sakuga-review review heavy

Every lite and balanced review of this pull request says it could not read apps/console/app/routes/setup.tsx in full. Since the last balanced (de4b8c8), 66b0fc5 makes a name of spaces no name (the rule of the worker). Points to check in setup.tsx:

  • resolveStage: invitations that cannot be read make no workspace; a 404 goes on.
  • firstWorkspace and its navigator.locks: one workspace for two tabs.
  • siteStage: a member goes to Sites.
  • SiteForm: « Change » removes only a site added in this visit.

@sakuga-review sakuga-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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]>

@sakuga-review sakuga-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@sakuga-review sakuga-review Bot added review: 4/5 Score de confiance de Sakuga Review (5 : prête à merger) and removed review: 3/5 Score de confiance de Sakuga Review (5 : prête à merger) labels Oct 13, 2026
sakuga-agent Bot pushed a commit that referenced this pull request Oct 13, 2026
…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-agent

sakuga-agent Bot commented Oct 13, 2026

Copy link
Copy Markdown
Contributor Author

@sakuga-review review heavy

The heavy review of 66b0fc5 had no finding, and said only that setup.tsx (then 700 lines) was not read. 9e2ef5c splits it with no change of behaviour:

  • setup-stage.ts: the decisions (invitations, the first workspace under its lock, the sites, where to send the person), pure, with no React and no network.
  • setup-stage.test.ts: 11 cases on a worker of fakes; two violations were planted and failed.
  • routes/setup-account.tsx: step 1.
  • routes/setup-site.tsx: step 2.
  • routes/setup.tsx: the screen, 242 lines.

No spec changed. The lite of 9e2ef5c gives 4/5. On its remark: the worker refuses a rename by a member (manage-workspace, #250). It does not refuse a second workspace, and the console does not rely on it doing so: docs/decisions/console.md names the condition of the lock (a secure context).

@sakuga-review sakuga-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Score de confiance : 4/5 · ⚠️ Rien de bloquant · La PR peut être fusionnée : la logique de 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.

Comment thread apps/console/app/routes/setup.tsx Outdated
… 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]>

@sakuga-review sakuga-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@sakuga-agent
sakuga-agent Bot merged commit c7a8e96 into main Oct 13, 2026
13 checks passed
@sakuga-agent
sakuga-agent Bot deleted the mathieu/fru-239-console-la-mise-en-place-en-un-ecran-your-account-et-your branch October 13, 2026 16:03
sakuga-agent Bot pushed a commit that referenced this pull request Oct 13, 2026
…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-agent Bot added a commit that referenced this pull request Oct 13, 2026
…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]>
sakuga-agent Bot pushed a commit that referenced this pull request Oct 13, 2026
…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]>
sakuga-agent Bot added a commit that referenced this pull request Oct 13, 2026
…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]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review: 4/5 Score de confiance de Sakuga Review (5 : prête à merger)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant