kenaz 0.3.18 → 0.3.20

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 (329) hide show
  1. package/core/.claude/commands/agent-worker.md +1 -1
  2. package/core/.claude/commands/architect.md +1 -2
  3. package/core/.claude/commands/spec.md +1 -1
  4. package/core/.claude/commands//347/224/242/345/223/201.md +1 -1
  5. package/core/.claude/hooks/__tests__/task-1977-dedupe-guard.test.js +8 -8
  6. package/core/.claude/skills/architect_agent/SKILL.md +11 -92
  7. package/core/.claude/skills/assessment_agent/SKILL.md +0 -1
  8. package/core/.claude/skills/backend_engineer/SKILL.md +3 -6
  9. package/core/.claude/skills/code_reviewer/SKILL.md +1 -1
  10. package/core/.claude/skills/code_reviewer/patterns.yaml +1 -1
  11. package/core/.claude/skills/designer/SKILL.md +3 -6
  12. package/core/.claude/skills/dev_agent/SKILL.md +30 -491
  13. package/core/.claude/skills/developer/SKILL.md +3 -6
  14. package/core/.claude/skills/feature_agent/SKILL.md +3 -17
  15. package/core/.claude/skills/product_manager/SKILL.md +29 -1064
  16. package/core/.claude/skills/qa_engineer/SKILL.md +12 -17
  17. package/core/.claude/skills/spec_optimizer/SKILL.md +25 -275
  18. package/core/.claude/skills/sre_agent/SKILL.md +3 -6
  19. package/core/.collaboration/README.md +2 -3
  20. package/core/.collaboration/core/task-api.js +5 -138
  21. package/core/.collaboration/docs/CLI.md +0 -2
  22. package/core/.failure/INDEX.yaml +6 -40
  23. package/core/.failure/agent-execution/FAIL-013-search-cwd-drift-and-case-mismatch.yaml +1 -1
  24. package/core/.failure/tools/README.md +9 -227
  25. package/core/.formation/bifrost/launch.js +1 -6
  26. package/core/.formation/bifrost/launch.test.js +1 -1
  27. package/core/.formation/bifrost/shared/ansuz-boot-policy.js +3 -3
  28. package/core/.formation/bifrost/shared/ansuz-boot-policy.test.js +1 -2
  29. package/core/.formation/tools/__tests__/arms.test.js +41 -0
  30. package/core/.formation/tools/__tests__/diagnose-bug.test.js +10 -0
  31. package/core/.formation/tools/__tests__/m1-hmap-convid.test.js +1 -124
  32. package/core/.formation/tools/arms.js +48 -0
  33. package/core/.formation/tools/dispatch.js +24 -15
  34. package/core/.formation/tools/kenaz-stats.js +32 -8
  35. package/core/.formation/tools/kenaz-stats.test.js +15 -2
  36. package/core/.formation/tools/loader.js +17 -140
  37. package/core/.formation/tools/post-complete.js +0 -31
  38. package/core/.formation/tools/prompt.js +16 -1
  39. package/core/.formation/tools/prompt.test.js +20 -0
  40. package/core/.rule/INDEX.yaml +0 -18
  41. package/core/.rule/general/agent-workflow.yaml +14 -164
  42. package/core/.rule/general/project-self-containment.yaml +8 -19
  43. package/core/.rule/general/rust-verify-target.yaml +6 -5
  44. package/core/.rule/general/synapse-code-intelligence.yaml +3 -3
  45. package/core/.specialist/Amelia/capability.yaml +12 -12
  46. package/core/.specialist/Amelia/workflow.yaml +2 -2
  47. package/core/.specialist/Ansuz/SYSTEM_DOC.md +20 -578
  48. package/core/.specialist/Ansuz/cognitive_principles.yaml +2 -3
  49. package/core/.specialist/Ansuz/concepts/boot_rules_summary.yaml +0 -1
  50. package/core/.specialist/Ansuz/concepts/deep_knowledge_pointers.yaml +1 -2
  51. package/core/.specialist/Ansuz/core.yaml +6 -108
  52. package/core/.specialist/Ansuz/guards/lesson_guards.yaml +0 -3
  53. package/core/.specialist/Ansuz/identity_contract.yaml +0 -1
  54. package/core/.specialist/Ansuz/knowledge.yaml +0 -4
  55. package/core/.specialist/Ansuz/rule.yaml +0 -1
  56. package/core/.specialist/Ansuz/tools/handoff-session-identity.test.js +6 -150
  57. package/core/.specialist/tests/runtime-discovery/README.md +1 -1
  58. package/core/.specialist/tools/__tests__/task-2374-usage-counter.test.js +1 -12
  59. package/core/.specialist/tools/ansuz-boot-fast.js +7 -4
  60. package/core/.specialist/tools/ansuz-boot-fast.test.js +10 -3
  61. package/core/.specialist/tools/prompt-files.test.js +1 -0
  62. package/core/.specialist/tools/task-bridge.js +1 -66
  63. package/core/.system/README.md +11 -552
  64. package/core/.system/collaboration/README.md +10 -174
  65. package/core/CLAUDE.md +1 -6
  66. package/core/KENAZ_CORE_VERSION +1 -1
  67. package/core/dev/scripts/js-yaml-resolution.test.js +1 -1
  68. package/core/dev/scripts/peer-identity-e2e.js +402 -0
  69. package/core/dev/scripts/peer-identity-e2e.md +47 -0
  70. package/core/dev/scripts/relay-admin.js +94 -0
  71. package/core/dev/scripts/relay-admin.test.js +131 -0
  72. package/core/dev/scripts/run-rust-tests.js +9 -45
  73. package/core/dev/scripts/rust-verify-worktree.js +4 -4
  74. package/core/dev/scripts/verify-target-dir.js +6 -6
  75. package/core/plugins/kenaz/INVENTORY.md +8 -8
  76. package/core/plugins/kenaz/README.md +10 -0
  77. package/core/plugins/kenaz/commands/architect.md +1 -2
  78. package/core/plugins/kenaz/commands/spec.md +1 -1
  79. package/core/plugins/kenaz/commands//347/224/242/345/223/201.md +1 -1
  80. package/core/plugins/kenaz/guidance.md +1 -1
  81. package/core/plugins/kenaz/hooks/kenaz-hook.js +2 -1
  82. package/core/plugins/kenaz/hooks/sdk-gate.js +9 -0
  83. package/core/plugins/kenaz/scripts/kenaz.test.js +15 -3
  84. package/core/plugins/kenaz/scripts/sync.js +1 -1
  85. package/core/plugins/kenaz/scripts/ygg.js +8 -0
  86. package/core/plugins/kenaz/scripts/ygg.test.js +72 -0
  87. package/core/plugins/kenaz/skills/architect_agent/SKILL.md +11 -92
  88. package/core/plugins/kenaz/skills/assessment_agent/SKILL.md +0 -1
  89. package/core/plugins/kenaz/skills/backend_engineer/SKILL.md +3 -6
  90. package/core/plugins/kenaz/skills/code_reviewer/SKILL.md +1 -1
  91. package/core/plugins/kenaz/skills/code_reviewer/patterns.yaml +1 -1
  92. package/core/plugins/kenaz/skills/designer/SKILL.md +3 -6
  93. package/core/plugins/kenaz/skills/dev_agent/SKILL.md +30 -491
  94. package/core/plugins/kenaz/skills/developer/SKILL.md +3 -6
  95. package/core/plugins/kenaz/skills/feature_agent/SKILL.md +3 -17
  96. package/core/plugins/kenaz/skills/product_manager/SKILL.md +29 -1064
  97. package/core/plugins/kenaz/skills/qa_engineer/SKILL.md +12 -17
  98. package/core/plugins/kenaz/skills/spec_optimizer/SKILL.md +25 -275
  99. package/core/plugins/kenaz/skills/sre_agent/SKILL.md +3 -6
  100. package/core/plugins/kenaz-peer/hooks/register.test.ts +32 -0
  101. package/core/plugins/kenaz-peer/hooks/register.ts +9 -0
  102. package/package.json +6 -6
  103. package/core/.claude/commands/archive.md +0 -24
  104. package/core/.claude/commands/init.md +0 -112
  105. package/core/.claude/commands/legacy_dev.md +0 -18
  106. package/core/.claude/commands/product-review.md +0 -131
  107. package/core/.claude/commands/strategy.md +0 -141
  108. package/core/.claude/commands/sunny.md +0 -1
  109. package/core/.claude/commands//347/224/242/345/223/201/346/252/242/350/246/226.md +0 -129
  110. package/core/.claude/commands//351/200/262/345/272/246.md +0 -15
  111. package/core/.claude/hooks/__tests__/substrate.test.js +0 -122
  112. package/core/.claude/hooks/_substrate-paths.js +0 -95
  113. package/core/.claude/hooks/context-check.js +0 -51
  114. package/core/.claude/hooks/fatigue-check.js +0 -52
  115. package/core/.claude/hooks/handoff-snapshot-on-commit.js +0 -154
  116. package/core/.claude/hooks/handoff-snapshot-on-question.js +0 -158
  117. package/core/.claude/hooks/handoff-staleness.js +0 -197
  118. package/core/.claude/hooks/jev-thalamus-context.js +0 -17
  119. package/core/.claude/hooks/jev-thalamus-context.test.js +0 -41
  120. package/core/.claude/hooks/lease-release.js +0 -119
  121. package/core/.claude/hooks/lease-touch.js +0 -96
  122. package/core/.claude/hooks/reflex-feedback.js +0 -5
  123. package/core/.claude/hooks/session-init.ps1 +0 -49
  124. package/core/.claude/hooks/sound-event.js +0 -70
  125. package/core/.claude/hooks/sound-event.sh +0 -37
  126. package/core/.claude/hooks/stream-delta.js +0 -169
  127. package/core/.claude/no-hooks.settings.json +0 -3
  128. package/core/.claude/skills/legacy_dev/SKILL.md +0 -202
  129. package/core/.claude/skills/sunny/SKILL.md +0 -74
  130. package/core/.collaboration/cli/commands/assign.js +0 -39
  131. package/core/.collaboration/cli/commands/claim.js +0 -33
  132. package/core/.collaboration/cli/commands/complete.js +0 -44
  133. package/core/.collaboration/cli/commands/create.js +0 -110
  134. package/core/.collaboration/cli/commands/get.js +0 -83
  135. package/core/.collaboration/cli/commands/index.js +0 -52
  136. package/core/.collaboration/cli/commands/list.js +0 -51
  137. package/core/.collaboration/cli/commands/lock.js +0 -45
  138. package/core/.collaboration/cli/commands/rebuild.js +0 -39
  139. package/core/.collaboration/cli/commands/search.js +0 -61
  140. package/core/.collaboration/cli/commands/stats.js +0 -61
  141. package/core/.collaboration/cli/commands/transfer.js +0 -41
  142. package/core/.collaboration/cli/commands/unlock.js +0 -48
  143. package/core/.collaboration/cli/formatters/help-formatter.js +0 -70
  144. package/core/.collaboration/cli/formatters/index.js +0 -7
  145. package/core/.collaboration/cli/task-cli.js +0 -46
  146. package/core/.collaboration/cli/utils/arg-parser.js +0 -74
  147. package/core/.collaboration/cli/utils/git-user.js +0 -25
  148. package/core/.collaboration/cli/utils/index.js +0 -9
  149. package/core/.collaboration/cli/utils/output.js +0 -10
  150. package/core/.collaboration/config/default.yaml +0 -189
  151. package/core/.collaboration/core/conflict-resolver.js +0 -461
  152. package/core/.collaboration/core/conflict-resolver.test.js +0 -389
  153. package/core/.collaboration/core/migrate-legacy.js +0 -260
  154. package/core/.collaboration/docs/API.md +0 -787
  155. package/core/.collaboration/docs/ARCHITECTURE.md +0 -596
  156. package/core/.collaboration/docs/FAQ.md +0 -695
  157. package/core/.collaboration/docs/MIGRATION.md +0 -804
  158. package/core/.collaboration/docs/examples/README.md +0 -320
  159. package/core/.collaboration/docs/examples/advanced-queries.js +0 -261
  160. package/core/.collaboration/docs/examples/basic-usage.js +0 -184
  161. package/core/.collaboration/docs/examples/team-workflow.js +0 -352
  162. package/core/.failure/agent-execution/FAIL-001-agent-no-output.yaml +0 -391
  163. package/core/.failure/agent-execution/FAIL-007-pm-lead-wrong-team-invocation.yaml +0 -0
  164. package/core/.failure/agent-execution/FAIL-010-phase0-poem-format-skipped.yaml +0 -28
  165. package/core/.failure/agent-execution/FAIL-010-skipping-cognitive-checkpoint-after-verification.yaml +0 -59
  166. package/core/.failure/agent-execution/FAIL-012-grep-shortcut-during-investigation.yaml +0 -85
  167. package/core/.failure/architecture/FAIL-006-python-version-compatibility.yaml +0 -445
  168. package/core/.failure/pipeline/FAIL-003-queue-pollution.yaml +0 -335
  169. package/core/.failure/pipeline/README.md +0 -95
  170. package/core/.failure/retired/FAIL-009-skipping-synapse-pulse-before-code-change.yaml +0 -49
  171. package/core/.failure/tools/USAGE_GUIDE.md +0 -323
  172. package/core/.failure/tools/check_failures.ps1 +0 -387
  173. package/core/.failure/tools/log_failure.ps1 +0 -474
  174. package/core/.formation/.episode-input.json +0 -10
  175. package/core/.formation/.merge-lock +0 -1
  176. package/core/.formation/lead.yaml +0 -118
  177. package/core/.formation/legacy.bak/designer.yaml +0 -57
  178. package/core/.formation/legacy.bak/pm.yaml +0 -57
  179. package/core/.formation/legacy.bak/qa.yaml +0 -57
  180. package/core/.formation/legacy.bak/review.yaml +0 -62
  181. package/core/.formation/legacy.bak/scheduler.yaml +0 -129
  182. package/core/.formation/legacy.bak/sre.yaml +0 -57
  183. package/core/.formation/role-map.yaml +0 -274
  184. package/core/.formation/roles/_shared/modules/code_review.yaml +0 -98
  185. package/core/.formation/roles/_shared/modules/security.yaml +0 -103
  186. package/core/.formation/roles/_shared/modules/testing.yaml +0 -14
  187. package/core/.formation/roles/backend/role.yaml +0 -93
  188. package/core/.formation/roles/code_reviewer/role.yaml +0 -102
  189. package/core/.formation/roles/database_optimizer/role.yaml +0 -107
  190. package/core/.formation/roles/designer/role.yaml +0 -66
  191. package/core/.formation/roles/developer/role.yaml +0 -75
  192. package/core/.formation/roles/frontend/role.yaml +0 -134
  193. package/core/.formation/roles/incident_response/role.yaml +0 -89
  194. package/core/.formation/roles/qa/role.yaml +0 -89
  195. package/core/.formation/roles/security/role.yaml +0 -87
  196. package/core/.formation/roles/sre/role.yaml +0 -66
  197. package/core/.formation/skills/coordinator.yaml +0 -52
  198. package/core/.formation/solo/diagnosis.yaml +0 -78
  199. package/core/.formation/solo/strategy.yaml +0 -121
  200. package/core/.formation/tests/hello.txt +0 -2
  201. package/core/.formation/tools/coordinator.js +0 -350
  202. package/core/.formation/tools/jev-correction.js +0 -214
  203. package/core/.formation/tools/jev-correction.test.js +0 -178
  204. package/core/.formation/tools/log-reader.js +0 -232
  205. package/core/.formation/tools/revert-daemon-state.js +0 -162
  206. package/core/.formation/tools/test-drift.js +0 -148
  207. package/core/.formation/unit/heimdall.yaml +0 -96
  208. package/core/.formation/unit/plan.yaml +0 -67
  209. package/core/.formation/unit/think.yaml +0 -58
  210. package/core/.kenaz/MUNINN_SNAPSHOT9_EPISODE.json +0 -32
  211. package/core/.kenaz/MUNINN_SNAPSHOT9_RUNE.json +0 -23
  212. package/core/.kenaz/MUNINN_SNAPSHOT9_SUMMARY.md +0 -89
  213. package/core/.kenaz/ash_TASK_1428-20260507.json +0 -14
  214. package/core/.kenaz/muninn_episode_write.ps1 +0 -17
  215. package/core/.kenaz/muninn_snapshot11_rune_candidates.md +0 -63
  216. package/core/.kenaz/muninn_snapshot1_rune_candidates.md +0 -49
  217. package/core/.kenaz/runes_TASK_1428.json +0 -57
  218. package/core/.kenaz/tmp_heimdall_proposal_8d3e392.json +0 -13
  219. package/core/.kenaz/tmp_props.json +0 -1
  220. package/core/.kenaz/tmp_sounddrop_t1_prompt.txt +0 -371
  221. package/core/.rule/MECHANIZED.md +0 -61
  222. package/core/.rule/general/cortex-memory-recall.yaml +0 -446
  223. package/core/.rule/general/pipeline.yaml +0 -246
  224. package/core/.rule/general/sunny-access-control.yaml +0 -60
  225. package/core/.rule/general/system-invariants.yaml +0 -231
  226. package/core/.rule/pipeline/PPL-002-completed-task-archival.yaml +0 -528
  227. package/core/.rule/pipeline/auto-update.yaml +0 -282
  228. package/core/.rule/pipeline/task-execution.yaml +0 -365
  229. package/core/.specialist/Ansuz/concepts/phase_protocol.yaml +0 -65
  230. package/core/.specialist/Ansuz/experiments/boot_ablation_replay.js +0 -197
  231. package/core/.specialist/Ansuz/tools/bootstrap-anchors.js +0 -289
  232. package/core/.specialist/Ansuz/workflow.yaml +0 -1225
  233. package/core/.specialist/experiments/rg_benchmark.js +0 -523
  234. package/core/.specialist/experiments/rg_benchmark_results.json +0 -27
  235. package/core/.specialist/tools/jev-optional-context.js +0 -107
  236. package/core/.specialist/tools/jev-optional-context.test.js +0 -152
  237. package/core/.specialist/tools/memory-action-log.js +0 -839
  238. package/core/.specialist/tools/phase-gate.js +0 -3534
  239. package/core/.specialist/tools/phase-gate.test.js +0 -85
  240. package/core/.specialist/tools/precompute-runner.js +0 -444
  241. package/core/.specialist/tools/rule-engine.js +0 -621
  242. package/core/.specialist/tools/task-bridge-jev.test.js +0 -170
  243. package/core/.synapse/memory-shared.json.sync +0 -1
  244. package/core/.system/agent-skills/README.md +0 -724
  245. package/core/.system/cli-tools/README.md +0 -724
  246. package/core/.system/cortex/MODULES.md +0 -1046
  247. package/core/.system/dashboard/FRONTEND.md +0 -812
  248. package/core/.system/dashboard/README.md +0 -737
  249. package/core/.system/failure/README.md +0 -723
  250. package/core/.system/formation/LEGACY_SKILLS.md +0 -974
  251. package/core/.system/formation/POST_COMPLETE.md +0 -602
  252. package/core/.system/formation/README.md +0 -1094
  253. package/core/.system/formation/TOOLS_REFERENCE.md +0 -1145
  254. package/core/.system/kenaz/README.md +0 -787
  255. package/core/.system/memory/README.md +0 -719
  256. package/core/.system/pipeline/README.md +0 -712
  257. package/core/.system/rule/README.md +0 -794
  258. package/core/.system/sunny/README.md +0 -476
  259. package/core/.system/sunny/RULES.json +0 -89
  260. package/core/.system/sunny/knowledge/INDEX.md +0 -37
  261. package/core/.system/sunny/knowledge/agent-teams-api.md +0 -0
  262. package/core/.system/sunny/knowledge/ansuz-specialist.md +0 -500
  263. package/core/.system/sunny/knowledge/claude-cli-spawn.md +0 -177
  264. package/core/.system/sunny/knowledge/collaboration-api.md +0 -925
  265. package/core/.system/sunny/teammates/README.md +0 -107
  266. package/core/.system/sunny/teammates/how_to_use.yaml +0 -101
  267. package/core/.system/sunny/teammates/tools/headless/launcher.js +0 -318
  268. package/core/.system/sunny/teammates/tools/powershell/launcher.js +0 -241
  269. package/core/.system/sunny/teammates/tools/powershell/start.bat +0 -50
  270. package/core/.system/sunny/teammates/tools/utils/env.js +0 -96
  271. package/core/.system/sunny/teammates/tools/utils/format-output.js +0 -329
  272. package/core/.system/sunny/tools.json +0 -101
  273. package/core/dev/scripts/cleanup-queue.js +0 -184
  274. package/core/dev/scripts/cleanup_queue.js +0 -86
  275. package/core/dev/scripts/legacy/README.md +0 -39
  276. package/core/dev/scripts/legacy/dev_agent_scheduler.ps1.bak +0 -536
  277. package/core/dev/scripts/legacy/multi_agent_scheduler.ps1.bak +0 -1978
  278. package/core/dev/scripts/matrix/CLI_README.md +0 -214
  279. package/core/dev/scripts/matrix/README.md +0 -310
  280. package/core/dev/scripts/matrix/package-lock.json +0 -4266
  281. package/core/dev/scripts/matrix/package.json +0 -55
  282. package/core/dev/scripts/matrix/src/abbreviations.ts +0 -295
  283. package/core/dev/scripts/matrix/src/cli/commands/convert.ts +0 -211
  284. package/core/dev/scripts/matrix/src/cli/commands/create.ts +0 -95
  285. package/core/dev/scripts/matrix/src/cli/commands/delete.ts +0 -102
  286. package/core/dev/scripts/matrix/src/cli/commands/list-tags.ts.wip +0 -140
  287. package/core/dev/scripts/matrix/src/cli/commands/manage-tags.ts.wip +0 -173
  288. package/core/dev/scripts/matrix/src/cli/commands/query.ts +0 -261
  289. package/core/dev/scripts/matrix/src/cli/commands/read.ts +0 -77
  290. package/core/dev/scripts/matrix/src/cli/commands/stats.ts.wip +0 -168
  291. package/core/dev/scripts/matrix/src/cli/commands/tokens.ts.wip +0 -126
  292. package/core/dev/scripts/matrix/src/cli/commands/update.ts +0 -147
  293. package/core/dev/scripts/matrix/src/cli/commands/validate.ts +0 -275
  294. package/core/dev/scripts/matrix/src/cli/index.ts +0 -350
  295. package/core/dev/scripts/matrix/src/cli/utils/file-handler.ts +0 -72
  296. package/core/dev/scripts/matrix/src/cli/utils/logger.ts +0 -65
  297. package/core/dev/scripts/matrix/src/index.ts +0 -62
  298. package/core/dev/scripts/matrix/src/indexer/tag-indexer.ts +0 -165
  299. package/core/dev/scripts/matrix/src/parser.ts +0 -281
  300. package/core/dev/scripts/matrix/src/serializer.ts +0 -151
  301. package/core/dev/scripts/matrix/src/validator.ts +0 -301
  302. package/core/dev/scripts/matrix/tests/abbreviations.test.ts +0 -122
  303. package/core/dev/scripts/matrix/tests/cli.test.ts +0 -177
  304. package/core/dev/scripts/matrix/tests/convert.test.ts +0 -143
  305. package/core/dev/scripts/matrix/tests/parser.test.ts +0 -203
  306. package/core/dev/scripts/matrix/tests/query.test.ts +0 -85
  307. package/core/dev/scripts/matrix/tests/serializer.test.ts +0 -197
  308. package/core/dev/scripts/matrix/tests/validate.test.ts +0 -141
  309. package/core/dev/scripts/matrix/tests/validator.test.ts +0 -167
  310. package/core/dev/scripts/matrix/tsconfig.json +0 -20
  311. package/core/dev/scripts/matrix/types/index.d.ts +0 -111
  312. package/core/dev/scripts/matrix/types/index.d.ts.map +0 -1
  313. package/core/dev/scripts/matrix/types/index.js +0 -8
  314. package/core/dev/scripts/matrix/types/index.js.map +0 -1
  315. package/core/dev/scripts/matrix/types/index.ts +0 -124
  316. package/core/dev/scripts/memory-usage-report.js +0 -152
  317. package/core/dev/scripts/probe/ansuz-scaffold-ablation.js +0 -579
  318. package/core/dev/scripts/probe/ansuz-scaffold-ablation.test.js +0 -244
  319. package/core/dev/scripts/probe/hook-latency-probe.js +0 -315
  320. package/core/dev/scripts/probe/hook-latency-probe.test.js +0 -105
  321. package/core/dev/scripts/probe/prediction-signal-auc.js +0 -483
  322. package/core/dev/scripts/probe/prediction-signal-auc.test.js +0 -200
  323. package/core/dev/scripts/test-pty-ws-tunnel.js +0 -229
  324. package/core/dev/scripts/validate_pipeline.js +0 -197
  325. package/core/dev/spikes/task2145-evidence-20261004/backend-log-excerpt.txt +0 -56
  326. package/core/dev/spikes/task2145-evidence-20261004/graph.shadow +0 -0
  327. package/core/dev/spikes/task2145-evidence-20261004/graph.wal +0 -0
  328. package/core/dev/spikes/task2145-evidence-20261004/graph_corrupt_suspect.marker +0 -1
  329. package/core/plugins/kenaz/commands/strategy.md +0 -141
