agileflow 3.4.3 → 4.0.0-alpha.2

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 (762) hide show
  1. package/CHANGELOG.md +238 -473
  2. package/README.md +22 -114
  3. package/bin/agileflow.js +15 -0
  4. package/bin/hooks/pre-bash.js +35 -0
  5. package/bin/hooks/pre-compact.js +34 -0
  6. package/bin/hooks/pre-edit.js +32 -0
  7. package/bin/hooks/pre-write.js +32 -0
  8. package/bin/hooks/session-start.js +42 -0
  9. package/bin/hooks/stop.js +34 -0
  10. package/content/plugins/ads/plugin.yaml +14 -0
  11. package/content/plugins/audit/plugin.yaml +14 -0
  12. package/content/plugins/core/hooks/babysit-mentor-injector.js +55 -0
  13. package/content/plugins/core/hooks/context-loader.js +169 -0
  14. package/content/plugins/core/hooks/damage-control-bash.js +78 -0
  15. package/content/plugins/core/hooks/damage-control-edit.js +76 -0
  16. package/content/plugins/core/hooks/damage-control-patterns.yaml +100 -0
  17. package/content/plugins/core/hooks/damage-control-write.js +72 -0
  18. package/content/plugins/core/hooks/pre-compact-state.js +90 -0
  19. package/content/plugins/core/hooks/session-welcome.js +19 -0
  20. package/content/plugins/core/plugin.yaml +82 -0
  21. package/content/plugins/core/skills/agileflow-adr/SKILL.md +179 -0
  22. package/content/plugins/core/skills/agileflow-babysit-mentor/SKILL.md +144 -0
  23. package/content/plugins/core/skills/agileflow-epic-planner/SKILL.md +179 -0
  24. package/content/plugins/core/skills/agileflow-status-updater/SKILL.md +132 -0
  25. package/content/plugins/core/skills/agileflow-story-writer/SKILL.md +200 -0
  26. package/content/plugins/council/plugin.yaml +14 -0
  27. package/content/plugins/seo/plugin.yaml +14 -0
  28. package/package.json +29 -49
  29. package/src/cli/commands/doctor.js +159 -0
  30. package/src/cli/commands/hook.js +80 -0
  31. package/src/cli/commands/setup.js +292 -0
  32. package/src/cli/commands/status.js +47 -0
  33. package/src/cli/commands/update.js +83 -0
  34. package/src/cli/index.js +73 -0
  35. package/src/cli/wizard/behaviors-picker.js +108 -0
  36. package/src/cli/wizard/ide-picker.js +57 -0
  37. package/src/cli/wizard/personalization.js +64 -0
  38. package/src/cli/wizard/plugin-picker.js +106 -0
  39. package/src/lib/hash.js +41 -0
  40. package/src/runtime/config/defaults.js +61 -0
  41. package/src/runtime/config/loader.js +117 -0
  42. package/src/runtime/config/schema.json +99 -0
  43. package/src/runtime/config/writer.js +55 -0
  44. package/src/runtime/hooks/aggregator.js +157 -0
  45. package/src/runtime/hooks/chain.js +93 -0
  46. package/src/runtime/hooks/logger.js +68 -0
  47. package/src/runtime/hooks/manifest-loader.js +228 -0
  48. package/src/runtime/hooks/orchestrator.js +322 -0
  49. package/src/runtime/ide/capabilities.js +111 -0
  50. package/src/runtime/ide/claude-code-settings.js +234 -0
  51. package/src/runtime/ide/claude-code-skills.js +202 -0
  52. package/src/runtime/installer/file-index.js +112 -0
  53. package/src/runtime/installer/install.js +329 -0
  54. package/src/runtime/installer/stash.js +61 -0
  55. package/src/runtime/installer/sync-engine.js +205 -0
  56. package/src/runtime/plugins/registry.js +132 -0
  57. package/src/runtime/plugins/resolver.js +138 -0
  58. package/src/runtime/plugins/validator.js +196 -0
  59. package/src/runtime/skills/validator.js +335 -0
  60. package/lib/README.md +0 -178
  61. package/lib/api-routes.js +0 -625
  62. package/lib/api-server.js +0 -278
  63. package/lib/cache-provider.js +0 -155
  64. package/lib/codebase-indexer.js +0 -819
  65. package/lib/colors.generated.js +0 -117
  66. package/lib/colors.js +0 -341
  67. package/lib/consent.js +0 -232
  68. package/lib/content-sanitizer.js +0 -464
  69. package/lib/correlation.js +0 -277
  70. package/lib/drivers/claude-driver.ts +0 -312
  71. package/lib/drivers/codex-driver.ts +0 -464
  72. package/lib/drivers/driver-manager.ts +0 -159
  73. package/lib/drivers/gemini-driver.ts +0 -498
  74. package/lib/drivers/index.ts +0 -17
  75. package/lib/error-codes.js +0 -590
  76. package/lib/errors.js +0 -670
  77. package/lib/feature-flags.js +0 -171
  78. package/lib/feedback.js +0 -595
  79. package/lib/file-cache.js +0 -541
  80. package/lib/flag-detection.js +0 -344
  81. package/lib/format-error.js +0 -156
  82. package/lib/gate-runner.js +0 -282
  83. package/lib/generator-factory.js +0 -333
  84. package/lib/git-operations.js +0 -266
  85. package/lib/lazy-require.js +0 -59
  86. package/lib/lock-file.js +0 -144
  87. package/lib/logger.js +0 -106
  88. package/lib/merge-operations.js +0 -1006
  89. package/lib/path-resolver.js +0 -544
  90. package/lib/path-utils.js +0 -49
  91. package/lib/paths.js +0 -291
  92. package/lib/placeholder-registry.js +0 -822
  93. package/lib/process-executor.js +0 -214
  94. package/lib/progress.js +0 -334
  95. package/lib/protocol/driver.ts +0 -354
  96. package/lib/protocol/index.ts +0 -12
  97. package/lib/protocol/ir.ts +0 -271
  98. package/lib/registry-cache.js +0 -80
  99. package/lib/registry-di.js +0 -358
  100. package/lib/result-schema.js +0 -363
  101. package/lib/result.js +0 -210
  102. package/lib/session-display.js +0 -331
  103. package/lib/session-operations.js +0 -611
  104. package/lib/session-registry.js +0 -484
  105. package/lib/session-state-machine.js +0 -465
  106. package/lib/session-switching.js +0 -191
  107. package/lib/skill-loader.js +0 -213
  108. package/lib/smart-json-file.js +0 -682
  109. package/lib/state-machine.js +0 -286
  110. package/lib/table-formatter.js +0 -519
  111. package/lib/template-loader.js +0 -143
  112. package/lib/transient-status.js +0 -374
  113. package/lib/ui-manager.js +0 -612
  114. package/lib/validate-args.js +0 -213
  115. package/lib/validate-commands.js +0 -308
  116. package/lib/validate-names.js +0 -143
  117. package/lib/validate-paths.js +0 -434
  118. package/lib/validate.js +0 -134
  119. package/lib/worktree-operations.js +0 -201
  120. package/lib/yaml-utils.js +0 -164
  121. package/scripts/README.md +0 -267
  122. package/scripts/af +0 -34
  123. package/scripts/agent-loop.js +0 -879
  124. package/scripts/agileflow-configure.js +0 -368
  125. package/scripts/agileflow-statusline.sh +0 -857
  126. package/scripts/agileflow-welcome.js +0 -2246
  127. package/scripts/api-server-runner.js +0 -177
  128. package/scripts/archive-completed-stories.sh +0 -308
  129. package/scripts/auto-self-improve.js +0 -326
  130. package/scripts/automation-run-due.js +0 -128
  131. package/scripts/babysit-clear-restore.js +0 -154
  132. package/scripts/babysit-context-restore.js +0 -89
  133. package/scripts/backfill-ideation-status.js +0 -128
  134. package/scripts/batch-pmap-loop.js +0 -551
  135. package/scripts/check-sessions.js +0 -116
  136. package/scripts/check-update.js +0 -282
  137. package/scripts/ci-summary.js +0 -294
  138. package/scripts/claude-smart.sh +0 -85
  139. package/scripts/claude-tmux.sh +0 -737
  140. package/scripts/claude-watchdog.sh +0 -225
  141. package/scripts/clear-active-command.js +0 -48
  142. package/scripts/compress-status.sh +0 -116
  143. package/scripts/context-loader.js +0 -310
  144. package/scripts/damage-control/bash-tool-damage-control.js +0 -22
  145. package/scripts/damage-control/edit-tool-damage-control.js +0 -19
  146. package/scripts/damage-control/patterns.yaml +0 -227
  147. package/scripts/damage-control/write-tool-damage-control.js +0 -19
  148. package/scripts/damage-control-bash.js +0 -51
  149. package/scripts/damage-control-edit.js +0 -48
  150. package/scripts/damage-control-multi-agent.js +0 -231
  151. package/scripts/damage-control-write.js +0 -48
  152. package/scripts/dependency-check.js +0 -311
  153. package/scripts/document-repl.js +0 -793
  154. package/scripts/expertise-metrics.sh +0 -264
  155. package/scripts/generate-all.sh +0 -77
  156. package/scripts/generate-colors.js +0 -314
  157. package/scripts/generators/agent-registry.js +0 -183
  158. package/scripts/generators/command-registry.js +0 -166
  159. package/scripts/generators/index.js +0 -85
  160. package/scripts/generators/inject-babysit.js +0 -191
  161. package/scripts/generators/inject-help.js +0 -125
  162. package/scripts/generators/inject-readme.js +0 -166
  163. package/scripts/generators/skill-registry.js +0 -188
  164. package/scripts/get-env.js +0 -225
  165. package/scripts/init.sh +0 -76
  166. package/scripts/lib/README-portable-tasks.md +0 -424
  167. package/scripts/lib/ac-test-matcher.js +0 -452
  168. package/scripts/lib/audit-cleanup.js +0 -250
  169. package/scripts/lib/audit-registry.js +0 -340
  170. package/scripts/lib/automation-registry.js +0 -544
  171. package/scripts/lib/automation-runner.js +0 -476
  172. package/scripts/lib/browser-qa-evidence.js +0 -409
  173. package/scripts/lib/browser-qa-status.js +0 -192
  174. package/scripts/lib/bus-utils.js +0 -473
  175. package/scripts/lib/colors.generated.sh +0 -82
  176. package/scripts/lib/colors.sh +0 -46
  177. package/scripts/lib/command-prereqs.js +0 -280
  178. package/scripts/lib/concurrency-limiter.js +0 -511
  179. package/scripts/lib/configure-detect.js +0 -596
  180. package/scripts/lib/configure-features.js +0 -1927
  181. package/scripts/lib/configure-repair.js +0 -327
  182. package/scripts/lib/configure-utils.js +0 -114
  183. package/scripts/lib/context-formatter.js +0 -1158
  184. package/scripts/lib/context-loader.js +0 -840
  185. package/scripts/lib/counter.js +0 -103
  186. package/scripts/lib/damage-control-utils.js +0 -619
  187. package/scripts/lib/feature-catalog.js +0 -332
  188. package/scripts/lib/file-lock.js +0 -392
  189. package/scripts/lib/file-tracking.js +0 -735
  190. package/scripts/lib/frontmatter-parser.js +0 -133
  191. package/scripts/lib/gate-enforcer.js +0 -295
  192. package/scripts/lib/hook-metrics.js +0 -324
  193. package/scripts/lib/ideation-index.js +0 -1205
  194. package/scripts/lib/json-utils.sh +0 -162
  195. package/scripts/lib/lifecycle-detector.js +0 -125
  196. package/scripts/lib/model-profiles.js +0 -118
  197. package/scripts/lib/portable-tasks-cli.js +0 -274
  198. package/scripts/lib/portable-tasks.js +0 -479
  199. package/scripts/lib/process-cleanup.js +0 -527
  200. package/scripts/lib/quality-gates.js +0 -788
  201. package/scripts/lib/scale-detector.js +0 -396
  202. package/scripts/lib/sessionRegistry.js +0 -678
  203. package/scripts/lib/signal-detectors.js +0 -867
  204. package/scripts/lib/skill-catalog.js +0 -557
  205. package/scripts/lib/skill-recommender.js +0 -311
  206. package/scripts/lib/state-migrator.js +0 -353
  207. package/scripts/lib/status-task-bridge.js +0 -522
  208. package/scripts/lib/status-writer.js +0 -255
  209. package/scripts/lib/story-claiming.js +0 -704
  210. package/scripts/lib/story-state-machine.js +0 -437
  211. package/scripts/lib/sync-ideation-status.js +0 -291
  212. package/scripts/lib/task-registry-cache.js +0 -490
  213. package/scripts/lib/task-registry.js +0 -1191
  214. package/scripts/lib/task-sync.js +0 -230
  215. package/scripts/lib/tdd-phase-manager.js +0 -455
  216. package/scripts/lib/team-events.js +0 -510
  217. package/scripts/lib/tmux-audit-monitor.js +0 -612
  218. package/scripts/lib/tmux-group-colors.js +0 -113
  219. package/scripts/lib/tool-registry.yaml +0 -241
  220. package/scripts/lib/tool-shed.js +0 -441
  221. package/scripts/lib/validation-registry.js +0 -177
  222. package/scripts/messaging-bridge.js +0 -561
  223. package/scripts/migrate-ideation-index.js +0 -553
  224. package/scripts/native-team-observer.js +0 -219
  225. package/scripts/obtain-context.js +0 -272
  226. package/scripts/pre-push-check.sh +0 -46
  227. package/scripts/precompact-context.sh +0 -306
  228. package/scripts/query-codebase.js +0 -543
  229. package/scripts/ralph-loop.js +0 -1278
  230. package/scripts/resume-session.sh +0 -121
  231. package/scripts/screenshot-verifier.js +0 -215
  232. package/scripts/session-boundary.js +0 -138
  233. package/scripts/session-coordinator.sh +0 -232
  234. package/scripts/session-manager.js +0 -546
  235. package/scripts/smart-detect.js +0 -449
  236. package/scripts/spawn-audit-sessions.js +0 -877
  237. package/scripts/spawn-parallel.js +0 -751
  238. package/scripts/strip-ai-attribution.js +0 -63
  239. package/scripts/task-completed-gate.js +0 -237
  240. package/scripts/team-manager.js +0 -596
  241. package/scripts/team-status-display.js +0 -200
  242. package/scripts/teammate-idle-gate.js +0 -237
  243. package/scripts/test-session-boundary.js +0 -80
  244. package/scripts/tmux-close-windows.sh +0 -180
  245. package/scripts/tmux-restore-window.sh +0 -67
  246. package/scripts/tmux-save-closed-window.sh +0 -35
  247. package/scripts/tui/App.js +0 -151
  248. package/scripts/tui/Dashboard.js +0 -277
  249. package/scripts/tui/blessed/data/watcher.js +0 -180
  250. package/scripts/tui/blessed/index.js +0 -244
  251. package/scripts/tui/blessed/panels/output.js +0 -101
  252. package/scripts/tui/blessed/panels/sessions.js +0 -150
  253. package/scripts/tui/blessed/panels/trace.js +0 -97
  254. package/scripts/tui/blessed/ui/help.js +0 -77
  255. package/scripts/tui/blessed/ui/screen.js +0 -52
  256. package/scripts/tui/blessed/ui/statusbar.js +0 -47
  257. package/scripts/tui/blessed/ui/tabbar.js +0 -99
  258. package/scripts/tui/index.js +0 -70
  259. package/scripts/tui/lib/crashRecovery.js +0 -304
  260. package/scripts/tui/lib/eventStream.js +0 -309
  261. package/scripts/tui/lib/keyboard.js +0 -261
  262. package/scripts/tui/lib/loopControl.js +0 -371
  263. package/scripts/tui/panels/OutputPanel.js +0 -240
  264. package/scripts/tui/panels/SessionPanel.js +0 -170
  265. package/scripts/tui/panels/TracePanel.js +0 -298
  266. package/scripts/tui/simple-tui.js +0 -510
  267. package/scripts/validate-expertise.sh +0 -263
  268. package/scripts/validate-tokens.sh +0 -73
  269. package/scripts/validators/README.md +0 -143
  270. package/scripts/validators/component-validator.js +0 -239
  271. package/scripts/validators/json-schema-validator.js +0 -186
  272. package/scripts/validators/markdown-validator.js +0 -152
  273. package/scripts/validators/migration-validator.js +0 -129
  274. package/scripts/validators/security-validator.js +0 -380
  275. package/scripts/validators/story-format-validator.js +0 -197
  276. package/scripts/validators/test-result-validator.js +0 -114
  277. package/scripts/validators/workflow-validator.js +0 -247
  278. package/scripts/welcome-deferred.js +0 -437
  279. package/scripts/worktree-create.sh +0 -111
  280. package/src/core/agents/a11y-analyzer-aria.md +0 -155
  281. package/src/core/agents/a11y-analyzer-forms.md +0 -162
  282. package/src/core/agents/a11y-analyzer-keyboard.md +0 -175
  283. package/src/core/agents/a11y-analyzer-semantic.md +0 -153
  284. package/src/core/agents/a11y-analyzer-visual.md +0 -158
  285. package/src/core/agents/a11y-consensus.md +0 -248
  286. package/src/core/agents/accessibility.md +0 -515
  287. package/src/core/agents/adr-writer.md +0 -463
  288. package/src/core/agents/ads-audit-budget.md +0 -181
  289. package/src/core/agents/ads-audit-compliance.md +0 -169
  290. package/src/core/agents/ads-audit-creative.md +0 -164
  291. package/src/core/agents/ads-audit-google.md +0 -226
  292. package/src/core/agents/ads-audit-meta.md +0 -183
  293. package/src/core/agents/ads-audit-tracking.md +0 -197
  294. package/src/core/agents/ads-consensus.md +0 -396
  295. package/src/core/agents/ads-generate.md +0 -145
  296. package/src/core/agents/ads-performance-tracker.md +0 -197
  297. package/src/core/agents/analytics.md +0 -617
  298. package/src/core/agents/api-quality-analyzer-conventions.md +0 -148
  299. package/src/core/agents/api-quality-analyzer-docs.md +0 -176
  300. package/src/core/agents/api-quality-analyzer-errors.md +0 -183
  301. package/src/core/agents/api-quality-analyzer-pagination.md +0 -171
  302. package/src/core/agents/api-quality-analyzer-versioning.md +0 -143
  303. package/src/core/agents/api-quality-consensus.md +0 -214
  304. package/src/core/agents/api-validator.md +0 -183
  305. package/src/core/agents/api.md +0 -665
  306. package/src/core/agents/arch-analyzer-circular.md +0 -148
  307. package/src/core/agents/arch-analyzer-complexity.md +0 -171
  308. package/src/core/agents/arch-analyzer-coupling.md +0 -146
  309. package/src/core/agents/arch-analyzer-layering.md +0 -151
  310. package/src/core/agents/arch-analyzer-patterns.md +0 -162
  311. package/src/core/agents/arch-consensus.md +0 -227
  312. package/src/core/agents/brainstorm-analyzer-features.md +0 -169
  313. package/src/core/agents/brainstorm-analyzer-growth.md +0 -161
  314. package/src/core/agents/brainstorm-analyzer-integration.md +0 -172
  315. package/src/core/agents/brainstorm-analyzer-market.md +0 -147
  316. package/src/core/agents/brainstorm-analyzer-ux.md +0 -167
  317. package/src/core/agents/brainstorm-consensus.md +0 -237
  318. package/src/core/agents/browser-qa.md +0 -328
  319. package/src/core/agents/ci.md +0 -511
  320. package/src/core/agents/code-reviewer.md +0 -288
  321. package/src/core/agents/codebase-query.md +0 -266
  322. package/src/core/agents/completeness-analyzer-api.md +0 -190
  323. package/src/core/agents/completeness-analyzer-conditional.md +0 -201
  324. package/src/core/agents/completeness-analyzer-handlers.md +0 -159
  325. package/src/core/agents/completeness-analyzer-imports.md +0 -159
  326. package/src/core/agents/completeness-analyzer-routes.md +0 -182
  327. package/src/core/agents/completeness-analyzer-state.md +0 -188
  328. package/src/core/agents/completeness-analyzer-stubs.md +0 -198
  329. package/src/core/agents/completeness-consensus.md +0 -286
  330. package/src/core/agents/compliance.md +0 -509
  331. package/src/core/agents/council-advocate.md +0 -206
  332. package/src/core/agents/council-analyst.md +0 -252
  333. package/src/core/agents/council-optimist.md +0 -170
  334. package/src/core/agents/database.md +0 -601
  335. package/src/core/agents/datamigration.md +0 -699
  336. package/src/core/agents/design.md +0 -525
  337. package/src/core/agents/devops.md +0 -720
  338. package/src/core/agents/documentation.md +0 -504
  339. package/src/core/agents/epic-planner.md +0 -480
  340. package/src/core/agents/error-analyzer.md +0 -201
  341. package/src/core/agents/integrations.md +0 -603
  342. package/src/core/agents/legal-analyzer-a11y.md +0 -110
  343. package/src/core/agents/legal-analyzer-ai.md +0 -117
  344. package/src/core/agents/legal-analyzer-consumer.md +0 -108
  345. package/src/core/agents/legal-analyzer-content.md +0 -113
  346. package/src/core/agents/legal-analyzer-international.md +0 -115
  347. package/src/core/agents/legal-analyzer-licensing.md +0 -115
  348. package/src/core/agents/legal-analyzer-privacy.md +0 -108
  349. package/src/core/agents/legal-analyzer-security.md +0 -112
  350. package/src/core/agents/legal-analyzer-terms.md +0 -111
  351. package/src/core/agents/legal-consensus.md +0 -242
  352. package/src/core/agents/logic-analyzer-edge.md +0 -170
  353. package/src/core/agents/logic-analyzer-flow.md +0 -253
  354. package/src/core/agents/logic-analyzer-invariant.md +0 -206
  355. package/src/core/agents/logic-analyzer-race.md +0 -266
  356. package/src/core/agents/logic-analyzer-type.md +0 -217
  357. package/src/core/agents/logic-consensus.md +0 -253
  358. package/src/core/agents/mentor.md +0 -654
  359. package/src/core/agents/mobile.md +0 -501
  360. package/src/core/agents/monitoring.md +0 -537
  361. package/src/core/agents/multi-expert.md +0 -311
  362. package/src/core/agents/orchestrator.md +0 -749
  363. package/src/core/agents/perf-analyzer-assets.md +0 -174
  364. package/src/core/agents/perf-analyzer-bundle.md +0 -165
  365. package/src/core/agents/perf-analyzer-caching.md +0 -160
  366. package/src/core/agents/perf-analyzer-compute.md +0 -165
  367. package/src/core/agents/perf-analyzer-memory.md +0 -182
  368. package/src/core/agents/perf-analyzer-network.md +0 -157
  369. package/src/core/agents/perf-analyzer-queries.md +0 -155
  370. package/src/core/agents/perf-analyzer-rendering.md +0 -156
  371. package/src/core/agents/perf-consensus.md +0 -280
  372. package/src/core/agents/performance.md +0 -492
  373. package/src/core/agents/product.md +0 -535
  374. package/src/core/agents/qa.md +0 -765
  375. package/src/core/agents/readme-updater.md +0 -579
  376. package/src/core/agents/refactor.md +0 -558
  377. package/src/core/agents/research.md +0 -453
  378. package/src/core/agents/rlm-subcore.md +0 -207
  379. package/src/core/agents/schema-validator.md +0 -454
  380. package/src/core/agents/security-analyzer-api.md +0 -199
  381. package/src/core/agents/security-analyzer-auth.md +0 -160
  382. package/src/core/agents/security-analyzer-authz.md +0 -168
  383. package/src/core/agents/security-analyzer-deps.md +0 -147
  384. package/src/core/agents/security-analyzer-infra.md +0 -176
  385. package/src/core/agents/security-analyzer-injection.md +0 -148
  386. package/src/core/agents/security-analyzer-input.md +0 -191
  387. package/src/core/agents/security-analyzer-secrets.md +0 -175
  388. package/src/core/agents/security-consensus.md +0 -276
  389. package/src/core/agents/security.md +0 -486
  390. package/src/core/agents/seo-analyzer-content.md +0 -167
  391. package/src/core/agents/seo-analyzer-images.md +0 -187
  392. package/src/core/agents/seo-analyzer-performance.md +0 -206
  393. package/src/core/agents/seo-analyzer-schema.md +0 -176
  394. package/src/core/agents/seo-analyzer-sitemap.md +0 -172
  395. package/src/core/agents/seo-analyzer-technical.md +0 -144
  396. package/src/core/agents/seo-consensus.md +0 -289
  397. package/src/core/agents/team-coordinator.md +0 -333
  398. package/src/core/agents/team-lead.md +0 -171
  399. package/src/core/agents/test-analyzer-assertions.md +0 -181
  400. package/src/core/agents/test-analyzer-coverage.md +0 -183
  401. package/src/core/agents/test-analyzer-fragility.md +0 -185
  402. package/src/core/agents/test-analyzer-integration.md +0 -155
  403. package/src/core/agents/test-analyzer-maintenance.md +0 -173
  404. package/src/core/agents/test-analyzer-mocking.md +0 -178
  405. package/src/core/agents/test-analyzer-patterns.md +0 -189
  406. package/src/core/agents/test-analyzer-structure.md +0 -177
  407. package/src/core/agents/test-consensus.md +0 -294
  408. package/src/core/agents/testing.md +0 -527
  409. package/src/core/agents/ui-validator.md +0 -331
  410. package/src/core/agents/ui.md +0 -1227
  411. package/src/core/commands/adr/list.md +0 -191
  412. package/src/core/commands/adr/update.md +0 -258
  413. package/src/core/commands/adr/view.md +0 -274
  414. package/src/core/commands/adr.md +0 -394
  415. package/src/core/commands/ads/audit.md +0 -453
  416. package/src/core/commands/ads/budget.md +0 -97
  417. package/src/core/commands/ads/competitor.md +0 -112
  418. package/src/core/commands/ads/creative.md +0 -85
  419. package/src/core/commands/ads/generate.md +0 -238
  420. package/src/core/commands/ads/google.md +0 -112
  421. package/src/core/commands/ads/health.md +0 -327
  422. package/src/core/commands/ads/landing.md +0 -119
  423. package/src/core/commands/ads/linkedin.md +0 -112
  424. package/src/core/commands/ads/meta.md +0 -91
  425. package/src/core/commands/ads/microsoft.md +0 -115
  426. package/src/core/commands/ads/plan.md +0 -321
  427. package/src/core/commands/ads/test-plan.md +0 -317
  428. package/src/core/commands/ads/tiktok.md +0 -129
  429. package/src/core/commands/ads/track.md +0 -288
  430. package/src/core/commands/ads/youtube.md +0 -124
  431. package/src/core/commands/ads.md +0 -140
  432. package/src/core/commands/agent.md +0 -256
  433. package/src/core/commands/api.md +0 -267
  434. package/src/core/commands/assign.md +0 -369
  435. package/src/core/commands/audit.md +0 -531
  436. package/src/core/commands/auto.md +0 -556
  437. package/src/core/commands/automate.md +0 -415
  438. package/src/core/commands/babysit.md +0 -643
  439. package/src/core/commands/baseline.md +0 -743
  440. package/src/core/commands/batch.md +0 -551
  441. package/src/core/commands/blockers.md +0 -602
  442. package/src/core/commands/board.md +0 -509
  443. package/src/core/commands/browser-qa.md +0 -240
  444. package/src/core/commands/changelog.md +0 -582
  445. package/src/core/commands/choose.md +0 -430
  446. package/src/core/commands/ci.md +0 -330
  447. package/src/core/commands/code/accessibility.md +0 -363
  448. package/src/core/commands/code/api.md +0 -313
  449. package/src/core/commands/code/architecture.md +0 -313
  450. package/src/core/commands/code/completeness.md +0 -519
  451. package/src/core/commands/code/legal.md +0 -509
  452. package/src/core/commands/code/logic.md +0 -432
  453. package/src/core/commands/code/performance.md +0 -506
  454. package/src/core/commands/code/security.md +0 -509
  455. package/src/core/commands/code/test.md +0 -505
  456. package/src/core/commands/compress.md +0 -408
  457. package/src/core/commands/configure.md +0 -1159
  458. package/src/core/commands/context/export.md +0 -296
  459. package/src/core/commands/context/full.md +0 -353
  460. package/src/core/commands/context/note.md +0 -380
  461. package/src/core/commands/council.md +0 -592
  462. package/src/core/commands/debt.md +0 -491
  463. package/src/core/commands/deploy.md +0 -864
  464. package/src/core/commands/deps.md +0 -728
  465. package/src/core/commands/diagnose.md +0 -404
  466. package/src/core/commands/docs.md +0 -469
  467. package/src/core/commands/epic/edit.md +0 -213
  468. package/src/core/commands/epic/list.md +0 -190
  469. package/src/core/commands/epic/view.md +0 -267
  470. package/src/core/commands/epic.md +0 -477
  471. package/src/core/commands/export.md +0 -238
  472. package/src/core/commands/feedback.md +0 -603
  473. package/src/core/commands/handoff.md +0 -386
  474. package/src/core/commands/help.md +0 -194
  475. package/src/core/commands/ideate/brief.md +0 -363
  476. package/src/core/commands/ideate/discover.md +0 -399
  477. package/src/core/commands/ideate/features.md +0 -497
  478. package/src/core/commands/ideate/history.md +0 -403
  479. package/src/core/commands/ideate/new.md +0 -900
  480. package/src/core/commands/impact.md +0 -407
  481. package/src/core/commands/install.md +0 -529
  482. package/src/core/commands/learn/explain.md +0 -118
  483. package/src/core/commands/learn/glossary.md +0 -135
  484. package/src/core/commands/learn/patterns.md +0 -138
  485. package/src/core/commands/learn/tour.md +0 -126
  486. package/src/core/commands/maintain.md +0 -558
  487. package/src/core/commands/metrics.md +0 -844
  488. package/src/core/commands/migrate/codemods.md +0 -151
  489. package/src/core/commands/migrate/plan.md +0 -131
  490. package/src/core/commands/migrate/scan.md +0 -114
  491. package/src/core/commands/migrate/validate.md +0 -119
  492. package/src/core/commands/multi-expert.md +0 -447
  493. package/src/core/commands/packages.md +0 -535
  494. package/src/core/commands/pr.md +0 -337
  495. package/src/core/commands/readme-sync.md +0 -329
  496. package/src/core/commands/research/analyze.md +0 -798
  497. package/src/core/commands/research/ask.md +0 -864
  498. package/src/core/commands/research/import.md +0 -1025
  499. package/src/core/commands/research/list.md +0 -273
  500. package/src/core/commands/research/synthesize.md +0 -928
  501. package/src/core/commands/research/view.md +0 -323
  502. package/src/core/commands/retro.md +0 -795
  503. package/src/core/commands/review.md +0 -694
  504. package/src/core/commands/rlm.md +0 -446
  505. package/src/core/commands/roadmap/analyze.md +0 -400
  506. package/src/core/commands/rpi.md +0 -633
  507. package/src/core/commands/seo/audit.md +0 -444
  508. package/src/core/commands/seo/competitor.md +0 -174
  509. package/src/core/commands/seo/content.md +0 -107
  510. package/src/core/commands/seo/geo.md +0 -229
  511. package/src/core/commands/seo/hreflang.md +0 -140
  512. package/src/core/commands/seo/images.md +0 -96
  513. package/src/core/commands/seo/page.md +0 -198
  514. package/src/core/commands/seo/plan.md +0 -163
  515. package/src/core/commands/seo/programmatic.md +0 -131
  516. package/src/core/commands/seo/references/cwv-thresholds.md +0 -64
  517. package/src/core/commands/seo/references/eeat-framework.md +0 -110
  518. package/src/core/commands/seo/references/quality-gates.md +0 -91
  519. package/src/core/commands/seo/references/schema-types.md +0 -102
  520. package/src/core/commands/seo/schema.md +0 -183
  521. package/src/core/commands/seo/sitemap.md +0 -97
  522. package/src/core/commands/seo/technical.md +0 -100
  523. package/src/core/commands/seo.md +0 -107
  524. package/src/core/commands/session/cleanup.md +0 -452
  525. package/src/core/commands/session/end.md +0 -865
  526. package/src/core/commands/session/history.md +0 -293
  527. package/src/core/commands/session/init.md +0 -210
  528. package/src/core/commands/session/new.md +0 -827
  529. package/src/core/commands/session/resume.md +0 -291
  530. package/src/core/commands/session/spawn.md +0 -205
  531. package/src/core/commands/session/status.md +0 -274
  532. package/src/core/commands/skill/list.md +0 -139
  533. package/src/core/commands/skill/recommend.md +0 -216
  534. package/src/core/commands/sprint.md +0 -714
  535. package/src/core/commands/status/undo.md +0 -191
  536. package/src/core/commands/status.md +0 -423
  537. package/src/core/commands/story/edit.md +0 -204
  538. package/src/core/commands/story/list.md +0 -199
  539. package/src/core/commands/story/view.md +0 -312
  540. package/src/core/commands/story-validate.md +0 -491
  541. package/src/core/commands/story.md +0 -465
  542. package/src/core/commands/tdd-next.md +0 -238
  543. package/src/core/commands/tdd.md +0 -211
  544. package/src/core/commands/team/guide.md +0 -688
  545. package/src/core/commands/team/list.md +0 -59
  546. package/src/core/commands/team/start.md +0 -130
  547. package/src/core/commands/team/status.md +0 -66
  548. package/src/core/commands/team/stop.md +0 -78
  549. package/src/core/commands/template.md +0 -644
  550. package/src/core/commands/tests.md +0 -731
  551. package/src/core/commands/update.md +0 -591
  552. package/src/core/commands/validate-expertise.md +0 -305
  553. package/src/core/commands/velocity.md +0 -630
  554. package/src/core/commands/verify.md +0 -534
  555. package/src/core/commands/whats-new.md +0 -201
  556. package/src/core/commands/workflow.md +0 -449
  557. package/src/core/council/sessions/.gitkeep +0 -0
  558. package/src/core/council/shared_reasoning.template.md +0 -106
  559. package/src/core/experts/README.md +0 -236
  560. package/src/core/experts/_core-expertise.yaml +0 -105
  561. package/src/core/experts/accessibility/expertise.yaml +0 -115
  562. package/src/core/experts/accessibility/question.md +0 -41
  563. package/src/core/experts/accessibility/self-improve.md +0 -45
  564. package/src/core/experts/accessibility/workflow.md +0 -59
  565. package/src/core/experts/adr-writer/expertise.yaml +0 -138
  566. package/src/core/experts/adr-writer/question.md +0 -56
  567. package/src/core/experts/adr-writer/self-improve.md +0 -106
  568. package/src/core/experts/adr-writer/workflow.md +0 -184
  569. package/src/core/experts/analytics/expertise.yaml +0 -119
  570. package/src/core/experts/analytics/question.md +0 -74
  571. package/src/core/experts/analytics/self-improve.md +0 -163
  572. package/src/core/experts/analytics/workflow.md +0 -272
  573. package/src/core/experts/api/expertise.yaml +0 -124
  574. package/src/core/experts/api/question.md +0 -74
  575. package/src/core/experts/api/self-improve.md +0 -122
  576. package/src/core/experts/api/workflow.md +0 -248
  577. package/src/core/experts/ci/expertise.yaml +0 -106
  578. package/src/core/experts/ci/question.md +0 -69
  579. package/src/core/experts/ci/self-improve.md +0 -100
  580. package/src/core/experts/ci/workflow.md +0 -145
  581. package/src/core/experts/codebase-query/expertise.yaml +0 -121
  582. package/src/core/experts/codebase-query/question.md +0 -73
  583. package/src/core/experts/codebase-query/self-improve.md +0 -105
  584. package/src/core/experts/compliance/expertise.yaml +0 -101
  585. package/src/core/experts/compliance/question.md +0 -56
  586. package/src/core/experts/compliance/self-improve.md +0 -106
  587. package/src/core/experts/compliance/workflow.md +0 -184
  588. package/src/core/experts/database/expertise.yaml +0 -109
  589. package/src/core/experts/database/question.md +0 -74
  590. package/src/core/experts/database/self-improve.md +0 -121
  591. package/src/core/experts/database/workflow.md +0 -234
  592. package/src/core/experts/datamigration/expertise.yaml +0 -141
  593. package/src/core/experts/datamigration/question.md +0 -56
  594. package/src/core/experts/datamigration/self-improve.md +0 -106
  595. package/src/core/experts/datamigration/workflow.md +0 -184
  596. package/src/core/experts/design/expertise.yaml +0 -116
  597. package/src/core/experts/design/question.md +0 -56
  598. package/src/core/experts/design/self-improve.md +0 -106
  599. package/src/core/experts/design/workflow.md +0 -184
  600. package/src/core/experts/devops/expertise.yaml +0 -116
  601. package/src/core/experts/devops/question.md +0 -68
  602. package/src/core/experts/devops/self-improve.md +0 -102
  603. package/src/core/experts/devops/workflow.md +0 -142
  604. package/src/core/experts/documentation/expertise.yaml +0 -126
  605. package/src/core/experts/documentation/question.md +0 -41
  606. package/src/core/experts/documentation/self-improve.md +0 -45
  607. package/src/core/experts/documentation/workflow.md +0 -55
  608. package/src/core/experts/epic-planner/expertise.yaml +0 -144
  609. package/src/core/experts/epic-planner/question.md +0 -56
  610. package/src/core/experts/epic-planner/self-improve.md +0 -106
  611. package/src/core/experts/epic-planner/workflow.md +0 -184
  612. package/src/core/experts/integrations/expertise.yaml +0 -113
  613. package/src/core/experts/integrations/question.md +0 -74
  614. package/src/core/experts/integrations/self-improve.md +0 -151
  615. package/src/core/experts/integrations/workflow.md +0 -246
  616. package/src/core/experts/mentor/expertise.yaml +0 -125
  617. package/src/core/experts/mentor/question.md +0 -56
  618. package/src/core/experts/mentor/self-improve.md +0 -106
  619. package/src/core/experts/mentor/workflow.md +0 -184
  620. package/src/core/experts/mobile/expertise.yaml +0 -136
  621. package/src/core/experts/mobile/question.md +0 -72
  622. package/src/core/experts/mobile/self-improve.md +0 -140
  623. package/src/core/experts/mobile/workflow.md +0 -240
  624. package/src/core/experts/monitoring/expertise.yaml +0 -132
  625. package/src/core/experts/monitoring/question.md +0 -76
  626. package/src/core/experts/monitoring/self-improve.md +0 -150
  627. package/src/core/experts/monitoring/workflow.md +0 -264
  628. package/src/core/experts/performance/expertise.yaml +0 -68
  629. package/src/core/experts/performance/question.md +0 -41
  630. package/src/core/experts/performance/self-improve.md +0 -45
  631. package/src/core/experts/performance/workflow.md +0 -61
  632. package/src/core/experts/product/expertise.yaml +0 -143
  633. package/src/core/experts/product/question.md +0 -56
  634. package/src/core/experts/product/self-improve.md +0 -106
  635. package/src/core/experts/product/workflow.md +0 -184
  636. package/src/core/experts/qa/expertise.yaml +0 -110
  637. package/src/core/experts/qa/question.md +0 -56
  638. package/src/core/experts/qa/self-improve.md +0 -106
  639. package/src/core/experts/qa/workflow.md +0 -184
  640. package/src/core/experts/readme-updater/expertise.yaml +0 -141
  641. package/src/core/experts/readme-updater/question.md +0 -56
  642. package/src/core/experts/readme-updater/self-improve.md +0 -106
  643. package/src/core/experts/readme-updater/workflow.md +0 -184
  644. package/src/core/experts/refactor/expertise.yaml +0 -135
  645. package/src/core/experts/refactor/question.md +0 -41
  646. package/src/core/experts/refactor/self-improve.md +0 -45
  647. package/src/core/experts/refactor/workflow.md +0 -57
  648. package/src/core/experts/research/expertise.yaml +0 -143
  649. package/src/core/experts/research/question.md +0 -56
  650. package/src/core/experts/research/self-improve.md +0 -106
  651. package/src/core/experts/research/workflow.md +0 -184
  652. package/src/core/experts/security/expertise.yaml +0 -117
  653. package/src/core/experts/security/question.md +0 -77
  654. package/src/core/experts/security/self-improve.md +0 -102
  655. package/src/core/experts/security/workflow.md +0 -152
  656. package/src/core/experts/templates/expertise-template.yaml +0 -67
  657. package/src/core/experts/templates/question-template.md +0 -56
  658. package/src/core/experts/templates/self-improve-template.md +0 -106
  659. package/src/core/experts/templates/workflow-template.md +0 -184
  660. package/src/core/experts/testing/expertise.yaml +0 -112
  661. package/src/core/experts/testing/question.md +0 -68
  662. package/src/core/experts/testing/self-improve.md +0 -102
  663. package/src/core/experts/testing/workflow.md +0 -143
  664. package/src/core/experts/ui/expertise.yaml +0 -133
  665. package/src/core/experts/ui/question.md +0 -74
  666. package/src/core/experts/ui/self-improve.md +0 -122
  667. package/src/core/experts/ui/workflow.md +0 -262
  668. package/src/core/knowledge/ads/ad-audit-checklist-scoring.md +0 -424
  669. package/src/core/knowledge/ads/ad-optimization-logic.md +0 -590
  670. package/src/core/knowledge/ads/ad-technical-specifications.md +0 -385
  671. package/src/core/knowledge/ads/definitive-advertising-reference-2026.md +0 -506
  672. package/src/core/knowledge/ads/paid-advertising-research-2026.md +0 -445
  673. package/src/core/profiles/COMPARISON.md +0 -170
  674. package/src/core/profiles/README.md +0 -178
  675. package/src/core/profiles/claude-code.yaml +0 -111
  676. package/src/core/profiles/codex.yaml +0 -103
  677. package/src/core/profiles/cursor.yaml +0 -134
  678. package/src/core/profiles/examples.js +0 -250
  679. package/src/core/profiles/loader.js +0 -235
  680. package/src/core/profiles/windsurf.yaml +0 -159
  681. package/src/core/skills/_learnings/README.md +0 -91
  682. package/src/core/skills/_learnings/_template.yaml +0 -106
  683. package/src/core/skills/_learnings/code-review.yaml +0 -118
  684. package/src/core/skills/_learnings/commit.yaml +0 -69
  685. package/src/core/skills/_learnings/story-writer.yaml +0 -71
  686. package/src/core/teams/backend.json +0 -41
  687. package/src/core/teams/builder-validator.json +0 -51
  688. package/src/core/teams/code-review.json +0 -41
  689. package/src/core/teams/frontend.json +0 -41
  690. package/src/core/teams/fullstack.json +0 -41
  691. package/src/core/teams/logic-audit.json +0 -53
  692. package/src/core/teams/perf-audit.json +0 -71
  693. package/src/core/teams/qa.json +0 -41
  694. package/src/core/teams/security-audit.json +0 -71
  695. package/src/core/teams/solo.json +0 -35
  696. package/src/core/teams/test-audit.json +0 -71
  697. package/src/core/templates/CONTEXT.md.example +0 -49
  698. package/src/core/templates/README-template.md +0 -16
  699. package/src/core/templates/adr-template.md +0 -28
  700. package/src/core/templates/agent-coordination-pattern.md +0 -38
  701. package/src/core/templates/agent-profile-template.md +0 -51
  702. package/src/core/templates/agileflow-metadata.json +0 -150
  703. package/src/core/templates/browser-qa-spec.yaml +0 -94
  704. package/src/core/templates/ci-workflow.yml +0 -74
  705. package/src/core/templates/claude-settings.advanced.example.json +0 -75
  706. package/src/core/templates/claude-settings.example.json +0 -26
  707. package/src/core/templates/command-documentation.md +0 -187
  708. package/src/core/templates/command-prerequisites.yaml +0 -169
  709. package/src/core/templates/comms-note-template.md +0 -24
  710. package/src/core/templates/damage-control-patterns.yaml +0 -243
  711. package/src/core/templates/environment.json +0 -18
  712. package/src/core/templates/epic-template.md +0 -27
  713. package/src/core/templates/plan-template.md +0 -125
  714. package/src/core/templates/preserve-rules-common.md +0 -107
  715. package/src/core/templates/preserve-rules.json +0 -42
  716. package/src/core/templates/proactive-action-spec.md +0 -29
  717. package/src/core/templates/product-brief.md +0 -136
  718. package/src/core/templates/quality-gate-priorities.md +0 -34
  719. package/src/core/templates/research-template.md +0 -44
  720. package/src/core/templates/session-harness-protocol.md +0 -128
  721. package/src/core/templates/session-state.json +0 -56
  722. package/src/core/templates/story-lifecycle.md +0 -213
  723. package/src/core/templates/story-template.md +0 -92
  724. package/src/core/templates/tdd-test-template.js +0 -241
  725. package/src/core/templates/worktrees-guide.md +0 -231
  726. package/tools/agileflow-npx.js +0 -52
  727. package/tools/cli/agileflow-cli.js +0 -72
  728. package/tools/cli/commands/config.js +0 -285
  729. package/tools/cli/commands/doctor.js +0 -496
  730. package/tools/cli/commands/list.js +0 -385
  731. package/tools/cli/commands/session.js +0 -1176
  732. package/tools/cli/commands/setup.js +0 -255
  733. package/tools/cli/commands/status.js +0 -101
  734. package/tools/cli/commands/tui.js +0 -56
  735. package/tools/cli/commands/uninstall.js +0 -155
  736. package/tools/cli/commands/update.js +0 -299
  737. package/tools/cli/installers/core/installer.js +0 -892
  738. package/tools/cli/installers/ide/_base-ide.js +0 -518
  739. package/tools/cli/installers/ide/_interface.js +0 -238
  740. package/tools/cli/installers/ide/claude-code.js +0 -432
  741. package/tools/cli/installers/ide/codex.js +0 -426
  742. package/tools/cli/installers/ide/cursor.js +0 -217
  743. package/tools/cli/installers/ide/manager.js +0 -222
  744. package/tools/cli/installers/ide/windsurf.js +0 -282
  745. package/tools/cli/lib/command-context.js +0 -382
  746. package/tools/cli/lib/config-manager.js +0 -446
  747. package/tools/cli/lib/content-injector.js +0 -969
  748. package/tools/cli/lib/content-transformer.js +0 -496
  749. package/tools/cli/lib/docs-setup.js +0 -464
  750. package/tools/cli/lib/error-handler.js +0 -165
  751. package/tools/cli/lib/ide-error-factory.js +0 -421
  752. package/tools/cli/lib/ide-errors.js +0 -367
  753. package/tools/cli/lib/ide-generator.js +0 -357
  754. package/tools/cli/lib/ide-health-monitor.js +0 -364
  755. package/tools/cli/lib/ide-registry.js +0 -297
  756. package/tools/cli/lib/npm-utils.js +0 -103
  757. package/tools/cli/lib/self-update.js +0 -148
  758. package/tools/cli/lib/ui.js +0 -211
  759. package/tools/cli/lib/utils.js +0 -87
  760. package/tools/cli/lib/validation-middleware.js +0 -491
  761. package/tools/cli/lib/version-checker.js +0 -95
  762. package/tools/postinstall.js +0 -190
