Skip to content

Commit ca7828d

Browse files
blafourcadeclaude
andauthored
feat(aidd-qa): create an implementation-independent QA plugin (#917)
* feat(aidd-qa): scaffold acceptance QA plugin from browser QA Moves plugins/aidd-dev/skills/11-browser-qa to plugins/aidd-qa/skills/01-acceptance-qa (git history preserved) and rewrites it to derive scenarios only from acceptance criteria, never the diff or the source code. Renames its Playwright reference to interface-browser-playwright-cli.md, adds Criterion/Expected/Actual columns to the QA report template, and pins the architecture-rules sweep count to 49 skills-with-actions. Refs #908 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * feat(aidd-dev): retire browser-qa to a redirect plugins/aidd-dev/skills/11-browser-qa now holds a single redirect action that names the aidd-qa plugin and its install command, then stops without loading a scope or recording evidence. Drops Browser QA from the plugin description and README now that it moved. Refs #908 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * chore(marketplace): register aidd-qa plugin Adds the aidd-qa entry to marketplace.json (recommended: false, off the curated install path like aidd-ui and aidd-telemetry), versions it in release-please-config.json and the manifest, adds it to the build-plugin CI matrix, and adds aidd-qa/qa as commitlint scopes. Updates docs/ARCHITECTURE.md, docs/CATALOG.md, docs/MAINTAINERS.md, README.md and the project memory bank (architecture, deployment, project-brief, testing) to name the 9th plugin and its new owner of browser acceptance QA. Refs #908 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * docs(aidd-qa): add the plan and its validation record Adds the phased plan behind the aidd-qa plugin (issue #908) and the gate, host-proof, and architecture-conformance evidence collected while implementing it. Refs #908 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * docs(aidd-qa): correct the validation record The previous version overstated what was observed: it claimed each commit's hook run was gate evidence for that commit's own tree, when every gate actually ran once against the final working tree. Records the two intermediate trees are not independently clean, the blocked push (pre-existing, machine-specific cli-test failure, isolated and unrelated to this branch's changes), and deviations not yet noted. Refs #908 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * fix(aidd-dev): scope 06-test to developer-side validation The skills description did not exclude acceptance QA, so it could be picked for reviewer evidence instead of the dedicated aidd-qa plugin. Frame it as developer-side test validation during implementation and add that exclusion; CATALOG.md is regenerated from the new description. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * fix(aidd-qa): restrict criteria sourcing and complete the report contract 01-load-scope admitted a plan as a criteria source outright; criteria now come only from the issue, spec, or user story (or ones the user gives), and a plans browser Test Scope edge case is admitted only when it maps to one of those. The stale fewer-than-3 edge-case count check is dropped, and the first process step now opens with a verb. qa-report-template gains an Out of interface section so a criterion with no browser-observable outcome is listed, never silently dropped, and the header verdict cannot read pass without stating that list. Verdict values are now explicit (pass | fail | blocked per scenario, plus skipped at the header when nothing is browser-observable), and the Duration column is restored. 03-run-scenarios is wired to fill both. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * docs: correct plugin count and the pushed validation record architecture.mds fits-together diagram still read plugins/ dot 8 after the aidd-qa plugin landed; the stack table already said 9. Align the diagram with it. The aidd-qa plugin tasks validation.md described the push as blocked on a local node/codex PATH collision. It has since been resolved (node binary copied into an isolated directory, prepended to PATH; a symlink does not work because process.execPath resolves it) and cd048e6 was pushed with the full pre-push gate passing, no --no-verify. Replace the stale blocked account with what actually happened. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * fix(aidd-qa): add run-verdict rule and stop load-scope early Give run-scenarios an ordered rule for the header verdict (any fail beats any blocked, beats no scenario ran producing skipped, else pass), restoring the "mark the run failed" behavior review #908 found missing after e8d3538. Move the zero-browser-observable-criteria short circuit into load-scope itself: it now stops right after its Filter step and reports skipped, so prerequisites and prepare-run never run for a scope with no browser-observable criterion. Document the exception in SKILL.md's transversal rules, since the router's linear flow otherwise implies prerequisites always runs first. Also merges a duplicate load-scope Test bullet review #908 flagged. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * fix(aidd-dev): describe 06-test as developer-side in its README The 06-test SKILL.md description was narrowed to developer-side validation with no acceptance evidence and no sibling-plugin address in ba2a59a, but this hand-written README row still read like generic "write and iterate on tests" coverage. Review #908 flagged the drift. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * docs: correct 06-test's catalog description and the validation record docs/CATALOG.md still described 06-test as generic test coverage after ba2a59a narrowed its scope; align it with the SKILL.md description and the now-fixed aidd-dev README row. The aidd-qa plugin's validation record had gone stale across three commits landed after it was last corrected (ba2a59a, e8d3538, cff70e6): its commit table stopped five commits short of HEAD and its push section named only the first push's SHA. Rewrite both against the current branch history, re-run the scripts suite and architecture check on the final tree with one consistent number instead of the earlier 503-pass/501-pass-plus-2-skip split, and describe the push mechanism (an isolated copied-node PATH, never --no-verify) without freezing it to a SHA the next push would make stale again. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * fix(aidd-qa): route the zero-criterion skip before prerequisites The prior transversal rule said prerequisites never runs when load-scope finds no browser-observable criterion, but the router still lists 00-prerequisites ahead of 01-load-scope, so an executor following "read only the next action's file" would check and possibly install ffmpeg/Playwright before load-scope ever got to decide. Move the check itself ahead of 00: the router now says to test the criteria before invoking prerequisites at all, and to run load-scope alone (reporting skipped) when none is browser-observable. Also corrects 8924333's commit body, which said this short circuit happens "after its Filter step" -- load-scope actually stops one step later, after Locate resolves the evidence folder the skip report needs. That commit is already pushed and is not being amended; recorded here instead. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * fix(aidd-dev): drop the addressing note from the 06-test README row db49dea's fix copied the dispatch's own writing constraint ("no sibling-plugin address") into the README row as if it described what 06-test does. Replace it with what a reader actually needs: 06-test is not independent acceptance QA or reviewer evidence, mirroring the SKILL.md description's own "Do NOT use for" clause. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * docs: correct 06-test's catalog description and the validation record docs/CATALOG.md's 06-test row still ended with the addressing note "no sibling-plugin address" that a6e0cda already dropped from the README row for the same reason: it is this task's own writing constraint, not a description of what the skill does. Replace it with the same "not independent acceptance QA or reviewer evidence" wording. Rewrite the validation record's "Commits" and "Push" sections, which had gone stale across three commits (ba2a59a, e8d3538, cff70e6) and now this repair's own nine, and describe the repair itself honestly: what review #908 found, the routing-rule and docs-wording bugs the first pass at fixing it introduced and a second pass corrected, and the final gate re-run's numbers with exit codes captured directly rather than through a wrapper that can mask them. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * fix(aidd-qa): report a fully rejected scenario set as blocked, not skipped A run with browser-observable criteria whose every scenario got rejected (no executable teardown, etc.) fell through to header verdict skipped, which the template and load-scope reserve for zero browser-observable criteria. A rejected criterion then appeared in neither Scenarios nor Out of interface, so a candidate that was never validated read as nothing to validate. Rejections are now carried forward with their reason from load-scope's Validate and prepare-run's Reset into run-scenarios' report, which adds a Rejected section and blocks the run whenever any exists. load-scope's own Skip step (zero criteria survive the Filter) now writes and returns <evidence-folder>/qa.md instead of leaving the destination to the agent. SKILL.md's router row and mermaid are corrected to say "at most one" happy path and to show the skip exit from load-scope to the report. Review #908. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * docs: correct the validation record's defect count and commit table, add install proof Review #908's second follow-up pass on this record found "fourth defect" where the load-scope-skips-prerequisites fix is really the second in its own list, row 14's subject carrying a spurious "(final)" that never appeared in 3c81dfb's real message, and "this repair's own three commits (9-11, then 12-14)" undercounting a six-commit repair. All three are fixed here; "defect four" describing the 06-test docs fix is left alone, since that one really is the fourth defect in the list. Also adds rows 15-16 for this round's own commits (row 16, this commit, referred to generically since it cannot state its own SHA), a new "Second repair re-run" gate table, and a Host proof entry for criterion 10: an isolated-HOME sandbox install of aidd-qa for both --tool claude and --tool codex, run to close the gap the review found between the criterion and its recorded proof. Review #908. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * fix(aidd-qa): guard resets and tighten scope order after a real run A first real run on a PWA wiped the developer's own database through the documented test reset. Resets now require proof of test-only storage, or one question. - run load-scope before prerequisites; drop the special skip rule - split partly observable criteria, quote the rest out of interface - run-code returns per-step expected, actual, ok; a throw is tooling only - run browser commands from a temp dir outside the application repository Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * fix(aidd-qa): condense load-scope and align teardown with session close - load-scope: 7 steps, 4 tests; edges only when a criterion names them, an unmapped plan edge is never a candidate nor a rejection - prepare-run: prefer a test-only entry over the development one - reference: tear down and verify baseline before closing the session; the no-substitution rule scopes to runner commands Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * fix(aidd-qa): let project memory decide the entry, locate the reset guard - prepare-run: Reuse before Preflight; drop the generic test-only preference, project memory decides and the reset guard asks - load-scope: teardown is checked in prepare-run only; Show names the evidence folder Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * fix(aidd-qa): check storage before starting the entry The reset guard ran only at teardown, after the entry had already started on possibly shared storage (and run its migrations). It now runs in Reuse, before anything starts. The router row matches load-scope's edge rule. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * refactor(aidd-qa): condense prepare-run and run-scenarios Same behavior in fewer words: the verdict order is stated once, the prepare-run return step folds into its output, and run-scenarios' input names everything load-scope hands over. A blocked row reports evidence `none`; only a failed take is kept. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * feat(aidd-dev): remove the retired browser-qa redirect Browser QA now lives in the aidd-qa plugin, so aidd-dev owns no QA surface. The catalog lists aidd-qa's renumbered actions, and the plan records the removal. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * chore(aidd-qa): start the plugin at 1.0.0 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b * chore(aidd-qa): release the plugin as 1.0.0 Pin the first release with the package's `release-as`; the manifest stays at 0.1.0 until release-please writes 1.0.0. A `Release-As` footer would re-version every other path the squash commit touches. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WuxKN5bm96LFhU97rsgBUW AIDD-Session-Id: 6d6ccc35-f6c1-417d-84a6-9a0b70474e6b --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
1 parent cdca8e8 commit ca7828d

39 files changed

Lines changed: 785 additions & 168 deletions

‎.claude-plugin/marketplace.json‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,15 @@
7878
"metadata": {
7979
"recommended": false
8080
}
81+
},
82+
{
83+
"name": "aidd-qa",
84+
"source": "./plugins/aidd-qa",
85+
"description": "Acceptance QA: validates observable behavior against acceptance criteria and records reviewer evidence. Browser is the only supported interface today.",
86+
"strict": true,
87+
"metadata": {
88+
"recommended": false
89+
}
8190
}
8291
]
8392
}

