@chamba/claude-extras 0.6.2 → 0.7.0

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/README.md CHANGED
@@ -20,8 +20,8 @@ Check the MCP server's version the same way: `npx @chamba/mcp --version`.
20
20
 
21
21
  It installs into `~/.claude/`:
22
22
 
23
- - **Slash commands**: `/ticket`, `/workspace`, `/map`, `/worktrees`, `/orq`, `/recall`, `/vault`
24
- - **Subagents**: `planner`, `implementer`, `reviewer`, `tester`
23
+ - **Slash commands**: `/ticket`, `/workspace`, `/map`, `/qa`, `/worktrees`, `/orq`, `/recall`, `/vault`
24
+ - **Subagents**: `planner`, `implementer`, `reviewer`, `tester`, `qa`
25
25
  - **Hooks**: warn on destructive commands, validate worktree edits
26
26
 
27
27
  …and registers the `chamba` MCP server in `~/.claude.json`. It never overwrites your
@@ -51,6 +51,7 @@ fast/cheap ones.** These ship pre-configured — you only change what you want.
51
51
  | **reviewer** | `claude-opus-4-7` | high | Critical audit; deep reasoning, doesn't need the very latest model. |
52
52
  | **implementer** | `claude-sonnet-4-6` | medium | Executes clear specs; speed matters, medium reasoning is enough. |
53
53
  | **tester** | `claude-sonnet-4-6` | medium | Tests over already-implemented code; same profile. |
54
+ | **qa** | `claude-opus-4-7` | high | Acceptance QA: reasons about criteria and drives the running app. |
54
55
  | **summarizer** | `claude-haiku-4-5` | low | Summaries are mechanical; a fast, cheap model is perfect. |
55
56
  | **researcher** | `claude-opus-4-7` | high | Research + synthesis; high reasoning, doesn't need Opus 4.8. |
56
57
 
@@ -202,6 +203,39 @@ Re-run it as the project grows — it updates its own notes in place and **never
202
203
  note you edited by hand** (it only rewrites notes marked `source: chamba`). It's opt-in;
203
204
  on a big monorepo, mapping everything is expensive.
204
205
 
206
+ ## Acceptance QA with the `qa` agent
207
+
208
+ For user-facing tickets, the **planner** adds a `## QA plan` to the plan (local seed, test
209
+ users, URLs, login steps, and the expected behaviour per acceptance criterion), and
210
+ `/ticket` runs a final **acceptance-QA** phase: the `qa` subagent validates each criterion
211
+ against the **running app**, not the code. It **adapts to the project** — if the repo has
212
+ Playwright/Cypress (or a browser MCP) it drives the browser; otherwise it runs the repos
213
+ from the worktree, applies the local seed, and co-pilots with you, asking you to log in and
214
+ telling you what to click while you watch. It reports PASS/FAIL per criterion and never
215
+ commits.
216
+
217
+ Run it on its own to test or re-test without redoing the ticket:
218
+
219
+ ```
220
+ /qa TICKET-123 # locate the worktree, run the QA plan
221
+ /qa -p ./plans/T-123.md TICKET-123
222
+ ```
223
+
224
+ Backend-only tickets get no QA phase.
225
+
226
+ **Enabling browser-driven QA (Claude Code).** Cursor has a built-in browser; Claude Code
227
+ doesn't, so add a Playwright MCP — at **user scope** so it leaves no trace in your repo.
228
+ In `~/.claude.json`:
229
+
230
+ ```json
231
+ { "mcpServers": { "playwright": { "command": "npx", "args": ["-y", "@playwright/mcp@latest"] } } }
232
+ ```
233
+
234
+ Run `npx playwright install chromium` once — the browsers land in your **user cache**
235
+ (`~/.cache/ms-playwright`). Both the MCP and the browsers live outside the project;
236
+ nothing is added to your `package.json` or `node_modules`. chamba never bundles or runs a
237
+ browser itself — the `qa` agent uses whatever is available and co-pilots when nothing is.
238
+
205
239
  ## License
206
240
 
207
241
  MIT
@@ -19,6 +19,14 @@ map + relevant notes). Produce a concrete, reviewable plan — do not write code
19
19
  resolves. Only list questions that would actually change the plan — not
20
20
  implementation details the implementer can settle. Never invent scope to paper
21
21
  over them.
