chati-dev 4.5.27 → 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 +137 -20
  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
@@ -23,6 +23,7 @@ installer:
23
23
  llm_provider_label: "Proveedor de IA"
24
24
  ide_selection_title: "Seleccione sus IDEs / CLIs (multiples permitidos):"
25
25
  provider_selection_title: "Que proveedores de IA utilizara?"
26
+ council_providers_required: "Seleccione al menos dos proveedores distintos capaces de revisar para el consejo de calidad obligatorio."
26
27
  editor_selection_title: "Que editores deben recibir los archivos de reglas? (opcional)"
27
28
  provider_claude_hint: "CLI oficial de Anthropic"
28
29
  provider_gemini_hint: "Agente de terminal de Google AI"
@@ -23,6 +23,7 @@ installer:
23
23
  llm_provider_label: "Fournisseur IA"
24
24
  ide_selection_title: "Selectionnez vos IDEs / CLIs (multiples autorises):"
25
25
  provider_selection_title: "Quels fournisseurs IA utiliserez-vous?"
26
+ council_providers_required: "Sélectionnez au moins deux fournisseurs distincts capables de réviser pour le conseil qualité obligatoire."
26
27
  editor_selection_title: "Quels editeurs doivent recevoir les fichiers de regles? (facultatif)"
27
28
  provider_claude_hint: "CLI officielle d'Anthropic"
28
29
  provider_gemini_hint: "Agent de terminal Google AI"
@@ -23,6 +23,7 @@ installer:
23
23
  llm_provider_label: "Provedor de IA"
24
24
  ide_selection_title: "Selecione suas IDEs / CLIs (multiplos permitidos):"
25
25
  provider_selection_title: "Quais provedores de IA voce vai utilizar?"
26
+ council_providers_required: "Selecione pelo menos dois provedores distintos capazes de revisar para o conselho de qualidade obrigatório."
26
27
  editor_selection_title: "Quais editores devem receber os arquivos de regras? (opcional)"
27
28
  provider_claude_hint: "CLI oficial da Anthropic"
28
29
  provider_gemini_hint: "Agente de terminal da Google AI"