‎.github/workflows/ci.yml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ jobs:
232232
aidd-refine,
233233
aidd-ui,
234234
aidd-telemetry,
235+
aidd-qa,
235236
]
236237
steps:
237238
- name: Check if this plugin was released

‎.release-please-manifest.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
"plugins/aidd-refine": "3.0.1",
99
"plugins/aidd-ui": "0.2.1-alpha.0",
1010
"plugins/aidd-telemetry": "0.2.0",
11+
"plugins/aidd-qa": "0.1.0",
1112
"cli": "5.3.0"
1213
}

‎README.md‎

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Unify **engineering teams** around **standardized workflows** and **shared best
1111
🧱 **IDE agnostic** · 🏗️ **Legacy systems** · 🌱 **Token-optimized** · 🇫🇷 **Made in France**
1212

1313
<p>
14-
<!--counts:start--><kbd>8 plugins</kbd> · <kbd>51 skills</kbd> · <kbd>2 agents</kbd><!--counts:end-->
14+
<!--counts:start--><kbd>9 plugins</kbd> · <kbd>51 skills</kbd> · <kbd>2 agents</kbd><!--counts:end-->
1515
</p>
1616

1717
[![Open Source](https://img.shields.io/badge/Open_Source-Yes-yellow?logo=open-source-initiative&logoColor=white)](https://opensource.org/)
@@ -58,7 +58,7 @@ Why not just write your own commands? → [FAQ](docs/FAQ.md#-why-aidd-instead-of
5858

5959
### Claude Code
6060

61-
Installs the 6 stable plugins (`aidd-ui` is 🚧 alpha and `aidd-telemetry` 🧪 beta, install separately — see [Plugins](#-plugins)).
61+
Installs the 6 stable plugins (`aidd-ui` is 🚧 alpha, `aidd-telemetry` 🧪 beta, and `aidd-qa` 🆕 new, install those separately — see [Plugins](#-plugins)).
6262

6363
**In the session** (slash commands)
6464

@@ -240,7 +240,7 @@ learning only when it is durable enough to improve the next feature.
240240
241241
## 🧩 Plugins
242242

243-
Eight plugins covering the whole SDLC — **install all of them**; they work together. (`aidd-ui` is 🚧 **alpha** and `aidd-telemetry` 🧪 **beta** — both off the curated path.)
243+
Nine plugins covering the whole SDLC — **install the six stable ones**; they work together. (`aidd-ui` is 🚧 **alpha**, `aidd-telemetry` 🧪 **beta**, and `aidd-qa` 🆕 **new** — all three off the curated path.)
244244

245245
<table>
246246
<tr>
@@ -257,9 +257,9 @@ Project init, memory bank, context-artifact generation, diagrams, learning, expl
257257

258258
### ⚙️ [aidd-dev](plugins/aidd-dev/README.md)
259259

260-
`11 skills` · stable
260+
`10 skills` · stable
261261

262-
Code transformation: plan, implement, assert, audit, review, test, refactor, debug. Standalone Browser QA records short web evidence.
262+
Code transformation: plan, implement, assert, audit, review, test, refactor, debug.
263263

264264
</td>
265265
<td width="33%" valign="top">
@@ -320,7 +320,15 @@ UI / UX design — smoke-test only, not ready for use.
320320
Answers what a piece of work cost — tokens, models, and which skill spent them. The switch is git-tracked, so it applies to everyone who clones; opt out per person with `AIDD_TELEMETRY=0`. Nothing leaves your machine.
321321

322322
</td>
323-
<td width="33%" valign="top"></td>
323+
<td width="33%" valign="top">
324+
325+
### 🎬 [aidd-qa](plugins/aidd-qa/README.md) 🆕
326+
327+
`1 skill` · **new**
328+
329+
Acceptance QA — locks browser scenarios from acceptance criteria and records reviewer evidence.
330+
331+
</td>
324332
</tr>
325333
</table>
326334

‎aidd_docs/memory/architecture.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ The macro technical shape: the stack, how the pieces fit, and the decisions behi
1010
| --- | --- |
1111
| Product | markdown — skills, agents, rules, templates. No framework runtime; an LLM interprets them. |
1212
| Delivery | Node `>=22.12`, pnpm. `cli/` is the `aidd` binary; `kanban/` is a private package. |
13-
| Manifest | `.claude-plugin/marketplace.json`, the plugin manifest: 8 plugins, no version among them. Versions are release-please's, in `deployment.md`. |
13+
| Manifest | `.claude-plugin/marketplace.json`, the plugin manifest: 9 plugins, no version among them. Versions are release-please's, in `deployment.md`. |
1414

1515
## How it fits together
1616

1717
```mermaid
1818
flowchart LR
19-
Manifest[".claude-plugin/marketplace.json"] -->|lists| Plugins["plugins/ · 8"]
19+
Manifest[".claude-plugin/marketplace.json"] -->|lists| Plugins["plugins/ · 9"]
2020
Plugins -->|ships| Surfaces["skills · agents · commands · hooks · rules"]
2121
CLI["cli/ · aidd"] -->|reads| Manifest
2222
CLI -->|installs| Target["a project's AI tool dir"]
@@ -40,6 +40,6 @@ The concern-to-plugin taxonomy is canonical in [`docs/ARCHITECTURE.md`](../../do
4040

4141
## Gotchas
4242

43-
- 8 plugins ship, 2 off the curated install path: `aidd-ui` is alpha, `aidd-telemetry` beta and opt-in.
43+
- 9 plugins ship, 3 off the curated install path: `aidd-ui` is alpha, `aidd-telemetry` beta and opt-in, `aidd-qa` new and unproven outside this repository.
4444
- A skill never links outside itself: the tree ships both flat and as a marketplace, so no relative path survives both.
4545
- Bundled hooks run Node. No `node` on `PATH`, no memory refresh and no run journal.

‎aidd_docs/memory/deployment.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ Branch model in `vcs.md`, cadence and safety rules in [`RELEASE.md`](../../RELEA
5050
4. Archives are staged outside the repo tree, uploaded with `gh release upload --clobber`.
5151
5. `back-merge.yml` folds `main` into `next`.
5252

53-
Config: `release-please-config.json`, ten packages. Manifest: `.release-please-manifest.json`.
53+
Config: `release-please-config.json`, eleven packages. Manifest: `.release-please-manifest.json`.
5454

5555
## Gotchas
5656

‎aidd_docs/memory/project-brief.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ What this project is, the problem it solves, and its domain language. The non-de
4040
| Generate context artifacts | `aidd-context:03-context-generate` and its per-kind generators |
4141
| Development loop | `aidd-dev` — plan, implement, assert, audit, review, test, refactor, debug |
4242
| Typed product backlog | `aidd-pm` — brief, epic, story, spec, spike, defect |
43+
| Acceptance QA evidence | `aidd-qa:01-acceptance-qa` |
4344
| Refine input and output | `aidd-refine` — brainstorm, challenge, blind spots |
4445
| End-to-end orchestration | `aidd-orchestrator:01-sdlc` |
4546
| Measure what a session cost | `aidd-telemetry`, opt-in, plus `aidd telemetry` |

‎aidd_docs/memory/testing.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ How the project is tested: the layers, the tools, and the conventions. Where tes
1313
| `cli/` | vitest, four projects — see the CLI bank |
1414
| `kanban/` | its own vitest suite. It shares no code with `cli/` |
1515
| Per-tool distributions | golden snapshots in `cli/tests/golden/`, mirrored by the `build-per-tool` CI matrix; Claude Code's own `plugin validate` over a fresh claude build, in `cli-ci.yml` |
16-
| Browser journeys | `aidd-dev:11-browser-qa`, see below |
16+
| Browser journeys | `aidd-qa:01-acceptance-qa`, see below |
1717

1818
## Tools
1919

@@ -46,4 +46,4 @@ CI runs more: `validate.yml` re-runs the whole pre-commit over the whole tree on
4646

4747
- Runner: `npx --yes @playwright/cli@0.1.17`, the framework pin. Never `latest` during QA.
4848
- Also required: `ffmpeg` and `ffprobe`. Output is WebM evidence per scenario.
49-
- Owned by `aidd-dev:11-browser-qa`; this repository ships the capability, it has no browser journey of its own.
49+
- Owned by `aidd-qa:01-acceptance-qa`; this repository ships the capability, it has no browser journey of its own.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"backlog": "ai-driven-dev/framework#908",
3+
"written_at": "2026-09-24T00:00:00Z",
4+
"written_by": "aidd-dev:01-plan"
5+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
---
2+
status: pending
3+
---
4+
5+
# Instruction: Scaffold `aidd-qa` with the acceptance QA skill
6+
7+
## Architecture projection
8+
9+
> Tree of the final files. ✅ create · ✏️ modify · ❌ delete
10+
11+
```txt
12+
plugins/aidd-qa/
13+
├── .claude-plugin/plugin.json ✅ name, version 0.1.0, description, skills[]
14+
├── README.md ✅ concern, skill table, browser-only scope, install line
15+
└── skills/01-acceptance-qa/
16+
├── SKILL.md ✅ router: prerequisites → load-scope → prepare-run → run-scenarios
17+
├── actions/00-prerequisites.md ✅ moved from aidd-dev, unchanged behavior
18+
├── actions/01-load-scope.md ✅ rewritten: scenarios derive from acceptance criteria only
19+
├── actions/02-prepare-run.md ✅ moved, deterministic setup and teardown kept
20+
├── actions/03-run-scenarios.md ✅ moved, report fields expected/actual/verdict/evidence
21+
├── assets/qa-report-template.md ✅ one row per scenario: expected, actual, verdict, evidence
22+
└── references/interface-browser-playwright-cli.md ✅ moved recording contract, names browser as the supported interface
23+
```
24+
25+
## User Journey
26+
27+
```mermaid
28+
flowchart TD
29+
A[Acceptance criteria + reviewed candidate] --> B[prerequisites]
30+
B --> C[load-scope: one scenario per browser-observable criterion]
31+
C --> D[prepare-run: auth, fixtures, teardown]
32+
D --> E[run-scenarios: record, verdict, reset]
33+
E --> F[qa.md + qa/*.webm]
34+
```
35+
36+
## Test Scope
37+
38+
```mermaid
39+
---
40+
title: Test scope
41+
---
42+
journey
43+
section Setup
44+
copy the plugin into a fresh marketplace checkout => plugin directory present: 5: system
45+
section Happy path
46+
run check-architecture-rules on plugins/aidd-qa => no violation: 5: cli
47+
section Edge case - criterion not browser-observable
48+
load-scope given a criterion with no browser outcome => criterion listed as out of interface, no scenario: 5: system
49+
```
50+
51+
## Tasks to do
52+
53+
### `1)` Manifest and README
54+
55+
> The plugin declares itself and one skill.
56+
57+
1. `plugin.json` from `aidd-ui`'s shape: `name: aidd-qa`, `version: 0.1.0`, description "Acceptance QA: validates observable behavior against acceptance criteria and records reviewer evidence. Use when … Do NOT use for …", `skills: ["./skills/01-acceptance-qa"]`, keywords.
58+
2. `README.md`: concern, skill table, browser as the only interface today, `/plugin install aidd-qa@aidd-framework`. No sibling-plugin address.
59+
60+
### `2)` Move the skill
61+
62+
> Browser QA lives under `aidd-qa` with history kept.
63+
64+
1. `git mv plugins/aidd-dev/skills/11-browser-qa plugins/aidd-qa/skills/01-acceptance-qa` (phase 2 recreates the redirect in `aidd-dev`).
65+
2. Rename `references/run-scope-playwright-cli.md` to `references/interface-browser-playwright-cli.md`; update the link in `03-run-scenarios.md`.
66+
3. `SKILL.md`: frontmatter `name: 01-acceptance-qa`, description stating input = acceptance criteria + reviewed candidate, browser interface; router table and transversal rules kept; add rule "never derive a scenario from the diff or the source code".
67+
68+
### `3)` Acceptance-derived scope
69+
70+
> Scenarios come from acceptance criteria, not from implementation.
71+
72+
1. `01-load-scope` Input: acceptance criteria (issue, spec, plan) + reference to the reviewed candidate (branch, commit, or running URL).
73+
2. Process: one happy path from the criteria's primary journey, edge cases only from criteria or the plan's browser Test Scope; each scenario keeps the criterion it proves; a criterion with no browser-observable outcome is listed as out of interface, never tested by reading code.
74+
3. Remove steps that source edge cases from the implementation artifact or related tests.
75+
4. Add a `## Test` section to every action that lacks one.
76+
77+
### `4)` Report per scenario
78+
79+
> Each scenario states expected, actual, verdict, evidence.
80+
81+
1. `qa-report-template.md`: header verdict, source (acceptance criteria path), candidate, run date; table `Scenario | Criterion | Expected | Actual | Verdict | Evidence`.
82+
2. `03-run-scenarios` Report step and Test reference those fields; video validation steps kept.
83+
84+
## Test acceptance criteria
85+
86+
| Task | Acceptance criteria |
87+
| --- | --- |
88+
| 1 | `plugin.json` validates against its schema; no `aidd-<x>:<y>` of another plugin in README |
89+
| 2 | `plugins/aidd-qa/skills/01-acceptance-qa/` holds 4 actions, 1 asset, 1 reference; `check-architecture-rules.js` passes |
90+
| 3 | `01-load-scope` names acceptance criteria as its only scenario source and forbids diff or source-derived scenarios |
91+
| 4 | the report template has Expected, Actual, Verdict, Evidence columns; video checks (codec, dimension, duration, frames) still present |

0 commit comments

Comments
 (0)