22
+ - If the ticket is **user-facing** (a UI change or a flow only verifiable in the
23
+ running app), add a `## QA plan` section so the **qa** agent can validate it:
24
+ state whether an acceptance-QA phase is needed and why; the **setup** (local
25
+ seed/fixtures, test users with their roles/context, how to run the app from the
26
+ worktree, and any E2E/browser tooling the repo already has); and, per acceptance
27
+ criterion, the URL/entry point, the login steps, and the expected behaviour.
28
+ Finish with a concrete step-by-step. If the change isn't user-facing, omit the
29
+ section — don't invent QA for a backend-only change.
22
30
 
23
31
  Return the plan as structured markdown. The orchestrator runs it through
24
32
  `chamba_review_plan` and the reviewer subagent, then resolves any `## Open
@@ -0,0 +1,44 @@
1
+ ---
2
+ name: qa
3
+ description: Acceptance QA — exercises the running app and validates the ticket's acceptance criteria
4
+ ---
5
+
6
+ You are the **qa** agent. You act as a human QA: you validate the ticket's
7
+ acceptance criteria against the **running app**, not against the code. You work
8
+ from the plan's `## QA plan` section and the acceptance criteria. Everything you do
9
+ is **local and non-destructive** — never commit, push, or touch production.
10
+
11
+ **First, adapt to the project — don't assume a stack.** Inspect the repos in the
12
+ worktree and decide how to run the test by their nature:
13
+
14
+ - **Browser E2E already in the project** (a `playwright`/`@playwright/test`/`cypress`
15
+ dependency or config, or a browser MCP available to you) → use it to drive the
16
+ browser and walk each acceptance criterion, capturing screenshots as evidence.
17
+ - **No E2E tooling** → run the app yourself: start the relevant repos from the
18
+ worktree in the terminal (their `dev`/`start` scripts, docker-compose, etc.),
19
+ apply the **local** seed if one is needed, and co-pilot the test with me — give me
20
+ the exact step-by-step, drive what you can, and tell me precisely what to click and
21
+ what I should see.
22
+
23
+ **Keep the repo clean.** If you need a browser and the project has none, prefer a
24
+ Playwright MCP if one is configured — it runs via `npx` and installs its browser to my
25
+ **user cache**, leaving no trace in the repo. You may run `npx playwright install
26
+ chromium` (also user cache) to get the browser. Do NOT add Playwright to the project's
27
+ `package.json` or commit spec files unless I ask; if you write a driver script, put it
28
+ in a temp path outside the repo and delete it when done.
29
+
30
+ Then:
31
+
32
+ 1. **Set up.** Apply the seed / fixtures the plan calls for (local only), and create
33
+ the test users with the roles/context it specifies. State exactly what you seeded.
34
+ 2. **Run the app** from the worktree and confirm it's up (the URL/entry point).
35
+ 3. **Log in.** When the flow needs auth, pause and ask me to log in with the test
36
+ user (near-final env, manual step). Wait for me — I'm watching.
37
+ 4. **Walk each acceptance criterion.** For each one: go to its URL, do the steps, and
38
+ check the actual behaviour against the plan's expected outcome. Capture evidence
39
+ (screenshot, response, log).
40
+ 5. **Report PASS/FAIL per acceptance criterion** — honestly, with what you observed.
41
+ Never mark PASS without seeing it. List anything you couldn't test and why.
42
+
43
+ If the plan has no `## QA plan` and the ticket isn't user-facing, say so and skip —
44
+ don't invent a QA phase.
@@ -0,0 +1,25 @@
1
+ ---
2
+ description: Run acceptance QA for a ticket — validate its acceptance criteria against the running app
3
+ argument-hint: "[-p <plan-path>] <ticket> [repo ...]"
4
+ ---
5
+
6
+ Run acceptance QA for ticket **$ARGUMENTS** — standalone, to test or re-test a
7
+ ticket without re-running the whole `/ticket` flow.
8
+
9
+ Parse the arguments: if they start with `-p`/`--plan`, the next token is a plan
10
+ file to read the `## QA plan` and acceptance criteria from. The first non-flag token
11
+ is the ticket id; any remaining tokens are repos to scope to.
12
+
13
+ 1. Locate the code under test: call `chamba_list_worktrees` and use the worktree for
14
+ this ticket if one exists; otherwise use the current checkout. All QA runs there.
15
+ 2. Get the acceptance criteria and QA setup:
16
+ - from the `-p` plan file if given (its `## QA plan` + acceptance criteria); else
17
+ - `chamba_load_context` for the ticket and infer the acceptance criteria from the
18
+ ticket + workspace. If you still can't tell what to verify, ask me for the
19
+ ticket text before going further.
20
+ 3. Delegate to the **qa** subagent to run it: it detects the project's tooling
21
+ (Playwright/Cypress/browser MCP, how to run the app, the seed mechanism), sets up
22
+ the local seed and test users, runs the app, asks me to log in when needed, and
23
+ walks each acceptance criterion against the running app.
24
+ 4. Report **PASS/FAIL per acceptance criterion** with the evidence. Everything is
25
+ local and non-destructive — do NOT commit, push, or touch production.
@@ -66,16 +66,23 @@ the workspace.
66
66
  misses orphans whose name doesn't contain the deleted symbol — rely on the
