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,278 @@
# Path to 9 — premium feel, power usability, habit formation
### The definitive analysis (2026-07-07, v3 FINAL) · goal: 5 persona judges ≥ 9/10 · founder framing: "premium UX + power feeling → addiction"
### PATH-2 panel: **5/5 ENDORSED** (predicted-if-executed 8.79.0). v3 integrates their 7 endorsement conditions. This is the agreed, executable path.
## 0. Standing and method
Evidence base: **7 video-judged rounds (R13R19), 209 recorded fixes (88 HIGH), 10 shipped
waves (PX, merged to main `8ee7ac82`)**, plus the 2026-05-28 addictiveness audit
(Hook-Model rubric, 7 iterations, 5.0 → 7.7). Scores: video regime avg 7.08 → 7.70
(Fable ruler), min pinned at 7.5 for three rounds. Two measured plateaus prove the
polish-wave engine is exhausted: per-round EV ≈ +0.02, and every remaining HIGH ask is
either structural or systemic — not surgical.
**The panel's own definition of the gap** (R19, 5/5 unanimous, verbatim): *"The product
has the VISUAL craft of a 9 … but the MOTION identity of a ~7. Gap to 9 is not more
features or more surfaces — it's a genuine motion system."* Secondary unanimous asks:
a shown, signature streaming moment; killing the boot interstitial; a systemic AA floor.
What a 9 means per lens (extracted from all 7 rounds' verdicts):
| Judge | Their 9 requires | Their current ceiling-setter |
|---|---|---|
| design-director | spatial continuity, spring physics, choreographed transitions, multi-tier hover | "surfaces cut/fade instead of transforming" |
| knowledge-worker | instant feel (no boot tax, no staged arrival), interactions that telegraph | "make it feel instant"; boot + skeleton dwell on every route |
| competitor-critic | streaming rhythm at Claude/ChatGPT level + a motion language they lack | "the exact axis the video regime exposes: pure motion signature" |
| a11y-theme-parity | systemic AA tertiary tier + keyboard-first hover-reveals + hit areas | "systemic dim secondary text… weighs heaviest" (THE min-score gate) |
| brand-resonance | the hive alive on WORKING surfaces: honey responds to touch, streaming heartbeat, ambient life | "the brand goes quiet on the working surfaces" |
## 1. Why the founder's "addiction" framing and the judges' "motion system" converge
The Hook Model (trigger → action → variable reward → investment) says habit forms when
each loop is *felt*. The judged deficits map directly onto the loop's felt moments:
- **Action feel** = the power feeling. Instant boot, sub-100ms responses to the cursor,
keyboard-first paths — Fogg's "ability" term. Today's boot tax + single-tier hovers
make every loop pay a toll; a power user's loop must feel FREE.
- **Variable reward** = the visible aliveness. Streaming heartbeat, surprise-recall
("I REMEMBER" cards), honey blooming under the cursor — the dopamine surface. Judges
keep scoring exactly these as the missing "signature moments."
- **Investment made visible** = memory counters, growth, compounding identity — the
product already OWNS this (Memory Trust 8.2, "category-defining"); it needs the loop
to *celebrate* accrual (count-ups, growth deltas in the briefing) rather than list it.
- **Triggers** are mostly outside the judged surface (digests, notifications) — real for
retention, invisible to this panel. They ride the roadmap but not the score.
So: **the same three workstreams that raise the judged score to 9 are the ones that
manufacture the addiction loop.** There is no tension between the founder ask and the
panel's path.
## 2. The path — four pillars + a phase-0 vocabulary, sequenced
### PHASE 0 · THE MOTION VOCABULARY (prerequisite; ships FIRST with Pillar 4) — [PATH-1: design blocking #2]
Before ANY new motion ships (including Pillar 3's aliveness moments):
1. **One spring FAMILY, not one config** — 23 named variants (`micro` / `standard` /
`expressive`) sharing a single physical character, tuned once, exported as motion
tokens. Kills the mixed CSS-ease/duration zoo. [design non-blocking, adopted]
2. **A motion-spec reference page** — an internal demo surface where every tier (spring
family, hover tiers, settle gesture, route transitions, reduced-motion mappings) is
demonstrable and reviewable. The arc's single source of motion truth. [design gap]
3. **Reduced-motion mapping defined for EVERY tier** (not just ambient): route
transitions degrade to crossfade; hover keeps color/shadow, drops translate;
settle gesture → instant state + color pulse; streaming caret → static cursor;
count-ups → instant set. [design gap + a11y]
4. **Interruptibility + input-primacy as ACCEPTANCE CRITERIA** [design blocking #1]:
every transition is interruptible and redirectable mid-flight; navigation and input
NEVER wait on an exit animation or transition completion. The motion system must
never fight the instant-feel pillar — this is a per-PR checklist item, not an
aspiration.
5. **Exit choreography in the same vocabulary**: AnimatePresence exit definitions for
cards, menus, modals, and route surfaces. [design non-blocking, adopted]
6. **RETROFIT of already-shipped motion** [PATH-2 design]: inventory every prior
motion pass (Wave T/U hover tiers, Wave V lift+bloom + theme crossfade, Wave W
entrance stagger, onboarding/streaming breathing) on the motion-spec page, then
migrate each onto the Phase-0 tokens and spring family. Acceptance: ZERO
non-token durations/easings on judged surfaces — one motion dialect, not two.
7. **Signature-moment frequency/intensity taxonomy** [brand blocking #2 + design/kw
non-blocking — 3 judges independently]:
- FULL settle (300400ms): rare accrual milestones ONLY — memory saved (first per
session), install success, agent spawned.
- MICRO variant (≤150ms, same gesture DNA): high-frequency actions — send-arm,
selection.
- Per-session cooldowns on full-amplitude moments; routine actions never flourish.
### Pillar 1 · THE MOTION SYSTEM (structural; the unanimous #1; est. +0.60.9 panel-wide)
A dedicated engineering arc, NOT lanes. Builds ON the Phase-0 vocabulary.
1. **Spatial continuity — a base tier everywhere + two heroes** [PATH-2 design]:
(a) DEFAULT tier: a low-risk fade-through crossfade with persistent chrome
(150200ms, Phase-0 `standard` spring) on ALL top-level sidebar route changes,
feature-flagged, subject to the Phase-0.4 interruptibility criteria — the
Settings↔Home pair is the template, not a one-off. Two morphs + five hard cuts
would read as three set pieces, not a system.
(b) HERO morphs (the only shared-element cases): card→workspace-open (the card
grows into the surface) and Trust↔Memories tab morph. Implementation:
framer-motion `layoutId` + `AnimatePresence mode="popLayout"` scoped to these
two (NOT a global router rewrite — that's the regression trap).
**Focus + assistive-tech spec ships INSIDE the transition component** [a11y
blocking #1]: on every shared-element route change, focus moves to the destination
surface's primary heading/main landmark; exiting AnimatePresence trees are set
`inert`/`aria-hidden` for their exit duration (focus and the SR virtual cursor can
never land in them); route changes are announced (document.title update + a polite
live region).
2. **Multi-tier hover — "honey responds to touch"**: rest → hover (120160ms: lift
2-4px + shadow + honey border-warm + glow bloom) → press (scale .98) →
focus-visible (same tier, keyboard). ONE implementation (a `hive-interactive`
variant), adopted by cards, rows, chips, tiles. Can ship early (additive).
3. **The signature gesture — commissioned as a DESIGNED MOTION ASSET** [brand
blocking #1]: a recognizably waggle-derived micro-choreography (brief directional
waggle-run → settle, from the bee's actual figure-eight dance), prototyped and
judged STANDALONE on exactly one moment (memory saved) BEFORE any propagation.
Only after the panel scores the prototype does it roll out per the Phase-0
frequency taxonomy. Highest-upside, highest-kitsch-risk line in the path —
treated accordingly.
4. **Ambient hive life**: the breathing glow (already shipped on onboarding, judged
"the one unambiguously signature motion") recurs as idle ambient on Home hex-glow
and empty states. Amplitude discipline: ambient means BELOW attention threshold.
5. **Light-theme variants for every glow/bloom signature** [brand]: deeper honey,
tighter radius on ivory — the signatures must not vanish (or smear) in light.
Kit v6 captures each signature moment in BOTH themes.
6. **P1/P2 seam**: cache-first warm paint lands with one subtle designed micro-settle
rather than a raw instant pop. [design non-blocking, adopted]
### Pillar 2 · THE INSTANT POWER FEEL (perceived performance; est. +0.30.5, biggest for kw/competitor)
1. **Kill the returning-user boot tax**: warm sessions land on content <1s (brand
flash ≤500ms). Cache-first paint: the Home payload cache is **disk-persisted and
renders BEFORE the sidecar answers** — the day-30 morning desktop launch is the
moment that matters, not just SPA revisits. [kw gap, adopted]
2. **The input-during-warmup CONTRACT** [PATH-2 kw]: cache-first paint must be
INTERACTIVE, not just visible — (a) the composer accepts typing at paint; queued
sends dispatch when the sidecar is ready (never error, never silently drop);
(b) first click on any cached card either acts or shows a truthful per-element
pending state — never a dead click. The §3 hard gate measures time-to-first-
INTERACTION, not just time-to-content, and kit v6 records a cold-start variant
(sidecar down → app start → cached paint → first send).
3. **The silent-refresh reconciliation CONTRACT** [kw blocking]: when fresh data lands
over a cache-first paint — (a) NO above-the-fold layout shift; (b) material deltas
animate in via the Pillar 3.3 delta pulse instead of silently replacing content;
(c) the briefing modal (reserved for ≥7-day absences — N=7, decided) renders from
the SAME data source/component as the home hero cards, killing the number-drift
bug class permanently. Wrong-then-corrected is worse than slow; the contract is a
test, not a guideline.
4. **Collapse the double catch-up**: the "I REMEMBER" cards land INSIDE the home hero
as the first staggered entrance; the modal fires only on ≥7-day absences (same
component, same data — see 2.2).
5. **The send-path budget** [kw gap, adopted]: the single most repeated daily action
(send → first token) gets an explicit instant contract — optimistic user-bubble
echo, composer never locks on send, first-token latency never increased by any
visual layer.
6. **Route-cache everything judged**: chat thread, marketplace, agents join memory/
workspaces — tab returns instant, no re-skeleton. Marketplace's first-match wait
keeps its purpose-built skeletons (banked residual, R17). [kw]
7. **Keyboard-power layer**: focus-visible parity on every hover-reveal (kebab +
memory rows remain), ~40px hit areas, a ≤2-keystroke path from anywhere to
new-chat / last-workspace, and a discoverable shortcut cheat sheet (`?` / Cmd-/).
[kw non-blocking, adopted] Double yield: this is also the a11y judge's #2 ask.
### Pillar 3 · THE ALIVENESS LOOP (variable reward made visible; est. +0.30.5, brand/competitor)
1. **Streaming as a PIPELINE deliverable, then a visual one** [competitor blocking #1]:
first resolve the dev echo-provider's whole-block behavior — emit true token/chunk
streaming in the judged environment, or add a render-side cadence buffer that
smooths chunks into a steady visible rhythm with ZERO added latency to first token.
Acceptance: recorded s04 shows continuous sub-line accretion — no multi-second
block pops, no layout jank as markdown forms. THEN the branded layer: the
**streaming text caret** — a honey glow trailing the accreting text head (this is
what "bee-trail cursor" means; it is NEVER a pointer-following trail [brand
blocking #3]) + a subtle thinking pulse on the bee avatar during tool-trace.
Reduced-motion: static caret, no pulse. The caret never occludes text or targets.
[a11y] **Streaming INTERACTION contract** [PATH-2 competitor]: auto-follow scroll
breaks INSTANTLY on user scroll (input-primacy applied to the stream) with a
"jump to latest" affordance; a visible stop control halts output immediately;
the recorded s04 acceptance prompt forces hard-case progressive rendering (a
code block + a list/table) — markdown formation tested where Claude's streaming
craft is strongest.
2. **Surprise-recall as a first-class moment**: when Auto Recall lands mid-chat, the
memory chip blooms honey for ~600ms ("reward of the hunt", rubric dim 6 — the
product's unique dopamine no competitor can copy).
3. **Investment celebration with an HONESTY GATE** [brand non-blocking, adopted]:
count-ups and "+" delta pulses bind to the exact source-of-truth number — the
settled value is never floored, clamped, or estimated (regression-tested); animation
intermediates must never contradict a visible sub-stat (the Wave X lesson,
generalized). Briefing states what ACCRUED since last visit ("12 new memories ·
2 decisions"). Accessible treatment: one polite live announcement of the settled
number, never intermediate frames. [a11y]
4. **First-60s wow** (rubric dim 3): wire the first chat message to demonstrably use
the just-typed profile ("As a consultant, you'll want…") — the "it already knows
me" hook.
### Pillar 4 · THE AA FLOOR (systemic; unblocks the min-score judge; est. min 7.5→8+)
1. **Token-level tier**: define a `--text-tertiary` tier that is AA on EVERY surface
token (bg/bg-2/surface/surface-2) in BOTH themes; migrate the ~dozen recurring
offender families (top utility bar, timestamps, card meta, onboarding subtitle/
footnote, unselected chips).
2. **Close the GENERATION vector, not just today's instances** [a11y blocking #2]:
(a) a lint/CI guard banning new non-token text colors (raw hex, palette classes,
arbitrary values) on app surfaces; (b) contrast verification that models
COMPOSITION — opacity-modified text and text over wallpaper/gradient/wash measured
against effective background (a runtime axe-style pass on the judged surfaces).
Token-pair math alone buys one clean round; this buys a floor.
3. **The AFFORDANCE floor** [PATH-2 a11y]: non-text contrast (WCAG 1.4.11, ≥3:1
against adjacent effective background, both themes) for focus indicators,
input/chip borders, and state glyphs — a `--focus-ring`/border tier alongside
`--text-tertiary`, asserted in the same CI runtime pass. Explicit acceptance:
Pillar 1.2's focus-visible tier passes 3:1 in LIGHT (honey-on-ivory), MEASURED.
4. Hit-area and focus-visible items fold into Pillar 2.7 (double-yield, one
implementation).
## 3. Sequencing, risk, verification
**Order: Phase-0 + Pillar 4 (parallel, both token-level, zero-regression) → Pillar 2 →
Pillar 3 → Pillar 1** — with Pillar 1.2 (hover grammar) allowed early as additive.
Amended from v1: the motion vocabulary now PRECEDES all aliveness work. [design blocking #2]
**Competitive teardown at arc start** [competitor non-blocking, adopted]: record the
equivalent journeys on current Claude and ChatGPT (spot-check Hermes/Odyssey); extract
concrete numeric targets — warm time-to-content, visible token rhythm, transition/hover
timings. "At Claude/ChatGPT level" becomes measured, not remembered.
Risks: route transitions carry regression risk (scoped routes, feature-flag, the
Phase-0.4 interruptibility criteria, the P1.1 focus/AT spec); streaming choreography
must never delay tokens (P2.4 budget); ambient motion must never read as busy (brand:
"respectful, no gratuitous movement" is currently a WIN — don't lose it).
**Verification — kit v6** [design blocking #3 + competitor blocking #2 + a11y blocking #3]:
- Judges pinned `model:'fable'` (ruler stability; the R19 lesson).
- **Per-journey sampling matched to the deliverable, disclosed in the judge brief**:
transition/signature/streaming journeys delivered as ≥12fps micro-filmstrips or
short native-framerate clips (spring character, token cadence, and settle
choreography are invisible at 24fps — the arc's history proves measurement
failures eat rounds); 2fps contact sheets remain for static-composition journeys.
- **A keyboard-only journey**, recorded and judged like the mouse journeys: tab-through
home → open workspace → chat send → message actions via focus → memory row actions →
settings, visible focus indicators expected in every frame.
- **Warm time-to-first-INTERACTION as a HARD gate**: Playwright-measured, fails the
round if >1000ms to interactive content / >500ms brand flash. [kw, PATH-2]
- **Reduced-motion ENFORCEMENT** [PATH-2 a11y]: an automated Playwright pass with
`prefers-reduced-motion: reduce` emulated, asserting the Phase-0.3 mappings per
tier (route transitions crossfade-only; no transform animation on hover; settle →
instant state; static streaming caret; count-ups set instantly), run per round like
the contrast and warm-boot gates — plus one recorded reduced-motion spot-journey.
- New journeys: send→stream→settle (shipped v5), card→workspace-open transition,
tab-morph, warm-boot timing, cold-start-to-first-send, keyboard-only,
reduced-motion spot, waggle-settle prototype (standalone, both themes).
- **Side-by-side clips vs current Claude and ChatGPT** [PATH-2 competitor]: streaming
+ warm-launch journeys at minimum, from the arc-start teardown footage, refreshed
at the 9-attempt round and delivered in the judge brief — parity/beat claims judged
from paired evidence, not memory.
Success gates per round: min-of-5 ≥ 8.0 after Phase-0+P4+P2; ≥ 8.5 after P3; 9 attempt
after P1. If two consecutive rounds plateau below gate → stop, re-analyze (the
discipline that caught both prior plateaus).
## 4. What we deliberately do NOT do
- No more polish waves against the old ask lists (measured EV ≈ 0).
- No gamification-shaped addiction (streaks, badges, FOMO mechanics) — the panel would
score it as noise and it contradicts the trust-first brand voice that earns the 8.2s.
Addiction here = the loop feeling so good it self-reinforces, not manipulation.
- No global router rewrite; no motion on the working thread that competes with content;
no pointer-following effects of any kind.
- No unreviewed propagation of the signature gesture: prototype → panel → rollout.
## 5. Panel disposition — AGREED (goal met)
- **PATH-2** (v2): **5/5 ENDORSE** — design 8.8 (high) · kw 9.0 (medium) · competitor
8.8 (high) · a11y 8.7 (high) · brand 9.0 (medium). Seven endorsement conditions →
integrated in THIS v3: default route-transition tier + retrofit deliverable
(design); input-during-warmup contract + first-interaction gate (kw); streaming
interaction contract + side-by-side evidence (competitor); affordance floor +
reduced-motion enforcement (a11y). **The panel agrees on the path — v3 is the
executable contract for the arc.**
### PATH-1 disposition (for the record)
v1 review: design 8.7 endorse · kw 8.7 endorse · competitor 8.5 endorse · brand 9.0
endorse · a11y 8.3 WITHHELD. All 12 blocking amendments integrated above (Phase-0;
interruptibility; resequencing; silent-refresh contract; streaming pipeline rescope;
high-framerate verification; focus/AT spec; generation-vector CI; keyboard journey;
commissioned gesture; frequency taxonomy; caret disambiguation) plus 9 high-consensus
non-blocking adoptions (spring family, motion-spec page, reduced-motion per tier, exit
choreography, P1/P2 seam, send-path budget, disk-persisted cache, honesty gate,
competitive teardown, light-theme signatures, shortcut cheat sheet).