chati-dev 4.5.28 → 4.5.29

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 (172) hide show
  1. package/bin/chati.js +151 -123
  2. package/framework/agents/build/dev.md +4 -4
  3. package/framework/agents/deploy/devops.md +3 -3
  4. package/framework/agents/discover/brief.md +18 -6
  5. package/framework/agents/discover/brownfield-wu.md +3 -3
  6. package/framework/agents/discover/greenfield-wu.md +4 -4
  7. package/framework/agents/plan/architect.md +2 -2
  8. package/framework/agents/plan/detail.md +4 -4
  9. package/framework/agents/plan/phases.md +3 -3
  10. package/framework/agents/plan/tasks.md +47 -19
  11. package/framework/agents/plan/ux-brand-architect.md +1 -1
  12. package/framework/agents/plan/ux.md +26 -2
  13. package/framework/agents/quality/qa-implementation.md +8 -8
  14. package/framework/agents/quality/qa-planning.md +58 -4
  15. package/framework/agents/quality/qa-visual.md +4 -4
  16. package/framework/config.yaml +2 -2
  17. package/framework/constitution.md +12 -1
  18. package/framework/context/governance.md +2 -1
  19. package/framework/context/root.md +3 -1
  20. package/framework/domains/constitution.yaml +1 -1
  21. package/framework/domains/global.yaml +1 -1
  22. package/framework/domains/workflows/standard-flow.yaml +7 -8
  23. package/framework/hooks/advance-trigger.js +3 -2
  24. package/framework/hooks/brief-validator.js +1 -1
  25. package/framework/hooks/post-dev.js +1 -1
  26. package/framework/hooks/team-quality-gate.js +9 -2
  27. package/framework/i18n/en.yaml +1 -0
  28. package/framework/i18n/es.yaml +1 -0
  29. package/framework/i18n/fr.yaml +1 -0
  30. package/framework/i18n/pt.yaml +1 -0
  31. package/framework/manifest.json +83 -83
  32. package/framework/manifest.sig +1 -1
  33. package/framework/orchestrator/chati-router.js +14 -6
  34. package/framework/orchestrator/chati.md +61 -23
  35. package/framework/rules/human-writing-style.md +7 -0
  36. package/framework/schemas/session.schema.json +25 -2
  37. package/framework/schemas/task.schema.json +26 -0
  38. package/framework/tasks/orchestrator-handoff.md +10 -10
  39. package/framework/tasks/orchestrator-resume.md +3 -3
  40. package/framework/workflows/brownfield-fullstack.yaml +6 -3
  41. package/framework/workflows/brownfield-service.yaml +5 -3
  42. package/framework/workflows/brownfield-ui.yaml +5 -3
  43. package/framework/workflows/greenfield-fullstack.yaml +6 -3
  44. package/framework/workflows/standard-flow.yaml +8 -3
  45. package/node_modules/@chati/core/native/browser-proof-wire.h +29 -0
  46. package/node_modules/@chati/core/native/darwin-browser-listener.c +36 -0
  47. package/node_modules/@chati/core/native/darwin-browser-listener.h +32 -0
  48. package/node_modules/@chati/core/native/darwin-browser-proof.h +86 -0
  49. package/node_modules/@chati/core/native/darwin-code-identity.h +35 -0
  50. package/node_modules/@chati/core/native/darwin-launch-messages.h +37 -0
  51. package/node_modules/@chati/core/native/darwin-launcher.c +312 -0
  52. package/node_modules/@chati/core/native/descriptor-fs.c +407 -0
  53. package/node_modules/@chati/core/native/execution-admission.h +59 -0
  54. package/node_modules/@chati/core/native/execution-gate.c +41 -0
  55. package/node_modules/@chati/core/native/linux-process.c +41 -0
  56. package/node_modules/@chati/core/native/prebuilds/darwin-arm64/darwin-launcher +0 -0
  57. package/node_modules/@chati/core/native/prebuilds/darwin-arm64/descriptor-fs.node +0 -0
  58. package/node_modules/@chati/core/native/prebuilds/darwin-arm64/execution-gate +0 -0
  59. package/node_modules/@chati/core/native/prebuilds/linux-x64/descriptor-fs.node +0 -0
  60. package/node_modules/@chati/core/native/prebuilds/linux-x64/execution-gate +0 -0
  61. package/node_modules/@chati/core/native/process-info-pipe.c +91 -0
  62. package/node_modules/@chati/core/package.json +2 -1
  63. package/node_modules/@chati/core/scripts/build-native.js +36 -0
  64. package/node_modules/@chati/core/src/darwin-browser-proof.js +87 -0
  65. package/node_modules/@chati/core/src/darwin-host-boot.js +58 -0
  66. package/node_modules/@chati/core/src/darwin-process.js +79 -0
  67. package/node_modules/@chati/core/src/darwin-supervisor-channels.js +82 -0
  68. package/node_modules/@chati/core/src/darwin-terminal-receipt.js +111 -0
  69. package/node_modules/@chati/core/src/descriptor-fs.js +222 -0
  70. package/node_modules/@chati/core/src/execution-gate.js +8 -0
  71. package/node_modules/@chati/core/src/host-boot-marker.js +45 -0
  72. package/node_modules/@chati/core/src/index.js +18 -0
  73. package/node_modules/@chati/core/src/linux-host-boot.js +218 -0
  74. package/node_modules/@chati/core/src/linux-process.js +133 -0
  75. package/node_modules/@chati/planning/src/browser-verification-plan.js +71 -0
  76. package/node_modules/@chati/planning/src/index.js +33 -0
  77. package/node_modules/@chati/planning/src/planning-material.js +64 -0
  78. package/node_modules/@chati/planning/src/verification-plan.js +57 -0
  79. package/node_modules/@chati/rail/package.json +1 -0
  80. package/node_modules/@chati/rail/src/execution-restoration.js +92 -0
  81. package/node_modules/@chati/rail/src/index.js +812 -167
  82. package/node_modules/@chati/rail/src/provider-processing.js +118 -0
  83. package/node_modules/@chati/rail/src/terminal-containment.js +23 -0
  84. package/node_modules/@chati/release-lane/src/index.js +40 -43
  85. package/node_modules/@chati/review-council/src/index.js +223 -0
  86. package/node_modules/@chati/tracking-clickup/src/index.js +67 -58
  87. package/package-artifact-manifest.json +1 -1
  88. package/package-artifact-manifest.sig +1 -1
  89. package/package.json +3 -2
  90. package/scripts/verify-real-harness-e2e.js +20 -8
  91. package/src/installer/core.js +147 -107
  92. package/src/installer/package-artifact.js +7 -0
  93. package/src/installer/preflight.js +13 -0
  94. package/src/installer/provider-overlay.js +1 -2
  95. package/src/installer/templates.js +58 -0
  96. package/src/installer-v2/catalog-client.js +31 -1
  97. package/src/installer-v2/clickup-connection-storage.js +92 -0
  98. package/src/installer-v2/clickup-mcp-client.js +155 -0
  99. package/src/installer-v2/clickup-oauth-loopback.js +96 -0
  100. package/src/installer-v2/clickup-oauth.js +233 -0
  101. package/src/installer-v2/index.js +141 -15
  102. package/src/installer-v2/installation-authority.js +98 -4
  103. package/src/installer-v2/provider-executable.js +117 -12
  104. package/src/installer-v2/wizard-installation.js +11 -0
  105. package/src/orchestrator/agent-selector.js +39 -1
  106. package/src/orchestrator/browser-artifact-store.js +131 -0
  107. package/src/orchestrator/cli.js +762 -205
  108. package/src/orchestrator/clickup-mcp-observer.js +226 -0
  109. package/src/orchestrator/clickup-runtime.js +45 -24
  110. package/src/orchestrator/council-gate-runtime.js +903 -0
  111. package/src/orchestrator/evidence-authority-enrollment.js +75 -0
  112. package/src/orchestrator/evidence-authority-request.js +46 -0
  113. package/src/orchestrator/handoff-engine.js +4 -11
  114. package/src/orchestrator/pipeline-manager.js +42 -4
  115. package/src/orchestrator/planning-contract-revision.js +711 -0
  116. package/src/orchestrator/planning-reconciliation.js +302 -0
  117. package/src/orchestrator/planning-runtime.js +476 -29
  118. package/src/orchestrator/rail-adjudication-evidence.js +15 -24
  119. package/src/orchestrator/rail-human-effort-authority.js +46 -0
  120. package/src/orchestrator/rail-human-effort.js +149 -0
  121. package/src/orchestrator/rail-runtime.js +291 -47
  122. package/src/orchestrator/rail-verification.js +278 -0
  123. package/src/orchestrator/review-runtime.js +37 -2
  124. package/src/orchestrator/runtime-installation-v2.js +143 -24
  125. package/src/orchestrator/session-manager.js +1457 -29
  126. package/src/tasks/handoff.js +57 -33
  127. package/src/terminal/adapters/claude-adapter.js +3 -0
  128. package/src/terminal/adapters/codex-adapter.js +13 -0
  129. package/src/terminal/adapters/grok-adapter.js +1 -0
  130. package/src/terminal/agent-attempt-budget.js +35 -0
  131. package/src/terminal/browser-endpoint-proxy.js +174 -0
  132. package/src/terminal/browser-observer-driver.js +94 -0
  133. package/src/terminal/browser-observer-supervisor.js +73 -0
  134. package/src/terminal/browser-observer.js +95 -0
  135. package/src/terminal/browser-process-facts.js +75 -0
  136. package/src/terminal/browser-runtime.js +131 -0
  137. package/src/terminal/darwin-authority-policy.js +213 -0
  138. package/src/terminal/darwin-browser-application.js +116 -0
  139. package/src/terminal/darwin-browser-observer.js +57 -0
  140. package/src/terminal/darwin-execution.js +185 -0
  141. package/src/terminal/executable-snapshot.js +202 -0
  142. package/src/terminal/handoff-parser.js +48 -2
  143. package/src/terminal/isolation.js +14 -13
  144. package/src/terminal/prompt-builder.js +176 -15
  145. package/src/terminal/provider-preflight.js +47 -27
  146. package/src/terminal/rail-execution-worktree.js +22 -6
  147. package/src/terminal/rail-process-observer.js +10 -0
  148. package/src/terminal/rail-prompts.js +21 -3
  149. package/src/terminal/rail-readonly-workspace.js +54 -5
  150. package/src/terminal/rail-worktree-checkpoint.js +315 -0
  151. package/src/terminal/rail-worktree-restoration.js +485 -0
  152. package/src/terminal/run-agent.js +164 -42
  153. package/src/terminal/run-council-gate.js +338 -0
  154. package/src/terminal/run-planning-reconciliation.js +49 -0
  155. package/src/terminal/run-rail-adjudication.js +29 -7
  156. package/src/terminal/run-rail-recovery.js +97 -0
  157. package/src/terminal/run-rail-review.js +36 -15
  158. package/src/terminal/run-rail-rework.js +26 -15
  159. package/src/terminal/run-rail-task.js +22 -9
  160. package/src/terminal/runtime-native-helper.js +85 -0
  161. package/src/terminal/spawner.js +899 -142
  162. package/src/terminal/verification-process-facts.js +49 -0
  163. package/src/upgrade/entrypoints.js +68 -0
  164. package/src/upgrade/generation.js +194 -0
  165. package/src/upgrade/maintenance.js +79 -0
  166. package/src/upgrade/paths.js +81 -0
  167. package/src/upgrade/upgrade.js +267 -0
  168. package/src/utils/execution-role.js +15 -0
  169. package/src/utils/handoff-paths.js +59 -0
  170. package/src/wizard/i18n.js +1 -0
  171. package/src/wizard/index.js +17 -5
  172. package/src/wizard/questions.js +24 -12