package/CHANGELOG.md CHANGED
@@ -1,540 +1,305 @@
1
1
  # Changelog
2
2
 
3
- All notable changes to AgileFlow will be documented in this file.
3
+ All notable changes to `agileflow` v4 are documented here.
4
+ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
4
5
 
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+ ## [4.0.0-alpha.2] — 2026-04-20
7
7
 
8
- ## [Unreleased]
9
-
10
- ## [3.4.3] - 2026-03-07
11
-
12
- ### Added
13
- - Session monitor wrapper and quality-gates integration
14
-
15
- ## [3.4.2] - 2026-03-07
16
-
17
- ### Added
18
- - DEPTH=ultradeep|extreme for SEO and Ads audit commands
19
-
20
- ## [3.4.1] - 2026-03-06
21
-
22
- ### Added
23
- - DEPTH=extreme audit mode, CI feedback loops, and DX quick wins
24
-
25
- ## [3.4.0] - 2026-02-28
26
-
27
- ### Added
28
- - Ads audit system, SEO analysis, ultradeep concurrency controls, and domain-first command naming
29
-
30
- ## [3.3.0] - 2026-02-24
31
-
32
- ### Added
33
- - Per-agent file tracking, tmux restore, and completeness audit
34
-
35
- ## [3.2.1] - 2026-02-21
36
-
37
- ### Added
38
- - Agentic browser QA system with Playwright integration
39
-
40
- ## [3.2.0] - 2026-02-21
41
-
42
- ### Added
43
- - Cross-IDE capability profiles, multi-agent audit systems, and AI attribution blocking
44
-
45
- ## [3.1.0] - 2026-02-14
46
-
47
- ### Added
48
- - Legal audit system, native Agent Teams integration, and startup performance improvements
49
-
50
- ## [3.0.2] - 2026-02-14
51
-
52
- ### Added
53
- - Automatic tmux window naming and configuration agent consolidation
54
-
55
- ## [3.0.1] - 2026-02-13
56
-
57
- ### Fixed
58
- - Configure writes directly to Claude Code settings.json for Agent Teams and permissions
59
-
60
- ## [3.0.0] - 2026-02-13
61
-
62
- ### Added
63
- - Scale-adaptive architecture, smart tmux sessions, and team observability
64
-
65
- ## [2.99.8] - 2026-02-12
66
-
67
- ### Fixed
68
- - Simplify tmux keybindings and clean up status line
69
-
70
- ## [2.99.7] - 2026-02-11
71
-
72
- ### Fixed
73
- - Suppress tmux same-index message on session start
74
-
75
- ## [2.99.6] - 2026-02-09
76
-
77
- ### Fixed
78
- - Fix tmux session creation after reboot with atomic command
79
-
80
- ## [2.99.5] - 2026-02-09
81
-
82
- ### Fixed
83
- - Fix tmux startup after reboot by starting server before global options
84
-
85
- ## [2.99.4] - 2026-02-09
86
-
87
- ### Fixed
88
- - Fix tmux socket directory creation on macOS
89
-
90
- ## [2.99.3] - 2026-02-09
91
-
92
- ### Fixed
93
- - Auto-heal tmux socket directory after macOS reboot
94
-
95
- ## [2.99.2] - 2026-02-09
96
-
97
- ### Added
98
- - Documentation overhaul with teams commands, frontmatter fixes, and damage control resilience
99
-
100
- ## [2.99.1] - 2026-02-08
101
-
102
- ### Added
103
- - Smart session management with context-aware naming and tmux quick-create keybinds
104
-
105
- ## [2.99.0] - 2026-02-08
106
-
107
- ### Added
108
- - Security Hardening Phase 2 - path traversal, auth, CORS, ReDoS, rate limiting
109
-
110
- ## [2.98.1] - 2026-02-07
111
-
112
- ### Added
113
- - Fix alias dedup, add claude flags config, trim status line
114
-
115
- ## [2.98.0] - 2026-02-07
116
-
117
- ### Fixed
118
- - Shell injection cleanup, shared lib tests, and async I/O pipeline
119
-
120
- ## [2.97.0] - 2026-02-07
121
-
122
- ### Added
123
- - Native Agent Teams integration with quality gate hooks and dual-mode orchestration
124
-
125
- ## [2.96.6] - 2026-02-06
126
-
127
- ### Fixed
128
- - Force-overwrite internal scripts and lib files during updates to fix stale code
129
-
130
- ## [2.96.5] - 2026-02-06
131
-
132
- ### Fixed
133
- - Fix SessionStart hook crash when js-yaml not installed in user projects
134
-
135
- ## [2.96.4] - 2026-02-06
136
-
137
- ### Added
138
- - Command deduplication to fix duplicate slash commands in autocomplete
139
-
140
- ## [2.96.3] - 2026-02-06
141
-
142
- ### Fixed
143
- - Codex CLI subcommand support for nested commands
144
-
145
- ## [2.96.2] - 2026-02-06
146
-
147
- ### Fixed
148
- - Smart docs folder detection for existing AgileFlow installations
149
-
150
- ## [2.96.1] - 2026-02-06
151
-
152
- ### Fixed
153
- - Fix js-yaml module resolution in copied lib files
154
-
155
- ## [2.96.0] - 2026-02-05
156
-
157
- ### Added
158
- - Multi-agent logic analyzer, ideation enhancements, and serve improvements
159
-
160
- ## [2.95.3] - 2026-02-01
161
-
162
- ### Added
163
- - Fresh restart flag for tmux with conversation auto-resume
164
-
165
- ## [2.95.2] - 2026-02-01
166
-
167
- ### Changed
168
- - Fix damage control hook MODULE_NOT_FOUND error
169
-
170
- ## [2.95.1] - 2026-01-30
171
-
172
- ### Fixed
173
- - Fix stale doc counts and scoped npm audit
174
-
175
- ## [2.95.0] - 2026-01-30
176
-
177
- ### Added
178
- - Global session management commands (status, history, cleanup)
179
- - `/agileflow:install` and `/agileflow:maintain` commands for quick setup
180
- - Multi-expert Implementation Ideation in `/research:import` and `/research:analyze`
181
- - Plan file context preservation with experimental profile
182
- - Tmux freeze recovery keybinds and `--rescue` flag
183
- - Shellcheck CI job for shell script linting
184
-
185
- ### Fixed
186
- - Prevent worktree sessions from being marked as main
187
- - Prevent duplicate agents during install/update
188
- - Inline uncommitted changes handling for `/session:end`
189
-
190
- ## [2.94.1] - 2026-01-24
191
-
192
- ### Added
193
- - DEPTH=ultradeep mode for comprehensive 13-expert ideation
194
-
195
- ## [2.94.0] - 2026-01-24
196
-
197
- ### Added
198
- - Shared docs/ across sessions via symlink for multi-session coordination
199
-
200
- ## [2.93.0] - 2026-01-24
201
-
202
- ### Added
203
- - RLM document analysis and session health improvements
204
-
205
- ## [2.92.1] - 2026-01-23
206
-
207
- ### Added
208
- - Session worktree timeout, progress feedback, and docs folder copy
209
-
210
- ## [2.92.0] - 2026-01-23
211
-
212
- ### Added
213
- - Tmux integration, i18n docs, EP-0022 codebase health improvements
214
-
215
- ## [2.91.0] - 2026-01-20
216
-
217
- ### Added
218
- - GSD workflow integration, codebase query interface, and docs improvements
219
-
220
- ## [2.90.7] - 2026-01-17
221
-
222
- ### Fixed
223
- - Fix TUI bouncing with in-place rendering
224
-
225
- ## [2.90.6] - 2026-01-17
226
-
227
- ### Changed
228
- - Static TUI dashboard (no bouncing)
229
-
230
- ## [2.90.5] - 2026-01-17
231
-
232
- ### Added
233
- - Restore static dashboard command
234
-
235
- ## [2.90.4] - 2026-01-17
236
-
237
- ### Fixed
238
- - Fix TUI to use simple-tui by default
239
-
240
- ## [2.90.2] - 2026-01-17
241
-
242
- ### Fixed
243
- - TUI CLI command fix
244
-
245
- ## [2.90.1] - 2026-01-16
246
-
247
- ### Added
248
- - TUI as CLI command with session fixes
249
-
250
- ## [2.90.0] - 2026-01-16
251
-
252
- ### Added
253
- - TUI dashboard with session management and modular CLI architecture
254
-
255
- ## [2.89.3] - 2026-01-14
256
-
257
- ### Added
258
- - Security hardening with shell injection prevention and secret redaction
259
-
260
- ## [2.89.2] - 2026-01-14
261
-
262
- ### Fixed
263
- - Increase precompact preservation window to 10 minutes
264
-
265
- ## [2.89.1] - 2026-01-14
266
-
267
- ### Fixed
268
- - Fix active_commands preservation after conversation compact
269
-
270
- ## [2.89.0] - 2026-01-14
271
-
272
- ### Added
273
- - Security hardening, LRU file caching, and comprehensive test coverage
274
-
275
- ## [2.88.0] - 2026-01-13
276
-
277
- ### Fixed
278
- - Security and code quality improvements from EP-0012 ideation
279
-
280
- ## [2.87.0] - 2026-01-13
281
-
282
- ### Added
283
- - Multi-session visibility with cleanup notifications and status line indicators
284
-
285
- ## [2.86.0] - 2026-01-13
286
-
287
- ### Added
288
- - Progressive disclosure and RPI workflow for context optimization
289
-
290
- ## [2.85.0] - 2026-01-12
8
+ Curated behavior presets — first hooks ship, but never as a free-for-all.
291
9
 
