Ruling
Operator, 2026-09-06 (Workspace review of the v0.9.5 design): "make sure this animation of horizontal loading that we are now using across the workspace is not used for loading entire pages — that's not the right animation. This animation should only be used for chart loading, not for anything else."
This amends design-system principle 12 (docs/memory/design-system.md: "One loading motion app-wide: scanline beam + wipe-in reveal; no bespoke spinners or skeletons"). The scanline beam is the chart-loading motion. Pages, panels, lists and message threads load with skeleton placeholders keyed on "no data yet" (the pattern PortalAgentPage.vue and the #2159 sidebar already use). Principles 13 and 14 are unchanged: first load shows a placeholder, background refresh is invisible, loading means no data yet.
Where it is wrong today (origin/dev)
src/frontend/src/views/Portal.vue — ScanlineReveal wraps the Workspace stage
src/frontend/src/components/portal/PortalConversation.vue — wraps the thread history
src/frontend/src/components/portal/PortalBriefing.vue — wraps the briefing hints
All three came in with #2163's first-load criterion of 2026-09-02, which this ruling reverses.
Acceptance Criteria
Related: #1921, #2163, ent#253, ent#475 (its Files-panel criterion), ent#449, ent#245 (the primitive), #1430 (epic).
Ruling
Operator, 2026-09-06 (Workspace review of the v0.9.5 design): "make sure this animation of horizontal loading that we are now using across the workspace is not used for loading entire pages — that's not the right animation. This animation should only be used for chart loading, not for anything else."
This amends design-system principle 12 (
docs/memory/design-system.md: "One loading motion app-wide: scanline beam + wipe-in reveal; no bespoke spinners or skeletons"). The scanline beam is the chart-loading motion. Pages, panels, lists and message threads load with skeleton placeholders keyed on "no data yet" (the patternPortalAgentPage.vueand the #2159 sidebar already use). Principles 13 and 14 are unchanged: first load shows a placeholder, background refresh is invisible, loading means no data yet.Where it is wrong today (
origin/dev)src/frontend/src/views/Portal.vue—ScanlineRevealwraps the Workspace stagesrc/frontend/src/components/portal/PortalConversation.vue— wraps the thread historysrc/frontend/src/components/portal/PortalBriefing.vue— wraps the briefing hintsAll three came in with #2163's first-load criterion of 2026-09-02, which this ruling reverses.
Acceptance Criteria
docs/memory/design-system.mdprinciple 12 rewritten: the scanline beam is the motion for chart surfaces only (StackedBarChart,TrendLineChart, grid tile charts, metrics panels); every other first load uses a skeleton placeholder keyed on no-data-yet; the "no skeletons" clause goes. The recipe table row "A new skeleton/spinner for a loading chart → the scanline primitive" stays; a row for pages/lists → skeleton is addedhasLoaded-style state, never on fetch-in-flight (bug: background polls re-flash loaded content and reset UI state (design-system p13/p14) #1927 ratchet stays green)ScanlineReveal(the Executions grid tile from ent#449, the agent Activity chart, metrics panels)/audit-design-system(trinity-pm) reads the amended doc on its next run without a skill change — the rule lives in the doc, not the skillRelated: #1921, #2163, ent#253, ent#475 (its Files-panel criterion), ent#449, ent#245 (the primitive), #1430 (epic).