get-shit-pretty 0.5.2 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gsp",
3
- "version": "0.5.2",
3
+ "version": "0.6.1",
4
4
  "description": "Design engineering system for AI coding agents. Brand identity + design projects, from strategy to code.",
5
5
  "author": {
6
6
  "name": "jubscodes",
package/README.md CHANGED
@@ -240,7 +240,7 @@ GSP works across all major AI coding tools. The installer converts Claude Code's
240
240
 
241
241
  | Feature | Claude Code | OpenCode | Gemini CLI | Codex CLI |
242
242
  |---------|:-----------:|:--------:|:----------:|:---------:|
243
- | Skills | 24 | 24 | 24 | 24 |
243
+ | Skills | 30 | 30 | 30 | 30 |
244
244
  | Agents | 15 | 15 | 15 (experimental) | — |
245
245
  | Slash syntax | `/gsp:command` | `/gsp-command` | `/gsp:command` | `$gsp-command` |
246
246
  | Prompts + templates | Yes | Yes | Yes | Yes |
@@ -329,8 +329,7 @@ get-shit-pretty/
329
329
  ├── scripts/ Hook scripts and utilities
330
330
  ├── gsp/ Source of truth for all content
331
331
  │ ├── agents/ 15 subagents (gsp-*.md)
332
- │ ├── commands/gsp/ 20 slash commands (backward compat)
333
- │ ├── skills/ 24 skills (*/SKILL.md — primary)
332
+ │ ├── skills/ 30 skills (*/SKILL.md)
334
333
  │ ├── hooks/ Plugin-level hooks (hooks.json)
335
334
  │ ├── prompts/ 12 agent system prompts
336
335
  │ ├── templates/ Config, state, brief, roadmap templates
@@ -343,7 +342,7 @@ get-shit-pretty/
343
342
  └── CLAUDE.md AI agent instructions for this repo
344
343
  ```
345
344
 
346
- Skills take precedence over commands when both exist. The installer reads from `gsp/` and writes to each runtime's config directory.
345
+ The installer reads from `gsp/` and writes to each runtime's config directory.
347
346
 
348
347
  ---
349
348
 
package/bin/install.js CHANGED
@@ -915,6 +915,7 @@ function copyOpencodeSkills(srcDir, destDir, pathPrefix) {
915
915
  content = content.replace(/\.\/\.claude\//g, './.opencode/');
916
916
  content = convertClaudeSkillToOpencode(content, skillName);
917
917
  fs.writeFileSync(path.join(skillDest, 'SKILL.md'), content);
918
+ copySiblingFiles(path.join(srcDir, dir.name), skillDest, pathPrefix);
918
919
  count++;
919
920
  }
920
921
 
@@ -946,6 +947,7 @@ function copyCodexSkillsFromSource(srcDir, destDir, pathPrefix) {
946
947
  content = content.replace(/~\/\.claude\//g, pathPrefix);
947
948
  content = convertClaudeSkillToCodex(content, skillName);
948
949
  fs.writeFileSync(path.join(skillDest, 'SKILL.md'), content);
950
+ copySiblingFiles(path.join(srcDir, dir.name), skillDest, pathPrefix);
949
951
  count++;
950
952
  }
951
953
  return count;
@@ -986,6 +988,7 @@ function copyGeminiSkills(srcDir, destDir, pathPrefix) {
986
988
  content = content.replace(/\.\/\.claude\//g, './.gemini/');
987
989
  content = convertClaudeSkillToGemini(content, skillName);
988
990
  fs.writeFileSync(path.join(skillDest, 'SKILL.md'), content);
991
+ copySiblingFiles(path.join(srcDir, dir.name), skillDest, pathPrefix);
989
992
  count++;
990
993
  }
991
994
  return count;
@@ -1030,6 +1033,24 @@ function copyAgents(srcDir, destDir, pathPrefix, runtime, { clean = false } = {}
1030
1033
  * Copy Claude Code skills (global install path — no body conversion, only path replacement).
1031
1034
  * Returns skill count.
1032
1035
  */
1036
+ /**
1037
+ * Recursively copy sibling files in a skill directory (everything except SKILL.md).
1038
+ * All sibling files are copied verbatim — no path replacement applied.
1039
+ */
1040
+ function copySiblingFiles(srcDir, destDir, pathPrefix) {
1041
+ for (const entry of fs.readdirSync(srcDir, { withFileTypes: true })) {
1042
+ if (entry.name === 'SKILL.md') continue; // already handled by caller
1043
+ const srcPath = path.join(srcDir, entry.name);
1044
+ const destPath = path.join(destDir, entry.name);
1045
+ if (entry.isDirectory()) {
1046
+ fs.mkdirSync(destPath, { recursive: true });
1047
+ copySiblingFiles(srcPath, destPath, pathPrefix);
1048
+ } else {
1049
+ fs.copyFileSync(srcPath, destPath);
1050
+ }
1051
+ }
1052
+ }
1053
+
1033
1054
  function copyClaudeSkills(srcDir, destDir, pathPrefix) {
1034
1055
  fs.mkdirSync(destDir, { recursive: true });
1035
1056
 
@@ -1045,11 +1066,13 @@ function copyClaudeSkills(srcDir, destDir, pathPrefix) {
1045
1066
  if (!dir.isDirectory()) continue;
1046
1067
  const skillMd = path.join(srcDir, dir.name, 'SKILL.md');
1047
1068
  if (!fs.existsSync(skillMd)) continue;
1048
- const destSkillDir = path.join(destDir, dir.name);
1069
+ const skillName = dir.name.startsWith('gsp-') ? dir.name : `gsp-${dir.name}`;
1070
+ const destSkillDir = path.join(destDir, skillName);
1049
1071
  fs.mkdirSync(destSkillDir, { recursive: true });
1050
1072
  let content = fs.readFileSync(skillMd, 'utf8');
1051
1073
  content = content.replace(/~\/\.claude\//g, pathPrefix);
1052
1074
  fs.writeFileSync(path.join(destSkillDir, 'SKILL.md'), content);
1075
+ copySiblingFiles(path.join(srcDir, dir.name), destSkillDir, pathPrefix);
1053
1076
  skillCount++;
1054
1077
  }
1055
1078
  return skillCount;
@@ -1704,6 +1727,9 @@ function finishInstall(settingsPath, settings, statuslineCommand, shouldInstallS
1704
1727
  if (!onboardingShown && !hasQuiet) {
1705
1728
  onboardingShown = true;
1706
1729
  console.log(`
1730
+ ${c.secondary}Design engineering for AI coding tools.${c.reset}
1731
+ ${c.secondary}Brand strategy, visual identity, design systems, UI — built by agents.${c.reset}
1732
+
1707
1733
  ${c.bold}Get started:${c.reset}
1708
1734
  ${c.accent}${newCmd}${c.reset} ${c.secondary}start here — brand, project, or both${c.reset}
1709
1735
  ${c.accent}${helpCmd}${c.reset} ${c.secondary}all commands${c.reset}
@@ -50,7 +50,7 @@ Build a single screen. You receive only that screen's design chunk and its refer
50
50
  ### `full`
51
51
  Legacy mode — build everything in one pass. Used as backward-compatible default.
52
52
 
53
- **Chunk-aware mode:** When chunks are provided instead of full monoliths (screen chunks from `design/`, brief chunks from `brief/`, research specs from `research/`, component chunks from brand `patterns/components/`), work with the focused context. Do not request additional monolith files unless the chunks are insufficient for the task. This keeps your context lean and focused on the specific screen being built.
53
+ **Chunk-aware mode:** Work with the chunk context provided. Do not request additional files unless the chunks are insufficient for the task. This keeps your context lean and focused on the specific screen being built.
54
54
 
55
55
  **Revision mode:** When `review/issues.md` is provided, you are re-entering the build phase to address QA issues. Read the issues, fix them in the codebase, and update BUILD-LOG.md with the revision.
56
56
  </role>
@@ -5,10 +5,18 @@ Guide brief-gathering conversations — used by `/gsp:start` for both brand brie
5
5
 
6
6
  ---
7
7
 
8
+ ## Core Rules
9
+
10
+ **One decision per question.** Every question must be its own `AskUserQuestion` call. Never group multiple questions into a single message. Ask one thing, wait for the answer, use it to inform the next question.
11
+
12
+ **Never re-ask what the user already answered.** If information was gathered in a prior phase and is available in BRIEF.md or other artifacts, use it — don't ask again. If you need to validate stale information, confirm it ("I see X from earlier — still accurate?") rather than asking from scratch. Each phase reads the prior phase's output; the user should never feel like they're repeating themselves.
13
+
14
+ ---
15
+
8
16
  ## Question Flow
9
17
 
10
18
  ### Phase 1: Context (Who & Why)
11
- Start broad, then narrow.
19
+ Start broad, then narrow. Each is a separate `AskUserQuestion`.
12
20
 
13
21
  1. **What** is this project? (app, website, rebrand, campaign)
14
22
  2. **Who** is it for? (audience demographics, psychographics)
@@ -41,11 +49,11 @@ Start broad, then narrow.
41
49
 
42
50
  ## Questioning Techniques
43
51
 
44
- ### Progressive Disclosure
45
- Don't ask all 18 questions at once. Group into 3-4 conversational rounds:
46
- - Round 1: Context + Brand (questions 1-8)
47
- - Round 2: Scope + Constraints (questions 9-16)
48
- - Round 3: Success + Gaps (questions 17-18 + follow-ups)
52
+ ### One at a Time
53
+ Ask each question as its own `AskUserQuestion` call. Wait for the answer before asking the next. Use each answer to decide whether to skip, reframe, or drill into the next question.
54
+
55
+ ### Adapt and Skip
56
+ Don't follow the list rigidly. If an early answer reveals enough context, skip later questions. If an answer is surprising, follow up before moving on. The sequence is a guide, not a script.
49
57
 
50
58
  ### Follow-Up Patterns
51
59
  - **"Tell me more about..."** — When an answer is surface-level
@@ -66,9 +74,9 @@ Don't ask what you can infer:
66
74
  - Reserve prose questions for open-ended exploration where you genuinely don't know the option space
67
75
 
68
76
  ### When to Use `AskUserQuestion` vs Prose
69
- - **Use `AskUserQuestion`** for: picking between defined directions (archetypes, styles, brands), yes/no/which decisions, selecting from existing items (brands, projects), mood/tone/size preferences
70
- - **Use prose** for: open-ended creative input ("tell me about your brand"), gathering context you can't predict ("what problem does this solve?"), follow-up clarifications where the answer space is unbounded
71
- - **Rule of thumb:** if you can write 2-4 meaningful options with descriptions, use `AskUserQuestion`. If you'd be guessing at what the options should be, use prose.
77
+ - **Always use `AskUserQuestion`** this is the default for every user-facing question
78
+ - **Prose is only for** follow-up clarifications where the answer space is truly unbounded and you cannot write meaningful options
79
+ - **Rule of thumb:** if you can write 2-4 meaningful options with descriptions, use `AskUserQuestion`. If you'd be guessing at what the options should be, still use `AskUserQuestion` with an open-ended framing.
72
80
 
73
81
  ### Knowing When You Have Enough
74
82
  A brief is complete when you can answer:
@@ -1,42 +1,38 @@
1
1
  ---
2
2
  name: accessibility
3
- description: Accessibility audit — contrast checks, WCAG compliance, code audits, token verification
3
+ description: Quick contrast checks and token WCAG audits inline, no agent
4
4
  user-invocable: true
5
5
  allowed-tools:
6
6
  - Read
7
7
  - Write
8
8
  - Bash
9
- - Agent
10
9
  - Glob
11
10
  - Grep
12
11
  - AskUserQuestion
13
12
  ---
14
13
  <context>
15
14
  Standalone composable accessibility skill. Works two ways:
16
- 1. **Standalone** — user runs `/gsp:accessibility` directly for design, code, or token audits
15
+ 1. **Standalone** — user runs `/gsp:accessibility` directly for quick contrast checks or token audits
17
16
  2. **As a building block** — critique and review phases detect prior accessibility output and reuse it
18
17
 
19
18
  Follows the composable pattern: deterministic modes, predictable output paths, filesystem as integration layer.
19
+
20
+ For full design audits, code audits, or statement generation, use `/gsp:accessibility-audit`.
20
21
  </context>
21
22
 
22
23
  <objective>
23
- Run accessibility audits in multiple modes design, code, tokens, quick check, or statement generation.
24
+ Run lightweight accessibility checks inlinecontrast ratio lookups and token WCAG verification.
24
25
 
25
26
  **Input:** Mode flag + optional arguments
26
- **Output:** Audit chunks in the appropriate project directory
27
- **Agent:** `gsp-accessibility-auditor` (for design and code modes), inline for tokens/check/statement
27
+ **Output:** Display output (check mode) or audit chunk (token mode)
28
+ **Agent:** None this skill runs entirely inline
28
29
  </objective>
29
30
 
30
- <execution_context>
31
- @${CLAUDE_SKILL_DIR}/../../prompts/08-accessibility-auditor.md
32
- @${CLAUDE_SKILL_DIR}/../../references/wcag-checklist.md
33
- </execution_context>
34
-
35
31
  <rules>
36
32
  - Always use `AskUserQuestion` for user interaction — never prompt via plain text
33
+ - One decision per question — never batch multiple questions in a single message
37
34
  - Quick check mode (`--check`) produces display output only — no files written
38
35
  - Token audit mode runs inline — no agent spawned
39
- - Statement mode reads prior audit results — fails gracefully if none exist
40
36
  - Default conformance level is AA unless overridden by `--level AAA` or config
41
37
  - Foundation chunks follow `references/chunk-format.md` format
42
38
  </rules>
@@ -46,39 +42,34 @@ Run accessibility audits in multiple modes — design, code, tokens, quick check
46
42
 
47
43
  Read `$ARGUMENTS` to determine the mode:
48
44
 
49
- | Input | Mode | Agent? | Output |
50
- |-------|------|--------|--------|
51
- | (no args) | Design audit on `.design/` chunks | Yes (`gsp-accessibility-auditor`) | `critique/accessibility-audit.md` + `accessibility-fixes.md` |
52
- | `--tokens` | Token-only: contrast pairs, sizing, spacing | No (inline) | `critique/accessibility-token-audit.md` |
53
- | `--code` | Codebase audit: ARIA, keyboard, semantic HTML | Yes (`gsp-accessibility-auditor`) | `review/accessibility-audit.md` + `accessibility-fixes.md` |
54
- | `--statement` | Generate accessibility statement from prior audits | No (inline) | `exports/accessibility-statement.md` |
55
- | `--check #FG #BG` | Quick contrast check | No (inline, no files) | Display only |
45
+ | Input | Mode | Output |
46
+ |-------|------|--------|
47
+ | `--check #FG #BG` | Quick contrast check | Display only |
48
+ | `--tokens` | Token-only: contrast pairs, sizing, spacing | `critique/accessibility-token-audit.md` |
49
+ | (no args) | Mode picker | Prompt user |
56
50
 
57
51
  Additional flag: `--level AAA` overrides conformance level (default: AA).
58
52
 
59
- ## Step 2: Resolve context
53
+ ## Step 2: Route by mode
60
54
 
61
- ### Quick check mode (`--check`)
55
+ ### No args mode picker
62
56
 
63
- If args contain `--check`, extract the two hex color values and skip to Step 3.
57
+ If no arguments provided, use `AskUserQuestion`:
64
58
 
65
- ### All other modes
59
+ **"What would you like to do?"**
60
+ - **Quick contrast check** — "check specific color pairs for WCAG contrast compliance"
61
+ - **Token audit** — "audit tokens.json for WCAG compliance"
62
+ - **Full design/code audit** — "run `/gsp:accessibility-audit` for full WCAG audits, code audits, or statement generation"
66
63
 
67
- Scan `.design/projects/` for project directories. If only one project exists, use it. If multiple, use `AskUserQuestion` to ask which project.
64
+ If user picks "Full design/code audit", tell them to run `/gsp:accessibility-audit` and stop.
68
65
 
69
- Set `PROJECT_PATH` = `.design/projects/{project}`
66
+ ### Quick check mode (`--check`)
70
67
 
71
- Read `{PROJECT_PATH}/config.json` to get:
72
- - `accessibility_level` — override conformance level (if not set via `--level` flag)
73
- - `implementation_target` — needed for code mode
68
+ If args contain `--check`, extract the two hex color values and skip to Step 3.
74
69
 
75
- Read `{PROJECT_PATH}/brand.ref` to resolve brand path:
76
- - Set `BRAND_PATH` = `.design/branding/{brand}`
70
+ ### Token audit mode (`--tokens`)
77
71
 
78
- Determine final conformance level:
79
- 1. `--level` flag (highest priority)
80
- 2. `accessibility_level` from config.json
81
- 3. Default: "WCAG 2.2 AA"
72
+ Skip to Step 4.
82
73
 
83
74
  ## Step 3: Quick check mode (`--check #FG #BG`)
84
75
 
@@ -114,7 +105,24 @@ Convert hex to relative luminance (sRGB linearization), then:
114
105
 
115
106
  ## Step 4: Token audit mode (`--tokens`)
116
107
 
117
- Read token and palette files from the brand/project:
108
+ ### Resolve context
109
+
110
+ Resolve project from `.design/projects/` (one → use it, multiple → ask). Set `PROJECT_PATH`.
111
+
112
+ Read `{PROJECT_PATH}/config.json` to get:
113
+ - `accessibility_level` — override conformance level (if not set via `--level` flag)
114
+
115
+ Read `{PROJECT_PATH}/brand.ref` to resolve brand path:
116
+ - Set `BRAND_PATH` = `.design/branding/{brand}`
117
+
118
+ Determine final conformance level:
119
+ 1. `--level` flag (highest priority)
120
+ 2. `accessibility_level` from config.json
121
+ 3. Default: "WCAG 2.2 AA"
122
+
123
+ ### Read token and palette files
124
+
125
+ Read from the brand/project:
118
126
  - `{BRAND_PATH}/identity/palettes.json`
119
127
  - `{BRAND_PATH}/identity/color-system.md`
120
128
  - `{BRAND_PATH}/patterns/tokens.json`
@@ -124,28 +132,28 @@ If files don't exist, report which are missing and stop.
124
132
 
125
133
  ### Token checks
126
134
 
127
- **5.1 Contrast Pairs:**
135
+ **4.1 Contrast Pairs:**
128
136
  - Extract every semantic foreground/background pair from tokens.json
129
137
  - Calculate WCAG 2.x contrast ratio for each pair
130
138
  - Flag failures: normal text < 4.5:1, large text < 3:1, non-text < 3:1
131
139
 
132
- **5.2 Interactive States:**
140
+ **4.2 Interactive States:**
133
141
  - Check hover, active, focus, disabled state color pairs
134
142
  - Verify disabled states still meet 3:1 non-text contrast
135
143
 
136
- **5.3 Focus Ring:**
144
+ **4.3 Focus Ring:**
137
145
  - Find focus ring token — check >= 3:1 contrast against adjacent backgrounds
138
146
  - Verify ring width >= 2px
139
147
 
140
- **5.4 Dark Mode:**
148
+ **4.4 Dark Mode:**
141
149
  - If dark mode tokens exist, re-verify all contrast pairs
142
150
  - Dark mode is a separate verification pass, not assumed from light mode
143
151
 
144
- **5.5 Touch Targets:**
152
+ **4.5 Touch Targets:**
145
153
  - Check button/link sizing tokens >= 44px for primary actions, >= 24px minimum
146
154
  - Check spacing tokens between adjacent interactive elements
147
155
 
148
- **5.6 Typography Minimums:**
156
+ **4.6 Typography Minimums:**
149
157
  - Body text >= 16px (1rem)
150
158
  - Caption/small text >= 12px
151
159
  - Line-height >= 1.5 for body text
@@ -193,156 +201,14 @@ Conformance target: {level}
193
201
  ### Completion
194
202
 
195
203
  Display result and use `AskUserQuestion`:
196
- - **Run full design audit** — "audit design screens for WCAG compliance"
197
- - **Run code audit** — "check the codebase for accessibility issues"
204
+ - **Run full design audit** — "run `/gsp:accessibility-audit` for full WCAG design audit"
205
+ - **Run code audit** — "run `/gsp:accessibility-audit --code` to check the codebase"
198
206
  - **Done** — "that's all for now"
199
207
 
200
- ## Step 5: Design audit mode (default, no flags)
201
-
202
- Verify design chunks exist:
203
- - Read `{PROJECT_PATH}/design/INDEX.md` to find screen chunks
204
- - If no design chunks, tell user to complete design phase first and stop
205
-
206
- ### Spawn agent
207
-
208
- Spawn `gsp-accessibility-auditor` with:
209
- - All design chunks from `{PROJECT_PATH}/design/`
210
- - Brand identity context (color system, typography)
211
- - Brand system context (tokens, components)
212
- - Conformance level
213
- - WCAG checklist reference
214
- - **Output path:** `{PROJECT_PATH}/critique/`
215
- - **Instructions:** "Audit all design screens against {level}. Write `accessibility-audit.md` and `accessibility-fixes.md` to the output path."
216
-
217
- ### Completion
218
-
219
- Display result:
220
-
221
- ```
222
- /gsp:accessibility — design audit complete
223
- ═══════════════════════════════════════
224
-
225
- {PROJECT_PATH}/critique/
226
- ├── accessibility-audit.md
227
- └── accessibility-fixes.md
228
-
229
- ─────────────────────────────────────
230
- ```
231
-
232
- Use `AskUserQuestion`:
233
- - **Run token audit** — "check design token contrast pairs"
234
- - **Continue to build** — "implement designs in the codebase"
235
- - **View audit** — "read the accessibility report"
236
- - **Done** — "that's all for now"
237
-
238
- ## Step 6: Code audit mode (`--code`)
239
-
240
- Determine codebase scope:
241
- - Read `{PROJECT_PATH}/config.json` for `implementation_target`
242
- - If build phase completed, read `{PROJECT_PATH}/build/BUILD-LOG.md` for file paths
243
- - Otherwise, use `implementation_target` to determine where to look
244
-
245
- ### Spawn agent
246
-
247
- Spawn `gsp-accessibility-auditor` with:
248
- - Codebase paths to audit
249
- - Brand system tokens (for contrast verification against hardcoded values)
250
- - Conformance level
251
- - WCAG checklist reference
252
- - **Output path:** `{PROJECT_PATH}/review/`
253
- - **Instructions:** "Code audit mode. Use Grep and Glob to find accessibility issues in the codebase. Check ARIA, keyboard handlers, semantic HTML, heading hierarchy, alt text, lang attributes, skip-nav, focus management. Write `accessibility-audit.md` and `accessibility-fixes.md` to the output path with actual file paths and line numbers."
254
-
255
- ### Completion
256
-
257
- Display result:
258
-
259
- ```
260
- /gsp:accessibility --code — code audit complete
261
- ═══════════════════════════════════════
262
-
263
- {PROJECT_PATH}/review/
264
- ├── accessibility-audit.md
265
- └── accessibility-fixes.md
266
-
267
- ─────────────────────────────────────
268
- ```
269
-
270
- Use `AskUserQuestion`:
271
- - **Fix issues** — "address the accessibility issues found"
272
- - **Generate statement** — "create an accessibility statement"
273
- - **View audit** — "read the code accessibility report"
274
- - **Done** — "that's all for now"
275
-
276
- ## Step 7: Statement mode (`--statement`)
277
-
278
- Read prior audit results:
279
- - `{PROJECT_PATH}/critique/accessibility-audit.md`
280
- - `{PROJECT_PATH}/critique/accessibility-token-audit.md`
281
- - `{PROJECT_PATH}/review/accessibility-audit.md`
282
-
283
- If none exist, tell the user to run an audit first and stop.
284
-
285
- ### Generate statement
286
-
287
- Write `{PROJECT_PATH}/exports/accessibility-statement.md`:
288
-
289
- ```markdown
290
- # Accessibility Statement
291
-
292
- > Project: {name} | Generated: {DATE}
293
-
294
- ---
295
-
296
- ## Conformance Status
297
-
298
- **Target:** {level}
299
- **Status:** {Partially Conformant / Fully Conformant}
300
-
301
- This {project description} has been evaluated against {level} standards.
302
-
303
- ## Scope
304
-
305
- {Brief description of what was audited — design, code, or both}
306
-
307
- ## Known Limitations
308
-
309
- {List from audit findings — critical/major issues not yet resolved}
310
-
311
- - {Issue}: {brief description} — {planned resolution or workaround}
312
-
313
- ## Testing Methodology
314
-
315
- - Design audit: WCAG 2.2 checklist review of all screens
316
- - Token audit: Automated contrast ratio verification of all semantic color pairs
317
- - Code audit: Manual and grep-based review of ARIA, keyboard, semantic HTML
318
- - Tools used: {list from testing methodology}
319
-
320
- ## Feedback
321
-
322
- If you encounter accessibility barriers, please contact:
323
-
324
- - **Email:** [placeholder@example.com]
325
- - **Response time:** [X business days]
326
-
327
- ## Assessment Date
328
-
329
- Last reviewed: {DATE}
330
- ```
331
-
332
- ### Completion
333
-
334
- Display result and use `AskUserQuestion`:
335
- - **View statement** — "read the accessibility statement"
336
- - **Done** — "that's all for now"
337
-
338
- ## Step 8: Update STATE.md
208
+ ## Step 5: Update STATE.md
339
209
 
340
210
  If within a project and files were written:
341
211
  - Read `{PROJECT_PATH}/STATE.md`
342
212
  - Note accessibility audit completion in the relevant phase section
343
213
  - Do not change phase status — accessibility is a supplementary check
344
-
345
- ## Step 9: Completion output
346
-
347
- If not already displayed by a mode-specific step above, display the appropriate completion output and `AskUserQuestion` routing.
348
214
  </process>