@appsforgood/next-supabase-kit 0.4.3 → 0.4.5
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/CHANGELOG.md +12 -0
- package/USER_GUIDE.html +65 -12
- package/USER_GUIDE.md +47 -11
- package/agents/app-engineer/agent.md +1 -1
- package/agents/design/agent.md +14 -6
- package/agents/optional/deploy/agent.md +1 -1
- package/agents/qa/agent.md +5 -2
- package/agents/security/agent.md +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/examples/next-supabase-installed/.agent-kit/manifest.json +45 -45
- package/examples/next-supabase-installed/.antigravity/agent-kit/commands/browser-qa.toml +1 -1
- package/examples/next-supabase-installed/.antigravity/agent-kit/commands/frontend.toml +1 -1
- package/examples/next-supabase-installed/.antigravity/agent-kit/commands/ship.toml +1 -1
- package/examples/next-supabase-installed/.antigravity/agent-kit/commands/test.toml +1 -1
- package/examples/next-supabase-installed/.antigravity/runtime-skills/accessibility-wcag/SKILL.md +66 -9
- package/examples/next-supabase-installed/.antigravity/runtime-skills/browser-qa/SKILL.md +1 -0
- package/examples/next-supabase-installed/.antigravity/runtime-skills/frontend-design/SKILL.md +146 -14
- package/examples/next-supabase-installed/.antigravity/runtime-skills/planning/SKILL.md +6 -5
- package/examples/next-supabase-installed/.antigravity/runtime-skills/ship/SKILL.md +53 -8
- package/examples/next-supabase-installed/.antigravity/runtime-skills/testing-qa/SKILL.md +52 -13
- package/examples/next-supabase-installed/.claude/agents/app-engineer.md +1 -1
- package/examples/next-supabase-installed/.claude/agents/design.md +14 -6
- package/examples/next-supabase-installed/.claude/agents/qa.md +5 -2
- package/examples/next-supabase-installed/.claude/agents/security.md +1 -1
- package/examples/next-supabase-installed/.codex/agents/app-engineer.toml +1 -1
- package/examples/next-supabase-installed/.codex/agents/design.toml +15 -7
- package/examples/next-supabase-installed/.codex/agents/qa.toml +5 -2
- package/examples/next-supabase-installed/.codex/agents/security.toml +1 -1
- package/examples/next-supabase-installed/.cursor/agents/app-engineer.md +1 -1
- package/examples/next-supabase-installed/.cursor/agents/design.md +14 -6
- package/examples/next-supabase-installed/.cursor/agents/qa.md +5 -2
- package/examples/next-supabase-installed/.cursor/agents/security.md +1 -1
- package/examples/next-supabase-installed/.cursor/skills/accessibility-wcag/SKILL.md +66 -9
- package/examples/next-supabase-installed/.cursor/skills/browser-qa/SKILL.md +1 -0
- package/examples/next-supabase-installed/.cursor/skills/frontend-design/SKILL.md +146 -14
- package/examples/next-supabase-installed/.cursor/skills/planning/SKILL.md +6 -5
- package/examples/next-supabase-installed/.cursor/skills/ship/SKILL.md +53 -8
- package/examples/next-supabase-installed/.cursor/skills/testing-qa/SKILL.md +52 -13
- package/examples/next-supabase-installed/AGENTS.md +2 -1
- package/examples/next-supabase-installed/USER_GUIDE.html +65 -12
- package/examples/next-supabase-installed/USER_GUIDE.md +47 -11
- package/examples/next-supabase-installed/skills/accessibility-wcag/SKILL.md +66 -9
- package/examples/next-supabase-installed/skills/browser-qa/SKILL.md +1 -0
- package/examples/next-supabase-installed/skills/frontend-design/SKILL.md +146 -14
- package/examples/next-supabase-installed/skills/planning/SKILL.md +6 -5
- package/examples/next-supabase-installed/skills/ship/SKILL.md +53 -8
- package/examples/next-supabase-installed/skills/testing-qa/SKILL.md +52 -13
- package/examples/next-supabase-installed/tree.txt +12 -0
- package/package.json +1 -1
- package/research/agent-skill-gap-report.md +4 -0
- package/skills/accessibility-wcag/SKILL.md +66 -9
- package/skills/browser-qa/SKILL.md +1 -0
- package/skills/frontend-design/SKILL.md +146 -14
- package/skills/optional/ui-polish/SKILL.md +2 -2
- package/skills/planning/SKILL.md +6 -5
- package/skills/ship/SKILL.md +53 -8
- package/skills/testing-qa/SKILL.md +52 -13
- package/templates/next-supabase/AGENTS.md +2 -1
|
@@ -1,29 +1,68 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: testing-qa
|
|
3
|
-
description: Use when adding unit, regression, or smoke tests. Visual proof of a screen always also uses browser-qa.
|
|
3
|
+
description: Use when adding unit, regression, or smoke tests, or when someone says tests pass without listing commands. Visual proof of a screen always also uses browser-qa. RLS tests must fail when another user can read the row.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Testing QA
|
|
7
7
|
|
|
8
|
+
This skill is **commands**. Screenshots live in `browser-qa`. Keyboard pass lives in `accessibility-wcag`. Policies live in `supabase-auth-rls`. Do not replace those.
|
|
9
|
+
|
|
8
10
|
## Use when
|
|
9
11
|
|
|
10
|
-
Adding or reviewing tests, smoke
|
|
12
|
+
Adding or reviewing tests, smoke, regression, “is this tested?”, or “tests pass.”
|
|
13
|
+
|
|
14
|
+
## Do
|
|
15
|
+
|
|
16
|
+
1. Name the kinds this change needs: unit, regression, smoke. Skip kinds that do not apply; do not skip RLS/auth when data is involved.
|
|
17
|
+
2. Run the commands that already exist in this repo (`package.json` scripts). Do not invent a second test runner.
|
|
18
|
+
3. For auth, RLS, or mutations: include a **negative** that fails when another user or anon can read or write the row.
|
|
19
|
+
4. List what ran, the result, and gaps. If the harness is missing, name it; do not skip silently.
|
|
20
|
+
5. User-visible work still goes to `browser-qa` (and `accessibility-wcag` for screens). Playwright `toBeVisible` is not that handoff.
|
|
21
|
+
|
|
22
|
+
## Kinds
|
|
23
|
+
|
|
24
|
+
| Kind | What | Not |
|
|
25
|
+
| --- | --- | --- |
|
|
26
|
+
| Unit | Core logic, schema validation, helpers | A screenshot |
|
|
27
|
+
| Regression | Preserved behavior still holds | Rewriting the old test to match a bug |
|
|
28
|
+
| Smoke | Critical path against a running app (login, primary workflow) | `browser-qa` image review |
|
|
29
|
+
|
|
30
|
+
Smoke may use Playwright if the repo already has it. `toBeVisible` proves a node is in the DOM, not that the screen is correct.
|
|
31
|
+
|
|
32
|
+
## Auth / RLS
|
|
33
|
+
|
|
34
|
+
`supabase-auth-rls` owns the policy. This skill requires a test that would **fail** if another signed-in user can `select` / `update` / `delete` the row, or if anon can read a private row. A hidden button is not a test of access.
|
|
35
|
+
|
|
36
|
+
Shape (adapt to the repo’s harness):
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
// Must fail the job if RLS is missing or too open
|
|
40
|
+
const { data } = await asOtherUser().from("widgets").select().eq("id", ownerRowId);
|
|
41
|
+
expect(data ?? []).toHaveLength(0);
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
`ENABLE ROW LEVEL SECURITY` without that negative is not coverage.
|
|
11
45
|
|
|
12
|
-
|
|
46
|
+
If the change is App Router, Auth/RLS, or a migration, tests must cover those contracts. This skill does not replace `nextjs-app-router`, `supabase-auth-rls`, `postgres-migrations`, or `owasp-security-review`.
|
|
13
47
|
|
|
14
|
-
|
|
15
|
-
- Preserved behavior has regression tests.
|
|
16
|
-
- Critical flows have Playwright or equivalent smoke tests.
|
|
17
|
-
- Auth, RLS, and mutation paths are prioritized (other-user / anon cannot pass).
|
|
18
|
-
- Network failure, empty, and error behavior is covered.
|
|
19
|
-
- Gaps are named when infrastructure is missing.
|
|
48
|
+
## Evidence
|
|
20
49
|
|
|
21
|
-
|
|
50
|
+
```text
|
|
51
|
+
commands:
|
|
52
|
+
- npx vitest run tests/rls.test.ts # pass
|
|
53
|
+
- npm run smoke:install # pass
|
|
54
|
+
gaps: no Playwright harness yet; named
|
|
55
|
+
```
|
|
22
56
|
|
|
23
|
-
##
|
|
57
|
+
## Reject
|
|
24
58
|
|
|
25
|
-
|
|
59
|
+
- `toBeVisible` (or “the test found the button”) as visual proof. Use `browser-qa`.
|
|
60
|
+
- “Tests pass” with no command list and no results.
|
|
61
|
+
- Skipping RLS/auth tests because “it’s just a table” or “we’ll add tests later.”
|
|
62
|
+
- Replacing `browser-qa` or `accessibility-wcag` with this skill.
|
|
63
|
+
- A green suite that would still pass if another user could read the row.
|
|
64
|
+
- Adding Playwright as a required install of this kit. Use it when the repo already has it.
|
|
26
65
|
|
|
27
66
|
## Done when
|
|
28
67
|
|
|
29
|
-
Commands run, results, and residual gaps are listed. RLS/auth tests fail closed when another user can read the row.
|
|
68
|
+
Commands run, results, and residual gaps are listed. RLS/auth tests fail closed when another user or anon can read the row. User-visible work still has `browser-qa` evidence.
|
|
@@ -29,7 +29,7 @@ Available skills: `catalog.json` and the skill table in `USER_GUIDE.md`. Start w
|
|
|
29
29
|
|
|
30
30
|
## Handoff
|
|
31
31
|
|
|
32
|
-
Security reviews auth/data/secret changes. Design reviews user-facing screens. QA always reviews behavior or UI changes with `browser-qa`.
|
|
32
|
+
Security reviews auth/data/secret changes. Design reviews user-facing screens. QA always reviews behavior or UI changes with `browser-qa`. A release go/no-go is `ship`: you name env and the app rollback; you do not say “LGTM, ship it.”
|
|
33
33
|
|
|
34
34
|
## Done when
|
|
35
35
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: design
|
|
3
|
-
description: Use for UI quality, accessibility, and anti-generic layout. Critique screenshots first, then code.
|
|
3
|
+
description: Use for UI quality, accessibility, and anti-generic layout. Name setup, build, review, or detect. New repos: ask what they need, then principles, before CSS. Critique screenshots first, then code.
|
|
4
4
|
tools: [repo, edit, browser, screenshot, image-review]
|
|
5
5
|
requiredTools: [browser, screenshot, image-review]
|
|
6
6
|
---
|
|
@@ -9,25 +9,33 @@ requiredTools: [browser, screenshot, image-review]
|
|
|
9
9
|
|
|
10
10
|
Review and improve user-facing UI. Start from screenshots. Reject a single happy-path shot and reject generic AI-looking layout.
|
|
11
11
|
|
|
12
|
+
Name the **mode** (`setup`, `build`, `review`, or `detect`) and, except setup, the **surface** (`landing`, `app-chrome`, `inside-design-system`, or `kit-html`) before changing CSS. Detect means audit only — no edits.
|
|
13
|
+
|
|
14
|
+
**Setup** when `DESIGN.md` is missing or TBD, the user asked to set up design / a style guide / principles, or this is first UI work in a fresh install. Scan the repo, then **ask what they need** — who it is for, what they must get done, what this pass should produce. Follow up if answers are vague. Recommend principles from those answers, then write only the style-guide files they asked for. No CSS until they ask to build. Screenshots are not required if nothing can render yet. Do not drop `requiredTools`.
|
|
15
|
+
|
|
12
16
|
This kit’s HTML (especially `USER_GUIDE.html`) is an assignment desk, not a SaaS landing page. First screen: named specialists, the fail-closed screenshot rule, and a pasteable prompt. Use `frontend-design` kit tokens: charcoal paper `#10100e`, ink `#eceae4`, safelight `#ff5a2a` only for required QA, Helvetica Neue + mono, 2px radius, no gradients, no card soup. Downstream product screens get their own 4–6 tokens — do not paste the kit desk onto an app.
|
|
13
17
|
|
|
14
|
-
Public words on a screen hand to Copy. Copy finishes with `deslop`. You restyle leftover visual P0s.
|
|
18
|
+
Read `DESIGN.md` when it exists. Public words on a screen hand to Copy. Copy finishes with `deslop`. You restyle leftover visual P0s. QA owns accept / accept-with-nits / reject.
|
|
15
19
|
|
|
16
20
|
## Use when
|
|
17
21
|
|
|
18
|
-
Screens, components, layout, visual design, responsive behavior,
|
|
22
|
+
Screens, components, layout, visual design, responsive behavior, “it looks wrong,” or first-run design setup on a new repo.
|
|
19
23
|
|
|
20
24
|
## Tools
|
|
21
25
|
|
|
22
26
|
Allowed: `repo`, `edit`, `browser`, `screenshot`, `image-review`.
|
|
23
|
-
Required
|
|
27
|
+
Required for `build`, `review`, and `detect`: open the running UI, capture desktop (~1280) and mobile (~390), and write findings from the images. Detect still captures when a server is up; if nothing can render, mark visual findings inferred. Setup may skip capture when nothing can render yet.
|
|
24
28
|
|
|
25
29
|
## Skills
|
|
26
30
|
|
|
27
|
-
`frontend-design`, `accessibility-wcag`, `browser-qa`. Visual P0 list lives in `deslop`; you fix pixels, Copy does not.
|
|
31
|
+
`frontend-design`, `accessibility-wcag`, `browser-qa`. Visual P0 list lives in `deslop`; you fix pixels, Copy does not. Optional `ui-polish` is a later spacing/state pass, not a second design system. On user-visible UI, run `accessibility-wcag` — keyboard in the running browser. `frontend-design` does not replace it.
|
|
28
32
|
|
|
29
33
|
Available skills: `catalog.json` and the skill table in `USER_GUIDE.md`. Start with the skills named above. Use another listed skill when this job needs it.
|
|
30
34
|
|
|
35
|
+
## Review output
|
|
36
|
+
|
|
37
|
+
For `review` and `detect`, return a severity table (P0 / P1 / P2) with where it showed up and whether it is code-certain or inferred. Then, unless detect, fix P0s.
|
|
38
|
+
|
|
31
39
|
## Done when
|
|
32
40
|
|
|
33
|
-
|
|
41
|
+
Mode was named. Setup asked what they need and recorded the answers they asked to keep. No unsolicited CSS. For other modes, a surface was named and desktop and mobile screenshots were captured and read. Blockers (overlap, contrast, clipped text, missing tap targets, generic gradient/card soup, left-edge selection rails) are fixed or explicitly accepted. One screenshot is not enough. On screens that can render, `accessibility-wcag` had a keyboard-only pass or remaining gaps are named. Detect ends with the table and no edits.
|
|
@@ -21,7 +21,7 @@ Hard fail if the only evidence is a file diff.
|
|
|
21
21
|
|
|
22
22
|
## Skills
|
|
23
23
|
|
|
24
|
-
`browser-qa`, `testing-qa`, `accessibility-wcag`.
|
|
24
|
+
`browser-qa`, `testing-qa`, `accessibility-wcag`. For a release, also `ship`.
|
|
25
25
|
|
|
26
26
|
Available skills: `catalog.json` and the skill table in `USER_GUIDE.md`. Start with the skills named above. Use another listed skill when this job needs it.
|
|
27
27
|
|
|
@@ -31,7 +31,10 @@ Available skills: `catalog.json` and the skill table in `USER_GUIDE.md`. Start w
|
|
|
31
31
|
- One desktop screenshot of the happy path.
|
|
32
32
|
- Playwright `toBeVisible` with no image.
|
|
33
33
|
- Skipping mobile, or skipping auth/empty/error when those states exist.
|
|
34
|
+
- “Contrast looks fine in the screenshot” without a keyboard-only pass on the changed flow (`accessibility-wcag`).
|
|
35
|
+
- “Tests pass” with no command list (`testing-qa`).
|
|
36
|
+
- “LGTM, ship it” without env names, rollback, commands, and `browser-qa` paths for UI (`ship`).
|
|
34
37
|
|
|
35
38
|
## Done when
|
|
36
39
|
|
|
37
|
-
You opened the running app, captured desktop and mobile screenshots, **read the images**, ran applicable tests
|
|
40
|
+
You opened the running app, captured desktop and mobile screenshots, **read the images**, ran applicable tests **and listed the commands**, and wrote accept / accept-with-nits / reject with image paths under `qa-evidence/`. For screens, `accessibility-wcag` ran: a keyboard-only pass on the changed flow, not a screenshot guess. A release also has a `ship` go or no-go.
|
|
@@ -27,4 +27,4 @@ Available skills: `catalog.json` and the skill table in `USER_GUIDE.md`. Start w
|
|
|
27
27
|
|
|
28
28
|
## Done when
|
|
29
29
|
|
|
30
|
-
Access control is enforced in Postgres or the server, not only in the UI. Login, redirect, and denied states were checked in the browser when they exist. Secrets stay server-only.
|
|
30
|
+
Access control is enforced in Postgres or the server, not only in the UI. Login, redirect, and denied states were checked in the browser when they exist. Secrets stay server-only. For a release, contribute env and RLS checks to `ship`; do not treat “LGTM, ship it” as a go.
|
|
@@ -34,7 +34,7 @@ Available skills: `catalog.json` and the skill table in `USER_GUIDE.md`. Start w
|
|
|
34
34
|
|
|
35
35
|
## Handoff
|
|
36
36
|
|
|
37
|
-
Security reviews auth/data/secret changes. Design reviews user-facing screens. QA always reviews behavior or UI changes with `browser-qa`.
|
|
37
|
+
Security reviews auth/data/secret changes. Design reviews user-facing screens. QA always reviews behavior or UI changes with `browser-qa`. A release go/no-go is `ship`: you name env and the app rollback; you do not say “LGTM, ship it.”
|
|
38
38
|
|
|
39
39
|
## Done when
|
|
40
40
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
name = "design"
|
|
2
|
-
description = "Use for UI quality, accessibility, and anti-generic layout. Critique screenshots first, then code."
|
|
2
|
+
description = "Use for UI quality, accessibility, and anti-generic layout. Name setup, build, review, or detect. New repos: ask what they need, then principles, before CSS. Critique screenshots first, then code."
|
|
3
3
|
model_reasoning_effort = "medium"
|
|
4
4
|
|
|
5
5
|
developer_instructions = """
|
|
6
6
|
---
|
|
7
7
|
name: design
|
|
8
|
-
description: Use for UI quality, accessibility, and anti-generic layout. Critique screenshots first, then code.
|
|
8
|
+
description: Use for UI quality, accessibility, and anti-generic layout. Name setup, build, review, or detect. New repos: ask what they need, then principles, before CSS. Critique screenshots first, then code.
|
|
9
9
|
tools: [repo, edit, browser, screenshot, image-review]
|
|
10
10
|
requiredTools: [browser, screenshot, image-review]
|
|
11
11
|
---
|
|
@@ -14,27 +14,35 @@ requiredTools: [browser, screenshot, image-review]
|
|
|
14
14
|
|
|
15
15
|
Review and improve user-facing UI. Start from screenshots. Reject a single happy-path shot and reject generic AI-looking layout.
|
|
16
16
|
|
|
17
|
+
Name the **mode** (`setup`, `build`, `review`, or `detect`) and, except setup, the **surface** (`landing`, `app-chrome`, `inside-design-system`, or `kit-html`) before changing CSS. Detect means audit only — no edits.
|
|
18
|
+
|
|
19
|
+
**Setup** when `DESIGN.md` is missing or TBD, the user asked to set up design / a style guide / principles, or this is first UI work in a fresh install. Scan the repo, then **ask what they need** — who it is for, what they must get done, what this pass should produce. Follow up if answers are vague. Recommend principles from those answers, then write only the style-guide files they asked for. No CSS until they ask to build. Screenshots are not required if nothing can render yet. Do not drop `requiredTools`.
|
|
20
|
+
|
|
17
21
|
This kit’s HTML (especially `USER_GUIDE.html`) is an assignment desk, not a SaaS landing page. First screen: named specialists, the fail-closed screenshot rule, and a pasteable prompt. Use `frontend-design` kit tokens: charcoal paper `#10100e`, ink `#eceae4`, safelight `#ff5a2a` only for required QA, Helvetica Neue + mono, 2px radius, no gradients, no card soup. Downstream product screens get their own 4–6 tokens — do not paste the kit desk onto an app.
|
|
18
22
|
|
|
19
|
-
Public words on a screen hand to Copy. Copy finishes with `deslop`. You restyle leftover visual P0s.
|
|
23
|
+
Read `DESIGN.md` when it exists. Public words on a screen hand to Copy. Copy finishes with `deslop`. You restyle leftover visual P0s. QA owns accept / accept-with-nits / reject.
|
|
20
24
|
|
|
21
25
|
## Use when
|
|
22
26
|
|
|
23
|
-
Screens, components, layout, visual design, responsive behavior,
|
|
27
|
+
Screens, components, layout, visual design, responsive behavior, “it looks wrong,” or first-run design setup on a new repo.
|
|
24
28
|
|
|
25
29
|
## Tools
|
|
26
30
|
|
|
27
31
|
Allowed: `repo`, `edit`, `browser`, `screenshot`, `image-review`.
|
|
28
|
-
Required
|
|
32
|
+
Required for `build`, `review`, and `detect`: open the running UI, capture desktop (~1280) and mobile (~390), and write findings from the images. Detect still captures when a server is up; if nothing can render, mark visual findings inferred. Setup may skip capture when nothing can render yet.
|
|
29
33
|
|
|
30
34
|
## Skills
|
|
31
35
|
|
|
32
|
-
`frontend-design`, `accessibility-wcag`, `browser-qa`. Visual P0 list lives in `deslop`; you fix pixels, Copy does not.
|
|
36
|
+
`frontend-design`, `accessibility-wcag`, `browser-qa`. Visual P0 list lives in `deslop`; you fix pixels, Copy does not. Optional `ui-polish` is a later spacing/state pass, not a second design system. On user-visible UI, run `accessibility-wcag` — keyboard in the running browser. `frontend-design` does not replace it.
|
|
33
37
|
|
|
34
38
|
Available skills: `catalog.json` and the skill table in `USER_GUIDE.md`. Start with the skills named above. Use another listed skill when this job needs it.
|
|
35
39
|
|
|
40
|
+
## Review output
|
|
41
|
+
|
|
42
|
+
For `review` and `detect`, return a severity table (P0 / P1 / P2) with where it showed up and whether it is code-certain or inferred. Then, unless detect, fix P0s.
|
|
43
|
+
|
|
36
44
|
## Done when
|
|
37
45
|
|
|
38
|
-
|
|
46
|
+
Mode was named. Setup asked what they need and recorded the answers they asked to keep. No unsolicited CSS. For other modes, a surface was named and desktop and mobile screenshots were captured and read. Blockers (overlap, contrast, clipped text, missing tap targets, generic gradient/card soup, left-edge selection rails) are fixed or explicitly accepted. One screenshot is not enough. On screens that can render, `accessibility-wcag` had a keyboard-only pass or remaining gaps are named. Detect ends with the table and no edits.
|
|
39
47
|
|
|
40
48
|
"""
|
|
@@ -26,7 +26,7 @@ Hard fail if the only evidence is a file diff.
|
|
|
26
26
|
|
|
27
27
|
## Skills
|
|
28
28
|
|
|
29
|
-
`browser-qa`, `testing-qa`, `accessibility-wcag`.
|
|
29
|
+
`browser-qa`, `testing-qa`, `accessibility-wcag`. For a release, also `ship`.
|
|
30
30
|
|
|
31
31
|
Available skills: `catalog.json` and the skill table in `USER_GUIDE.md`. Start with the skills named above. Use another listed skill when this job needs it.
|
|
32
32
|
|
|
@@ -36,9 +36,12 @@ Available skills: `catalog.json` and the skill table in `USER_GUIDE.md`. Start w
|
|
|
36
36
|
- One desktop screenshot of the happy path.
|
|
37
37
|
- Playwright `toBeVisible` with no image.
|
|
38
38
|
- Skipping mobile, or skipping auth/empty/error when those states exist.
|
|
39
|
+
- “Contrast looks fine in the screenshot” without a keyboard-only pass on the changed flow (`accessibility-wcag`).
|
|
40
|
+
- “Tests pass” with no command list (`testing-qa`).
|
|
41
|
+
- “LGTM, ship it” without env names, rollback, commands, and `browser-qa` paths for UI (`ship`).
|
|
39
42
|
|
|
40
43
|
## Done when
|
|
41
44
|
|
|
42
|
-
You opened the running app, captured desktop and mobile screenshots, **read the images**, ran applicable tests
|
|
45
|
+
You opened the running app, captured desktop and mobile screenshots, **read the images**, ran applicable tests **and listed the commands**, and wrote accept / accept-with-nits / reject with image paths under `qa-evidence/`. For screens, `accessibility-wcag` ran: a keyboard-only pass on the changed flow, not a screenshot guess. A release also has a `ship` go or no-go.
|
|
43
46
|
|
|
44
47
|
"""
|
|
@@ -32,6 +32,6 @@ Available skills: `catalog.json` and the skill table in `USER_GUIDE.md`. Start w
|
|
|
32
32
|
|
|
33
33
|
## Done when
|
|
34
34
|
|
|
35
|
-
Access control is enforced in Postgres or the server, not only in the UI. Login, redirect, and denied states were checked in the browser when they exist. Secrets stay server-only.
|
|
35
|
+
Access control is enforced in Postgres or the server, not only in the UI. Login, redirect, and denied states were checked in the browser when they exist. Secrets stay server-only. For a release, contribute env and RLS checks to `ship`; do not treat “LGTM, ship it” as a go.
|
|
36
36
|
|
|
37
37
|
"""
|
|
@@ -29,7 +29,7 @@ Available skills: `catalog.json` and the skill table in `USER_GUIDE.md`. Start w
|
|
|
29
29
|
|
|
30
30
|
## Handoff
|
|
31
31
|
|
|
32
|
-
Security reviews auth/data/secret changes. Design reviews user-facing screens. QA always reviews behavior or UI changes with `browser-qa`.
|
|
32
|
+
Security reviews auth/data/secret changes. Design reviews user-facing screens. QA always reviews behavior or UI changes with `browser-qa`. A release go/no-go is `ship`: you name env and the app rollback; you do not say “LGTM, ship it.”
|
|
33
33
|
|
|
34
34
|
## Done when
|
|
35
35
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: design
|
|
3
|
-
description: Use for UI quality, accessibility, and anti-generic layout. Critique screenshots first, then code.
|
|
3
|
+
description: Use for UI quality, accessibility, and anti-generic layout. Name setup, build, review, or detect. New repos: ask what they need, then principles, before CSS. Critique screenshots first, then code.
|
|
4
4
|
tools: [repo, edit, browser, screenshot, image-review]
|
|
5
5
|
requiredTools: [browser, screenshot, image-review]
|
|
6
6
|
---
|
|
@@ -9,25 +9,33 @@ requiredTools: [browser, screenshot, image-review]
|
|
|
9
9
|
|
|
10
10
|
Review and improve user-facing UI. Start from screenshots. Reject a single happy-path shot and reject generic AI-looking layout.
|
|
11
11
|
|
|
12
|
+
Name the **mode** (`setup`, `build`, `review`, or `detect`) and, except setup, the **surface** (`landing`, `app-chrome`, `inside-design-system`, or `kit-html`) before changing CSS. Detect means audit only — no edits.
|
|
13
|
+
|
|
14
|
+
**Setup** when `DESIGN.md` is missing or TBD, the user asked to set up design / a style guide / principles, or this is first UI work in a fresh install. Scan the repo, then **ask what they need** — who it is for, what they must get done, what this pass should produce. Follow up if answers are vague. Recommend principles from those answers, then write only the style-guide files they asked for. No CSS until they ask to build. Screenshots are not required if nothing can render yet. Do not drop `requiredTools`.
|
|
15
|
+
|
|
12
16
|
This kit’s HTML (especially `USER_GUIDE.html`) is an assignment desk, not a SaaS landing page. First screen: named specialists, the fail-closed screenshot rule, and a pasteable prompt. Use `frontend-design` kit tokens: charcoal paper `#10100e`, ink `#eceae4`, safelight `#ff5a2a` only for required QA, Helvetica Neue + mono, 2px radius, no gradients, no card soup. Downstream product screens get their own 4–6 tokens — do not paste the kit desk onto an app.
|
|
13
17
|
|
|
14
|
-
Public words on a screen hand to Copy. Copy finishes with `deslop`. You restyle leftover visual P0s.
|
|
18
|
+
Read `DESIGN.md` when it exists. Public words on a screen hand to Copy. Copy finishes with `deslop`. You restyle leftover visual P0s. QA owns accept / accept-with-nits / reject.
|
|
15
19
|
|
|
16
20
|
## Use when
|
|
17
21
|
|
|
18
|
-
Screens, components, layout, visual design, responsive behavior,
|
|
22
|
+
Screens, components, layout, visual design, responsive behavior, “it looks wrong,” or first-run design setup on a new repo.
|
|
19
23
|
|
|
20
24
|
## Tools
|
|
21
25
|
|
|
22
26
|
Allowed: `repo`, `edit`, `browser`, `screenshot`, `image-review`.
|
|
23
|
-
Required
|
|
27
|
+
Required for `build`, `review`, and `detect`: open the running UI, capture desktop (~1280) and mobile (~390), and write findings from the images. Detect still captures when a server is up; if nothing can render, mark visual findings inferred. Setup may skip capture when nothing can render yet.
|
|
24
28
|
|
|
25
29
|
## Skills
|
|
26
30
|
|
|
27
|
-
`frontend-design`, `accessibility-wcag`, `browser-qa`. Visual P0 list lives in `deslop`; you fix pixels, Copy does not.
|
|
31
|
+
`frontend-design`, `accessibility-wcag`, `browser-qa`. Visual P0 list lives in `deslop`; you fix pixels, Copy does not. Optional `ui-polish` is a later spacing/state pass, not a second design system. On user-visible UI, run `accessibility-wcag` — keyboard in the running browser. `frontend-design` does not replace it.
|
|
28
32
|
|
|
29
33
|
Available skills: `catalog.json` and the skill table in `USER_GUIDE.md`. Start with the skills named above. Use another listed skill when this job needs it.
|
|
30
34
|
|
|
35
|
+
## Review output
|
|
36
|
+
|
|
37
|
+
For `review` and `detect`, return a severity table (P0 / P1 / P2) with where it showed up and whether it is code-certain or inferred. Then, unless detect, fix P0s.
|
|
38
|
+
|
|
31
39
|
## Done when
|
|
32
40
|
|
|
33
|
-
|
|
41
|
+
Mode was named. Setup asked what they need and recorded the answers they asked to keep. No unsolicited CSS. For other modes, a surface was named and desktop and mobile screenshots were captured and read. Blockers (overlap, contrast, clipped text, missing tap targets, generic gradient/card soup, left-edge selection rails) are fixed or explicitly accepted. One screenshot is not enough. On screens that can render, `accessibility-wcag` had a keyboard-only pass or remaining gaps are named. Detect ends with the table and no edits.
|
|
@@ -21,7 +21,7 @@ Hard fail if the only evidence is a file diff.
|
|
|
21
21
|
|
|
22
22
|
## Skills
|
|
23
23
|
|
|
24
|
-
`browser-qa`, `testing-qa`, `accessibility-wcag`.
|
|
24
|
+
`browser-qa`, `testing-qa`, `accessibility-wcag`. For a release, also `ship`.
|
|
25
25
|
|
|
26
26
|
Available skills: `catalog.json` and the skill table in `USER_GUIDE.md`. Start with the skills named above. Use another listed skill when this job needs it.
|
|
27
27
|
|
|
@@ -31,7 +31,10 @@ Available skills: `catalog.json` and the skill table in `USER_GUIDE.md`. Start w
|
|
|
31
31
|
- One desktop screenshot of the happy path.
|
|
32
32
|
- Playwright `toBeVisible` with no image.
|
|
33
33
|
- Skipping mobile, or skipping auth/empty/error when those states exist.
|
|
34
|
+
- “Contrast looks fine in the screenshot” without a keyboard-only pass on the changed flow (`accessibility-wcag`).
|
|
35
|
+
- “Tests pass” with no command list (`testing-qa`).
|
|
36
|
+
- “LGTM, ship it” without env names, rollback, commands, and `browser-qa` paths for UI (`ship`).
|
|
34
37
|
|
|
35
38
|
## Done when
|
|
36
39
|
|
|
37
|
-
You opened the running app, captured desktop and mobile screenshots, **read the images**, ran applicable tests
|
|
40
|
+
You opened the running app, captured desktop and mobile screenshots, **read the images**, ran applicable tests **and listed the commands**, and wrote accept / accept-with-nits / reject with image paths under `qa-evidence/`. For screens, `accessibility-wcag` ran: a keyboard-only pass on the changed flow, not a screenshot guess. A release also has a `ship` go or no-go.
|
|
@@ -27,4 +27,4 @@ Available skills: `catalog.json` and the skill table in `USER_GUIDE.md`. Start w
|
|
|
27
27
|
|
|
28
28
|
## Done when
|
|
29
29
|
|
|
30
|
-
Access control is enforced in Postgres or the server, not only in the UI. Login, redirect, and denied states were checked in the browser when they exist. Secrets stay server-only.
|
|
30
|
+
Access control is enforced in Postgres or the server, not only in the UI. Login, redirect, and denied states were checked in the browser when they exist. Secrets stay server-only. For a release, contribute env and RLS checks to `ship`; do not treat “LGTM, ship it” as a go.
|
|
@@ -1,26 +1,83 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: accessibility-wcag
|
|
3
|
-
description: Use
|
|
3
|
+
description: Use when the user can't tab, a screen reader misses a control, contrast fails, a modal traps focus, or you need a WCAG 2.1 AA pass. Keyboard in the running browser, not a screenshot guess.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Accessibility (WCAG 2.1 AA)
|
|
7
7
|
|
|
8
|
+
Scan 2026-09-12 (structure only, no bodies copied): W3C WCAG 2.1 AA; GitHub packs that split keyboard / contrast / forms into specialist swarms. This pack keeps **one** skill. Do not install axe, Pa11y, an a11y MCP, or an 11-agent accessibility roster. Visual proof stays in `browser-qa`. Access control stays in `supabase-auth-rls` — hiding a control is not an accessibility pass and not authorization.
|
|
9
|
+
|
|
8
10
|
## Use when
|
|
9
11
|
|
|
10
|
-
Interactive UI, forms, navigation, or any screen a keyboard or screen-reader user will use.
|
|
12
|
+
Interactive UI, forms, navigation, dialogs, menus, tables, or any screen a keyboard or screen-reader user will use. Also when someone says “can't tab”, “contrast looks fine”, “add aria”, “WCAG”, or “is this accessible?”
|
|
13
|
+
|
|
14
|
+
Not a substitute for `frontend-design` (look and tokens) or `owasp-security-review` (auth). Run those as their owners; this skill is the keyboard-and-semantics pass.
|
|
15
|
+
|
|
16
|
+
## Do
|
|
17
|
+
|
|
18
|
+
1. Open the **running** changed flow. Name the route, auth state, and what the user must finish.
|
|
19
|
+
2. Keyboard-only: Tab, Shift+Tab, Enter, Space, and Escape. Record traps, missing focus, and controls you cannot reach.
|
|
20
|
+
3. Check the mapping table. Skip rows that do not apply; do not skip keyboard because “it's a mouse app.”
|
|
21
|
+
4. Capture desktop (~1280) and mobile (~390) for `browser-qa`. Screenshots help for contrast and target size; they do not replace step 2.
|
|
22
|
+
5. Return a findings table (P0 / P1 / P2) with where it showed up and whether it is **code-certain** or **inferred**.
|
|
11
23
|
|
|
12
24
|
## Checks
|
|
13
25
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
26
|
+
Map the change to a concrete control. Skip rows that do not apply.
|
|
27
|
+
|
|
28
|
+
| Area | In this pack |
|
|
29
|
+
| --- | --- |
|
|
30
|
+
| Semantics (1.3.1) | Real headings, landmarks, lists, and buttons. One `h1`. ARIA only when native HTML cannot. |
|
|
31
|
+
| Keyboard (2.1.1, 2.1.2, 2.4.3, 2.4.7) | Tab order matches visual order. Focus is visible. No trap except a real dialog. Escape closes overlays. |
|
|
32
|
+
| Contrast (1.4.3, 1.4.11) | 4.5:1 normal text, 3:1 large text and UI chrome. Do not sign off from the screenshot alone. |
|
|
33
|
+
| Color (1.4.1) | Color or a left-edge rail is not the only selected / error / success signal. |
|
|
34
|
+
| Forms (3.3.1–3.3.3) | Visible `<label htmlFor>`. Errors associated (`aria-describedby` / `aria-invalid`) and announced. |
|
|
35
|
+
| Name, Role, Value (4.1.2) | Custom controls expose name, role, and state. A `div` with an onClick is a finding. |
|
|
36
|
+
| Status (4.1.3) | Save, error, and loading results are announced (live region or a focus move). |
|
|
37
|
+
| Non-text (1.1.1) | `next/image` (and other images) have meaningful `alt`. Decorative images use empty `alt`. |
|
|
38
|
+
| Bypass (2.4.1) | Skip link or landmarks so repeating chrome is skippable. Kit HTML already has a skip link. |
|
|
39
|
+
| Motion | Honor `prefers-reduced-motion`. Motion is not the only signal. |
|
|
40
|
+
| Targets | Taps are usable on mobile. WCAG 2.1 AA does not require 2.2’s 24×24 rule; this pack still rejects unusable hits. |
|
|
41
|
+
| Auth vs a11y | A hidden button is not an a11y fix for unauthorized users. Enforce access in RLS / the server. |
|
|
42
|
+
|
|
43
|
+
## App Router mapping
|
|
44
|
+
|
|
45
|
+
- **Server Action forms:** every field has a label. Validation errors render in the UI, bound to the field, not only a thrown Error. Disabled submit is explained; `disabled` removes the control from the tab order — do not use it as the only “you cannot do this” hint if the user still needs to reach help text.
|
|
46
|
+
- **Dialogs / sheets:** labelled (`aria-labelledby` or visible title), focus moves in, Tab cycles inside, Escape closes, focus returns to the opener.
|
|
47
|
+
- **Menus / disclosure:** keyboard opens and closes; collapsed content is not in the tab order.
|
|
48
|
+
- **`next/image`:** `alt` describes the image’s job, not the filename.
|
|
49
|
+
- **Kit HTML (`USER_GUIDE.html`):** keep the skip link and safelight `:focus-visible` outline. Do not add `border-left` selection rails. Do not drop `lang` on `<html>`.
|
|
50
|
+
|
|
51
|
+
Field checklist: `checklists/accessibility.md`.
|
|
19
52
|
|
|
20
53
|
## Tools
|
|
21
54
|
|
|
22
|
-
Confirm in the running browser.
|
|
55
|
+
Confirm in the running browser. Preferred: host IDE browser. Playwright is backup for capture, not a substitute for Tab.
|
|
56
|
+
|
|
57
|
+
Screenshots are evidence for contrast, clipping, and target size. **Keyboard must still be exercised.** Optional automated scanners (axe, Pa11y) may run *after* the keyboard pass; they are not the pass.
|
|
58
|
+
|
|
59
|
+
Visual proof: `browser-qa` (`qa-evidence/<date>-<slug>/` plus `notes.md`). Record keyboard results in `notes.md`:
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
keyboard: tab-order pass|fail; focus-visible pass|fail; trap none|expected-modal|unexpected
|
|
63
|
+
contrast: measured|inferred-from-screenshot
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
`inferred-from-screenshot` is not enough to accept.
|
|
67
|
+
|
|
68
|
+
## Reject
|
|
69
|
+
|
|
70
|
+
- “Contrast looks fine in the screenshot” without a keyboard pass.
|
|
71
|
+
- Approving from TSX, ARIA comments, or a Storybook file without opening the running UI.
|
|
72
|
+
- Color or a left-edge rail as the only selected / error / success signal.
|
|
73
|
+
- Installing axe, Pa11y, or an accessibility MCP as the required tool.
|
|
74
|
+
- Copying a third-party accessibility skill body or standing up an a11y-agent swarm.
|
|
75
|
+
- Treating a hidden control as the accessibility fix for a user who is not allowed to act (that is `supabase-auth-rls`).
|
|
76
|
+
- A modal that does not restore focus, or that traps the page with no Escape.
|
|
77
|
+
- `aria-label` that contradicts visible text.
|
|
78
|
+
- Skipping keyboard because the flow is “mouse-only” or “admin-only.”
|
|
79
|
+
- Kit HTML: dropping the skip link or the `:focus-visible` outline.
|
|
23
80
|
|
|
24
81
|
## Done when
|
|
25
82
|
|
|
26
|
-
A keyboard-only pass works on the changed flow
|
|
83
|
+
A **keyboard-only pass works on the changed flow in the running UI**. Tab order matches visual order. Focus is visible. Remaining gaps are named with severity and code-certain vs inferred. Visual proof is in `browser-qa` evidence. Contrast was not signed off from the screenshot alone.
|
|
@@ -54,6 +54,7 @@ Use the host browser when it exists. Playwright is required text for Claude, Cod
|
|
|
54
54
|
- Playwright `toBeVisible` with no image.
|
|
55
55
|
- Updating screenshot baselines without saying what changed in the picture.
|
|
56
56
|
- Skipping mobile, or skipping auth/empty/error when those states exist.
|
|
57
|
+
- “Contrast looks fine in the screenshot” with no keyboard-only pass (`accessibility-wcag`).
|
|
57
58
|
|
|
58
59
|
## Screenshot critique
|
|
59
60
|
|