Skip to content
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
## Agentic framework for software engineers to produce 100% quality code with IA, agonistically.

<p>
<!--counts:start--><kbd>7 plugins</kbd> · <kbd>40 skills</kbd> · <kbd>2 agents</kbd><!--counts:end--> · <kbd>MIT</kbd>
<!--counts:start--><kbd>7 plugins</kbd> · <kbd>41 skills</kbd> · <kbd>2 agents</kbd><!--counts:end--> · <kbd>MIT</kbd>
</p>

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
Expand Down Expand Up @@ -229,9 +229,9 @@ Project init, memory bank, context-artifact generation, diagrams, learning, expl

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

`11 skills` · stable
`12 skills` · stable

SDLC loop: plan, implement, assert, audit, review, test, refactor, debug.
SDLC loop: plan, implement, assert, audit, review, test, refactor, debug. Standalone Browser QA records short web evidence.

</td>
<td width="33%" valign="top">
Expand Down
3 changes: 2 additions & 1 deletion docs/CATALOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ Bootstrap, project init, context-artifact generation, diagrams, learning, and ex

## 💻 aidd-dev

The development SDLC: plan, implement, assert, audit, review, test, refactor, debug, for-sure, todo.
The development SDLC: plan, implement, assert, audit, review, test, refactor, debug, for-sure, todo. Standalone Browser QA records short web evidence.

| Skill | Role | Actions |
| --------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
Expand All @@ -49,6 +49,7 @@ The development SDLC: plan, implement, assert, audit, review, test, refactor, de
| `08-debug` | Reproduce and fix bugs with a test-driven workflow | `01-reproduce`, `02-debug`, `03-reflect-issue` |
| `09-for-sure` | Iterative loop that retries until a success condition is met | `01-init-tracking`, `02-auto-accept`, `03-autonomous-loop` |
| `10-todo` | Split the prompt into independent todos, run one implementer agent per todo in parallel | `01-todo` |
| `11-browser-qa` | Record short reviewer videos for browser-scoped happy and edge cases | `01-load-scope`, `02-prepare-run`, `03-run-scenarios` |

## 📋 aidd-pm

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,14 @@ How the project is tested: the layers, the tools, and the conventions. Where tes

- <The command(s) to run each layer>

## Browser QA

- Entry: <The local application URL and command that starts it>
- Auth: <The test identity or auth bootstrap, without secrets>
- State: <The deterministic fixture source and executable reset or teardown>

