Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
949 commits
Select commit Hold shift + click to select a range
fc34525
fix(WS-SETTINGS-M): V4-R3-3 the Lead/worker fields dim once, not twic…
Broccolito Oct 11, 2026
ec7e4af
fix(WS-PRIMITIVES): V4-R3-1 + V4-R3-5 a settings row keeps still unde…
Broccolito Oct 11, 2026
e8eb877
docs(WS-PRIMITIVES): V3-R3-3, V4-R3-1, V4-R3-5 in shared-controls.md:…
Broccolito Oct 11, 2026
37a3c06
fix(WS-LANDING): V5-R3-1 the wall's tool rows are one line, as the ap…
Broccolito Oct 11, 2026
218cfe0
fix(WS-PRIMITIVES): WS-SKILLS-2 a dialog or sheet that opens on an au…
Broccolito Oct 11, 2026
e42c4b7
docs(WS-PRIMITIVES): WS-SKILLS-2 in shared-controls.md: a dialog that…
Broccolito Oct 11, 2026
4eb28af
docs(WS-SETTINGS-B): WS-SETTINGS-M-1 configLabels.ts header names the…
Broccolito Oct 11, 2026
c0f85d2
test(WS-SKILLS): WS-PRIMITIVES-3 the autoFocus instrument case become…
Broccolito Oct 11, 2026
5f1c6da
test(WS-EXTENSIONS): WS-SKILLS-2 the focus test's header says two lay…
Broccolito Oct 11, 2026
72a44e2
docs(WS-TOOLS): transcript-row.css names the three things message-met…
Broccolito Oct 11, 2026
09e7dc8
perf(WS-SIDEBAR): inbox WS-PERF-3 (V1-R2-2 round 3) no Radix menu roo…
Broccolito Oct 11, 2026
1584a1a
perf(WS-HISTORY): V1-R3-2 History groups its chats by asking for a da…
Broccolito Oct 11, 2026
c76fb31
fix(WS-SIDEBAR): inbox WS-HISTORY-3 (V1-R3-6) a sidebar chat row says…
Broccolito Oct 11, 2026
5625a0d
perf(WS-SIDEBAR): inbox WS-HISTORY-4 (V1-R3-2) chatDateBucket builds …
Broccolito Oct 11, 2026
140d4d9
fix(WS-VIEWS-A): V3-R4-1 the New schedule dialog answers an empty Nam…
Broccolito Oct 11, 2026
1c4600d
fix(WS-SETTINGS-M): V4-R4-1 a pointer open of the Lead/worker dialog …
Broccolito Oct 11, 2026
7af0107
fix(WS-PICKERS): V2-R4-1 the context ring draws only against a loaded…
Broccolito Oct 11, 2026
4d333fb
fix(WS-PRIMITIVES): V4-R4-2 Report a problem is the shared dialog: Mo…
Broccolito Oct 11, 2026
7dda35b
docs(WS-PRIMITIVES): V4-R4-2 in shared-controls.md: an InfoTip beside…
Broccolito Oct 11, 2026
0b53f62
fix(WS-SETTINGS-M): V4-R4-3 the Llama Server card's Model picker is t…
Broccolito Oct 11, 2026
2ba5563
perf(WS-PERF): V1-R2-2 round 4 the line math for drawing only the row…
Broccolito Oct 11, 2026
bba642f
fix(WS-COMPOSER): WS-PICKERS-5 only the newest context-window lookup …
Broccolito Oct 11, 2026
baee980
perf(WS-SIDEBAR): inbox WS-PERF-4 (V1-R2-2 round 4) the chat list dra…
Broccolito Oct 11, 2026
a226dc3
test(WS-TRANSCRIPT): WS-TOOLS-3 an open Explored group as the last en…
Broccolito Oct 11, 2026
bee5ee5
fix(WS-MOTION): inbox WS-SIDEBAR-4 a tab says its kind once: the stri…
Broccolito Oct 11, 2026
d0bd8fa
fix(WS-SIDEBAR): WS-PERF-4 follow-up, the drawn range holds under the…
Broccolito Oct 11, 2026
2ec504f
fix(WS-SIDEBAR): WS-PERF-4 follow-up, what the person reaches does no…
Broccolito Oct 11, 2026
2d236eb
docs(WS-TOOLS): inbox WS-TRANSCRIPT-3 ExploredRow's body shape is a c…
Broccolito Oct 11, 2026
0cb5ab4
fix(Coordinator): gate final-1, ignore the repo-root public/pdfjs cop…
Broccolito Oct 11, 2026
e4a000e
docs(coordinator): the redesign records reach R-31: spec 3.4 and 3.6 …
Broccolito Oct 11, 2026
cc71098
docs(coordinator): CLAUDE.md records the redesign: 28px sidebar rows …
Broccolito Oct 11, 2026
a5cd704
style(WS-LANDING): R-32 the composer cards the animations draw (hub, …
Broccolito Oct 11, 2026
5055fe6
fix(WS-KNOWLEDGE): R-33 the Sources drop zone is big again, filling t…
Broccolito Oct 11, 2026
d3be11a
style(WS-COMPOSER): R-32 the composer card (chat and Home) is the pag…
Broccolito Oct 11, 2026
a5fa59b
docs(WS-COMPOSER): R-32 main.css composer comments: both cards (chat …
Broccolito Oct 11, 2026
0c46741
docs(coordinator): the design system says what R-32 does: design.md 9…
Broccolito Oct 11, 2026
e313216
docs(coordinator): correct the redesign docs after a claim check agai…
Broccolito Oct 11, 2026
95d838a
style(WS-TRANSCRIPT): R-32 the in-place message edit card is the comp…
Broccolito Oct 11, 2026
ec9aee0
docs(coordinator): correct CLAUDE.md and the handoff for ruling 21 (9…
Broccolito Oct 11, 2026
9928d0f
docs(coordinator): the redesign records take owner message 18: R-34 (…
Broccolito Oct 11, 2026
e26ee21
docs(coordinator): the handoff counts owner message 18 and R-34: requ…
Broccolito Oct 11, 2026
4b1dc9e
test(WS-KNOWLEDGE): R-33 the Sources rail is measured as the app buil…
Broccolito Oct 11, 2026
d6083bc
fix(WS-MOTION): V1-R5-1 the chat tab strip scrolls and the scroll hol…
Broccolito Oct 11, 2026
9041bd6
fix(WS-KNOWLEDGE): V3-R5-1 R-33 held-file answer for the rail: the So…
Broccolito Oct 11, 2026
8f132ac
fix(coordinator): FR-R1-14 the day-one privacy notice is the shared d…
Broccolito Oct 11, 2026
058039d
fix(WS-PICKERS): V2-R4-1 the context ring draws a window only when it…
Broccolito Oct 11, 2026
0b40d19
fix(WS-PRIMITIVES): FR-S-7 the startup dependency prompt, class-only:…
Broccolito Oct 11, 2026
5535c62
style(WS-KNOWLEDGE): R-33 the rail's held-file edge is the accent, th…
Broccolito Oct 11, 2026
a49bc7b
fix(WS-KNOWLEDGE): R-33 the drop zone's button is named for what a pr…
Broccolito Oct 11, 2026
e2be898
fix(WS-PRIMITIVES): FR-R1-10 the shared Input sets its own value ink …
Broccolito Oct 11, 2026
b4c7c53
fix(WS-SETTINGS-M): FR-R1-1 the first-run catalog opens once, at rest…
Broccolito Oct 11, 2026
c0ef233
fix(WS-SIDEBAR): V1-R5-2 the chat list is modal itself while a row me…
Broccolito Oct 11, 2026
bf34c3b
fix(WS-SIDEBAR): V4-R5-2 Export… announces only a written file: in th…
Broccolito Oct 11, 2026
15e68f0
fix(WS-SETTINGS-M): FR-R1-2 FR-S-1 FR-S-4 FR-R1-12 FR-R1-13 FR-S-9 FR…
Broccolito Oct 11, 2026
c7fd5f2
fix(WS-SETTINGS-M): FR-S-10 every first-run status line is one Status…
Broccolito Oct 11, 2026
a408a3d
fix(WS-SUMMARY): V2-R5-5 V2-R5-6 a chat that is still loading looks l…
Broccolito Oct 11, 2026
2afc720
fix(WS-SETTINGS-M): FR-R1-3 FR-S-2 FR-R1-4 the Llama Server panel, fi…
Broccolito Oct 11, 2026
e68808c
fix(WS-PRIMITIVES): V4-R5-1 every pointer open of a shared dialog is …
Broccolito Oct 11, 2026
50dae2f
test(WS-PRIMITIVES): FR-S-7 the startup dependency prompt measured in…
Broccolito Oct 11, 2026
117014c
fix(WS-SETTINGS-M): FR-R1-5 an expandable first-run row (Claude Code,…
Broccolito Oct 11, 2026
0be6e8e
fix(WS-SETTINGS-M): FR-R1-6 FR-S-6 Institutional has one path: a Vers…
Broccolito Oct 11, 2026
96f99f3
fix(WS-COMPOSER): V2-R4-1 round 5 the footer ring is told which model…
Broccolito Oct 11, 2026
fc32845
test(WS-EXTENSIONS): V4-R5-1 the Brxt drop-zone focus case models the…
Broccolito Oct 11, 2026
0940c03
docs(WS-SETTINGS-M): provider-catalog records why dialogFocus.ts stay…
Broccolito Oct 11, 2026
96877ca
test(WS-PICKERS): the footer cost's half of BaseChat's ledger contrac…
Broccolito Oct 11, 2026
d3fe755
fix(WS-SETTINGS-M): FR-R1-8 FR-S-3 a coding-agent row's second line i…
Broccolito Oct 11, 2026
03fd7b7
fix(WS-SETTINGS-M): FR-R1-9 a provider description is a Tab stop only…
Broccolito Oct 11, 2026
397ea0a
fix(WS-SETTINGS-M): FR-S-5 FR-R1-11 the Public key detector is a labe…
Broccolito Oct 11, 2026
20cb01b
fix(WS-SETTINGS-M): FR-S-8 FR-S-11 Ollama's panel speaks plainly and …
Broccolito Oct 11, 2026
f5018f6
refactor(WS-SETTINGS-M): FR-S-12 the dead onboarding chrome goes: Cod…
Broccolito Oct 11, 2026
ef7aa09
style(WS-SETTINGS-M): FR-S-14 the day-one privacy notice, class only:…
Broccolito Oct 11, 2026
fa80358
docs(WS-SETTINGS-M): the provider catalog doc records first-run round…
Broccolito Oct 11, 2026
21b6dc3
fix(coordinator): FR-R2-8 the day-one privacy notice's counts and ext…
Broccolito Oct 11, 2026
35ae1ad
fix(WS-PRIMITIVES): FR-R2-2 the startup dependency prompt ends its fo…
Broccolito Oct 11, 2026
d2133bc
fix(WS-COMPOSER): FR-R2-9 one missing step, one noun: the no-model no…
Broccolito Oct 11, 2026
51d145c
fix(WS-PRIMITIVES): V3-R6-2 the typed confirmation (DangerousConfirmD…
Broccolito Oct 11, 2026
d0e90ef
fix(WS-SETTINGS-M): FR-R1-7 the provider loader draws no logo: Provid…
Broccolito Oct 11, 2026
7e49f15
fix(WS-HISTORY): V1-R6-1 History no longer holds a person's own renam…
Broccolito Oct 11, 2026
ace18c9
fix(WS-PRIMITIVES): FR-S-7 a startup dependency row with no installer…
Broccolito Oct 11, 2026
941e7a4
docs(WS-PRIMITIVES): the dialog box focus comment in main.css names e…
Broccolito Oct 11, 2026
b559ffe
fix(WS-SUMMARY): V2-R6-1 the live transcript keeps its newest line th…
Broccolito Oct 11, 2026
3c9390d
fix(WS-SETTINGS-M): FR-R2-1 Public opens with its disclosure line in …
Broccolito Oct 11, 2026
b143bfc
fix(WS-SETTINGS-M): FR-R2-3 an accordion provider row draws its keybo…
Broccolito Oct 11, 2026
e42471d
fix(WS-SETTINGS-M): FR-R2-4 one verb for using a provider on first ru…
Broccolito Oct 11, 2026
f932f5d
fix(WS-SETTINGS-M): FR-R2-5 Institutional Connect follows Detect's ru…
Broccolito Oct 11, 2026
38373e8
fix(WS-SETTINGS-M): FR-R2-6 the Llama Server panel says the size once…
Broccolito Oct 11, 2026
5182b27
fix(WS-SETTINGS-M): FR-R2-7 a provider's second line opens its toolti…
Broccolito Oct 11, 2026
62d1cc9
test(WS-VIEWS-A): measures.test.ts pins the live chat's scroll anchor…
Broccolito Oct 11, 2026
f9500a3
fix(WS-VIEWS-A): V1-R4-1 the automatic collapse at the 1120 rung hold…
Broccolito Oct 11, 2026
bc3a22d
docs(WS-PRIMITIVES): ScrollArea's anchorBottomOnResize doc names who …
Broccolito Oct 11, 2026
07fcfaa
docs(WS-SETTINGS-M): the provider catalog doc records first-run round…
Broccolito Oct 11, 2026
3093381
chore(WS-TRANSCRIPT): delete the unused biorouter-icon-entrance keyfr…
Broccolito Oct 11, 2026
f104cd3
docs(COORDINATOR-DELEGATE): privacy-tiers.md 12.3 says where focus la…
Broccolito Oct 11, 2026
a6d2800
docs(COORDINATOR-DELEGATE): CLAUDE.md coding-agent bullets stop namin…
Broccolito Oct 11, 2026
9540989
fix(WS-SIDEBAR): inbox WS-VIEWS-A-5 the provider's window resize mark…
Broccolito Oct 11, 2026
a3906c4
docs(WS-TOKENS): isWindowResizing() states the registration-order lim…
Broccolito Oct 11, 2026
309692f
test(WS-SETTINGS-M): the first-run wordmark's at-rest check names no …
Broccolito Oct 11, 2026
1660de6
fix(coordinator): gate check-crew-manual follows the first run button…
Broccolito Oct 11, 2026
5f1bcd1
fix(coordinator): FR-R1-7 the boot splash draws the Biorouter wordmar…
Broccolito Oct 11, 2026
1cb194a
docs(coordinator): FR-R1-7 the boot splash sections say what ships: d…
Broccolito Oct 11, 2026
f2d99f4
fix(WS-TOKENS): gate themeSwitch.browser.test.ts teardown is bounded:…
Broccolito Oct 11, 2026
60e8473
fix(WS-MOTION): gate final-2: the tab and find browser tests survive …
Broccolito Oct 11, 2026
e679615
fix(coordinator): gate the hook budget is 120 s, not 30 s, for the Ch…
Broccolito Oct 11, 2026
0855ec8
fix(coordinator): gate the hook budget is 300 s: 120 s was overrun on…
Broccolito Oct 11, 2026
46be4d2
fix(WS-SETTINGS-M (owns settings/models/**; spec table row WS-SETTING…
Broccolito Oct 11, 2026
2628b2e
fix(WS-TOOLS (sub-owner of WS-TRANSCRIPT)): V2-R4-3 a knowledge base …
Broccolito Oct 11, 2026
8ae760b
fix(WS-HISTORY): V1-R6-2 History's stat glyphs form columns: each cel…
Broccolito Oct 11, 2026
6aa4670
fix(WS-MOTION): V2-R4-4 a chat tab revealed from an end clears that e…
Broccolito Oct 11, 2026
e0bce33
fix(WS-COMPOSER): V2-R5-2 the Commands and @ lists open 8px above the…
Broccolito Oct 11, 2026
0ee2223
fix(WS-ICONS): V2-R5-3 a chat saved before Biorouter Copilot became t…
Broccolito Oct 11, 2026
b588bc6
fix(WS-SUMMARY): V2-R4-2 the summary popover hangs 4px below the band…
Broccolito Oct 11, 2026
7cf0abb
fix(WS-SIDEBAR): V1-R4-2 the chat list fades its top edge once scroll…
Broccolito Oct 11, 2026
ca9bb09
fix(WS-SIDEBAR): V1-R5-3 a folder's Show more or Show less pressed fr…
Broccolito Oct 11, 2026
1b04c07
fix(WS-PICKERS): V2-R6-2 the model chip names a Bedrock model, not it…
Broccolito Oct 11, 2026
4297958
fix(WS-VIEWS-A (.biorouter-page-header-tabs, Layout/PageHeader.tsx); …
Broccolito Oct 11, 2026
815202c
fix(WS-MOTION (chatGroups/ChatTabStrip); strings from WS-SIDEBAR): V2…
Broccolito Oct 11, 2026
8edf802
fix(WS-KNOWLEDGE (WS-KNOWLEDGE-INGEST: IngestPanel/**)): V3-R6-1 the …
Broccolito Oct 11, 2026
553e3dc
fix(WS-MOTION (with WS-SUMMARY for the BaseChat transcript cell)): V2…
Broccolito Oct 11, 2026
42c6b6c
fix(WS-KNOWLEDGE (privacy-UI presentation, ruling 15 human-review lis…
Broccolito Oct 11, 2026
cca9f2f
fix(WS-KNOWLEDGE): V3-R4-4 the paste textarea keeps its resting fill …
Broccolito Oct 11, 2026
7d73ad4
fix(WS-PRIMITIVES): V4-R6-1 menus keep 8px from the window's edge: a …
Broccolito Oct 11, 2026
3565e31
fix(WS-SETTINGS-A): V4-R6-2 Report a bug and Request a feature say th…
Broccolito Oct 11, 2026
3773c34
fix(WS-EXTENSIONS): V3-R4-5 the load-failure notice's Copy error butt…
Broccolito Oct 11, 2026
aafaefe
fix(WS-PRIMITIVES): FR-R3-5 the shared Select trigger moves on the mo…
Broccolito Oct 11, 2026
868a19d
fix(WS-KNOWLEDGE): V3-R4-3 an empty name in Create knowledge base is …
Broccolito Oct 11, 2026
6a4566b
perf(WS-PERF (with WS-HISTORY)): V1-R3-2 GET /sessions reads one keys…
Broccolito Oct 11, 2026
3b0f7db
fix(WS-SETTINGS-B): V4-R4-6 the Configuration editor names the Copilo…
Broccolito Oct 11, 2026
201a2bf
fix(WS-SETTINGS-M): V4-R4-5 Add provider's two checkbox squares start…
Broccolito Oct 11, 2026
561a3fb
fix(WS-SETTINGS-M): FR-R3-2 the catalog's dialogs share one anatomy: …
Broccolito Oct 12, 2026
1b0c82a
fix(WS-SETTINGS-M): FR-R3-3 Save in the Configure dialog is coral onl…
Broccolito Oct 12, 2026
5f9f0ae
fix(WS-SETTINGS-M): FR-R3-1 the Llama Server primary appears at rest:…
Broccolito Oct 12, 2026
0c5b83d
fix(WS-SETTINGS-M): FR-R3-4 provider rows say a line, in one face: th…
Broccolito Oct 12, 2026
be1bccd
fix(WS-PERF (with WS-HISTORY)): V1-R3-2 History opens on the newest p…
Broccolito Oct 12, 2026
f32dd1d
fix(WS-SETTINGS-M): FR-R3-6 the first-run panels keep their facts and…
Broccolito Oct 12, 2026
e30861b
fix(WS-SETTINGS-M): FR-R3-3 Add provider's Create provider follows th…
Broccolito Oct 12, 2026
7be2b72
docs(WS-SETTINGS-M): provider-catalog.md records the closing polish: …
Broccolito Oct 12, 2026
8906340
docs(WS-SIDEBAR): inbox WS-MOTION-3-FYI, sidebar-chat-list.md row men…
Broccolito Oct 12, 2026
0b901d6
refactor(WS-SETTINGS-A): the Settings band keeps one tab-alignment ru…
Broccolito Oct 12, 2026
1cd5548
fix(WS-PREVIEW): the preview strip reveals its active tab clear of th…
Broccolito Oct 12, 2026
48a6b6a
fix(WS-SETTINGS-M): FR-R4-2 provider rows open and close independentl…
Broccolito Oct 12, 2026
a68ec94
fix(WS-SETTINGS-M): FR-R4-3 an agent row's toggle is named by its tit…
Broccolito Oct 12, 2026
753cf04
fix(WS-TOKENS (ThemeContext/motion theme-switch) + coordinator (index…
Broccolito Oct 12, 2026
1a80217
fix(coordinator (frozen privacy UI; timing-only change)): FR-R4-4 the…
Broccolito Oct 12, 2026
3273883
fix(WS-SETTINGS-M): FR-R4-5 first-run copy says each thing one way: (…
Broccolito Oct 12, 2026
2fc6855
docs(WS-SETTINGS-M): FR-R4-5 provider-catalog.md: the first-run path'…
Broccolito Oct 12, 2026
355dde8
fix(WS-SIDEBAR): V1-R7-2 a folder's Show less acts when its current c…
Broccolito Oct 12, 2026
849d49e
fix(WS-PRIMITIVES): V3-R7-1 the typed confirmation is a ModalShell: D…
Broccolito Oct 12, 2026
64f31b6
fix(WS-MOTION): V2-R7-1 a tab switch leaves the chat tab strip where …
Broccolito Oct 12, 2026
97098ae
fix(WS-PRIMITIVES): V3-R7-1 WorkflowWarningModal is a ModalShell too …
Broccolito Oct 12, 2026
26c5520
feat(WS-PRIMITIVES): V3-R7-1 ModalShell takes testId (data-testid on …
Broccolito Oct 12, 2026
5d31a07
docs(WS-PRIMITIVES): V3-R7-1 in shared-controls.md: the typed confirm…
Broccolito Oct 12, 2026
5cba97e
fix(WS-MOTION): V1-R7-1 a menu the person opened stands above a stand…
Broccolito Oct 12, 2026
c918154
fix(WS-TRANSCRIPT): V2-R7-2 a long live chat opens at its end and sta…
Broccolito Oct 12, 2026
17a4f4d
fix(WS-SUMMARY): V2-R5-6 (round 7) a chat's first open after a reload…
Broccolito Oct 12, 2026
52da685
fix(WS-SETTINGS-M): V4-R7-1 the Models tab draws the Model row's valu…
Broccolito Oct 12, 2026
0ff5043
fix(WS-COMPOSER): V2-R7-3 the folder chip names the chat's own folder…
Broccolito Oct 12, 2026
e7b2463
fix(WS-COMPOSER): V2-R7-3 the Tools chip shows its number only once a…
Broccolito Oct 12, 2026
44ac860
fix(WS-SETTINGS-M): FR-R5-2 one coral button per catalog tab with row…
Broccolito Oct 12, 2026
e08571a
docs(WS-SETTINGS-A): the vocabulary's 'A row never arrives late' reco…
Broccolito Oct 12, 2026
e9f81b0
test(WS-COMPOSER): the composer's folder read and the loading chat's …
Broccolito Oct 12, 2026
bcb8406
fix(WS-SKILLS): WS-COMPOSER-5 useSkillCatalog drops a read that was o…
Broccolito Oct 12, 2026
5592c97
fix(WS-PRIMITIVES): WS-MOTION-2 the shared Select's open menu names i…
Broccolito Oct 12, 2026
57c8bf5
fix(coordinator (frozen privacy UI, timing only; index.html splash co…
Broccolito Oct 12, 2026
2bc4055
test(WS-PICKERS): the footer's and the Tools chip's halves of V2-R7-3…
Broccolito Oct 12, 2026
67223b1
fix(WS-KNOWLEDGE): WS-COMPOSER-4 the knowledge context says when a sc…
Broccolito Oct 12, 2026
5836f58
fix(WS-SUMMARY): WS-TRANSCRIPT-1 a reader who scrolls up while a long…
Broccolito Oct 12, 2026
21026e4
fix(COORDINATOR-DELEGATE): WS-PRIMITIVES-8 item 1, the undo window of…
Broccolito Oct 12, 2026
61317a1
fix(COORDINATOR-DELEGATE): WS-PRIMITIVES-8 item 3, the 'Warm up local…
Broccolito Oct 12, 2026
b19792d
fix(WS-COMPOSER): V2-R8-1 the model chip never hangs the previous pro…
Broccolito Oct 12, 2026
5a99e21
fix(WS-PRIMITIVES): V3-R8-2 a Select pick keeps focus on the Select: …
Broccolito Oct 12, 2026
2d8cb27
refactor(WS-COMPOSER): WS-KNOWLEDGE-1 the knowledge picker reads sele…
Broccolito Oct 12, 2026
ba1b895
fix(WS-MOTION): WS-PRIMITIVES-2 an open shared Select stands above a …
Broccolito Oct 12, 2026
ed14a84
fix(WS-SUMMARY): V2-R8-2 a new chat's first message is on screen from…
Broccolito Oct 12, 2026
1078308
fix(WS-MOTION): V2-R7-4 a toast steps out of the way of find in chat …
Broccolito Oct 12, 2026
b117886
docs(WS-SUMMARY): WS-MOTION-2-FYI the summary rail doc records that t…
Broccolito Oct 12, 2026
eafea1b
fix(WS-TRANSCRIPT): a transcript is only reported settled after its l…
Broccolito Oct 12, 2026
9e3fd01
feat(WS-COMPOSER): WS-SUMMARY-4 an optional followUp prop words the c…
Broccolito Oct 12, 2026
fc7e8dc
fix(WS-SUMMARY): WS-COMPOSER-4 the composer says 'Ask a follow-up' fr…
Broccolito Oct 12, 2026
445a1cc
test(WS-SUMMARY): WS-TRANSCRIPT-2-FYI the 50 ms case's comment in tra…
Broccolito Oct 12, 2026
a7d0693
fix(WS-PRIMITIVES): gate final-1 Timeline QA M6 case no longer times …
Broccolito Oct 12, 2026
ce30211
fix(WS-TOOLS): V2-R7-5 a tool well no longer repeats the same output:…
Broccolito Oct 12, 2026
be3ab33
fix(WS-COMPOSER): V2-R8-5 the model chip's accessible name has one pe…
Broccolito Oct 12, 2026
79aeed0
fix(WS-VIEWS-A): V3-R7-2 a filter with no match on Built apps is the …
Broccolito Oct 12, 2026
991f5f8
fix(WS-KNOWLEDGE): V3-R7-3 Escape from the knowledge-base manager, or…
Broccolito Oct 12, 2026
e540d46
fix(WS-SIDEBAR): V1-R8-1 the Delete chat dialog gives focus back when…
Broccolito Oct 12, 2026
29bb1bb
fix(WS-KNOWLEDGE): V3-R8-1 the paste box's "Will fetch" chips rest on…
Broccolito Oct 12, 2026
1d4219d
test(WS-KNOWLEDGE): V3-R7-3 the Chromium focus-return cases poll for …
Broccolito Oct 12, 2026
069d9da
fix(WS-COMPOSER): V2-R8-3 a new chat's first send no longer withdraws…
Broccolito Oct 12, 2026
8212434
fix(WS-USAGE): V4-R7-3 the Usage row is drawn in the first frame of e…
Broccolito Oct 12, 2026
4580f83
fix(WS-SETTINGS-A): V4-R7-2 a later visit to Chat or App starts every…
Broccolito Oct 12, 2026
520e7d0
fix(WS-SETTINGS-M (settings/providers/modal/**) and WS-SETTINGS-B (se…
Broccolito Oct 12, 2026
6d58d5e
fix(WS-PRIMITIVES): V4-R8-1 a Select menu of one unnamed group starts…
Broccolito Oct 12, 2026
757d4e0
fix(coordinator (components/privacy/**, class-only under ruling 15) a…
Broccolito Oct 12, 2026
9d2d29e
fix(WS-PREVIEW): V2-R8-4 the preview's Close tooltip no longer fades …
Broccolito Oct 12, 2026
d133063
fix(coordinator (a ruling), then WS-PRIMITIVES): V4-R7-4 one look for…
Broccolito Oct 12, 2026
7e441ee
test(WS-SUMMARY): pin the composer's lasting identity through a new c…
Broccolito Oct 12, 2026
8dbf27c
fix(WS-COMPOSER): V4-R7-6 the Copilot panel names the computer at 600…
Broccolito Oct 12, 2026
f822b2f
fix(WS-SETTINGS-A): V4-R7-6 the emphasised words in Settings, Privacy…
Broccolito Oct 12, 2026
14729db
fix(WS-SETTINGS-A): V4-R7-3 the first visit to the App tab in a proce…
Broccolito Oct 12, 2026
cc0c32e
fix(WS-PRIMITIVES): V4-R7-6 sweep (inbox COORDINATOR-DELEGATE-4) the …
Broccolito Oct 12, 2026
3c1d5a5
feat(COORDINATOR-DELEGATE): <Input machine /> is the one spelling of …
Broccolito Oct 12, 2026
9af3261
test(WS-SETTINGS-A, landed by COORDINATOR-DELEGATE): the three Lead/w…
Broccolito Oct 12, 2026
758e897
fix(WS-PRIMITIVES): V1-R8-1 at the shared layer (inbox WS-SIDEBAR-5-F…
Broccolito Oct 12, 2026
1c801ce
fix(WS-SETTINGS-M, landed by COORDINATOR-DELEGATE): V4-R7-4 note (COO…
Broccolito Oct 12, 2026
13e58f7
docs(COORDINATOR-DELEGATE): provider-catalog.md 'Save settings waits …
Broccolito Oct 12, 2026
f30ac47
fix(WS-VIEWS-A): V3-R9-3 New schedule's Create schedule is the neutra…
Broccolito Oct 12, 2026
8c98061
fix(WS-KNOWLEDGE): V3-R9-4 Create knowledge base is secondary until t…
Broccolito Oct 12, 2026
893f481
fix(WS-EXTENSIONS): V3-R9-5 Add custom extension's submit button is s…
Broccolito Oct 12, 2026
d9e9323
test(WS-EXTENSIONS): the Browse mouse-pick focus case follows the pri…
Broccolito Oct 12, 2026
314d5c2
fix(WS-SUMMARY): V2-R9-2 a chat's late restore failure is added below…
Broccolito Oct 12, 2026
00b3f0b
fix(WS-SKILLS): V4-R7-5 Add skill's repository field is a machine str…
Broccolito Oct 12, 2026
5dc15d4
docs(WS-SIDEBAR): WS-PRIMITIVES-5-FYI the shared dialog rule changed …
Broccolito Oct 12, 2026
0492f04
fix(WS-EXTENSIONS): V4-R7-5 the extension dialogs' machine fields no …
Broccolito Oct 12, 2026
e60a00c
fix(WS-SETTINGS-M): V4-R7-5 the remaining machine fields of my row ar…
Broccolito Oct 12, 2026
e4a24ce
fix(WS-SETTINGS-M): V4-R7-6 the provider's name in the Configure dial…
Broccolito Oct 12, 2026
b25a8d0
fix(WS-VIEWS-A): V4-R7-5 the schedule and workflow machine fields tak…
Broccolito Oct 12, 2026
dded680
feat(WS-PRIMITIVES): ScrollArea gains followGrowth?: () => boolean (W…
Broccolito Oct 12, 2026
cbafb28
fix(WS-KNOWLEDGE): V3-R9-1 the Knowledge base selector gives focus ba…
Broccolito Oct 12, 2026
63e3783
fix(WS-SUMMARY): V2-R9-2 BaseChat passes followGrowth={transcriptFoll…
Broccolito Oct 12, 2026
387b83a
fix(WS-SUMMARY): gate final 1, crewResendHold's BaseChat pin reads th…
Broccolito Oct 12, 2026
3c5723f
fix(WS-PRIMITIVES): gate final-1, WS-SUMMARY-4-FYI weighed and left: …
Broccolito Oct 12, 2026
ca9e7a5
fix(WS-SIDEBAR): gate final 2, sidebarFill.browser V1-R3-3 failed fro…
Broccolito Oct 12, 2026
6552743
fix(WS-SETTINGS-B (settings/config/**)): CI Rust / guards, Biorouter …
Broccolito Oct 12, 2026
0007fa8
fix(WS-EXTENSIONS (settings/extensions/**, the sub-owner of WS-VIEWS-…
Broccolito Oct 12, 2026
1dec97b
fix(WS-BRAND (app_folder; test added in 4830531f7)): CI Rust / test (…
Broccolito Oct 12, 2026
4cd7455
fix(WS-MOTION (chatGroups/**)): CI Unit tests (vitest), tabFill.brows…
Broccolito Oct 12, 2026
7da5d9e
fix(WS-PRIMITIVES (components/ui/**)): CI Frontend unit tests, filter…
Broccolito Oct 12, 2026
70a28d8
fix(WS-PRIMITIVES (components/ui/**)): CI Frontend unit tests, ground…
Broccolito Oct 12, 2026
ae2542f
fix(WS-TOKENS (per assignment; the index.html splash markup itself ca…
Broccolito Oct 12, 2026
b30fc0e
fix(WS-MOTION (alerts/**; test written in ba1b89530 for WS-PRIMITIVES…
Broccolito Oct 12, 2026
872abc7
feat(WS-SETTINGS-M): HostManagedModelPanel shows biorouter configure …
Broccolito Oct 12, 2026
1f489d2
docs(COORDINATOR): spec bookkeeping, ruling 29 (RULINGS-NEEDED 2a to 2f)
Broccolito Oct 12, 2026
a59edeb
fix(WS-SETTINGS-M): Gemma 4 12B's Llama Server catalog description st…
Broccolito Oct 12, 2026
617dae4
fix(WS-SETTINGS-A): Privacy tiers switch starts from the config cache…
Broccolito Oct 12, 2026
96820ea
fix(WS-PRIMITIVES): ruling 23, the non-private model disclosure (priv…
Broccolito Oct 12, 2026
cbca321
perf(WS-PERF): ruling 28 (V2-R9-3): the agent-loading POST /agent/res…
Broccolito Oct 12, 2026
2f527a4
refactor(WS-PRIMITIVES): COORDINATOR-DELEGATE-3 item 5 (ruling 23, sp…
Broccolito Oct 12, 2026
61002ab
test(WS-PRIMITIVES): ruling 24 (RULINGS-NEEDED section 3, option a), …
Broccolito Oct 12, 2026
bf904e2
Merge main into the redesign: bug reporting (#391) and built apps (#392)
Broccolito Oct 12, 2026
a394971
test(WS-COMPOSER): merge plan 4.2 and 5 (#391), the /bug command chip…
Broccolito Oct 12, 2026
ec0c0f3
refactor(WS-VIEWS-A): merge plan section 5 (#392), the built-apps UI …
Broccolito Oct 12, 2026
845c691
test(WS-VIEWS-A): gate merge1-1, the scheduleFocus browser test build…
Broccolito Oct 12, 2026
af809fe
fix(integrator (merge-introduced; crates/biorouter-mcp/src/agent_draf…
Broccolito Oct 12, 2026
70f933c
fix(WS-VIEWS-A): merge verify (#392), the export dialog finishes unde…
Broccolito Oct 12, 2026
61bbfba
fix(WS-VIEWS-A): merge verify (#392), a deleted build chat's note sta…
Broccolito Oct 12, 2026
affc087
fix(WS-TOOLS): merge-verify #391 screen 20, a numbered list in a tool…
Broccolito Oct 12, 2026
ca7c646
Merge main into the redesign: local inference (#393)
Broccolito Oct 12, 2026
90b9e1a
fix(WS-SETTINGS-M): #393's local model UI follows the redesign (R-17,…
Broccolito Oct 12, 2026
cb527b7
fix(WS-SETTINGS-M): the Ollama panel names the configured server, not…
Broccolito Oct 12, 2026
3c0cb42
fix(WS-LANDING): providers page says which release picks #393's local…
Broccolito Oct 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
196 changes: 196 additions & 0 deletions .claude/commands/frontend-design.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
# Biorouter frontend design language

Read this before any UI change in `ui/desktop/src`. It is a short copy of the root `design.md`
(Parts 1 to 3, and Part 9 for the 2026-10 redesign), regenerated at the end of that redesign's
wave 2. When they disagree, `design.md` wins, and its Part 9 wins over every earlier part.

## Design philosophy

> A quiet instrument: a warm, low-chroma, flat research console. Colour is evidence, not decoration.

- **Simplicity first.** Codex's structure and restraint, Biorouter's coral kept. When unsure, copy
Crew (`components/crew/`) and never edit Crew to match; promote a Crew recipe under a `br-` name.
- **One reading column, quiet chrome.** Every surface has one 44px band with a 14px title and 32px
icon actions. Content sits in the 760px measure. Home is the one exception.
- **Say it once, then hide the explanation.** A visible line is a label, a value or a state word;
explanations go in an `InfoTip`. Errors, refusals, privacy disclosures, the consequence of a
destructive action and empty-state one-liners always stay visible.
- **Rows, not cards.** Anything enumerable is a row list, one primary line and at most one
secondary line. A card is for something that asks the person to act. Never a box inside a box.
- **Fills come before lines.** In-page cards, panels, buttons, chips, tabs and fields rest on a
subtle fill with no resting outline. Lines stay on structural edges and floating surfaces. The
one box the rule does not reach is the composer card (see below).
- **One job, one control, one look.** A variant lives in the primitive, never in a `className`
override. Show names, not IDs: machine IDs and paths go behind a "Copy …" item or a tooltip.
- **Simplicity never costs accessibility.** Everything hidden stays reachable by keyboard and by
screen reader, and the contrast gates pass.

## Colour tokens (`ui/desktop/src/styles/main.css`)

Write the token, never a hex. The neutrals are shared by all three theme families (Parchment, Alma
Mater, Roche Limit); a family varies only its ink, accent and status hues. Values are Parchment's.

| Utility | Light | Dark | Use |
|---|---|---|---|
| `bg-background-canvas` | `#ffffff` | `#131312` | Main panel |
| `bg-background-default` | `#ffffff` | `#1b1b19` | Cards, popovers, dialogs |
| `bg-background-muted` | `#f4f4f2` | `#232320` | Page ground, one real step off the canvas |
| `bg-background-well` | `#f5f5f3` | `#232320` | Inline code, and code wells in the preview paper |
| `bg-background-fill` | `#f4f4f2` | `#232320` | The resting fill of cards, buttons, chips, tabs and fields (not the composer card) |
| `bg-background-fill-strong` | `#eaeae6` | `#2c2c29` | Hover and press on a fill; the resting fill on the sidebar or a muted ground |
| `tint-interactive` | ink at 5% | ink at 5% | Hover (`--overlay-hover`); press is 10% plus scale 0.98 |
| `border-border-subtle` | `#e4e4e0` | `#302f2c` | Structural edges and floating surfaces |
| `border-border-control` | `#86847f` | `#817f7a` | Resting edge of checkboxes, radios and the switch knob |
| `text-text-default` | `#2a2520` | `#f4f0e6` | Primary text |
| `text-text-muted` | `#635c54` | `#b0a892` | Secondary text, metadata |
| `text-text-subtle` | `#6e6760` | `#9c937b` | Quietest text, the InfoTip glyph at rest |
| `bg-background-accent` | `#b85a32` | `#e8895f` | The one primary button; on switches and checkboxes |
| `--accent-bar` | `#cf6d47` | `#e8895f` | The 2px active-row rail and tab underline only |

Status is a wash with its own ink: `bg-wash-danger` with `text-text-danger`, and the same for
success, warning and info. A colour a utility names needs a `--color-*` mirror in `@theme inline`.
Families are generated from `ui/desktop/themes/*.theme.mjs` by `npm run themes`.

## Fills, lines and shadows

Fills come before lines (design.md 9.11). Write `bg-background-fill border border-transparent`, and
`hover:bg-background-fill-strong` where it responds to the pointer: keep the 1px border transparent,
never `border-0`, so nothing moves and forced colours still draw the edge. On the sidebar or a muted
ground, rest on `bg-background-fill-strong`: put `.br-ground-recessed` on that ground and the shared
controls on it follow. A control inside a filled card rests on `bg-background-default`; `Card`, `Note`
and dialog panels do it for their children, and a filled box of your own adds `.br-fill-surface`.
Inside a dark popover the fill is a well under the lifted ground, its hover
step and the off switch track go deeper; the tokens re-point themselves, so write nothing special. Lines stay only on structural
edges (the band edge, pane dividers, resize handles, rules inside a filled table) and on floating
surfaces, which keep a hairline and a shadow.
Row lists drop the hairline between rows when spacing and the hover fill separate them
(`.br-rows-flat` on the list's shell). Hairlines are
straight: no `border-bottom` on a rounded row. Crew keeps its own recipes.

**The composer card is not a fill** (owner message 17, R-32; a chat and Home, and the in-place message
edit card). It is the page ground, `bg-background-default border border-border-subtle/60`, with no
`.br-fill-surface`, so a control in it rests as on any page ground. Its coral focus edge and working
sweep turn that same 1px border. Its classes are `components/composer/composerCard.ts`. A white card with a
resting hairline there is correct; do not "fix" it under the fill rule.

| Token | Use |
|---|---|
| **No shadow** | Cards, rows, page sections, bands, panels, tab strips |
| `--shadow-composer` | The chat composer |
| `--shadow-popover` | Menus, popovers, toasts, the floating message actions |
| `--shadow-modal` | Dialogs and sheets |
| `--shadow-raised` | The segmented control's thumb |

## Type

Arial first, byte-equal to the website's `--font` (`landing/site.css`); one mono stack, for machine
strings only. Five sizes and two visible weights, 400 and 600 (Arial draws 500 as 400). Use a role
utility: `styles/typeScale.test.ts` fails on `text-xs` and its siblings, `text-[Npx]`, `tracking-*`,
a bare `uppercase` and `font-bold`.

| Utility | Size / line, weight | Use |
|---|---|---|
| `text-supporting` | 12/16, 400 | Metadata, times, counts, helper and tooltip text, table heads |
| `text-chip` | 12/16, 500 | Badges and chips, sentence case |
| `text-caps` | 12/16, 500, caps +0.04em | Page section labels only |
| `text-secondary` | 13/18, 400 | Sidebar and menu rows, tab labels, table cells, composer controls |
| `text-code` | 13/20 mono | Code and terminal |
| `text-body` / `text-label` | 14/20, 400 / 500 | UI prose and values / control text, row and band titles |
| `text-prose` | 14/21, 400 | Chat markdown, documents, Crew messages |
| `text-subheading` | 17/24, 600 | Dialog and empty-state titles, chat h1 and h2 |
| `text-title` | 24/32, 400 | Home greeting, document h1, stat values |

The document default is `text-body`: unsized text renders at 14px, never 16. Still name a role on
anything you write. Counts, dates, costs and percentages use the sans face with `tabular-nums`. Chat code blocks and
tables use the shared `.br-md-code` and `.br-md-table` recipes.

## Spacing, rows and radii

| What | Value |
|---|---|
| Spacing | 2, 4, 6, 8, 12, 16, 20, 24, 32; 8 is the default gap and 16 the default inset |
| Bands (`h-chrome`) | 44px; the three shell bands move together |
| Dock strips (`h-dock`), tabs (`h-tab`) | 36px, 32px |
| Rows | `h-row-nav` 28 (app sidebar, 13px), `h-row-rail` 32 (menus, Crew), `min-h-row` 40 |
| Controls | `h-control-compact` 24, `h-control-sm` 28, `h-control-md` 32, `h-control-lg` 36 |
| Icons | 14 in a chip and the InfoTip, 16 in rows and controls, 20 in banners and empty states |
| Radii | `rounded-inner` 4, `rounded-element` 8, `rounded-container` 12, `rounded-full` |

A nested radius is the outer radius minus the padding. `rounded-surface` (16px) is the preview
sheet only; `rounded-2xl` is banned outside `artifacts/`.

## Controls: one job, one control

Use the primitive in `components/ui/`, never a raw `<button>` or `<input>` with its own classes.

- `Switch` when the change applies now, on the right, named by the row's visible label (no
"Toggle …", no "Enable …"). Off, its knob is the page ground ringed in `--border-control`, in
light and dark; the accent track alone says on. `Checkbox` to pick items or for a form option, on
the left.
- `SegmentedControl` for two to four short options; it never uses coral. `Select` for four or more,
or options that need a line each. `CustomRadio` only in dialogs and forms. Underline `Tabs`.
- Menus: 32px rows at 13px, a trailing check on the selected item, sentence-case group labels.
- `Button`: `default` is the one coral button per view, `secondary` the usual second action,
`ghost` for icon actions, `destructive` a danger wash. A disabled `default` or `destructive` draws
the disabled `secondary` (colour means "this will do something"); a primary that must stay
clickable to say what is missing is `secondary` until it can act. Fields are 32px, filled, with
no resting edge; the focus treatment draws it.
- `InfoTip` for help: a 14px glyph visible at rest, plain text, at most two sentences, never inside a
`<label>`. Help text never goes in `title=`.
- `SettingRow` and `SettingSection`: a label, an InfoTip, one control at the trailing edge; a
`text-caps` section label with no paragraph under it.
- `RowActions`: shown on hover, `:focus-within`, an open menu and always under `(hover: none)`;
right-click opens the same menu. Only opacity changes.
- `FilterInput` (28px, "Filter", ⌘F), `PageHeader` for a view's band, `ModalShell` for dialogs:
pinned to the top so it grows downward, with a hairline under the header, unless a call site says
`anchor="center"` and why.

Focus follows D-15: a control shifts its fill (`.biorouter-focus-surface`), a row takes
`--background-focus` and an inset 2px `--border-focus` edge, a tab firms its underline. Never write
`outline-none`, `focus:ring-*` or `focus-visible:ring-*` at a call site.

## Coral accent

Coral marks state, nothing else: the active-row rail, the focused field and composer edge, the one
primary button, a ready Send button, switches and checkboxes when on, the active tab underline, the
in-progress to-do glyph, the working sweep, links, selection, the heatmap ramp, "New" or unread
marks and the private-chat lock badge. Hover is always neutral. Never a coloured divider, section
header or card background.

## Motion

Layout snaps and content glides. Animate only `transform`, `opacity` and `clip-path`, with tokens:
`--dur-fast-min` 95ms, `--dur-fast` 125, `--dur-fast-max` 175, `--dur-med-min` 250, `--dur-med` 300,
`--dur-slow` 525 (ambient loops only); `--ease-out` for everything, `--ease-spring` for physical
gestures only. In TypeScript use `styles/motion.ts`; shared classes are `.br-enter`, `.br-crossfade`
and `.br-highlight`. Exits are one tier faster than entrances. Nothing animates during a resize, on a
first placement or after navigation, and a row never moves under the pointer. Reduced motion is
honoured in CSS, JS and the main process.

## Copy

Sentence case. The noun is "chat"; the names are "Biorouter" and "BAAM". American spelling and the
typographic ellipsis. No em or en dashes as punctuation, no marketing words. A one-line menu label
takes no trailing period. InfoTip text is at most two full sentences, about 160 characters.

## Checklist

- [ ] Tokens only: no hex, no `rgba()`, no Tailwind grey such as `gray-*` or `slate-*`.
- [ ] Type roles only, and `npx vitest run src/styles/typeScale.test.ts` passes.
- [ ] No shadow on a card, row or section, and no box inside a box.
- [ ] Coral only where the list above allows it; every hover neutral.
- [ ] Each job uses its one primitive from `components/ui/`, with no visual override.
- [ ] Explanations sit in an `InfoTip`; errors, refusals and privacy text stay visible.
- [ ] Hidden actions are reachable by keyboard and screen reader.
- [ ] Checked in light and dark, in all three families; `npm run lint:check` passes.
- [ ] A rule something depends on is authored CSS, not a new Tailwind class.

## Where things live

| What | Where |
|---|---|
| Tokens and shared classes | `ui/desktop/src/styles/main.css` |
| Primitives | `ui/desktop/src/components/ui/` |
| Icons | `components/icons/app-icons.tsx`; one glyph per concept in `entity-icons.ts` |
| The reference | `ui/desktop/src/components/crew/` |
| The full record | `design.md` Part 9 and `docs/design/codex-simplicity-redesign/` |
21 changes: 21 additions & 0 deletions .github/workflows/deploy-landing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,12 @@ jobs:
- name: Check the docs privacy checker still catches what it must
run: node --test landing/scripts/check-docs-privacy.test.mjs

# The site's look rules: the type scale, two weights, tracking tokens, no
# caps labels, the shared easing and the control heights. It reads the
# stylesheets as text, and its mutants show each rule failing first.
- name: Check the site stylesheets keep the look rules
run: node --test landing/scripts/look-rules.test.mjs

- name: Check the BAAM private set agrees in all three committed copies
run: node landing/scripts/check-consistency.mjs --check

Expand Down Expand Up @@ -85,6 +91,21 @@ jobs:
- name: Check the BAAM shelf's privacy badges and facet in a browser
run: node --test landing/scripts/baam-privacy-facet.test.mjs

# Fills before lines (owner message 13, R-27). look-rules.test.mjs above
# reads the stylesheets as text; this reads what the pages PAINT at 1440
# and 390 wide, so a rule that is written right and still loses the
# cascade, or a box the animations build from script, fails here.
- name: Check the site paints fills, not outlines, in a browser
run: node --test landing/scripts/fill-rules.browser.test.mjs

# Layout that holds still (vision round 2, V5-R2-1 and V5-R2-2). The wall
# animation's composers keep the model's name at 390, 360 and 320 wide, and
# opening a BAAM row moves none of its GitHub link, download button or
# chevron out from under the pointer. Both are measurements, which jsdom
# cannot take; this reads the real pages in the same chromium.
- name: Check the site's layout holds still in a browser
run: node --test landing/scripts/layout-stability.browser.test.mjs

deploy:
needs: check
runs-on: ubuntu-latest
Expand Down
32 changes: 28 additions & 4 deletions .github/workflows/frontend.yml
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,14 @@ jobs:
if: ${{ !cancelled() }}
run: node landing/scripts/assemble-docs.mjs --check

# The site's look rules (landing/README.md, "Look rules"): the type scale,
# two weights, tracking tokens, no caps labels, the shared easing and the
# control heights. Pre-merge, like the docs privacy suite above; the Pages
# deploy runs it again. Its mutants show each rule failing first.
- name: Site stylesheets keep the look rules
if: ${{ !cancelled() }}
run: node --test landing/scripts/look-rules.test.mjs

# ── The BAAM shelf in a real browser ──────────────────────────────────────
# The generator job above proves the CATALOG is right. This proves the PAGE
# is: that the privacy facet matches a card's declared tier rather than a
Expand Down Expand Up @@ -281,6 +289,20 @@ jobs:
working-directory: .
run: node --test landing/scripts/baam-privacy-facet.test.mjs

# The site's pages painted in the same chromium (R-27): subtle fills with
# no visible edge at 1440 and 390 wide. look-rules.test.mjs (the registry
# job) reads the same rule from the stylesheets; this reads the paint.
- name: Site paints fills, not outlines
working-directory: .
run: node --test landing/scripts/fill-rules.browser.test.mjs

# Layout that holds still (V5-R2-1, V5-R2-2): the wall animation's
# composers keep the model's name in a narrow chat, and opening a BAAM
# row moves none of its controls from under the pointer.
- name: Site layout holds still
working-directory: .
run: node --test landing/scripts/layout-stability.browser.test.mjs

# ── Unit tests ────────────────────────────────────────────────────────────
unit:
name: Unit tests (vitest)
Expand Down Expand Up @@ -315,9 +337,12 @@ jobs:
# at the 5000ms default (test took 8005ms) and PASSED at 30000ms
# (same test, 8358ms). Only the flag changed.
#
# So the fix is a timeout, applied here on the CLI so this workflow can
# merge without touching source. Raising a timeout costs nothing on a
# green run — it bounds failures only.
# So the fix is a timeout. Raising a timeout costs nothing on a green
# run — it bounds failures only. `--testTimeout` is kept here at the same
# 30000 the config now sets (src/test/timeouts.ts). There is NO
# `--hookTimeout` flag: it beats the config, and the config's 300000 is
# deliberately larger than a test's, because the ~80 browser files close
# a Chromium in `afterAll` and that overruns 30000 on a loaded machine.
#
# `--no-file-parallelism` is explicitly the WRONG lever: per-file fixed
# overhead dominates (one measured file: 44.15s wall, of which ~34s was
Expand All @@ -332,7 +357,6 @@ jobs:
run: |
npx vitest run \
--testTimeout=30000 \
--hookTimeout=30000 \
--reporter=default \
--reporter=junit \
--outputFile.junit=./vitest-junit.xml
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@ jobs:
- uses: actions/checkout@v4
- name: Cross recipes have not drifted / glibc floor pin intact
run: ./scripts/check-no-cross-drift.sh
- name: Tracked tree names neither the retired upstream nor its publisher
run: ./scripts/check-no-goose-block.sh
- name: Version consistency (CLI = daemon = GUI)
run: ./scripts/check-version-consistency.sh
# The capability is "Biorouter Copilot" wherever a person reads it -- never
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,11 @@ ui/desktop/src/bin
# Generated pinned native computer-use resources
ui/desktop/src/computer-use/

# pdf.js runtime assets, copied from pdfjs-dist by ui/desktop/vite-plugins/pdfjsAssets.mts
# into <cwd>/public/pdfjs. ui/desktop/.gitignore covers the normal run from ui/desktop;
# this covers a vite run whose cwd is the repo root. Build output, never committed.
/public/pdfjs/

# ── Vendored Computer Use upstream ──────────────────────────────────────────
# `vendor/computer-use/source/` is a COMPLETE copy of the upstream
# project at the pinned commit, and the whole point of vendoring it is that a
Expand Down
Loading
Loading