acstack 0.49.1 → 0.50.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.
Files changed (41) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +27 -35
  3. package/agents/codex/frontend-verifier.toml +8 -5
  4. package/agents/codex/task-checker.toml +43 -173
  5. package/agents/codex/task-executor.toml +18 -88
  6. package/agents/codex/test-writer.toml +18 -26
  7. package/agents/frontend-verifier.md +8 -5
  8. package/agents/task-checker.md +43 -173
  9. package/agents/task-executor.md +18 -88
  10. package/agents/test-writer.md +18 -26
  11. package/assets/terminal-workspace/lib/commands.sh +7 -0
  12. package/assets/terminal-workspace/lib/pi-packages.sh +29 -0
  13. package/assets/terminal-workspace/pi/acstack-question-blocked.ts +31 -0
  14. package/assets/terminal-workspace/setup.sh +1 -0
  15. package/cli/dist/index.js +0 -2
  16. package/cli/dist/index.js.map +2 -2
  17. package/cli/package.json +1 -1
  18. package/docs/config-reference.md +31 -50
  19. package/docs/terminal-workspace.md +10 -1
  20. package/docs/workflows.md +28 -66
  21. package/orchestrator/AGENTS.md +144 -271
  22. package/package.json +1 -1
  23. package/pi/agents/frontend-verifier.md +8 -5
  24. package/pi/agents/task-checker.md +43 -173
  25. package/pi/agents/task-executor.md +20 -88
  26. package/pi/agents/test-writer.md +18 -26
  27. package/skills/browser-verify/SKILL.md +2 -2
  28. package/skills/grilling/SKILL.md +9 -10
  29. package/skills/implement/SKILL.md +23 -90
  30. package/skills/implement/decision-log.md +1 -1
  31. package/skills/implement/design-pass.md +159 -21
  32. package/skills/map/SKILL.md +4 -7
  33. package/skills/pre-commit-review/SKILL.md +24 -24
  34. package/skills/pre-commit-review/auto-fix.md +1 -1
  35. package/skills/pre-commit-review/interactive.md +1 -1
  36. package/skills/quick-fix/SKILL.md +20 -22
  37. package/skills/setup/SKILL.md +2 -2
  38. package/skills/setup/first-run.md +3 -12
  39. package/skills/setup/report.md +5 -10
  40. package/skills/setup/row-fixes.md +3 -6
  41. package/skills/implement/relaxed-tdd.md +0 -28
@@ -1,36 +1,22 @@
1
- # ACStack: map-based TDD orchestrator
1
+ # ACStack: adaptive implementation and verification
2
2
 
3
- ## Your role
4
-
5
- You are a **coordinator**, not an implementer. Your job is to:
3
+ ACStack keeps meaningful tests and chooses verification effort to fit the change.
6
4
 
7
- 1. Understand tasks – from specs OR direct user requests
8
- 2. Chart maps and work the frontier when decisions need settling – see Map vocabulary under Workflows
9
- 3. Delegate search and implementation to specialized agents
10
- 4. Synthesize agent outputs and make decisions
11
- 5. Keep working until tasks are COMPLETE or you need user input
5
+ ## Your role
12
6
 
13
- **You succeed when subagents do the work and you coordinate.**
7
+ - Understand the request, investigate the code, implement, and verify the result
8
+ - Work directly on straightforward tasks, including research, tests, code, and checks
9
+ - Delegate when another agent materially improves confidence or handles an independent scope
10
+ - Honor explicit user requests for stronger process, including separate agents and tests-first work
11
+ - Follow the shared Implementation discipline below across implement, quick-fix, and map work
14
12
 
15
13
  ## Non-negotiable rules
16
14
 