<!--
Capture: the macro strategy, tools, conventions, and run commands.
Capture: the macro strategy, tools, conventions, and run commands. Keep Browser QA only when the project has a browser journey.
Skip: listing individual test files. Point to the test directory.
Remove this comment when filled.
-->
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ The contract every generated skill satisfies. `skill-generate` obeys it too.
- **R4.** `argument-hint`: the action slugs when actions run one at a time, the user's cases (`setup | refresh | rewire`) for a pipeline, omitted for one action.
- **R5.** `name` is not the invocation token: a colon or prefix breaks loading. In prose call a skill `plugin:folder`.
- **R6.** One fact, one home. An action acts within a router rule and cites a shared reference by a markdown link `[name](path)`, never restating either.
- **R7.** `references/` are read in place, `assets/` are copied or filled. A template holds no rule.
- **R7.** `references/` are read in place. `assets/` are copied or filled and own their artifact-local fill contract.
- **R8.** References stay flat, nesting one directory deep only as a load boundary. Each stands alone, never pulling in another.
- **R9.** One file, one artifact. Split two apart only when a path needs one without the other.
- **R10.** Budget what a run reads, not file size: the router stays the leanest file.
Expand Down
5 changes: 3 additions & 2 deletions plugins/aidd-dev/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "aidd-dev",
"version": "2.3.1",
"description": "Code transformation: Dev SDLC orchestrator (code-shipping pipeline), plan, assert, audit, review, test, refactor, debug, for-sure. Hosts engineering agents.",
"description": "Code transformation: Dev SDLC orchestrator, plan, assert, audit, review, test, refactor, debug, for-sure, plus short standalone Browser QA evidence. Hosts engineering agents.",
"author": {
"name": "AI-Driven Dev",
"url": "https://github.com/ai-driven-dev"
Expand All @@ -18,7 +18,8 @@
"./skills/07-refactor",
"./skills/08-debug",
"./skills/09-for-sure",
"./skills/10-todo"
"./skills/10-todo",
"./skills/11-browser-qa"
],
"agents": [
"./agents/executor.md",
Expand Down
12 changes: 12 additions & 0 deletions plugins/aidd-dev/CATALOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai
- [`skills/08-debug`](#skills08-debug)
- [`skills/09-for-sure`](#skills09-for-sure)
- [`skills/10-todo`](#skills10-todo)
- [`skills/11-browser-qa`](#skills11-browser-qa)

---

Expand Down Expand Up @@ -156,3 +157,14 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai
| `actions` | [01-todo.md](skills/10-todo/actions/01-todo.md) | - |
| `-` | [SKILL.md](skills/10-todo/SKILL.md) | `Split the user prompt into independent todos and run one executor agent per todo in parallel, then report a minimal table. Use when the user says "todo" or asks to fan out a multi-part request into parallel implementations.` |

#### `skills/11-browser-qa`

| Group | File | Description |
|-------|------|---|
| `actions` | [01-load-scope.md](skills/11-browser-qa/actions/01-load-scope.md) | - |
| `actions` | [02-prepare-run.md](skills/11-browser-qa/actions/02-prepare-run.md) | - |
| `actions` | [03-run-scenarios.md](skills/11-browser-qa/actions/03-run-scenarios.md) | - |
| `assets` | [qa-report-template.md](skills/11-browser-qa/assets/qa-report-template.md) | - |
| `references` | [run-scope-playwright-cli.md](skills/11-browser-qa/references/run-scope-playwright-cli.md) | - |
| `-` | [SKILL.md](skills/11-browser-qa/SKILL.md) | `Run post-review browser QA and produce short named videos for a locked happy path and sourced browser edge cases. Use when the user wants concise reviewer evidence for a web journey. Not for API, CLI, automated tests, diff review, or application fixes.` |

3 changes: 2 additions & 1 deletion plugins/aidd-dev/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Code transformation plugin for the AI-Driven Development framework.

First time? Install with `/plugin install aidd-dev@aidd-framework`, then run `aidd-dev:00-sdlc`.

Covers the full SDLC coding loop: orchestrator, planning, implementation, assertions, audits, code review, testing, refactoring, debugging, for-sure, and parallel todo fan-out. Also hosts AI agents.
Covers the full SDLC coding loop: orchestrator, planning, implementation, assertions, audits, code review, testing, refactoring, debugging, for-sure, and parallel todo fan-out. Standalone Browser QA records short web evidence. Also hosts AI agents.

## Skills

Expand All @@ -25,6 +25,7 @@ Covers the full SDLC coding loop: orchestrator, planning, implementation, assert
| [2.8] | [debug](skills/08-debug/SKILL.md) | Reproduce and fix bugs systematically using test-driven workflow, root cause analysis, and hypothesis validation. |
| [2.9] | [for-sure](skills/09-for-sure/SKILL.md) | Iterative agent loop that tracks attempts and retries until a success condition is met. |
| [2.10] | [todo](skills/10-todo/SKILL.md) | Split the prompt into independent todos, run one executor agent per todo in parallel, then report a minimal table. |
| [2.11] | [browser-qa](skills/11-browser-qa/SKILL.md) | Record one short named video for a locked browser happy path and each sourced browser edge case. |

## Agents

Expand Down
3 changes: 2 additions & 1 deletion plugins/aidd-dev/skills/01-plan/actions/04-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,14 @@ A feature folder, always at `aidd_docs/tasks/<yyyy_mm>/<yyyy_mm_dd>_<feature-slu

1. **Phases.** Break the work into phases, each a coherent unit of work that ships and verifies on its own, sized for one executor pass. Let the work decide how many.
2. **Folder.** Reuse the feature folder the source already lives in, or create one.
3. **Fill.** Scaffold from the templates, filling only what qualifies and omitting any section whose bar nothing meets. Slice the projection across the phases. Resources lists external sources only, not code files. Decisions holds architecture-magnitude choices only. Keep a phase's Wireframe only when that phase ships UI.
3. **Fill.** Fill the plan and each phase from their templates, following the inline contracts. Slice the projection across the phases.
4. **Show.** Display the written paths.
5. **Review.** Show the complete plan and its phases with a confidence score (0 to 10, ✓ reasons and ✗ risks). Take feedback, revise the files, and re-show until approved. The score is never written to the plan.

## Test

- `aidd_docs/tasks/<yyyy_mm>/<yyyy_mm_dd>_<feature-slug>/plan.md` exists with one `phase-<n>.md` per phase next to it.
- Every written file satisfies its template's inline contract.
- No `{...}` placeholder is left in any written file.
- The phase projection slices together cover the modify, create, and delete lists.
- A confidence score was reported and written to no file.
25 changes: 25 additions & 0 deletions plugins/aidd-dev/skills/01-plan/assets/phase-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,31 @@ flowchart TD
A[TODO]
```

## Test Scope

<!-- Required for every phase. Keep Setup, Happy path, any qualifying Edge cases, and any required Teardown in this one journey. -->

```mermaid
---
title: Test scope
---
journey
%% Every task has exactly one actor: browser, api, cli, or system.
section Setup
%% Deterministic preconditions and fixtures. Its channel may differ.
{prepare fixture} => {ready state}: 5: {channel}
section Happy path
%% Required. Every task states action => observable outcome. All tasks use the same channel.
{action} => {observable expected outcome}: 5: {channel}
%% Add one named section per edge case only when its trigger and expected outcome are known.
section Edge case - {name}
%% Every task names trigger => action => observable outcome. All tasks use the same channel.
{trigger} => {action} => {observable expected outcome}: 1: {channel}
%% Include only when a scenario changes state. Its channel may differ.
section Teardown
{cleanup or reset action} => {baseline restored}: 5: {channel}
```

## Wireframe

<!-- UI phase only. No UI => omit the section, don't invent one. -->
Expand Down
28 changes: 28 additions & 0 deletions plugins/aidd-dev/skills/11-browser-qa/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
name: 11-browser-qa
description: Run post-review browser QA and produce short named videos for a locked happy path and sourced browser edge cases. Use when the user wants concise reviewer evidence for a web journey. Not for API, CLI, automated tests, diff review, or application fixes.
argument-hint: load-scope | prepare-run | run-scenarios
---

# Browser QA

```mermaid
flowchart LR
scope["load-scope"] --> prepare["prepare-run"] --> run["run-scenarios"]
```

## Actions

Read only the next action's file before running it.

| # | Action | Does |
| --- | --------------- | ---------------------------------------------------------- |
| 01 | `load-scope` | Lock one happy path and a bounded set of sourced edge cases |
| 02 | `prepare-run` | Resolve the shortest deterministic path to executable runs |
| 03 | `run-scenarios` | Record, normalize, verify, reset, and report every scenario |

## Transversal rules

- Run against a reviewed change and never patch the application.
- Never spawn agents. Batch independent reads and tool checks, but keep state-changing browser work sequential.
- Do not narrate action transitions, searches, fixtures, selectors, or successful checks. Report only a blocker, a required decision, or the final verdict and paths.
28 changes: 28 additions & 0 deletions plugins/aidd-dev/skills/11-browser-qa/actions/01-load-scope.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# 01 - Load Scope

Lock the smallest defensible browser QA scope before execution.

## Input

Plan path or implementation artifact.

## Output

- 1 locked browser happy path,
- a bounded set of sourced browser edge cases,
- a source label,
- a resolved evidence folder.

## Process

1. **Resolve.** the requested feature from its plan.
2. **Filter.** Keep only Happy path and Edge case sections where every task's Mermaid actor is `browser` (Ignore non-browser, mixed-channel, and unmarked scenario sections without displaying them).
3. **Lock.** Lock 1 browser happy path from the explicit user journey, then the filtered plan Test Scope, then browser-observable acceptance criteria in the implementation artifact.
1. Ask one concise question only when those sources conflict or expose multiple browser journeys.
4. **Collect.** Include every filtered planned edge case + candidates from explicit browser validation, error, empty-state, permission, boundary, or recovery branches already visible in the implementation artifact.
1. Search directly related browser tests only when the filtered plan contains no edge case.
5. **Bound.** Deduplicate candidates against planned edges. Keep at least 3 proposed edges, ranked by user impact, browser observability, determinism, and proximity to the requested journey.
6. **Decide.** Automatically include a proposed edge only when it is deterministic, browser-observable, in scope, and non-destructive. Require a decision only for an external or destructive action.
7. **Validate.** Reject a scenario without a source, trigger, browser-observable outcome, or executable teardown when it changes state.
8. **Locate.** Use the existing AIDD feature folder when the source belongs to one. Otherwise use `aidd_docs/tasks/<yyyy_mm>/<yyyy_mm_dd>_<feature-slug>/`.
9. **Show.** Emit `Happy path: locked (<source>)` and one compact `Edge case | Source | Decision` table. Do not repeat scenario steps.
27 changes: 27 additions & 0 deletions plugins/aidd-dev/skills/11-browser-qa/actions/02-prepare-run.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# 02 - Prepare Run

Resolve every operational dependency before retained recording begins.

## Input

Earlier defined scope.

## Output

A successfull prepared run with a reachable application, authenticated sessions, deterministic fixtures, executable scenario steps, proven teardown, and available recording and media tools.

## Process

1. **Preflight.** Batch the independent checks for the application, pinned Playwright CLI, `ffprobe`, `ffmpeg`, and the fixed `1280×720` viewport.
2. **Reuse.** Read `aidd_docs/memory/testing.md` first when it exists.
1. Resolve Browser QA entry, auth, fixtures, and reset from its `Browser QA` section, then a directly related browser test, then one targeted browser snapshot.
2. Stop searching as soon as the run is executable.
3. **Authenticate.** Establish the required role before recording.
1. Never include login discovery or secret lookup in evidence.
4. **Fixture.** Use deterministic data satisfying each setup.
1. Never choose a live record by guesswork.
5. **Rehearse** only non-mutating steps and selectors.
1. Never execute the final state-changing action merely to rehearse it.
6. **Reset.** Resolve an executable teardown for every state-changing scenario.
1. If preparation changed state, execute the teardown and verify the baseline now; a future restart is not proof.
7. **Return.** Keep only the fixture, initial URL, minimal steps, expected outcome, teardown, and isolated session id per scenario.
37 changes: 37 additions & 0 deletions plugins/aidd-dev/skills/11-browser-qa/actions/03-run-scenarios.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# 03 - Run Scenarios

Execute, save, and report one clean browser QA take per scenario.

## Input

The prepared run, source label, and resolved evidence folder.

## Output

`<evidence-folder>/qa.md` + 1 final WebM per scenario.

## Process

1. **Group.** Run at most two read-only scenarios concurrently in isolated sessions.
1. Run every state-changing scenario sequentially.
2. **Record.** Apply setup before recording, start immediately before the first scenario action, and stop at the observable outcome.
3. **Verdict.** Compare actual with expected.
1. Retain a product failure and mark the run failed.
4. **Recover.** Discard a setup or tooling failure, reset, and retry once.
1. A second operational failure blocks the scenario.
5. **Reset.** Execute teardown after every state-changing take, verify the baseline, then close the session.
6. **Normalize.** Normalize at most two independent raw files concurrently.
1. Save only `qa/happy-path.webm` and `qa/edge-case-<scenario-slug>.webm`, each at most 12 seconds and 1280 pixels wide.
7. **Clean.** Delete raw takes only after every final file passes codec, dimension, duration, and path checks.
1. Never create screenshots or alternate media.
8. **Report.** Fill the report asset with the source label.
1. Keep one result row per scenario and add Findings only for a failure or blocker.
9. **Return.** Output only the overall verdict, `qa.md` path, and final WebM paths, one item per line.

```md
@../references/run-scope-playwright-cli.md
```

```md
@../assets/qa-report-template.md
```
12 changes: 12 additions & 0 deletions plugins/aidd-dev/skills/11-browser-qa/assets/qa-report-template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Browser QA: {{feature}}

- **Verdict**: {{pass | fail | skipped}}
- **Source**: {{plan path | implementation path | user request}}
- **Run**: {{yyyy_mm_dd}}

## Scenarios

| Scenario | Result | Verdict | Evidence | Duration |
| -------- | ------ | ------- | -------- | -------- |

{{findings-section-when-needed}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Playwright CLI runner

Run browser QA through the Playwright Agent CLI. It produces human-viewable WebM recordings without adding a test dependency to the application.

## Invocation

Use the framework pin below. The current version is `0.1.17`.

```bash
npx --yes @playwright/cli@0.1.17 -s=qa-<run-id> <command>
```

Upgrade the pin deliberately with the framework, never by using `latest` during a QA run.

## Recording contract

Use one named session and one raw WebM per scenario. Fix the browser viewport and recording frame at `1280×720`. Reach the prepared initial state before `video-start`; stop immediately after the observable result.

```bash
npx --yes @playwright/cli@0.1.17 -s=qa-<run-id>-<scenario-slug> resize 1280 720
npx --yes @playwright/cli@0.1.17 -s=qa-<run-id>-<scenario-slug> video-start raw-<evidence-name>.webm --size=1280x720
# Drive the scenario with the same session.
npx --yes @playwright/cli@0.1.17 -s=qa-<run-id>-<scenario-slug> video-stop
npx --yes @playwright/cli@0.1.17 -s=qa-<run-id>-<scenario-slug> close
```

`video-stop` writes under `.playwright-cli/` in the current directory. Use `raw-happy-path.webm` and `raw-edge-case-<scenario-slug>.webm`.

## Duration gate

Inspect every raw take in one call.

```bash
ffprobe -v error -select_streams v:0 \
-show_entries stream=codec_name,width,height:format=duration \
-of json raw-<evidence-name>.webm
```

When `ffmpeg` is unavailable, only an already-short raw take can pass. A take above 12 seconds reports `blocked: media-postprocess-unavailable`.

Trim known dead time first. Re-encode without audio.

```bash
ffmpeg -y -ss <start-seconds> -to <end-seconds> -i raw-<evidence-name>.webm \
-an -vf "fps=12,scale=1280:-2:force_original_aspect_ratio=decrease" \
-c:v libvpx-vp9 -crf 36 -b:v 0 <evidence-name>.webm
```

When the meaningful segment still exceeds 12 seconds, set `<speed-factor>` to `duration / 12` and accelerate it.

```bash
ffmpeg -y -i raw-<evidence-name>.webm \
-an -vf "setpts=PTS/<speed-factor>,fps=12,scale=1280:-2:force_original_aspect_ratio=decrease" \
-c:v libvpx-vp9 -crf 36 -b:v 0 <evidence-name>.webm
```

Inspect the final file with the same `ffprobe` command. Require codec `vp9`, width `1280`, and duration at most 12 seconds. Never keep invalid reviewer evidence.

Remove raw takes only after every final WebM passes the duration gate.
Loading