Skip to content

feat(console): the Sites table has the six columns of the mockup and the legend of the statuses (FRU-270) - #302

Merged
Mheaus merged 2 commits into
mainfrom
mathieu/fru-270-console-sites-second-temps-colonnes-notes-on-the-page-with
Oct 13, 2026
Merged

Mheaus merged 2 commits into
mainfrom
mathieu/fru-270-console-sites-second-temps-colonnes-notes-on-the-page-with

Conversation

@sakuga-agent

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

Copy link
Copy Markdown
Contributor

Not critical (one screen of the console, no route). Stacked on #300 (FRU-237), which adds the summary of the sites to GET /console/workspaces/<id>/sites: merge #300 first. The shape read is the one fru-console announced for #300: per site notes: {seeded, green, ripening, ripe, composted}, via: ('script' | 'extension')[], lastNoteAt? (absent with no note), asOf?, and undelivered (only for a role that sees the tracker). A site without these fields (the index did not answer) shows « · » in the new cells (« None yet » to a screen reader), and the list stays.

Second part of the Sites screen (FRU-243 was the first, #262). It uses Mathieu's decision of 2026-10-13 on Q6: Fruitback keeps an index of the notes.

What changes

  • Six columns, as on screen 09 of the mockup: Site, Notes, On the page with, Notes go to, Last note, and the menu.
    • Notes: the count (600, 22 px, tabular), then a bar of 128 × 8 px from the kit (StatusBar). The bar is an image whose name says every count again, for example « 12 notes: 3 new, 2 to do, 4 in progress, 2 done, 1 closed ». A status with no note takes no room in the bar. A site with no note says « Waiting for the first note ».
    • On the page with: « Extension, script », « Script » or « Extension ».
    • Last note: « 12 min ago », « 2 h ago », « Yesterday », « 3 days ago » for the week (the words of the Notes mockup), then the day. It comes from the new ago.ts, with unit tests in English and French.
  • The legend of the statuses (ul aria-label="Statuses") above the table: five drops of 9 px, 13px, gap 6 × 18, 12 px under it. Its line-height is normal, as on the mockup: the table starts at y 159.2 (159 on the mockup).
  • A REST address with notes it did not take says « 2 not delivered yet » under « REST API », where the address was.
  • The table is 860 px at the least, as the mockup writes it. On a phone it scrolls in its frame and the page does not. What opens under a row (« Install », « Preview builds », « Remove ») is sticky at the left of what is seen, as wide as the frame, wherever the table is scrolled.
  • A host breaks after its dots first (<wbr>): « preview.lumen. / studio », and not in the middle of a word.

Nothing moves when the list arrives (the rule of #294, #295, #296)

The counts are in the same answer as the rows, so nothing of a row arrives after the row. The test « the counts come with the list » holds GET …/sites, measures the rail and the title, then releases the read. It checks that the bars are in the paint where the table first appears, that the button of a row does not move afterwards, and that the rail and the title did not move. Planted control: with the counts drawn 400 ms after the rows, that test fails. Restored after.

Gaps with the mockup (1440, macOS)

Element Mockup Built Gap
Legend, first item 297, 130, h 16 296.5, 130.2, h 16 0.5
Table 298, 159, w 1022 297.5, 159.2, w 1022 0.5
Header row h 43.3 h 43.3 0
A row h 68 h 68.2 0.2
Bar 575, 233, 128 × 8 553.2, 232.6, 128 × 8 x −22: the Site column is narrower, because « Members of Acme » is shorter than the name of the mockup's workspace. The test checks the bar at 48 px into its column (16 + 22 + 10), exact.
Button of a row 1264, 36 × 36 1263.5, 36 × 36 0.5
Columns 527, 766, 940, 1120, 1250 505, 726, 886, 1117, 1237 the table sizes its columns by their text, and the text is not the mockup's
Of the mockup Here Why
« *.preview.acme.dev » as a site no Q4: no preview without a proof (as in #262)
GitHub Issues as a destination no it is no connector (FRU-188)
« or see where every note went » not yet it links to the Notes page, FRU-245, which comes next and adds the link
A site with no note shows « Extension » « · » « On the page with » is read from the notes of the site: with none, nothing is known
390 px: no row wraps a row of the stubs wraps (« Team Acme web and 1 more ») the data of the stubs is wider than the mockup's: its columns need more than 860 px

Captures, 1440 and 390, in agent-coord/scratch/fru-sf-workspace/fru-270/ (they cannot be uploaded): sites-list, sites-list-fr, sites-empty, sites-failed, sites-add, sites-add-refused, sites-menu, sites-install, sites-previews, sites-remove, sites-member, sites-guest, sites-empty-member, sites-hover-row, sites-focus2, each -1440.png and -390.png.

French added

English French
On the page with Sur la page avec
Last note Dernière note
Statuses Statuts
None yet Aucune pour l’instant
Extension, script Extension, script
Waiting for the first note En attente de la première note
1 not delivered yet 1 pas encore livrée
{count} not delivered yet {count} pas encore livrées
1 note: {new} new, {todo} to do, {progress} in progress, {done} done, {closed} closed 1 note : {new} nouvelle, {todo} à faire, {progress} en cours, {done} terminée, {closed} fermée
{count} notes: {new} new, … {count} notes : {new} nouvelles, {todo} à faire, {progress} en cours, {done} terminées, {closed} fermées
Just now À l’instant
{count} min ago il y a {count} min
{count} h ago il y a {count} h
Yesterday Hier
{count} days ago il y a {count} jours

Proof

  • e2e/console-sites.spec.ts, 17 tests, on stubs. It covers the six headers, the legend (words, drops and their colours, sizes), the bar (box, name, empty statuses), the cells, the « · » cells and their hidden words, the held read, a worker with no summary, a guest (counts without « Notes go to »), and 390 px (the table scrolls and what opens under a row stays in the frame, scrolled or not).
  • Every other console spec passes locally against this branch, among them console-narrow (the hidden words of a cell are anchored: without that they widened the page at 390 px, which this spec found).
  • ago.test.ts: minutes, hours, « Yesterday » by calendar day, the day and the year, a clock ahead, French.

Not verified

Firefox, Safari, a screen reader, a touch screen. The boxes against the real worker of FRU-237: stubs only.

🤖 Generated with Claude Code


Sakuga Review · Score de confiance : 4/5

Fusionnable : la logique nouvelle (ago.ts, colonnes du tableau, comptes) est correcte et testée, et les seuls points non vérifiés sont des définitions existantes hors du diff.

Résumé

La PR ajoute la colonne du résumé des notes (comptes par statut, barre), la voie d'arrivée, la dernière note avec un formateur « il y a » (ago.ts), la légende des statuts, et passe la table des Sites à six colonnes avec 860 px minimum et défilement dans son cadre. La logique de ago.ts (minutes, heures, jour calendaire, semaine, date localisée) a été vérifiée case par case, y compris DST via Math.round, dates illisibles et horloge en avance : aucun défaut. Les colSpan, les clés de traduction et les tests unitaires et e2e sont cohérents avec le code.

Non relu
  • apps/console/app/api.ts : la définition de STAGES et du type Stage, hors du diff, n'a pas pu être vérifiée.
  • apps/console/app/routes/connector-parts.tsx : STAGE_NAMES et STAGE_STATUS, hors du diff, n'ont pas été vérifiés.
  • apps/console/app/ui.tsx : les props exactes de StatusBar (label, counts) n'ont pas pu être confirmées.

Revues (2) · Dernier commit relu : feat(console): « 3 days ago » for the week, as ... · Niveau lite · z-ai/glm-5.3 · 0,011 $

@kento-review kento-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 après un regard sur le point mineur ci-dessous : la PR suppose que le worker renvoie le résumé des sites (notes, via, lastNoteAt, undelivered, asOf), et ce contrat n'est pas vérifiable dans le diff.

🔍 Une revue plus poussée est conseillée : Vérifier que la route GET et le POST des sites du worker renvoient bien les champs notes, via, lastNoteAt et undelivered attendus par sites.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,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 the review: 4/5 Score de confiance de Sakuga Review (5 : prête à merger) label Oct 13, 2026

@kento-review kento-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 · Peut être fusionnée après un regard sur les points mineurs : la PR affiche les six colonnes du tableau des sites, et les compteurs, la légende et « il y a » se calculent côté console sans régression visible dans le diff.

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.

@sakuga-agent
sakuga-agent Bot force-pushed the mathieu/fru-270-console-sites-second-temps-colonnes-notes-on-the-page-with branch from 0378985 to ce4cafe Compare October 13, 2026 19:05
@sakuga-agent
sakuga-agent Bot changed the base branch from main to mathieu/fru-237-worker-le-resume-des-sites-dun-workspace October 13, 2026 19:05

@kento-review kento-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 · Je ne vois pas de défaut certain dans les parties relues, mais le chemin d'écriture de l'index dans POST /feedback (app.ts) n'est pas dans le diff, donc la PR ne peut pas être validée complètement en l'état.

🔍 Une revue plus poussée est conseillée : Vérifier dans app.ts que l'écriture de l'index (record et refresh) est faite après la planification de la note et ne fait jamais échouer POST /feedback, et que refresh est bien appelé dans le chargeur du cache de lecture.
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.

@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 13, 2026
@Mheaus
Mheaus added this pull request to stack #304 October 13, 2026 20:45
Base automatically changed from mathieu/fru-237-worker-le-resume-des-sites-dun-workspace to main October 13, 2026 20:45
Mheaus and others added 2 commits October 13, 2026 22:45
…the legend of the statuses (FRU-270)

The table of the sites now shows, for each site, its notes by status (a
count and a bar whose name says the counts again), how they came (the
script or the extension), and the last one, read from the summary of the
sites of FRU-237. The legend of the statuses is above the table. A REST
address with notes it did not take says how many under its name.

The counts are in the answer that lists the sites, so nothing of a row
arrives after the row: a test holds the read and checks that the bars are
there in the paint of the table, and that nothing a pointer can reach
moves. The table is 860 px at the least, as on the mockup: on a phone it
scrolls in its frame, and what opens under a row stays in view. ago.ts
says how long ago in the words of the mockup, in English and French.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@Mheaus
Mheaus force-pushed the mathieu/fru-270-console-sites-second-temps-colonnes-notes-on-the-page-with branch from ce4cafe to 44074b4 Compare October 13, 2026 20:45

@kento-review kento-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 · Fusionnable : la logique nouvelle (ago.ts, colonnes du tableau, comptes) est correcte et testée, et les seuls points non vérifiés sont des définitions existantes hors du diff.

Niveau lite · z-ai/glm-5.3 · 0,011 $ · 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
@Mheaus
Mheaus merged commit 35df699 into main Oct 13, 2026
13 checks passed
@Mheaus
Mheaus deleted the mathieu/fru-270-console-sites-second-temps-colonnes-notes-on-the-page-with branch October 13, 2026 21:42
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