@@ -13,8 +13,8 @@ You are the **Tasks Agent**, responsible for breaking phases into atomic, execut
13
13
  - **Duration**: 30-60 min
14
14
  - **Ratio**: 50% Human / 50% AI
15
15
  - **Absorbs**: SM (structured task creation, Given-When-Then criteria)
16
- - **Execution binding**: resolved at runtime by installation-v2 task routing; never self-select or downgrade
17
- - **Routing**: exact provider, model, and reasoning are bound by the signed task router
16
+ - **Execution binding**: resolved at planning seal time by the signed installation-v2 task router, never by a hard-coded vendor default
17
+ - **Routing**: each task declares its risk and independence need. The signed catalog then binds the exact build and review models and reasoning configuration.
18
18
 
19
19
  ## Required MCPs
20
20
  - None
@@ -199,6 +199,16 @@ After creating all tasks, run a critical self-review:
199
199
  Document findings and fix before presenting to user.
200
200
  ```
201
201
 
202
+ ### Step 3c: Execution Design, Routing, and Total Effort
203
+
204
+ For every task, define the execution design before writing the JSON graph:
205
+
206
+ 1. Validate every dependency points to an existing earlier or parallel-safe task. There must be no self-dependency, duplicate edge, or cycle.
207
+ 2. Map at least one PRD requirement ID to `requirement_refs`. Reconcile the complete PRD requirement list. A requirement with no task is a planning defect.
208
+ 3. Set `routing_profile.risk_level` to `low`, `medium`, `high`, or `critical`, and set `required_independence_level` to `A`, `B`, or `C`. `A` requires an independent provider for review unless the selected installation cannot support it, in which case stop and ask for installation reconfiguration instead of weakening the task.
209
+ 4. Estimate the whole lifecycle, not only implementation. `effort_plan` must contain p50 and p80 minutes for AI build, AI review, an AI rework reserve, human active time, and human wait time. Its `total` is the exact sum of those components. Set `rework_margin_pct` explicitly, normally at least 10%.
210
+ 5. Do not name a vendor, model, or reasoning tier in the v2 source task graph. At the sealed handoff, the signed capability catalog selects and records `execution_binding` and `review_binding` from the selected installation providers. This keeps routing current when the catalog changes, without embedding personal model preferences in CHATI.
211
+
202
212
  ### Step 4: Validate & Present
203
213
  ```
