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.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +3 -4
- package/bin/install.js +27 -1
- package/gsp/agents/gsp-builder.md +1 -1
- package/gsp/references/questioning.md +17 -9
- package/gsp/skills/gsp-accessibility/SKILL.md +52 -186
- package/gsp/skills/gsp-accessibility-audit/SKILL.md +219 -0
- package/gsp/skills/gsp-brand-audit/SKILL.md +7 -6
- package/gsp/skills/gsp-brand-identity/SKILL.md +7 -5
- package/gsp/skills/gsp-brand-patterns/SKILL.md +42 -35
- package/gsp/skills/gsp-brand-refine/SKILL.md +148 -0
- package/gsp/skills/gsp-brand-research/SKILL.md +2 -3
- package/gsp/skills/gsp-brand-strategy/SKILL.md +7 -5
- package/gsp/skills/gsp-brand-sync/SKILL.md +3 -4
- package/gsp/skills/gsp-doctor/SKILL.md +20 -1
- package/gsp/skills/gsp-help/SKILL.md +1 -0
- package/gsp/skills/gsp-launch/SKILL.md +3 -8
- package/gsp/skills/gsp-palette/SKILL.md +3 -0
- package/gsp/skills/gsp-project-brief/SKILL.md +3 -11
- package/gsp/skills/gsp-project-build/SKILL.md +2 -5
- package/gsp/skills/gsp-project-critique/SKILL.md +4 -8
- package/gsp/skills/gsp-project-design/SKILL.md +3 -9
- package/gsp/skills/gsp-project-research/SKILL.md +2 -5
- package/gsp/skills/gsp-project-review/SKILL.md +4 -6
- package/gsp/skills/gsp-start/SKILL.md +101 -180
- package/gsp/skills/gsp-style/SKILL.md +12 -174
- package/gsp/skills/gsp-typescale/SKILL.md +39 -161
- package/gsp/skills/gsp-update/SKILL.md +52 -23
- package/gsp/templates/branding/config.json +1 -0
- package/package.json +1 -1
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 |
|
|
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
|
-
│ ├──
|
|
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
|
-
|
|
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
|
|
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:**
|
|
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
|
-
###
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
- **
|
|
70
|
-
- **
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
24
|
+
Run lightweight accessibility checks inline — contrast ratio lookups and token WCAG verification.
|
|
24
25
|
|
|
25
26
|
**Input:** Mode flag + optional arguments
|
|
26
|
-
**Output:**
|
|
27
|
-
**Agent:**
|
|
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 |
|
|
50
|
-
|
|
51
|
-
|
|
|
52
|
-
| `--tokens` | Token-only: contrast pairs, sizing, spacing |
|
|
53
|
-
|
|
|
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:
|
|
53
|
+
## Step 2: Route by mode
|
|
60
54
|
|
|
61
|
-
###
|
|
55
|
+
### No args → mode picker
|
|
62
56
|
|
|
63
|
-
If
|
|
57
|
+
If no arguments provided, use `AskUserQuestion`:
|
|
64
58
|
|
|
65
|
-
|
|
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
|
-
|
|
64
|
+
If user picks "Full design/code audit", tell them to run `/gsp:accessibility-audit` and stop.
|
|
68
65
|
|
|
69
|
-
|
|
66
|
+
### Quick check mode (`--check`)
|
|
70
67
|
|
|
71
|
-
|
|
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
|
-
|
|
76
|
-
- Set `BRAND_PATH` = `.design/branding/{brand}`
|
|
70
|
+
### Token audit mode (`--tokens`)
|
|
77
71
|
|
|
78
|
-
|
|
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
|
-
|
|
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
|
-
**
|
|
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
|
-
**
|
|
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
|
-
**
|
|
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
|
-
**
|
|
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
|
-
**
|
|
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
|
-
**
|
|
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
|
|
197
|
-
- **Run code audit** — "check the codebase
|
|
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:
|
|
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>
|