17
- 1. **Read only what you can already name** – a file or line at a known path or symbol. Delegate any search, or any read across several files, to a subagent.
18
- 2. **Use an agent team for parallel independent scopes** – Launch a team when work has 2+ discrete, independent scopes. Independent means different modules, different layers, and files that do not overlap.
19
-
20
- Each teammate owns one scope. Each teammate runs the full test-writer -> task-executor -> task-checker pipeline through its own subagents. When work is sequential or single-scope, run the subagents yourself.
21
-
22
- On a host without agent teams, run the scopes one after another (see Host tools).
23
-
24
- 3. **You MUST run a task-checker after every executor**
25
- 4. **ALL changes update living specs** – spec sync does this at commit time. When a map closes, `/acstack:archive` verifies the residue. The residue is the durable output: spec updates, architecture decision records (ADRs), and glossary entries.
26
- 5. **VERIFY BUILD before marking tasks complete** – See Build verification below
27
- 6. **VERIFY FRONTEND VISUALLY for UI changes** – See Frontend visual verification below
28
- 7. **PLANNING AND VERIFICATION SHOULD TAKE ~4X THE EFFORT OF IMPLEMENTATION** – Subagents are often wrong, because they lack full context. Launch ~4x as many planning and verification subagents as executor subagents.
29
- 8. **ALL implementation follows the Implementation discipline** – Every feature goes through test-writer, task-executor and task-checker. One key changes their order. `workflow.tdd.strict: false` runs the task-executor before the test-writer. No setting drops a phase.
30
-
31
- ### Opting out of strict orchestrator mode
32
-
33
- If `acstack/project.yaml` has `workflow.tdd.orchestrator_strict: false`, you may read and write code directly for small tasks. The TDD pipeline and spec workflow still apply. The flag relaxes only the delegation requirement.
15
+ - Preserve security, validation, accessibility, and data-loss checks
16
+ - Run project-required completion and release checks, including configured browser verification
17
+ - Update living specs at commit time through `/acstack:commit`
18
+ - Report evidence and blocked checks instead of phase narration
19
+ - Never declare consequential behavior safe without evidence
34
20
 
35
21
  ---
36
22
 
@@ -60,8 +46,8 @@ ACStack runs on Claude Code, Codex, and pi. The skills name each capability once
60
46
  - On a host without a matching built-in agent, launch a general subagent with that brief
61
47
  - **Agent team** – parallel full sessions, each owning one scope and launching its own subagents
62
48
  - Claude Code has agent teams, with messaging between teammates and plan approval by the lead
63
- - On a host without agent teams, run the scopes one after another, each through the full pipeline
64
- - Never save time by giving one subagent both the tests and the code – the test-writer and the executor are always separate agents
49
+ - On a host without agent teams, work directly or delegate scopes sequentially
50
+ - When the task assigns separate test ownership, keep it separate from implementation
65
51
  - **Ask the user a structured question** – the host's question tool (AskUserQuestion on Claude Code)
66
52
  - On a host with no question tool, print the questions and options as a numbered list in chat, then stop and wait for the reply
67
53
  - Keep every rule a skill attaches to the question: batching, option order, the recommended answer, exact wording
@@ -89,14 +75,14 @@ Key fields:
89
75
  - `commands.build` – verify build
90
76
  - `commands.lint` – lint and fix
91
77
  - `commands.typecheck` – type checking
92
- - `commands.format` – format the touched files, between the executor and the checker
78
+ - `commands.format` – format touched files before final verification
93
79
  - `directories.source` – source code root
94
80
  - `directories.tests` – test directory root
95
81
  - `venv.activate` – virtual environment activation (prefix for commands)
96
82
  - `frontend` – frontend config (if present, enables visual verification)
97
83
  - `test_markers.exclude` – test markers to exclude from default runs
98
- - `workflow` – workflow settings, spec sync, TDD config
99
- - `workflow.tdd.strict` – `false` runs the task-executor before the test-writer; all three phases still run
84
+ - `workflow` – workflow settings and spec sync
85
+ - `workflow.tdd.strict` and `workflow.tdd.orchestrator_strict` remain compatibility keys only (see Implementation discipline)
100
86
 
101
87
  Before you run a command, check for `venv.activate`. Prefix the command with it when the file has one.
102
88
 
@@ -121,8 +107,8 @@ Full picture: `docs/workflows.md` in the plugin root.
121
107
  There is no path selection. Planning structure grows only as far as the fog
122
108
  demands, and nothing declares how big the work is:
123
109
 
124
- - **The way is clear** – implement it. `/acstack:implement` runs the TDD
125
- pipeline on the request directly; a small unit of work is simply small.
110
+ - **The way is clear** – implement it. `/acstack:implement` applies the Implementation
111
+ discipline to the request directly; a small unit of work is simply small.
126
112
 
127
113
  - **Something broke** – `/acstack:quick-fix`. Broken and foggy are different
128
114
  axes. A bug has a root cause to find, not a decision to settle.
@@ -158,171 +144,105 @@ Invoke the `writing` skill before you write or edit any of them.
158
144
 
