Skip to content

feat(console): an owner or an admin reads « Last seen » on Members (FRU-247) - #315

Merged
Mheaus merged 3 commits into
mainfrom
fru-sf-workspace/fru-247-last-seen
Oct 14, 2026
Merged

Mheaus merged 3 commits into
mainfrom
fru-sf-workspace/fru-247-last-seen

Conversation

@sakuga-agent

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

Copy link
Copy Markdown
Contributor

For Mathieu, with its route. Stacked on #307 (FRU-249, the days of « Last seen »), itself on #299: merge them first. The screen is not critical by itself, but it shows a new piece of data, chosen under Q7.

Mathieu's decision on Q7, 2026-10-13: a short label of the browser per session, and « Last seen » visible to owners and admins only. The route of #307, read in its code: GET /console/workspaces/<id>/members/seen answers {seen: {<accountId>: "YYYY-MM-DD"}} (a day of UTC) to an owner or an admin, and 403 forbidden to the others. A member absent from seen was not seen since it came.

What changes

  • An owner or an admin reads the last column as « Last seen »: « Today », « Yesterday », « 3 days ago » for the week, then the day. Someone who was not seen since « Last seen » came reads « Not seen yet ». Never an hour: the worker keeps none, so a colleague does not learn when somebody works. An invitation still says « Sent 3 Oct » and « Until 20 Oct ».
  • A member, or a worker that refuses or does not have the route, gets the day somebody joined (« Joined »), as before. A member does not ask the route at all.
  • The days are read beside the members, and the table does not wait for them (changed after the lite review: Promise.all held the table up to the 15 s of a call). The cell of a day keeps the room of « Not seen yet », so a day that arrives moves nothing of a row: « Remove » and « Cancel » stay where they are (the rule of fix(console): « Sign out » does not move when the list of the browsers arrives (FRU-248) #294–fix(console): a read made again keeps the rows of Members on the screen (FRU-271) #296).

Gaps with the mockup

Of the mockup Here Why
« Now », « 1 h ago » « Today » a day and no hour (Q7, the route of #307)
« Last seen » for every reader for an owner or an admin; « Joined » for the others Q7
« Guest, one site » and the list « Site » not yet Q3, after the rest

Captures in agent-coord/scratch/fru-sf-workspace/fru-247-seen/ (they cannot be uploaded): members-last-seen and members-joined-member, in English and French, -1440.png and -390.png. The rest of the screen is unchanged since #268 and #296.

French added

English French
Last seen Vu pour la dernière fois
Today Aujourd’hui
Not seen yet Pas encore vu

« Yesterday » and « {count} days ago » are on main (#302).

Proof

e2e/console-members.spec.ts, four new tests, on stubs:

  • an owner on a clock fixed at noon of UTC reads « Today », « Yesterday », « 3 days ago », « Not seen yet », and « Sent 3 Oct » on the invitation;
  • with the days held, the five rows are there; when the days arrive, « Remove » and « Cancel » have not moved. With the table waiting for the days (the first head), this test fails;
  • a member reads « Joined » and does not ask the route;
  • a refused seen leaves « Joined ».

Locally: console-members 21, console-invitation 13, console-confirm 4, console-narrow 5.

Not verified

The worker of #307 itself (stubs only, read from its code); Firefox, Safari, a screen reader.

🤖 Generated with Claude Code


Sakuga Review · Score de confiance : 4/5

Mergeable après vérification : la fonction « Last seen » est cohérente côté console, mais la route worker members/seen n'est pas visible dans cette PR, et le test « les jours d'une lecture ancienne » réfère à un champ refuses absent du type Worker, ce qui peut casser le typecheck.

🔍 Une revue plus poussée est conseillée : Vérifier que la route worker members/seen refuse bien les lectures aux membres et aux invités, et que la date de dernière connexion d'un collègue n'est exposée qu'aux propriétaires et administrateurs.
Commentez @sakuga-review review balanced (environ 5 centimes) ou @sakuga-review review heavy (10 centimes à 1 dollar).

Constats

  1. P2 Champ refuses absent du type Worker e2e/console-members.spec.ts:1
    Le test « les jours d'une lecture ancienne » écrit worker.refuses = { status: 503, ... } sur un objet de type Worker, qui ne déclare pas ce champ. Le typecheck échoue, et si le stub ne lit pas ce champ, le chemin « mail-unavailable » n'est jamais déclenché et le test ne prouve rien. Correction : Passer le refus par World au moment de workerWith, ou déclarer le champ dans Worker et le lire dans le stub de l'invitation.
Résumé

La PR ajoute la colonne « Last seen » de la page Members, lue pour un propriétaire ou un administrateur via GET …/members/seen, en parallèle de la liste des membres. Les jours d'une lecture ancienne sont écartés, et la cellule garde sa largeur pour que rien ne bouge dans une ligne. J'ai relu seenOn, read, Row et les nouvelles clés de traduction, qui existent toutes dans messages.fr.ts. Je n'ai pas pu contrôler la route worker ni son autorisation, ni le comportement réel du stub de test.

Diagramme
%%{init: {'theme': 'neutral'}}%%
flowchart LR
A["members.tsx read()"] --> B["call members/seen"]
A --> C["call list-members"]
B --> D["setSeen si lecture courante"]
D --> E["Row lastOf -› seenOn"]
Loading
Non relu
  • apps/worker: la route /console/workspaces/:id/members/seen n'est pas dans le diff ni dans le Context ; son contrôle d'autorisation (propriétaire ou admin seulement, membre de l'espace) et sa réponse pour un compte sans droit ne sont pas vérifiés
  • apps/console/app/routes/members.tsx: les appelants de seenOn hors de cette page ne sont pas visibles ; l'export d'une fonction non-route depuis un module de route peut gêner le rechargement à chaud
  • e2e/console-members.spec.ts: le comportement exact du stub held et de later avec le double effet React en développement n'a pas pu être vérifié sans l'exécuter

Revues (7) · Dernier commit relu : fix(console): the days of a read made before do... · Niveau lite · anthropic/claude-haiku-5.5 · 0,007 $

@kento-review kento-review Bot left a comment

Copy link
Copy Markdown
Contributor

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 · A merger should look at one point before merging: the members table now waits for the new members/seen request as well as the member list, so a slow or hanging seen route blocks the whole table. The route itself is not in the diff, so its owner-or-admin check and its date format are unverified.

🔍 Une revue plus poussée est conseillée : Vérifier que la route /console/workspaces/:id/members/seen du worker ne renvoie les jours qu'aux propriétaires et administrateurs, et qu'elle ne renvoie qu'un jour sans heure, comme le promet seenOn.
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,006 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.

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

sakuga-agent Bot commented Oct 13, 2026

Copy link
Copy Markdown
Contributor Author

Reply to the lite review of e5fa936 (3/5).

« Le tableau des membres attend la route seen » (P1): right, fixed in f6fc1d0.

  • The fact: with Promise.all, a slow …/members/seen held the whole table, up to the 15 s timeout of a call (CALL_TIMEOUT_MS in transport.ts).
  • The change: the members are drawn as soon as they are read, and the days are read on their own. While the days are on their way, the cell is empty and the header already says « Last seen ». If the read is refused, the cells fall back to « Joined ». The cell of a day keeps the room of « Not seen yet » (min-w-[96px]), so a day that arrives moves nothing of the row: this was the reason for the Promise.all (the rule of fix(console): « Sign out » does not move when the list of the browsers arrives (FRU-248) #294–fix(console): a read made again keeps the rows of Members on the screen (FRU-271) #296), and it still holds.
  • The proof: « the table does not wait for « Last seen », and nothing of a row moves when the days arrive ». It holds the days and sees the five rows. Then it releases the days, reads « 3 days ago » and « Not seen yet », and checks that the boxes of « Remove » and « Cancel » did not move. With the code of e5fa936 it fails (no row while the days are held). Locally: console-members 21, console-invitation 13, console-confirm 4, console-narrow 5.

@kento-review kento-review Bot left a comment

Copy link
Copy Markdown
Contributor

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 côté console, sous réserve de vérifier que la route du worker GET /console/workspaces/<id>/members/seen existe et n'est ouverte qu'aux propriétaires et administrateurs ; ce diff n'en contient pas la moindre trace.

🔍 Une revue plus poussée est conseillée : Vérifier dans apps/worker que la route members/seen existe et refuse les membres et les invités, car elle expose quand chaque compte a été vu pour la dernière fois.
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,007 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.

@kento-review kento-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

sakuga-agent Bot commented Oct 14, 2026

Copy link
Copy Markdown
Contributor Author

On the checks and the lite review of f6fc1d0 (4/5).

e2e failed on one test that this PR does not touch. console-sites.spec.ts:167 ran at 00:0x UTC and read « Yesterday » where it expects « 2 h ago ». This is the defect of the clock fixed on main by #314 (merged). The base of this stack (#307, then #299) was cut before #314, so it does not have the fix. It goes away when the base is updated on main; I asked fru-authfix. No line of this PR is in that test or in ago.ts.

« Route members/seen absente du diff » (P2): the route is in the base of this PR, and it holds what the finding asks. In apps/worker/src/console-api.ts of #307:

  • rest === '/members/seen' answers 405 to anything but GET, and 403 forbidden to a role without manage-members (a member, a guest);
  • it answers 200 { seen: await context.accounts.lastSeen(workspaceId) } otherwise, and a caller who is not a member gets 404 first;
  • these are the shape and the roles this screen reads.

A worker without the route answers 404, and the screen then shows « Joined », which is the right fallback: it shows nothing it does not know. That case is held by « a « Last seen » the worker refuses leaves the day somebody joined ».

@sakuga-agent
sakuga-agent Bot force-pushed the fru-sf-workspace/fru-247-last-seen branch from f6fc1d0 to 00f9831 Compare October 14, 2026 00:21

@kento-review kento-review Bot left a comment

Copy link
Copy Markdown
Contributor

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 champ « Vu pour la dernière fois » dépend d'une route …/members/seen que la PR n'ajoute pas et dont le contrôle d'accès côté worker n'est pas visible ; le reste du changement est correct.

🔍 Une revue plus poussée est conseillée : Vérifier dans le worker que la route members/seen existe et refuse les lectures aux non-admins, car une fuite de dates de connexion entre membres serait un défaut de sécurité.
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,006 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.

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

sakuga-agent Bot commented Oct 14, 2026

Copy link
Copy Markdown
Contributor Author

Rebased by hand on the base updated by fru-authfix (4cf1467, which carries #314, the fix of the clock). git range-diff: e5fa936 → 4bc3a96 and f6fc1d0 → 00f9831, both replayed with no conflict and no change. Locally on the new head: console unit tests 117, console-members 21, console-invitation 13, console-sites 18 (the test that was red at night).

@sakuga-agent

sakuga-agent Bot commented Oct 14, 2026

Copy link
Copy Markdown
Contributor Author

Reply to the lite review of 00f9831 (3/5): the same finding as on f6fc1d0, answered there. In short, …/members/seen is served by the base of this PR (#307, console-api.ts). It answers 403 forbidden without manage-members and 200 {seen} otherwise. This PR is the screen half and merges after it. A worker without the route falls back to « Joined », which shows nothing that is not known; a test holds that case. CI is green on this head.

@sakuga-agent

sakuga-agent Bot commented Oct 14, 2026

Copy link
Copy Markdown
Contributor Author

@sakuga-review review balanced

@kento-review kento-review Bot left a comment

Copy link
Copy Markdown
Contributor

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 · Fusionnable après correction : une réponse tardive de « Last seen » peut s'afficher pour un autre workspace, et l'absence de route côté worker n'est pas confirmée.

Niveau balanced · anthropic/claude-sonnet-5.5 · 0,105 $ · 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 14, 2026

Copy link
Copy Markdown
Contributor Author

Reply to the balanced review of 00f9831 (3/5).

1. « Réponse seen tardive appliquée à un autre workspace » (P1): right for a read made again, fixed in 78b5d09. Across workspaces it cannot happen.

  • Across workspaces, measured: the frame draws « Loading… » until its context is the new workspace (workspace.tsx), so the screen of the workspace before is unmounted and its late answer sets nothing. A test that switched workspaces with the days held passed on 00f9831 too, so it proved nothing and is not kept.
  • A read made again in the same workspace (an invitation whose message did not leave, or a cancelled invitation that was gone) was the real case. A late answer of the read before replaced the days of the one after.
  • The fix: each read has its number (seenAsked), and only the answer of the last one is taken.
  • The proof: « the days of a read made before, late, do not replace those of the read made after ». It holds the first days, makes the members read again with « mail-unavailable », gets the second days (« 2 days ago »), then releases the first. It fails on 00f9831 (« 3 days ago ») and passes now.

2. « Pas de remise à asking lors d'une relecture » (P2): right, fixed in the same commit. A read made again sets the days to « asking »: the days shown before are taken away while the next ones are read, in the room they keep. Nothing of a row moves, as the test « the table does not wait for « Last seen » » measures.

Locally: console-members 22, console-invitation 13, console-confirm 4.

@Mheaus
Mheaus added this pull request to stack #318 October 14, 2026 08:04

@kento-review kento-review Bot left a comment

Copy link
Copy Markdown
Contributor

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 après vérification de la route worker /members/seen, absente de la PR : son contrôle d'accès conditionne la confidentialité de « Last seen ».

🔍 Une revue plus poussée est conseillée : Vérifier la route worker GET /console/workspaces/:id/members/seen : elle doit refuser les rôles membre et invité et ne renvoyer que les comptes de l'organisation demandée.
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,006 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.

Comment thread e2e/console-members.spec.ts Resolved
@kento-review kento-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 14, 2026
@sakuga-agent

sakuga-agent Bot commented Oct 14, 2026

Copy link
Copy Markdown
Contributor Author

For the next review: since the balanced of 00f9831, 78b5d09 fixes its two findings. Each read of the days has its number, and only the answer of the last one is taken (P1). A read made again takes the days shown away while the next ones are read (P2). Proof: « the days of a read made before, late, do not replace those of the read made after », which fails on 00f9831. Across workspaces the case cannot happen: the screen is unmounted until the frame has the new workspace.

@sakuga-agent

sakuga-agent Bot commented Oct 14, 2026

Copy link
Copy Markdown
Contributor Author

@sakuga-review review balanced

@kento-review kento-review Bot left a comment

Copy link
Copy Markdown
Contributor

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 : une lecture « Last seen » tardive peut encore écraser les jours d'un workspace précédent ou d'un rôle changé.

Niveau balanced · anthropic/claude-sonnet-5.5 · 0,103 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.

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

sakuga-agent Bot commented Oct 14, 2026

Copy link
Copy Markdown
Contributor Author

Reply to the balanced review of 78b5d09 (3/5).

« Lecture seen non invalidée quand le rôle ou le workspace change » (P2): the case cannot happen while the screen is mounted. Nothing changed.

  • manages comes from workspace.role, which workspace.tsx reads once from /console/me when the frame mounts. Nothing on this screen reads it again: a role that changes is seen at the next load of the page, and the screen mounts again then.
  • A change of workspace unmounts the screen. The frame draws « Loading… » until its context is the new workspace, so seen starts again from its first value (manages ? 'asking' : undefined).
  • Within one mounted screen, every read takes a new number before it asks for the days, so a late answer is dropped. That is the fix of the previous round, and its test.

@sakuga-agent
sakuga-agent Bot force-pushed the fru-sf-workspace/fru-247-last-seen branch from 78b5d09 to 1a7feda Compare October 14, 2026 08:59
@sakuga-agent

sakuga-agent Bot commented Oct 14, 2026

Copy link
Copy Markdown
Contributor Author

Rebased by hand on #307 as fru-authfix put it on main (35ad53f, one commit, after #299 merged). git range-diff: 4bc3a96 → 8efb95d, 00f9831 → 0fe784b, 78b5d09 → 1a7feda, all three replayed with no conflict and no change. Locally on 1a7feda with #316 on top: console unit tests 119; console-members 22, console-invitation 13, console-sites 18, console-frame 17, console-narrow 5.

@sakuga-agent
sakuga-agent Bot force-pushed the fru-sf-workspace/fru-247-last-seen branch from 1a7feda to c60252f Compare October 14, 2026 13:50

@kento-review kento-review Bot left a comment

Copy link
Copy Markdown
Contributor

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 fusion dépend de la route du worker GET /console/workspaces//members/seen, dont le contrôle d'accès n'est pas dans ce diff, et le spec référence un champ refuses qui semble absent du type Worker.

🔍 Une revue plus poussée est conseillée : Vérifier que la route GET /console/workspaces//members/seen du worker refuse les comptes qui ne sont ni propriétaire ni administrateur de l'espace de travail, car ce diff ne montre que la console.
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,007 $ · 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 14, 2026

Copy link
Copy Markdown
Contributor Author

Rebased by hand on #307 as fru-authfix put it on main again (221f64e). git range-diff: 8efb95d → 33934f9, 0fe784b → 6b9a9ab, 1a7feda → c60252f. One conflict, in apps/console/app/messages.fr.ts: the French of the Notes page (#313, #323, now on main) and of « Last seen » were added at the same place. Both are kept. No other change.

Locally on the stack (with #316): console unit tests 119; console-members 22, console-invitation 13, console-sites 18, console-notes 17, console-frame 17, console-narrow 5, console-kit 20.

@sakuga-agent

sakuga-agent Bot commented Oct 14, 2026

Copy link
Copy Markdown
Contributor Author

Reply to the lite review of c60252f (3/5). The same two points as before, and the same facts. Nothing changed.

  • refuses is declared in type Worker (e2e/console-members.spec.ts, line 75: refuses?: { status: number; error: string }). It is served by the stub for invite-member, cancel-invitation and remove-member (line 147). typecheck is green on this head. The test fails on 00f9831 (« 3 days ago »), which happens only if the 503 mail-unavailable made the screen read again.
  • The route …/members/seen is in the base of this PR (feat(worker): the day a member was last seen, and the label of a browser (FRU-249) #307, console-api.ts). It answers 403 forbidden to a role without manage-members, so to a member or a guest, and 404 to someone who is not of the workspace. This PR is its screen and merges after it.

Base automatically changed from fru-authfix/fru-249-seen-and-browser to main October 14, 2026 14:05
Mheaus and others added 3 commits October 14, 2026 16:15
…RU-247)

The last column of the table is « Last seen » for an owner or an admin,
read from …/members/seen (FRU-249): a day of UTC and never an hour,
« Today », « Yesterday », « 3 days ago », then the day, and « Not seen
yet » for who was not seen since it came. It is read with the members, so
the table is drawn once with it and nothing of a row moves when the day
arrives. Who else reads the screen, or a worker that refuses the days,
gets the day somebody joined, as before.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…RU-247)

Found by the lite review: with Promise.all, a slow …/members/seen held
the whole table, up to the 15 s of a call. The members are drawn as soon
as they are read, and the days come on their own. The cell of a day keeps
the room of « Not seen yet », so a day that arrives moves nothing of the
row. The test holds the days, sees the five rows, releases them, and
measures « Remove » and « Cancel »: it fails when the table waits.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…the read made after (FRU-247)

Found by the balanced review: …/members/seen was not tied to its read.
When the members were read again (an invitation whose message did not
leave, a cancelled invitation that was gone), a late answer of the read
before replaced the days of the one after. Each read now has its number,
and only the answer of the last one is taken; the days shown are taken
away while the next ones are read. The test holds the first days, reads
again, then releases them: it fails on the head before.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@sakuga-agent
sakuga-agent Bot force-pushed the fru-sf-workspace/fru-247-last-seen branch from c60252f to 961c59b Compare October 14, 2026 14:20

@kento-review kento-review Bot left a comment

Copy link
Copy Markdown
Contributor

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 après vérification : la fonction « Last seen » est cohérente côté console, mais la route worker members/seen n'est pas visible dans cette PR, et le test « les jours d'une lecture ancienne » réfère à un champ refuses absent du type Worker, ce qui peut casser le typecheck.

🔍 Une revue plus poussée est conseillée : Vérifier que la route worker members/seen refuse bien les lectures aux membres et aux invités, et que la date de dernière connexion d'un collègue n'est exposée qu'aux propriétaires et administrateurs.
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,007 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.

@kento-review kento-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 14, 2026
@sakuga-agent

sakuga-agent Bot commented Oct 14, 2026

Copy link
Copy Markdown
Contributor Author

Rebased by hand on main now that #307 is merged. git range-diff: 33934f9 → 9e52fb7, 6b9a9ab → 38f4174, c60252f → 961c59b. One conflict, in apps/console/app/messages.fr.ts: the French of « Connect this browser » (FRU-240, now on main) and of « Last seen » were added at the same place, and both are kept. The logic is unchanged.

Locally with #316 and #331 on top: console unit tests 123; console-members 22, console-invitation 13, console-sites 18, console-notes 17, console-frame 17, console-narrow 5, console-kit 20, console-connect 24, console-connectors 12.

@sakuga-agent

sakuga-agent Bot commented Oct 14, 2026

Copy link
Copy Markdown
Contributor Author

Reply to the lite review of 961c59b (4/5): the same point as on c60252f and 00f9831, and the same fact. refuses is declared in type Worker (line 75) and served by the stub of the invitation (line 147). typecheck is green on this head, and the test fails on 00f9831, which it could not do if the refusal were not served. The route members/seen is on main (#307): 403 without manage-members.

@Mheaus
Mheaus merged commit f6ed691 into main Oct 14, 2026
16 checks passed
@Mheaus
Mheaus deleted the fru-sf-workspace/fru-247-last-seen branch October 14, 2026 15:00
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