292
10
  ### Added
293
- - Parallel sessions with git worktrees and session boundary protection
294
-
295
- ## [2.84.2] - 2026-01-11
296
-
297
- ### Fixed
298
- - Auto-update retry with npm cache clean on stale registry
299
-
300
- ## [2.84.1] - 2026-01-11
301
11
 
302
- ### Fixed
303
- - Status line and welcome table formatting fixes
304
-
305
- ## [2.84.0] - 2026-01-11
306
-
307
- ### Added
308
- - File awareness, smart merge, and simplified auto-update
309
-
310
- ## [2.83.0] - 2026-01-10
12
+ - **Behavior presets in `agileflow.config.json`** (`behaviors: { loadContext, babysitDefault, damageControl, preCompactState }`). Each preset maps 1:N to hooks declared in plugin manifests via a new `behavior: <key>` field. Disabling a preset excludes its hooks from the generated `.agileflow/hook-manifest.yaml` — the script literally does not run.
13
+ - **Wizard step**: `pickBehaviors()` (`src/cli/wizard/behaviors-picker.js`) Clack multiselect with all four presets pre-checked. Only shown for IDEs that support hooks (claude-code today; cursor/windsurf/codex skip it).
14
+ - **Six behavior-gated hooks in the `core` plugin**:
15
+ - `context-loader` (SessionStart, gated by `loadContext`) — lean v4 replacement for v3's 79KB welcome banner. Prints stories, dirty files, and recent commits.
16
+ - `babysit-mentor-injector` (SessionStart, gated by `babysitDefault`) — HARD mode mentor injection. Claude defaults to the `/agileflow:babysit` mentor pattern without explicit invocation.
17
+ - `damage-control-bash` / `-edit` / `-write` (PreToolUse, gated by `damageControl`, `skipOnError: false`) — pattern-driven safety net (`damage-control-patterns.yaml`). Blocks `rm -rf /`, `dd to /dev/sda`, fork bombs, writes to `.env`/`.ssh/`, and similar.
18
+ - `pre-compact-state` (PreCompact, gated by `preCompactState`) — dumps active stories, current command, and dirty git state so they survive Claude's compaction summary.
19
+ - **Schema + loader + writer updates**: `behaviors` is now a first-class config section. `mergeConfig` deep-merges across one level so partial user overrides don't wipe defaults.
20
+ - **Aggregator behavior gating**: `buildHookManifest(orderedPlugins, behaviors)` filters hooks where `behaviors[entry.behavior] === false`. Missing keys treated as enabled (preserves intent of partial configs).
21
+ - **15 new tests** covering behaviors filtering in the aggregator, behaviors-picker pure helpers, and the install-time integration test that asserts the manifest reflects the toggle map. Total: **304 passing** (+15 from alpha.1).
311
22
 
