279 lines
20 KiB
Markdown
279 lines
20 KiB
Markdown
# 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.7–9.0). v3 integrates their 7 endorsement conditions. This is the agreed, executable path.
|
||
|
||
## 0. Standing and method
|
||
|
||
Evidence base: **7 video-judged rounds (R13–R19), 209 recorded fixes (88 HIGH), 10 shipped
|
||
waves (P–X, 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** — 2–3 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 (300–400ms): 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.6–0.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
|
||
(150–200ms, 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 (120–160ms: 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.3–0.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.3–0.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 2–4fps — 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).
|