bmad-method 6.7.1-next.0 → 6.7.1-next.2

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.
Files changed (60) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/package.json +1 -1
  3. package/removals.txt +5 -0
  4. package/src/bmm-skills/1-analysis/bmad-product-brief/SKILL.md +1 -1
  5. package/src/bmm-skills/2-plan-workflows/bmad-agent-ux-designer/customize.toml +1 -1
  6. package/src/bmm-skills/2-plan-workflows/bmad-prd/SKILL.md +5 -3
  7. package/src/bmm-skills/2-plan-workflows/bmad-prd/assets/prd-template.md +4 -7
  8. package/src/bmm-skills/2-plan-workflows/bmad-prd/assets/prd-validation-checklist.md +4 -4
  9. package/src/bmm-skills/2-plan-workflows/bmad-prd/references/headless.md +2 -2
  10. package/src/bmm-skills/2-plan-workflows/bmad-ux/SKILL.md +87 -0
  11. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/color-themes.md +9 -0
  12. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-directions.md +9 -0
  13. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-editorial.md +158 -0
  14. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-mobile.md +93 -0
  15. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-shadcn.md +109 -0
  16. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/excalidraw-wireframe.md +19 -0
  17. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/experience-example-mobile.md +112 -0
  18. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/experience-example-shadcn.md +133 -0
  19. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/headless-schemas.md +84 -0
  20. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/key-screens.md +29 -0
  21. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/validation-report-template.html +319 -0
  22. package/src/bmm-skills/2-plan-workflows/bmad-ux/customize.toml +100 -0
  23. package/src/bmm-skills/2-plan-workflows/bmad-ux/references/creative-tools.md +19 -0
  24. package/src/bmm-skills/2-plan-workflows/bmad-ux/references/design-md-spec.md +50 -0
  25. package/src/bmm-skills/2-plan-workflows/bmad-ux/references/headless.md +37 -0
  26. package/src/bmm-skills/2-plan-workflows/bmad-ux/references/validate.md +115 -0
  27. package/src/bmm-skills/module-help.csv +1 -1
  28. package/src/core-skills/bmad-spec/SKILL.md +126 -0
  29. package/src/core-skills/bmad-spec/assets/headless-schemas.md +33 -0
  30. package/src/core-skills/bmad-spec/assets/spec-template.md +49 -0
  31. package/src/core-skills/bmad-spec/customize.toml +53 -0
  32. package/src/core-skills/module-help.csv +1 -1
  33. package/tools/skill-validator.md +1 -19
  34. package/tools/validate-skills.js +1 -40
  35. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/SKILL.md +0 -75
  36. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/customize.toml +0 -41
  37. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-01-init.md +0 -135
  38. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-01b-continue.md +0 -127
  39. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-02-discovery.md +0 -190
  40. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-03-core-experience.md +0 -217
  41. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-04-emotional-response.md +0 -220
  42. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-05-inspiration.md +0 -235
  43. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-06-design-system.md +0 -253
  44. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-07-defining-experience.md +0 -255
  45. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-08-visual-foundation.md +0 -225
  46. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-09-design-directions.md +0 -225
  47. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-10-user-journeys.md +0 -242
  48. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-11-component-strategy.md +0 -249
  49. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-12-ux-patterns.md +0 -238
  50. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-13-responsive-accessibility.md +0 -265
  51. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-14-complete.md +0 -177
  52. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/ux-design-template.md +0 -13
  53. package/src/core-skills/bmad-distillator/SKILL.md +0 -177
  54. package/src/core-skills/bmad-distillator/agents/distillate-compressor.md +0 -116
  55. package/src/core-skills/bmad-distillator/agents/round-trip-reconstructor.md +0 -68
  56. package/src/core-skills/bmad-distillator/resources/compression-rules.md +0 -51
  57. package/src/core-skills/bmad-distillator/resources/distillate-format-reference.md +0 -227
  58. package/src/core-skills/bmad-distillator/resources/splitting-strategy.md +0 -78
  59. package/src/core-skills/bmad-distillator/scripts/analyze_sources.py +0 -300
  60. package/src/core-skills/bmad-distillator/scripts/tests/test_analyze_sources.py +0 -204