@@ -1,29 +1,29 @@
1
1
  {
2
- "createdAt": "2026-09-01T15:25:04.991Z",
2
+ "createdAt": "2026-09-11T10:51:50.561Z",
3
3
  "files": {
4
4
  "agents/build/dev.md": {
5
- "hash": "81d82d99b9f7bc1008ea96e49c2bd420c0e128ee665cb5a7da5b6e2b2c2a6348",
6
- "size": 64896,
5
+ "hash": "c3d8d109ff81673148882417f15dc46360a3b9d4dbc4f0c6475d81923f6f74a4",
6
+ "size": 64920,
7
7
  "type": "md"
8
8
  },
9
9
  "agents/deploy/devops.md": {
10
- "hash": "d3a1982680deff00ed04f1230fa2add6149180eb5dfe8198883f6e3c6be04d00",
11
- "size": 17932,
10
+ "hash": "9ac3a53e0fe69112901b156af7426cc1527fb07ddd4a61257d92277be33e1b7d",
11
+ "size": 17964,
12
12
  "type": "md"
13
13
  },
14
14
  "agents/discover/brief.md": {
15
- "hash": "264b216a2c57743ec610e888290752fa72757b5ace17fb8fc24b3bc9188b6791",
16
- "size": 26305,
15
+ "hash": "46a3b5efb94883d1845b59b6588f0ea89a833f20048d7531688d10cae3b72bba",
16
+ "size": 27494,
17
17
  "type": "md"
18
18
  },
19
19
  "agents/discover/brownfield-wu.md": {
20
- "hash": "a462b00aca9b067895d351fe1a9a7eb7964a8d1f1ec2cff87daa2b75f2290d95",
21
- "size": 18211,
20
+ "hash": "e7d066a3e599dd18bd9cbc140d9ad6e27b6aa612dabac3c9f50129e40750c77a",
21
+ "size": 18253,
22
22
  "type": "md"
23
23
  },
24
24
  "agents/discover/greenfield-wu.md": {
25
- "hash": "d9d6a70b8eb92194642dba2e08848513b87d20e14068e2376a2e81cbcdb3a216",
26
- "size": 17363,
25
+ "hash": "962ecbcc916e179c57da3d94dfadd253dd7d98ab83bc97e6cf47a8e57143dfc3",
26
+ "size": 17419,
27
27
  "type": "md"
28
28
  },
29
29
  "agents/plan/architect-data-engineer.md": {
@@ -37,28 +37,28 @@
37
37
  "type": "md"
38
38
  },
39
39
  "agents/plan/architect.md": {
40
- "hash": "8f81653e2b34ed873b2b0605528dbc866fba3485ae7af7a969f089e1c4af332b",
41
- "size": 13366,
40
+ "hash": "1f4521d3db4c0fd40ee5dee45c7ca6ee71ed5e79ace9a7e8f8bc41f38037ccd3",
41
+ "size": 13408,
42
42
  "type": "md"
43
43
  },
44
44
  "agents/plan/detail.md": {
45
- "hash": "335e7cda417273154ea290d0b3e6ef18e9aa27cfb33ef3f836c5f28f7b6c226c",
46
- "size": 19272,
45
+ "hash": "74baaf967e0331ca3ef67e5465b17f6a26dd526371d9fcde0eda075926ba4a84",
46
+ "size": 19298,
47
47
  "type": "md"
48
48
  },
49
49
  "agents/plan/phases.md": {
50
- "hash": "039a108666679dea9fbc357e84be6b88d479e79dcf62d0f34ba9f1e437822716",
51
- "size": 15747,
50
+ "hash": "3363b6349b7363c84d629c2ae487e295d4c1227b31694955077b4e8781a6ab9e",
51
+ "size": 15764,
52
52
  "type": "md"
53
53
  },
54
54
  "agents/plan/tasks.md": {
55
- "hash": "6aab3a60f0886daf0f13d435f5fb8b133c7ffb6aa441f3b7267582045d6cf5b4",
56
- "size": 27779,
55
+ "hash": "d94a9a420cb7dc2d3104f21ef1c1d962b78af95490870bf2a481ee18aebd1a18",
56
+ "size": 33566,
57
57
  "type": "md"
58
58
  },
59
59
  "agents/plan/ux-brand-architect.md": {
60
- "hash": "a456acd57a4d1ec646dfe04a483fd4f2e2ac14486f58a95e2dc5f99651bc0f55",
61
- "size": 28432,
60
+ "hash": "931adc62e8f6bf25d545a09980ada52dc62e5c0588b6593a59f6492721bad974",
61
+ "size": 28435,
62
62
  "type": "md"
63
63
  },
64
64
  "agents/plan/ux-component-engineer.md": {
@@ -72,23 +72,23 @@
72
72
  "type": "md"
73
73
  },
74
74
  "agents/plan/ux.md": {
75
- "hash": "b31cc0567c736371775a9619f78a139dec26ce813e1f31ed15619a29a8f45e5f",
76
- "size": 15329,
75
+ "hash": "b04bce16466695c2a4e530924b118a64cf01684c37c50fab34f9287368b2ef67",
76
+ "size": 16959,
77
77
  "type": "md"
78
78
  },
79
79
  "agents/quality/qa-implementation.md": {
80
- "hash": "218063fc3adf6bdcfb6ca4a432d212a7c4c789c48cb24d648d6507f905dac1e7",
81
- "size": 40322,
80
+ "hash": "660f2c2c9acb5807ae6b007d3b1d20340136cb9985eb73b2f420d2ef7e2b1e1f",
81
+ "size": 40432,
82
82
  "type": "md"
83
83
  },
84
84
  "agents/quality/qa-planning.md": {
85
- "hash": "aa06bccbab9fdbe20b2303cb46b1a5c988274f6063efeb30f1b391e646b6ddbd",
86
- "size": 25736,
85
+ "hash": "2b27fdea03947fae39a3b6044321db4959ae845679982a708d6b263a463c59ed",
86
+ "size": 29458,
87
87
  "type": "md"
88
88
  },
89
89
  "agents/quality/qa-visual.md": {
90
- "hash": "922faba65034dbd3b1a5d3a6792e44b8c028f08c05a3e70025bbe0799b11ec98",
91
- "size": 21704,
90
+ "hash": "37b6b30b1a7032697cc4a9188d2b99c124183677c3719de50803de189bb3704b",
91
+ "size": 21732,
92
92
  "type": "md"
93
93
  },
94
94
  "agents/shared/visualizer.md": {
@@ -97,18 +97,18 @@
97
97
  "type": "md"
98
98
  },
99
99
  "config.yaml": {
100
- "hash": "f69b77faca7351bef3c72a4726e5480590c95cd7140de13605695b515817631d",
100
+ "hash": "c701f0e54ba4b7083ec2277184cd6acca602d8dd5e6c45d65851425dce991b0b",
101
101
  "size": 2638,
102
102
  "type": "yaml"
103
103
  },
104
104
  "constitution.md": {
105
- "hash": "094a3b7da73fcb7bf8de016f17571597315131c8cb15e9e82090654695d65dee",
106
- "size": 66166,
105
+ "hash": "beaf6e3c6162c6bf640b966d95904b53db5f529ad66d861ea794352ead23c5a8",
106
+ "size": 67106,
107
107
  "type": "md"
108
108
  },
109
109
  "context/governance.md": {
110
- "hash": "4a0fcc136806543f04e815fd5825c9edc12804b9dba99b37e6c710b64de0c44a",
111
- "size": 6477,
110
+ "hash": "1fb78f4ee590898cb5088bf6401b0cb239a27131ae2064310b33b82be221ed9e",
111
+ "size": 6807,
112
112
  "type": "md"
113
113
  },
114
114
  "context/protocols.md": {
@@ -122,8 +122,8 @@
122
122
  "type": "md"
123
123
  },
124
124
  "context/root.md": {
125
- "hash": "34b2382e937e931b98d8055d8aea58c499191a7779293ec163778e35110ff4b9",
126
- "size": 1381,
125
+ "hash": "2554edf895d28742072a2294df290154cdde7907a26a26a3b0ac67c136a2c97a",
126
+ "size": 1840,
127
127
  "type": "md"
128
128
  },
129
129
  "data/entity-registry.yaml": {
@@ -212,13 +212,13 @@
212
212
  "type": "yaml"
213
213
  },
214
214
  "domains/constitution.yaml": {
215
- "hash": "95316838af958b1300b778fa1ea0921136b0dea30c1fd93eb11d6920e12fac4e",
216
- "size": 7073,
215
+ "hash": "0704de1b3d035b4927842d4ea8adc9027abcde5e7d8883f58af5f2948087c607",
216
+ "size": 7225,
217
217
  "type": "yaml"
218
218
  },
219
219
  "domains/global.yaml": {
220
- "hash": "b51d337cbcd9c722961aa137925a70816a06eb5b1305246c9aba110e5a32e8e9",
221
- "size": 3013,
220
+ "hash": "4353e0e438cf5646ec681777ad21788378254896286563afa7e69b23dc70a280",
221
+ "size": 3138,
222
222
  "type": "yaml"
223
223
  },
224
224
  "domains/workflows/brownfield-discovery.yaml": {
@@ -252,8 +252,8 @@
252
252
  "type": "yaml"
253
253
  },
254
254
  "domains/workflows/standard-flow.yaml": {
255
- "hash": "550186b773792428358acdf9ba3679d0643c26a354127709ea940fffdc6aff71",
256
- "size": 1209,
255
+ "hash": "3bfefccc49ae6954d87d04f669a9215987cbd197eafd073ed69ac9078b13e878",
256
+ "size": 1055,
257
257
  "type": "yaml"
258
258
  },
259
259
  "executors/json-validate.js": {
@@ -287,13 +287,13 @@
287
287
  "type": "yaml"
288
288
  },
289
289
  "hooks/advance-trigger.js": {
290
- "hash": "88badc4b3af2b6c44d0b5d1bea103dfb24a238ca3593e258e5e20832b1291f79",
291
- "size": 6572,
290
+ "hash": "04dc82d9afde699666cfc3b202ee269316f6940c7e2cc687010271140e54e2e3",
291
+ "size": 6680,
292
292
  "type": "js"
293
293
  },
294
294
  "hooks/brief-validator.js": {
295
- "hash": "6db38d712d8e8ca2ad3dc872498c215f3df9f3b2c5c8ee0ea45e2fafabbf46a1",
296
- "size": 2788,
295
+ "hash": "3bb4b72ae3cdb79d55f0f66bf9eaff96be29912225cfe376d356f8b4a492b35c",
296
+ "size": 2810,
297
297
  "type": "js"
298
298
  },
299
299
  "hooks/constitution-guard.js": {
@@ -327,8 +327,8 @@
327
327
  "type": "json"
328
328
  },
329
329
  "hooks/post-dev.js": {
330
- "hash": "e965d590b9b32049500a149b7d50742953b164810edb83c9d2bb0355c0e2d60d",
331
- "size": 7091,
330
+ "hash": "c0f12b7d97def28dbe1eb2a5ab626520192e5550bfa316b6f2fb2131b41930dd",
331
+ "size": 7101,
332
332
  "type": "js"
333
333
  },
334
334
  "hooks/prism-engine.js": {
@@ -377,8 +377,8 @@
377
377
  "type": "js"
378
378
  },
379
379
  "hooks/team-quality-gate.js": {
380
- "hash": "caea012a9e2b19870a5ca536af0f1a399595fa33c15ba43f7c156fdc7bf347cb",
381
- "size": 7714,
380
+ "hash": "6ecf347effd2417daecbf7668bd6b55126b0b1399d8bac14f6950fb7bb8f1ab0",
381
+ "size": 7969,
382
382
  "type": "js"
383
383
  },
384
384
  "hooks/undercover-guard.js": {
@@ -387,23 +387,23 @@
387
387
  "type": "js"
388
388
  },
389
389
  "i18n/en.yaml": {
390
- "hash": "c669ce19c2916b1f6dbcf582c02d8a70bf99f0148d9e8b3ab06b4e76c1e9e75c",
391
- "size": 8312,
390
+ "hash": "db8cf18d8f59c65df0e7db7e70f371d6d0ded3ce094cd89599e794ed01ac916c",
391
+ "size": 8435,
392
392
  "type": "yaml"
393
393
  },
394
394
  "i18n/es.yaml": {
395
- "hash": "981d8e1c3c90a83b332b8c535fb4f1b01a3c06ad5999e7e90d639f6cf1000387",
396
- "size": 8976,
395
+ "hash": "25db07a2fb95e307ad2864314f1adccd2a91c1c547898e865f65c76ab2a924fd",
396
+ "size": 9113,
397
397
  "type": "yaml"
398
398
  },
399
399
  "i18n/fr.yaml": {
400
- "hash": "8db26d19623b78c6d4fb095b3d274161deb65d8430b44d6dcd6d2d3e6ecf6377",
401
- "size": 9114,
400
+ "hash": "71cfd3c4c3be9bf246463a046938c4d65ffab5ed91f5495f1b5aa3d11b6083fc",
401
+ "size": 9256,
402
402
  "type": "yaml"
403
403
  },
404
404
  "i18n/pt.yaml": {
405
- "hash": "336ab3e8eb49a037f4304a821295c49bb268c6f3278a25cc1f9b2abcffc05c94",
406
- "size": 8831,
405
+ "hash": "e547eb72e371188cd53194b4c0dd8ff32bd4f473ef9383f68123bb5acd8165b0",
406
+ "size": 8972,
407
407
  "type": "yaml"
408
408
  },
409
409
  "intelligence/confidence.yaml": {
@@ -472,8 +472,8 @@
472
472
  "type": "yaml"
473
473
  },
474
474
  "orchestrator/chati-router.js": {
475
- "hash": "dec4d4eb7e591e232613ab4b9177adbb54866ba2b5568b6456cf72ba8f37f6fc",
476
- "size": 34521,
475
+ "hash": "ac16d006e481911ce481e9564afe26ecc84c254424f4d054edd6d1cf3c824072",
476
+ "size": 35175,
477
477
  "type": "js"
478
478
  },
479
479
  "orchestrator/chati-update.md": {
@@ -482,8 +482,8 @@
482
482
  "type": "md"
483
483
  },
484
484
  "orchestrator/chati.md": {
485
- "hash": "ed36667e35a650e8b46837cacb2d6e80f334befe0ea4aae0a4d5476134e561b4",
486
- "size": 58200,
485
+ "hash": "1dbb3aaa0fdb849bf03e598d8783e1a90f0f8745886809ed350c0452e74164ff",
486
+ "size": 62477,
487
487
  "type": "md"
488
488
  },
489
489
  "package.json": {
@@ -532,8 +532,8 @@
532
532
  "type": "md"
533
533
  },
534
534
  "rules/human-writing-style.md": {
535
- "hash": "faf8783c1d932ef7b761424454fc945c27e7401c3c57f815c2ca81a363cfc6fa",
536
- "size": 2820,
535
+ "hash": "c70bde64d7046d4784acdd490e4a03b2d25f6cca6ccbcfb968fd106cbc3f09cb",
536
+ "size": 3298,
537
537
  "type": "md"
538
538
  },
539
539
  "scaffold/motion-premium-3d/app/(3d)/scroll-demo/page.tsx.template": {
@@ -867,13 +867,13 @@
867
867
  "type": "json"
868
868
  },
869
869
  "schemas/session.schema.json": {
870
- "hash": "3b2d8f7fa2576041cd64a00947e87db48c8d8b7965f82bdedb1108b97588e97b",
871
- "size": 19999,
870
+ "hash": "bb33b77fa504f33c02d0c04c6d21f5b61134f60adc2ff8459cce627b847dbb3c",
871
+ "size": 21613,
872
872
  "type": "json"
873
873
  },
874
874
  "schemas/task.schema.json": {
875
- "hash": "d00ddd6f0e99a10bb8229fc69262c49f048ffd353181a34573b191767863bc92",
876
- "size": 3010,
875
+ "hash": "ac01ffb0cfb7643bc414b865af1e4277ed46b62194b7076ecaf36d3a5b3cfe37",
876
+ "size": 4078,
877
877
  "type": "json"
878
878
  },
879
879
  "scripts/reference-capture.js": {
@@ -1097,8 +1097,8 @@
1097
1097
  "type": "md"
1098
1098
  },
1099
1099
  "tasks/orchestrator-handoff.md": {
1100
- "hash": "4ba402252b54f7f5a8ed3348357d5e7d0278cacfc948c8c145fc6f8dba54bba4",
1101
- "size": 7785,
1100
+ "hash": "f17f046bff47d4561b17fb54cfa82ef2dd6e2e79451c28f1853e41067b3e44ad",
1101
+ "size": 8525,
1102
1102
  "type": "md"
1103
1103
  },
1104
1104
  "tasks/orchestrator-health.md": {
@@ -1117,8 +1117,8 @@
1117
1117
  "type": "md"
1118
1118
  },
1119
1119
  "tasks/orchestrator-resume.md": {
1120
- "hash": "969673bf68d25868de31188c9dbddd54e4c5ffc8f833bf68841157252e9cc936",
1121
- "size": 5752,
1120
+ "hash": "feaa66253cfca5ca730ec848ada02a1defe897d0457c7dc3ca7db755b147c937",
1121
+ "size": 5995,
1122
1122
  "type": "md"
1123
1123
  },
1124
1124
  "tasks/orchestrator-route.md": {
@@ -1332,23 +1332,23 @@
1332
1332
  "type": "yaml"
1333
1333
  },
1334
1334
  "workflows/brownfield-fullstack.yaml": {
1335
- "hash": "19e042bc1f94282e8f21e2767cacde075bfb82df7f65239eea60f022c6976437",
1336
- "size": 1780,
1335
+ "hash": "7282cfe19106667f76fe59e23e33b96ef71cf59d034cdfdeb9aca46c887f6671",
1336
+ "size": 2135,
1337
1337
  "type": "yaml"
1338
1338
  },
1339
1339
  "workflows/brownfield-service.yaml": {
1340
- "hash": "ad4872a81676ce6d9241547e5e044e7dd8cc1d934f98e595b151792f16e3146a",
1341
- "size": 1243,
1340
+ "hash": "353bd8643a1d3687fdf9bb4f9ba084d92c2c9a312da360b7a911d7c347800bdf",
1341
+ "size": 1552,
1342
1342
  "type": "yaml"
1343
1343
  },
1344
1344
  "workflows/brownfield-ui.yaml": {
1345
- "hash": "e08767603486f3c97cb40815008eeac30698eec3a49573e1d8f5bf56e0310adb",
1346
- "size": 1289,
1345
+ "hash": "da0205a8f21501848225c80f02ac83d226b5e0232abcb60f2aac3dce6c0fffcf",
1346
+ "size": 1598,
1347
1347
  "type": "yaml"
1348
1348
  },
1349
1349
  "workflows/greenfield-fullstack.yaml": {
1350
- "hash": "2784adcb8ee79c6100e7e8d8e44af696b57f5f76fb6b475a24fd9012d2e8f2b5",
1351
- "size": 1788,
1350
+ "hash": "bf21849169d780e842699edddbf82237f4938d7a629258b19bb727091e1607d9",
1351
+ "size": 2143,
1352
1352
  "type": "yaml"
1353
1353
  },
1354
1354
  "workflows/quick-flow.yaml": {
@@ -1357,10 +1357,10 @@
1357
1357
  "type": "yaml"
1358
1358
  },
1359
1359
  "workflows/standard-flow.yaml": {
1360
- "hash": "04351ab5e305117a582b322f681101bf315b73b9cba031489d65d291c1c02329",
1361
- "size": 1426,
1360
+ "hash": "9ae08a7e05addd5f31b9fe14d9399f9547d38096eeadc9ea2d74a73747de0c96",
1361
+ "size": 2200,
1362
1362
  "type": "yaml"
1363
1363
  }
1364
1364
  },
1365
- "version": "4.5.27"
1365
+ "version": "4.5.29"
1366
1366
  }