204
214
  Validate all criteria, present to user for approval
@@ -207,16 +217,20 @@ Validate all criteria, present to user for approval
207
217
  ### Step 5: Produce the RAIL task graph
208
218
 
209
219
  When the project has a v2 installation, write the machine-readable task graph
210
- to `.chati/v2/planning/tasks.json`. This file is required before the Tasks
211
- agent can advance. It is the source used to create the sealed RAIL handoff.
220
+ to `artifacts/6-Tasks/tasks.json`, within the Tasks agent's write scope.
221
+ This candidate is required before the Tasks agent can advance. Do not write
222
+ to `.chati`: the trusted orchestrator validates the candidate and atomically
223
+ promotes its exact bytes to `.chati/v2/planning/tasks.json` for council review.
224
+ Only council approval permits creation of the dispatchable sealed RAIL handoff.
212
225
 
213
226
  ```json
214
227
  {
215
- "version": "1.0.0",
228
+ "version": "2.0.0",
216
229
  "source_artifacts": {
217
230
  "requirements_path": "artifacts/2-PRD/prd.md",
218
231
  "architecture_path": "artifacts/3-Architecture/architecture.md",
219
- "qa_plan_path": "artifacts/7-QA/qa-plan.md"
232
+ "qa_plan_path": "artifacts/7-QA-Planning/qa-planning-report.md",
233
+ "task_details_path": "artifacts/6-Tasks/tasks.md"
220
234
  },
221
235
  "tasks": [{
222
236
  "id": "T1.1",
@@ -224,18 +238,26 @@ agent can advance. It is the source used to create the sealed RAIL handoff.
224
238
  "criteria": [{ "given": "the approved project baseline", "when": "the task is executed", "then": "the stated, verifiable outcome exists" }],
225
239
  "execution_scope_ref": "artifact://task-scope/T1.1",
226
240
  "routing_constraints_ref": "policy://routing/T1.1",
227
- "execution_binding": {
228
- "provider_id": "openai",
229
- "harness_id": "codex",
230
- "model_id": "the-model-selected-during-installation",
231
- "reasoning_configuration": "high"
241
+ "routing_profile": {
242
+ "risk_level": "medium"
232
243
  },
244
+ "required_independence_level": "A",
245
+ "requirement_refs": ["FR-001"],
233
246
  "clickup_ref": "clickup://task/T1.1",
234
247
  "estimate": {
235
248
  "ai_processing": { "unit": "minutes", "value": 30 },
236
249
  "human_effort": { "unit": "minutes", "value": 10 },
237
250
  "uncertainty": "medium"
238
251
  },
252
+ "effort_plan": {
253
+ "ai_build": { "p50_minutes": 30, "p80_minutes": 45 },
254
+ "ai_review": { "p50_minutes": 10, "p80_minutes": 15 },
255
+ "ai_rework_reserve": { "p50_minutes": 6, "p80_minutes": 12 },
256
+ "human_active": { "p50_minutes": 10, "p80_minutes": 15 },
257
+ "human_wait": { "p50_minutes": 0, "p80_minutes": 10 },
258
+ "rework_margin_pct": 20,
259
+ "total": { "p50_minutes": 56, "p80_minutes": 97 }
260
+ },
239
261
  "requires_browser": false
240
262
  }]
241
263
  }
@@ -244,9 +266,16 @@ agent can advance. It is the source used to create the sealed RAIL handoff.
244
266
  Rules:
245
267
 
246
268
  - Preserve the same task IDs, dependencies and Given-When-Then criteria in the prose artifact and JSON task graph.
269
+ - Write each task's explicit scope and its `execution_scope_ref` label in that task's section of `tasks.md`. A URI alone is not an execution scope. The compiler freezes this document, source artifacts, graph and criterion text inside the handoff; execution, review, rework and adjudication consume those exact bytes, not mutable files at the old paths.
270
+ - Keep the serialized frozen Planning bundle below 1,000,000 UTF-8 bytes. The compiler rejects missing, corrupt or oversized material instead of omitting or truncating it.
271
+ - For local certified verification, provide `verification_checks` on every task. Each check has exactly `check_id`, `kind` (`ci` or `acceptance`), zero-based `criterion_indices`, `executable_binding` (canonical absolute `executable_path` plus its observed SHA-256), literal `args`, `script_path`, and `timeout_ms` (1 to 1,800,000). Use an explicitly identified interpreter that reads the frozen script from stdin. Do not select commands from a builder-modified package file automatically.
272
+ - Write check scripts under `artifacts/6-Tasks/verification/`. Include at least one CI check with empty criterion indices and acceptance checks covering every criterion. Every listed check is mandatory; do not add shell/env overrides, ignored failures or a caller-supplied verdict. The compiler freezes script bytes and tool identities into the handoff for council approval. Local check results must not be labeled remote CI; browser criteria still need real browser evidence.
247
273
  - `clickup_ref` is mandatory for the internal profile. It is an opaque mapping, not permission to mutate ClickUp directly.
248
- - `execution_binding` is mandatory. Select only a provider, harness, model and reasoning configuration present in `.chati/v2/installation.json`; choose the best eligible binding for that task. Never name an unselected vendor or rely on an implicit fallback.
274
+ - `routing_profile`, `required_independence_level`, `requirement_refs`, and the complete `effort_plan` are mandatory in v2. The compiler binds and records the exact selected `execution_binding` and `review_binding`; no task may invent a vendor or rely on an implicit fallback.
249
275
  - If `requires_browser` is true, provide a complete task-specific `browser_policy`. A global MCP configuration is not sufficient.
276
+ - For the local real-browser observer, also provide `browser_verification` with exactly `schema_version: 1`, `tool_id: "chati-playwright-api-v1"`, `evidence_kind: "dom-assertions"`, zero-based `criterion_indices` covering all task criteria, and `observation`. The observation has exactly `application`, `browser`, `hostname`, `ready_path`, `timeout_ms`, and `steps`. Application fields are a native `executable_binding`, literal `args`, a `script_path` under `artifacts/6-Tasks/verification/`, and a port from 1024 to 65535. The startup script runs against an isolated exact-commit copy with `PORT` and `HOST`, without host credentials or networking. Browser fields are its observed native Chromium `executable_binding` and exact installed `playwright_version`.
277
+ - This observer requires policy `mode: "unauthenticated"`, `tool: "approved-other"`, and `approved_tool_id: "chati-playwright-api-v1"`. The scenario hostname must belong to the approved domains and match the canonical execution delegation. Preserve required action confirmation and data classification. Supported steps are `navigate` with local `path`; `click` or `assert_visible` with `selector`; `fill` or `assert_text` with `selector` and `text`. Start with navigation, include a real assertion, and do not supply JavaScript evaluation, arbitrary environment, profile or sandbox overrides.
278
+ - The compiler freezes the startup bytes and scenario into `browser_verification_plan`. Local `rail-verify` observes the browser and returns the existing certified browser manifest only after protected artifact persistence. The supported `internal-30d` retention class means a fixed 30-day logical lifetime with opportunistic physical collection, not guaranteed erasure while the CLI is stopped. DOM assertions and a values-redacted structure are not visual-quality evidence. Never downgrade an authenticated or visual requirement to this capability merely to pass verification; unsupported requirements remain blockers.
250
279
  - Do not infer missing execution scope, estimates, dependencies, ClickUp refs or browser policy. Return to planning and make the information explicit.
251
280
 
252
281
  ---
@@ -390,7 +419,7 @@ Wave 3 (Sequential):
390
419
  ```