312
23
  ### Changed
313
- - Remove beta TUI dashboard - use slash commands instead
314
-
315
- ## [2.82.5] - 2026-01-10
316
-
317
- ### Fixed
318
- - Fix version detection to read from config.yaml
319
-
320
- ## [2.82.4] - 2026-01-10
321
-
322
- ### Fixed
323
- - Fix whats-new command to include CHANGELOG.md in installation
324
-
325
- ## [2.82.3] - 2026-01-09
326
24
 
327
- ### Fixed
328
- - Copy lib directory to .agileflow for script dependencies
25
+ - `installPlugins(options)` accepts a `behaviors` option threaded through to `writeAggregatedManifest`.
26
+ - `agileflow setup` now includes a behaviors step after personalization for hook-capable IDEs.
27
+ - `agileflow update` re-reads `behaviors` from the saved config so manual edits to `agileflow.config.json` propagate without re-running the wizard.
28
+ - `defaultConfig()` ships with all four behaviors enabled. Users opt **out** at the wizard, never opt in.
329
29
 
330
- ## [2.82.2] - 2026-01-09
30
+ ### Why curated, not free configuration
31
+
32
+ Per user feedback in alpha.1: "I don't want it to be super customizable. Users would be able to customize pretty much anything." Free hook configuration (declare any event + any matcher + any script) is technically possible via the `hooks:` map, but the wizard surface is restricted to four presets. This keeps the install path predictable and prevents the v3-era anti-pattern of every plugin author shipping their own SessionStart welcome banner.
331
33
 
