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.
- package/.claude-plugin/marketplace.json +1 -1
- package/package.json +1 -1
- package/removals.txt +5 -0
- package/src/bmm-skills/1-analysis/bmad-product-brief/SKILL.md +1 -1
- package/src/bmm-skills/2-plan-workflows/bmad-agent-ux-designer/customize.toml +1 -1
- package/src/bmm-skills/2-plan-workflows/bmad-prd/SKILL.md +5 -3
- package/src/bmm-skills/2-plan-workflows/bmad-prd/assets/prd-template.md +4 -7
- package/src/bmm-skills/2-plan-workflows/bmad-prd/assets/prd-validation-checklist.md +4 -4
- package/src/bmm-skills/2-plan-workflows/bmad-prd/references/headless.md +2 -2
- package/src/bmm-skills/2-plan-workflows/bmad-ux/SKILL.md +87 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/color-themes.md +9 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-directions.md +9 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-editorial.md +158 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-mobile.md +93 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-shadcn.md +109 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/excalidraw-wireframe.md +19 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/experience-example-mobile.md +112 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/experience-example-shadcn.md +133 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/headless-schemas.md +84 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/key-screens.md +29 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/validation-report-template.html +319 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/customize.toml +100 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/references/creative-tools.md +19 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/references/design-md-spec.md +50 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/references/headless.md +37 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/references/validate.md +115 -0
- package/src/bmm-skills/module-help.csv +1 -1
- package/src/core-skills/bmad-spec/SKILL.md +126 -0
- package/src/core-skills/bmad-spec/assets/headless-schemas.md +33 -0
- package/src/core-skills/bmad-spec/assets/spec-template.md +49 -0
- package/src/core-skills/bmad-spec/customize.toml +53 -0
- package/src/core-skills/module-help.csv +1 -1
- package/tools/skill-validator.md +1 -19
- package/tools/validate-skills.js +1 -40
- package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/SKILL.md +0 -75
- package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/customize.toml +0 -41
- package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-01-init.md +0 -135
- package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-01b-continue.md +0 -127
- package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-02-discovery.md +0 -190
- package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-03-core-experience.md +0 -217
- package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-04-emotional-response.md +0 -220
- package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-05-inspiration.md +0 -235
- package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-06-design-system.md +0 -253
- package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-07-defining-experience.md +0 -255
- package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-08-visual-foundation.md +0 -225
- package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-09-design-directions.md +0 -225
- package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-10-user-journeys.md +0 -242
- package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-11-component-strategy.md +0 -249
- package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-12-ux-patterns.md +0 -238
- package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-13-responsive-accessibility.md +0 -265
- package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-14-complete.md +0 -177
- package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/ux-design-template.md +0 -13
- package/src/core-skills/bmad-distillator/SKILL.md +0 -177
- package/src/core-skills/bmad-distillator/agents/distillate-compressor.md +0 -116
- package/src/core-skills/bmad-distillator/agents/round-trip-reconstructor.md +0 -68
- package/src/core-skills/bmad-distillator/resources/compression-rules.md +0 -51
- package/src/core-skills/bmad-distillator/resources/distillate-format-reference.md +0 -227
- package/src/core-skills/bmad-distillator/resources/splitting-strategy.md +0 -78
- package/src/core-skills/bmad-distillator/scripts/analyze_sources.py +0 -300
- 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.
|