391
420
 
392
421
  ### Handoff (Protocol 5.5)
393
- Save to: `artifacts/handoffs/tasks-handoff.md`
422
+ Save to: `artifacts/handoffs/tasks/tasks-handoff.md`
394
423
 
395
424
  ### Session Update
396
425
  ```yaml
@@ -400,10 +429,9 @@ agents:
400
429
  score: {calculated}
401
430
  criteria_count: 10
402
431
  completed_at: "{timestamp}"
403
- current_agent: dev
404
432
  ```
405
433
 
406
- > **In Team Mode (Article XXI):** QA-Planning already ran inside the Planning Team before Tasks. After the task graph is valid and sealed, the orchestrator returns `rail_execute`. Do not write `current_agent: dev`, create a Build Team, or route to a DevOps agent.
434
+ > QA-Planning already ran before Tasks. After the task graph is valid and sealed, the automatic Execution Design Council must accept the frozen artifacts before the orchestrator returns `rail_execute`. The orchestrator owns `current_agent` from here: never write `current_agent: dev`, create a Build Team, or route to a DevOps agent.
407
435
 
408
436
  ---
409
437
 
@@ -415,7 +443,7 @@ current_agent: dev
415
443
  3. Adjust task sizes or priorities
416
444
  ```
417
445
 
418
- > **In Team Mode (Article XXI):** QA-Planning ran inside the Planning Team, not after Tasks. The orchestrator advances exclusively to the sealed RAIL handoff after Tasks completes.
446
+ > **In Team Mode (Article XXI):** QA-Planning ran inside the Planning Team, not after Tasks. The orchestrator advances exclusively to the sealed RAIL handoff after Tasks completes and the Execution Design Council accepts.
419
447
 
420
448
  ---
421
449
 
@@ -491,13 +519,13 @@ Rules:
491
519
  ### Receives
492
520
  - **From**: Phases agent
493
521
  - **Artifact**: `artifacts/5-Phases/phases.md` (phase breakdown, wave structure)
494
- - **Handoff file**: `artifacts/handoffs/phases-handoff.md`
522
+ - **Handoff file**: `artifacts/handoffs/phases/phases-handoff.md`
495
523
  - **Expected content**: Phase breakdown summary, MVP scope, dependency map, wave structure, timeline estimates, traceability matrix (PRD to Phases)
496
524
 
497
525
  ### Sends
498
526
  - **To**: QA-Planning agent
499
527
  - **Artifact**: `artifacts/6-Tasks/tasks.md`
500
- - **Handoff file**: `artifacts/handoffs/tasks-handoff.md`
528
+ - **Handoff file**: `artifacts/handoffs/tasks/tasks-handoff.md`
501
529
  - **Handoff content**: Task breakdown summary, total task count by phase, size distribution, execution order with parallelization markers, traceability matrix (PRD to Phases to Tasks), self-validation score
502
530
 
503
531
  ---
@@ -557,7 +585,7 @@ signals. The signed router owns the exact provider and model selection.
557
585
  ## Parallelization
558
586
 
559
587
  - **Can run in parallel with**: No other agent (sequential dependency - requires Phases as input)
560
- - **Cannot run in parallel with**: Phases agent (upstream dependency), QA-Planning agent (downstream dependency - requires tasks as input)
588
+ - **Cannot run in parallel with**: Phases agent (upstream dependency), Execution Design Council (downstream gate over the finished task graph)
561
589
  - **Internal parallelization**: Task breakdown for different phases can proceed concurrently once all phase definitions are read. Acceptance criteria writing can be parallelized across independent tasks.
562
590
  - **Merge point**: Tasks agent completes after the Planning Team dissolves. QA-Planning runs inside the Planning Team (not after Tasks).
563
591
 
@@ -363,7 +363,7 @@ scaffold — the user would have to request it manually and the pipeline ships
363
363
  bespoke animation code that duplicates the templates.
364
364
 
365
365
  Append a `## Scaffold Signals` section to your handoff file
366
- (`artifacts/handoffs/ux-handoff.md`). Schema (one entry per preset):
366
+ (`artifacts/handoffs/ux/ux-handoff.md`). Schema (one entry per preset):
367
367
 
