bmad-method 6.7.1 → 6.8.0

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 (114) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/README.md +10 -0
  3. package/package.json +3 -2
  4. package/removals.txt +8 -0
  5. package/src/bmm-skills/1-analysis/bmad-agent-analyst/SKILL.md +2 -0
  6. package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/SKILL.md +2 -0
  7. package/src/bmm-skills/1-analysis/bmad-document-project/SKILL.md +1 -1
  8. package/src/bmm-skills/1-analysis/bmad-prfaq/SKILL.md +1 -1
  9. package/src/bmm-skills/1-analysis/bmad-product-brief/SKILL.md +5 -2
  10. package/src/bmm-skills/1-analysis/research/bmad-domain-research/SKILL.md +1 -1
  11. package/src/bmm-skills/1-analysis/research/bmad-market-research/SKILL.md +1 -1
  12. package/src/bmm-skills/1-analysis/research/bmad-technical-research/SKILL.md +1 -1
  13. package/src/bmm-skills/2-plan-workflows/bmad-agent-pm/SKILL.md +2 -0
  14. package/src/bmm-skills/2-plan-workflows/bmad-agent-ux-designer/SKILL.md +2 -0
  15. package/src/bmm-skills/2-plan-workflows/bmad-agent-ux-designer/customize.toml +1 -1
  16. package/src/bmm-skills/2-plan-workflows/bmad-prd/SKILL.md +9 -4
  17. package/src/bmm-skills/2-plan-workflows/bmad-prd/assets/prd-template.md +4 -7
  18. package/src/bmm-skills/2-plan-workflows/bmad-prd/assets/prd-validation-checklist.md +4 -4
  19. package/src/bmm-skills/2-plan-workflows/bmad-prd/references/headless.md +2 -2
  20. package/src/bmm-skills/2-plan-workflows/bmad-ux/SKILL.md +90 -0
  21. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/color-themes.md +9 -0
  22. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-directions.md +9 -0
  23. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-editorial.md +158 -0
  24. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-mobile.md +93 -0
  25. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-shadcn.md +109 -0
  26. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/excalidraw-wireframe.md +19 -0
  27. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/experience-example-mobile.md +112 -0
  28. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/experience-example-shadcn.md +133 -0
  29. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/headless-schemas.md +84 -0
  30. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/key-screens.md +29 -0
  31. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/validation-report-template.html +319 -0
  32. package/src/bmm-skills/2-plan-workflows/bmad-ux/customize.toml +100 -0
  33. package/src/bmm-skills/2-plan-workflows/bmad-ux/references/creative-tools.md +19 -0
  34. package/src/bmm-skills/2-plan-workflows/bmad-ux/references/design-md-spec.md +50 -0
  35. package/src/bmm-skills/2-plan-workflows/bmad-ux/references/headless.md +37 -0
  36. package/src/bmm-skills/2-plan-workflows/bmad-ux/references/validate.md +115 -0
  37. package/src/bmm-skills/3-solutioning/bmad-agent-architect/SKILL.md +2 -0
  38. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/SKILL.md +1 -1
  39. package/src/bmm-skills/3-solutioning/bmad-create-architecture/SKILL.md +1 -1
  40. package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/SKILL.md +1 -1
  41. package/src/bmm-skills/3-solutioning/bmad-generate-project-context/SKILL.md +1 -1
  42. package/src/bmm-skills/4-implementation/bmad-agent-dev/SKILL.md +2 -0
  43. package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/SKILL.md +1 -1
  44. package/src/bmm-skills/4-implementation/bmad-code-review/SKILL.md +1 -1
  45. package/src/bmm-skills/4-implementation/bmad-correct-course/SKILL.md +1 -1
  46. package/src/bmm-skills/4-implementation/bmad-create-story/SKILL.md +1 -1
  47. package/src/bmm-skills/4-implementation/bmad-dev-story/SKILL.md +23 -8
  48. package/src/bmm-skills/4-implementation/bmad-investigate/SKILL.md +2 -0
  49. package/src/bmm-skills/4-implementation/bmad-qa-generate-e2e-tests/SKILL.md +1 -1
  50. package/src/bmm-skills/4-implementation/bmad-quick-dev/SKILL.md +1 -1
  51. package/src/bmm-skills/4-implementation/bmad-retrospective/SKILL.md +1 -1
  52. package/src/bmm-skills/4-implementation/bmad-sprint-planning/SKILL.md +2 -1
  53. package/src/bmm-skills/4-implementation/bmad-sprint-status/SKILL.md +2 -1
  54. package/src/bmm-skills/module-help.csv +1 -1
  55. package/src/core-skills/bmad-advanced-elicitation/methods.csv +69 -50
  56. package/src/core-skills/bmad-brainstorming/steps/step-03-technique-execution.md +6 -4
  57. package/src/core-skills/bmad-brainstorming/workflow.md +1 -1
  58. package/src/core-skills/bmad-spec/SKILL.md +129 -0
  59. package/src/core-skills/bmad-spec/assets/headless-schemas.md +33 -0
  60. package/src/core-skills/bmad-spec/assets/spec-template.md +49 -0
  61. package/src/core-skills/bmad-spec/customize.toml +53 -0
  62. package/src/core-skills/module-help.csv +1 -1
  63. package/src/scripts/resolve_customization.py +9 -1
  64. package/src/scripts/tests/test_resolve_customization.py +50 -0
  65. package/tools/bundle-web-bundles.js +117 -0
  66. package/tools/installer/modules/custom-module-manager.js +113 -4
  67. package/tools/installer/modules/official-modules.js +83 -3
  68. package/tools/skill-validator.md +1 -19
  69. package/tools/validate-sidebar-order.js +388 -0
  70. package/tools/validate-skills.js +1 -40
  71. package/web-bundles/README.md +46 -0
  72. package/web-bundles/brainstorming-coach/INSTRUCTIONS.md +86 -0
  73. package/web-bundles/brainstorming-coach/SKILL.md +83 -0
  74. package/web-bundles/brainstorming-coach/brain-methods.csv +62 -0
  75. package/web-bundles/bundles.json +139 -0
  76. package/web-bundles/market-and-industry-research/INSTRUCTIONS.md +88 -0
  77. package/web-bundles/market-and-industry-research/SKILL.md +59 -0
  78. package/web-bundles/prd-coach/INSTRUCTIONS.md +86 -0
  79. package/web-bundles/prd-coach/SKILL.md +101 -0
  80. package/web-bundles/prd-coach/prd-template.md +165 -0
  81. package/web-bundles/prd-coach/prd-validation-checklist.md +135 -0
  82. package/web-bundles/prfaq-coach/INSTRUCTIONS.md +86 -0
  83. package/web-bundles/prfaq-coach/SKILL.md +139 -0
  84. package/web-bundles/product-brief-coach/INSTRUCTIONS.md +86 -0
  85. package/web-bundles/product-brief-coach/SKILL.md +113 -0
  86. package/web-bundles/ux-coach/INSTRUCTIONS.md +92 -0
  87. package/web-bundles/ux-coach/SKILL.md +187 -0
  88. package/web-bundles/ux-coach/ux-validation.md +100 -0
  89. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/SKILL.md +0 -75
  90. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/customize.toml +0 -41
  91. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-01-init.md +0 -135
  92. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-01b-continue.md +0 -127
  93. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-02-discovery.md +0 -190
  94. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-03-core-experience.md +0 -217
  95. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-04-emotional-response.md +0 -220
  96. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-05-inspiration.md +0 -235
  97. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-06-design-system.md +0 -253
  98. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-07-defining-experience.md +0 -255
  99. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-08-visual-foundation.md +0 -225
  100. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-09-design-directions.md +0 -225
  101. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-10-user-journeys.md +0 -242
  102. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-11-component-strategy.md +0 -249
  103. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-12-ux-patterns.md +0 -238
  104. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-13-responsive-accessibility.md +0 -265
  105. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/steps/step-14-complete.md +0 -177
  106. package/src/bmm-skills/2-plan-workflows/bmad-create-ux-design/ux-design-template.md +0 -13
  107. package/src/core-skills/bmad-distillator/SKILL.md +0 -177
  108. package/src/core-skills/bmad-distillator/agents/distillate-compressor.md +0 -116
  109. package/src/core-skills/bmad-distillator/agents/round-trip-reconstructor.md +0 -68
  110. package/src/core-skills/bmad-distillator/resources/compression-rules.md +0 -51
  111. package/src/core-skills/bmad-distillator/resources/distillate-format-reference.md +0 -227
  112. package/src/core-skills/bmad-distillator/resources/splitting-strategy.md +0 -78
  113. package/src/core-skills/bmad-distillator/scripts/analyze_sources.py +0 -300
  114. package/src/core-skills/bmad-distillator/scripts/tests/test_analyze_sources.py +0 -204