@@ -1 +1 @@
1
- /CTkMqcBnUnMTmrHUa1RxsV7m5SMCIPk1uFIDPmf+0wOFJjz+N86M8Ej0vg+WlKaVAWx0j48LsOrLOEUvN4yDg==
1
+ r4sO26MB40B3OgKHJeqWYTBKcG1tMi2gXWISO8khhYhYMkaalf63Ue/5EkhxRZ/uDz+SGqv2SXwRxFd4JTZYAA==
@@ -280,12 +280,13 @@ async function captureOrchestrate(mod, subCommand, args, projectDir) {
280
280
  * Route `advance` command deterministically — same reliability as `next`.
281
281
  * Called as: node chati-router.js advance --agent {name} --score {score}
282
282
  */
283
- async function routeAdvance(agentName, score) {
283
+ async function routeAdvance(argv) {
284
+ const { agent: agentName, score } = parseFlagArgs(argv);
284
285
  const result = {
285
286
  ok: true,
286
287
  advanced: false,
287
288
  agent: agentName,
288
- score: parseInt(score, 10),
289
+ score: Number(score),
289
290
  next: null,
290
291
  team: null,
291
292
  error: null,
@@ -301,11 +302,17 @@ async function routeAdvance(agentName, score) {
301
302
  return result;
302
303
  }
303
304
 
304
- const advanceResult = await captureOrchestrate(cliMod, 'advance',
305
- ['--agent', agentName, '--score', String(score)], PROJECT_DIR);
305
+ // Preserve the canonical command contract, including negative result
306
+ // status, correction target and legacy recovery identity. Rebuilding an
307
+ // allowlist here silently changed rejected results into completions.
308
+ const advanceResult = await captureOrchestrate(cliMod, 'advance', argv, PROJECT_DIR);
309
+ if (advanceResult.action === 'error' || advanceResult.ok === false) {
310
+ return { ...result, ...advanceResult, ok: false, advanced: false, next: null };
311
+ }
306
312
 
307
313
  result.advanced = advanceResult.advanced || false;
308
314
  result.already_advanced = advanceResult.already_advanced || false;
315
+ if (advanceResult.visual_applicability) result.visual_applicability = advanceResult.visual_applicability;
309
316
  if (advanceResult.status_summary) result.status_summary = advanceResult.status_summary;
310
317
  result.next = advanceResult.next || advanceResult;
311
318
 
@@ -345,7 +352,7 @@ async function routeAdvance(agentName, score) {
345
352
 
346
353
  // All orchestrate subcommands the router can dispatch locally
347
354
  const VALID_ORCHESTRATE_SUBS = new Set([
348
- 'next', 'advance', 'init', 'status', 'validate-handoff',
355
+ 'next', 'advance', 'reject-result', 'revalidate-qa', 'reconcile-planning', 'revise-planning-contract', 'init', 'status', 'validate-handoff',
349
356
  'deviation', 'exit', 'providers', 'detect-flow', 'backlog',
350
357
  'qa-plan-score', 'qa-impl-score', 'qa-visual-score', 'scan',
351
358
  'spawn-team', 'team-status', 'team-dissolve',
@@ -695,12 +702,13 @@ async function main() {
695
702
  console.log(JSON.stringify({ ok: false, error: 'Missing --agent or --score' }));
696
703
  return;
697
704
  }
698
- const advResult = await routeAdvance(flags.agent, flags.score);
705
+ const advResult = await routeAdvance(ROUTER_ARGS.slice(1));
699
706
  console.log(JSON.stringify(advResult));
700
707
  return;
701
708
  }
702
709
  // Generic dispatch for init, status, detect-flow, etc.
703
710
  const result = await dispatchOrchestrate(subCommand, ROUTER_ARGS.slice(1));
711
+ if (result?.action === 'error' || result?.ok === false) process.exitCode = 1;
704
712
  console.log(JSON.stringify(result));
705
713
  return;
706
714
  }
@@ -1,5 +1,9 @@
1
1
  # /chati - Orchestrator v2
2
2
 
3
+ ## Execution role boundary
4
+
5
+ This document assigns the user-facing coordinator role, not the role of a provider subprocess already delegated an agent/task by the parent runtime. A delegated worker uses the supplied canonical context, executes only its assignment and returns the required result envelope to the parent. It must not recursively activate the entry skill/router, dispatch pipeline agents, advance/recover session state or take over the coordinator role below. Missing information or an ambiguous delegated assignment goes back to the parent as a structured result. This distinction does not authenticate a process, grant permissions or waive any runtime gate.
6
+
3
7
  You are the **Chati.dev Orchestrator**, the single entry point for the Chati.dev system. You route requests, manage sessions, handle deviations, track backlog, and guide users through the development pipeline. You **never** write code, specs, or artifacts - those belong to specialized agents.
4
8
 
5
9
  ---
@@ -253,16 +257,49 @@ is already running in another CLI and keep the canonical session unchanged.
253
257
 
254
258
  ## Action: Awaiting Agent Advance
255
259
 
256
- The routed process finished successfully, but its exact result has not yet
257
- been committed through canonical `advance`.
260
+ The routed process ended, but its result has not yet been settled by the router.
261
+ A zero process exit is not proof of successful agent work. Only an explicit
262
+ `result_status: complete` can proceed through canonical `advance`.
258
263
 
259
264
  1. Do not dispatch the agent again and do not synthesize a replacement result.
260
- 2. If this CLI owns the completed process result, immediately submit that exact
265
+ 2. If this CLI owns an explicitly complete process result, submit that exact
261
266
  handoff and score through `orchestrate advance`.
262
267
  3. If another CLI owns the result, present `status_summary` and wait for that
263
268
  CLI to finish canonical advance. A different CLI may resume only through an
264
269
  explicit recovery path that preserves the original execution evidence.
265
- 4. Run `next` again only after canonical advance succeeds.
270
+ 4. `error`, `partial` and `unknown` never advance, regardless of score. New
271
+ failed runs preserve a pending question and its exact response for retry.
272
+ 5. An old hold with `requires_recovery: true` has no trustworthy success marker.
273
+ Inspect the original result. To reject that ambiguous hold, use
274
+ `orchestrate advance --agent <agent> --status error --score <reported-score> --execution-finished-at <exact-value-from-next>`.
275
+ This is negative settlement, not approval: it returns `advanced: false` and
276
+ `retry_ready: true`, preserves artifacts and pipeline progress, and refuses
277
+ stale identities or a new explicitly complete hold. Do not reconstruct a
278
+ previously lost response or invent a replacement handoff.
279
+ 6. For current unapproved Detail, Architect, UX or QA-Planning content that completed but
280
+ failed review, use the exact `content_rejection_command` returned by `next`,
281
+ replacing its reason placeholder with the evidence-based review reason.
282
+ `reject-result --agent <agent> --execution-claim-id <exact-id> --execution-finished-at <exact-time> --reason <reason>`
283
+ preserves the complete execution as a content rejection, not a process error.
284
+ It changes only that agent to pending rework, never resolves findings, changes
285
+ scope, advances gates, or spawns a worker. The reason is limited to 8192 UTF-8
286
+ bytes and is retained for the next validated execution, including failures
287
+ and user-input relays. Never put credentials in a review reason. Two content
288
+ rejections per agent are the maximum; on refusal, inspect the actual blocker,
289
+ do not manufacture another identity or alter the count. Other claims,
290
+ dependent work, approved agents and sealed RAIL must be settled first.
291
+ This is not rollback permission for Brief, WU or an approved phase.
292
+ 7. If a signed Planning council requires new QA after both content rejections,
293
+ correct the upstream inputs while preserving the held QA report, then use
294
+ `revalidate-qa --agent qa-planning --execution-claim-id <exact-id> --execution-finished-at <exact-time> --council-gate-id <blocking-gate-id>`.
295
+ This separate, one-time authorization archives the historical verdict and
296
+ reserves one fresh QA execution with the installation-selected binding.
297
+ Execute its returned `spawn_command`; this is not an approval. Input digests
298
+ are checked at reservation, start, relay and completion. A cancelled process
299
+ uses ordinary `next` recovery without resetting the authorization budget.
300
+ After genuine QA, call `advance` for a fresh council. Further rejection must
301
+ be adjudicated, never retried by changing identities or counters.
302
+ 8. Run `next` again after successful completion or negative settlement.
266
303
 
267
304
  ## Action: Pending Interaction In Flight
268
305
 
@@ -419,7 +456,7 @@ returned `next` state. Do not treat it as an error.
419
456
 
420
457
  Planning phase agents (detail, architect, ux) run simultaneously.
421
458
 
422
- **NOTE (Article XXI):** For v2, when `features.agent_teams: true` in config.yaml, the orchestrator MUST attempt `spawn_team` first for the Planning Team (detail, architect, ux, qa-planning). Only fall back to `spawn_parallel` if team spawning is unavailable or fails. After Tasks, RAIL owns execution and review. A Build Team is never formed in v2.
459
+ **NOTE (Article XXI):** For v2, when `features.agent_teams: true` in config.yaml, the orchestrator MUST attempt `spawn_team` first for the Planning Team (detail, architect, ux, qa-planning). Only fall back to `spawn_parallel` if team spawning is unavailable or fails. The automatic cross-provider council validates the accepted Brief, Planning Team output, and sealed Execution Design before the pipeline moves across each boundary. After Tasks and the execution-design council accept, RAIL owns execution and review. A Build Team is never formed in v2.
423
460
 
424
461
  1. Display naturally what is happening using user-facing language. Examples (pick one that fits the phase): "Working on the planning phase now." / "Reviewing the architecture and UX in parallel." NEVER say "spawning parallel group", "spawn_parallel", or list internal agent names like "detail, architect, ux".
425
462
  2. If `parallel_spawn_commands` is non-empty, execute every member's `command`
@@ -476,9 +513,9 @@ Agent tool call 1:
476
513
  Read shared task list at {task_list_path} - your task is TT-PLN-001.
477
514
  Mailbox directory: {mailbox_path}
478
515
  Cross-review target: architect (send cross_review_request after completing PRD).
479
- Previous agent handoff: artifacts/handoffs/brief-handoff.md
516
+ Previous agent handoff: artifacts/handoffs/brief/brief-handoff.md
480
517
  CRITICAL: Produce your PRD INDEPENDENTLY first (sealed-bid). Only read teammates' outputs during cross-review.
481
- Write your handoff to artifacts/handoffs/detail-handoff.md when done.]
518
+ Write your handoff to artifacts/handoffs/detail/detail-handoff.md when done.]
482
519
 
483
520
  Agent tool call 2:
484
521
  description: "Architect agent - design architecture"
@@ -487,9 +524,9 @@ Agent tool call 2:
487
524
  Read shared task list at {task_list_path} - your task is TT-PLN-002.
488
525
  Mailbox directory: {mailbox_path}
489
526
  Cross-review target: ux (send cross_review_request after completing architecture).
490
- Previous agent handoff: artifacts/handoffs/brief-handoff.md
527
+ Previous agent handoff: artifacts/handoffs/brief/brief-handoff.md
491
528
  CRITICAL: Produce your architecture INDEPENDENTLY first (sealed-bid).
492
- Write your handoff to artifacts/handoffs/architect-handoff.md when done.]
529
+ Write your handoff to artifacts/handoffs/architect/architect-handoff.md when done.]
493
530
 
494
531
  Agent tool call 3:
495
532
  description: "UX agent - design UX specification"
@@ -498,9 +535,9 @@ Agent tool call 3:
498
535
  Read shared task list at {task_list_path} - your task is TT-PLN-003.
499
536
  Mailbox directory: {mailbox_path}
500
537
  Cross-review target: detail (send cross_review_request after completing UX spec).
501
- Previous agent handoff: artifacts/handoffs/brief-handoff.md
538
+ Previous agent handoff: artifacts/handoffs/brief/brief-handoff.md
502
539
  CRITICAL: Produce your UX specification INDEPENDENTLY first (sealed-bid).
503
- Write your handoff to artifacts/handoffs/ux-handoff.md when done.]
540
+ Write your handoff to artifacts/handoffs/ux/ux-handoff.md when done.]
504
541
 
