moving
Some checks failed
Installer Smoke / installer-smoke (push) Has been cancelled

This commit is contained in:
Oleg Maslov
2026-09-02 10:10:29 +02:00
commit 0c3e2ead3b
3841 changed files with 970576 additions and 0 deletions

View File

@@ -0,0 +1,80 @@
# Wave W — R17-V5 convergent fixes: the motion identity wave
R17-V5: design 7.7 · kw 7.7 · competitor 7.6 · a11y 7.5 · brand 7.9 (min 7.5, avg
7.68 — regime high). Same vocabulary + honesty contract as waves P-V. Surgical;
both themes; testids/aria survive; ALL new animation motion-safe gated. NO
cross-lane files. Per-lane gate: related vitest green + eslint on touched files.
Design judge's thesis: "content lands as monolithic blocks after skeletons — a
staggered entrance (~40ms/card, 8px rise+fade, 300-500ms total) is the single
change that moves this from 'CSS transitions' to 'has a motion identity'."
The memory surface already ships a `card-enter` keyframe with 40ms stagger
(Wave V Lane A) — that is the house pattern; REUSE its keyframe/timing, don't
invent a second grammar.
## Lane A — entrance choreography: grids (design HIGH)
Files: `apps/AllWorkspacesApp.tsx`, `apps/agents/SuggestedAgentCards.tsx`, tests.
1. When the workspace grid resolves from skeleton→content, cards enter staggered:
~40ms apart, 8px rise + fade, ease-out, total ≤500ms. Reuse the memory
surface's `card-enter` animation (grep index.css). Runs ONCE per surface visit
(not on every filter keystroke — filtering re-sorts must NOT re-animate).
2. Same treatment for the six suggested-agent bee cards and the specialists strip
(strip after the cards, one beat later).
3. Reduced motion: instant, no rise/fade. Existing hover tiers untouched.
## Lane B — briefing recall cards + actions menu craft (design HIGH+MEDIUM)
Files: `os/overlays/LoginBriefing.tsx`, `os/WorkspaceActionsMenu.tsx`, tests.
1. The briefing modal opens fully composed when prefetched (the per-card motion
delays only fire on slow loads). Re-key the recall cards + workspace rows so
the stagger runs on EVERY modal open (base delay after modal mount, ~80ms/item,
8px rise+fade) — the product's hero moment deserves an entrance beat that
survives 2fps.
2. Actions menu (workspace card '…'): icons per action, roomier padding (match
the marketplace row density), destructive action visually separated, and a
150ms scale(0.96→1)/fade entrance transform-originating from the trigger
corner. KEEP the Escape-returns-focus behavior exactly (judges praised it).
## Lane C — marketplace matching skeletons + results density (design HIGH)
Files: `apps/MarketplaceApp.tsx`, `apps/extend/AgentSearchBox.tsx`, tests.
1. Replace the stale-dim block (data-testid nl-stale-dim) with 3 purpose-built
result-row skeletons under the "Matching skills to this job…" status —
row-shaped (icon square + two text lines + chip stubs), animate-pulse,
motion-reduce:animate-none. Kill the dimmed wrong-content moment.
2. Results view density: when the semantic match returns ≤3 hits, append a quiet
"More from the catalog" rail (nearestCatalog already exists — reuse) so a
2-hit answer doesn't strand the user in dark space.
## Lane D — memory counter 0-frame + Memories tab landing (design+kw)
Files: `apps/memory/MemoryTrustManage.tsx`, `apps/memory/MemoryCenterTab.tsx`, tests.
1. The once-per-session count-up starts at 0 — a 2fps frame catches "0 Memories"
above rendered rows ("reads as a data bug"). Start the animated display at
ceil(15% of target) so no frame ever shows 0/near-0 with data present; keep
the ~600ms ease and the once-per-session flag.
2. Memories tab lands on the full recent list (density), with the curated view as
a labeled filter chip instead of the default — kill "one card in a dark
field". Keep the result-count header from Wave V. If the curated default is
load-bearing somewhere else, say so in notes instead of forcing it.
## Lane E — chat streaming proof + onboarding beats (design HIGH + low)
Files: `apps/ChatApp.tsx` (streaming visuals only — verify what exists first),
`overlays/onboarding/WelcomeStep.tsx` + wizard step shell (glow + slide), tests.
1. Verify the send→streaming→settle visual arc: streaming indicator (typing
cursor / bee shimmer) while tokens arrive, settle beat when done. If it
already exists, polish only what reads poorly on video (indicator too subtle
→ one visible tier); if absent, add a minimal honey typing-cursor pulse.
2. Onboarding: amplify the mascot glow breathing to a ~3s cycle with a visibly
larger radius/opacity swing (still tasteful; motion-safe); directional slide
(~200ms) welcome→step-1 for spatial continuity.
## Kit v5 (orchestrator, not a lane)
s04 gains a send→streaming→settle beat: type the question, SEND it, hold ~8s
while the (echo-provider) response streams, then settle. Dev-store side effect
accepted (research-hub already carries test messages).
## Deferred
Shared-element continuity briefing→home (needs route-transition infra);
hover-amplitude unification pass; s06 panel-swap choreography (8.2 already).
## Per-lane gate
Related vitest green + eslint; contrast math N/A this wave (no text tokens);
every new animation motion-safe gated. Orchestrator: tsc + suite + R18-V6.