332
- ### Fixed
333
- - Installer now copies lib/ directory to .agileflow/lib/ for script dependencies
34
+ ## [4.0.0-alpha.1] — Unreleased
334
35
 
335
- ## [2.82.1] - 2026-01-09
336
-
337
- ### Fixed
338
- - Fix npm package missing lib directory
339
-
340
- ## [2.82.0] - 2026-01-09
341
-
342
- ### Added
343
- - Multi-agent orchestration patterns with batch, workflow, and choose commands
344
-
345
- ## [2.81.0] - 2026-01-09
346
-
347
- ### Added
348
- - Input validation, damage control refactor, and session merge flow
349
-
350
- ## [2.80.0] - 2026-01-09
351
-
352
- ### Added
353
- - Comprehensive documentation and docs site improvements
354
-
355
- ## [2.79.0] - 2026-01-09
356
-
357
- ### Added
358
- - Damage Control protection, Visual Mode, and self-improving skills
359
-
360
- ## [2.78.0] - 2026-01-08
361
-
362
- ### Added
363
- - Enhanced compact context preservation with damage control hooks
364
-
365
- ## [2.77.0] - 2026-01-01
366
-
367
- ### Added
368
- - Vibrant 256-color palette with enhanced status line
369
-
370
- ## [2.76.0] - 2026-01-01
371
-
372
- ### Added
373
- - Ralph Loop autonomous story processing with Stop hook support
374
-
375
- ## [2.75.0] - 2026-01-01
376
-
377
- ### Added
378
- - Restructure context/research commands into subdirectories with stuck detection
379
-
380
- ## [2.74.0] - 2025-12-31
36
+ v4 Phase 1 skeleton. Not yet publishable.
381
37
 
382
38
  ### Added
383
- - Script repair and diagnostics for /configure command
384
39
 
385
- ## [2.73.0] - 2025-12-29
40
+ - Monorepo workspace `apps/cli/` with `name: agileflow`, `version: 4.0.0-alpha.1`.
41
+ - Unified user config surface at `agileflow.config.json` (JSON Schema + Ajv loader).
42
+ - Default config factory with `core` plugin always enabled.
43
+ - CLI entry at `bin/agileflow.js` with `commander`-based dispatch (`status`, `setup`, `doctor` stubs).
44
+ - Vitest test infrastructure with `tests/unit/config/loader.test.js` (8 passing tests).
45
+ - `@clack/prompts` as the TUI library for the setup wizard — matches the skills.sh/vercel-labs/skills UX (clean step indicators, multiselect, search). Replaces the Ink 5 direction from the original plan.
386
46
 
387
- ### Changed
388
- - Consolidate scripts in .agileflow/scripts with updated hook paths
47
+ ### Phase 2a — Setup wizard
389
48
 
390
- ## [2.72.0] - 2025-12-29
49
+ - Plugin registry (`src/runtime/plugins/registry.js`) — discovers `plugin.yaml` manifests under `content/plugins/*`, sorts required-first, enforces unique ids.
50
+ - Config writer (`src/runtime/config/writer.js`) — serializes user-facing fields to `agileflow.config.json` with schema pointer, stable 2-space formatting.
51
+ - Clack wizard (`src/cli/wizard/plugin-picker.js`, `src/cli/wizard/personalization.js`) — multiselect plugin picker (core always on) + 3 enum selects (tone, ask_level, verbosity). Cancellation cleanly exits.
52
+ - Stub plugin manifests for `core` / `ads` / `seo` / `audit` / `council` in `content/plugins/*/plugin.yaml` (content bodies land in Phase 4).
53
+ - Non-interactive path: `agileflow setup --yes --plugins core,seo,audit` writes config without prompts.
54
+ - 14 new tests (`plugins/registry.test.js`, `config/writer.test.js`); total suite: 22 passing.
391
55
 
392
- ### Added
393
- - Move scripts to .agileflow/scripts directory
56
+ ### Phase 2a — hardening (flow audit fixes)
394
57
 
395
- ## [2.71.0] - 2025-12-29
58
+ Flow audit (wiring / errors / persistence / feedback) ran against Phase 2a and flagged 3 P0 + 5 P1 gaps. All addressed:
396
59
 
397
- ### Added
398
- - Outdated script detection with upgrade command and 30-day archival default
60
+ - **writeConfig now atomic**: temp file (`.agileflow.config.json.tmp-<pid>`) + rename. Same-directory rename is atomic on POSIX and same-volume Windows. Readers always see either old or new content — never a truncated half-write. Temp file is cleaned up on failure.
61
+ - **writeConfig errors surface as friendly messages**: EPERM / ENOSPC / EACCES no longer leak stack traces. Interactive path shows `prompts.log.error` + recovery hint; non-interactive path writes to stderr with exit 1.
62
+ - **Plugin discovery errors handled in interactive path**: malformed `plugin.yaml` or duplicate ids no longer crash before the wizard starts. Wizard shows "Failed to load plugins: {msg}" and exits.
63
+ - **Unknown `--plugins` ids now error loudly**: `agileflow setup --yes --plugins core,typo` exits 1 with the typo listed and all available plugin ids printed.
64
+ - **Custom plugin entries preserved on wizard rerun**: user-added entries in `plugins.mycustom` survive every wizard invocation (interactive and `--yes`). Extracted `buildPluginsMap()` pure helper to unit-test this guarantee.
65
+ - **Cancellation semantics fixed**: Ctrl+C / Esc in any prompt now says "Setup cancelled. No changes made." and exits 1 (was exit 0). CI can now distinguish user abort from success.
66
+ - **Round-trip tests expanded per schema field**: hooks, ide.primary, language, plugin settings sub-objects, and personalization each tested independently. A writer-forgets-a-field regression can't hide behind the loader's default-merge.
67
+ - **Test suite grew 22 → 40 passing** across 5 test files.
399
68
 
400
- ## [2.70.0] - 2025-12-29
69
+ ### Phase 2a — logic audit fixes
401
70
 
402
- ### Fixed
403
- - Configure script reads version dynamically from installed package
71
+ Logic audit (5 analyzers: edge / flow / invariant / race / type) on the hardened Phase 2a code. Verdicts: **CLEAN** (control flow), **HOLDS** (invariants), **ACCEPTABLE** (edge + race), **LOOSE** (type). 4 P1 fixes applied:
404
72
 
405
- ## [2.69.0] - 2025-12-29
73
+ - **`registry.js`**: `depends` is now strictly validated. A plugin author writing `depends: core` (string, common YAML authoring mistake) used to be silently coerced to `[]`; now it throws a clear error. Empty/absent `depends` still defaults to `[]`.
74
+ - **`plugin-picker.js::buildPluginsMap`**: added `!Array.isArray(entry)` guard for the custom-plugin preservation branch. Arrays pass `typeof === 'object'` but would break any downstream code reading `entry.enabled` as a property.
75
+ - **`plugin-picker.js::buildPluginsMap`**: discovered plugins now preserve their `settings` sub-object across wizard reruns. Previously the picker would strip `plugins.seo.settings.crawlDepth` every time it ran; now settings travel with the plugin entry (including when enable=false).
76
+ - **`loader.js`**: eliminated the `existsSync`→`readFileSync` TOCTOU window. We now read directly and treat `ENOENT` as "no config → defaults"; any other read error surfaces as before. Simpler code, no race.
77
+ - Test suite grew **40 → 46 passing**.
406
78
 