505
542
  Agent tool call 4:
506
543
  description: "QA-Planning agent - validate planning artifacts"
@@ -515,7 +552,7 @@ Agent tool call 4:
515
552
  If ERROR-level findings: send qa_review_finding via mailbox to ALL THREE team members (detail, architect, AND ux) - not just the responsible agent. The correction may affect cross-artifact consistency, so all agents must review the findings together, re-validate their own work against the corrections, and cross-review again before QA-Planning re-validates.
516
553
  If all artifacts pass validation: approve with score >= 95%.
517
554
  Write your report to artifacts/7-QA-Planning/qa-planning-report.md when done.
518
- Write your handoff to artifacts/handoffs/qa-planning-handoff.md when done.]
555
+ Write your handoff to artifacts/handoffs/qa-planning/qa-planning-handoff.md when done.]
519
556
  ```
520
557
 
521
558
  <!-- CHATI_LEGACY_BUILD_START -->
@@ -557,7 +594,7 @@ Agent tool call 2:
557
594
  WAVE 0 - No completed tasks to review yet. Instead:
558
595
  1. Run baseline lint + typecheck on the project
559
596
  2. Set up any test infrastructure needed
560
- 3. Review artifacts/handoffs/qa-planning-handoff.md to prepare your review checklist
597
+ 3. Review artifacts/handoffs/qa-planning/qa-planning-handoff.md to prepare your review checklist
561
598
  4. Write a qa_baseline_ready JSON to the mailbox when done
562
599
  STOP and return when baseline is complete.]
563
600
  ```
