agemon 0.1.0 → 6.0.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.
- package/README.md +732 -28
- package/assets/skills/architecture/agemon-architecture/LICENSE +21 -0
- package/assets/skills/architecture/agemon-architecture/NOTICE.md +9 -0
- package/assets/skills/architecture/agemon-architecture/SKILL.md +275 -0
- package/assets/skills/code-quality/agemon-clean-code/LICENSE +21 -0
- package/assets/skills/code-quality/agemon-clean-code/NOTICE.md +9 -0
- package/assets/skills/code-quality/agemon-clean-code/SKILL.md +78 -0
- package/assets/skills/code-quality/agemon-house-rules/SKILL.md +103 -0
- package/assets/skills/commit/agemon-commit/SKILL.md +87 -0
- package/assets/skills/design/agemon-design/LICENSE +21 -0
- package/assets/skills/design/agemon-design/NOTICE.md +9 -0
- package/assets/skills/design/agemon-design/SKILL.md +391 -0
- package/assets/skills/design/agemon-design/references/accessibility.md +182 -0
- package/assets/skills/design/agemon-design/references/agents.md +63 -0
- package/assets/skills/design/agemon-design/references/ai-chat.md +158 -0
- package/assets/skills/design/agemon-design/references/brief.md +186 -0
- package/assets/skills/design/agemon-design/references/color.md +216 -0
- package/assets/skills/design/agemon-design/references/components.md +91 -0
- package/assets/skills/design/agemon-design/references/copy.md +300 -0
- package/assets/skills/design/agemon-design/references/craft-intent.md +160 -0
- package/assets/skills/design/agemon-design/references/dashboard.md +131 -0
- package/assets/skills/design/agemon-design/references/dataviz.md +197 -0
- package/assets/skills/design/agemon-design/references/finish-bar.md +243 -0
- package/assets/skills/design/agemon-design/references/forms.md +192 -0
- package/assets/skills/design/agemon-design/references/heuristics.md +403 -0
- package/assets/skills/design/agemon-design/references/inspiration.md +287 -0
- package/assets/skills/design/agemon-design/references/layout.md +236 -0
- package/assets/skills/design/agemon-design/references/loops.md +155 -0
- package/assets/skills/design/agemon-design/references/metadata.md +98 -0
- package/assets/skills/design/agemon-design/references/modern-css.md +448 -0
- package/assets/skills/design/agemon-design/references/motion.md +434 -0
- package/assets/skills/design/agemon-design/references/personas.md +206 -0
- package/assets/skills/design/agemon-design/references/principles-catalog.md +299 -0
- package/assets/skills/design/agemon-design/references/recipe-auth.md +88 -0
- package/assets/skills/design/agemon-design/references/recipe-dashboard.md +130 -0
- package/assets/skills/design/agemon-design/references/recipe-landing.md +122 -0
- package/assets/skills/design/agemon-design/references/responsive.md +168 -0
- package/assets/skills/design/agemon-design/references/review.md +340 -0
- package/assets/skills/design/agemon-design/references/sound.md +150 -0
- package/assets/skills/design/agemon-design/references/spec.md +123 -0
- package/assets/skills/design/agemon-design/references/stack.md +522 -0
- package/assets/skills/design/agemon-design/references/state-design.md +188 -0
- package/assets/skills/design/agemon-design/references/themes.md +229 -0
- package/assets/skills/design/agemon-design/references/tokens.md +350 -0
- package/assets/skills/design/agemon-design/references/typography.md +246 -0
- package/assets/skills/design/agemon-design-dashboard/LICENSE +21 -0
- package/assets/skills/design/agemon-design-dashboard/NOTICE.md +9 -0
- package/assets/skills/design/agemon-design-dashboard/SKILL.md +113 -0
- package/assets/skills/design/agemon-design-editorial/LICENSE +21 -0
- package/assets/skills/design/agemon-design-editorial/NOTICE.md +9 -0
- package/assets/skills/design/agemon-design-editorial/SKILL.md +98 -0
- package/assets/skills/design/agemon-design-minimal/LICENSE +21 -0
- package/assets/skills/design/agemon-design-minimal/NOTICE.md +9 -0
- package/assets/skills/design/agemon-design-minimal/SKILL.md +97 -0
- package/assets/skills/geo-seo/geo/LICENSE +21 -0
- package/assets/skills/geo-seo/geo/NOTICE.md +18 -0
- package/assets/skills/geo-seo/geo/SKILL.md +145 -0
- package/assets/skills/geo-seo/geo-audit/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-audit/NOTICE.md +17 -0
- package/assets/skills/geo-seo/geo-audit/SKILL.md +371 -0
- package/assets/skills/geo-seo/geo-audit/references/ai-visibility.md +233 -0
- package/assets/skills/geo-seo/geo-audit/references/content.md +329 -0
- package/assets/skills/geo-seo/geo-audit/references/platform-analysis.md +294 -0
- package/assets/skills/geo-seo/geo-audit/references/schema.md +383 -0
- package/assets/skills/geo-seo/geo-audit/references/technical.md +368 -0
- package/assets/skills/geo-seo/geo-brand-mentions/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-brand-mentions/NOTICE.md +15 -0
- package/assets/skills/geo-seo/geo-brand-mentions/SKILL.md +459 -0
- package/assets/skills/geo-seo/geo-citability/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-citability/NOTICE.md +14 -0
- package/assets/skills/geo-seo/geo-citability/SKILL.md +320 -0
- package/assets/skills/geo-seo/geo-content/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-content/NOTICE.md +14 -0
- package/assets/skills/geo-seo/geo-content/SKILL.md +352 -0
- package/assets/skills/geo-seo/geo-crawlers/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-crawlers/NOTICE.md +15 -0
- package/assets/skills/geo-seo/geo-crawlers/SKILL.md +388 -0
- package/assets/skills/geo-seo/geo-llmstxt/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-llmstxt/NOTICE.md +14 -0
- package/assets/skills/geo-seo/geo-llmstxt/SKILL.md +433 -0
- package/assets/skills/geo-seo/geo-platform-optimizer/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-platform-optimizer/NOTICE.md +14 -0
- package/assets/skills/geo-seo/geo-platform-optimizer/SKILL.md +282 -0
- package/assets/skills/geo-seo/geo-report/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-report/NOTICE.md +14 -0
- package/assets/skills/geo-seo/geo-report/SKILL.md +406 -0
- package/assets/skills/geo-seo/geo-report-pdf/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-report-pdf/NOTICE.md +20 -0
- package/assets/skills/geo-seo/geo-report-pdf/SKILL.md +153 -0
- package/assets/skills/geo-seo/geo-report-pdf/templates/geo-report-template.html +548 -0
- package/assets/skills/geo-seo/geo-schema/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-schema/NOTICE.md +16 -0
- package/assets/skills/geo-seo/geo-schema/SKILL.md +396 -0
- package/assets/skills/geo-seo/geo-technical/LICENSE +21 -0
- package/assets/skills/geo-seo/geo-technical/NOTICE.md +15 -0
- package/assets/skills/geo-seo/geo-technical/SKILL.md +566 -0
- package/assets/skills/performance/agemon-performance/NOTICE.md +1 -0
- package/assets/skills/performance/agemon-performance/SKILL.md +76 -0
- package/assets/skills/security/agemon-security/LICENSE +21 -0
- package/assets/skills/security/agemon-security/NOTICE.md +8 -0
- package/assets/skills/security/agemon-security/SKILL.md +356 -0
- package/assets/skills/self-review/agemon-review-intake/LICENSE +21 -0
- package/assets/skills/self-review/agemon-review-intake/NOTICE.md +9 -0
- package/assets/skills/self-review/agemon-review-intake/SKILL.md +205 -0
- package/assets/skills/self-review/agemon-review-request/LICENSE +21 -0
- package/assets/skills/self-review/agemon-review-request/NOTICE.md +9 -0
- package/assets/skills/self-review/agemon-review-request/SKILL.md +104 -0
- package/assets/skills/self-review/agemon-review-request/code-reviewer.md +188 -0
- package/assets/skills/self-review/agemon-root-cause/LICENSE +21 -0
- package/assets/skills/self-review/agemon-root-cause/NOTICE.md +10 -0
- package/assets/skills/self-review/agemon-root-cause/SKILL.md +283 -0
- package/assets/skills/self-review/agemon-root-cause/condition-based-waiting-example.ts +158 -0
- package/assets/skills/self-review/agemon-root-cause/condition-based-waiting.md +115 -0
- package/assets/skills/self-review/agemon-root-cause/defense-in-depth.md +122 -0
- package/assets/skills/self-review/agemon-root-cause/find-polluter.sh +72 -0
- package/assets/skills/self-review/agemon-root-cause/root-cause-tracing.md +169 -0
- package/assets/skills/self-review/agemon-root-cause/test-academic.md +14 -0
- package/assets/skills/self-review/agemon-root-cause/test-pressure-1.md +58 -0
- package/assets/skills/self-review/agemon-root-cause/test-pressure-2.md +68 -0
- package/assets/skills/self-review/agemon-root-cause/test-pressure-3.md +69 -0
- package/assets/skills/self-review/agemon-verify-before-done/LICENSE +21 -0
- package/assets/skills/self-review/agemon-verify-before-done/NOTICE.md +9 -0
- package/assets/skills/self-review/agemon-verify-before-done/SKILL.md +120 -0
- package/assets/skills/team-lead/agemon-plan-rfc/SKILL.md +317 -0
- package/assets/skills/team-lead/prd-generator/SKILL.md +437 -0
- package/assets/skills/team-lead/skill-headofit-audit/SKILL.md +72 -0
- package/assets/skills/team-lead/skill-incident-rca/SKILL.md +66 -0
- package/assets/skills/team-lead/skill-meeting-lifecycle/SKILL.md +63 -0
- package/assets/skills/team-lead/skill-obsidian-vault-sync/SKILL.md +69 -0
- package/assets/skills/team-lead/skill-prd-decomposer/SKILL.md +71 -0
- package/assets/skills/team-lead/skill-sec-check/SKILL.md +70 -0
- package/assets/skills/team-lead/skill-task-extractor/SKILL.md +79 -0
- package/assets/skills/team-lead/skill-tech-spike/SKILL.md +57 -0
- package/assets/skills/team-lead/skill-techlead-reviewer/SKILL.md +81 -0
- package/assets/tools/code-review-graph-constraints.txt +1418 -0
- package/assets/tools/package-lock.json +111 -0
- package/assets/tools/package.json +6 -0
- package/dist/chunk-5LATHJYU.js +4026 -0
- package/dist/chunk-5LATHJYU.js.map +1 -0
- package/dist/fake-subprocess-2BETWZVZ.js +666 -0
- package/dist/fake-subprocess-2BETWZVZ.js.map +1 -0
- package/dist/index.js +21101 -1956
- package/dist/index.js.map +1 -1
- package/package.json +30 -17
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Sound Design for UI
|
|
2
|
+
|
|
3
|
+
Web Audio API best practices, UI sound appropriateness, and implementation.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## When Sound is Appropriate
|
|
8
|
+
|
|
9
|
+
| Interaction | Sound? | Reason |
|
|
10
|
+
|-------------|--------|--------|
|
|
11
|
+
| Payment success | Yes | Significant confirmation |
|
|
12
|
+
| Form submission | Yes | User needs assurance |
|
|
13
|
+
| Error state | Yes | Can't be overlooked |
|
|
14
|
+
| Notification | Yes | User may not be looking |
|
|
15
|
+
| Significant button | Maybe | Only for important actions |
|
|
16
|
+
| Typing | **No** | Too frequent |
|
|
17
|
+
| Hover | **No** | Decorative only |
|
|
18
|
+
| Scroll | **No** | Too frequent |
|
|
19
|
+
| Navigation | **No** | Keyboard nav would be noisy |
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Accessibility Rules
|
|
24
|
+
|
|
25
|
+
- Every audio cue MUST have a visual equivalent — sound never replaces visual feedback
|
|
26
|
+
- Provide explicit toggle to disable sounds in settings
|
|
27
|
+
- Respect `prefers-reduced-motion` as a default proxy for sound sensitivity, AND provide an explicit independent sound toggle. **Why caveat:** the proxy is imperfect — some users tolerate visual motion but not audio (vestibular conditions, hearing aids), some users tolerate audio but not motion. Always offer a sound toggle separate from motion preference; reduced-motion is the default-off, not the only signal.
|
|
28
|
+
- Allow volume adjustment independent of system volume
|
|
29
|
+
- Never add sound to high-frequency interactions
|
|
30
|
+
- Sound should inform, not punish — avoid harsh sounds for mistakes
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Web Audio API Implementation
|
|
35
|
+
|
|
36
|
+
### Single AudioContext
|
|
37
|
+
|
|
38
|
+
Single AudioContext per page. Never create new AudioContext per sound. **Why critical:** browsers limit AudioContext instances (typically 6 per page); exhausting them silently fails new sounds. A shared AudioContext also synchronizes timing across rapid-fire UI feedback (typing keystrokes, button clicks within 50ms) — independent contexts desync.
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
let audioContext: AudioContext | null = null;
|
|
42
|
+
function getAudioContext(): AudioContext {
|
|
43
|
+
if (!audioContext) audioContext = new AudioContext();
|
|
44
|
+
return audioContext;
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Resume Suspended Context
|
|
49
|
+
```ts
|
|
50
|
+
if (ctx.state === "suspended") ctx.resume();
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Clean Up Nodes
|
|
54
|
+
```ts
|
|
55
|
+
source.onended = () => { source.disconnect(); gain.disconnect(); };
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Sound Design Patterns
|
|
61
|
+
|
|
62
|
+
### Clicks/Taps (Percussion) — Use Filtered Noise
|
|
63
|
+
```ts
|
|
64
|
+
const buffer = ctx.createBuffer(1, ctx.sampleRate * 0.008, ctx.sampleRate);
|
|
65
|
+
const data = buffer.getChannelData(0);
|
|
66
|
+
for (let i = 0; i < data.length; i++) {
|
|
67
|
+
data[i] = (Math.random() * 2 - 1) * Math.exp(-i / 50);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const filter = ctx.createBiquadFilter();
|
|
71
|
+
filter.type = "bandpass";
|
|
72
|
+
filter.frequency.value = 4000; // 3000-6000Hz range
|
|
73
|
+
filter.Q.value = 3; // 2-5 for focused but not harsh
|
|
74
|
+
source.connect(filter).connect(gain).connect(ctx.destination);
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Confirmations/Pops (Tonal) — Use Oscillators
|
|
78
|
+
```ts
|
|
79
|
+
const osc = ctx.createOscillator();
|
|
80
|
+
osc.frequency.setValueAtTime(400, t);
|
|
81
|
+
osc.frequency.exponentialRampToValueAtTime(600, t + 0.04);
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Envelope
|
|
85
|
+
|
|
86
|
+
Use exponential decay (not linear) for sound envelopes. **Why:** linear decay produces an audible click as the envelope hits zero — the abrupt stop creates a high-frequency artifact at the cutoff. Exponential decay mimics natural acoustic decay (room reverberation, string damping) — it reaches zero asymptotically, no click.
|
|
87
|
+
|
|
88
|
+
```ts
|
|
89
|
+
gain.gain.setValueAtTime(0.3, t); // set initial value first
|
|
90
|
+
gain.gain.exponentialRampToValueAtTime(0.001, t + 0.05); // never target 0
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Parameters
|
|
96
|
+
|
|
97
|
+
| Parameter | Range | Notes |
|
|
98
|
+
|-----------|-------|-------|
|
|
99
|
+
| Click duration | 5-15ms | Quick and percussive |
|
|
100
|
+
| Filter frequency | 3000-6000Hz | For click sounds |
|
|
101
|
+
| Filter Q | 2-5 | Focused but not harsh |
|
|
102
|
+
| Gain | ≤ 1.0 | Prevent clipping |
|
|
103
|
+
| Default volume | 0.3 | Subtle, not loud |
|
|
104
|
+
| "too harsh" | → lower filter frequency, reduce Q | |
|
|
105
|
+
| "too muffled" | → higher filter frequency | |
|
|
106
|
+
| "too long" | → shorter duration, faster decay | |
|
|
107
|
+
| "cuts off" | → use exponential decay | |
|
|
108
|
+
| "more mechanical" | → higher Q, faster decay | |
|
|
109
|
+
| "softer" | → lower gain, triangle wave | |
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Weight Matching
|
|
114
|
+
|
|
115
|
+
Sound weight should match action importance:
|
|
116
|
+
- **Subtle click** for toggle switches
|
|
117
|
+
- **Soft pop** for adding items
|
|
118
|
+
- **Rich confirmation** for purchases/payments
|
|
119
|
+
- **Brief alert** for errors
|
|
120
|
+
|
|
121
|
+
Sound duration should match action duration:
|
|
122
|
+
- **50ms** for clicks/taps
|
|
123
|
+
- **100-200ms** for confirmations
|
|
124
|
+
- **Longer** for uploads/completions
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Preloading
|
|
129
|
+
|
|
130
|
+
```ts
|
|
131
|
+
const sounds = {
|
|
132
|
+
success: new Audio("/sounds/success.mp3"),
|
|
133
|
+
error: new Audio("/sounds/error.mp3"),
|
|
134
|
+
};
|
|
135
|
+
Object.values(sounds).forEach(audio => audio.load());
|
|
136
|
+
|
|
137
|
+
// Reset before replay for rapid triggering
|
|
138
|
+
function play(sound: HTMLAudioElement) {
|
|
139
|
+
sound.currentTime = 0;
|
|
140
|
+
sound.play();
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Cross-Refs
|
|
147
|
+
|
|
148
|
+
- `accessibility.md` — the full reduced-motion contract; `prefers-reduced-motion` as a sound-sensitivity proxy lives there.
|
|
149
|
+
- `motion.md` — sound duration should match the duration of the action it accompanies, the same pairing rule as interaction timing.
|
|
150
|
+
- `state-design.md` — sound cues for state transitions (error, success) must never be the only signal; pair with the visual state.
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Composition Spec
|
|
2
|
+
|
|
3
|
+
Defines `.ui-craft/spec.md` — the durable "what" between brief (why) and build (how). Created by `/shape` Step 6, consumed by `/sddesign` and `/craft`. Sits beside `brief.md` in `.ui-craft/` and is committed to the repo.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## The Spec Format
|
|
8
|
+
|
|
9
|
+
One file. Per-surface `## Surface: <name>` sections. Append-mostly — new surfaces add a new section; existing sections are only edited when a composition decision changes. No JSX, no component code — this is a design document, not implementation.
|
|
10
|
+
|
|
11
|
+
Multiple surfaces coexist in a single file, just as a brief covers one project with multiple concerns in one place.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Per-Surface Template
|
|
16
|
+
|
|
17
|
+
Copy this block for each new surface. Fill every subsection — leave none empty or the acceptance bar is undefined.
|
|
18
|
+
|
|
19
|
+
```markdown
|
|
20
|
+
## Surface: <name>
|
|
21
|
+
|
|
22
|
+
### Composition
|
|
23
|
+
|
|
24
|
+
**Recipe:** `recipe-<type>.md` → <Variant name>
|
|
25
|
+
**Why:** <one line citing the brief principle or constraint that drove this choice>
|
|
26
|
+
|
|
27
|
+
### Layout skeleton
|
|
28
|
+
|
|
29
|
+
Desktop
|
|
30
|
+
┌──────────────────────────────────────────────┐
|
|
31
|
+
│ [region] [region] [region] │
|
|
32
|
+
├──────────────────────────────────────────────┤
|
|
33
|
+
│ ┌────────────────┐ ┌───────────────────┐ │
|
|
34
|
+
│ │ <content area> │ │ <content area> │ │
|
|
35
|
+
│ └────────────────┘ └───────────────────┘ │
|
|
36
|
+
└──────────────────────────────────────────────┘
|
|
37
|
+
|
|
38
|
+
Mobile
|
|
39
|
+
┌──────────────────┐
|
|
40
|
+
│ [region] [☰] │
|
|
41
|
+
├──────────────────┤
|
|
42
|
+
│ <content area> │
|
|
43
|
+
└──────────────────┘
|
|
44
|
+
|
|
45
|
+
### Component inventory
|
|
46
|
+
|
|
47
|
+
| Region | Component | Contract ref |
|
|
48
|
+
|--------|-----------|--------------|
|
|
49
|
+
| header | Nav bar | components.md → Nav bar |
|
|
50
|
+
| hero | Headline + CTA | components.md → Buttons |
|
|
51
|
+
| … | … | … |
|
|
52
|
+
|
|
53
|
+
### State lattice
|
|
54
|
+
|
|
55
|
+
| State | Required / Optional / N-A | Notes |
|
|
56
|
+
|-------|--------------------------|-------|
|
|
57
|
+
| idle | Required | default, data present |
|
|
58
|
+
| loading | Required | skeletons mirror final layout |
|
|
59
|
+
| empty | Required | first-run or no data |
|
|
60
|
+
| error | Required | cause + recovery action |
|
|
61
|
+
| partial | Optional — only if widgets can fail independently | |
|
|
62
|
+
| conflict | N-A | no collaborative editing on this surface |
|
|
63
|
+
| offline | Optional — only if writes are queued | |
|
|
64
|
+
| success | Required | confirmation after primary action |
|
|
65
|
+
|
|
66
|
+
See [state-design.md](state-design.md) for state contracts and CRAFT_LEVEL thresholds.
|
|
67
|
+
|
|
68
|
+
### Acceptance bar
|
|
69
|
+
|
|
70
|
+
Drawn from the recipe's acceptance criteria. All items must be green before build reports done.
|
|
71
|
+
|
|
72
|
+
- [ ] <recipe checklist item 1>
|
|
73
|
+
- [ ] <recipe checklist item 2>
|
|
74
|
+
- [ ] <recipe checklist item 3>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## How the Spec Gets Used
|
|
80
|
+
|
|
81
|
+
**Discovery phase** — read `.ui-craft/spec.md` after `brief.md`. If the surface already has a spec section, it is the composition ground truth; do not re-derive from scratch.
|
|
82
|
+
|
|
83
|
+
**Build phase** — `/craft <surface>` builds against the acceptance bar in the surface's spec section. Every item in the acceptance bar must be green before the build reports done.
|
|
84
|
+
|
|
85
|
+
**Finalize phase** — `/finalize` verifies against the acceptance bar and the brief's learned constraints (§6). The acceptance bar is the surface-level definition of done; the brief's §6 constraints are the project-level floor.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## When to Update
|
|
90
|
+
|
|
91
|
+
Update a spec section when any of these change:
|
|
92
|
+
|
|
93
|
+
- **Composition changes** — different recipe variant selected.
|
|
94
|
+
- **New surface** — append a new `## Surface: <name>` section. Never overwrite an existing section.
|
|
95
|
+
- **Recipe swap** — the recipe file changed and the acceptance bar items shift.
|
|
96
|
+
- **Learned constraint overrides a composition choice** — note it in the Composition subsection, citing the brief §6 entry.
|
|
97
|
+
|
|
98
|
+
Append-mostly. When deprecating a composition choice within a surface, mark the old entry as:
|
|
99
|
+
|
|
100
|
+
```markdown
|
|
101
|
+
~~**Recipe:** [recipe-landing.md](recipe-landing.md) → Product-forward~~ — deprecated 2026-06-24, swapped to Message-forward per brief §6 constraint (no hero visuals).
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Never delete past composition records — the spec is a log, not a config file.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## File Location and Git
|
|
109
|
+
|
|
110
|
+
Commit `.ui-craft/spec.md` to the repo. It belongs in version control alongside the code it governs — losing it between sessions means losing the composition rationale.
|
|
111
|
+
|
|
112
|
+
The `.ui-craft/` directory is the project's design decision store:
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
.ui-craft/
|
|
116
|
+
├── brief.md # why — principles, user, success metric
|
|
117
|
+
├── spec.md # what — chosen composition, layout, inventory, acceptance bar
|
|
118
|
+
└── (tokens live in the project's own token files)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
`brief.md` and `spec.md` are companions: the brief anchors principles; the spec records how those principles translated into a specific surface composition. When they conflict, the brief wins — a spec choice that violates a brief §6 constraint must be updated to comply.
|
|
122
|
+
|
|
123
|
+
See `../SKILL.md` for routing and when to run `/sddesign` vs `/craft`.
|