@@ -0,0 +1,19 @@
1
+ # Excalidraw Wireframe Renderer
2
+
3
+ Subagent prompt. Produce one `.excalidraw` file at `.working/ia-{date}.excalidraw` (IA diagram) or `.working/flow-{name}-{date}.excalidraw` (flow wireframe).
4
+
5
+ ## CRITICAL: two-character `index` fields only
6
+
7
+ Every element's `index` field must be **exactly two characters** (`a0`, `aZ`, `b3`, ...). Three-character indices cause a silent *"Error: invalid file"* with no diagnostic output. Assign sequentially across all elements; advance the leading letter when the trailing alphanumeric exhausts (`a0..a9, aA..aZ`, then `b0..`). Verify before writing.
8
+
9
+ ## Shape
10
+
11
+ Valid Excalidraw file: `{type: "excalidraw", version: 2, source: "https://excalidraw.com", elements: [...], appState: {gridSize: null, viewBackgroundColor: "#ffffff"}, files: {}}`. Each element needs the standard Excalidraw element fields (`id, type, x, y, width, height, angle, strokeColor, backgroundColor, fillStyle, strokeWidth, strokeStyle, roughness, opacity, groupIds, frameId, roundness, seed, version, versionNonce, isDeleted, boundElements, updated, link, locked, index`). Text elements add `text, fontSize, fontFamily, textAlign, verticalAlign, baseline, containerId, originalText, lineHeight`.
12
+
13
+ ## Content
14
+
15
+ **IA diagram:** boxes-and-arrows of auth stack, main app surfaces, modal routes, settings stack, cross-cutting affordances. Color sparingly to distinguish category. Layout for human legibility, not graph correctness.
16
+
17
+ **Flow wireframe:** screen-by-screen rectangles left-to-right, simple shapes inside (nav bar, CTA, content blocks) at low fidelity. Arrows labeled with the user action that causes transition. Annotations alongside for climax and edge-case beats.
18
+
19
+ Return to the parent: file path, kind, one-line subject, element count, confirmation that all indices are two-character. Do not dump JSON into parent context. Tell the user to open in Excalidraw desktop or excalidraw.com.
@@ -0,0 +1,112 @@
1
+ ---
2
+ name: Quill
3
+ status: final
4
+ sources:
5
+ - {planning_artifacts}/prds/quill-2025-08-15/prd.md
6
+ updated: 2025-09-02
7
+ ---
8
+
9
+ # Quill — Experience Spine
10
+
11
+ > Illustrative example. Single-surface mobile (iOS + Android parity). Consumer posture, calm by default. Paired with `design-example-mobile.md` (Quill DESIGN.md). Demonstrates: microcopy as gating discipline, Inspiration & Anti-patterns earning its place, Responsive & Platform omitted (single-surface).
12
+
13
+ ## Foundation
14
+
15
+ Single-surface mobile, iOS + Android with parity. No UI system named — inherits platform conventions for navigation, system gestures, dynamic type. `DESIGN.md` is the visual identity reference; this spine is the experience. Dark mode is the default surface; light is a setting.
16
+
17
+ ## Information Architecture
18
+
19
+ | Surface | Reached from | Purpose |
20
+ |---|---|---|
21
+ | Today | App open (cold) | Today's prompt + entry composer |
22
+ | Library | Tab bar | Past entries, searchable |
23
+ | Entry detail | Library row tap | Read / edit one entry |
24
+ | Settings | Today header gear | Account, export, theme |
25
+
26
+ Bottom tab bar (Today / Library / Settings). No drawer. Modal stacks one level deep, never two.
27
+
28
+ → Composition reference: `mockups/today-cold.html`, `mockups/composer.html`. Spine wins on conflict.
29
+
30
+ ## Voice and Tone
31
+
32
+ Microcopy. Brand voice and aesthetic posture live in `DESIGN.md`.
33
+
34
+ | Do | Don't |
35
+ |---|---|
36
+ | "Today's prompt." | "Time to write!" |
37
+ | "Saved." | "✓ Auto-saved successfully" |
38
+ | "We couldn't reach the cloud — your work is on this device." | "Network error" |
39
+ | Short, complete sentences. | Streak counters, encouragement, exclamation marks. |
40
+
41
+ ## Component Patterns
42
+
43
+ Behavioral. Visual specs live in `DESIGN.md.Components`.
44
+
45
+ | Component | Use | Behavioral rules |
46
+ |---|---|---|
47
+ | Prompt card | Today | One per day. Tap opens composer. |
48
+ | Composer | Today + entry detail | No formatting toolbar in v1. Autosave on pause ≥ 600ms. |
49
+ | Entry row | Library list | Tap → entry detail. Long-press reserved for system text selection. |
50
+ | Save indicator | Composer header | Cycles `Editing…` → `Saved.` (≥ 800ms visible). |
51
+ | Settings row | Settings list | Tap → detail or toggle. |
52
+
53
+ ## State Patterns
54
+
55
+ | State | Surface | Treatment |
56
+ |---|---|---|
57
+ | Cold open | Today | Show today's prompt (cached). If no cache, `Today's prompt is loading.` with skeleton. |
58
+ | Empty library | Library | `No entries yet — Today's prompt is your first.` Link to Today. |
59
+ | Search empty | Library search | `No matches.` No suggestions. |
60
+ | Offline write | Composer | Save locally. No banner. Sync on next foreground. |
61
+ | Sync error | Settings → Account | Surfaced here only. Never block writing. |
62
+ | Focus | Composer | Native cursor + keyboard. No custom focus chrome. |
63
+
64
+ ## Interaction Primitives
65
+
66
+ - Tap to act. Long-press reserved for system text selection.
67
+ - Swipe-to-delete on entry rows (native pattern, confirm sheet).
68
+ - Pull-to-refresh on Library only.
69
+ - **Banned:** carousels, hero animations on open, badge counts, streaks, push-notification re-engagement.
70
+
71
+ ## Accessibility Floor
72
+
73
+ Behavioral. Visual contrast lives in `DESIGN.md`.
74
+
75
+ - VoiceOver / TalkBack: every interactive element labeled with role + state. Save indicator announces `Saved` on transition.
76
+ - Dynamic type honored through `DESIGN.md` typography tokens. UI must remain legible at largest setting — no truncated controls.
77
+ - Reduce Motion: skip the save-indicator fade; show `Saved.` immediately.
78
+ - Tap targets ≥ 44pt (iOS) / 48dp (Android).
79
+ - Focus traversal follows reading order on every surface.
80
+
81
+ ## Inspiration & Anti-patterns
82
+
83
+ - **Lifted from Day One:** the single daily entry framing — one prompt, one composer, no inbox.
84
+ - **Lifted from iA Writer:** the no-toolbar composer; formatting is a settings-level decision, not a per-entry one.
85
+ - **Rejected — Streaks (Duolingo, most habit apps):** streaks weaponize the user's calendar. Quill's value is showing up *today*, not punishing missed days.
86
+ - **Rejected — AI prompt suggestions inside the composer:** the composer is for writing, not negotiating with a model. AI lives only in the daily prompt generation.
87
+
88
+ ## Key Flows
89
+
90
+ ### Flow 1 — Daily write (Mira, late evening, after work)
91
+
92
+ 1. Mira opens app.
93
+ 2. Today surface shows today's prompt (cached if offline).
94
+ 3. She taps the composer entry point.
95
+ 4. Composer opens, keyboard active.
96
+ 5. She writes; autosave fires on pause.
97
+ 6. She taps Back.
98
+ 7. **Climax:** Today surface shows `Saved.` and the entry's first line below the prompt — proof the day is captured.
99
+
100
+ Failure: cold prompt fetch fails → composer still opens with cached generic prompt; banner on Today only after Mira returns.
101
+
102
+ ### Flow 2 — Recall past entry (Mira, three weeks later, looking for what she wrote about her mother)
103
+
104
+ 1. Mira taps Library.
105
+ 2. Scrolls or searches.
106
+ 3. Taps entry row.
107
+ 4. Entry detail opens in read mode.
108
+ 5. She taps anywhere to enter edit mode (cursor at tap point).
109
+ 6. Edits autosave.
110
+ 7. **Climax:** `Saved.` visible in entry header — the older self and the present self are in continuous conversation.
111
+
112
+ Empty state: no entries → message routes back to Today.
@@ -0,0 +1,133 @@
1
+ ---
2
+ name: Drift
3
+ status: final
4
+ sources:
5
+ - {planning_artifacts}/prds/drift-2026-03-12/prd.md
6
+ updated: 2026-04-02
7
+ ---
8
+
9
+ # Drift — Experience Spine
10
+
11
+ > Illustrative example. Single-surface responsive web. shadcn/ui on Next.js + Tailwind. Paired with `design-example-shadcn.md` (Drift DESIGN.md). Demonstrates: component-library inheritance, keyboard-first interaction primitives, the "shadcn + brand-layer" pattern that covers most modern web SaaS.
12
+
13
+ ## Foundation
14
+
15
+ Single-surface responsive web. shadcn/ui on Next.js 15+ with Tailwind CSS. The component library does most of the work; brand discipline is "respect the defaults except where the brand layer overrides them." `DESIGN.md` is the visual identity reference and names the override surface; this spine is the experience. Single-tenant per project; users can belong to multiple projects but each project is a self-contained workspace.
16
+
17
+ ## Information Architecture
18
+
19
+ | Surface | Reached from | Purpose |
20
+ |---|---|---|
21
+ | Today | App open / `g t` | Current focus, in-progress tasks pulled from all projects |
22
+ | Projects | Sidebar / `g p` | List of active and archived projects |
23
+ | Project detail | Projects row / `g 1`–`g 9` | Tasks in this project, organized by lane |
24
+ | Search | `⌘K` / `Ctrl+K` | Command palette — surface, navigate, act |
25
+ | Settings | Avatar menu | Account, theme, keyboard shortcuts, billing |
26
+
27
+ Sidebar collapses to icons on `md`; becomes a `Sheet` on `sm`. Modal stacks one level deep (e.g., open `Dialog` on top of a surface, never on top of another dialog).
28
+
29
+ → Composition reference: `mockups/today.html`, `mockups/project-detail.html`, `mockups/command-palette.html`. Spine wins on conflict.
30
+
31
+ ## Voice and Tone
32
+
33
+ Microcopy. Brand voice and aesthetic posture live in `DESIGN.md`.
34
+
35
+ | Do | Don't |
36
+ |---|---|
37
+ | "What are you working on?" | "Let's get productive! 🚀" |
38
+ | "3 tasks in motion" | "You have 3 active items." |
39
+ | "Closed. Nice work." | "Task completed successfully ✓" |
40
+ | "Nothing in motion. Pick something." | "No active tasks. Click below to get started!" |
41
+ | Manager-facing: counts and verbs. Employee-facing: same. | Different tone per audience — Drift talks to everyone the same way. |
42
+
43
+ ## Component Patterns
44
+
45
+ Behavioral. Visual specs live in `DESIGN.md.Components` (or in shadcn defaults, when inherited).
46
+
47
+ | Component | Use | Behavioral rules |
48
+ |---|---|---|
49
+ | Task row | Projects, Today | Click anywhere on row opens edit dialog. Checkbox toggles done state with optimistic update. Hover reveals quick-actions (`focus`, `defer`, `archive`). |
50
+ | Focus card | Today, Project detail | At most one focus card per surface — the task or project marked with `focus` state. `f` keyboard shortcut sets focus on the active row. |
51
+ | Command palette | Global (⌘K) | Fuzzy search across all projects, tasks, and commands. `Enter` fires the highlighted result. `→` previews a result. Escape closes. |
52
+ | Project header | Project detail | Inline-editable title (click to edit, blur to save). Status pill: active / archived / done. |
53
+ | Empty state | Anywhere | shadcn's empty pattern + one Drift-specific sentence. `display-sm` for the headline, body text below, single primary action. |
54
+
55
+ ## State Patterns
56
+
57
+ | State | Surface | Treatment |
58
+ |---|---|---|
59
+ | Cold app load | Today | shadcn `Skeleton` rows (4-6) match expected layout. Resolves on data. |
60
+ | No focus | Today | `display-sm`: "Nothing in motion. Pick something." Below: list of in-progress tasks from all projects. |
61
+ | Empty project | Project detail | `display-sm`: "{Project title} is empty." Body: "Add a first task to get going." Single primary button. |
62
+ | Command palette no matches | ⌘K | "No matches. Start typing a task or project name, or pick an action below." Followed by 4-5 common commands. |
63
+ | Offline | Global (status bar) | shadcn `Toast` once: "You're offline. Changes will sync when you reconnect." Local writes continue. |
64
+ | Permission denied | Projects (others' private) | Surface hidden from sidebar. No "blocked" screen. |
65
+ | Stale data | Project detail | If background refresh detects changes, shadcn `Toast`: "Updated by {user_name}. Refresh." Manual refresh, no auto. |
66
+
67
+ ## Interaction Primitives
68
+
69
+ **Keyboard-first.** Drift's primary audience is developers and power users; the keyboard surface is the product, the mouse is fallback.
70
+
71
+ - `⌘K` / `Ctrl+K` — Command palette (universal)
72
+ - `g t` / `g p` — Go to Today / Projects (vim-style)
73
+ - `g 1`–`g 9` — Go to project by sidebar position
74
+ - `f` — Set focus on highlighted task/project
75
+ - `c` — Create new task (context-aware: in the active project)
76
+ - `Esc` — Close dialogs, exit edit mode, clear command palette
77
+ - `/` — Focus search in current surface
78
+
79
+ **Mouse:** click to act, drag deferred to v2. Hover reveals row actions on `md+` (touch users tap to reveal).
80
+
81
+ **Banned everywhere:** infinite scroll (pagination only), drag-to-reorder in v1, hover-only affordances on `sm` viewports, modal stacks > 1 level deep.
82
+
83
+ ## Accessibility Floor
84
+
85
+ Behavioral. Visual contrast lives in `DESIGN.md` (inherits shadcn's WCAG AA-compliant defaults; brand overrides verified to maintain ratios).
86
+
87
+ - WCAG 2.2 AA across the responsive web surface.
88
+ - Screen reader announces page surface on navigation: "Today, focus surface" / "Project: {name}, task list, {N} tasks."
89
+ - Keyboard shortcuts available without modifier on most surfaces (vim-style `g t` etc.) — users with motor-control limitations get the same surface as power users.
90
+ - `Tab` order matches reading order on every surface. `Esc` always closes the topmost modal/popover.
91
+ - Command palette is fully keyboard-operable; results announce as they update via `aria-live`.
92
+ - Focus rings inherit shadcn's `ring` token — visible at AA contrast against `background`.
93
+
94
+ ## Responsive & Platform
95
+
96
+ | Breakpoint | Behavior |
97
+ |---|---|
98
+ | `≥ lg` (1024px+) | Sidebar visible. Today is a 2-column layout: focus + in-motion list. |
99
+ | `md` (768–1023px) | Sidebar collapses to icons. Today stacks to single column. |
100
+ | `< md` (`sm`) | Sidebar becomes a `Sheet` triggered from top bar. Command palette opens fullscreen. |
101
+
102
+ Drift is responsive web, not a native mobile app. The product works on phones for read + simple-edit, but the primary surface is desktop / laptop.
103
+
104
+ ## Inspiration & Anti-patterns
105
+
106
+ - **Lifted from Linear:** the keyboard-first discipline. `⌘K` is the command center; vim-style nav (`g t`); no drag for primary navigation; status pill vocabulary.
107
+ - **Lifted from Notion:** inline-editable titles. Click-to-edit on project header, blur to save. No edit/view mode toggle.
108
+ - **Lifted from shadcn:** the entire surface vocabulary. Drift's brand is *what we add to shadcn*, not a from-scratch design system. This is a deliberate posture, not a shortcut.
109
+ - **Rejected — Streaks, badges, achievement notifications:** Drift is a tool, not a habit app. Task closure is its own reward; no celebratory animation, no "🎉 5-day streak!" toast.
110
+ - **Rejected — AI-suggested next tasks:** Drift surfaces what's in motion, doesn't tell the user what to work on. The user picks focus; the tool surfaces consequences.
111
+ - **Rejected — Multi-column kanban as default project view:** lists are linear; kanban hides progress behind columns. Optional v2; not the default.
112
+
113
+ ## Key Flows
114
+
115
+ ### Flow 1 — Morning focus (Sarah, solo founder, 8:45am Tuesday)
116
+
117
+ 1. Sarah opens Drift in a browser tab.
118
+ 2. App loads Today. `display-sm`: "Welcome back, Sarah." Focus card shows yesterday's marked task — "Finish landing page hero copy" — still in motion.
119
+ 3. She hits `⌘K`, types "ship hero", sees the matching task and presses Enter to open it.
120
+ 4. Inline edit: she updates the task description with two new bullets. Tab + Tab triggers save.
121
+ 5. **Climax:** Sarah closes the dialog. Today re-renders: focus card still shows the hero task, but now with the updated body text visible at a glance. She doesn't have to navigate anywhere — the surface that greeted her now reflects the work she just did. She picks up her coffee and starts writing.
122
+
123
+ Failure: data save fails → shadcn `Toast` (destructive variant): "Couldn't save. Trying again." Inline edit retained; another `Enter` retries.
124
+
125
+ ### Flow 2 — Async handoff (Devon and Mara, small remote team, mid-afternoon)
126
+
127
+ 1. Devon finishes wiring up the auth flow and marks the task `done`.
128
+ 2. Mara, time-zoned three hours ahead and online during overlap, opens Drift.
129
+ 3. Today loads; her focus is on her own front-end work, but the in-motion list shows Devon's auth task now marked done and one task below it newly assigned to her — "Wire up post-auth redirect" — that Devon set during checkout.
130
+ 4. She hits `f` on the row to mark it as her focus, then `Enter` to open it.
131
+ 5. **Climax:** The focus card swaps. Her surface now shows the post-auth redirect task as the live thing she's working on; the projects sidebar shows the Auth project highlighted; the command palette `⌘K` defaults its first result to "Go to Auth project." The state of the team's progress is *embedded in her surface* — no Slack thread to scroll, no status doc to read.
132
+
133
+ Failure: Devon hadn't actually assigned the follow-up — Mara mis-assigned to herself. She hits `Esc`, `f` again to unfocus, and reassigns to Devon. No "are you sure" dialog; Drift trusts the user.
@@ -0,0 +1,84 @@
1
+ # Headless Mode JSON Schemas
2
+
3
+ Every headless run ends with one of these payloads. Omit keys for artifacts not produced.
4
+
5
+ ## Common fields
6
+
7
+ - `status` — `"complete"`, `"blocked"`, or `"partial"`
8
+ - `intent` — `"create"`, `"update"`, or `"validate"` (matches the detected intent)
9
+ - `reason` — required when `status` is `"blocked"`; one-sentence explanation
10
+ - `assumptions` — array of inferred values that were not directly confirmed by inputs
11
+ - `open_questions` — array of items that need a human decision before the artifact can be considered final
12
+
13
+ ## Create
14
+
15
+ ```json
16
+ {
17
+ "status": "complete",
18
+ "intent": "create",
19
+ "design": "{doc_workspace}/DESIGN.md",
20
+ "experience": "{doc_workspace}/EXPERIENCE.md",
21
+ "decision_log": "{doc_workspace}/.decision-log.md",
22
+ "working_artifacts": ["{doc_workspace}/.working/color-themes-1.html"],
23
+ "promoted_artifacts": {
24
+ "mockups": ["{doc_workspace}/mockups/direction-calm-sage.html"],
25
+ "wireframes": ["{doc_workspace}/wireframes/ia-2026-05-19.excalidraw"]
26
+ },
27
+ "open_questions": [],
28
+ "assumptions": [],
29
+ "external_handoffs": [
30
+ {"directive": "Confluence upload", "tool": "corp:confluence_upload", "url": "https://confluence.corp/DESIGN/123", "status": "ok"}
31
+ ]
32
+ }
33
+ ```
34
+
35
+ The `working_artifacts` and `promoted_artifacts` keys are optional and omitted entirely when empty. Headless Create runs default to not enabling creative tools — both keys are typically absent in headless output unless the caller enabled them.
36
+
37
+ ## Update
38
+
39
+ ```json
40
+ {
41
+ "status": "complete",
42
+ "intent": "update",
43
+ "design": "{doc_workspace}/DESIGN.md",
44
+ "experience": "{doc_workspace}/EXPERIENCE.md",
45
+ "decision_log": "{doc_workspace}/.decision-log.md",
46
+ "changes_summary": "1-3 sentences describing what changed and why",
47
+ "conflicts_with_prior_decisions": [],
48
+ "open_questions": [],
49
+ "external_handoffs": [
50
+ {"directive": "Confluence upload", "tool": "corp:confluence_upload", "url": "https://confluence.corp/DESIGN/123", "status": "ok"}
51
+ ]
52
+ }
53
+ ```
54
+
55
+ ## Validate
56
+
57
+ ```json
58
+ {
59
+ "status": "complete",
60
+ "intent": "validate",
61
+ "validation_report": "{doc_workspace}/validation-report.md",
62
+ "findings_summary": {
63
+ "critical": 0,
64
+ "high": 0,
65
+ "medium": 0,
66
+ "low": 0
67
+ },
68
+ "offer_to_update": true
69
+ }
70
+ ```
71
+
72
+ `validation_report` is always written for Validate intent — the path here is required, not optional.
73
+
74
+ ## Blocked
75
+
76
+ ```json
77
+ {
78
+ "status": "blocked",
79
+ "intent": "update",
80
+ "reason": "Change signal ambiguous — could be a brand refresh or an accessibility audit response; no inferred direction"
81
+ }
82
+ ```
83
+
84
+ Always include the intent (best-guess if not certain) and a one-sentence `reason`.
@@ -0,0 +1,29 @@
1
+ # Key Screens Renderer
2
+
3
+ Subagent prompt. Fired at Finalize (or during late Discovery once layout decisions firm up). Produces 1:1 HTML mocks of the load-bearing surfaces so the spine can link to them as visual reference. Spine remains the contract; mocks illustrate.
4
+
5
+ ## Inputs
6
+
7
+ `.decision-log.md`, the current drafts `DESIGN.md` and `EXPERIENCE.md`, `.working/` (especially the chosen color-theme and direction mocks), source PRD. The user names which surfaces to render — typically 2-4: the canonical entry surface, the most complex flow's hero screen, any load-bearing overlay/modal, and (when present) the Week / list / dashboard view.
8
+
9
+ ## What to render
10
+
11
+ One HTML file per screen, at `.working/key-{slug}.html`. Each file: realistic device frame (phone or browser), real product content from the conversation (no lorem), every visible string voice-checked against `.decision-log.md`, all decided tokens applied. Show one canonical state per screen; if a surface has a load-bearing alternate state (focus, error, crisis-card-present), render it as a second column or section in the same file.
12
+
13
+ Inline CSS, system fonts, no JS, no network. The mock must render fully offline. Comment block at the top of the `<style>` notes which spine sections govern this screen so a future reader knows what to check.
14
+
15
+ ## What to return
16
+
17
+ A compact summary to the parent:
18
+ - file path per screen
19
+ - one-line caption per screen ("Today picker at rest; accent on Thought record")
20
+ - which spine sections each mock illustrates (Component Patterns rows, State Patterns rows, Flow steps)
21
+
22
+ The parent, at Finalize "Promote working artifacts," uses this summary to insert inline `mockups/...` links into the relevant spine sections.
23
+
24
+ ## Anti-patterns
25
+
26
+ - Do not invent layout — every composition decision must trace to a `.working/` artifact or a confirmation in `.decision-log.md`. If a layout question is open, the mock is premature.
27
+ - Do not show every screen of every flow — 2-4 load-bearing surfaces, not 14.
28
+ - Do not stage marketing copy. Strings come from `.decision-log.md` and voice rules.
29
+ - Do not introduce a new pattern not in the spine's Component Patterns table. If you need one, log it and ask before rendering.