Repository navigation
feat(console): the screen of an invitation: who invites, the role, « Join », then « You are in » (FRU-241) - #270
Conversation
There was a problem hiding this comment.
Score de confiance : 4/5 · ✅ Rien de bloquant · Mergeable en l'état : je n'ai relevé aucun défaut de niveau majeur ou critique dans le diff. Le point restant est la suppression des clés « Until {date} » et « For {email} » du dictionnaire français, à vérifier ailleurs dans la console.
Niveau lite · anthropic/claude-haiku-5.5 · 0,006 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
d74962a to
8e2af9a
Compare
There was a problem hiding this comment.
Score de confiance : 3/5 ·
Niveau lite · anthropic/claude-haiku-5.5 · 0,007 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
…page in the preview (FRU-242) The commits of the branch as one, on the branch of #270 after the rebase of the stack on main. Co-Authored-By: Claude Opus 5.5 <[email protected]>
8e2af9a to
c1d10b9
Compare
There was a problem hiding this comment.
Score de confiance : 4/5 · ✅ Rien de bloquant · Mergeable en l'état : aucun défaut certain dans le code lu. Le point à vérifier est la suppression de la clé « Fruitback » de messages.fr.ts, que d'autres écrans pourraient encore appeler.
Niveau lite · anthropic/claude-haiku-5.5 · 0,007 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
…page in the preview (FRU-242) The commits of the branch as one, on the branch of #270 after the rebase of the stack on main. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…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]>
c1d10b9 to
c43a272
Compare
There was a problem hiding this comment.
Score de confiance : 4/5 · ✅ Rien de bloquant · Le changement peut être fusionné : je n'ai trouvé aucun défaut confirmé dans le diff. Les points restants tiennent à des fichiers ou des appelants que le message ne montre pas.
Niveau lite · anthropic/claude-haiku-5.5 · 0,007 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
|
@sakuga-review review balanced Asked now that its diff is its own: the stack under it is merged, and the branch is one commit on |
There was a problem hiding this comment.
Score de confiance : 3/5 ·
Niveau balanced · anthropic/claude-sonnet-5.5 · 0,107 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
|
On the balanced review of c43a272: P2, « Join » stays busy if the read of the sites throws. A call of the console does not throw. That is the contract of The summary, « a failure of “Use another address” does not show on the “joined” screen ». That action is only on the screen of an invitation, not on « joined ». Its failure is said there ( |
…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]>
|
A correction to my answer above: the case I named did not exist. The spec had « joined a workspace with no site », and nothing for sites that cannot be read. 2ec3acc adds it, twice: the worker refuses the list (503), and the request does not arrive ( |
There was a problem hiding this comment.
Score de confiance : 4/5 · ✅ Rien de bloquant · Fusion envisageable : le diff ne montre pas de défaut certain. Le point à vérifier avant fusion est la route GET /console/workspaces//sites appelée par un membre invité, que le diff ne montre pas.
Niveau lite · anthropic/claude-haiku-5.5 · 0,006 $ · 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 : 4/5 ·
Niveau balanced · anthropic/claude-sonnet-5.5 · 0,107 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.
|
On the P2 of the balanced review of 2ec3acc, « the read of the sites can stay pending after the invitation is accepted »: the wait is bounded and deliberate. The read is one call, cut at 15 s by |
Not critical: no safeguard changes, and the link of an invitation still signs nobody in. Review
balancedasked below. The orchestrator may merge it.Base
main: the stack under it is merged (#254, #255, #259, #260, #267), and the branch is one commit onmain. FRU-242 (#271) comes after it.Closes FRU-241. Parent: FRU-230 (« Simpler flow »). Screen 03 of the mockup of 2026-10-13.
Arbitrations that apply (orchestrator, 2026-10-13, on delegation from Mathieu). Q2: the link of an invitation stays neutral, only the sentence changes. Waiting for Mathieu, so not built: Q3 (a guest of one site) and Q8 (the extension signed in from the console).
What changes
/invitationswas a list. It is now the screen of one invitation, the most recent of the address that is signed in:Joined, the screen stays: « You are in », what comes next (the extension), the first site of the workspace when it has one, and the way to the console. Before, joining went straight to the Sites screen.
What the mockup has and this screen does not, and why
<title>of the mockup, as the ticket says.https://fruitback.com/reviewing.html#1-install-itStates the mockup does not draw, and what was chosen
Against the mockup
Built at 1440 × 900 and 390 × 844, system font, with « Havane » for the workspace (as wide as the mockup's name) and the mockup's own example address, which is on
mainalready. Boxes of the mockup from itsmeasures.json.h1h1What differs, and why. « Join » is 74.8 px higher: the title has one line and not two (32.2 px), and the list two rows and not three (43 px), both for the guest of one site that is not built. In the joined state everything under the confirmation is 24 px higher: one line less, for the sentence that is not said. The spec holds the mockup's positions less these amounts, within 2 px. « Add to Chrome » is 1.1 px narrower: it has the letter spacing of every main button, which the mockup forgets on this one.
Captures cannot be uploaded from the agent. They are on the machine
sakuga-mini: built,~/.claude/agent-coord/scratch/fru-sf-entree/fru-241/built-03-invitation-<invitation|joined>-<1440|390>.pngwith every box inbuilt-boxes.json; mockup,~/.claude/agent-coord/maquettes/simpler-flow/shots/03-invitation-<state>-<1440|390>.png.Found while testing, and fixed in the kit (#260)
A wide button whose words are a name somebody typed (« Join {a very long workspace name} ») made the page scroll sideways by 44 px at 390. A wide button and a link now wrap their words; the kit's spec measures it.
French, sentence by sentence (the mockup has none)
The two sentences of the roles are new English too (the ticket wrote them, on the legend of the Members screen): to check when reading. Removed: « For {email}. », « Until {date} ».
Tests
e2e/console-invitation.spec.ts, 11 tests. The two of FRU-104 and FRU-209 against a worker on PGlite still pass; the first now reads the new screen, joins, reads « You are in » with the site of the workspace, and goes to the console from there. Its assertions of security did not change: the link alone opens nothing, and only a session of the address joins. Nine new ones with stubs: the boxes of the two states at 1440 (on macOS: see #267 for why), axe on both and on the signed-out state (no violation),role="status"on « You are in », a workspace with no site, several invitations with one declined, an invitation that ended, « Use another address » when the session ends and when it does not, the three states with nothing to join, 390 and 320 px in English and French with a long workspace name and a long host.Ran locally
pnpm format,pnpm lint,pnpm typecheck, consoletest(93) pass. Console specs against this branch:console-invitation11,console-setup16,console-sign-in20,console-cookie-session8: all pass.Not verified
Firefox, Safari, a screen reader. The two sentences of the roles with a person who reads them for the first time.
🤖 Generated with Claude Code
Sakuga Review · Score de confiance : 4/5
Fusion possible : écran d'invitation propre, un seul défaut mineur de cas limite (invitations simultanées).
Constats
apps/console/app/routes/invitations.tsx:104Après l'acceptation, l'appel GET des sites est attendu avant d'afficher « Vous y êtes ». Si ce GET est lent, le bouton reste « Arrivée… » alors que l'invitation est déjà acceptée ; un rechargement de page montrerait alors une liste sans cette invitation. Correction : Passer à l'état joined immédiatement, puis compléter le site quand la lecture revient.
Résumé
La PR refait l'écran /invitations (invitation la plus récente, rôle, « Rejoindre », puis « Vous y êtes » avec le premier site). Les chemins d'erreur sont traités : lecture des sites en échec, déconnexion non confirmée, invitation expirée. Les textes français et la doc sont cohérents ; les tests e2e couvrent les états principaux. Je n'ai pas pu vérifier les composants du kit (Button, LinkButton, EntryPage) ni les guards messages.test.ts.
Diagramme
%%{init: {'theme': 'neutral'}}%% flowchart LR A["invitations.tsx"] --> B["myInvitations"] A --> C["accept-invitation"] C --> D["GET workspaces sites"] D --> E["Joined screen"] A --> F["signOut"]Non relu
Revues (4) · Dernier commit relu : test(console): « You are in » when the sites of... · Niveau
balanced·anthropic/claude-sonnet-5.5· 0,107 $