@@ -0,0 +1,93 @@
1
+ ---
2
+ name: Quill
3
+ description: Daily writing companion. Calm, intentional, dark-mode-by-default. No streaks, no gamification.
4
+ colors:
5
+ surface-base: '#FAF9F7'
6
+ surface-raised: '#FFFFFF'
7
+ ink-primary: '#1A1B1F'
8
+ ink-secondary: '#6B655A'
9
+ ink-disabled: '#B5AFA5'
10
+ accent: '#A87434'
11
+ border-hairline: '#E8E4DD'
12
+ surface-base-dark: '#1A1B1F'
13
+ surface-raised-dark: '#23252B'
14
+ ink-primary-dark: '#F0EDE8'
15
+ ink-secondary-dark: '#A39E94'
16
+ ink-disabled-dark: '#5E5A53'
17
+ accent-dark: '#D4A574'
18
+ border-hairline-dark: '#2E3036'
19
+ typography:
20
+ title:
21
+ note: 'Platform native — iOS Title 1 · Android Headline Small'
22
+ body:
23
+ note: 'Platform native — iOS Body · Android Body Large'
24
+ meta:
25
+ note: 'Platform native — iOS Footnote · Android Body Small'
26
+ rounded:
27
+ sm: 6px
28
+ md: 12px
29
+ spacing:
30
+ '1': 4px
31
+ '2': 8px
32
+ '3': 12px
33
+ '4': 16px
34
+ '5': 24px
35
+ '6': 32px
36
+ ---
37
+
38
+ ## Brand & Style
39
+
40
+ Quill is designed against the grain of contemporary habit apps. Where most products weaponize the user's calendar with streak counters and re-engagement nudges, Quill insists on something quieter — a daily prompt, a place to write, and the unspoken assurance that today's entry is enough. Showing up is the point, not the streak.
41
+
42
+ The visual language follows. Calm surfaces in warm off-white (light) or deep ink (dark, the default). Generous breathing room. No chromatic color competing for attention except a single warm tobacco that signals save-and-send. Text-first. Hand-on-paper, not buzz-on-screen.
43
+
44
+ ## Colors
45
+
46
+ The palette is restrained on purpose — a writing surface should not compete with the writing.
47
+
48
+ - **Warm White (`#FAF9F7`)** is the primary canvas in light mode. Slightly warm to reduce eye strain and keep the surface from feeling clinical.
49
+ - **Deep Ink (`#1A1B1F`)** is the dark-mode canvas and the primary body text color in light mode. Quill defaults to dark because most writing happens at night.
50
+ - **Tobacco (`#A87434` light / `#D4A574` dark)** is the only chromatic color. Used exclusively for the save indicator and primary action — never for decoration, never for state badges.
51
+ - **Hairline (`#E8E4DD` light / `#2E3036` dark)** separates list items at the lowest possible contrast. Anything heavier feels like UI rather than paper.
52
+
53
+ Avoid: red error fills (Quill is a journal, not a form), gradients (the surface is paper), and saturated accent variants — one accent, used sparingly.
54
+
55
+ ## Typography
56
+
57
+ Platform conventions are the spec. iOS uses Title 1 / Body / Footnote; Android uses Headline Small / Body Large / Body Small. Dynamic type honored at every level — the largest accessibility setting must still render legibly without truncation.
58
+
59
+ Headlines are rare. The Today prompt is set in `title`; everything else is `body` or `meta`. No display sizes, no all-caps labels.
60
+
61
+ ## Layout & Spacing
62
+
63
+ Scale: 4 / 8 / 12 / 16 / 24 / 32 px. The largest gaps land between major surfaces; the smallest sit between tightly related elements. Vertical rhythm follows a hard rule: composer breathes, list items don't.
64
+
65
+ Mobile margins follow platform conventions (iOS 16pt, Android 16dp). Single-column always; modal stacks one level deep, never two.
66
+
67
+ ## Elevation & Depth
68
+
69
+ Quill avoids elevation as a visual device. Cards and composer surfaces sit on `surface-raised`, distinguished from `surface-base` only by tone. Shadows are reserved for the rare moment of literal physical metaphor — never for hierarchy. Hierarchy comes from layout and typography, not shadow.
70
+
71
+ ## Shapes
72
+
73
+ `rounded/sm` (6px) for inputs, list rows, and small surfaces. `rounded/md` (12px) for cards and the composer. Nothing fully rounded; no pills, no perfect circles for surfaces. The aesthetic is paper-with-soft-corners, not iOS-button-pill.
74
+
75
+ Imagery follows container corners exactly.
76
+
77
+ ## Components
78
+
79
+ - **Prompt card** — `surface-raised`. One per day. Today's prompt in `title`. Tap to open composer. No icon, no decoration; the prompt itself is the affordance.
80
+ - **Composer** — Full-screen text view. Clean text field, generous vertical padding, single-line save indicator in the header.
81
+ - **Save indicator** — Text only. Uses `ink-secondary`, never a checkmark icon, never a colored badge.
82
+ - **Entry row** (Library) — Date in `meta`, first line of body in `body` (truncated to one line). Hairline divider only, no fill.
83
+ - **Settings row** — Label left, value or chevron right. Tobacco accent only on destructive confirmations.
84
+
85
+ ## Do's and Don'ts
86
+
87
+ | Do | Don't |
88
+ |---|---|
89
+ | Single accent color, used sparingly on save & primary action | Color-code by sentiment, mood, or category |
90
+ | Text-only state indicators (`Saved.`) | Iconography for state (✓, ⚠, ●) |
91
+ | Hairline dividers at lowest legible contrast | Card shadows, gradient fills, accent fills behind text |
92
+ | Generous vertical rhythm in composer | Compress to fit more on screen |
93
+ | Honor platform conventions for navigation | Override platform nav with custom drawer or hamburger |
@@ -0,0 +1,109 @@
1
+ ---
2
+ name: Drift
3
+ description: Focused task tracker for solo founders and small async teams. shadcn/ui on Next.js + Tailwind; this DESIGN.md specifies the brand-layer delta only.
4
+ colors:
5
+ # Brand overrides on top of shadcn defaults. All unlisted tokens inherit
6
+ # from shadcn (background, foreground, muted, muted-foreground, popover,
7
+ # popover-foreground, card, card-foreground, border, input, ring, destructive).
8
+ primary: '#0F4C81'
9
+ primary-foreground: '#FFFFFF'
10
+ accent: '#F59E0B'
11
+ accent-foreground: '#1A1208'
12
+ primary-dark: '#5C8AC2'
13
+ primary-foreground-dark: '#0A1A2A'
14
+ accent-dark: '#FBC470'
15
+ accent-foreground-dark: '#1A1208'
16
+ typography:
17
+ # Body, label, and muted inherit from shadcn (Geist Sans). Only display is overridden.
18
+ display:
19
+ fontFamily: 'Instrument Serif'
20
+ fontSize: 36px
21
+ fontWeight: '400'
22
+ lineHeight: '1.15'
23
+ letterSpacing: -0.01em
24
+ display-sm:
25
+ fontFamily: 'Instrument Serif'
26
+ fontSize: 24px
27
+ fontWeight: '400'
28
+ lineHeight: '1.2'
29
+ rounded:
30
+ # Tighter than shadcn defaults — Drift reads sharper.
31
+ sm: 4px
32
+ md: 6px
33
+ lg: 8px
34
+ spacing:
35
+ # shadcn / Tailwind defaults inherited; no overrides.
36
+ components:
37
+ button-primary:
38
+ background: '{colors.primary}'
39
+ foreground: '{colors.primary-foreground}'
40
+ radius: '{rounded.md}'
41
+ focus-card:
42
+ background: '{colors.accent}'
43
+ foreground: '{colors.accent-foreground}'
44
+ radius: '{rounded.md}'
45
+ border: 'none'
46
+ command-palette-result-active:
47
+ background: '{colors.accent}'
48
+ foreground: '{colors.accent-foreground}'
49
+ ---
50
+
51
+ ## Brand & Style
52
+
53
+ Drift is a focused task tracker for solo founders and small async teams. The product premise is that *work is a moving thing* — momentum matters more than perfectly groomed backlogs, and the right tool surfaces what you're working on *now* without making you administer a system to find it. The brand expression follows: a serif display moment in an otherwise sober sans-serif surface, a single warm accent that means *this is what's live*, and visual restraint everywhere else.
54
+
55
+ Drift inherits shadcn/ui defaults wholesale. This DESIGN.md specifies only the brand-layer deltas — primary color, accent color, display typography, slightly tighter corners, and a handful of brand-specific components. The 80% of components that ship from shadcn (Button, Card, Dialog, Sheet, Command, Popover, Toast) inherit shadcn's visual specs as-is. Customizing those is *explicitly* against the brand discipline — shadcn's defaults are the contract.
56
+
57
+ ## Colors
58
+
59
+ The Drift palette is two colors of brand-layer plus shadcn defaults for everything else.
60
+
61
+ - **Primary Navy (`#0F4C81` light / `#5C8AC2` dark)** is the brand color. Used on primary buttons, active nav items, link underlines, and the "current week" indicator. Replaces shadcn's default `primary`.
62
+ - **Focus Amber (`#F59E0B` light / `#FBC470` dark)** is the accent. Used exclusively to indicate the task or project currently in focus — the one you're working on *right now*. Never used for chrome, never used decoratively, never used for state badges. Amber means "live."
63
+ - **All other tokens** (`background`, `foreground`, `muted`, `muted-foreground`, `border`, `input`, `ring`, `card`, `popover`, `destructive`) inherit from shadcn defaults. If the brand can't justify overriding a token, it doesn't override it.
64
+
65
+ Avoid: chromatic flourishes, gradient surfaces, custom destructive colors (use shadcn's), more than two brand colors. The discipline is two-colors-and-stop.
66
+
67
+ ## Typography
68
+
69
+ Body / label / caption inherit shadcn's Geist Sans ramp. Only the `display` role is brand-overridden, set in **Instrument Serif** at 36px (24px small variant). The serif moment appears in:
70
+
71
+ - Empty-state hero text on Today and project surfaces
72
+ - Project titles in the project detail header
73
+ - The "Welcome back, {name}" greeting at first session of the day
74
+
75
+ Everything else stays in Geist Sans. The serif is a punctuation mark, not a default voice.
76
+
77
+ ## Layout & Spacing
78
+
79
+ shadcn / Tailwind spacing scale inherited as-is (the 4-based scale: 4, 8, 12, 16, 20, 24, 32, 40, 48, 64). Maximum content width: `max-w-3xl` (768px) — Drift is not a wide-table product, and forcing one-column reading keeps the surface focused.
80
+
81
+ Single-column layout. Sidebar nav on `lg` (1024px+); on smaller viewports, the sidebar becomes a sheet triggered from the top bar.
82
+
83
+ ## Elevation & Depth
84
+
85
+ Inherited from shadcn — subtle shadow on hover/active states, no elevation as a visual hierarchy device. Drift adds nothing on top of this; brand discipline is "shadcn's shadows are correct."
86
+
87
+ ## Shapes
88
+
89
+ Tighter than shadcn defaults: `rounded/sm` (4px) for inputs, `rounded/md` (6px) for cards and buttons, `rounded/lg` (8px) for dialogs and the command palette. The crispness reads "tool" rather than "consumer app." Pill shapes (`rounded/full`) appear only on status badges.
90
+
91
+ ## Components
92
+
93
+ Drift uses the following shadcn components as-is, unchanged: `Button`, `Card`, `Dialog`, `Sheet`, `Popover`, `DropdownMenu`, `Toast`, `Tabs`, `Avatar`, `Separator`. The contract: don't customize these.
94
+
95
+ Brand-layer-overridden components:
96
+
97
+ - **Button (primary variant)** — `{colors.primary}` fill, `{colors.primary-foreground}` text, `{rounded.md}` corner. Other variants (secondary, outline, ghost, destructive) inherit shadcn defaults.
98
+ - **Focus card** — Custom Drift component. The "this is what you're working on now" card on Today and project detail. `{colors.accent}` fill, no border, slightly elevated. Appears at most once per surface.
99
+ - **Command palette result (active)** — Override on shadcn's `Command` component: the highlighted/keyboard-selected result row uses `{colors.accent}` instead of shadcn's default `accent` token. Reinforces "this is what will fire if you hit Enter."
100
+
101
+ ## Do's and Don'ts
102
+
103
+ | Do | Don't |
104
+ |---|---|
105
+ | Inherit shadcn defaults for everything not in the brand layer | Override shadcn's color tokens beyond `primary` and `accent` |
106
+ | Use `{colors.accent}` only for "live / now / in-focus" | Use accent for state, chrome, or hover affordances |
107
+ | `display` typography sparingly — empty states, hero greetings | Set body text in `display` to "make it pretty" |
108
+ | Tighter corners than shadcn (4 / 6 / 8) | Use shadcn's default 6/8/12 (Drift reads sharper) |
109
+ | Single-column layouts inside `max-w-3xl` | Wide multi-column tables (Drift is not a spreadsheet) |
@@ -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.