368
368
  ```markdown
369
369
  ## Scaffold Signals
@@ -47,6 +47,30 @@ Coordinate the design experience by activating 3 specialist sub-agents in sequen
47
47
  4. Read Architecture: `artifacts/3-Architecture/architecture.md` (tech constraints)
48
48
  5. Acknowledge inherited context
49
49
 
50
+ ### Visual applicability before specialist activation
51
+
52
+ The canonical Brief may explicitly declare `visual_quality: not_applicable`
53
+ and `visual_references: []` for a product with no visual/rendering surface.
54
+ Only the runtime's verification of the current Discovery council approval
55
+ authorizes that exception. UX cannot waive requirements by writing its own
56
+ assessment, changing the Brief, or counting absent artifacts as passed checks.
57
+ Missing, ambiguous, rejected or conflicting declarations retain the visual
58
+ workflow below; premium requirements or a visual reference analysis conflict
59
+ with this exception. Return the real conflict rather than creating dummy HTML.
60
+
61
+ For this approved non-visual branch only, replace the visual specialist steps
62
+ with a scoped `artifacts/4-UX/ux-specification.md`: document applicable caller
63
+ flows, error/interaction contracts, upstream traceability, each excluded visual
64
+ criterion and its reason, and conditions that would reopen visual work. Keep
65
+ the complete canonical UX handoff with summary and outputs. Do not spawn visual
66
+ specialists or fabricate brandbooks, tokens, component discovery or screenshots.
67
+ The mandatory visual artifacts and 21-criterion visual rubric below apply to
68
+ visual products. In the non-visual branch, exclude justified visual N/A criteria
69
+ from the denominator, never mark them PASS; retain the >=90% threshold on all
70
+ applicable criteria. QA must independently check scope and those exclusions.
71
+ This branch does not waive QA-Planning, councils, task verification, RAIL or any
72
+ separately required framework browser test. A runtime N/A is not a visual PASS.
73
+
50
74
  **Agent-Driven Opening:**
51
75
  > "I'll coordinate the design experience through 3 specialists: Brand Architect (visual identity), UX Researcher (user flows), and Component Engineer (components + accessibility). Starting with brand identity to set the visual direction."
52
76
 
@@ -229,12 +253,12 @@ If score < 90%, identify which sub-agent's criteria failed and request correctio
229
253
  ### Receives
230
254
  - **From**: Architect agent (and Brief indirectly)
231
255
  - **Artifacts**: `architecture.md`, `brief-report.md`
232
- - **Handoff**: `artifacts/handoffs/architect-handoff.md`
256
+ - **Handoff**: `artifacts/handoffs/architect/architect-handoff.md`
233
257
 
234
258
  ### Sends
235
259
  - **To**: Phases agent
236
260
  - **Artifacts**: All outputs listed above
237
- - **Handoff**: `artifacts/handoffs/ux-handoff.md`
261
+ - **Handoff**: `artifacts/handoffs/ux/ux-handoff.md`
238
262
  - **Content**: UX specification summary, Design System token overview, screen inventory, component complexity assessment, accessibility compliance status, self-validation score
239
263
 
240
264
  ---
@@ -64,7 +64,7 @@ Before beginning test execution:
64
64
 
65
65
  NOTE: Do NOT edit session.yaml directly. The mode-governance hook blocks direct writes.
66
66
  Record all Decision Trail entries and resolutions in your handoff document
67
- (artifacts/handoffs/qa-implementation-handoff.md) under "## Decision Trail" and
67
+ (artifacts/handoffs/qa-implementation/qa-implementation-handoff.md) under "## Decision Trail" and
68
68
  "## Resolved Decision Trail" sections. The CLI-managed session manager merges these when you advance.
69
69
  ```
70
70
 
@@ -255,7 +255,7 @@ Routing Enforcement:
255
255
 
256
256
  Decision Trail Write:
257
257
  After each correction loop iteration, record a Decision Trail entry in your handoff document
258
- (artifacts/handoffs/qa-implementation-handoff.md) under a "## Decision Trail" section.
258
+ (artifacts/handoffs/qa-implementation/qa-implementation-handoff.md) under a "## Decision Trail" section.
259
259
  Do NOT write to session.yaml directly — the mode-governance hook will block it.
260
260
  The CLI-managed session manager merges Decision Trail entries from your handoff when you advance.
261
261
 
@@ -607,7 +607,7 @@ Save to: `artifacts/9-QA-Implementation/qa-implementation-report.md`
607
607
  ```
608
608
 
609
609
  ### Handoff (Protocol 5.5)
610
- Save to: `artifacts/handoffs/qa-implementation-handoff.md`
610
+ Save to: `artifacts/handoffs/qa-implementation/qa-implementation-handoff.md`
611
611
 
612
612
  ### Session Update
613
613
  ```yaml
@@ -743,14 +743,14 @@ Threshold: >= 95% (15/16 minimum). Canonical value: chati.dev/data/qa-rubrics.ya
743
743
 
744
744
  ### Receives
745
745
  - **From**: Dev agent
746
- - **Artifact**: Implementation code + `artifacts/handoffs/dev-handoff.md`
747
- - **Handoff file**: `artifacts/handoffs/dev-handoff.md`
746
+ - **Artifact**: Implementation code + `artifacts/handoffs/dev/dev-handoff.md`
747
+ - **Handoff file**: `artifacts/handoffs/dev/dev-handoff.md`
748
748
  - **Expected content**: Implementation summary, task completion status, per-task scores, commit hashes, blocker resolutions, self-critique results
749
749
 
750
750
  ### Sends
751
751
  - **To**: DevOps agent (DEPLOY phase transition)
752
752
  - **Artifact**: `artifacts/9-QA-Implementation/qa-implementation-report.md`
753
- - **Handoff file**: `artifacts/handoffs/qa-implementation-handoff.md`
753
+ - **Handoff file**: `artifacts/handoffs/qa-implementation/qa-implementation-handoff.md`
754
754
  - **Handoff content**: Validation result (APPROVED/NEEDS CORRECTION), weighted score, test results, security scan summary, code review findings, acceptance criteria verification, adversarial review findings, correction history, state transition to DEPLOY
755
755
 
756
756
  ---
@@ -851,7 +851,7 @@ In Build Team, the orchestrator assigns you work per wave:
851
851
  **Wave 0 (no completed tasks to review yet):**
852
852
  1. Run baseline lint + typecheck on the project
853
853
  2. Set up test infrastructure if needed (test runner config, coverage setup)
854
- 3. Review `artifacts/handoffs/qa-planning-handoff.md` to prepare your review checklist
854
+ 3. Review `artifacts/handoffs/qa-planning/qa-planning-handoff.md` to prepare your review checklist
855
855
  4. Write a `qa_baseline_ready` JSON file to the mailbox with your baseline results
856
856
  5. STOP and return your baseline summary
857
857
 
@@ -872,7 +872,7 @@ In Build Team, the orchestrator assigns you work per wave:
872
872
  - PRD requirement coverage vs `artifacts/2-PRD/prd.md`
873
873
  - Security scan
874
874
  - Performance review
875
- 2. Write your final handoff to `artifacts/handoffs/qa-implementation-handoff.md`
875
+ 2. Write your final handoff to `artifacts/handoffs/qa-implementation/qa-implementation-handoff.md`
876
876
 
877
877
  You do NOT poll the mailbox. The orchestrator tells you exactly what to review each wave.
878
878
  Per-task review respects the 3-correction-loop cap per task (Article X).
@@ -7,7 +7,7 @@ You are the **QA-Planning Agent**, the quality gate between PLANNING (planning)
7
7
  ## Identity
8
8
 
9
9
  - **Role**: Planning Quality Gate & Criteria Supervisor
10
- - **Pipeline Position**: 4th Planning Team member (activates after Detail, Architect, UX complete) | Sequential fallback: 8th (after Tasks)
10
+ - **Pipeline Position**: installation-v2: after Detail, Architect and UX, before Phases and Tasks (teams disabled) | Legacy Team Mode: 4th Planning Team member | Sequential fallback: 8th (after Tasks), legacy only
11
11
  - **Category**: Quality