407
- ### Added
408
- - Fix configure script to read version dynamically instead of hardcoded
79
+ ### Phase 2b slice 1 — Sync engine port
409
80
 
410
- ## [2.68.0] - 2025-12-29
81
+ Ported the v3 SHA256-based safe-update engine from `installer.js:349-455` into `apps/cli/src/runtime/installer/`. Each scenario has dedicated test coverage.
411
82
 
412
- ### Fixed
413
- - Remove Stop hook, simplify docs to npx-only installation
83
+ - **`src/lib/hash.js`** — `sha256Hex(Buffer|string)` (UTF-8 deterministic) and `sha256File(path)` helpers.
84
+ - **`src/runtime/installer/file-index.js`** read/write `_cfg/files.json` (schema v1); atomic writes (temp+rename); rejects arrays-masquerading-as-objects at both levels.
85
+ - **`src/runtime/installer/stash.js`** — writes conflicting upstream content to `_cfg/updates/<timestamp>/<relativePath>` for manual merge.
86
+ - **`src/runtime/installer/sync-engine.js`** — `syncFile({ content, dest, relativePath, fileIndex, cfgDir, timestamp, force, ops })` handles the 5-scenario decision tree: CREATED, UPDATED (via force), UPDATED (via baseline match), UNCHANGED (3 variants — baseline noop, protected auto-converge, unknown auto-adopt), PRESERVED (stash+keep-user, for protected-mismatch and locally-modified cases). Works for both text content (strings) and binary (Buffers).
87
+ - **27 new tests** covering every branch of the decision tree plus index round-trips and deterministic hashing. Suite: **46 → 73 passing**.
414
88
 
415
- ## [2.67.0] - 2025-12-29
89
+ ### Phase 2b slice 2 Plugin resolver + strict validator
416
90
 
417
- ### Added
418
- - Simplify installation to npx-only, remove global install recommendation
91
+ - **`src/runtime/plugins/resolver.js`** — `resolvePlugins(discovered, userSelected)` computes the transitive closure (auto-enabling dependencies of user-selected plugins), produces a topologically-sorted install order, and detects cycles via DFS three-color marking with full cycle-path reporting (e.g. `a -> b -> c -> a`). `cannotDisable` plugins (currently just `core`) are always included.
92
+ - **`src/runtime/plugins/validator.js`** strict per-plugin validation:
93
+ - `id` matches `^[a-z0-9][a-z0-9-]{0,63}$` (kebab-case)
94
+ - `version` is valid semver including pre-release / build-metadata tags
95
+ - `description` is non-empty and ≥ 16 chars (warning under that)
96
+ - `enabledByDefault` and `cannotDisable` are real booleans (not coerced strings)
97
+ - `cannotDisable: true` implies `enabledByDefault: true`
98
+ - `depends` entries are valid plugin ids; self-dependency rejected; duplicates flagged as warnings
99
+ - `provides` is an object with array-typed sub-keys; unknown keys flagged as warnings
100
+ - `validatePluginSet()` adds cross-plugin checks (duplicate ids, unresolved depends)
101
+ - `hasErrors(issues)` for gating commits / CI
102
+ - **37 new tests** (resolver: 12, validator: 25) covering diamond dependencies, 3-node cycles, semver edge cases, kebab-case rejections, and cross-plugin invariants. Suite: **73 → 110 passing**.
103
+ - All 5 bundled plugin manifests pass strict validation with zero issues.
419
104
 
420
- ## [2.66.0] - 2025-12-29
105
+ ### Phase 2b slice 4 — End-to-end install orchestrator + integration tests
421
106
 
422
- ### Added
423
- - Remove unreliable Stop hook, improve global CLI messaging
107
+ - **`src/runtime/installer/install.js`** — `installPlugins({ discovered, userSelected, agileflowDir, cliVersion, force })` wires every layer: strict-validate → resolve transitive deps + topo sort → read or seed file index → walk each plugin's source dir → `syncFile` every file under `<agileflowDir>/plugins/<id>/...` → remove directories of plugins no longer enabled (and prune their index entries) → atomically write the index. Throws on validation errors (zero partial install) and dependency cycles.
108
+ - **`removeDisabledPlugins`** only blasts directories whose ids are in the discovered set. Unknown user-placed dirs under `<agileflowDir>/plugins/` are left alone.
109
+ - **`FileOpsCounters`** gained a `removed` field for plugin-level removal accounting.
110
+ - **`tests/integration/install-plugins.test.js`** (7 tests) covers:
111
+ - First install with selected opt-ins → `core` first in topo order, file index records every file, disabled plugins absent.
112
+ - Idempotency: second run reports zero writes, all `unchanged`.
113
+ - User-modified file → `preserved` + stash written under `_cfg/updates/<timestamp>/<relativePath>` containing the upstream version.
114
+ - Disabled plugin removal → directory rm'd + index entries pruned.
115
+ - User-placed unknown directory under `plugins/` is preserved.
116
+ - Validation errors abort with a flat report, zero filesystem side effects.
117
+ - Cycle detection trips before any writes.
118
+ - Suite: **110 → 117 passing** (1 unit test updated for the new `removed` counter; 7 new integration tests).
119
+ - **Phase 2b "done when" criteria all met**: SHA256 round-trip passes, disabled-plugin removal works, integration test installs into a scratch dir end-to-end. The content injector port (slice 3) is deferred to Phase 4 — it's only needed once skills/commands with `<!-- {{TOKEN}} -->` placeholders ship.
424
120
 
425
- ## [2.65.0] - 2025-12-29
121
+ ### Phase 2b — logic audit fixes
426
122
 
427
- ### Added
428
- - Improved outdated global CLI messaging and guidance
123
+ Logic audit (5 analyzers: edge / flow / invariant / race / type) on Phase 2b runtime. Verdicts: **HOLDS** (invariants), **CLEAN** (control flow), **SAFE** (race for CLI), **RISKY** (edge — path traversal flagged), **ACCEPTABLE** (type). 5 P0/P1 fixes applied:
429
124
 
430
- ## [2.64.0] - 2025-12-29
125
+ - **`writeStash` path-traversal guard**: rejects absolute paths up front (`/etc/passwd` would otherwise be silently joined as a relative segment) AND verifies the resolved stash path is inside the resolved updates root. Defensive against malicious or buggy `relativePath` values escaping `_cfg/updates/<timestamp>/`.
126
+ - **`installPlugins` try/finally around sync + remove**: the file index is now written even when `installOnePlugin` throws mid-loop. Previously a transient EACCES/ENOSPC could leave on-disk files without index entries → next run would misclassify them as user-modified and stash them. Integration test confirms partial-install case persists the index.
127
+ - **Atomic `syncFile` writes**: `writeContent` ports the temp+rename pattern from `writeFileIndex`. Mid-write crashes can no longer leave a truncated dest file. Temp filename is `<dest>.tmp-<pid>-<random>` to avoid collisions in same-process concurrent installs.
128
+ - **Resolver rejects unknown `userSelected` ids loudly**: `resolvePlugins(discovered, ['typo'])` now throws with a clear message listing available plugin ids. Direct callers (CI / programmatic install) get the same protection the wizard already had via `pluginsFromCsv`.
129
+ - **`sha256Hex` null guard**: throws a `TypeError` with a clear message instead of the cryptic Buffer-internal error when called with `null`/`undefined`.
130
+ - **Random suffix on temp filenames** in `writeFileIndex` (PID alone could collide in same-process concurrent calls — rare but possible in tests).
131
+ - **14 new tests**: stash path-traversal (4), atomic writes (2), resolver unknown ids (2), null hash inputs (2), partial-install index persistence (1), plus existing test fixed for absolute-path rejection. Suite: **117 → 131 passing**.
431
132
 
