a11y-loop 0.2.2 → 0.2.4

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.
@@ -6,13 +6,13 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Makes AI coding agents decide accessibility while the work is still being planned and write accessible UI by default, then verify it in a real browser across the states they built — and say exactly what could not be checked. Ships the a11y-loop Agent Skill, a /a11y-plan command, and a plan-mode gate that declines a UI plan with no accessibility content in it.",
9
- "version": "0.2.2"
9
+ "version": "0.2.4"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
13
  "name": "a11y-loop",
14
14
  "source": "./",
15
- "version": "0.2.2",
15
+ "version": "0.2.4",
16
16
  "description": "Accessibility in the plan, not after the pull request. Adds §0 plan rules (conformance target, per-component criteria, the product decisions that foreclose accessibility, color tokens before components), standing WCAG 2.2 AA generation rules, and a PreToolUse hook on ExitPlanMode that declines a UI-touching plan with no accessibility content — once, handing back the section to fill in. Verification is the a11y-loop CLI: axe-core in Chromium across default, dark, forced-colors, reduced-motion and 320px passes.",
17
17
  "author": {
18
18
  "name": "Chan Meng",
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "name": "a11y-loop",
4
4
  "displayName": "a11y-loop",
5
- "version": "0.2.2",
5
+ "version": "0.2.4",
6
6
  "description": "Hard-gates plan mode: a plan that changes UI has to say what it decided about accessibility before it can be approved. Ships the a11y-loop skill and a /a11y-plan command alongside it.",
7
7
  "author": {
8
8
  "name": "Chan Meng",
package/README.md CHANGED
@@ -364,6 +364,16 @@ want the plugin. Do not do both: the plugin carries its own copy, so the model e
364
364
  `a11y-loop` *and* the directory-qualified `a11y-loop:a11y-loop`, paying the always-on token cost
365
365
  twice. If both names show up, delete `~/.claude/skills/a11y-loop` and keep the plugin.
366
366
 
367
+ **Upgrading is a different command from installing** — `claude plugin install` on something already
368
+ installed reports "already installed" and does nothing:
369
+
370
+ ```bash
371
+ npm i -g a11y-loop@latest
372
+ cp -r "$(npm root -g)/a11y-loop/skill/a11y-loop" ~/.claude/skills/ # if using the skill
373
+ claude plugin marketplace update chanmeng-a11y-loop # if using the plugin
374
+ claude plugin update a11y-loop@chanmeng-a11y-loop
375
+ ```
376
+
367
377
  ### Installation (details)
368
378
 
369
379
  ```bash
@@ -540,11 +550,17 @@ npm run test:integration # integration tests only (drives real Chromium)
540
550
  The optional plugin layer is plain Node with no dependencies. Exercise the plan gate directly:
541
551
 
542
552
  ```bash
543
- echo '{"session_id":"s1","tool_name":"ExitPlanMode","tool_input":{"plan":"Build a React modal with Tailwind CSS."}}' \
544
- | node hooks/plan-gate.mjs
545
- claude plugin validate . --strict
553
+ echo '{"session_id":"s1","tool_name":"ExitPlanMode","tool_input":{"plan":"Add a settings page in React: a modal dialog, a members table with row actions, tabs, and a dark mode toggle styled with Tailwind CSS."}}' \
554
+ | node hooks/plan-gate.mjs # expect a "deny" verdict
555
+ claude plugin validate . --strict # shape only — see AGENTS.md on why this is not proof
546
556
  ```
547
557
 
558
+ Silence and exit 0 is the gate's normal answer, so an example that prints nothing proves nothing:
559
+ the plan has to clear 40 characters and be unambiguously about UI, or you are testing the pass path
560
+ by accident. Re-running the *same* plan returns `defer` rather than `deny` — the loop guard spends
561
+ each plan's hash once, deliberately — so prefix with `CLAUDE_PLUGIN_DATA="$(mktemp -d)"` for a clean
562
+ verdict. See [`AGENTS.md`](AGENTS.md) for the rest of the plugin-layer gotchas.
563
+
548
564
  See [`AGENTS.md`](AGENTS.md) for AI-agent-oriented project conventions, the fixture-manifest
549
565
  testing pattern, the loop discipline expected when touching `demo/` or other UI, and the rule that
550
566
  keeps `skill/` free of any Claude-Code-specific mechanism.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "a11y-loop",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "Makes AI coding agents decide accessibility while the work is still being planned and write accessible UI by default, then proves what it can prove with a real browser audit across the states they built — and tells you exactly what it could not check.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -28,7 +28,7 @@ compatibility: >-
28
28
  The generation and honesty rules apply with or without the CLI; every step
29
29
  that says "audit" requires it.
30
30
  metadata:
31
- "a11y-loop/version": "0.2.2"
31
+ "a11y-loop/version": "0.2.4"
32
32
  allowed-tools: 'Bash(a11y-loop *) Bash(npx a11y-loop *) Bash(node ${CLAUDE_SKILL_DIR}/../../src/cli.js *)'
33
33
  ---
34
34