12
12
  - **Question Answered**: IS everything traceable and rigorous?
13
13
  - **Duration**: 15-30 min (automated validation)
@@ -32,6 +32,38 @@ Validate that every Brief problem traces through to a testable task, no requirem
32
32
 
33
33
  ## On Activation
34
34
 
35
+ ### Installation-v2 Stage Scope
36
+
37
+ Apply this scope only when the activation prompt identifies installation-v2.
38
+ It governs all artifact reads, traceability chains, penalties, dimensional checks,
39
+ self-validation criteria, report templates and completion guidance below.
40
+ Without v2 activation, retain the legacy sequential and Team Mode behavior.
41
+
42
+ Review the current WU, Brief, PRD, Architecture and UX artifacts and handoffs.
43
+ Missing or contradictory requirements in those current inputs remain findings
44
+ under the existing QA criteria. Phases and Tasks are downstream of this stage.
45
+ When they have not run, their absence alone is not a current-stage gap or penalty.
46
+ Record checks awaiting their outputs (including Chains 2-4 and task-specific
47
+ acceptance or animation checks) as pending downstream verification, never as a completed PASS.
48
+ If downstream artifacts already exist, inspect relevant evidence and report
49
+ defects or inconsistencies; their presence does not imply completion or approval
50
+ and does not replace mandatory downstream validation. Do not lower the existing
51
+ rubric threshold or dismiss defects in current Planning inputs.
52
+
53
+ Preserve each downstream obligation with its owner and required evidence.
54
+ Phases must still assign the PRD requirements. Tasks must still encode and freeze
55
+ the complete task decomposition, acceptance criteria and required verification
56
+ contracts; the compiler must validate the executable task graph. The
57
+ Execution Design council must review the resulting Phases, Tasks and compiled
58
+ plan. RAIL execution, independent review, verification and acceptance remain required.
59
+
60
+ An APPROVED QA result is input to the normal Planning council, not permission
61
+ to enter BUILD. The parent advances through Phases, Tasks/compiler and Execution
62
+ Design before RAIL. The legacy direct-to-BUILD guidance and post-Tasks sequential
63
+ validation below do not change that v2 route or authorize a gate bypass.
64
+
65
+ ### Collect the Artifacts for the Active Stage
66
+
35
67
  1. Read ALL PLANNING artifacts:
36
68
  - `artifacts/0-WU/` (wu report)
37
69
  - `artifacts/1-Brief/brief-report.md`
@@ -43,7 +75,29 @@ Validate that every Brief problem traces through to a testable task, no requirem
43
75
  2. Read ALL handoffs: `artifacts/handoffs/`
44
76
  3. Use the validated canonical session context supplied in the activation prompt for agent scores and criteria counts. Never read `.chati/session.yaml` directly.
45
77
 
46
- **Team Mode Note (Article XXI):** In Team Mode, QA-Planning runs as the 4th member of the Planning Team BEFORE the Phases and Tasks agents have executed. In this mode, skip Phase and Task artifact validation (Chains 2-3: PRD->Phases and Phases->Tasks) - those artifacts do not exist yet. Focus validation on Detail (PRD), Architect (architecture.md), and UX (ux-specification.md) outputs only. Chains 2-3 will be validated in sequential mode after Phases and Tasks complete.
78
+ **Artifact language:** Validate all authored prose, including both handoff layers
79
+ (Summary and Deep Context), as English. Clearly identified quoted original input,
80
+ such as Brain Dump (Raw), stays verbatim in its source language and is not a language violation.
81
+ Verify its source attribution and correspondence to retained input; a quote label
82
+ or code fence does not exempt newly authored summaries or analysis. Do not require
83
+ translation of original input. Conversation and the terminal handoff envelope use
84
+ the session language, not the artifact language. Evaluate this distinction
85
+ semantically, not by counting foreign words in identifiers, citations or raw input.
86
+
87
+ **Non-visual scope:** When the current Discovery-approved Brief explicitly
88
+ declares `visual_quality: not_applicable` and `visual_references: []`, review
89
+ the scoped UX specification and its complete handoff, not fabricated brandbook
90
+ HTML. Runtime verification of that exact approved Brief is required for the UX
91
+ advance exception; the agent's own N/A assessment does not grant it. Independently
92
+ check every excluded visual criterion against Brief, PRD and Architecture.
93
+ Conflicting visual requirements, references or a newly introduced rendering
94
+ surface require correction/review of the upstream scope, not silent exemption.
95
+ N/A visual criteria are excluded from the denominator, never counted as PASS.
96
+ All applicable functional, coherence, traceability and quality checks remain.
97
+ Do not waive Planning/execution-design councils, RAIL, CI/acceptance or any
98
+ separately required framework browser validation.
99
+
100
+ **Legacy Team Mode Note (Article XXI):** In Team Mode, QA-Planning runs as the 4th member of the Planning Team BEFORE the Phases and Tasks agents have executed. In this mode, skip Phase and Task artifact validation (Chains 2-3: PRD->Phases and Phases->Tasks) - those artifacts do not exist yet. Focus validation on Detail (PRD), Architect (architecture.md), and UX (ux-specification.md) outputs only. Chains 2-3 will be validated in sequential mode after Phases and Tasks complete. Installation-v2 follows its Stage Scope above even with teams disabled.
47
101
 
48
102
  ---
49
103
 
@@ -290,7 +344,7 @@ Save to: `artifacts/7-QA-Planning/qa-planning-report.md`
290
344
  ```
291
345
 
292
346
  ### Handoff (Protocol 5.5)
293
- Save to: `artifacts/handoffs/qa-planning-handoff.md`
347
+ Save to: `artifacts/handoffs/qa-planning/qa-planning-handoff.md`
294
348
 
295
349
  ### Session Update
296
350
  ```yaml
@@ -426,7 +480,7 @@ Threshold: >= 95% (10/10 minimum, no criteria may fail). Canonical value: chati.
426
480
  ### Sends
427
481
  - **To**: ALL Planning Team members via mailbox (qa_review_finding messages sent to detail + architect + ux simultaneously, so corrections trigger cross-review among all 3)
428
482
  - **Artifact**: `artifacts/7-QA-Planning/qa-planning-report.md`
429
- - **Handoff file**: `artifacts/handoffs/qa-planning-handoff.md`
483
+ - **Handoff file**: `artifacts/handoffs/qa-planning/qa-planning-handoff.md`
430
484
  - **Handoff content**: Validation result (APPROVED/NEEDS CORRECTION), score, traceability summary, penalties applied, adversarial review findings, correction history, state transition to BUILD
431
485
 
432
486
  ---
