@thebassclef/lite 1.1.1 → 1.2.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +23 -6
- package/dist/cli.js +23 -6
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lite/.claude/bassclef-configs.jsonc +56 -0
- package/dist/lite/.claude/bassclef-orientation.md +120 -0
- package/dist/lite/.claude/hooks/adr-discipline-check.sh +132 -0
- package/dist/lite/.claude/hooks/atomic-pr-check.sh +169 -0
- package/dist/lite/.claude/hooks/auto-save-idle.sh +51 -0
- package/dist/lite/.claude/hooks/bassclef-sync.sh +51 -13
- package/dist/lite/.claude/hooks/bet-doc-gate.sh +283 -0
- package/dist/lite/.claude/hooks/bug-diagnosis.sh +64 -0
- package/dist/lite/.claude/hooks/destructive-command-guard.sh +136 -0
- package/dist/lite/.claude/hooks/file-rename-discipline-check.sh +147 -0
- package/dist/lite/.claude/hooks/hook-classifier-canary.sh +158 -0
- package/dist/lite/.claude/hooks/kiss-default-check.sh +129 -0
- package/dist/lite/.claude/hooks/multi-tenancy-check.sh +83 -0
- package/dist/lite/.claude/hooks/oo-ad-entry-point-check.sh +216 -0
- package/dist/lite/.claude/hooks/operator-private-path-check.sh +203 -0
- package/dist/lite/.claude/hooks/pattern-annotation-validate.sh +142 -0
- package/dist/lite/.claude/hooks/plain-english-steering.sh +15 -1
- package/dist/lite/.claude/hooks/post-write-trace.sh +66 -0
- package/dist/lite/.claude/hooks/pr-body-scrub-check.sh +446 -0
- package/dist/lite/.claude/hooks/pre-commit-identifier-leak-scrub.sh +137 -0
- package/dist/lite/.claude/hooks/pre-gh-pr-body-scrub.sh +192 -0
- package/dist/lite/.claude/hooks/pre-gh-pr-title-scrub.sh +172 -0
- package/dist/lite/.claude/hooks/role-entry-gate.sh +115 -0
- package/dist/lite/.claude/hooks/save-state.sh +268 -0
- package/dist/lite/.claude/hooks/session-reflection.d/08-settings-drift.sh +8 -1
- package/dist/lite/.claude/hooks/session-reflection.d/10-abrupt-stop-recovery.sh +52 -0
- package/dist/lite/.claude/hooks/session-reflection.d/55-orientation-gate.sh +40 -4
- package/dist/lite/.claude/hooks/session-reflection.d/80-hook-heartbeat-check.sh +12 -5
- package/dist/lite/.claude/hooks/session-reflection.d/81-hook-manifest-staleness.sh +18 -2
- package/dist/lite/.claude/hooks/session-reflection.d/91-npm-version-drift.sh +54 -0
- package/dist/lite/.claude/hooks/session-reflection.d/tests/10-abrupt-stop-recovery.test.sh +95 -0
- package/dist/lite/.claude/hooks/session-reflection.sh +62 -15
- package/dist/lite/.claude/hooks/tool-failure-diagnosis.sh +50 -0
- package/dist/lite/.claude/luminaries/andrej-karpathy.md +165 -0
- package/dist/lite/.claude/luminaries/dave-gray.md +155 -0
- package/dist/lite/.claude/luminaries/gary-klein.md +166 -0
- package/dist/lite/.claude/luminaries/kaoru-ishikawa.md +162 -0
- package/dist/lite/.claude/luminaries/lean-product-canvas.md +33 -0
- package/dist/lite/.claude/luminaries/luke-wroblewski.md +224 -0
- package/dist/lite/.claude/luminaries/ryan-singer.md +113 -0
- package/dist/lite/.claude/luminaries/steve-krug.md +168 -0
- package/dist/lite/.claude/luminaries/tony-ulwick.md +134 -0
- package/dist/lite/.claude/rules/arc-level-orientation-before-leaf.md +60 -0
- package/dist/lite/.claude/rules/architect-review-discipline.md +71 -0
- package/dist/lite/.claude/rules/auto-fix-criteria.md +126 -0
- package/dist/lite/.claude/rules/bassclef-hook-drift-blocker.md +144 -0
- package/dist/lite/.claude/rules/bassclef-models-discovery.md +107 -0
- package/dist/lite/.claude/rules/bassclef-workflow-parity.md +104 -0
- package/dist/lite/.claude/rules/cost-governance.md +154 -0
- package/dist/lite/.claude/rules/file-rename-discipline.md +95 -0
- package/dist/lite/.claude/rules/mechanism-fidelity.md +88 -0
- package/dist/lite/.claude/rules/prototype-production-coupling.md +125 -0
- package/dist/lite/.claude/rules/quick-fix-criteria.md +90 -0
- package/dist/lite/.claude/rules/session-artifacts.md +30 -0
- package/dist/lite/.claude/rules/sibling-smoke-after-substrate-change.md +107 -0
- package/dist/lite/.claude/rules/substrate-as-system.md +67 -0
- package/dist/lite/.claude/rules/usability.md +22 -0
- package/dist/lite/.claude/settings.json +20 -0
- package/dist/lite/.claude/skills/agent-research-spawn/SKILL.md +100 -0
- package/dist/lite/.claude/skills/architect-review/SKILL.md +201 -0
- package/dist/lite/.claude/skills/auto-fix/SKILL.md +297 -0
- package/dist/lite/.claude/skills/autonomous/SKILL.md +300 -0
- package/dist/lite/.claude/skills/bind-subdomain/SKILL.md +232 -0
- package/dist/lite/.claude/skills/canvas/SKILL.md +41 -0
- package/dist/lite/.claude/skills/deploy-prod/SKILL.md +106 -0
- package/dist/lite/.claude/skills/docs-sync/SKILL.md +188 -0
- package/dist/lite/.claude/skills/eisenhower/SKILL.md +273 -0
- package/dist/lite/.claude/skills/empathy-map/SKILL.md +168 -0
- package/dist/lite/.claude/skills/frontend-design/SKILL.md +53 -0
- package/dist/lite/.claude/skills/interview-me/SKILL.md +171 -0
- package/dist/lite/.claude/skills/journal-export/SKILL.md +293 -0
- package/dist/lite/.claude/skills/jtbd-tasks/SKILL.md +203 -0
- package/dist/lite/.claude/skills/objectory-decompose/SKILL.md +256 -0
- package/dist/lite/.claude/skills/pick-luminaries/SKILL.md +100 -0
- package/dist/lite/.claude/skills/pre-mortem/SKILL.md +180 -0
- package/dist/lite/.claude/skills/prototype-gallery/SKILL.md +264 -0
- package/dist/lite/.claude/skills/provision-deploy-host/SKILL.md +257 -0
- package/dist/lite/.claude/skills/quick-fix/SKILL.md +273 -0
- package/dist/lite/.claude/skills/release/SKILL.md +311 -0
- package/dist/lite/.claude/skills/release-notes/SKILL.md +202 -0
- package/dist/lite/.claude/skills/rfc/SKILL.md +222 -0
- package/dist/lite/.claude/skills/riff-prototypes/SKILL.md +637 -0
- package/dist/lite/.claude/skills/secrets-bootstrap/SKILL.md +209 -0
- package/dist/lite/.claude/skills/skill/SKILL.md +304 -0
- package/dist/lite/.claude/skills/smoke-test/SKILL.md +100 -0
- package/dist/lite/.claude/skills/state/SKILL.md +204 -0
- package/dist/lite/.claude/skills/substrate-check/SKILL.md +218 -0
- package/dist/lite/.claude/skills/synthetic-user/SKILL.md +381 -0
- package/dist/lite/.claude/skills/task-scenarios/SKILL.md +105 -0
- package/dist/lite/.claude/skills/tier-dependency-audit/SKILL.md +139 -0
- package/dist/lite/.claude/skills/ux-migration/SKILL.md +424 -0
- package/dist/lite/.claude/skills/value-prop-canvas/SKILL.md +297 -0
- package/dist/lite/README.md +5 -1
- package/dist/lite/gitignore +6 -0
- package/dist/lite/lib/bassclef-dir-resolver.sh +85 -0
- package/dist/lite/lib/clone-failure-classifier.sh +59 -0
- package/dist/lite/lib/fixture-builder.sh +190 -0
- package/dist/lite/lib/fresh-install-check.sh +49 -0
- package/dist/lite/lib/hook-heartbeat.sh +0 -1
- package/dist/lite/lib/mechanism-fidelity.sh +569 -0
- package/dist/lite/lib/npm-version-check.sh +112 -0
- package/dist/lite/lib/preview-state.sh +229 -0
- package/dist/lite/lib/session-rescue.sh +0 -1
- package/dist/lite/scripts/generate-lite-manifest.sh +145 -4
- package/dist/lite/scripts/lite-manifest-drift-check.sh +5 -1
- package/dist/lite/standards/architect-review-discipline.md +222 -0
- package/dist/lite/standards/bassclef-platform.md +249 -0
- package/dist/lite/standards/bassclef-test-repos.md +97 -0
- package/dist/lite/standards/bassclef-wiring-manifest.json +25 -1
- package/dist/lite/standards/cold-adopter-harness.md +205 -0
- package/dist/lite/standards/data-management.md +135 -0
- package/dist/lite/standards/frontend-stack/nextjs-prisma.md +124 -0
- package/dist/lite/standards/lite-manifest-schema-changes.md +27 -0
- package/dist/lite/standards/lite-manifest.json +1456 -14
- package/dist/lite/standards/mechanism-fidelity.md +205 -0
- package/dist/lite/standards/operator-private-discipline.md +200 -0
- package/dist/lite/standards/operator-to-public-flow.md +195 -0
- package/dist/lite/standards/prototype-gallery.md +251 -0
- package/dist/lite/standards/pseudonym-key-schema.md +109 -0
- package/dist/lite/standards/sibling-validation-checklist.md +181 -0
- package/dist/lite/standards/slack-notifications.md +161 -0
- package/dist/lite/standards/synthetic-user-testing.md +173 -0
- package/dist/lite/standards/vendor-bindings.md +165 -0
- package/dist/lite/standards/vendor-plugins/frontend-design.md +66 -0
- package/dist/lite/standards/vpc-fit-validation.md +167 -0
- package/dist/lite/templates/gallery-yml.md +113 -0
- package/dist/lite/templates/product-canvas.md +169 -0
- package/dist/lite/templates/value-prop-canvas.md +180 -0
- package/package.json +3 -3
- /package/dist/lite/{whereami.md → docs/whereami.md} +0 -0
|
@@ -0,0 +1,637 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
name: riff-prototypes
|
|
4
|
+
description: "DEPRECATED \u2014 use /stage instead. Visual variants with luminary champion-challenger; work absorbed by /stage light size per ADR-020. Retained during 3-month deprecation grace before retirement."
|
|
5
|
+
problem: "DEPRECATED \u2014 use /stage instead. Visual variants with luminary champion-challenger."
|
|
6
|
+
value: "Deprecated skill absorbed into /stage. Points to the new entry point."
|
|
7
|
+
inputs: [Redirects to /stage]
|
|
8
|
+
outputs: [Deprecation notice, Redirect to /stage]
|
|
9
|
+
deprecated: true
|
|
10
|
+
deprecated_in_favor_of: /stage
|
|
11
|
+
deprecated_decision: architecture/decisions/ADR-020-prototype-skill-family-consolidation.md
|
|
12
|
+
user_invocable: true
|
|
13
|
+
disable_model_invocation: false
|
|
14
|
+
composes_baseline: anthropic-frontend-design
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
> **Baseline composition:** Bassclef's variant authoring composes on top of Anthropic's `frontend-design` skill defaults. Adopters firing plain Claude inherit those defaults; this skill (and `/stage`) extend with luminary champion-challenger commitment + bassclef's design-discipline.
|
|
18
|
+
|
|
19
|
+
# Prototype Variants — DEPRECATED
|
|
20
|
+
|
|
21
|
+
> **Deprecation notice (2026-05-12 per ADR-020):** This skill is deprecated in favor of `/stage` (light size). `/stage` already produces variants with luminary champion-challenger. New work should invoke `/stage light` instead. This skill remains invocable during the deprecation grace period (≥3 months) before retirement.
|
|
22
|
+
|
|
23
|
+
# Prototype Variants — Visual Options Before Construction
|
|
24
|
+
|
|
25
|
+
Produce 2-3 lightweight static prototypes, each driven by a different
|
|
26
|
+
primary luminary's perspective. The operator views them locally and
|
|
27
|
+
selects a direction before committing to a full build.
|
|
28
|
+
|
|
29
|
+
## When to use
|
|
30
|
+
|
|
31
|
+
- At the start of Elaboration (step 0), after Inception passes
|
|
32
|
+
- When the iteration goal's phase is Elaboration or Construction
|
|
33
|
+
- When UI/UX direction is uncertain and the operator wants to see options
|
|
34
|
+
- When `/autonomous start` detects phase=Elaboration and asks about prototypes
|
|
35
|
+
|
|
36
|
+
Can also be invoked standalone at any time.
|
|
37
|
+
|
|
38
|
+
## What a prototype IS
|
|
39
|
+
|
|
40
|
+
- Static HTML + CSS + Tailwind in `docs/prototypes/YYYY-MM-DD-variant-N/`
|
|
41
|
+
- Stubbed data (hardcoded JSON in a `<script>` tag or inline, no API calls)
|
|
42
|
+
- 1-3 pages showing the key interaction (list, detail, form — whatever the scope demands)
|
|
43
|
+
- Viewable via `npx serve docs/prototypes/variant-N/` or `open docs/prototypes/variant-N/index.html`
|
|
44
|
+
- Built in minutes, not hours
|
|
45
|
+
- Screenshotted by the agent using Playwright MCP. When Playwright MCP is not enabled, the skill BLOCKs with `INSTEAD: enable Playwright MCP before continuing`.
|
|
46
|
+
|
|
47
|
+
## What a prototype IS NOT
|
|
48
|
+
|
|
49
|
+
- Not a full Next.js app — no routing framework, no app directory
|
|
50
|
+
- Not connected to any database — no Prisma, no API routes
|
|
51
|
+
- Not deployed anywhere — local only
|
|
52
|
+
- Not tested — this is throwaway. Construction builds the real thing.
|
|
53
|
+
- Not production code — it's a visual sketch in HTML
|
|
54
|
+
|
|
55
|
+
## Procedure
|
|
56
|
+
|
|
57
|
+
### 1. Read the Inception artifacts
|
|
58
|
+
|
|
59
|
+
- Product canvas (scope, what survived, what was killed)
|
|
60
|
+
- Risk register (what UX/tech risks exist)
|
|
61
|
+
- Iteration bet (what value/lovability we're proving)
|
|
62
|
+
|
|
63
|
+
### 2. Choose sprint mode
|
|
64
|
+
|
|
65
|
+
Use AskUserQuestion to ask:
|
|
66
|
+
|
|
67
|
+
> **How do you want to run this prototype sprint?**
|
|
68
|
+
>
|
|
69
|
+
> 1. **Bake-off** — I pick the number of variants (2-3). The system
|
|
70
|
+
> selects luminaries matched to the scope, builds all variants,
|
|
71
|
+
> runs /visual-review on each, scores them, and recommends a winner
|
|
72
|
+
> based on the iteration goal's risk + value signals. I approve or
|
|
73
|
+
> override the recommendation.
|
|
74
|
+
>
|
|
75
|
+
> 2. **Curated** — I pick which luminaries to prototype against, view
|
|
76
|
+
> the results myself, and choose the winner. Visual review still
|
|
77
|
+
> runs for evidence, but I make the call.
|
|
78
|
+
|
|
79
|
+
#### Bake-off mode
|
|
80
|
+
|
|
81
|
+
The system selects luminaries based on the scope type:
|
|
82
|
+
|
|
83
|
+
| Scope type | Luminaries selected | Rationale |
|
|
84
|
+
|---|---|---|
|
|
85
|
+
| Data-heavy tools | Norman, Prater, Tufte | Affordance, entity-derived nav, data display |
|
|
86
|
+
| Storytelling/narrative | Lupton, Apple HIG, Cooper | Visual hierarchy, restraint, goal-directed |
|
|
87
|
+
| Dashboard/overview | Tufte, Morville, Material | Data-ink, findability, systematic tokens |
|
|
88
|
+
| Forms/input | Norman, Tidwell, Cooper | Affordance, proven patterns, goals |
|
|
89
|
+
| Emotional/consumer | Walter, Fogg, Lupton | Delight, behavior triggers, storytelling |
|
|
90
|
+
|
|
91
|
+
If the scope doesn't clearly match one type, ask the operator to pick
|
|
92
|
+
the scope type (not the luminaries — the system handles that).
|
|
93
|
+
|
|
94
|
+
After visual review scores all variants, the system recommends a winner:
|
|
95
|
+
- Highest usability score is the tiebreaker
|
|
96
|
+
- If scores are close (<2 points apart), recommend the variant that
|
|
97
|
+
best aligns with the iteration goal's risk signal
|
|
98
|
+
- Present the recommendation with evidence. Operator approves or overrides.
|
|
99
|
+
|
|
100
|
+
#### Input sources
|
|
101
|
+
|
|
102
|
+
The luminaries driving each variant come from one of these paths, in priority order:
|
|
103
|
+
|
|
104
|
+
1. **Operator-private intent grounding (if loaded)** — when an operator-private `/extract-intent` skill is available via `additionalDirectories` (the optional two-repo pattern per `standards/operator-private-discipline.md`), this skill reads its `matched_luminaries` output from the InputArtifact passed in.
|
|
105
|
+
|
|
106
|
+
2. **Bassclef-core `/pick-luminaries`** — single LLM call against the configured model provider (default Anthropic Haiku). The default bassclef-core path; works for any consumer with an `ANTHROPIC_API_KEY`.
|
|
107
|
+
|
|
108
|
+
3. **Operator picks** (curated mode) — manual selection from menu.
|
|
109
|
+
|
|
110
|
+
4. **`/luminary recommend`** — signal scoring (Garrett-plane + primary-domain coverage). Fallback when the picker refuses (no API key, network failure).
|
|
111
|
+
|
|
112
|
+
5. **Scope-keyword bake-off table** (legacy lines 67-74) — last-resort path for degraded environments.
|
|
113
|
+
|
|
114
|
+
Ceiling: **5 variants maximum** (4 pure + 1 hybrid, or 5 pure). Beyond
|
|
115
|
+
5, cognitive load and budget outweigh exploration benefit.
|
|
116
|
+
|
|
117
|
+
**Hybrid variant rule**: A hybrid (two luminaries stacked in one variant)
|
|
118
|
+
is allowed ONLY when the two luminaries operate on **different Garrett
|
|
119
|
+
planes** (strategy / scope / structure / skeleton / surface). Same-plane
|
|
120
|
+
hybrids produce contradictions (which structure wins? which surface
|
|
121
|
+
language?) and must be rejected.
|
|
122
|
+
|
|
123
|
+
**Hybrid / mashup MUST emit a Carry-Forward Ledger before building.**
|
|
124
|
+
When producing a hybrid from two existing variants (or iterating on
|
|
125
|
+
a selected variant post-sprint), the agent must FIRST read both source
|
|
126
|
+
variant files end-to-end and produce a ledger. No ledger = no build.
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
## Carry-Forward Ledger
|
|
130
|
+
|
|
131
|
+
### Source variants read
|
|
132
|
+
- docs/prototypes/YYYY-MM-DD-variant-a-[luminary]/index.html (L1-L400)
|
|
133
|
+
- docs/prototypes/YYYY-MM-DD-variant-b-[luminary]/index.html (L1-L520)
|
|
134
|
+
- docs/prototypes/YYYY-MM-DD-variant-a-[luminary]/README.md
|
|
135
|
+
|
|
136
|
+
### From Variant A (carrying forward — cite line ranges)
|
|
137
|
+
- [element]: [file:lines] — [why it carries]
|
|
138
|
+
- [element]: [file:lines] — [why it carries]
|
|
139
|
+
|
|
140
|
+
### From Variant B (carrying forward — cite line ranges)
|
|
141
|
+
- [element]: [file:lines] — [why it carries]
|
|
142
|
+
|
|
143
|
+
### Changing / replacing (explicit deltas)
|
|
144
|
+
- [element]: was [A's treatment at file:lines] OR [B's] → now [new treatment]
|
|
145
|
+
— [why the change is needed]
|
|
146
|
+
|
|
147
|
+
### Dropping (with reason)
|
|
148
|
+
- [element]: was [source:lines] → removed — [reason]
|
|
149
|
+
|
|
150
|
+
### Inventing (new, not from either source)
|
|
151
|
+
- [element]: — [reason this is new, not a pattern-match to generic UI]
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
This ledger is the anti-pattern-match gate. Invention is allowed, but
|
|
155
|
+
must be explicit and justified — not the default because the agent
|
|
156
|
+
didn't read the sources.
|
|
157
|
+
|
|
158
|
+
**Applies equally to**:
|
|
159
|
+
- Hybrid variant in a new sprint (combining two luminary POVs)
|
|
160
|
+
- Post-sprint iteration on a selected variant (carrying it forward
|
|
161
|
+
with refinements)
|
|
162
|
+
- Extending a variant to new surfaces (e.g., Review Queue variant
|
|
163
|
+
extended to Outreach) — the new surface must cite what's carrying
|
|
164
|
+
from the original and what's new
|
|
165
|
+
|
|
166
|
+
See `.claude/rules/artifact-ingestion.md` — this is the skill-level
|
|
167
|
+
instantiation of that rule for prototype work.
|
|
168
|
+
|
|
169
|
+
#### Curated mode
|
|
170
|
+
|
|
171
|
+
Use AskUserQuestion to let the operator pick which luminary perspectives
|
|
172
|
+
to prototype against. Present the full menu organized by discipline:
|
|
173
|
+
|
|
174
|
+
> **Pick up to 3 luminaries for your prototype variants.**
|
|
175
|
+
> Each variant will be built through that thinker's dominant lens.
|
|
176
|
+
>
|
|
177
|
+
> **UX / Interaction:**
|
|
178
|
+
> - Don Norman — affordance-first, minimal chrome, obvious actions
|
|
179
|
+
> - Jakob Nielsen — 10 usability heuristics, discount usability
|
|
180
|
+
> - Alan Cooper — goal-directed, start from user goals, work backward
|
|
181
|
+
> - Steve Krug — "Don't Make Me Think", intuitive navigation
|
|
182
|
+
> - Sophia Prater — entity-derived, navigation mirrors the domain model
|
|
183
|
+
> - Jenifer Tidwell — proven interaction patterns for common UI problems
|
|
184
|
+
> - Luke Wroblewski — mobile-first, touch-first interaction
|
|
185
|
+
> - Golden Krishna — no-interface thinking, beyond screens
|
|
186
|
+
>
|
|
187
|
+
> **Visual / Typography / Color:**
|
|
188
|
+
> - Ellen Lupton — storytelling hierarchy, the page tells a narrative
|
|
189
|
+
> - Josef Albers — color as context, relative not absolute, test combinations
|
|
190
|
+
> - Eva Heller — color psychology, emotional associations across cultures
|
|
191
|
+
> - Johannes Itten — seven types of color contrast, color harmonics
|
|
192
|
+
> - Edward Tufte — data-ink ratio, maximum information, minimum decoration
|
|
193
|
+
> - Apple HIG — progressive disclosure, clarity, restraint
|
|
194
|
+
> - Google Material — systematic visual language, tokens over ad-hoc
|
|
195
|
+
>
|
|
196
|
+
> **Information Architecture:**
|
|
197
|
+
> - Peter Morville — how content is organized, labeled, navigated
|
|
198
|
+
> - Abby Covert — sense-making, structure from complexity
|
|
199
|
+
> - Richard Saul Wurman — LATCH (Location, Alphabet, Time, Category, Hierarchy)
|
|
200
|
+
> - Jesse James Garrett — multi-layered UX structure (strategy → surface)
|
|
201
|
+
>
|
|
202
|
+
> **Psychology / Persuasion / Emotion:**
|
|
203
|
+
> - BJ Fogg — behavior design, motivation × ability × trigger
|
|
204
|
+
> - Robert Cialdini — persuasion principles (social proof, scarcity, authority)
|
|
205
|
+
> - Aarron Walter — emotional design hierarchy (functional → reliable → usable → pleasurable)
|
|
206
|
+
> - Susan Weinschenk — "The Brain Lady", cognitive science behind user behavior
|
|
207
|
+
|
|
208
|
+
If the operator doesn't pick, propose 3 based on the scope:
|
|
209
|
+
- **Data-heavy tools** → Norman, Prater, Tufte
|
|
210
|
+
- **Storytelling/narrative** → Lupton, Apple HIG, Cooper
|
|
211
|
+
- **Dashboard/overview** → Tufte, Morville, Material
|
|
212
|
+
- **Forms/input** → Norman, Tidwell, Cooper
|
|
213
|
+
- **Emotional/consumer** → Walter, Fogg, Lupton
|
|
214
|
+
|
|
215
|
+
In curated mode, the operator also picks the winner after reviewing.
|
|
216
|
+
Visual review evidence is presented but the recommendation is advisory.
|
|
217
|
+
|
|
218
|
+
#### Winner selection by parent session mode
|
|
219
|
+
|
|
220
|
+
| Parent mode | Winner selection |
|
|
221
|
+
|-------------|------------------|
|
|
222
|
+
| operator-gated (any flags) | Operator picks after reviewing visual-review output |
|
|
223
|
+
| orchestrator-gated + gate-ux | Operator picks (gate-ux pulls UX back) |
|
|
224
|
+
| orchestrator-gated (no gate-ux) | Orchestrator auto-picks highest composite score |
|
|
225
|
+
|
|
226
|
+
**Auto-pick logic (orchestrator-gated without gate-ux):**
|
|
227
|
+
|
|
228
|
+
1. Run `/visual-review` on each variant as normal
|
|
229
|
+
2. Compute composite score per variant:
|
|
230
|
+
- Visual review score (weighted 60%)
|
|
231
|
+
- Signal match score from `/luminary recommend` (weighted 30%)
|
|
232
|
+
- Luminary adherence score (did the variant actually apply the POV?) (weighted 10%)
|
|
233
|
+
3. Orchestrator picks highest composite score as winner
|
|
234
|
+
4. Ties broken by signal match score (stronger match wins)
|
|
235
|
+
5. Write decision to danger-mode summary:
|
|
236
|
+
```
|
|
237
|
+
## Prototype winner auto-pick
|
|
238
|
+
- Winner: variant-2 (Norman-dominant)
|
|
239
|
+
- Composite score: 87/100 (visual 52/60 + signal 27/30 + adherence 8/10)
|
|
240
|
+
- Runner-up: variant-1 (Prater-dominant) — 81/100
|
|
241
|
+
- Rationale: [visual review findings summary]
|
|
242
|
+
- Confidence: medium (two variants within 10 points)
|
|
243
|
+
```
|
|
244
|
+
6. Update iteration goal `primary_luminaries` field (LIST form per
|
|
245
|
+
the collapse-to-single anti-pattern documented in bassclef follow-up
|
|
246
|
+
promotions) with winner. If the winner variant embodied a pair/triple,
|
|
247
|
+
write ALL entries — do not collapse. Include role annotations.
|
|
248
|
+
|
|
249
|
+
**Pair embodiment validation** (extension mode):
|
|
250
|
+
|
|
251
|
+
When the iteration is extending a prior prototype that carried a
|
|
252
|
+
luminary pair (e.g., "Variant D = Tufte + Morville"), the extension
|
|
253
|
+
prototype MUST embody BOTH luminaries. Validation during visual
|
|
254
|
+
review:
|
|
255
|
+
|
|
256
|
+
- For each luminary in the carried pair, score adherence 0-10
|
|
257
|
+
(how strongly did this prototype apply this luminary's POV?)
|
|
258
|
+
- If any luminary's adherence < 5, the extension FAILED pair
|
|
259
|
+
embodiment. Report specifically which luminary was collapsed.
|
|
260
|
+
- Composite score (for auto-pick) weights pair embodiment: if any
|
|
261
|
+
luminary adherence < 5, cap composite at 50/100.
|
|
262
|
+
|
|
263
|
+
Evidence of collapse patterns (see (see bassclef follow-up promotions).:
|
|
264
|
+
- Iteration bet writes "Tufte (carried from Variant D)" — missing Morville
|
|
265
|
+
- Prototype shows dense data but no navigation facets — Tufte applied,
|
|
266
|
+
Morville ignored
|
|
267
|
+
- Responsibility matrix attribution all cites one luminary — the other
|
|
268
|
+
wasn't operationalized
|
|
269
|
+
7. All variants (including rejected) remain in `docs/prototypes/` —
|
|
270
|
+
operator reviews rejected directions alongside winner
|
|
271
|
+
|
|
272
|
+
**Override**: operator reviewing PR can change `primary_luminary` in
|
|
273
|
+
the iteration goal and re-run `/decompose` if they disagree with the
|
|
274
|
+
auto-pick after seeing results.
|
|
275
|
+
|
|
276
|
+
#### When X dominates — what the variant actually looks like
|
|
277
|
+
|
|
278
|
+
Three "data-heavy" variants (Norman, Prater, Tufte) must produce
|
|
279
|
+
genuinely distinct prototypes. If they blur together, the luminary
|
|
280
|
+
signal is being ignored and the sprint has failed its purpose. These
|
|
281
|
+
sketches show what each dominant POV produces. Load the luminary's
|
|
282
|
+
full file (`.claude/luminaries/[slug].md`) before building the variant
|
|
283
|
+
— the signature, core methods, anti-patterns, and worked example drive
|
|
284
|
+
concrete design decisions.
|
|
285
|
+
|
|
286
|
+
**Prater-dominant** (data-heavy, relational):
|
|
287
|
+
- Primary nav is **object-based**: Deals, Brokers, Sellers, Buyers.
|
|
288
|
+
Not feature-based ("Search," "Reports").
|
|
289
|
+
- ORCA applied: entity inventory explicit, relationships drive
|
|
290
|
+
navigation, CTAs per object, attributes layered by priority.
|
|
291
|
+
- **Progressive disclosure** of data: core nouns above the fold;
|
|
292
|
+
enrichment data behind expansion; audit fields footer-level.
|
|
293
|
+
- Detail views are **componentized** from the object model, not
|
|
294
|
+
one-off designs.
|
|
295
|
+
- **Signal of success**: users can navigate the domain via object
|
|
296
|
+
relationships without using search.
|
|
297
|
+
|
|
298
|
+
**Norman-dominant** (data-heavy, affordance-forward):
|
|
299
|
+
- Every control's affordance is explicit: buttons look clickable,
|
|
300
|
+
disabled states explain why, hovers confirm interactivity.
|
|
301
|
+
- **Feedback loops** visible for every action: toast, optimistic UI,
|
|
302
|
+
error recovery with specific cause.
|
|
303
|
+
- **Mapping** explicit: actions visually grouped with their targets
|
|
304
|
+
(submit near last field, stage-advance near stage indicator).
|
|
305
|
+
- **Constraints** prevent wrong actions structurally (validated
|
|
306
|
+
fields, disabled transitions missing prerequisites).
|
|
307
|
+
- **Signal of success**: a first-time user can complete primary tasks
|
|
308
|
+
without documentation.
|
|
309
|
+
|
|
310
|
+
**Tufte-dominant** (data-heavy, information-density):
|
|
311
|
+
- **Data-ink maximized**: no decorative gridlines, borders, or
|
|
312
|
+
background cards. Every visual element encodes data.
|
|
313
|
+
- **Small multiples** where one big chart was the obvious choice.
|
|
314
|
+
- **Sparklines** embedded in tables showing trend without dominating
|
|
315
|
+
layout.
|
|
316
|
+
- **Dense tables** with many rows visible; typography does the
|
|
317
|
+
hierarchy, not chrome.
|
|
318
|
+
- **Signal of success**: high information-per-pixel ratio, user can
|
|
319
|
+
see dozens of data points simultaneously without visual noise.
|
|
320
|
+
|
|
321
|
+
**Rams-dominant** (minimalist, functional):
|
|
322
|
+
- Every element earns its place. Empty space is acceptable, even
|
|
323
|
+
preferred.
|
|
324
|
+
- No trend-chasing aesthetic flourishes (no neumorphism, no
|
|
325
|
+
glassmorphism, no gradients-for-gradient's-sake).
|
|
326
|
+
- **Functional honesty**: buttons look like buttons, disabled like
|
|
327
|
+
disabled, errors like errors.
|
|
328
|
+
- **Subtraction applied**: five features → three features done
|
|
329
|
+
excellently.
|
|
330
|
+
- **Signal of success**: the product looks as contemporary in 5 years
|
|
331
|
+
as it does today.
|
|
332
|
+
|
|
333
|
+
**Ive-dominant** (precision, premium):
|
|
334
|
+
- **Seam resolution**: every state transition designed (hover, focus,
|
|
335
|
+
active, disabled, loading, error). No default chrome.
|
|
336
|
+
- **Single considered material**: one shadow family, one radius value,
|
|
337
|
+
one typography family at three weights max.
|
|
338
|
+
- **Invisibility of craft**: users don't notice precision; they feel
|
|
339
|
+
that it's right.
|
|
340
|
+
- **Removal discipline**: components have minimal prop surface; if you
|
|
341
|
+
need a fourth variant, the design is wrong.
|
|
342
|
+
- **Signal of success**: the product feels inevitable — as if no other
|
|
343
|
+
version could exist.
|
|
344
|
+
|
|
345
|
+
**Lupton-dominant** (content-heavy, typographic):
|
|
346
|
+
- Type carries the hierarchy. Section headings in weight+size, not
|
|
347
|
+
colored boxes.
|
|
348
|
+
- **Modular scale** enforced (no arbitrary font sizes). **Vertical
|
|
349
|
+
rhythm** consistent across sections.
|
|
350
|
+
- **Two to three typefaces** max, paired for contrast in family +
|
|
351
|
+
harmony in proportion.
|
|
352
|
+
- Grid visible in structure but not in decoration.
|
|
353
|
+
- **Signal of success**: content is scannable without reading — eye
|
|
354
|
+
naturally follows typographic hierarchy.
|
|
355
|
+
|
|
356
|
+
**Cooper-dominant** (user-goal-forward):
|
|
357
|
+
- Primary persona's goals drive the main surface. Other personas get
|
|
358
|
+
goal-optimized secondary surfaces, not a feature-subset of the
|
|
359
|
+
primary.
|
|
360
|
+
- **Top-level nav** matches primary persona's end goals, not feature
|
|
361
|
+
taxonomy.
|
|
362
|
+
- **Scenarios as acceptance criteria**: each key scenario walks
|
|
363
|
+
end-to-end; the prototype demonstrates it.
|
|
364
|
+
- **Ruthless focus** on primary persona — secondary-persona needs
|
|
365
|
+
serve only when they don't compromise the primary.
|
|
366
|
+
- **Signal of success**: primary persona tasks feel natural and fast;
|
|
367
|
+
secondary tasks are possible but not optimized.
|
|
368
|
+
|
|
369
|
+
When producing three variants, pick luminaries whose **signal of success
|
|
370
|
+
is genuinely different**. Three data-heavy variants that all claim "clean
|
|
371
|
+
and usable" is a sign the luminaries aren't dominating — the POV should
|
|
372
|
+
be discernible in the sketch without needing the label.
|
|
373
|
+
|
|
374
|
+
### 3. Build each variant
|
|
375
|
+
|
|
376
|
+
For each confirmed variant:
|
|
377
|
+
|
|
378
|
+
1. **Compose the picked luminary's pattern shelves (bassclef#476 LR6).**
|
|
379
|
+
Read the picked luminary's frontmatter `solves_problems_brownfield:` +
|
|
380
|
+
`solves_problems_greenfield:` arrays from `.claude/luminaries/<slug>.md`
|
|
381
|
+
to confirm the imputed problems match the operator's intent.
|
|
382
|
+
Then compose pattern catalogs from each picked luminary's claimed
|
|
383
|
+
primary domain:
|
|
384
|
+
- **UX luminaries** → read `patterns/ux-ai/smarterpatterns/*.md` (LR4 #481) for AI-mediated UX patterns; read `patterns/ux-ix/*.md` if present for interaction patterns
|
|
385
|
+
- **Visual luminaries** → read `patterns/ux-ai/smarterpatterns/*.md` for AI surface patterns; read Frost atomic-design entries (LR5 #489) for component hierarchy patterns
|
|
386
|
+
- **Architecture luminaries** (rare in /riff-prototypes) → read `patterns/code/gof/*.md` (LR4 #485) + `patterns/code/fowler-poaa/*.md` (LR5 #490) if a pattern would shape the prototype's structure
|
|
387
|
+
- When the picked luminary references a pattern not in the catalog, dispatch `/agent-research-spawn` to fill the gap before continuing the variant build (transparent to operator; updates `docs/luminary-problem-pattern-backfill.md` if the luminary is itself unbackfilled)
|
|
388
|
+
- **Backfill graceful degradation:** Luminaries without `solves_problems_*` frontmatter (57 remaining as of LR6) skip the shelf-composition step; variant build falls back to legacy bake-off scope-keyword table. Operator gets a one-line warning + `/agent-research-spawn` opt-in to backfill on the spot.
|
|
389
|
+
2. Create `docs/prototypes/YYYY-MM-DD-variant-N/index.html`
|
|
390
|
+
3. Include Tailwind via CDN: `<script src="https://cdn.tailwindcss.com"></script>`
|
|
391
|
+
4. Use the project's design tokens if they exist (read `design/design-tokens.css`)
|
|
392
|
+
5. Hardcode 5-10 realistic data records inline (use names/patterns from the domain)
|
|
393
|
+
6. Build the key pages: typically a list view + detail view + primary action
|
|
394
|
+
7. Each variant should feel *distinctly different* — not three shades of the same thing
|
|
395
|
+
8. State at the top of each HTML file which luminary drives it AND which catalog patterns the variant instantiates — cite catalog paths in HTML comments using the same `@pattern <catalog-path>` format defined by `.claude/rules/pattern-annotation.md`. When the variant graduates to production code, the annotations carry forward to the source files where they become hook-validated.
|
|
396
|
+
9. **Mobile viewport is not optional.** Every prototype must specify behavior
|
|
397
|
+
at ≤768px. At minimum: does the sidebar collapse to a hamburger? Do tables
|
|
398
|
+
become cards? Do dense grids stack vertically? If you don't design the
|
|
399
|
+
mobile breakpoint, the Builder will guess — and guess wrong.
|
|
400
|
+
10. **Depth-section: conditional rendering only (bassclef#971 V1).** If
|
|
401
|
+
the variant HTML includes a "What's underneath" / "If you want depth"
|
|
402
|
+
section listing the downstream formal artifacts (spec, use case, user
|
|
403
|
+
stories, IA model, interaction design, GRASP, persona, JTBD), each
|
|
404
|
+
item MUST follow one of two shapes — never a bare link to an
|
|
405
|
+
unverified path:
|
|
406
|
+
|
|
407
|
+
| Artifact state at variant-write time | Render as |
|
|
408
|
+
|---|---|
|
|
409
|
+
| File exists on disk (chain produced it pre-Phase 4) | Real `<a href="…">…</a>` link with `✓ ready` badge |
|
|
410
|
+
| File does NOT exist yet (chain produces it post-pick) | No link — plain text + `⏳ coming after you pick` badge |
|
|
411
|
+
|
|
412
|
+
Check existence using the same write-time check `local-serve.sh`
|
|
413
|
+
would resolve the link against. Standard layout assumes the gallery
|
|
414
|
+
is served at the parent of the variant directory, so depth-links
|
|
415
|
+
use `../<artifact-dir>/<slug>.md` paths.
|
|
416
|
+
|
|
417
|
+
At the bottom of the depth-section include one explanatory
|
|
418
|
+
sentence — exact text adopters see during smoke:
|
|
419
|
+
|
|
420
|
+
> The "coming after you pick" items get written for the variant you
|
|
421
|
+
> select. Pick a variant → that variant's directions get the full
|
|
422
|
+
> formal write-up.
|
|
423
|
+
|
|
424
|
+
Rationale: cold-adopter smoke 2026-06-13 hit 404s on every
|
|
425
|
+
depth-link because /riff-prototypes was rendering the section
|
|
426
|
+
BEFORE the chain produced the artifacts. V1 conditional rendering
|
|
427
|
+
closes the 404 surface without restructuring the chain.
|
|
428
|
+
V2 (post-chain link rewrite via /prototype-gallery) is bassclef#971
|
|
429
|
+
follow-up; V3 (pre-Phase 4 chain reorder) is bassclef#968.
|
|
430
|
+
|
|
431
|
+
Example structure:
|
|
432
|
+
```
|
|
433
|
+
docs/prototypes/2026-04-04-variant-a-norman/
|
|
434
|
+
index.html ← list view (affordance-first)
|
|
435
|
+
detail.html ← detail view with primary action
|
|
436
|
+
README.md ← which luminary, what principle, what to look for
|
|
437
|
+
|
|
438
|
+
docs/prototypes/2026-04-04-variant-b-lupton/
|
|
439
|
+
index.html
|
|
440
|
+
detail.html
|
|
441
|
+
README.md
|
|
442
|
+
|
|
443
|
+
docs/prototypes/2026-04-04-variant-c-prater/
|
|
444
|
+
index.html
|
|
445
|
+
detail.html
|
|
446
|
+
README.md
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
### 3.5. Always emit Anthropic /frontend-design baseline (MUST — champion-challenger)
|
|
450
|
+
|
|
451
|
+
After building all N luminary-driven variants, ALWAYS dispatch
|
|
452
|
+
Anthropic's `/frontend-design` skill once to produce a baseline variant.
|
|
453
|
+
This is the architectural insurance that lets us measure whether the
|
|
454
|
+
luminary system is adding value over Anthropic's intrinsic frontend
|
|
455
|
+
design skill.
|
|
456
|
+
|
|
457
|
+
**Why mandatory:** without a measured baseline, the luminary system
|
|
458
|
+
can't prove it's doing real work. If operator picks the baseline
|
|
459
|
+
variant >50% of the time across runs, the luminary approach needs
|
|
460
|
+
review. If the luminary-driven variants beat the baseline consistently,
|
|
461
|
+
the luminary system is paying its rent.
|
|
462
|
+
|
|
463
|
+
**Procedure**:
|
|
464
|
+
|
|
465
|
+
1. Output directory: `docs/prototypes/<sprint-slug>/variant-baseline-anthropic/`
|
|
466
|
+
2. Dispatch `/frontend-design` via Skill tool with input prompt that
|
|
467
|
+
includes ONLY: scope description + value-prop summary + key data
|
|
468
|
+
shape. **Do NOT pass**:
|
|
469
|
+
- Luminary guidance ("apply Tufte data-density")
|
|
470
|
+
- Bassclef's design tokens (`design/tokens/*.css`)
|
|
471
|
+
- Reference to other variants in the sprint
|
|
472
|
+
- Iteration bet's `primary_luminaries` field
|
|
473
|
+
|
|
474
|
+
The baseline must measure what `/frontend-design` produces *without*
|
|
475
|
+
bassclef's design system as a constraint. Otherwise the comparison
|
|
476
|
+
is contaminated.
|
|
477
|
+
|
|
478
|
+
3. Output: same shape as luminary variants (`index.html` + optional
|
|
479
|
+
`detail.html` + `README.md`). The README must state:
|
|
480
|
+
- "**Baseline — Anthropic /frontend-design** (no luminary contamination)"
|
|
481
|
+
- Date of generation + the prompt used
|
|
482
|
+
- Explicit note that this variant did NOT inherit bassclef's tokens
|
|
483
|
+
|
|
484
|
+
4. Gallery flag (consumed by `/prototype-gallery`): the variant
|
|
485
|
+
directory name `variant-baseline-anthropic` is the marker.
|
|
486
|
+
`/prototype-gallery` SHOULD render baseline cards distinctively
|
|
487
|
+
(different border, "Baseline" badge, or annotation in card body)
|
|
488
|
+
so operators can tell at-a-glance which is the champion vs.
|
|
489
|
+
challenger.
|
|
490
|
+
|
|
491
|
+
5. Comparison signal: when operator selects a winner (or auto-pick
|
|
492
|
+
fires), record `selected_variant: <slug>` AND `is_baseline: <bool>`
|
|
493
|
+
in `preview-state.yml` so the champion/challenger ratio can be
|
|
494
|
+
audited over time.
|
|
495
|
+
|
|
496
|
+
**What stays luminary-driven, what goes baseline**:
|
|
497
|
+
|
|
498
|
+
| Concern | Luminary variants (N) | Baseline (1) |
|
|
499
|
+
|---|---|---|
|
|
500
|
+
| Driver | Specific luminary's POV (Tufte, Norman, etc.) | Anthropic's frontend-design skill |
|
|
501
|
+
| Design tokens | `design/tokens/<product>.css` if exists | None (clean comparison) |
|
|
502
|
+
| Iteration bet primary_luminaries | Reads + applies | Ignores |
|
|
503
|
+
| Sprint-scope context | Full | Same scope; no luminary context |
|
|
504
|
+
| Output dir | `variant-<letter>-<luminary>/` | `variant-baseline-anthropic/` |
|
|
505
|
+
| Gallery treatment | Standard card | Baseline-flagged card |
|
|
506
|
+
|
|
507
|
+
**Operator override**: a future flag `--no-baseline` may suppress this
|
|
508
|
+
behavior for runs where the operator explicitly doesn't want the
|
|
509
|
+
comparison (e.g., already-validated direction, just doing variants of
|
|
510
|
+
the chosen luminary). Default is always-on per step-11b's contract.
|
|
511
|
+
|
|
512
|
+
### 4. Visual review each variant (MUST gate)
|
|
513
|
+
|
|
514
|
+
After building each variant, run `/visual-review` on it. This is not
|
|
515
|
+
optional — structured evaluation replaces subjective preference.
|
|
516
|
+
|
|
517
|
+
For each variant:
|
|
518
|
+
1. Serve it: `npx serve docs/prototypes/variant-N/ -l 3333`
|
|
519
|
+
2. Run `/visual-review` — this screenshots, evaluates against the usability
|
|
520
|
+
standard, and scores through the variant's dominant luminary AND its
|
|
521
|
+
complement evaluators (see visual-review skill's complement pairs table)
|
|
522
|
+
3. The report goes to `docs/visual-reviews/YYYY-MM-DD-prototype-variant-N.md`
|
|
523
|
+
4. Kill the server after evaluation
|
|
524
|
+
|
|
525
|
+
After all variants are evaluated, produce the **prototype comparison table**
|
|
526
|
+
(see visual-review skill's "Prototype Variant Evaluation" section):
|
|
527
|
+
- Usability scores per variant
|
|
528
|
+
- Strongest/weakest principles per variant
|
|
529
|
+
- Evidence-based recommendation aligned to iteration goal risk + value
|
|
530
|
+
|
|
531
|
+
If Playwright MCP is not available, perform manual evaluation and note
|
|
532
|
+
"manual — no screenshot" in each report.
|
|
533
|
+
|
|
534
|
+
### 5. Commit the prototypes + reviews
|
|
535
|
+
|
|
536
|
+
```bash
|
|
537
|
+
git add docs/prototypes/ docs/visual-reviews/
|
|
538
|
+
git commit -m "docs: prototype sprint — N variants for [scope] with visual reviews"
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
### 6. Present results (mode-dependent)
|
|
542
|
+
|
|
543
|
+
**Bake-off mode:**
|
|
544
|
+
|
|
545
|
+
> **Prototype Bake-off complete.**
|
|
546
|
+
>
|
|
547
|
+
> **Visual review comparison:**
|
|
548
|
+
> [insert comparison table from Step 4]
|
|
549
|
+
>
|
|
550
|
+
> **Winner: Variant [X] ([luminary])** — [evidence: highest usability
|
|
551
|
+
> score + best alignment with iteration goal's risk/value signals]
|
|
552
|
+
>
|
|
553
|
+
> Elements worth carrying from other variants: [specific things]
|
|
554
|
+
>
|
|
555
|
+
> **Approve this winner, or override?**
|
|
556
|
+
> 1. Approve — proceed with [luminary] as primary
|
|
557
|
+
> 2. Override — I want [different variant]
|
|
558
|
+
> 3. Reject all — need different directions
|
|
559
|
+
|
|
560
|
+
In bake-off mode, the system auto-selects based on scores. The operator
|
|
561
|
+
confirms or overrides. If scores are within 2 points, present it as a
|
|
562
|
+
close call and explain the tiebreaker rationale.
|
|
563
|
+
|
|
564
|
+
**Curated mode:**
|
|
565
|
+
|
|
566
|
+
> **Prototype Sprint complete. View locally:**
|
|
567
|
+
>
|
|
568
|
+
> ```bash
|
|
569
|
+
> npx serve docs/prototypes/2026-04-04-variant-a-norman/ -l 3001
|
|
570
|
+
> npx serve docs/prototypes/2026-04-04-variant-b-lupton/ -l 3002
|
|
571
|
+
> npx serve docs/prototypes/2026-04-04-variant-c-prater/ -l 3003
|
|
572
|
+
> ```
|
|
573
|
+
>
|
|
574
|
+
> **Visual review comparison:**
|
|
575
|
+
> [insert comparison table from Step 4]
|
|
576
|
+
>
|
|
577
|
+
> **Recommendation** (advisory): [variant] — [evidence-based rationale]
|
|
578
|
+
>
|
|
579
|
+
> Each variant has a README + visual review report. Which direction?
|
|
580
|
+
> You can pick one, combine elements, or reject all.
|
|
581
|
+
|
|
582
|
+
In curated mode, the operator makes the final call. The visual review
|
|
583
|
+
comparison is evidence, not a decision.
|
|
584
|
+
|
|
585
|
+
### 7. Selection → pipeline to Construction
|
|
586
|
+
|
|
587
|
+
Whether auto-selected (bake-off) or operator-chosen (curated), the
|
|
588
|
+
winner triggers a defined pipeline:
|
|
589
|
+
|
|
590
|
+
1. **Set primary luminary**: Selected variant's luminary becomes
|
|
591
|
+
`primary_luminary:` in the iteration goal
|
|
592
|
+
2. **Set complement evaluators**: Look up the complement pair in the
|
|
593
|
+
visual-review skill — these luminaries will evaluate ALL subsequent
|
|
594
|
+
UI work in this iteration
|
|
595
|
+
3. **Run /ux-migration** (MUST gate — cannot skip):
|
|
596
|
+
- Component-level visual diff (every element, current vs. target)
|
|
597
|
+
- Design token extraction (concrete values from prototype HTML)
|
|
598
|
+
- Prototype HTML → React component mapping table
|
|
599
|
+
- Work packages with size/risk and dependency-aware build order
|
|
600
|
+
- Foundation work package first (shadcn init, tokens, shared layout)
|
|
601
|
+
- Output: migration spec at `docs/specs/ux-migration-*.md`
|
|
602
|
+
- This spec becomes the Builder's checklist for Construction
|
|
603
|
+
4. **Designer runs Elaboration**: JTBD → HTA → IA → interaction design,
|
|
604
|
+
all guided by the selected luminary's principles
|
|
605
|
+
5. **Foundation checkpoint**: shadcn init + design tokens + shared layout
|
|
606
|
+
committed and verified BEFORE any page work starts
|
|
607
|
+
6. **Construction**: Builder implements work packages against the
|
|
608
|
+
migration spec checklist (not memory, not intuition)
|
|
609
|
+
7. **Every UI commit**: triggers `/visual-review` with complement evaluators
|
|
610
|
+
8. **Visual pass complete gate**: after ALL work packages, screenshot
|
|
611
|
+
every page side-by-side against prototype. Pass/fail matrix.
|
|
612
|
+
|
|
613
|
+
The prototype defines the visual direction for Construction. IA structure
|
|
614
|
+
and visual treatment are ONE thing, not two separate passes. When the
|
|
615
|
+
Builder constructs pages that the prototype covered, they must look like
|
|
616
|
+
the prototype — same layout, same typography, same component patterns.
|
|
617
|
+
Separating "structure now, visuals later" produces pages nobody can
|
|
618
|
+
validate because they don't look like what was designed.
|
|
619
|
+
|
|
620
|
+
The prototype is not a pixel-perfect spec — exact spacing and colors
|
|
621
|
+
may evolve. But the fundamental choices (tables vs. cards, sidebar vs.
|
|
622
|
+
top nav, dense vs. spacious) carry through to Construction unchanged.
|
|
623
|
+
|
|
624
|
+
## Rules
|
|
625
|
+
|
|
626
|
+
- Prototypes are throwaway — never reference them as the implementation spec
|
|
627
|
+
- Each variant must be *distinctly different* in approach, not just color swaps
|
|
628
|
+
- Hardcoded data must be realistic (domain-appropriate names, values, patterns)
|
|
629
|
+
- Keep it simple: vanilla HTML + Tailwind CDN. No frameworks. No build steps.
|
|
630
|
+
- If the operator rejects all variants, that's data — ask what's missing and iterate
|
|
631
|
+
- Maximum 3 luminary-driven variants per sprint (PLUS the always-on Anthropic baseline = 4 total max). More than 3 luminary variants creates decision fatigue.
|
|
632
|
+
- **Anthropic /frontend-design baseline is always emitted** (per step-11b champion-challenger). Skip only via explicit `--no-baseline` operator override (rare). Baseline must NOT inherit bassclef's design tokens or luminary context — clean comparison or no comparison.
|
|
633
|
+
- **Capture champion-challenger signal**: when operator selects a winner, write `selected_variant` + `is_baseline` to `preview-state.yml`. Champion-challenger ratio audits across runs.
|
|
634
|
+
|
|
635
|
+
## Output discipline
|
|
636
|
+
|
|
637
|
+
Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
|