432
- ### Changed
433
- - Fix version detection in welcome script for user projects
434
-
435
- ## [2.63.0] - 2025-12-27
436
-
437
- ### Added
438
- - Per-IDE options for update and uninstall commands
133
+ ### Phase 2c — Wire installer into CLI (setup + update)
134
+
135
+ - **`agileflow setup` now triggers an actual install**: after writing `agileflow.config.json`, both the interactive and `--yes` paths call `installPlugins()`. The interactive path shows a Clack spinner ("Installing N plugin(s)") with a per-counter summary on completion. The `--yes` path prints a single-line counter summary.
136
+ - **New `agileflow update` command**: re-runs `installPlugins()` against the currently-enabled plugin set in the config, no prompts. Use cases: applying manual edits to `agileflow.config.json`, picking up new bundled plugin content without re-prompting, CI sync. Supports `--force` to overwrite local modifications instead of preserving them.
137
+ - **Verified end-to-end**: `agileflow setup --yes --plugins core,seo,audit` in a scratch dir writes config, installs 3 `plugin.yaml` files into `.agileflow/plugins/{core,audit,seo}/`, and produces a valid SHA256-indexed `_cfg/files.json`. Subsequent `agileflow update` reports 3 unchanged (idempotent).
138
+
139
+ ### Phase 3 slice A Hook meta-orchestrator core
140
+
141
+ The fix for v3's cascading SessionStart failures lands. Six thin Claude Code dispatchers delegate to a single orchestrator that reads a project-side manifest, topologically orders hooks by `runAfter`, runs them with per-hook timeout + skipOnError semantics, and writes a JSONL log to `.agileflow/logs/hook-execution.jsonl`.
142
+
143
+ - **`src/runtime/hooks/manifest-loader.js`** — reads/normalizes `.agileflow/hook-manifest.yaml` (schema v1). Strict validation: rejects unknown events, non-array `runAfter`, negative `timeout`, non-boolean `enabled`/`skipOnError`, duplicate ids. Six valid Claude Code events recognized: `SessionStart`, `PreCompact`, `Stop`, `PreToolUse:{Bash,Edit,Write}`. Returns null for missing manifest.
144
+ - **`src/runtime/hooks/chain.js`** — `orderChain(hooks)` topologically sorts by `runAfter` via DFS three-color marking; cycles throw with the full path (`a -> b -> c -> a`); unresolved `runAfter` targets throw with the offending hook id; declaration order preserved within topo layers.
145
+ - **`src/runtime/hooks/logger.js`** — `appendHookLog(logPath, entry)` writes one JSON object per line. `truncate()` caps stdout/stderr at 4 KB per stream with a `…[truncated]` marker. Drops `undefined` keys for compact lines. Auto-creates the log directory.
146
+ - **`src/runtime/hooks/orchestrator.js`** — `runEvent({ event, agileflowDir, stdin, overrides, runHook? })` orchestrates a chain: load manifest → filter to event → apply user `overrides` from `agileflow.config.json.hooks` → topo sort → run each hook (via injectable `runHook`, defaulting to a child-process spawner with AbortController-enforced timeouts) → log every step → continue on `skipOnError: true` failures, abort with exit 1 on `skipOnError: false` failures. Default child-process runner picks the interpreter by extension (`.js`→node, `.sh`→bash, else direct), forwards stdin, captures stdout/stderr/exitCode/timedOut, sets `AGILEFLOW_DIR` env.
147
+ - **`bin/hooks/{session-start,pre-bash,pre-edit,pre-write,pre-compact,stop}.js`** — six executable thin dispatchers (~30 lines each). Each forwards stdin to `runEvent` and exits with the chain's resolved code. `pre-compact` and `stop` always exit 0 even on chain failure (these events must never block). All catch top-level errors and fail open.
148
+ - **`HOOK_LOG`** schema: `{ timestamp, event, hookId, status: 'ok'|'error'|'timeout'|'skipped', exitCode, durationMs, stdout?, stderr?, skippedByOnError? }`.
149
+ - **44+ new tests across 4 files**: manifest schema (15), chain ordering + cycles (9), JSONL logger + truncation (8), orchestrator with stubbed runHook (12) including timeout, skipOnError, runAfter ordering, override application, multi-hook logging. Suite: **131 → 184 passing**.
150
+ - **End-to-end smoke verified**: a manifest with `welcome` (ok) and `flaky` (exits 1, skipOnError: true) runs both in topo order, logs each, and the dispatcher exits 0 — the exact v3 cascade-failure case that previously broke session start now degrades gracefully.
151
+
152
+ ### Phase 3 schema fix — align with Claude Code hooks reference
153
+
154
+ A read of the official Claude Code hooks docs revealed our event schema was wrong on two counts: incomplete (6 of 28 real events) and synthetic (`PreToolUse:Bash` is not a real event — it's `PreToolUse` + a separate `matcher: "Bash"` config field). Fixed before slices B/C build on the schema.
439
155
 
440
- ## [2.62.0] - 2025-12-27
156
+ - **`VALID_EVENTS` expanded to all 28 events** in the Claude Code reference: `SessionStart`, `SessionEnd`, `UserPromptSubmit`, `UserPromptExpansion`, `PreToolUse`, `PermissionRequest`, `PermissionDenied`, `PostToolUse`, `PostToolUseFailure`, `PostToolBatch`, `PreCompact`, `PostCompact`, `Stop`, `StopFailure`, `SubagentStart`, `SubagentStop`, `TaskCreated`, `TaskCompleted`, `TeammateIdle`, `InstructionsLoaded`, `ConfigChange`, `CwdChanged`, `FileChanged`, `WorktreeCreate`, `WorktreeRemove`, `Notification`, `Elicitation`, `ElicitationResult`.
157
+ - **`matcher` is now a separate optional field** on hook manifest entries, only valid on tool-related events (`PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied`). Manifest schema rejects matcher on non-tool events with a clear error.
158
+ - **`matcherMatches(pattern, actual)`** helper implements Claude Code's matcher semantics: empty/`*` → match-all; alphanumeric+`_`+`|` → exact-or-pipe-list (`Bash`, `Edit|Write`); anything else → JS regex (`^Notebook`, `mcp__memory__.*`); invalid regex returns false instead of throwing.
159
+ - **Orchestrator's `runEvent` accepts a `matcher` parameter**: hooks with a manifest matcher only fire when their pattern accepts the runtime-supplied matcher; hooks without a manifest matcher fire for every value.
160
+ - **PreToolUse dispatchers** (`pre-bash.js`, `pre-edit.js`, `pre-write.js`) hardcode their respective matcher (`Bash`, `Edit`, `Write`) and pass it to `runEvent`. They register in `.claude/settings.json` (slice C) as `PreToolUse` hooks with the matching `matcher` field, so Claude Code routes correctly.
161
+ - **21 new tests** for the schema + matcher routing: 9 manifest-loader (matcher field validation, expanded event list), 5 orchestrator (matcher filtering across exact / pipe-list / regex / no-matcher), 7 `matcherMatches` cases. Suite: **184 → 205 passing**.
162
+ - **End-to-end re-verified**: a manifest with `welcome` (SessionStart, no matcher), `dc-bash` (PreToolUse, matcher: Bash), and `dc-edit` (PreToolUse, matcher: Edit) routes correctly. SessionStart fires welcome only; `pre-bash.js` invoking the orchestrator with `matcher: 'Bash'` fires only `dc-bash`, filtering out `dc-edit`.
441
163
 
442
- ### Added
443
- - Dynamic skill generation with research-driven MCP integration
164
+ ### IDE / CLI awareness — install gates by target
444
165
 
445
- ## [2.61.0] - 2025-12-27
166
+ Different agentic IDEs / CLIs support different feature subsets. Hooks are Claude Code only (the entire orchestrator we just shipped is Claude-Code-specific). Cursor / Windsurf / Codex don't have an equivalent hook API. The installer now picks an IDE up front and gates feature install on its capabilities.
446
167
 
447
- ### Fixed
448
- - Fixed changelog entry formatting and version comparison links
168
+ - **`src/runtime/ide/capabilities.js`** declares an `IDE_CAPABILITIES` map for the four supported targets: `claude-code` (full feature set), `cursor` (commands + MCP), `windsurf` (commands), `codex` (very limited). Each entry lists `hooks` / `skills` / `commands` / `agents` / `mcp` booleans plus a `settingsFile` path.
169
+ - **`src/cli/wizard/ide-picker.js`** adds a Clack `select` prompt asking which IDE the user is targeting. Default is Claude Code. Selecting a non-full target prints a warning listing which features won't be installed (`cursor: hooks, skills, agents won't be installed (not supported by this IDE)`).
170
+ - **`agileflow setup --yes --ide <id>`** flag for the non-interactive path. Unknown IDE ids are rejected with the supported list. Default is `claude-code`.
171
+ - **Status output** now shows the IDE selection: `ide: claude-code (hooks=on, skills=on)`.
172
+ - **Future install gating**: the IDE choice is captured in `agileflow.config.json` at `ide.primary`; subsequent slices (Phase 3 slice C / Phase 4 install gating) consult `capabilitiesFor(ide).hooks` etc. before writing IDE-specific files.
173
+
174
+ ### v4 direction lock — skills-only (no slash commands)
449
175
 
450
- ## [2.60.0] - 2025-12-27
176
+ User directive 2026-04-26: AgileFlow ships **skills only**. No slash commands at all in the runtime. (Distinction: `npx agileflow setup` and friends are CLI subcommands and stay — the directive applies to in-IDE `/agileflow:*` slash commands.)
451
177
 
452
- ### Changed
453
- - Standardized changelog format with human-readable summaries
178
+ - **Plugin manifest `provides.commands`**: schema retained for backward compat but bundled plugins all ship `commands: []`. Phase 4 content authoring must NOT create command `.md` files.
179
+ - **Plan §C overlap table** at `/home/bk/.claude/plans/fizzy-stirring-kahan.md` is now wholly "retire in favor of skill" — every former "Kept" command becomes "Retired".
180
+ - **Skill design implication**: with no slash command for deterministic invocation, every skill must use the v2 frontmatter `triggers.keywords` + `priority` + `exclude` fields rigorously so Claude reliably picks the right skill.
181
+ - **IDE capability map**: the `commands: true/false` field stays informational. AgileFlow itself ships no commands regardless.
182
+
183
+ ### Phase 3 slice B — Hook manifest aggregation at install (IDE-gated)
184
+
185
+ The install pipeline now produces a working `.agileflow/hook-manifest.yaml` automatically when the target IDE supports hooks. The 6 dispatchers + orchestrator from slice A finally have something to read.
186
+
187
+ - **`src/runtime/hooks/aggregator.js`** — `buildHookManifest(orderedPlugins)` walks each plugin's `provides.hooks` array, rewrites script paths from plugin-relative (`hooks/welcome.js`) to project-root-relative (`.agileflow/plugins/core/hooks/welcome.js`), and produces a `{ version: 1, hooks: [...] }` object. Defensive: skips invalid entries silently. Pure / no I/O.
188
+ - **`writeAggregatedManifest(plugins, agileflowDir)`** — atomically writes the YAML manifest with a `# Auto-generated …` header so users know not to hand-edit. Temp+rename pattern matching the rest of the runtime; cleans up the temp file on rename failure.
189
+ - **`removeAggregatedManifest(agileflowDir)`** — removes a stale manifest cleanly when the user switches to a non-hook IDE.
190
+ - **`installPlugins` now takes an `ide` parameter** and calls `writeAggregatedManifest` only when `capabilitiesFor(ide).hooks === true`. Switching from claude-code to cursor automatically removes the previously-written manifest. Result object grows a `hookManifestPath` field (path or null).
191
+ - **`setup` and `update` commands** thread `ide` through from `agileflow.config.json.ide.primary`. The bundled core plugin gained a stub `session-welcome.js` hook so aggregation has real content to test against.
192
+ - **17 new tests across aggregator + integration**: pure aggregator unit tests (build, atomic write, header comment, cleanup on failure, remove), 3 integration tests (manifest written for claude-code, NOT written for cursor, stale manifest removed on IDE switch). Suite: **213 → 227 passing across 18 files**.
193
+ - **End-to-end verified**: `agileflow setup --yes --plugins core --ide claude-code` writes hook-manifest.yaml with `session-welcome` registered for SessionStart; switching to `--ide cursor` removes the manifest. The orchestrator (slice A) reads the same file at runtime; the loop is closed.
194
+
195
+ ### Phase 3 slice C — Claude Code settings.json registration
196
+
197
+ The final piece. When `ide=claude-code`, the installer registers our 6 hook entry points in `.claude/settings.json` so Claude Code actually invokes our orchestrator. The orchestrator → manifest loader → chain executor → dispatcher loop now closes against a real Claude Code session.
198
+
199
+ - **`src/runtime/ide/claude-code-settings.js`** — read/merge/write of `.claude/settings.json`. Critical correctness property: NEVER clobbers the user's other settings.json content (permissions, env, non-managed hooks). AgileFlow-owned entries are identified by the literal `agileflow hook` substring in their command and replaced atomically; everything else is preserved.
200
+ - **`src/cli/commands/hook.js`** + new `agileflow hook <event> [--matcher <name>]` CLI subcommand: a unified hook dispatcher that resolves through the npm bin entry. Settings.json registers `npx --no-install agileflow hook <Event>` so the path works regardless of how the package is installed (local node_modules, global, npx).
201
+ - **6 registrations across 4 events**: 1 SessionStart + 3 PreToolUse (Bash / Edit / Write matchers) + 1 PreCompact + 1 Stop. Each entry uses `type: command`, `timeout: 30` (seconds, per Claude Code docs), and the unified `agileflow hook ...` invocation.
202
+ - **`installPlugins`** now calls `writeClaudeCodeSettings(projectRoot)` when `ide=claude-code` and `removeClaudeCodeSettings(projectRoot)` otherwise. Switching IDEs cleans up stale entries; if AgileFlow was the only owner, the settings.json file is removed entirely.
203
+ - **24 new tests** for the settings.json writer (entry detection, merge, unmerge, file lifecycle, malformed input handling, idempotency, atomicity) plus 2 integration tests for ide-gated registration. Suite: **227 → 251 passing across 19 files**.
204
+ - **End-to-end verified**: `agileflow setup --yes --ide claude-code` writes `.claude/settings.json` with all 6 entries; `npx agileflow hook SessionStart` invokes the orchestrator; switching to `--ide cursor` deletes the settings file. **Phase 3 is functionally complete** — a fresh Claude Code session in a v4-installed project now actually invokes our hooks.
454
205
 
455
- ## [2.59.0] - 2025-12-27
206
+ The 6 standalone dispatchers under `bin/hooks/*.js` are now legacy. The unified `agileflow hook` subcommand replaces them for production use; they're kept as direct-invocation aliases (useful for testing without npx). A future cleanup can prune them.
456
207
 
457
- ### Changed
458
- - Automated CHANGELOG.md updates in release script
208
+ ### Phase 4 first slice — agileflow-story-writer skill
459
209
 
460
- ## [2.58.0] - 2025-12-27
210
+ The first real user-visible content lands in v4. After install, a Claude Code session in the user's project will discover `agileflow-story-writer` and activate it on prompts about features / user stories / acceptance criteria.
461
211
 
462
- ### Added
463
- - Auto-update configuration via `/agileflow:configure --enable=autoupdate`
212
+ - **`content/plugins/core/skills/agileflow-story-writer/SKILL.md`** — ported from v3 to the v4 frontmatter v2 schema:
213
+ - `description` follows the `Use when...` policy
214
+ - explicit `triggers.keywords` (`user story`, `as a user, i want`, `feature request`, `implement this`, etc.)
215
+ - `triggers.exclude` keywords damp false activations on `bedtime story` / `tell me a story`
216
+ - `triggers.priority: 50` for collision resolution
217
+ - `learns.enabled: true` with `_learnings/story-writer.yaml` for self-improvement
218
+ - `<!-- {{PERSONALIZATION_BLOCK}} -->` placeholder for future personalization injection (Phase 5)
219
+ - Body kept ≤ 200 lines per the §G validator policy
220
+ - **`content/plugins/core/plugin.yaml`** updated to declare the skill in `provides.skills`.
221
+ - **`src/runtime/ide/claude-code-skills.js`** — mirror logic that copies enabled plugin skills from `.agileflow/plugins/<id>/skills/<skill>/` into `.claude/skills/<skill>/` (Claude Code's canonical discovery location). Pruning is conservative: only `agileflow-*` prefixed dirs are removed when orphaned, leaving third-party skill dirs alone. Copy (not symlink) for Windows portability.
222
+ - **`installPlugins`** now mirrors skills when `ide=claude-code` AND `capabilities.skills`, and unmirrors them on switch-away. Result object gains `skillsMirrored` and `skillsPruned` arrays.
223
+ - **10 new tests across mirror module + 2 integration tests**: collect-skills, mirror to fresh dir, replace stale content, prune orphans, leave third-party alone, unmirror, ENOENT-safe; integration: install puts skill in `.claude/skills/`, IDE switch removes it. Suite: **251 → 261 passing across 20 files**.
224
+ - **End-to-end verified**: `agileflow setup --yes --plugins core --ide claude-code` lands `agileflow-story-writer` at `.claude/skills/agileflow-story-writer/SKILL.md` with the v4 frontmatter intact. Switching to `--ide cursor` removes it.
464
225
 
465
- ### Fixed
466
- - Metadata merge for nested `updates` object in configure script
226
+ ### Phase 3+4 logic-audit fixes
467
227
 
468
- ## [2.57.0] - 2025-12-27
228
+ 5 logic analyzers (edge / flow / invariant / race / type) on Phase 3 and Phase 4 code surfaced 7 actionable findings. All addressed before more skills land.
469
229
 
470
- ### Added
471
- - Auto-update system with configurable check frequency
472
- - Update notifications in welcome message and status line
473
- - Changelog display after updates showing what's new
474
- - `/agileflow:whats-new` command for viewing full changelog
230
+ - **`mirrorClaudeCodeSkills`** — wrapped per-skill copy in try/catch. ENOENT (missing source dir) is now reported as `result.skipped` and the install continues; other errors still propagate. `copyDir` was also reordered to read source before creating dest, so a missing source no longer leaves an empty mirror dir behind.
231
+ - **`installPlugins` validate-before-write**: step 7 now builds the hook manifest in memory and runs it through `normalizeManifest` BEFORE writing. A plugin contributing an invalid hook (unknown event, missing matcher on a non-tool event, etc.) now errors at install time with `Hook manifest validation failed: ...` instead of silently registering hook dispatchers in `.claude/settings.json` against an unparseable manifest.
232
+ - **`mergeManagedHooks` / `unmanageHooks`** — added `!Array.isArray(existing.hooks)` guard so an array-shaped `hooks: []` in user settings.json doesn't get spread into an object with numeric keys (which would corrupt the file). Treats it as missing and rebuilds clean.
233
+ - **`agileflow hook` subcommand** validates the event name against `VALID_EVENTS` and requires `--matcher` for tool-related events. Misspellings (`SesionStart`) and missing matchers now exit 1 with a clear error and the list of valid events. Previously these silently no-op'd the entire hook chain.
234
+ - **`removeClaudeCodeSettings`** — no longer swallows arbitrary read errors. ENOENT and SyntaxError are still tolerated by the inner `readExisting` (treated as empty), but EACCES / EIO now propagate so we don't lie about removing entries from an unreadable file.
235
+ - **`InstallResult` JSDoc** — extended typedef from 7 to 12 properties to match the actual return shape (`hookManifestPath`, `settingsPath`, `skillsMirrored`, `skillsPruned`, `skillsSkipped`, `ide`).
236
+ - **`collectPluginSkills`** — rejects entries with empty-string `id` or `dir`. An empty `dir: ""` would previously path-join to the plugin root and produce wrong copies.
237
+ - **5 new tests** + 2 modified for new return shapes: array-shaped hooks treated correctly, empty-string skill specs filtered, missing-source mirror reports skipped without crashing, validate-before-write rejects malformed manifest before settings.json is touched. Suite: **261 → 266 passing**.
475
238
 
476
- ## [2.56.0] - 2025-12-27
239
+ End-to-end verified: `npx agileflow hook SesionStart` (typo) prints `unknown event "SesionStart"` with the full valid list and exits 1; `npx agileflow hook PreToolUse` (no `--matcher`) prints `event "PreToolUse" requires --matcher` and exits 1; the valid case still exits 0.
477
240
 
478
- ### Added
479
- - Dynamic IDE discovery with auto-detection from handlers
480
- - OpenAI Codex CLI now appears in setup IDE selection
241
+ ### Phase 4 — Core scope content-complete (4 skills)
481
242
 
482
- ### Changed
483
- - Replaced hardcoded IDE list with dynamic loading from IdeManager
243
+ The Core plugin now ships every skill its name promised: Epic, Story, Status, Babysit. After install on `claude-code`, a fresh Claude Code session discovers and activates all four through their explicit triggers.
484
244
 
485
- ## [2.55.0] - 2025-12-26
245
+ - **`agileflow-epic-planner`** — ported from v3. Breaks large features into milestoned epics with success metrics, dependencies, and risks. Triggers on `epic`, `initiative`, `multi-month project`, `break this down`, `phased rollout`. Excludes `epic fail` / `epic novel` / `mythological epic`. Writes `docs/05-epics/EP-####-<slug>.md`. Self-improving learnings enabled.
246
+ - **`agileflow-story-writer`** — already shipped in the previous slice. v2.0.0, learns enabled.
247
+ - **`agileflow-status-updater`** — NEW for v4 (no v3 source). Applies status mutations (story `ready` → `in_progress` → `review` → `complete` / `blocked`; epic `PLANNING` → `ACTIVE` → `COMPLETED` / `ON_HOLD`) from natural-language progress updates. Strict transition table; diff-first / YES-NO confirmation; mutates `docs/09-agents/status.json` + the relevant story / epic file frontmatter. Triggers on `mark this story`, `i finished`, `i'm blocked on`, `move to in progress`. Excludes `status quo` / `status report`.
248
+ - **`agileflow-babysit-mentor`** — NEW for v4, the v3 `/agileflow:babysit` command reincarnated as a skill. End-to-end mentor pattern: pick → plan → delegate → verify → commit. Codifies the 6 operating rules (smart `AskUserQuestion`, plan mode, expert delegation, task tracking, logic audit, flow audit). Triggers on `walk me through`, `help me ship this`, `mentor mode`, `babysit`. Excludes `babysit my kid`. Self-improving learnings enabled.
249
+ - **`content/plugins/core/plugin.yaml`** updated to declare all 4 skills.
250
+ - **End-to-end verified**: `agileflow setup --yes --plugins core --ide claude-code` lands all 4 skills under `.claude/skills/`. Each carries v4 frontmatter v2 (name, version, category, description with "Use when…", explicit triggers with priority + exclude). Suite still **266 passing** (skills are content, not new code paths — covered by existing integration tests).
486
251
 
487
- ### Changed
488
- - Consolidated code improvements and debugging enhancements
252
+ **Phase 4 Core scope**: complete. Phase 5 (skill validator + CI + alpha.1 publish) is next. Other plugins (`audit`, `ads`, `seo`, `council`, etc.) populate after the validator is wired so they ship through a quality gate.
489
253
 
490
- ## [2.54.0] - 2025-12-26
254
+ ### Phase 4 — Core gains a 5th skill: agileflow-adr
491
255
 
492
- ### Added
493
- - Test suites for generators, npm-utils, and version-checker
256
+ - **`agileflow-adr`** — ported from v3 to v4 frontmatter v2. Captures architectural / technical decisions as MADR-format ADRs in `docs/03-decisions/`. Triggers on `architecture decision`, `which database`, `rest vs graphql`, `sql vs nosql`, `which framework`, `record this decision`, `trade-off between`, `adr for`. Excludes `decision tree` (algorithmic) and `decisive moment`. Self-improving learnings enabled. Bundled directly in Core because architectural decisions surface constantly during implementation; making the user remember to enable a separate plugin is friction at exactly the wrong moment.
257
+ - **`content/plugins/core/plugin.yaml`** updated to declare 5 skills.
258
+ - **End-to-end verified**: `agileflow setup --yes --plugins core --ide claude-code` lands all 5 skills under `.claude/skills/`. 7 files created (5 × SKILL.md + plugin.yaml + session-welcome.js). Suite still 266 passing.
494
259
 
495
- ## [2.53.0] - 2025-12-25
260
+ ### Phase 5 slice 1 — Skill validator + `agileflow doctor`
496
261
 
497
- ### Added
498
- - Session manager for parallel session detection
499
- - Warning when multiple Claude sessions active
262
+ The skills-only direction makes activation triggers load-bearing. Typos in descriptions, missing required fields, and (worst) keyword collisions across skills silently degrade reliability. The validator catches all of those before alpha.1 ships.
500
263
 
501
- ## [2.52.0] - 2025-12-24
264
+ - **`src/runtime/skills/validator.js`** — per-skill checks: YAML frontmatter parses; required fields present (`name`, `version`, `category`, `description`, `triggers`); `description` starts with `Use when …` (forces activation-trigger framing); `triggers.keywords` is non-empty array of strings; `triggers.priority` is integer in [0, 100]; `triggers.exclude` (if present) is array of strings; `version` is valid semver; SKILL.md body ≤ 400 lines; if `learns.enabled === true`, the `_learnings/<id>.yaml` file should exist (warning, not error — created on first correction); skills-only policy: warn if `provides.command` is set.
265
+ - **Cross-skill collision detection** — `(keyword, priority)` pairs must be unique across the loaded skill set. Case-insensitive; trims whitespace. Two skills sharing `('story', 50)` will both be flagged with the offending keyword and priority and the colliding ids listed.
266
+ - **`validateSkillsAtRoot(dir)`** — walks every immediate-child directory looking for `SKILL.md`, runs per-skill validation, then cross-skill collision detection across the loaded set. Failed-load errors are captured as issues per skill, not as fatal exceptions, so one broken SKILL.md doesn't blow up a doctor pass.
267
+ - **`agileflow doctor`** — replaces the Phase 1 stub with a real validator that runs four sections in order: plugin manifests (validatePluginSet), skills (validateSkillsAtRoot for every bundled plugin + cross-plugin collision), aggregated hook manifest (the same validate-before-write check installPlugins does), installed hook manifest (if `.agileflow/hook-manifest.yaml` exists in cwd). Each section prints `ok` or a list of `ERROR`/`WARN` lines with the skill/plugin id. Exit 0 on green, exit 1 if any errors.
268
+ - **Doctor output against bundled content**: `Plugin manifests: ok`, `Skills: 4 warnings (missing _learnings files — created on first correction)`, `Hook manifest (aggregated): ok`, `Hook manifest (installed): ok`. All 5 Core skills pass strict validation.
269
+ - **20 new tests** across `validator.test.js`: per-field validation, semver, body-length, collision detection (positive case, no-collision case, different priorities, case-insensitive), the validateSkillsAtRoot loader (missing dir → empty, broken skill → captured issue, multi-skill → cross-check). Suite: **266 → 286 passing across 21 files**.
502
270
 
503
- ### Added
504
- - PreCompact hook for context preservation during compacts
271
+ ### Phase 5 slices 2 + 3 — CI + publish setup
505
272
 
506
- ## [2.51.0] - 2025-12-23
273
+ The path from "green test suite" to "user can `npm i agileflow@alpha`" closes here.
507
274
 
508
- ### Added
509
- - OpenAI Codex CLI integration
275
+ - **`.github/workflows/v4-ci.yml`** — runs on push or PR that touches `apps/cli/**` on the `v4` branch. Steps: `npm install --legacy-peer-deps` (works around the v3 apps/docs peer-dep conflict), `npx vitest run` in `apps/cli/`, `node bin/agileflow.js doctor`, plus two scratch-dir smoke tests (`setup --yes --ide claude-code` lands `.claude/{settings.json,skills/agileflow-story-writer/SKILL.md}` + `hook-manifest.yaml` + file index; `setup --yes --ide cursor` correctly does NOT write any of those).
276
+ - **`.github/workflows/v4-publish.yml`** triggered by tags matching `agileflow-v4.*`. Re-runs tests + doctor, verifies the tag version matches `apps/cli/package.json`, and publishes with `npm publish --access public --tag alpha`. Uses the `NPM_TOKEN` secret. Tag prefix `agileflow-v4-` keeps v4 tags distinct from any v3 tags that may still land on `main`.
277
+ - **`apps/cli/package.json`** gained:
278
+ - `prepublishOnly` script that runs `vitest run && node bin/agileflow.js doctor` so a red doctor blocks `npm publish` locally too.
279
+ - `doctor` script (alias for `node bin/agileflow.js doctor`).
280
+ - **`apps/cli/LICENSE`** copied from repo root so the published tarball is self-contained per the `files: [..., "LICENSE", ...]` declaration.
281
+ - **`apps/cli/PUBLISHING.md`** — quick-reference for shipping a release. Covers prerequisites, versioning convention (`4.0.0-alpha.N` → `4.0.0-beta.N` → `4.0.0-rc.N` → `4.0.0`), local dry-run, CI tag-push flow, manual emergency flow, alpha → latest promotion, and rollback (`npm deprecate` / `npm unpublish`).
282
+ - **Verified `npm pack --dry-run`** from `apps/cli/`: ships 52 files (bin/, src/, content/, README.md, LICENSE, CHANGELOG.md) — 65 KB tarball, 210 KB unpacked. Tests + vitest config + node_modules excluded.
510
283
 
511
- ## [2.50.0] - 2025-12-22
284
+ **To ship `4.0.0-alpha.1` now**:
512
285
 
513
- ### Added
514
- - Windsurf and Cursor IDE support
286
+ ```bash
287
+ cd apps/cli && npm version 4.0.0-alpha.1 --no-git-tag-version
288
+ git commit -am "release(v4): 4.0.0-alpha.1"
289
+ git tag agileflow-v4.0.0-alpha.1
290
+ git push origin v4 agileflow-v4.0.0-alpha.1
291
+ # .github/workflows/v4-publish.yml does the rest.
292
+ ```
515
293
 
516
- ## [2.45.0] - 2025-12-20
294
+ ### Not yet implemented
517
295
 
518
- ### Added
519
- - Auto-archival system for completed stories
296
+ - Plugin registry & loader (Phase 2).
297
+ - Installer sync engine (Phase 2 — ported from v3 `installer.js:349-455`).
298
+ - Content placeholder injector (Phase 2).
299
+ - Hook meta-orchestrator + 6 dispatchers (Phase 3).
300
+ - Core plugin content — Epic, Story, Status, Babysit (Phase 4).
301
+ - Skill validator, personalization injector, CI, npm publish (Phase 5).
520
302
 
521
- ## [2.40.0] - 2025-12-18
303
+ ### Removed from v3
522
304
 
523
- ### Added
524
- - Hooks system for event-driven automation
525
- - Status line integration for Claude Code
526
-
527
- [Unreleased]: https://github.com/projectquestorg/AgileFlow/compare/v2.60.0...HEAD
528
- [2.60.0]: https://github.com/projectquestorg/AgileFlow/compare/v2.59.0...v2.60.0
529
- [2.59.0]: https://github.com/projectquestorg/AgileFlow/compare/v2.58.0...v2.59.0
530
- [2.58.0]: https://github.com/projectquestorg/AgileFlow/compare/v2.57.0...v2.58.0
531
- [2.57.0]: https://github.com/projectquestorg/AgileFlow/compare/v2.56.0...v2.57.0
532
- [2.56.0]: https://github.com/projectquestorg/AgileFlow/compare/v2.55.0...v2.56.0
533
- [2.55.0]: https://github.com/projectquestorg/AgileFlow/compare/v2.54.0...v2.55.0
534
- [2.54.0]: https://github.com/projectquestorg/AgileFlow/compare/v2.53.0...v2.54.0
535
- [2.53.0]: https://github.com/projectquestorg/AgileFlow/compare/v2.52.0...v2.53.0
536
- [2.52.0]: https://github.com/projectquestorg/AgileFlow/compare/v2.51.0...v2.52.0
537
- [2.51.0]: https://github.com/projectquestorg/AgileFlow/compare/v2.50.0...v2.51.0
538
- [2.50.0]: https://github.com/projectquestorg/AgileFlow/compare/v2.45.0...v2.50.0
539
- [2.45.0]: https://github.com/projectquestorg/AgileFlow/compare/v2.40.0...v2.45.0
540
- [2.40.0]: https://github.com/projectquestorg/AgileFlow/releases/tag/v2.40.0
305
+ - `packages/cli/` renamed to `agileflow-v3-legacy` on the `v4` branch (workspace collision prevention). v3 continues to ship from `main`.