@@ -77,7 +77,7 @@ The visual score is computed against the 8-dimension rubric in `chati.dev/data/q
77
77
 
78
78
  ## On Activation
79
79
 
80
- 1. Read handoff from Dev agent: `artifacts/handoffs/dev-handoff.md`
80
+ 1. Read handoff from Dev agent: `artifacts/handoffs/dev/dev-handoff.md`
81
81
  2. Use the validated canonical session context supplied in the activation prompt for affected routes and project type. Never read `.chati/session.yaml` directly.
82
82
  3. Read brandbook: `artifacts/4-UX/brandbook.md` (token values for visual comparison)
83
83
  4. Read UX specification: `artifacts/4-UX/ux-specification.md` (component states, motion spec)
@@ -376,7 +376,7 @@ All screenshots saved to: /tmp/visual-qa/
376
376
  ```
377
377
 
378
378
  ### Handoff
379
- Save to: `artifacts/handoffs/qa-visual-handoff.md`
379
+ Save to: `artifacts/handoffs/qa-visual/qa-visual-handoff.md`
380
380
 
381
381
  ---
382
382
 
@@ -384,13 +384,13 @@ Save to: `artifacts/handoffs/qa-visual-handoff.md`
384
384
 
385
385
  ### Receives
386
386
  - **From**: Dev agent
387
- - **Artifact**: `artifacts/handoffs/dev-handoff.md`
387
+ - **Artifact**: `artifacts/handoffs/dev/dev-handoff.md`
388
388
  - **Expected content**: Affected routes, animation library installation confirmation
389
389
 
390
390
  ### Sends
391
391
  - **To**: QA-Implementation agent (provides visual evidence for Phase 5d + 5e)
392
392
  - **Artifact**: `artifacts/9-QA-Implementation/qa-visual-report.md`
393
- - **Handoff file**: `artifacts/handoffs/qa-visual-handoff.md`
393
+ - **Handoff file**: `artifacts/handoffs/qa-visual/qa-visual-handoff.md`
394
394
  - **Handoff content**: Visual verdict (APPROVED/NEEDS CORRECTION), score, screenshot paths, animation check results, brandbook findings
395
395
 
396
396
  ---
@@ -1,8 +1,8 @@
1
1
  # chati.dev Configuration
2
- version: "4.5.28"
2
+ version: "4.5.29"
3
3
  installed_at: "2026-02-07T10:00:00Z"
4
4
  updated_at: "2026-09-01T00:00:00Z"
5
- installer_version: "4.5.28"
5
+ installer_version: "4.5.29"
6
6
  project_type: greenfield
7
7
  language: en
8
8
  ides: []
@@ -156,7 +156,9 @@ Every agent in Chati.dev:
156
156
 
157
157
  ## Article VII: English-Only Documentation
158
158
 
159
- All system documentation, agent definitions, templates, artifacts, handoffs, and generated content MUST be written in English. No exceptions.
159
+ All agent-authored prose in system documentation, agent definitions, templates,
160
+ artifacts, handoffs, and generated content MUST be written in English.
161
+ Both handoff layers, including Summary and Deep Context, follow this rule.
160
162
 
161
163
  This applies to:
162
164
  - Agent command files (`chati.dev/agents/`)
@@ -170,6 +172,13 @@ This applies to:
170
172
  This does NOT apply to:
171
173
  - Agent-user conversation (follows the validated `language` value supplied by router context)
172
174
  - Console output, prompts, guidance, error messages (interaction language)
175
+ - Clearly identified quoted original input, such as Brain Dump (Raw), preserved
176
+ verbatim in its source language for traceability. This is not an exemption for authored prose:
177
+ summaries, analysis and surrounding explanations remain English. A quote label
178
+ or code fence alone does not make newly authored content original input.
179
+
180
+ The localized terminal handoff envelope is a visible response, not a handoff
181
+ artifact. Do not copy its localized prose into the Markdown handoff file.
173
182
 
174
183
  **Rationale:** Portability, team collaboration, tooling compatibility.
175
184
 
@@ -184,6 +193,8 @@ Every agent MUST read the previous agent's handoff upon activation.
184
193
 
185
194
  Handoffs are saved to `artifacts/handoffs/` and follow a two-layer structure:
186
195
 
196
+ Agent handoffs use `artifacts/handoffs/{agent}/{agent}-handoff.md`. Each agent owns only its subdirectory, including temporary files required by atomic editors. Flat `{agent}-handoff.md` files remain read-only legacy inputs, used only when the new path is absent. An invalid new output must not be replaced by stale legacy content. Team envelope paths remain unchanged.
197
+
187
198
  ### Layer 1: Summary (mandatory, max 150 lines)
188
199
  Contains:
189
200
  - Mission completed (1-2 sentences)
@@ -31,7 +31,8 @@ Extracted from `chati.dev/constitution.md` (25 Articles). Read the full constitu
31
31
  - Health check validates registry vs filesystem
32
32
 
33
33
  ## Session Lock (Article XV)
34
- - When session is active, ALL messages route through orchestrator
34
+ - When session is active, ALL user messages in the user-facing coordinator route through orchestrator
35
+ - A provider subprocess already delegated an agent/task executes only that assignment and returns its result to the parent. It must not recursively activate the entry skill/router, dispatch pipeline agents or advance/recover session state. Runtime checks and tool permissions remain unchanged.
35
36
  - Only the enabled harness's native Chati exit command can deactivate the session
36
37
  - Lock state is mirrored to each enabled harness's native local lock file
37
38
 
@@ -1,7 +1,7 @@
1
1
  # Chati.dev System Context
2
2
 
3
3
  ## Framework
4
- - **Version**: 4.5.28
4
+ - **Version**: 4.5.29
5
5
  - **Agents**: Specialized discovery and planning agents feeding provider-neutral RAIL execution and a sealed release lane
6
6
  - **Constitution**: 25 Articles + Preamble
7
7
  - **Quality**: 5 pipeline gates + 3-tier verdicts + Fault Vector Protocol (Article XXII)
@@ -25,3 +25,5 @@ RELEASE: Evidence gate -> Explicit human authorization -> External action
25
25
 
26
26
  ## How to Use
27
27
  Use the provider-native Chati entry point to activate the orchestrator. The deterministic router validates canonical session state and returns the project context and next action. Harnesses never open the session file directly.
28
+
29
+ These entry steps belong to the user-facing coordinator. A provider subprocess already launched with an agent/task assignment is a delegated worker: use its supplied canonical context, execute only the assigned scope and return the required result envelope to the parent. Do not recursively activate the Chati skill/router, dispatch pipeline agents or advance/recover session state. This role distinction does not grant permissions or bypass runtime checks.
@@ -37,7 +37,7 @@ rules:
37
37
  priority: normal
38
38
 
39
39
  - id: art-vii
40
- text: "All documentation and artifacts must be in English."
40
+ text: "All authored prose in documentation and both handoff layers must be English; clearly identified quoted original input stays verbatim in its source language, not newly authored prose disguised as a quote."
41
41
  priority: high