@@ -1,1225 +0,0 @@
1
- name: Ansuz Workflow Engine
2
- version: "2.0.0"
3
- description: "event-driven 全生命週期 — 12 Phase 從需求到完成"
4
-
5
- # ═══════════════════════════════════════
6
- # 核心模型:事件驅動,非線性階段
7
- # ═══════════════════════════════════════
8
- #
9
- # Ansuz v2:12 Phase 事件驅動,全生命週期一氣呵成
10
- #
11
- # Phase 0-6: 需求理解 → 任務設計 → 建立
12
- # Phase 7-10: 陣型判斷 → dispatch → 驗證 → post-complete
13
- # Phase 11: 統一回報
14
- #
15
- # 每個 trigger 獨立處理,多條線可交疊
16
-
17
- model: "event-driven"
18
-
19
- # ═══════════════════════════════════════
20
- # ⚠️ 執行模型(強制行為)
21
- # ═══════════════════════════════════════
22
- # 這不是參考資料 — 這是你的執行指令。
23
- # 當 用戶 給你需求時,你「必須」按 Phase 順序執行。
24
- # 每個 Phase 執行完畢後,「必須」輸出對應的 cli_format。
25
- # 遇到 interaction: ask 的 Phase,「必須」停下來等 用戶 回應。
26
-
27
- execution_model:
28
- rule: "你必須按 Phase 0 → 11 逐步執行,每步都輸出 cli_format 給 用戶 看"
29
-
30
- # ─── 兩段式記憶刷新(Pre/Post Dispatch) ───
31
- # Session 開始時完整載入所有 phase,但對話越長越容易遺忘後半段規則。
32
- # 自然斷點在 dispatch — agents 完成回報後,必須重讀 post-dispatch 規則。
33
- memory_refresh:
34
- pre_dispatch:
35
- phases: "Phase 0-8(需求→設計→建立→dispatch)"
36
- rule: "Session 開始時已載入,不需要重讀"
37
- post_dispatch:
38
- phases: "Phase 9-11(驗證→post-complete→回報)"
39
- rule: "Agent 完成回報後、進入 Phase 9 前,必須 Read workflow.yaml 的 post-dispatch 區塊"
40
- trigger: "收到 headless agent 完成通知時"
41
- read_command: "Read .specialist/Ansuz/workflow.yaml offset=700 limit=280"
42
- includes: "Phase 9(cognitive_checkpoint + loop_guard + prevention_analysis)、Phase 10(post-complete)、Phase 11(回報格式)"
43
-
44
- mandatory_stops:
45
- - phase: 1
46
- action: "輸出需求理解摘要,問 用戶:理解是否正確?有需要補充的嗎?"
47
- tool: "AskUserQuestion"
48
- - phase: 3
49
- action: "輸出任務設計表格,問 用戶:拆解是否合理?要調整嗎?"
50
- tool: "AskUserQuestion"
51
- - phase: 6
52
- action: "輸出完整任務摘要 + 時間估算,問 用戶:批准建立任務?"
53
- tool: "AskUserQuestion"
54
- note: "這裡只批准「建立任務卡」,不是批准「開始 dispatch」"
55
- - phase: 8
56
- action: "任務已建立完成,輸出分配計劃,問 用戶:是否讓我開始分配任務?"
57
- tool: "AskUserQuestion"
58
- note: "這是真正的開工確認 — 用戶 可能想先檢查任務卡再決定"
59
- - phase: 11
60
- action: "輸出最終結果,問 用戶:下一步要做什麼?"
61
- tool: "AskUserQuestion"
62
- auto_phases:
63
- - "Phase 0(初始化)— 靜默執行,不問"
64
- - "Phase 2(背景調研)— 靜默執行,結果併入 Phase 3 輸出"
65
- - "Phase 3.5(Amelia 審查)— 條件觸發:複雜任務(≥3 任務、跨 role、P0、scope 重疊)才啟動 Amelia 審查。簡單任務由 Ansuz 自行分配 role,直接進入 Phase 4"
66
- - "Phase 4-5(規格+驗證)— 靜默執行,結果併入 Phase 6 輸出"
67
- - "Phase 7(任務建立)— Phase 6 批准後自動建立任務卡,不問"
68
- - "Phase 9-10(驗證+post-complete)— 自動執行,結果併入 Phase 11 輸出。若 Phase 9 建立 FIX 任務,必須迴圈回 Phase 8 dispatch,不可停在 backlog"
69
- compression:
70
- when: "簡單需求(單一任務、明確目標、無歧義)"
71
- how: "Phase 1-6 壓縮為一次輸出:需求摘要 + 任務設計 + 請求批准"
72
- rule: "壓縮後仍必須等 用戶 批准才能 dispatch"
73
-
74
- # ═══════════════════════════════════════
75
- # 事件觸發器
76
- # ═══════════════════════════════════════
77
- triggers:
78
- user_request: "用戶 給需求 → Phase 1~6 → 任務建立"
79
- task_ready: "任務建立 + 用戶批准 → Phase 7~8 → dispatch"
80
- result_arrived: "agent 回報 → Phase 9 → 驗證通過 → Phase 10 | 驗證失敗 → 建 FIX → Phase 8(FIX) 迴圈"
81
- error_occurred: "失敗 → 分析根因 → 重派 | 建 FIX 並 dispatch | 換策略 | 升級"
82
- conflict_detected: "兩個結果矛盾 → 交叉驗證原始碼 | 問 用戶"
83
- qa_issue_received: "QA 缺陷報告 → Phase 1(以 Issue Report 為輸入)"
84
-
85
- # ═══════════════════════════════════════
86
- # Phase 0: 初始化
87
- # ═══════════════════════════════════════
88
- phase_0_initialization:
89
- goal: "載入專案 Context,帶著情報開口"
90
-
91
- # ─── 子專案偵測(最先執行)───
92
- project_detection:
93
- rule: |
94
- 1. 檢查當前工作目錄(cwd)是否有 .kenaz/project.yaml
95
- 2. 如果有 → 子專案模式:設定 PROJECT_PATH = cwd, CORE = project.yaml 的 core_path
96
- 3. 如果沒有 → Core 模式:PROJECT_PATH 為空,不需要 --project-path
97
- 4. 後續所有 task-api.js / dispatch.js / post-complete.js 呼叫都根據此結果決定是否加 --project-path
98
- check: |
99
- # 子專案偵測(在 cwd 執行)
100
- if [ -f .kenaz/project.yaml ]; then
101
- echo "SUB_PROJECT=true"
102
- cat .kenaz/project.yaml
103
- else
104
- echo "SUB_PROJECT=false"
105
- fi
106
- core_path_resolution: |
107
- # __kenaz_core__ 解析(子專案模式時執行)
108
- # project.yaml 的 core_path 可能是 __kenaz_core__(佔位符),需要解析為實際路徑。
109
- # 解析優先級:
110
- # 1. 環境變數 KENAZ_SOURCE_DIR(如果設定)
111
- # 2. 從 prompt.js 注入的 KENAZ_CORE_PATH(headless 模式自動注入)
112
- # 3. 手動指定絕對路徑
113
- #
114
- # 範例:
115
- # core_path: __kenaz_core__
116
- # → KENAZ_SOURCE_DIR=/d/Projects/KenazAI 時解析為 /d/Projects/KenazAI
117
- # → headless 模式時 prompt.js 自動解析並注入 KENAZ_CORE_PATH 區塊
118
- #
119
- # ⚠️ 如果 core_path 既不是 __kenaz_core__ 也不是絕對路徑,視為錯誤。
120
- # ⚠️ Agent 收到的 prompt 中如果有 KENAZ_CORE_PATH 區塊,直接使用該路徑,不需要自行解析。
121
- CORE_PATH=$(grep 'core_path:' .kenaz/project.yaml | sed "s/.*core_path:\s*['\"]*//" | sed "s/['\"].*//")
122
- if [ "$CORE_PATH" = "__kenaz_core__" ]; then
123
- if [ -n "$KENAZ_SOURCE_DIR" ]; then
124
- CORE_PATH="$KENAZ_SOURCE_DIR"
125
- else
126
- echo "ERROR: core_path is __kenaz_core__ but KENAZ_SOURCE_DIR is not set."
127
- echo "Set KENAZ_SOURCE_DIR or use an absolute path in project.yaml."
128
- exit 1
129
- fi
130
- fi
131
- echo "CORE=$CORE_PATH"
132
-
133
- actions:
134
- - "執行子專案偵測(見 project_detection.check)"
135
- - "讀 dev/PRODUCT_SPEC.md — 了解專案規格和 Feature ID"
136
- - "node {CORE}/.collaboration/core/task-api.js [--project-path {PROJECT_PATH}] list — 統計任務狀態"
137
- - "node {CORE}/.collaboration/core/task-api.js [--project-path {PROJECT_PATH}] stats — 取得統計數據"
138
- - "讀 .failure/INDEX.yaml — 檢查已知失敗模式(從 CORE 讀取)"
139
- present:
140
- banner: "ᚨ Ansuz 已就位"
141
- show:
142
- - "任務統計表(待處理/進行中/已完成 數量 + P0/P1 高亮)"
143
- - "近期活動摘要(最近 3 筆 Recent Activity)"
144
- - "如有 P0/P1 待處理 → 主動提示最高優先任務"
145
- - "如無待處理 → 顯示「目前無待處理任務」"
146
- close:
147
- has_pending: "用 AskUserQuestion 問:「有 {N} 個待處理任務。有什麼新需求,或有其他要討論的嗎?」"
148
- no_pending: "用 AskUserQuestion 問:「目前無待處理任務。需要什麼?」"
149
- cli_format:
150
- has_pending: |
151
- ᚨ Ansuz 已就位
152
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
153
- | 狀態 | 數量 | 備註 |
154
- |------|------|------|
155
- | 待處理 | {N} | {P0/P1 高亮} |
156
- | 進行中 | {N} | |
157
- | 已完成 | {N} | 累積 |
158
-
159
- 📌 近期活動:
160
- - {最近活動 1}
161
- - {最近活動 2}
162
- - {最近活動 3}
163
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
164
- no_pending: |
165
- ᚨ Ansuz 已就位
166
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
167
- 已完成: {N} 個任務(累積)
168
-
169
- 📌 近期活動:
170
- - {最近活動 1}
171
- - {最近活動 2}
172
- - {最近活動 3}
173
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
174
- 目前無待處理任務。
175
- no_pending_options:
176
- instruction: "用 AskUserQuestion 問 用戶"
177
- question: "目前無待處理任務。需要什麼?"
178
- options:
179
- - "新功能需求"
180
- - "修復 Bug"
181
- - "優化現有功能"
182
- - "查看專案狀態"
183
- rules:
184
- - "❌ 不展示內部實現(陣型、系統路徑)— 用戶關心專案狀態"
185
- - "✅ 先做事再開口 — 帶著 context 說話"
186
-
187
- # ═══════════════════════════════════════
188
- # Phase 1: 需求理解
189
- # ═══════════════════════════════════════
190
- phase_1_requirement_analysis:
191
- goal: "快速理解用戶需求,澄清模糊點"
192
- cognitive_checkpoint:
193
- note: "歷史教訓在 native memory 檔 / `kenaz learn list`;代碼現況用 Grep + kenaz_lsp_references 查"
194
- ddx_trigger:
195
- when: "需求類型為 Bug/Fix — 根因不明確時"
196
- how: "套用 differential_over_intuition protocol — 列出 3+ 可能根因,用客觀數據(日誌、代碼路徑)逐一排除"
197
- output: "在 cli_format 中展示「根因鑑別」區塊"
198
- input_types:
199
- natural_language: "用戶自然語言描述 → 確認意圖再行動"
200
- task_id: "TASK_XXX → 讀取任務詳情,確認理解"
201
- qa_issue: "QA 缺陷報告 → 從 dev/qa/QA_ISSUES_*.md 讀取"
202
- actions:
203
- listen:
204
- - "識別需求類型(新功能/Bug/優化/重構/設計)"
205
- - "識別核心目標 — 用戶要什麼結果"
206
- - "識別隱含需求 — 用戶沒說但顯然需要的"
207
- clarify:
208
- - "使用 AskUserQuestion 工具詢問模糊點"
209
- - "確認技術約束和優先級"
210
- - "確認受影響範圍"
211
- summarize:
212
- - "1-2 句話總結需求"
213
- - "確認與用戶理解一致"
214
- cli_format: |
215
- 📋 需求理解
216
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
217
- 需求摘要: {1-2 句話}
218
- 需求類型: {新功能/Bug/優化/重構/設計}
219
- 核心目標: {用戶想達成什麼}
220
- 優先級: {P0/P1/P2/P3}
221
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
222
- output: "需求摘要 + 類型 + 目標 + 優先級"
223
- interaction:
224
- type: "ask"
225
- instruction: "輸出 cli_format 後,用 AskUserQuestion 問 用戶:「理解是否正確?有需要補充或修正的嗎?」"
226
- on_correct: "→ Phase 2(靜默調研)→ Phase 3"
227
- on_wrong: "根據 用戶 的修正重新理解,再次輸出 cli_format"
228
-
229
- # ═══════════════════════════════════════
230
- # Phase 2: 背景調研
231
- # ═══════════════════════════════════════
232
- phase_2_research:
233
- goal: "用 LSP callers + Grep 建立完整 context — 先查證,再設計任務"
234
- actions:
235
- - "搜尋相關 Feature ID(Grep dev/PRODUCT_SPEC.md)"
236
- - "kenaz_lsp_callers / kenaz_lsp_references(目標 symbol) — 誰呼叫、誰引用(爆炸半徑)"
237
- - "Grep/Glob — 探索相關代碼與檔案結構"
238
- - "Grep — 僅用於精確字串匹配(如 error code、常量值、枚舉所有 X)"
239
- - "查閱類似已完成任務(task-api.js search)"
240
- - "檢查 .failure/ 相關失敗模式 — 避免重複踩坑"
241
- caller_driven_research:
242
- description: "對核心 symbol 查 LSP callers,驅動 Phase 3 任務設計"
243
- note: "核心 symbol 來源:需求描述或 scope_paths 推斷"
244
- steps:
245
- - "從需求描述或 scope_paths 推斷核心 symbol"
246
- - "對每個核心 symbol → kenaz_lsp_callers(symbol) + kenaz_lsp_references(symbol)"
247
- - "從結果提取:"
248
- - " scope_paths ← callers/references 所在文件"
249
- - " dependencies ← callers/callees 跨文件的真依賴"
250
- - " complexity ← caller 數量 + 跨模組數量決定"
251
- - " known_risks ← .failure/ 與 native memory 相關條目注入 technical_notes"
252
- rule: "Phase 3 的 scope_paths 和 dependencies 必須有 LSP 結果支撐,不靠推斷"
253
- # ─── 空結果協議(callers 回空時的替代策略) ───
254
- empty_result_protocol:
255
- when: "kenaz_lsp_callers 回空(新功能、新專案、未知領域)"
256
- principle: "本地無資料 → 手動探索 → 保守設計"
257
- phase_2_actions:
258
- - "Grep/Glob/Read — 手動探索相關目錄結構和現有 pattern"
259
- - "查 .failure/ — 類似功能有沒有已知失敗模式"
260
- phase_3_actions:
261
- - "scope_paths 靠目錄結構 + 現有 pattern 推斷(標記為 '未經 LSP 驗證')"
262
- - "complexity 預設 medium(無數據,保守估計)"
263
- - "technical_notes 必須注入:'此任務為新功能/未知領域,無本地 callers 數據。Agent 需自行探索 codebase 並遵循現有 pattern。'"
264
- # ─── 預言比較(多方案脈衝對比) ───
265
- prophetic_comparison:
266
- description: "偵測到多方案時,自動觸發脈衝比較流程"
267
- trigger: |
268
- Phase 2 調研過程中偵測到以下任一信號:
269
- - 需求描述包含選擇(「A 或 B」「可以改 X 也可以改 Y」)
270
- - callers 結果顯示多個可行切入點(如 callers 分佈在不同模組)
271
- - DDx 產出 2+ 競爭方案
272
- - Ansuz 自身分析出 2+ 路徑
273
- actions:
274
- - "對每個方案的目標 symbol 各跑 kenaz_lsp_callers + kenaz_lsp_references(可並行)"
275
- - "收集 caller 數 / 跨模組數 / .failure 風險"
276
- - "填入 🔮 預言比較 cli_format 表格"
277
- - "比較結果直接注入 Phase 3 的 scope_paths 和 complexity 決策"
278
- output: "預言比較表格 — 併入 Phase 3 cli_format 輸出給用戶"
279
- example: |
280
- 需求:「修復 data flow 斷裂,可以改 source 端或改 sink 端」
281
- → kenaz_lsp_callers(source_symbol) → 8 callers, 跨 1 模組, 0 risks
282
- → kenaz_lsp_callers(sink_symbol) → 22 callers, 跨 3 模組, 2 risks
283
- → 結論: 改 source 端 — 爆炸半徑小 3 倍,零歷史風險
284
- lsp_fallback:
285
- rule: "kenaz_lsp_* 首次呼叫失敗 → 該 session 降級用 Grep/Glob,不重試"
286
- cli_format: |
287
- 🔍 背景調研 + 影響分析
288
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
289
- 相關 Feature: {F-XXX}
290
-
291
- ⚡ 影響分析: {symbol_name}
292
- 爆炸半徑: {caller_count} callers, {module_crossings} 跨模組(kenaz_lsp_callers)
293
- 已知風險: {.failure / native memory 摘要}
294
-
295
- 相關代碼: {從 callers 提取的檔案路徑}
296
- 類似任務: {TASK_XXX, TASK_YYY}
297
- 已知風險: {.failure 中的相關模式}
298
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
299
- output: "影響分析結果 + Feature ID + 代碼路徑 + 類似任務 + 風險點"
300
-
301
- # ═══════════════════════════════════════
302
- # Phase 3: 任務設計
303
- # ═══════════════════════════════════════
304
- phase_3_task_design:
305
- goal: "用 callers 結果拆解需求為獨立、可執行的任務 — 證據驅動,不靠推斷"
306
- ddx_trigger:
307
- when: "需求有多種實作方案、或涉及架構決策時"
308
- how: "套用 differential_over_intuition protocol — 列出 2+ 方案,用客觀證據排序後選最優"
309
- output: "在 cli_format 中展示「方案鑑別」區塊(僅複雜需求)"
310
- # ─── 預言銜接(DDx → Prophetic Comparison) ───
311
- prophecy_integration:
312
- rule: |
313
- DDx 識別出 2+ 方案後,不可直接靠推斷選方案。
314
- 必須檢查 Phase 2 是否已有預言比較結果:
315
- - 有 → 直接引用 callers 數據做選擇
316
- - 無 → 此刻補跑:對每個方案目標 symbol 各跑 kenaz_lsp_callers + kenaz_lsp_references,填入比較表格
317
- decision_flow: |
318
- DDx 列出方案 → 預言比較量化風險 → 結構數據選方案 → 用選中方案驅動任務設計
319
- (鑑別回答「有哪些選擇」→ 預言回答「選哪個」→ 任務設計用選中方案的 scope)
320
- scope_derivation: |
321
- 選中方案的 callers 結果直接決定:
322
- - scope_paths ← callers 與 references 涉及的文件路徑
323
- - complexity ← caller 數 + 跨模組數
324
- - technical_notes ← .failure 風險 + 被排除方案的理由(「為什麼不選 B」)
325
- impact_driven_design:
326
- principle: "Phase 2 的 LSP callers 結果是任務設計的輸入,不是參考"
327
- scope_from_callers: "scope_paths = kenaz_lsp_callers/references 涉及的文件路徑(不猜,以 LSP 結果為準)"
328
- deps_from_callers: "dependencies = callers/callees 跨文件的真依賴(B 的輸入包含 A 的輸出才算)"
329
- complexity_from_callers: |
330
- simple: callers < 10 且無跨模組
331
- medium: callers 10-30 或跨 1-2 個模組
332
- complex: callers > 30 或跨 >= 3 個模組
333
- risks_from_memory: ".failure/ 與 native memory 的相關條目 → 注入任務的 technical_notes"
334
- implementors_check: "kenaz_lsp_references 找到的 implementor 檔案必須在某個任務的 scope_paths 中"
335
- actions:
336
- decomposition:
337
- - "每個任務 1-8 小時可完成"
338
- - "任務之間盡量獨立 — 真依賴才序列,假依賴並行"
339
- - "定義 scope_paths — 從 callers 結果提取,確保並行安全"
340
- - "分配 agent_type(見 agent_assignment)"
341
- sizing:
342
- small: "單一修改 → 不拆,一個任務"
343
- medium: "多檔無依賴 → 拆成可並行的任務"
344
- large: "有依賴鏈 → 拆成有序任務"
345
- formation_preview:
346
- - "預判陣型選擇(Phase 7 正式決定)"
347
- - "告知用戶:任務數 + 預估陣型 + 是否可並行"
348
-
349
- # ─── Phase 3.5: Amelia 審查(條件觸發) ───
350
- # 觸發時機:用戶批准 Phase 3 任務設計後,根據複雜度決定是否啟動
351
- # 簡單任務:Ansuz 自行分配 role,跳過 Amelia
352
- # 複雜任務:Step 1 Task Audit → Step 2 Role Assignment
353
- amelia_review:
354
- trigger: "Phase 3 用戶批准後,根據 skip_conditions 判斷是否跳過"
355
- delegated_to: "Amelia"
356
- principle: "Ansuz 設計任務 → 簡單任務自行 role → 複雜任務才請 Amelia 審計"
357
-
358
- # ─── 跳過條件(全部滿足時跳過 Amelia 審查) ───
359
- skip_conditions:
360
- description: "簡單任務不需要 Amelia 審查,Ansuz 自行完成 role 分配"
361
- all_of:
362
- - "任務數量 ≤ 2"
363
- - "所有任務的 complexity 為 simple 或 medium"
364
- - "無跨 role 需求(全部為同一 role,如全是 frontend)"
365
- - "scope_paths 無重疊"
366
- - "無 P0 任務"
367
- on_skip:
368
- action: "Ansuz 根據 scope_paths 直接分配 role(見 role_assignment_rules)"
369
- log: "Phase 3.5 skipped — simple task, Ansuz self-assigned role"
370
-
371
- # ─── Ansuz 自行分配 role 的規則(跳過 Amelia 時使用) ───
372
- role_assignment_rules:
373
- - "瀏覽器端(*.tsx, components/, pages/, hooks/)→ frontend"
374
- - "伺服器端(api/, server/, routes/, *.py, *.rs)→ backend"
375
- - "Rust + TypeScript 混合 → developer"
376
- - "基礎設施(Dockerfile, .github/, deploy/)→ sre"
377
- - "測試(test/, *.test.*)→ qa"
378
- - "不明確 → developer"
379
-
380
- # ─── Step 1: Task Audit(品質審計) ───
381
- step_1_audit:
382
- when: "Phase 3 完成任務拆解後,role 分配前"
383
- how: |
384
- 用 Agent tool 開一個 subagent 請 Amelia 審計任務品質:
385
-
386
- Agent({
387
- description: "Amelia task audit",
388
- prompt: `
389
- 你是 Amelia(Agent Center 調度者)。
390
- 請讀取 .specialist/Amelia/capability.yaml 的 task_audit 規則,
391
- 從 agent 執行角度審計以下任務的品質。
392
-
393
- 審計維度:scope_clarity, acceptance_testability, dependency_correctness,
394
- requirement_completeness, sizing_appropriateness, technical_notes_quality
395
-
396
- 任務列表:
397
- {任務清單,含 title + description + scope_paths + requirements + acceptance_criteria + dependencies + technical_notes}
398
-
399
- 你必須讀取相關原始碼來驗證任務定義的準確性,不可只靠任務描述推斷。
400
-
401
- 輸出格式:
402
- 🔍 Task Audit Report
403
- | TASK | 維度 | 判定 | 建議 |
404
- 總結: {問題數} + {建議數}
405
- `
406
- })
407
-
408
- on_result: |
409
- Ansuz 收到審計報告後:
410
- 1. ❌ 有問題 → 根據 Amelia 建議調整任務定義(修改 requirements / scope_paths / acceptance_criteria 等)
411
- 2. ⚠️ 有建議 → 評估是否採納,採納則調整
412
- 3. ✅ 全部通過 → 直接進入 Step 2
413
- 調整完成後再進入 Step 2。
414
-
415
- # ─── Step 2: Role Assignment(角色分配) ───
416
- step_2_role_assignment:
417
- when: "Step 1 審計通過(或調整完成)後"
418
- how: |
419
- 用 Agent tool 開一個 subagent 請 Amelia 分配 role:
420
-
421
- Agent({
422
- description: "Amelia role assignment",
423
- prompt: `
424
- 你是 Amelia(Agent Center 調度者)。
425
- 請讀取 .specialist/Amelia/capability.yaml 的 role_assignment 規則,
426
- 根據 execution-environment 原則,為以下任務分配 role。
427
-
428
- 任務列表:
429
- {任務清單,含 title + scope_paths}
430
-
431
- 輸出格式:
432
- | TASK_ID | title | scope_paths | role | 判斷理由 |
433
-
434
- 規則摘要:
435
- - 瀏覽器端(*.tsx, components/, pages/)→ frontend
436
- - 伺服器端(api/, server/, routes/, *.py)→ backend
437
- - 基礎設施(Dockerfile, .github/, deploy/)→ sre
438
- - 測試(test/, *.test.*)→ qa
439
- - 設計規格 → designer
440
- - 跨前後端 → 建議拆分
441
- - 不明確 → developer + 說明原因
442
- `
443
- })
444
-
445
- Amelia 回傳後,Ansuz 將 role 寫入各任務。
446
-
447
- rules:
448
- - "❌ 啟動 Amelia 審查時,禁止跳過 Step 1 直接進 Step 2 — audit 是 hard gate"
449
- - "✅ 簡單任務跳過整個 Phase 3.5 時,Ansuz 可直接用 role_assignment_rules 填 role"
450
- - "✅ Step 1 和 Step 2 可用同一個 subagent(resume)或分開兩個"
451
-
452
- # ─── Scope 重疊檢查(強制執行) ───
453
- # ❌ scope_paths 重疊的任務不可標記為可並行
454
- scope_safety:
455
- rules:
456
- - "輸出任務列表前,檢查所有任務的 scope_paths 是否有交集"
457
- - "有交集 → 必須標記 dependencies 或調整 scope 使其不重疊"
458
- - "無交集 → 可標記為可並行"
459
- check_format: |
460
- Scope 安全檢查:
461
- ✅ TASK_A (src/components/auth/) vs TASK_B (src/pages/settings/) → 無重疊,可並行
462
- ⚠️ TASK_C (src/components/) vs TASK_D (src/components/auth/) → 重疊!需序列或拆 scope
463
-
464
- # ─── 依賴標記(強制執行) ───
465
- # ❌ 禁止全部 dependencies: [] — 必須分析真依賴
466
- dependency_rules:
467
- rules:
468
- - "每個任務必須分析:它是否需要其他任務的產出才能開始?"
469
- - "API 端點 → 前端呼叫 → 前端任務 depends_on 後端任務"
470
- - "設計稿 → 實作 → 前端任務 depends_on 設計任務"
471
- - "DB schema → API → 後端任務 depends_on SRE 任務"
472
- - "確實無依賴 → dependencies: [] 且註明「獨立任務,無前置依賴」"
473
-
474
- # ─── 任務粒度(強制執行) ───
475
- # ❌ 單一任務不應跨越 2 個以上 role
476
- sizing_rules:
477
- rules:
478
- - "如果一個任務需要修改前端+後端 → 拆成 2 個任務"
479
- - "如果一個任務需要修改前端+基礎設施 → 拆成 2 個任務"
480
- - "每個任務最多 8 小時 — 超過必須拆分"
481
- - "拆分後重新檢查 scope 重疊和依賴"
482
-
483
- cli_format: |
484
- 📐 任務設計
485
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
486
- 共拆解為 {N} 個任務:
487
-
488
- | # | 標題 | Agent | Priority | Hours | 陣型 |
489
- |---|------|-------|----------|-------|------|
490
- | 1 | ... | frontend | P1 | 4h | unit |
491
- | 2 | ... | frontend | P2 | 2h | unit |
492
-
493
- 依賴關係: {TASK_B → TASK_A}
494
- 並行策略: {N 個可並行,M 個需序列}
495
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
496
- output: "任務草稿列表 + 依賴關係 + 並行策略"
497
- interaction:
498
- type: "ask"
499
- instruction: "輸出 cli_format 後,用 AskUserQuestion 問 用戶:「任務拆解是否合理?需要調整任務數、優先級或 Agent 分配嗎?」"
500
- options:
501
- - "看起來不錯,繼續"
502
- - "需要調整(告訴我要改什麼)"
503
- on_approve: "→ Phase 3.5(簡單任務跳過,複雜任務啟動 Amelia 審查)→ Phase 4-5(靜默規格+驗證)→ Phase 6"
504
- on_adjust: "根據 用戶 的修正重新設計,再次輸出 cli_format"
505
-
506
- # ═══════════════════════════════════════
507
- # Phase 4: 規格撰寫
508
- # ═══════════════════════════════════════
509
- phase_4_specification:
510
- goal: "為每個任務撰寫詳細 YAML 規格"
511
- actions:
512
- - "定義 description(背景與目標)"
513
- - "定義 requirements(實作需求清單)"
514
- - "定義 acceptance_criteria(至少 1 個可測試標準)"
515
- - "定義 technical_notes(技術備註、相關代碼路徑)"
516
- - "定義 scope_paths(允許修改的路徑)"
517
- - "定義 dependencies(真依賴 only)"
518
- - "定義 feature_ids(關聯 PRODUCT_SPEC)"
519
-
520
- # ─── YAML 任務模板 ───
521
- task_template: |
522
- id: "TASK_XXX"
523
- title: "任務名稱"
524
- description: |
525
- 簡短描述此任務要完成的目標。
526
- 包括背景說明和預期行為。
527
- priority: "P1" # P0/P1/P2/P3
528
- status: "backlog" # backlog → active → done
529
- role: "" # ⚠️ 必填!根據 scope_paths 判斷:frontend/backend/sre/qa/designer/developer
530
- rigor: "medium" # high(team)/ medium / low(單 agent)
531
- complexity: "medium" # simple/medium/complex
532
- tags: ["code"] # code/doc/plan/fix/refactor/test/design/review
533
- source: "F-001" # Feature ID 或需求來源
534
- feature_ids: ["F-001"] # 可選:多功能任務
535
- dependencies: ["TASK_YYY"] # 真依賴 only
536
- scope_paths: # 允許修改的路徑
537
- - "dashboard/src/"
538
- requirements: # 實作需求清單
539
- - "需求 1..."
540
- - "需求 2..."
541
- acceptance_criteria: # 驗收標準(必填)
542
- - "標準 1..."
543
- technical_notes: # 技術備註
544
- - "備註 1..."
545
- estimated_hours: 3
546
- metadata:
547
- created_at: "2026-02-22T00:00:00+08:00"
548
- created_by: "Ansuz"
549
-
550
- required_fields:
551
- - "id"
552
- - "title"
553
- - "description"
554
- - "priority"
555
- - "role"
556
- - "acceptance_criteria"
557
-
558
- cli_format: |
559
- 📝 規格撰寫
560
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
561
- TASK_XXX: {標題}
562
- Requirements:
563
- ✓ {需求 1}
564
- ✓ {需求 2}
565
- Acceptance Criteria:
566
- ✓ {標準 1}
567
- ✓ {標準 2}
568
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
569
-
570
- # ═══════════════════════════════════════
571
- # Phase 5: 驗證
572
- # ═══════════════════════════════════════
573
- phase_5_validation:
574
- goal: "驗證任務完整性和正確性"
575
- checks:
576
- - "必填欄位完整?(id, title, description, priority, role, acceptance_criteria)"
577
- - "Feature ID 存在於 PRODUCT_SPEC.md?"
578
- - "依賴任務存在且狀態正確?"
579
- - "scope_paths 合理?(無重疊衝突)"
580
- - "agent_type / role 分配正確?"
581
- - "acceptance_criteria 可測試?(非模糊描述)"
582
- - ".failure/ 相關模式已考慮?"
583
- cli_format: |
584
- ✅ 驗證結果
585
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
586
- 必填欄位: ✓ 完整
587
- Feature ID: ✓ F-XXX 存在
588
- 依賴任務: ✓ TASK_YYY 存在
589
- Scope 路徑: ✓ 無衝突
590
- Agent 分配: ✓ 正確
591
- 驗收標準: ✓ 可測試
592
- 失敗模式: ✓ 已檢查
593
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
594
- on_fail: "列出錯誤 → 返回 Phase 4 修正"
595
-
596
- # ═══════════════════════════════════════
597
- # Phase 6: 用戶批准
598
- # ═══════════════════════════════════════
599
- phase_6_approval:
600
- goal: "向 用戶 展示任務設計,獲得批准後再執行"
601
- actions:
602
- - "展示任務摘要表格(ID、標題、Agent、Priority、Hours、陣型)"
603
- - "展示依賴關係和並行策略"
604
- - "展示雙時間估算(人類 vs Agent)"
605
- - "使用 AskUserQuestion 詢問是否批准"
606
- cli_format: |
607
- 🔍 任務摘要(等待批准)
608
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
609
- | # | 標題 | Agent | Priority | 人類預估 | Agent 預估 |
610
- |---|------|-------|----------|---------|-----------|
611
- | 1 | ... | frontend | P1 | 4h | ~5 min |
612
- | 2 | ... | frontend | P2 | 2h | ~3 min |
613
-
614
- 依賴: TASK_B → TASK_A
615
- 並行: 2 個可並行
616
- 陣型: unit × 2(並行 dispatch)
617
-
618
- ⏱️ 時間估算:
619
- - 人類預估: 6h
620
- - Agent 預估: ~8 min(並行處理)
621
- - 效率提升: ~45x
622
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
623
- interaction:
624
- type: "ask"
625
- instruction: "輸出 cli_format 後,用 AskUserQuestion 問 用戶:「批准建立任務卡嗎?」"
626
- options:
627
- - "批准,建立任務"
628
- - "需要調整(返回修改)"
629
- on_approve: "→ Phase 7(自動建立任務卡)→ Phase 8(再次詢問是否 dispatch)"
630
- on_adjust: "→ 返回 Phase 3 重新設計"
631
- rules:
632
- - "❌ 不跳過用戶確認直接開工"
633
- - "✅ 拒絕 → 返回 Phase 3 重新設計"
634
- - "✅ 批准 → 進入 Phase 7"
635
-
636
- # ─── 雙時間估算規則 ───
637
- time_estimation:
638
- human:
639
- description: "按一般開發者工作速度估算"
640
- source: "任務的 estimated_hours 欄位"
641
- agent:
642
- description: "AI Agent 實際執行時間"
643
- rules:
644
- "1-4h": "3-5 min"
645
- "4-8h": "5-8 min"
646
- "8-16h": "8-12 min"
647
- "16-24h": "12-20 min"
648
- "24h+": "20-30 min"
649
- efficiency: "人類預估 ÷ Agent 預估"
650
-
651
- # ═══════════════════════════════════════
652
- # Phase 7: 任務建立
653
- # ═══════════════════════════════════════
654
- phase_7_task_creation:
655
- goal: "在任務系統中建立 YAML 任務"
656
- system: ".collaboration/core/task-api.js"
657
- note: "子專案時所有 task-api.js 呼叫必須加 --project-path {PROJECT_PATH}"
658
- actions:
659
- create: |
660
- node {CORE}/.collaboration/core/task-api.js [--project-path {PROJECT_PATH}] create \
661
- --title "任務名稱" \
662
- --priority P1 \
663
- --role frontend \
664
- --rigor medium \
665
- --complexity medium \
666
- --tags code \
667
- --scope-paths "dashboard/src/" \
668
- --dependencies TASK_YYY \
669
- --feature-ids F-001 \
670
- --estimated-hours 4 \
671
- --acceptance-criteria "標準 1" \
672
- --requirements "需求 1"
673
- verify: "node {CORE}/.collaboration/core/task-api.js [--project-path {PROJECT_PATH}] list"
674
- get: "node {CORE}/.collaboration/core/task-api.js [--project-path {PROJECT_PATH}] get TASK_XXX"
675
- post_create:
676
- - "驗證 YAML 文件已建立(task-api.js get TASK_XXX)"
677
- - "確認任務狀態已更新(task-api.js list)"
678
- - "更新 dev/pipeline/PROGRESS.md — Last Update + Recent Activity(僅 Core 專案)"
679
- cli_format: |
680
- 📦 任務建立
681
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
682
- ✓ TASK_XXX 已建立 → .collaboration/tasks/backlog/
683
- ✓ TASK_YYY 已建立 → .collaboration/tasks/backlog/
684
-
685
- 🔄 Pipeline 更新:
686
- ✓ PROGRESS.md 已更新(+{N} 任務)
687
- ✓ 任務統計: 待處理 {N} | 進行中 {N} | 已完成 {N}
688
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
689
- rules:
690
- - "✅ 任務建立用 .collaboration 新系統"
691
- - "✅ 進度追蹤同步更新 dev/pipeline/PROGRESS.md"
692
- - "❌ 不跳過任務系統直接 dispatch"
693
-
694
- # ═══════════════════════════════════════
695
- # Phase 8: 陣型判斷 + Dispatch
696
- # ═══════════════════════════════════════
697
- phase_8_dispatch:
698
- goal: "選擇最輕量可行陣型,dispatch agent 執行"
699
-
700
- # ─── 陣型判斷 ───
701
- judgment:
702
- principle: "能 unit 不 solo,能 solo 不 squad,能 squad 不 legion"
703
- guide:
704
- unit: "目標明確、單一 scope → do/think/plan"
705
- solo: "需要多角度分析 → strategy/diagnosis"
706
- squad: "可拆成獨立子任務並行 → blitz/sweep"
707
- legion: "有順序依賴或即時協調 → forge/hive"
708
- rules:
709
- - "✅ 判斷後一句話告知 用戶:選了什麼、為什麼"
710
- - "✅ 用戶 可強制指定陣型"
711
- - "❌ 不為看起來厲害而選大陣型"
712
-
713
- # ─── Dispatch 執行 ───
714
- execution:
715
- tool: ".formation/tools/dispatch.js"
716
- method: "Bash tool → node dispatch.js --dispatch-mode=subagent → 取回 promptText + agentParams → Agent tool 開 subagent"
717
- patterns:
718
- single: "一個任務 → node dispatch.js --task=TASK_XXX --dispatch-mode=subagent [--project-path ...] → Agent tool"
719
- sequential: "有依賴 → 前一個完成再 dispatch 下一個"
720
- cli:
721
- unit: "node {CORE}/.formation/tools/dispatch.js --skill=do --task=TASK_XXX --dispatch-mode=subagent [--project-path {PROJECT_PATH}]"
722
- solo: "node {CORE}/.formation/tools/dispatch.js --formation=solo --skill=strategy --task=TASK_XXX --dispatch-mode=subagent [--project-path {PROJECT_PATH}]"
723
- anti_pattern: "❌ 不手寫 subagent prompt — 用 dispatch.js 組裝(prompt 組裝、principles 注入)"
724
-
725
- # ─── Scope 安全 ───
726
- scope:
727
- principle: "併發安全由 Ansuz 保證,agent 不感知"
728
- rules:
729
- - "同檔案 → 一個實例處理整個檔案"
730
- - "跨檔案 → fan_out,按模組/目錄切"
731
- - "派工前確認 scope 無重疊"
732
-
733
- # ─── Claim 任務 ───
734
- pre_dispatch:
735
- - "node {CORE}/.collaboration/core/task-api.js [--project-path {PROJECT_PATH}] claim TASK_XXX"
736
- - "確認狀態已變為 active"
737
-
738
- cli_format: |
739
- 🚀 Dispatch
740
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
741
- TASK_XXX → unit/do(目標明確、單一 scope)
742
- TASK_YYY → unit/do(獨立任務、可並行)
743
-
744
- 並行: 2 個 headless 進程
745
- 監控: .formation/logs/unit/
746
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
747
- interaction:
748
- type: "ask"
749
- instruction: "輸出 cli_format 後,用 AskUserQuestion 問 用戶:「是否讓我開始分配任務?」"
750
- options:
751
- - "開始分配"
752
- - "等一下,我要調整"
753
- on_approve: "執行 Bash(run_in_background=true) dispatch"
754
- on_wait: "等 用戶 指示"
755
-
756
- # ─── 進度監控 ───
757
- monitoring:
758
- method: "讀 .formation/logs/{formation}/ 下的 log 確認結果"
759
- tools:
760
- log_reader: "node {CORE}/.formation/tools/log-reader.js --latest unit --tail 30"
761
- log_task: "node {CORE}/.formation/tools/log-reader.js --task TASK_XXX --tail 50"
762
- read_log: "Read tool + offset 讀 log 檔尾端"
763
- cli_format: |
764
- ⚙️ 任務執行中...
765
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
766
- | 任務 | 陣型 | 狀態 |
767
- |------|------|------|
768
- | TASK_XXX | unit/do | ⏳ 執行中 |
769
- | TASK_YYY | unit/do | ✅ 完成 |
770
-
771
- 進度: [{N}/{total}] ████████████░░░░░░░░
772
- 耗時: {elapsed}
773
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
774
- rules:
775
- - "❌ 禁止用 TaskOutput 讀取 headless 結果 — stdout 可能數萬行,會爆 context"
776
- - "✅ 用 log-reader.js 或 Read tool + offset"
777
-
778
- # ═══════════════════════════════════════
779
- # Phase 9: 結果驗證
780
- # ═══════════════════════════════════════
781
- phase_9_result_verification:
782
- goal: "驗證 agent 產出,確保符合任務要求"
783
- ddx_trigger:
784
- when: "agent 輸出不確定、或結果與預期不符時"
785
- how: "套用 differential_over_intuition protocol — 問「如果不是 agent 說的原因,還可能是什麼?」逐一排除"
786
- verify:
787
- - "檔案變更符合任務 scope_paths?"
788
- - "git commit 存在?(git log --oneline | grep TASK_XXX)"
789
- - "acceptance_criteria 全部滿足?"
790
- - "交叉比對原始碼 — 不盲信 agent 輸出"
791
- - "kenaz_lsp_callers — 分析變更的影響範圍(誰呼叫了被修改的函數?誰引用了被修改的模組?)"
792
- - "無引入 regression?(結合 kenaz_lsp_callers + 人工檢查影響範圍內的功能)"
793
- cognitive_checkpoint:
794
- rule: "驗證完成後,必須判斷是否有值得記錄的教訓(`kenaz learn add` 或 native memory 檔)。不可跳過此判斷"
795
- check: |
796
- 問自己:這次修復/實作有沒有值得記錄的知識?
797
- - 定位了 non-obvious 的 bug 根因? → 記錄(fix)
798
- - 發現隱藏的 side-effect 或使用限制? → 記錄(risk)
799
- - 做出了非顯然的設計決策? → 記錄(decision)
800
- - 以上都沒有 → 跳過,不為了寫而寫
801
- on_success:
802
- - "node {CORE}/.collaboration/core/task-api.js [--project-path {PROJECT_PATH}] complete TASK_XXX"
803
- - "→ 觸發 prevention_analysis(如符合條件)"
804
- - "→ 進入 Phase 10(Post-Complete)"
805
-
806
- # ─── 三級預防分析(修復完成後的前瞻性防護) ───
807
- prevention_analysis:
808
- description: "任務驗證通過後,分析預防措施 — 從救火員升級為系統守護者"
809
- principle: "修復當下問題只是最低標準。預防再發、早期偵測、減損復原才是完整閉環"
810
-
811
- # ─── 觸發條件(不是 always-on) ───
812
- trigger:
813
- any_of:
814
- - "任務 priority 為 P0 或 P1"
815
- - "同問題域第 2 次以上 FIX"
816
- - "任務 tags 含 fix 或 regression"
817
- - "scope_paths 涉及核心路徑(auth/payment/data/security 相關)"
818
- skip_when:
819
- - "P2/P3 的新功能開發(非 fix)"
820
- - "文件/設計類任務"
821
- - "單純的 typo/style 修復"
822
-
823
- # ─── 三級預防定義 ───
824
- levels:
825
- primary:
826
- goal: "防止再發 — 從根因層面加固"
827
- question: "這個 bug 的根因是什麼模式?如何從架構層防止同類問題?"
828
- actions:
829
- - "加單元測試覆蓋修復的 code path"
830
- - "重構脆弱代碼(如有 code smell)"
831
- - "更新 .failure/ 條目(經驗沉澱)"
832
- output: "建議 + backlog 任務卡(如需要)"
833
- secondary:
834
- goal: "早期偵測 — 縮短故障發現時間"
835
- question: "下次這個問題再發生,如何在秒級內發現而非等用戶回報?"
836
- actions:
837
- - "加 log/metric 在關鍵路徑"
838
- - "加告警規則(閾值 + 頻率)"
839
- - "加健康檢查端點"
840
- output: "建議 + backlog 任務卡(如需要)"
841
- tertiary:
842
- goal: "減損復原 — 提升系統韌性"
843
- question: "如果修復失敗或問題復發,系統能自動降級嗎?"
844
- actions:
845
- - "加 fallback 路徑(降級方案)"
846
- - "加回滾機制(可逆部署)"
847
- - "加斷路器(防止級聯故障)"
848
- output: "建議 + backlog 任務卡(如需要)"
849
-
850
- # ─── 觸發等級對應 ───
851
- trigger_level_map:
852
- P0_P1: "一級 + 二級 + 三級(完整分析)"
853
- repeat_fix: "一級 + 二級(強制,loop_guard 已觸發代表根因沒治好)"
854
- core_path: "二級 + 三級(核心功能需要偵測和韌性)"
855
- P2_fix: "僅一級(建議性,不強制)"
856
-
857
- # ─── 產出(不是散文,是可追蹤的實體) ───
858
- output:
859
- failure_entry:
860
- action: "檢查 .failure/ 是否已有相關條目 → 有則更新 prevention 欄位,無則新增"
861
- fields:
862
- prevention_primary: "建議的架構加固"
863
- prevention_secondary: "建議的監控點"
864
- prevention_tertiary: "建議的容錯機制"
865
- backlog_tasks:
866
- action: "為非 trivial 的預防建議建立 P3 backlog 任務卡 — 用戶決定何時做"
867
- tags: ["prevention"]
868
- rule: "預防任務是建議性的,不自動 dispatch — 用戶決定優先級"
869
-
870
- cli_format: |
871
- 🛡️ 預防建議
872
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
873
- 一級(防止再發): {建議} {→ TASK_ID 如已建立}
874
- 二級(早期偵測): {建議} {→ TASK_ID 如已建立}
875
- 三級(減損復原): {建議} {→ TASK_ID 如已建立}
876
- 📝 .failure/: {新增|更新} {FAIL-ID}
877
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
878
-
879
- on_failure:
880
- analysis:
881
- - "讀 log 找失敗根因"
882
- - "判斷:可重試 | 需補 context | 需建 FIX 任務 | 需換策略 | 需升級給 用戶"
883
- actions:
884
- retry: "重派同任務 — 補充失敗原因和缺失 context"
885
- create_fix_and_dispatch: |
886
- 當原任務「部分完成但有缺失」時(如 TASK_12 只做了一半),建立 FIX 任務並立即 dispatch:
887
- 1. 用 task-api.js create 建立 [FIX] 任務(tags: fix,verification)
888
- 2. 用 task-api.js complete 標記原任務為已完成(因為部分成果要保留)
889
- 3. 執行 post-complete.js 完成原任務的 archive + git 流程
890
- 4. ⚠️ 立即回到 Phase 8 dispatch FIX 任務 — 不可停在這裡
891
- 流程: Phase 9 失敗 → 建 FIX → complete 原任務 → post-complete → Phase 8(FIX) → Phase 9(FIX) → ...
892
- change_strategy: "換陣型(如 unit → solo 增加分析深度)"
893
- escalate: "升級給 用戶 — 附上已嘗試的方法和失敗原因"
894
- block: "node {CORE}/.collaboration/core/task-api.js [--project-path {PROJECT_PATH}] move TASK_XXX blocked"
895
- selection_guide:
896
- retry: "agent 沒做完但任務定義正確 — 重派同一個 TASK_XXX"
897
- create_fix_and_dispatch: "agent 做了部分,但缺漏太多需要新任務補齊 — 建 [FIX] TASK + 自動 dispatch"
898
- change_strategy: "同一策略試了 2 次仍失敗 — 換陣型或換 skill"
899
- escalate: "技術瓶頸或需要用戶決策 — 停下來問用戶"
900
- block: "外部依賴未滿足 — 標記 blocked 等待"
901
- critical_rule: |
902
- ⚠️ 建完 FIX 任務後「必須」立即 dispatch,不可停在 backlog。
903
- 這是閉環原則 — Ansuz 走到底,不留半成品給用戶手動處理。
904
- 流程是一個迴圈:Phase 9 → 建 FIX → Phase 8(FIX) → dispatch → Phase 9(FIX) → ...
905
-
906
- # ─── Socratic Loop Guard(蘇格拉底迴圈守衛) ───
907
- loop_guard:
908
- description: "追蹤同一需求域的 FIX 次數,觸發 challenge_over_confirm.loop_detection"
909
- counter: "同一 source/feature_id 的 FIX 任務累計次數"
910
- threshold: 2
911
- rule: |
912
- FIX count >= 2 → 強制觸發 Socratic Thinking(loop_detection)
913
- 不可繼續用相同策略重派 — 必須先質疑原始假設
914
- action: |
915
- 1. 暫停 dispatch
916
- 2. 輸出 🤔🤔 cli_format
917
- 3. 列出原始假設 + 至少 1 個替代假設
918
- 4. 用 verified 證據重新選擇 → 可能需要完全換方向
919
- 5. 如果仍無法判斷 → escalate 給用戶
920
- cli_format: |
921
- 🤔🤔
922
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
923
- 觸發: loop_detection
924
- 同問題域已嘗試 {N} 次修復
925
- 原始假設: {最初的診斷}
926
- 自問: 如果這個假設根本就是錯的,還有什麼可能?
927
- 替代假設:
928
- H1: {替代假設 1}
929
- H2: {替代假設 2}
930
- 結論: {經挑戰後的決定}
931
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
932
-
933
- cli_format:
934
- success: |
935
- ✅ TASK_XXX 驗證通過
936
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
937
- 變更: {檔案清單}
938
- Commit: {commit hash}
939
- 驗收: {N}/{N} 通過
940
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
941
- failure: |
942
- ❌ TASK_XXX 驗證失敗
943
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
944
- 已完成:
945
- ✓ {已通過的驗收標準 1}
946
- ✓ {已通過的驗收標準 2}
947
- ✗ {未通過的驗收標準}
948
-
949
- 根因: {分析結果}
950
- 行動: {重派/建FIX並dispatch/換策略/升級}
951
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
952
- fix_created: |
953
- 🔄 FIX 閉環啟動
954
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
955
- 原任務: TASK_XXX → 已完成(部分成果保留)
956
- FIX 任務: TASK_YYY → 立即 dispatch
957
- 缺失: {未通過的驗收標準}
958
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
959
-
960
- # ═══════════════════════════════════════
961
- # Phase 10: Post-Complete
962
- # ═══════════════════════════════════════
963
- phase_10_post_complete:
964
- goal: "任務完成後的 archive + git 流程"
965
- tool: ".formation/tools/post-complete.js"
966
- actions:
967
- archive:
968
- command: "node {CORE}/.formation/tools/post-complete.js --task=TASK_XXX [--project-path={PROJECT_PATH}]"
969
- behavior: "舊任務 → archived/(保留最新 10 個)"
970
- git:
971
- - "建立 task/task_xxx 分支(在 PROJECT_PATH 的 repo 內)"
972
- - "stage + commit 所有變更"
973
- - "merge 到用戶當前分支"
974
- - "❌ 不自動 merge 到 main — 用戶 確認後手動操作"
975
- progress:
976
- - "更新 dev/pipeline/PROGRESS.md — Last Update + Statistics + Recent Activity(僅 Core 專案)"
977
- cli_format: |
978
- 📦 Post-Complete
979
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
980
- ✓ Archive: {N} 個舊任務已封存
981
- ✓ Git: task/task_xxx → {user_branch}
982
- ✓ PROGRESS.md 已更新
983
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
984
-
985
- # ═══════════════════════════════════════
986
- # Phase 11: 回報
987
- # ═══════════════════════════════════════
988
- phase_11_report:
989
- goal: "向 用戶 匯報最終結果"
990
-
991
- # ─── 成功回報 ───
992
- success_format: |
993
- ✅ TASK_XXX 完成
994
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
995
- 陣型: {formation}/{skill}
996
- 結果: {一句話摘要}
997
- 變更: {檔案清單}
998
-
999
- ⏱️ 時間:
1000
- - 人類預估: {estimated_hours}h
1001
- - Agent 實際: ~{actual_minutes} min
1002
- - 效率提升: ~{ratio}x
1003
- - 團隊耗時: {elapsed_time}
1004
-
1005
- 📦 Archive: {N} 個舊任務已封存
1006
- 🔀 Git: task/task_xxx → {user_branch}
1007
-
1008
- {如有預防分析,附加 🛡️ 預防建議區塊}
1009
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1010
-
1011
- # ─── 失敗回報 ───
1012
- failure_format: |
1013
- ❌ TASK_XXX 阻塞
1014
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1015
- 陣型: {formation}/{skill}
1016
- 原因: {失敗原因}
1017
-
1018
- 已完成:
1019
- ✓ {已完成的步驟}
1020
- ✗ {失敗的步驟}
1021
-
1022
- 建議:
1023
- - {下一步行動}
1024
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1025
-
1026
- # ─── 批量完成回報 ───
1027
- batch_format: |
1028
- ✅ {N} 個任務完成
1029
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1030
- | ID | 標題 | 陣型 | 狀態 |
1031
- |----|------|------|------|
1032
- | TASK_XXX | ... | unit/do | ✅ |
1033
- | TASK_YYY | ... | unit/do | ✅ |
1034
-
1035
- ⏱️ 時間:
1036
- - 人類預估: {total_hours}h
1037
- - Agent 實際: ~{total_minutes} min
1038
- - 效率提升: ~{ratio}x
1039
- - 團隊耗時: {elapsed_time}
1040
-
1041
- 📦 Archive: {N} 個舊任務已封存
1042
- 🔀 Git: task/task_xxx → {user_branch}
1043
-
1044
- {如有預防分析,附加 🛡️ 預防建議區塊}
1045
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1046
- 下一步: {建議行動 | 「所有任務已完成」}
1047
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1048
- interaction:
1049
- type: "ask"
1050
- instruction: "輸出結果後,用 AskUserQuestion 問 用戶:「接下來要做什麼?」"
1051
- options:
1052
- - "繼續下一個需求"
1053
- - "結束,沒有其他事了"
1054
- - "我有新的需求要提"
1055
-
1056
- # ═══════════════════════════════════════
1057
- # QA Issue Intake(接收 QA 缺陷報告)
1058
- # ═══════════════════════════════════════
1059
- qa_issue_intake:
1060
- description: "接收 QA Agent 缺陷報告,自動建立修復任務"
1061
- input: "dev/qa/QA_ISSUES_<YYYYMMDD_HHmmss>.md"
1062
- priority_mapping:
1063
- critical: "P0 — 系統無法運作、安全漏洞、數據損壞"
1064
- major: "P1 — 核心功能異常、嚴重影響體驗"
1065
- minor: "P2 — 輕微 Bug、不影響核心功能"
1066
- trivial: "P3 — 文字錯誤、樣式瑕疵"
1067
- agent_mapping:
1068
- backend_bug: "backend — API 錯誤、資料庫問題、安全漏洞"
1069
- frontend_bug: "frontend — UI 異常、組件錯誤、樣式問題"
1070
- fullstack_bug: "拆分為獨立的 frontend + backend 任務"
1071
- flow:
1072
- - "讀取 QA Issue Report"
1073
- - "為每個缺陷建立修復任務(Phase 4-7)"
1074
- - "根據嚴重程度映射 priority"
1075
- - "根據缺陷性質分配 role"
1076
- - "acceptance_criteria 必含:缺陷已修復 + 回歸測試通過"
1077
-
1078
- # ═══════════════════════════════════════
1079
- # 優先級定義
1080
- # ═══════════════════════════════════════
1081
- priority:
1082
- P0: "阻塞性問題 — 必須立即處理(中斷當前工作)"
1083
- P1: "核心功能 — 高優先級(當前迭代必須完成)"
1084
- P2: "重要功能 — 中優先級(排入 backlog)"
1085
- P3: "Nice-to-have — 低優先級(有空再做)"
1086
-
1087
- # ═══════════════════════════════════════
1088
- # Feature ID 制度
1089
- # ═══════════════════════════════════════
1090
- feature_id:
1091
- format: "F-XXX(三位數字,001~999)"
1092
- sub_format: "F-XXX.Y(子功能)"
1093
- lookup: "dev/PRODUCT_SPEC.md — Feature ID Index"
1094
- source_rules:
1095
- feature: "source: 'F-001' — 對應 PRODUCT_SPEC 功能"
1096
- bug: "source: 'Bug Report #XXX' — 臨時需求或 Bug"
1097
- qa: "source: 'QA Issue Report: QA_ISSUES_<timestamp>.md'"
1098
- multi: "feature_ids: ['F-001', 'F-002'] — 跨功能任務"
1099
-
1100
- # ═══════════════════════════════════════
1101
- # 與 .failure/ 系統整合
1102
- # ═══════════════════════════════════════
1103
- failure_integration:
1104
- when: "Phase 0 初始化 + Phase 2 背景調研 + Phase 9 結果驗證失敗時 + Phase 9 預防分析時"
1105
- check: "讀 .failure/INDEX.yaml — 搜尋相關失敗模式"
1106
- learn: "新失敗發生時 → 記錄到 .failure/ 避免重複"
1107
- prevention_feedback: |
1108
- Phase 9 prevention_analysis 完成後:
1109
- 1. 檢查 .failure/ 是否已有相關條目(按 category + scope 匹配)
1110
- 2. 有 → 更新條目的 prevention 欄位(primary/secondary/tertiary)
1111
- 3. 無 → 新增條目(含根因 + 三級預防建議)
1112
- 4. 預防建議中的非 trivial 項目 → 建立 P3 backlog 任務卡(tags: prevention)
1113
-
1114
- # ═══════════════════════════════════════
1115
- # 效率規則
1116
- # ═══════════════════════════════════════
1117
- efficiency:
1118
- do:
1119
- - "✅ 輕量工作自己做(Glob/Grep/Read/單檔 Edit)"
1120
- - "✅ 一個 message 能發多少 Bash(background) 就發多少"
1121
- - "✅ 結果到了立即處理 — 不等齊再動"
1122
- - "✅ 小任務不拆 — 一個 dispatch 做完"
1123
- - "✅ Phase 1-6 可壓縮 — 簡單需求快速走完"
1124
- dont:
1125
- - "❌ 不為開 agent 而開 agent"
1126
- - "❌ 不重複 agent 已在做的工作"
1127
- - "❌ 不用 Task tool subagent 繞過 Formation"
1128
-
1129
- # ═══════════════════════════════════════
1130
- # ⚠️ Task-First 原則(強制)
1131
- # ═══════════════════════════════════════
1132
- task_first:
1133
- rule: |
1134
- Ansuz 的預設行為是「先建立任務,再 dispatch」。
1135
- 除非任務極其簡單(見 direct_execution_threshold),否則一律先走 Phase 1-7 建立任務卡。
1136
- direct_execution_threshold:
1137
- description: "只有滿足以下「全部」條件時,才可跳過任務建立直接執行"
1138
- conditions:
1139
- - "單一檔案修改(scope 只有 1 個檔案)"
1140
- - "改動範圍小於 20 行"
1141
- - "無需拆解(不涉及多模組/多語言)"
1142
- - "無依賴(不需要先完成其他工作)"
1143
- - "用戶意圖明確無歧義(如「把按鈕顏色改成紅色」)"
1144
- examples_skip:
1145
- - "修正一個 typo"
1146
- - "調整一個 CSS 樣式值"
1147
- - "刪除一行 console.log"
1148
- examples_must_create_task:
1149
- - "新增功能(即使看起來簡單)"
1150
- - "修改 2 個以上檔案"
1151
- - "涉及 Rust + TypeScript 跨語言"
1152
- - "需要新增 API endpoint"
1153
- - "用戶說「幫我做 XXX」但範圍不明確"
1154
- enforcement: |
1155
- ❌ 不可因為「看起來不複雜」就跳過任務建立
1156
- ✅ 有疑慮時,一律建立任務(寧可多建不可漏建)
1157
- ✅ 建立任務的成本極低(task-api.js create),但跳過的風險高(無追蹤、無 scope 約束、無驗收標準)
1158
-
1159
- # ═══════════════════════════════════════
1160
- # 範例:完整生命週期
1161
- # ═══════════════════════════════════════
1162
- examples:
1163
- # ─── 範例 1:新功能需求 ───
1164
- new_feature:
1165
- input: "我想在 Dashboard 加入暗黑模式"
1166
- flow:
1167
- phase_1: |
1168
- 📋 需求理解
1169
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1170
- 需求摘要: Dashboard 新增暗黑模式切換功能
1171
- 需求類型: 新功能
1172
- 核心目標: 用戶可在亮色/暗色主題間切換
1173
- 優先級: P2
1174
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1175
- phase_3: |
1176
- 📐 任務設計
1177
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1178
- 共拆解為 2 個任務:
1179
-
1180
- | # | 標題 | Agent | Priority | Hours |
1181
- |---|------|-------|----------|-------|
1182
- | 1 | 建立主題系統(CSS Variables + Context) | frontend | P2 | 4h |
1183
- | 2 | 新增主題切換 UI(Settings 頁面) | frontend | P2 | 2h |
1184
-
1185
- 依賴: TASK_2 → TASK_1
1186
- 陣型: unit × 2(序列 dispatch)
1187
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1188
- phase_6: "用戶批准 → Phase 7 建立任務 → Phase 8 dispatch"
1189
- phase_11: |
1190
- ✅ 2 個任務完成
1191
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1192
- | ID | 標題 | 陣型 | 狀態 |
1193
- |----|------|------|------|
1194
- | TASK_248 | 建立主題系統 | unit/do | ✅ |
1195
- | TASK_249 | 新增主題切換 UI | unit/do | ✅ |
1196
-
1197
- ⏱️ 人類預估: 6h | Agent 實際: ~8 min | 效率: ~45x
1198
- 🔀 Git: task/task_248 → main
1199
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1200
-
1201
- # ─── 範例 2:簡單 Bug 修復(壓縮流程)───
1202
- simple_bug:
1203
- input: "Sidebar 在手機上超出螢幕"
1204
- flow: |
1205
- # Phase 1-6 壓縮為快速確認
1206
- 📋 需求: 修復 Sidebar 手機端溢出
1207
- 📐 任務: TASK_250(frontend, P1, 1h, unit/do)
1208
- ✅ 用戶 批准
1209
-
1210
- # Phase 7-11 正常執行
1211
- 🚀 Dispatch → unit/do
1212
- ✅ 驗證通過 → post-complete → 回報
1213
-
1214
- # ─── 範例 3:QA 缺陷批次處理 ───
1215
- qa_batch:
1216
- input: "QA 報告了 3 個 Bug(dev/qa/QA_ISSUES_20260222.md)"
1217
- flow: |
1218
- # 讀取 QA Report → 建立 3 個修復任務
1219
- | # | 缺陷 | 嚴重度 | Priority | Agent |
1220
- |---|------|--------|----------|-------|
1221
- | 1 | API 500 錯誤 | Critical | P0 | backend |
1222
- | 2 | 表單驗證失效 | Major | P1 | frontend |
1223
- | 3 | 文字截斷 | Minor | P2 | frontend |
1224
-
1225
- # P0 優先 dispatch → P1 並行 → P2 排隊