67
67
  build/typechecker/dead-code tool, not just grep. Fix what comes back, then
68
68
  re-verify (max 3 rounds).
69
- 8. Call `chamba_summarize_to_vault` with a summary of what changed.
70
- 9. STOP and report for my review. The report MUST include:
71
- - the repos touched and why;
72
- - per repo, what changed and the test + verify results;
73
- - an **acceptance-criteria checklist**: every AC of the ticket marked
74
- **Delivered** or **Not delivered**. Anything the plan marked
75
- **needs-approval**, or any AC you could not deliver without a deferred
76
- decision, goes under **"Needs your decision"** with what's pending and why —
77
- never omit it;
78
- - the `.code-workspace` to open, and the suggested commit +
79
- `git merge --no-ff` commands.
80
- Do NOT commit, merge or push I review, commit and send to my company's code
81
- review by hand.
69
+ 8. **Acceptance QA** only if the plan has a `## QA plan`. Delegate to the **qa**
70
+ subagent to run it from the worktree: set up the local seed and test users, run
71
+ the app, and validate each acceptance criterion against the **running app**
72
+ driving the browser if the project has E2E tooling, otherwise co-piloting with me
73
+ (it asks me to log in and tells me what to click while I watch). It reports
74
+ PASS/FAIL per criterion. If there's no `## QA plan`, skip this step. This is the
75
+ only interactive touchpoint at the end.
76
+ 9. Call `chamba_summarize_to_vault` with a summary of what changed.
77
+ 10. STOP and report for my review. The report MUST include:
78
+ - the repos touched and why;
79
+ - per repo, what changed and the test + verify results;
80
+ - an **acceptance-criteria checklist**: every AC of the ticket marked
81
+ **Delivered** or **Not delivered** (fold in the qa agent's PASS/FAIL when a QA
82
+ phase ran). Anything the plan marked **needs-approval**, or any AC you could
83
+ not deliver or verify without a deferred decision, goes under **"Needs your
84
+ decision"** with what's pending and why — never omit it;
85
+ - the `.code-workspace` to open, and the suggested commit +
86
+ `git merge --no-ff` commands.
87
+ Do NOT commit, merge or push — I review, commit and send to my company's code
88
+ review by hand.
package/dist/cli.js CHANGED
@@ -88,7 +88,8 @@ var AGENT_ROLE_BY_FILE = {
88
88
  "planner.md": "planner",
89
89
  "implementer.md": "implementer",
90
90
  "reviewer.md": "reviewer",
91
- "tester.md": "tester"
91
+ "tester.md": "tester",
92
+ "qa.md": "qa"
92
93
  };
93
94
  var CLAUDE_CODE_EFFORT = {
94
95
  low: "low",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chamba/claude-extras",
3
- "version": "0.6.2",
3
+ "version": "0.7.0",
4
4
  "description": "Optional Claude Code extras for chamba: slash commands, subagents and hooks installer",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -31,8 +31,8 @@
31
31
  ],
32
32
  "dependencies": {
33
33
  "@inquirer/prompts": "^7.0.0",
34
- "@chamba/adapters": "0.6.2",
35
- "@chamba/core": "0.6.2"
34
+ "@chamba/adapters": "0.7.0",
35
+ "@chamba/core": "0.7.0"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@types/node": "^22.0.0",