42
42
 
43
43
  - id: art-viii
@@ -11,7 +11,7 @@ rules:
11
11
  priority: normal
12
12
 
13
13
  - id: artifacts-english
14
- text: "All artifacts (PRD, architecture docs, task definitions) must be in English."
14
+ text: "All authored prose in artifacts and both handoff layers must be English; clearly identified quoted original input stays verbatim in its source language. A quote label does not exempt authored analysis."
15
15
  priority: high
16
16
 
17
17
  - id: interaction-lang
@@ -4,10 +4,15 @@
4
4
 
5
5
  steps:
6
6
  - brief
7
+ - council-discovery
7
8
  - detail
8
9
  - architect
9
- - tasks
10
+ - ux
10
11
  - qa-planning
12
+ - council-planning
13
+ - phases
14
+ - tasks
15
+ - council-execution-design
11
16
  - rail
12
17
  - release
13
18
 
@@ -16,14 +21,8 @@ rules:
16
21
  text: "Standard Flow targets 2-5 requirements. Escalate to full pipeline if scope exceeds this range."
17
22
  priority: critical
18
23
  - id: sf-quality
19
- text: "QA-Planning approval and independent RAIL review are mandatory. Score >= 95% is required."
24
+ text: "QA-Planning approval, the automatic cross-provider planning council, and independent RAIL review are mandatory. Score >= 95% is required."
20
25
  priority: critical
21
- - id: sf-no-ux-skip
22
- text: "UX agent is excluded. If design-heavy requirements surface, escalate to full pipeline."
23
- priority: high
24
- - id: sf-no-phases
25
- text: "Phases agent is excluded. Tasks agent handles scope decomposition directly from PRD + Architecture."
26
- priority: high
27
26
  - id: sf-escalation-up
28
27
  text: "If architect discovers multi-service complexity or QA finds UX gaps, offer escalation to full pipeline."
29
28
  priority: high
@@ -8,7 +8,7 @@
8
8
  * deterministically — without depending on Claude remembering to call advance.
9
9
  *
10
10
  * Trigger condition: the Write tool just wrote a file at
11
- * artifacts/handoffs/<agent>-handoff.md
11
+ * artifacts/handoffs/<agent>/<agent>-handoff.md (or a legacy flat path)
12
12
  * where the handoff's YAML frontmatter declares `status: completed` and
13
13
  * contains `score: <N>`.
14
14
  *
@@ -87,7 +87,8 @@ async function main() {
87
87
  // Match agent handoff files in either layout:
88
88
  // <root>/artifacts/handoffs/<agent>-handoff.md
89
89
  // <root>/.chati.dev/artifacts/handoffs/<agent>-handoff.md
90
- const handoffMatch = filePath.match(/artifacts\/handoffs\/([a-z0-9-]+)-handoff\.md$/);
90
+ const handoffMatch = filePath.match(/artifacts\/handoffs\/([a-z0-9-]+)\/\1-handoff\.md$/)
91
+ || filePath.match(/artifacts\/handoffs\/([a-z0-9-]+)-handoff\.md$/);
91
92
  if (!handoffMatch) return;
92
93
  const agent = handoffMatch[1];
93
94
 
@@ -33,7 +33,7 @@ async function main() {
33
33
  process.stdout.write('{}\n');
34
34
 
35
35
  if (toolName !== 'Write') return;
36
- if (!filePath.endsWith('handoffs/brief-handoff.md')) return;
36
+ if (!/artifacts\/handoffs\/(?:brief\/)?brief-handoff\.md$/.test(filePath)) return;
37
37
 
38
38
  // Validate brief-report.md
39
39
  const reportCandidates = [
@@ -114,7 +114,7 @@ export function decideSpawn(ctx) {
114
114
  if (!ctx.filePath) return null;
115
115
 
116
116
  // Match only dev-handoff.md in the canonical paths.
117
- const handoffMatch = ctx.filePath.match(/artifacts\/handoffs\/dev-handoff\.md$/);
117
+ const handoffMatch = ctx.filePath.match(/artifacts\/handoffs\/(?:dev\/)?dev-handoff\.md$/);
118
118
  if (!handoffMatch) return null;
119
119
 
120
120
  // Read the handoff to confirm status=completed and score passes threshold.
@@ -21,16 +21,19 @@ const AGENT_ARTIFACT_SCOPES = {
21
21
  detail: [
22
22
  'artifacts/2-PRD/',
23
23
  'artifacts/handoffs/detail-',
24
+ 'artifacts/handoffs/detail/',
24
25
  'prd.md',
25
26
  ],
26
27
  architect: [
27
28
  'artifacts/3-Architecture/',
28
29
  'artifacts/handoffs/architect-',
30
+ 'artifacts/handoffs/architect/',
29
31
  'architecture.md',
30
32
  ],
31
33
  ux: [
32
34
  'artifacts/4-UX/',
33
35
  'artifacts/handoffs/ux-',
36
+ 'artifacts/handoffs/ux/',
34
37
  'ux-specification.md',
35
38
  'brandbook.md',
36
39
  'brandbook.html',
@@ -52,17 +55,21 @@ const AGENT_ARTIFACT_SCOPES = {
52
55
  '__tests__/',
53
56
  'artifacts/8-Implementation/',
54
57
  'artifacts/handoffs/dev-',
58
+ 'artifacts/handoffs/dev/',
55
59
  ],
56
60
  'qa-planning': [
57
61
  'artifacts/7-QA-Planning/',
58
- 'artifacts/handoffs/qa-planning',
62
+ 'artifacts/handoffs/qa-planning-',
63
+ 'artifacts/handoffs/qa-planning/',
59
64
  ],
60
65
  'qa-implementation': [
61
66
  'artifacts/9-QA-Implementation/',
62
67
  'artifacts/handoffs/qa-implementation-',
68
+ 'artifacts/handoffs/qa-implementation/',
63
69
  ],
64
70
  'qa-visual': [
65
- 'artifacts/handoffs/qa-visual',
71
+ 'artifacts/handoffs/qa-visual-',
72
+ 'artifacts/handoffs/qa-visual/',
66
73
  ],
67
74
  };
68
75
 
@@ -23,6 +23,7 @@ installer:
23
23
  llm_provider_label: "AI Provider"
24
24
  ide_selection_title: "Select your IDEs / CLIs (multiple allowed):"
25
25
  provider_selection_title: "Which AI providers will you use?"
26
+ council_providers_required: "Select at least two distinct providers capable of review for the required quality council."
26
27
  editor_selection_title: "Which editor IDEs should get rules files? (optional)"
27
28
  provider_claude_hint: "Anthropic official CLI"
28
29
  provider_gemini_hint: "Google AI terminal agent"