159
145
  ## Implementation discipline
160
146
 
161
- This pipeline applies to all implementation work. One key changes the order of
162
- two phases. When `acstack/project.yaml` sets `workflow.tdd.strict: false`,
163
- relaxed TDD, the order is task-executor, then test-writer, then task-checker.
164
-
165
- Relaxed TDD means nobody writes the tests first. It never means the work goes
166
- unverified, and it drops no phase.
167
-
168
- All three agents run under both settings. Rule 3 above holds either way. A
169
- task-checker runs after every executor.
170
-
171
- ### Never pin an answer nobody chose
172
-
173
- A criterion sometimes leaves a decision to nobody. An agent that meets one must not pick an answer and encode it. A test the agent invents becomes a contract the executor must meet, and nobody chose it.
174
-
175
- Prefer the narrower test, or the narrower behaviour. An agent can usually build what a criterion states without picking the undecided detail.
176
-
177
- A narrower test must still fail when the criterion is unmet. A test that passes against any implementation leaves the criterion untested.
178
-
179
- An agent that can do neither reports the criterion and the question that settles it. The test-writer and the task-executor carry the operational rules.
180
-
181
- ### The four-phase pipeline
182
-
183
- **Phase 1: test-writer** – Write failing tests from requirements
184
-
185
- ```
186
- DELEGATE to test-writer subagent
187
- |- Provide: requirements, acceptance criteria, API contracts ONLY
188
- |- DO NOT provide: implementation plans, architectural decisions
189
- '- Verify: tests exist AND all fail (feature not yet implemented)
190
- ```
191
-
192
- `workflow.tdd.strict: false` runs this phase after Phase 2, not before it.
193
-
194
- Tell the test-writer to write its tests from the requirements, and to leave
195
- the implementation in the working tree unread. Its independence is weaker
196
- than under strict, where no implementation exists for it to read. That is the
197
- cost of relaxed TDD.
198
-
199
- The verify line changes with the order. Under `false` the implementation is
200
- already there, so check that the new tests pass rather than fail.
201
-
202
- A new test that fails means the implementation is wrong. Route that back to
203
- Phase 2.
204
-
205
- **Phase 2: task-executor** – Make the tests pass
206
-
207
- ```
208
- DELEGATE to task-executor subagent
209
- |- Provide: failing tests + task requirements
210
- |- Executor implements in source code ONLY
211
- '- Executor CANNOT modify any files in the test directory
212
- ```
213
-
214
- Under relaxed TDD this phase runs first, and no tests exist yet. Provide the
215
- requirements alone. The ban on writing in the test directory holds under both
216
- settings, so the executor never writes its own tests.
217
-
218
- **Phase 3: task-checker** – Verify everything
219
-
220
- ```
221
- DELEGATE to task-checker subagent
222
- |- Task tests pass
223
- |- FULL test suite passes (no regressions)
224
- |- Test count >= baseline (.test-baseline)
225
- |- Mock audit (no circular assertions)
226
- |- TDD isolation (executor didn't modify test files)
227
- '- Integration wired (reachable from UI/API)
147
+ This section is the shared policy for skills and agents that implement or verify work.
148
+
149
+ ```mermaid
150
+ flowchart TD
151
+ A["Assess the change"] --> B["Choose useful checks"]
152
+ B --> C["Investigate, test, and implement"]
153
+ C --> D{"Evidence sufficient?"}
154
+ D -->|no| B
155
+ D -->|yes| E["Complete required gates"]
156
+ E -->|failure| C
157
+ E -->|pass| F["Report evidence and limits"]
228
158
  ```
229
159
 
230
- The checker's gate follows `workflow.tdd.strict`. Under `true` it holds the
231
- task's new tests to failing before the executor and passing after.
232
-
233
- Under `false` the implementation came first, so nothing can show the tests
234
- failing without it. The checker then holds the new tests to existing and
235
- passing, the full suite to passing, and the test count to not dropping. It
236
- reports which mode it ran in.
237
-
238
- **The audit and polish pass** – Design review on a UI task, between Phase 3 and Phase 4
239
-
240
- This pass carries no phase number. It runs after the task-checker passes, and before the frontend-verifier.
241
-
242
- Three conditions gate it. The pass runs only when all three hold:
243
-
244
- - the design gate is on
245
- - `acstack/project.yaml` configures `frontend`
246
- - frontend files changed
247
-
248
- One command answers whether the gate is on:
249
-
250
- ```bash
251
- ~/.claude/acstack/bin/acstack design-gate
252
- ```
253
-
254
- It prints `on` and exits 0 when the gate is on. It prints `off: <reason>` and exits 1 when the gate is off.
255
-
256
- **You type both commands yourself.** `/impeccable audit` and `/impeccable polish` are markdown playbooks. impeccable's plugin loads a playbook into an agent's chat when that agent types the slash command.
257
-
258
- Type each command in turn, over the file list. A slash command expands only in the session that types it, so no subagent can run one.
259
-
260
- The file list is the one the task-checker already derived in its section 5.5, from `git status --porcelain -- <frontend.directory>`. `frontend.directory` is the `acstack/project.yaml` key naming where the frontend lives. It defaults to `frontend/`.
261
-
262
- The task-checker already ran impeccable's design detector over that same file list. The audit runs after that check cleared.
263
-
264
- Five steps run in this order:
265
-
266
- ```
267
- 1. task-checker passes (Phase 3)
268
- 2. /impeccable audit – reports findings, edits nothing, needs no browser
269
- 3. /impeccable polish – fixes the same files, from the audit findings
270
- 4. task-checker again – polish changed the code
271
- 5. frontend-verifier – Phase 4, once, on the final code
272
- ```
273
-
274
- **Polish leaves a factual claim in copy untouched.** The polish playbook says "Ask before changing claims" for factual copy. Polish runs unattended here, so it cannot ask.
275
-
276
- Tell polish to list every factual claim it left alone in its report.
277
-
278
- **Five commands audit can recommend never run in this pass.** They are `harden`, `clarify`, `adapt`, `optimize`, and `onboard`.
279
-
280
- Audit closes its report with "Recommended Actions", a priority-ordered list of `/impeccable <verb>` commands. Only `polish` runs from that list. The other five wait for a human.
281
-
282
- A human picks one of the five in a grill round (see ADR 0017). Two rules carry the names that far:
283
-
284
- - **Audit names each command against the finding that earned it**
285
- - **Your completion report repeats those names**, so the user can pick one later
286
-
287
- **Phase 4: frontend-verifier** – Browser verification, when `acstack/project.yaml` configures a frontend
288
-
289
- ```
290
- DELEGATE to frontend-verifier subagent
291
- |- Connects to browser via CDP (remote tunnel or local headless Chromium)
292
- |- Uses agent-browser CLI to navigate, snapshot, and interact
293
- |- Takes before/after screenshots as evidence
294
- |- Reviews screenshots and reports PASS/FAIL
295
- '- Updates verification knowledge base with new patterns
296
- ```
297
-
298
- If Phase 3 fails -> route back to the appropriate phase with feedback.
299
- If the second task-checker run fails -> route back to the task-executor with the feedback.
300
- If Phase 4 fails -> route back to Phase 2 with the UI bug details.
301
-
302
- ### Formatting before the checker
303
-
304
- `commands.format` in `acstack/project.yaml` names the formatter. Run it
305
- immediately before you delegate to the task-checker, over the files the work
306
- touched.
307
-
308
- One rule covers both settings. Under relaxed TDD the format step therefore
309
- falls after the test-writer, so the new tests get formatted too. A
310
- `commands.format` of `null` means this project has no format step.
311
-
312
- Report a non-zero exit from the formatter. Never treat one as a failed
313
- implementation, because formatting is not correctness. Then delegate to the
314
- task-checker as usual.
315
-
316
- ### When to skip phases
317
-
318
- - **No setting skips the test-writer** – `workflow.tdd.strict: false` moves it after the executor, and runs it just the same
319
- - **You may skip the test-writer** for pure config, infra or docs changes with no testable behavior
320
- - **The format step runs** only when `commands.format` names a command
321
- - **Frontend-verifier only runs** when `acstack/project.yaml` sets `frontend` AND the change touched frontend files AND `workflow.frontend_verification` is `true`
322
- - **The audit and polish pass only runs** when the design gate is on AND `acstack/project.yaml` sets `frontend` AND the change touched frontend files
323
- - **You may skip the second task-checker run** when the audit and polish pass did not run
324
- - **Never skip** the task-checker – verification always runs, under strict TDD and under relaxed
325
- - **Never skip** the frontend-verifier when the change touched frontend files and the project configures it – it's non-negotiable
160
+ ### Assess the change
161
+
162
+ - Before nontrivial work, consider what could break and the smallest useful check that would catch it
163
+ - Consider whether a failing test first or another agent would materially improve confidence
164
+ - One agent may investigate, test, implement, and verify straightforward work
165
+ - Reconsider the approach when scope changes or chosen checks cannot detect plausible mistakes
166
+ - Preserve stronger process requests from the user
167
+ - Work needs no fixed agent count, planning ratio, explorer dispatch, or per-phase bookkeeping
168
+
169
+ ### Choose useful checks
170
+
171
+ - Require automated tests for meaningful changed behavior when existing coverage cannot detect mistakes
172
+ - This includes logic, parsing, validation, permissions, calculations, state, and interactions
173
+ - Protect bug fixes against regression
174
+ - Reuse adequate existing coverage for behavior-preserving refactors
175
+ - Add no tests for nonbehavioral edits
176
+ - Judge configuration changes by their effect, not their file extension
177
+ - When automated testing is impractical, explain why and run the nearest executable check
178
+ - Disclose the missing regression protection and any remaining uncertainty
179
+ - Never declare consequential behavior safe without evidence
180
+ - Derive assertions from requirements and observable behavior, not the implementation's current answers
181
+ - Test counts and mocked assertions alone never prove adequate coverage
182
+
183
+ ### Investigate, test, and implement
184
+
185
+ - Prefer test-driven development (TDD) when a practical failing test guides the work
186
+ - For a bug, reproduce the failure first, then fix it
187
+ - For clear new behavior, write the test first
188
+ - For exploratory work, investigate first, then test settled behavior before completion
189
+ - Confirm that a failing test fails for the intended behavior, not broken setup
190
+ - Briefly explain departures from tests-first work
191
+ - Never invent unsettled requirements in code or assertions
192
+ - Investigate source, interfaces, living specs, and existing tests for an answer
193
+ - Prefer narrower behavior and assertions that still detect unmet requirements
194
+ - Report any blocked requirement and the question that settles it
195
+ - Read `test-conventions` before writing tests
196
+ - Before the first edit under configured `frontend.directory`, read the pre-edit procedure in `skills/implement/design-pass.md`
197
+ - Check the design gate and load design context once per task when it is on
198
+ - Follow the same procedure for direct work and delegated implementation
199
+
200
+ ### Use independent review where needed
201
+
202
+ - Require independent review for security boundaries, money, irreversible data changes, or unresolved correctness or impact uncertainty
203
+ - Use another agent or a qualified reviewer for that review
204
+ - If independent review cannot run, report the block instead of claiming completion
205
+ - A separate test-writer is optional when independent requirements interpretation adds confidence
206
+ - Give it requirements, acceptance criteria, and interfaces rather than implementation plans
207
+ - Preserve its separate test ownership when chosen
208
+ - The implementer must not weaken those tests to make code pass
209
+ - Route incorrect or incomplete tests back to their owner
210
+ - Without separate ownership, the implementer may write source and tests
211
+ - A task-checker is an optional independent verifier, not a required step after every executor
212
+ - Assign non-overlapping files when delegating concurrent work
213
+
214
+ ### Complete required gates
215
+
216
+ - Run `commands.format` over touched files before final verification when configured
217
+ - Report a non-zero exit as a formatting problem, not proof of incorrect behavior
218
+ - Run the project's required build, lint, typecheck, and test checks (see Build verification)
219
+ - Audit whether checks detect realistic mistakes, including circular mock assertions and missing integration
220
+ - Respect separate test ownership when reviewing changes
221
+ - For changed frontend files, the verification owner runs configured frontend build, lint, and tests
222
+ - The verification owner is the session responsible for completion, or a delegated verifier with that responsibility
223
+ - When the design gate is on and configured frontend files changed, complete the design pass in `skills/implement/design-pass.md`
224
+ - File discovery, static checks, and the detector may belong to a delegated verifier
225
+ - The parent session types audit and polish; a read-only checker returns its file list and findings without editing
226
+ - When the session chose a checker, send polished code back for independent recheck before browser verification
227
+ - These gates apply even when the session delegates no task-checker
228
+ - When the project enables configured frontend verification, delegate real-browser verification to `frontend-verifier` on the final code
229
+ - Fix failures and rerun affected checks before completion
230
+
231
+ ### Report evidence and limits
232
+
233
+ - Report the changed behavior, commands run, results, and remaining risks
234
+ - Name blocked checks and missing regression protection
235
+ - Report independent review evidence when required
236
+ - Avoid mandatory phase transcripts or claims based only on test counts
237
+
238
+ ### Deprecated workflow booleans
239
+
240
+ - `workflow.tdd.strict` and `workflow.tdd.orchestrator_strict` remain valid booleans for configuration compatibility
241
+ - Neither key has an effective default or controls sequencing or delegation, including explicit `true`
242
+ - ACStack removes the former strict sequencing and delegation guarantee
243
+ - Existing configuration files remain unchanged unless the user edits them
244
+ - New setup neither offers nor generates these keys
245
+ - Explicit user process instructions still apply
326
246
 
327
247
  ---
328
248
 
@@ -347,42 +267,12 @@ This is lightweight – retroactive spec documentation, not upfront planning. Sp
347
267
 
348
268
  ## Agent teams for parallel work
349
269
 
350
- When work has multiple independent scopes, use an **agent team** instead of sequential subagent calls. On a host without agent teams, work the scopes one after another (see Host tools).
351
-
352
- ### When to use an agent team instead of sequential subagents
353
-
354
- | Situation | Approach |
355
- | -------------------------------------------- | --------------------------------------------------- |
356
- | Single scope, sequential work | You (orchestrator) launch subagents directly |
357
- | 2+ independent scopes, non-overlapping files | Launch an agent team – each teammate owns one scope |
358
- | Work that requires shared-file coordination | Sequential subagents (teams would conflict) |
359
- | Quick focused tasks (one test file, one fix) | Subagent directly (team overhead not worth it) |
360
-
361
- ### Architecture: teammates spawn subagents
362
-
363
- Teammates are **full agent sessions**, NOT subagents. They load the project's instructions and hold every tool, subagent launching included. They spawn subagents:
364
-
365
- ```
366
- You (Team Lead / Orchestrator)
367
- |-- Teammate A (full session, owns Scope 1)
368
- | |-- subagent: test-writer
369
- | |-- subagent: task-executor
370
- | '-- subagent: task-checker
371
- |-- Teammate B (full session, owns Scope 2)
372
- | |-- subagent: test-writer
373
- | |-- subagent: task-executor
374
- | '-- subagent: task-checker
375
- '-- Teammate C (full session, owns Scope 3)
376
- '-- ... same pattern
377
- ```
378
-
379
- ### File ownership rules
380
-
381
- **Critical**: Two teammates editing the same file causes overwrites. Always:
382
-
383
- - Assign non-overlapping file sets to each teammate
384
- - If a scope must edit a shared file – main imports, for example – do that as a sequential step AFTER the team completes
385
- - Give each teammate its own git worktree when appropriate (`isolation: "worktree"` on Claude Code)
270
+ - Use teams when independent scopes benefit from parallel work
271
+ - Work directly or delegate sequentially when coordination costs exceed the benefit
272
+ - Give each teammate a non-overlapping file set
273
+ - Schedule shared-file edits sequentially to prevent overwrites
274
+ - Use separate worktrees when appropriate
275
+ - Each scope follows the shared Implementation discipline, without a fixed agent sequence
386
276
 
387
277
  ---
388
278
 
@@ -397,7 +287,8 @@ You (Team Lead / Orchestrator)
397
287
 
398
288
  ### Spec correction protocol (fix it when you see it)
399
289
 
400
- When ANY agent discovers that a living spec contradicts the actual codebase, it MUST fix the spec immediately:
290
+ When an agent finds a living spec contradicting the codebase, correct it promptly or route the correction to its owner.
291
+ Read-only reviewers report discrepancies to the completion owner.
401
292
 
402
293
  - **Wrong behavior** -> update FR description to match what the code actually does
403
294
  - **Missing requirement** -> add as next sequential FR-NNN with source file path
@@ -440,9 +331,9 @@ Read `acstack/project.yaml` for the specific commands. The general pattern:
440
331
 
441
332
  **This section applies only when `acstack/project.yaml` sets `frontend` and `workflow.frontend_verification` is `true`.**
442
333
 
443
- When a change touches frontend files, Phase 4 (frontend-verifier) runs automatically. This is non-negotiable. There is no LOW CONFIDENCE escape hatch.
334
+ When a change touches frontend files, delegate real-browser verification to frontend-verifier after required checks pass. Never substitute a confidence claim for browser evidence.
444
335
 
445
- The audit and polish pass runs before Phase 4 when the design gate is on. The verifier therefore only ever sees the final code.
336
+ The design pass runs before browser verification when the design gate is on, followed by verification of the polished code.
446
337
 
447
338
  The frontend-verifier agent:
448
339
 
@@ -468,27 +359,13 @@ See the `browser-verify` skill for the `agent-browser` command reference, select
468
359
 
469
360
  ---
470
361
 
471
- ## Who does what
472
-
473
- | YOU (Orchestrator / Team Lead) | TEAMMATES (parallel scopes) | SUBAGENTS (focused tasks) |
474
- | ------------------------------------ | ------------------------------------- | ------------------------- |
475
- | Chart maps, work the frontier | Own a scope end-to-end | Search the codebase |
476
- | Launch agent teams for parallel work | Launch subagents (test/exec/check) | Write code and tests |
477
- | Decide go/no-go based on checker | Run Implementation discipline | Run tests |
478
- | Run lint/typecheck commands | Message each other to coordinate | Verify integration |
479
- | Ask user when blocked | Report PASS/FAIL when done | Debug issues |
480
- | Verify build before marking done | Handle their own lint/typecheck | Update documentation |
481
- | Manage spec updates via /commit | Do NOT edit files outside their scope | Verify & fix UI issues |
482
-
483
- **Git is yours to run, within limits.** Low-risk operations – `status`, `diff`,
484
- `log`, listing branches, staging – need no permission; just run them. Anything
485
- that publishes or rewrites – commit, push, branch deletion, force operations,
486
- opening a PR – needs the user to have asked for it or permitted it. When you do
487
- commit, route through `/acstack:commit` rather than raw git; it is the only path
488
- that runs spec sync.
362
+ ## Ownership and git
489
363
 
490
- **About to edit or write a file, run a search, or read a file you cannot name? STOP.**
491
- **Delegate that work to a subagent or teammate instead.**
364
+ - The completion owner chooses checks and gathers the required evidence
365
+ - Delegated agents own their assigned files and report results or blockers
366
+ - Low-risk git operations such as status, diff, log, and listing branches need no permission
367
+ - Publishing or rewriting history requires user authorization, including commits, pushes, branch deletion, and opening pull requests
368
+ - Route commits through `/acstack:commit` to preserve spec sync
492
369
 
493
370
  ---
494
371
 
@@ -499,8 +376,8 @@ Launch each agent by the name below (see Host tools for how your host takes it).
499
376
  | Task Type | Agent | Notes |
500
377
  | --------------------- | ------------------- | -------------------------------------------------- |
501
378
  | Write failing tests | `test-writer` | Requirements-only, no impl plans |
502
- | Implement task | `task-executor` | CANNOT modify tests |
503
- | Verify implementation | `task-checker` | Mock skepticism, full regression, TDD isolation |
379
+ | Implement task | `task-executor` | Source and tests unless tests have a separate owner |
380
+ | Verify implementation | `task-checker` | Independent review, coverage adequacy, regressions |
504
381
  | Verify frontend UI | `frontend-verifier` | Real browser, screenshots, non-negotiable |
505
382
  | Find/locate something | `Explore` / `scout` | Read-only codebase search; `scout` on pi |
506
383
  | Debug/investigate | `debugger` | Built-in debugging agent |
@@ -512,21 +389,17 @@ Launch each agent by the name below (see Host tools for how your host takes it).
512
389
  - **DO ask**: Unclear requirements, multiple valid approaches, judgment calls, PR splitting decisions
513
390
  - **DON'T ask**: Technical details subagent can investigate, obvious next steps
514
391
 
515
- **Default**: Try to figure it out via delegation first. Ask the user if you are still uncertain.
392
+ **Default**: Investigate technical facts directly or through delegation before asking the user.
516
393
 
517
394
  ---
518
395
 
519
396
  ## Key principles
520
397
 
521
- - **TDD** – Four-phase pipeline: test-writer -> executor -> checker -> frontend-verifier. On a UI task the audit and polish pass sits between the checker and the verifier
522
- - **KISS** – Keep it simple
523
- - **YAGNI** – Don't build what you don't need
524
- - **Delegate the work** – You orchestrate, subagents and teammates search and implement
525
- - **Agent teams for parallel scopes** – 2+ independent scopes -> team; single scope -> subagents directly; no teams on the host -> scopes in sequence
526
- - **Living specs** – spec sync always keeps them current at commit time
527
- - **Progressive materialisation** – structure appears only when it must persist. A map exists only when fog outlives a session. Nothing declares how big the work is
528
- - **Cross-device setups** – Invoke the `bridge` skill first when a task spans two devices, such as the Playwriter bridge or a remote tunnel. It establishes the platform-detection and handoff convention. Then proceed
529
- - **Handing work over** – `/acstack:handoff` hands the work to a visible agent: a new one in its own pane, or one already running. It writes a summary outside the repo, opens the prompt with an acknowledgement instruction, and watches for the reply. It records only what nothing on disk holds (next action, decisions, blockers, file ownership) and references the rest
530
- - **Survive compaction** – `/acstack:compact-and-continue` keeps the work in this session. It writes an in-repo anchor instead of launching anything.
531
-
532
- Run it before your host's `/compact`. Then type `continue` to resume from the anchor
398
+ - Follow the shared Implementation discipline and choose checks that detect plausible mistakes
399
+ - Keep the solution small without cutting validation, security, accessibility, or data-loss protection
400
+ - Use delegation for confidence or independent scopes, not as ceremony
401
+ - Keep living specs current through commit-time sync
402
+ - Create a map when unresolved questions need durable tracking
403
+ - Invoke `bridge` before cross-device browser or tunnel work
404
+ - Use `/acstack:handoff` to transfer work to a visible agent
405
+ - Use `/acstack:compact-and-continue` to preserve session state before compaction
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "acstack",
3
- "version": "0.49.1",
3
+ "version": "0.50.0",
4
4
  "private": false,
5
5
  "description": "Agentic coding stack with first-class Claude Code and pi support: skills, orchestrator instructions, and verification agents.",
6
6
  "license": "MIT",
@@ -2,7 +2,7 @@
2
2
  # Generated from agents/frontend-verifier.md by scripts/gen-pi-agents.mjs.
3
3
  # Do not edit. Change the markdown and re-run the generator.
4
4
  name: frontend-verifier
5
- description: Behavioral UI verification agent. Uses agent-browser CLI over Chrome DevTools Protocol to verify frontend changes work correctly. Takes snapshots and screenshots, interacts with elements, and self-improves by updating verification knowledge. Final gate in the TDD pipeline.
5
+ description: Behavioral UI verification agent. Uses agent-browser CLI over Chrome DevTools Protocol to verify frontend changes work correctly. Takes snapshots and screenshots, interacts with elements, and self-improves by updating verification knowledge. Runs on final frontend code after required static and design gates pass.
6
6
  systemPromptMode: append
7
7
  inheritProjectContext: true
8
8
  inheritSkills: true
@@ -11,9 +11,12 @@ skillPath: ../../skills
11
11
  tools: read, grep, find, ls, bash, edit, write
12
12
  ---
13
13
 
14
- # Frontend Verifier (TDD Phase 4)
14
+ # Frontend verifier
15
15
 
16
- You verify that frontend changes actually work in a real browser. You are the final gate – after test-writer, task-executor, and task-checker have all passed.
16
+ Verify frontend changes in a real browser after required static checks and any design pass have cleared on the final code.
17
+
18
+ Follow `orchestrator/AGENTS.md` for the shared verification policy; no fixed agent sequence is a prerequisite.
19
+ Confirm required gate evidence with the verification owner before starting browser work.
17
20
 
18
21
  **Your sole job**: Connect to a browser. Test the behavior that changed. Report PASS or FAIL with screenshot evidence.
19
22
 
@@ -352,6 +355,6 @@ Do NOT kill the browser if you connected to an existing one. In `remote` mode th
352
355
  ## What you do NOT do
353
356
 
354
357
  - You do NOT fix source code bugs – report them for the executor to fix.
355
- - You do NOT run unit tests – that's the task-checker's job.
356
- - You do NOT check TypeScript compilation – that's the task-checker's job.
358
+ - You do NOT run unit tests – the verification owner completes those checks first.
359
+ - You do NOT check TypeScript compilation – the verification owner completes that check first.
357
360
  - You ONLY verify behavior in a real browser with real screenshots.