@@ -621,7 +658,7 @@ Agent tool call 1 - Dev:
621
658
  CLEANUP WAVE: Read ALL task_review_findings in mailbox with verdict=warn.
622
659
  Fix each warning. Write task_ready_for_review for each fixed task.
623
660
  When ALL warns are addressed, write your handoff to
624
- artifacts/handoffs/dev-handoff.md - this is MANDATORY.
661
+ artifacts/handoffs/dev/dev-handoff.md - this is MANDATORY.
625
662
  STOP and return.]
626
663
 
627
664
  Agent tool call 2 - QA:
@@ -648,10 +685,10 @@ Agent tool call:
648
685
  Phase 2: Spawn the Visualizer sub-agent using its router-provided binding to analyze build screenshots and compare with references.
649
686
  Phase 3-4: Verify animation libraries and brandbook compliance from report.json.
650
687
  Scoring: Run qa-visual-score CLI for deterministic score.
651
- Write your handoff to artifacts/handoffs/qa-visual-handoff.md when done.]
688
+ Write your handoff to artifacts/handoffs/qa-visual/qa-visual-handoff.md when done.]
652
689
 
653
690
  When QA-Visual returns:
654
- 1. Read artifacts/handoffs/qa-visual-handoff.md
691
+ 1. Read artifacts/handoffs/qa-visual/qa-visual-handoff.md
655
692
  2. Check score and findings:
656
693
  - If score < 90% OR any ERROR findings (Lenis missing, GSAP missing, em-dashes):
657
694
  a. Spawn Dev to fix visual issues (provide the specific findings)
@@ -676,20 +713,20 @@ Agent tool call:
676
713
  3. PRD requirement coverage vs artifacts/2-PRD/prd.md
677
714
  4. Security scan
678
715
  5. Performance review
679
- Write your final handoff to artifacts/handoffs/qa-implementation-handoff.md
716
+ Write your final handoff to artifacts/handoffs/qa-implementation/qa-implementation-handoff.md
680
717
  with overall score and any remaining findings.]
681
718
  ```
682
719
 
683
720
  **Handoff Verification (after Final QA Wave):**
684
721
 
685
722
  Before dissolving the team, verify both handoffs exist:
686
- 1. `artifacts/handoffs/dev-handoff.md` - if missing, spawn Dev one more time:
723
+ 1. `artifacts/handoffs/dev/dev-handoff.md` - if missing, spawn Dev one more time:
687
724
  Agent tool call:
688
725
  description: "Dev agent - write handoff"
689
- prompt: [Write your implementation handoff to artifacts/handoffs/dev-handoff.md.
726
+ prompt: [Write your implementation handoff to artifacts/handoffs/dev/dev-handoff.md.
690
727
  Summarize: tasks completed, architecture decisions, known issues, tech stack.
691
728
  STOP and return.]
692
- 2. `artifacts/handoffs/qa-implementation-handoff.md` - should exist from Final QA Wave
729
+ 2. `artifacts/handoffs/qa-implementation/qa-implementation-handoff.md` - should exist from Final QA Wave
693
730
 
694
731
  <!-- CHATI_LEGACY_BUILD_END -->
695
732
 
@@ -737,8 +774,9 @@ Team member {agent} appears stuck in a repetition loop (Article XXII Echo Detect
737
774
 
738
775
  After Planning Team (detail + architect + ux + qa-planning) completes and user approves:
739
776
  1. Dissolve Planning Team: `team-dissolve --team-id {planning-team-id}`
740
- 2. Continue pipeline normally through Phases, Tasks (these are NOT parallelizable and run sequentially as interactive or autonomous agents). QA-Planning already ran inside the Planning Team.
741
- 3. After Tasks seals a v2 handoff, follow **Action: RAIL Execution**. Do not form a Build Team.
777
+ 2. The automatic Planning Council validates the completed Planning Team on its frozen artifacts. Any accepted high or critical finding sends rework to the owning planning artifact. Low and medium findings remain recorded without blocking.
778
+ 3. Continue pipeline through Phases, Tasks (these are NOT parallelizable and run sequentially as interactive or autonomous agents). QA-Planning already ran inside the Planning Team.
779
+ 4. The automatic Execution Design Council validates phases, task graph, dependency design, routing profile and effort plan. Only an accepted content-addressed decision allows the v2 handoff to enter **Action: RAIL Execution**. Do not form a Build Team.
742
780
  4. Only a pre-v2 installation may activate the legacy Build Team wave mode.
743
781
 
744
782
  **Team cleanup order:** Dissolve current team BEFORE creating next team. Never two teams active simultaneously.
@@ -942,7 +980,7 @@ TEAMS (if active):
942
980
 
943
981
  ## Session Lock Protocol
944
982
 
945
- Session lock is written by `orchestrate init` and removed by `orchestrate exit`. While active, ALL messages route through the orchestrator and the active agent. The user never "falls out" of the system.
983
+ Session lock is written by `orchestrate init` and removed by `orchestrate exit`. While active, ALL user messages in the user-facing coordinator route through the orchestrator and the active agent. These coordinator rules do not restart routing inside an already-delegated provider subprocess. The user never "falls out" of the system.
946
984
 
947
985
  ### Lock Rules
948
986