@nathapp/nax 0.28.0 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/CHANGELOG.md +13 -2
  2. package/dist/nax.js +72691 -0
  3. package/package.json +12 -4
  4. package/src/cli/config.ts +3 -1
  5. package/src/config/defaults.ts +1 -0
  6. package/src/config/schemas.ts +1 -0
  7. package/src/config/types.ts +1 -0
  8. package/src/context/builder.ts +10 -1
  9. package/src/prompts/sections/role-task.ts +4 -2
  10. package/src/review/runner.ts +6 -1
  11. package/src/version.ts +2 -1
  12. package/.claude/rules/01-project-conventions.md +0 -34
  13. package/.claude/rules/02-test-architecture.md +0 -39
  14. package/.claude/rules/03-test-writing.md +0 -58
  15. package/.claude/rules/04-forbidden-patterns.md +0 -29
  16. package/.claude/settings.json +0 -15
  17. package/.githooks/pre-commit +0 -16
  18. package/.gitlab-ci.yml +0 -103
  19. package/.mcp.json +0 -8
  20. package/BRIEF.md +0 -140
  21. package/CLAUDE.md +0 -143
  22. package/US-007-IMPLEMENTATION.md +0 -139
  23. package/biome.json +0 -14
  24. package/bun.lock +0 -163
  25. package/bunfig.toml +0 -12
  26. package/docker-compose.test.yml +0 -15
  27. package/docs/20260216-fix-plan-context-review.md +0 -56
  28. package/docs/20260216-relentless-vs-ngent-comparison.md +0 -208
  29. package/docs/20260216-v02-plan.md +0 -136
  30. package/docs/20260216-v02-review.md +0 -685
  31. package/docs/20260217-dogfood-findings.md +0 -56
  32. package/docs/20260217-p2-plus-plan.md +0 -117
  33. package/docs/20260217-partial-fixes-plan.md +0 -62
  34. package/docs/20260217-plan-analyze-spec.md +0 -117
  35. package/docs/20260217-post-impl-review.md +0 -1137
  36. package/docs/20260217-quick-wins-plan.md +0 -66
  37. package/docs/20260217-split-runner-plan.md +0 -75
  38. package/docs/20260217-v03-impl-plan.md +0 -80
  39. package/docs/20260217-v03-post-impl-review.md +0 -589
  40. package/docs/20260217-v04-impl-plan.md +0 -86
  41. package/docs/20260217-v05-post-impl-review.md +0 -850
  42. package/docs/20260217-v06-post-impl-review.md +0 -817
  43. package/docs/20260218-adr003-port-plan.md +0 -151
  44. package/docs/20260218-review-adr003-verification.md +0 -175
  45. package/docs/20260219-fix-plan-bug16-19.md +0 -79
  46. package/docs/20260219-fix-plan-bug20-22.md +0 -114
  47. package/docs/20260219-plan-llm-routing.md +0 -116
  48. package/docs/20260219-review-bug20-22-fixes.md +0 -135
  49. package/docs/20260219-routing-baseline-keyword.md +0 -63
  50. package/docs/20260220-plan-structured-logging-p1.md +0 -80
  51. package/docs/20260220-plan-structured-logging-p2.md +0 -37
  52. package/docs/20260220-review-llm-routing.md +0 -180
  53. package/docs/20260220-review-post-fix-llm-routing.md +0 -70
  54. package/docs/20260221-fix-plan-relevantfiles-split.md +0 -101
  55. package/docs/20260221-fix-plan-routing-mode.md +0 -125
  56. package/docs/20260221-review-v0.9-implementation.md +0 -379
  57. package/docs/20260222-fix-plan-v091-routing-isolation.md +0 -197
  58. package/docs/20260223-fix-plan-prompt-audit.md +0 -62
  59. package/docs/20260224-nax-roadmap-phases.md +0 -189
  60. package/docs/20260225-phase2-llm-service-layer.md +0 -401
  61. package/docs/20260225-review-v0.10.1.md +0 -187
  62. package/docs/20260303-v010-implementation-plan.md +0 -165
  63. package/docs/20260304-review-nax.md +0 -492
  64. package/docs/CLAUDE.md.bak +0 -191
  65. package/docs/ROADMAP.md +0 -390
  66. package/docs/SPEC-rectification.md +0 -0
  67. package/docs/SPEC.md +0 -324
  68. package/docs/US-001-plugin-loading-verification.md +0 -152
  69. package/docs/adr/ADR-005-implementation-plan.md +0 -655
  70. package/docs/adr/ADR-005-pipeline-re-architecture.md +0 -464
  71. package/docs/architecture-analysis.md +0 -1076
  72. package/docs/bugs/BUG-21-escalation-null-attempts.md +0 -48
  73. package/docs/bugs-from-dogfood-run-c.md +0 -243
  74. package/docs/code-review-20260228.md +0 -612
  75. package/docs/code-review-v0.15.0.md +0 -629
  76. package/docs/hook-lifecycle-test-plan.md +0 -149
  77. package/docs/releases/v0.11.0-and-earlier.md +0 -20
  78. package/docs/releases/v0.12.0.md +0 -15
  79. package/docs/releases/v0.13.0.md +0 -14
  80. package/docs/releases/v0.14.0.md +0 -20
  81. package/docs/releases/v0.14.1.md +0 -36
  82. package/docs/releases/v0.14.2.md +0 -51
  83. package/docs/releases/v0.14.3.md +0 -174
  84. package/docs/releases/v0.14.4.md +0 -94
  85. package/docs/releases/v0.15.0.md +0 -502
  86. package/docs/releases/v0.15.1.md +0 -170
  87. package/docs/releases/v0.15.3.md +0 -193
  88. package/docs/specs/bug-039-orphan-processes.md +0 -131
  89. package/docs/specs/bug-040-review-rectification.md +0 -82
  90. package/docs/specs/bug-041-cross-story-test-isolation.md +0 -88
  91. package/docs/specs/bug-042-verifier-failure-capture.md +0 -117
  92. package/docs/specs/bun-pty-migration.md +0 -171
  93. package/docs/specs/central-run-registry.md +0 -116
  94. package/docs/specs/feat-010-smart-runner-git-history.md +0 -96
  95. package/docs/specs/feat-011-file-context-strategy.md +0 -73
  96. package/docs/specs/feat-012-tdd-writer-tier.md +0 -79
  97. package/docs/specs/feat-013-test-after-review.md +0 -89
  98. package/docs/specs/feat-014-heartbeat-observability.md +0 -127
  99. package/docs/specs/status-file-consolidation.md +0 -93
  100. package/docs/specs/status-file-v0.10.1.md +0 -812
  101. package/docs/specs/trigger-completion.md +0 -145
  102. package/docs/specs/verification-architecture-v2.md +0 -343
  103. package/docs/tdd/strategies.md +0 -97
  104. package/docs/v0.10-global-config.md +0 -206
  105. package/docs/v0.10-plugin-system.md +0 -415
  106. package/docs/v0.10-prompt-optimizer.md +0 -234
  107. package/docs/v0.3-spec.md +0 -244
  108. package/docs/v0.4-spec.md +0 -140
  109. package/docs/v0.5-spec.md +0 -237
  110. package/docs/v0.6-spec.md +0 -371
  111. package/docs/v0.7-spec.md +0 -177
  112. package/docs/v0.8-llm-routing.md +0 -206
  113. package/docs/v0.8-structured-logging.md +0 -132
  114. package/docs/v0.9.3-prompt-audit.md +0 -112
  115. package/examples/plugins/console-reporter/index.test.ts +0 -207
  116. package/examples/plugins/console-reporter/index.ts +0 -110
  117. package/memory/topic/feat-010-baseref.md +0 -28
  118. package/memory/topic/feat-013-test-after-deprecation.md +0 -22
  119. package/nax/config.json +0 -154
  120. package/nax/features/bug-039-medium/prd.json +0 -45
  121. package/nax/features/bugfix-v0171/prd.json +0 -52
  122. package/nax/features/central-run-registry/prd.json +0 -105
  123. package/nax/features/config-management/prd.json +0 -108
  124. package/nax/features/config-management/progress.txt +0 -5
  125. package/nax/features/diagnose/acceptance.test.ts +0 -414
  126. package/nax/features/diagnose/prd.json +0 -41
  127. package/nax/features/nax-compliance/prd.json +0 -52
  128. package/nax/features/nax-compliance/progress.txt +0 -1
  129. package/nax/features/orchestration-fixes/prd.json +0 -89
  130. package/nax/features/orchestration-fixes/progress.txt +0 -1
  131. package/nax/features/plugin-integration/US-007-VERIFICATION.md +0 -259
  132. package/nax/features/plugin-integration/prd.json +0 -208
  133. package/nax/features/plugin-integration/progress.txt +0 -5
  134. package/nax/features/post-rearch-bugfix/prd.json +0 -137
  135. package/nax/features/precheck/prd.json +0 -205
  136. package/nax/features/precheck/progress.txt +0 -15
  137. package/nax/features/prompt-builder/prd.json +0 -152
  138. package/nax/features/prompt-builder/progress.txt +0 -3
  139. package/nax/features/review-quality/prd.json +0 -55
  140. package/nax/features/routing-persistence/prd.json +0 -104
  141. package/nax/features/routing-persistence/progress.txt +0 -1
  142. package/nax/features/smart-test-runner/plan.md +0 -7
  143. package/nax/features/smart-test-runner/prd.json +0 -203
  144. package/nax/features/smart-test-runner/progress.txt +0 -13
  145. package/nax/features/smart-test-runner/spec.md +0 -7
  146. package/nax/features/smart-test-runner/tasks.md +0 -8
  147. package/nax/features/status-file-consolidation/prd.json +0 -106
  148. package/nax/features/structured-logging/prd.json +0 -199
  149. package/nax/features/trigger-completion/prd.json +0 -150
  150. package/nax/features/trigger-completion/progress.txt +0 -7
  151. package/nax/features/unlock/prd.json +0 -36
  152. package/nax/features/v0.18.3-execution-reliability/prd.json +0 -80
  153. package/nax/features/v0.18.3-execution-reliability/progress.txt +0 -3
  154. package/nax/features/v0.19.0-hardening/plan.md +0 -7
  155. package/nax/features/v0.19.0-hardening/prd.json +0 -84
  156. package/nax/features/v0.19.0-hardening/progress.txt +0 -7
  157. package/nax/features/v0.19.0-hardening/spec.md +0 -18
  158. package/nax/features/v0.19.0-hardening/tasks.md +0 -8
  159. package/nax/features/verify-v2/prd.json +0 -79
  160. package/nax/features/verify-v2/progress.txt +0 -3
  161. package/nax/status.json +0 -36
  162. package/test/COVERAGE-GAPS.md +0 -333
  163. package/test/e2e/cm-003-default-view.test.ts +0 -195
  164. package/test/e2e/plan-analyze-run.test.ts +0 -902
  165. package/test/helpers/helpers.test.ts +0 -295
  166. package/test/helpers/timeout.ts +0 -42
  167. package/test/integration/US-002-TEST-SUMMARY.md +0 -107
  168. package/test/integration/US-003-TEST-SUMMARY.md +0 -149
  169. package/test/integration/US-004-TEST-SUMMARY.md +0 -106
  170. package/test/integration/US-005-TEST-SUMMARY.md +0 -138
  171. package/test/integration/US-007-TEST-SUMMARY.md +0 -100
  172. package/test/integration/cli/agent-validation.test.ts +0 -439
  173. package/test/integration/cli/cli-config-default-edge-cases.test.ts +0 -223
  174. package/test/integration/cli/cli-config-default-view.test.ts +0 -230
  175. package/test/integration/cli/cli-config-diff.test.ts +0 -461
  176. package/test/integration/cli/cli-config-prompts-explain.test.ts +0 -74
  177. package/test/integration/cli/cli-config.test.ts +0 -737
  178. package/test/integration/cli/cli-diagnose.test.ts +0 -595
  179. package/test/integration/cli/cli-logs.test.ts +0 -346
  180. package/test/integration/cli/cli-plugins.test.ts +0 -679
  181. package/test/integration/cli/cli-precheck.test.ts +0 -372
  182. package/test/integration/cli/cli-run-headless.test.ts +0 -174
  183. package/test/integration/cli/cli.test.ts +0 -76
  184. package/test/integration/cli/precheck-integration.test.ts +0 -476
  185. package/test/integration/cli/precheck-orchestrator.test.ts +0 -247
  186. package/test/integration/cli/precheck.test.ts +0 -806
  187. package/test/integration/config/config-loader.test.ts +0 -266
  188. package/test/integration/config/config.test.ts +0 -444
  189. package/test/integration/config/merger.test.ts +0 -466
  190. package/test/integration/config/paths.test.ts +0 -52
  191. package/test/integration/config/security-loader.test.ts +0 -83
  192. package/test/integration/context/context-integration.test.ts +0 -703
  193. package/test/integration/context/context-path-security.test.ts +0 -173
  194. package/test/integration/context/context-provider-injection.test.ts +0 -507
  195. package/test/integration/context/context-verification-integration.test.ts +0 -296
  196. package/test/integration/context/s5-greenfield-fallback.test.ts +0 -298
  197. package/test/integration/execution/execution-isolation.test.ts +0 -143
  198. package/test/integration/execution/execution.test.ts +0 -634
  199. package/test/integration/execution/feature-status-write.test.ts +0 -302
  200. package/test/integration/execution/parallel.test.ts +0 -251
  201. package/test/integration/execution/prd-pause.test.ts +0 -205
  202. package/test/integration/execution/prd-resolvers.test.ts +0 -186
  203. package/test/integration/execution/progress.test.ts +0 -34
  204. package/test/integration/execution/runner-batching.test.ts +0 -682
  205. package/test/integration/execution/runner-config-plugins.test.ts +0 -462
  206. package/test/integration/execution/runner-escalation.test.ts +0 -561
  207. package/test/integration/execution/runner-fixes.test.ts +0 -400
  208. package/test/integration/execution/runner-plugin-integration.test.ts +0 -544
  209. package/test/integration/execution/runner-queue-and-attempts.test.ts +0 -476
  210. package/test/integration/execution/status-file-integration.test.ts +0 -289
  211. package/test/integration/execution/status-file.test.ts +0 -380
  212. package/test/integration/execution/status-writer.test.ts +0 -447
  213. package/test/integration/execution/story-id-in-events.test.ts +0 -274
  214. package/test/integration/interaction/interaction-chain-pipeline.test.ts +0 -476
  215. package/test/integration/pipeline/hooks.test.ts +0 -363
  216. package/test/integration/pipeline/pipeline-acceptance.test.ts +0 -303
  217. package/test/integration/pipeline/pipeline-events.test.ts +0 -476
  218. package/test/integration/pipeline/pipeline.test.ts +0 -660
  219. package/test/integration/pipeline/reporter-lifecycle.test.ts +0 -862
  220. package/test/integration/pipeline/verify-stage.test.ts +0 -286
  221. package/test/integration/plan/analyze-integration.test.ts +0 -262
  222. package/test/integration/plan/analyze-scanner.test.ts +0 -132
  223. package/test/integration/plan/logger.test.ts +0 -461
  224. package/test/integration/plan/plan.test.ts +0 -157
  225. package/test/integration/plugins/config-integration.test.ts +0 -173
  226. package/test/integration/plugins/config-resolution.test.ts +0 -523
  227. package/test/integration/plugins/loader.test.ts +0 -644
  228. package/test/integration/plugins/plugins-registry.test.ts +0 -747
  229. package/test/integration/plugins/validator.test.ts +0 -564
  230. package/test/integration/prompts/pb-004-migration.test.ts +0 -523
  231. package/test/integration/review/review-config-commands.test.ts +0 -320
  232. package/test/integration/review/review-config-schema.test.ts +0 -117
  233. package/test/integration/review/review-plugin-integration.test.ts +0 -729
  234. package/test/integration/review/review.test.ts +0 -150
  235. package/test/integration/routing/plugin-routing-advanced.test.ts +0 -461
  236. package/test/integration/routing/plugin-routing-core.test.ts +0 -527
  237. package/test/integration/routing/routing-stage-bug-021.test.ts +0 -275
  238. package/test/integration/routing/routing-stage-greenfield.test.ts +0 -287
  239. package/test/integration/tdd/tdd-cleanup.test.ts +0 -246
  240. package/test/integration/tdd/tdd-orchestrator-core.test.ts +0 -565
  241. package/test/integration/tdd/tdd-orchestrator-failureCategory.test.ts +0 -355
  242. package/test/integration/tdd/tdd-orchestrator-fallback.test.ts +0 -311
  243. package/test/integration/tdd/tdd-orchestrator-lite.test.ts +0 -289
  244. package/test/integration/tdd/tdd-orchestrator-prompts.test.ts +0 -260
  245. package/test/integration/tdd/tdd-orchestrator-verdict.test.ts +0 -536
  246. package/test/integration/tmp/headless-test/test.jsonl +0 -30
  247. package/test/integration/verification/test-scanner.test.ts +0 -403
  248. package/test/integration/verification/verification-asset-check.test.ts +0 -143
  249. package/test/integration/worktree/manager.test.ts +0 -218
  250. package/test/integration/worktree/worktree-merge.test.ts +0 -341
  251. package/test/manual/logging-formatter-demo.ts +0 -158
  252. package/test/ui/tui-agent-panel.test.tsx +0 -99
  253. package/test/ui/tui-pty-integration.test.tsx +0 -146
  254. package/test/unit/acceptance.test.ts +0 -187
  255. package/test/unit/agent-stderr-capture.test.ts +0 -147
  256. package/test/unit/agents/claude.test.ts +0 -107
  257. package/test/unit/analyze-classifier.test.ts +0 -216
  258. package/test/unit/analyze.test.ts +0 -224
  259. package/test/unit/auto-detect.test.ts +0 -250
  260. package/test/unit/cli-status-project-level.test.ts +0 -283
  261. package/test/unit/cli-status.test.ts +0 -418
  262. package/test/unit/commands/common.test.ts +0 -321
  263. package/test/unit/commands/logs.test.ts +0 -458
  264. package/test/unit/commands/runs.test.ts +0 -303
  265. package/test/unit/commands/unlock.test.ts +0 -320
  266. package/test/unit/config/defaults.test.ts +0 -70
  267. package/test/unit/config/quality-commands-schema.test.ts +0 -72
  268. package/test/unit/config/regression-gate-schema.test.ts +0 -160
  269. package/test/unit/config/smart-runner-flag.test.ts +0 -250
  270. package/test/unit/constitution-generators.test.ts +0 -161
  271. package/test/unit/constitution.test.ts +0 -210
  272. package/test/unit/context/context-autodetect.test.ts +0 -297
  273. package/test/unit/context/context-build.test.ts +0 -575
  274. package/test/unit/context/context-coverage.test.ts +0 -236
  275. package/test/unit/context/context-error.test.ts +0 -93
  276. package/test/unit/context/context-estimate-tokens.test.ts +0 -201
  277. package/test/unit/context/context-format.test.ts +0 -302
  278. package/test/unit/context/context-isolation.test.ts +0 -267
  279. package/test/unit/context/context-sort.test.ts +0 -93
  280. package/test/unit/context/context-story.test.ts +0 -108
  281. package/test/unit/context/prior-failures.test.ts +0 -463
  282. package/test/unit/context.test.ts +0 -1726
  283. package/test/unit/cost.test.ts +0 -231
  284. package/test/unit/crash-recovery.test.ts +0 -309
  285. package/test/unit/escalation.test.ts +0 -127
  286. package/test/unit/execution/lifecycle/run-completion.test.ts +0 -240
  287. package/test/unit/execution/lifecycle/run-regression.test.ts +0 -420
  288. package/test/unit/execution/pid-registry.test.ts +0 -241
  289. package/test/unit/execution/sequential-executor.test.ts +0 -235
  290. package/test/unit/execution/sfc-004-dead-code-cleanup.test.ts +0 -89
  291. package/test/unit/execution/structured-failure.test.ts +0 -415
  292. package/test/unit/execution-logging-stderr.test.ts +0 -157
  293. package/test/unit/execution-stage.test.ts +0 -123
  294. package/test/unit/fix-generator.test.ts +0 -276
  295. package/test/unit/formatters.test.ts +0 -468
  296. package/test/unit/greenfield.test.ts +0 -180
  297. package/test/unit/hooks/shell-security.test.ts +0 -40
  298. package/test/unit/interaction/auto-plugin.test.ts +0 -162
  299. package/test/unit/interaction/human-review-trigger.test.ts +0 -165
  300. package/test/unit/interaction-network-failures.test.ts +0 -390
  301. package/test/unit/interaction-plugins.test.ts +0 -472
  302. package/test/unit/logging/formatter.test.ts +0 -456
  303. package/test/unit/merge.test.ts +0 -269
  304. package/test/unit/metrics/aggregator.test.ts +0 -164
  305. package/test/unit/metrics/tracker.test.ts +0 -186
  306. package/test/unit/metrics.test.ts +0 -276
  307. package/test/unit/optimizer/noop.optimizer.test.ts +0 -125
  308. package/test/unit/optimizer/rule-based.optimizer.test.ts +0 -358
  309. package/test/unit/pipeline/event-bus.test.ts +0 -105
  310. package/test/unit/pipeline/routing-partial-override.test.ts +0 -121
  311. package/test/unit/pipeline/runner-retry.test.ts +0 -89
  312. package/test/unit/pipeline/stages/autofix.test.ts +0 -97
  313. package/test/unit/pipeline/stages/completion-review-gate.test.ts +0 -218
  314. package/test/unit/pipeline/stages/execution-ambiguity.test.ts +0 -311
  315. package/test/unit/pipeline/stages/execution-merge-conflict.test.ts +0 -218
  316. package/test/unit/pipeline/stages/rectify.test.ts +0 -101
  317. package/test/unit/pipeline/stages/regression-stage.test.ts +0 -69
  318. package/test/unit/pipeline/stages/review.test.ts +0 -201
  319. package/test/unit/pipeline/stages/routing-idempotence.test.ts +0 -139
  320. package/test/unit/pipeline/stages/routing-initial-complexity.test.ts +0 -321
  321. package/test/unit/pipeline/stages/routing-persistence.test.ts +0 -380
  322. package/test/unit/pipeline/stages/verify.test.ts +0 -267
  323. package/test/unit/pipeline/subscribers/events-writer.test.ts +0 -227
  324. package/test/unit/pipeline/subscribers/hooks.test.ts +0 -84
  325. package/test/unit/pipeline/subscribers/interaction.test.ts +0 -313
  326. package/test/unit/pipeline/subscribers/registry.test.ts +0 -149
  327. package/test/unit/pipeline/subscribers/reporters.test.ts +0 -90
  328. package/test/unit/pipeline/verify-smart-runner.test.ts +0 -345
  329. package/test/unit/prd-auto-default.test.ts +0 -291
  330. package/test/unit/prd-failure-category.test.ts +0 -177
  331. package/test/unit/prd-get-next-story.test.ts +0 -215
  332. package/test/unit/precheck/checks-warnings.test.ts +0 -114
  333. package/test/unit/precheck-checks.test.ts +0 -841
  334. package/test/unit/precheck-story-size-gate.test.ts +0 -288
  335. package/test/unit/precheck-types.test.ts +0 -143
  336. package/test/unit/prompts/builder.test.ts +0 -258
  337. package/test/unit/prompts/loader.test.ts +0 -355
  338. package/test/unit/prompts/sections/conventions.test.ts +0 -30
  339. package/test/unit/prompts/sections/isolation.test.ts +0 -35
  340. package/test/unit/prompts/sections/role-task.test.ts +0 -40
  341. package/test/unit/prompts/sections/sections.test.ts +0 -238
  342. package/test/unit/prompts/sections/story.test.ts +0 -45
  343. package/test/unit/prompts/sections/verdict.test.ts +0 -58
  344. package/test/unit/prompts.test.ts +0 -476
  345. package/test/unit/queue.test.ts +0 -237
  346. package/test/unit/rectification.test.ts +0 -285
  347. package/test/unit/registry.test.ts +0 -288
  348. package/test/unit/review/runner.test.ts +0 -117
  349. package/test/unit/routing/content-hash.test.ts +0 -99
  350. package/test/unit/routing/routing-stability.test.ts +0 -208
  351. package/test/unit/routing/strategies/llm.test.ts +0 -306
  352. package/test/unit/routing-advanced.test.ts +0 -313
  353. package/test/unit/routing-core.test.ts +0 -341
  354. package/test/unit/routing-strategies.test.ts +0 -440
  355. package/test/unit/storyid-events.test.ts +0 -213
  356. package/test/unit/tdd-verdict.test.ts +0 -492
  357. package/test/unit/test-output-parser.test.ts +0 -377
  358. package/test/unit/ui/tui-controls.test.ts +0 -335
  359. package/test/unit/ui/tui-cost-and-pty.test.ts +0 -190
  360. package/test/unit/ui/tui-layout.test.ts +0 -379
  361. package/test/unit/ui/tui-stories.test.ts +0 -333
  362. package/test/unit/unit-isolation.test.ts +0 -135
  363. package/test/unit/utils/git.test.ts +0 -50
  364. package/test/unit/utils/path-security.test.ts +0 -47
  365. package/test/unit/utils-helpers.test.ts +0 -318
  366. package/test/unit/verdict.test.ts +0 -325
  367. package/test/unit/verification/orchestrator-types.test.ts +0 -54
  368. package/test/unit/verification/orchestrator.test.ts +0 -66
  369. package/test/unit/verification/smart-runner-config.test.ts +0 -163
  370. package/test/unit/verification/smart-runner-discovery.test.ts +0 -354
  371. package/test/unit/verification/smart-runner.test.ts +0 -262
  372. package/test/unit/verification/strategies/acceptance.test.ts +0 -33
  373. package/test/unit/verification/strategies/regression.test.ts +0 -87
  374. package/test/unit/verification/strategies/scoped.test.ts +0 -100
  375. package/test/unit/worktree-manager.test.ts +0 -159
  376. package/tsconfig.json +0 -27
@@ -1,191 +0,0 @@
1
- # @nathapp/nax — AI Coding Agent Orchestrator
2
-
3
- Standalone CLI (Bun + TypeScript) that orchestrates AI coding agents with smart model routing, three-session TDD, and lifecycle hooks. NOT an OpenClaw skill — independent npm package.
4
-
5
- **CLI command:** `nax`
6
-
7
- ## Commands
8
-
9
- ```bash
10
- bun test # Run all tests (bun:test)
11
- bun run typecheck # TypeScript type checking (tsc --noEmit)
12
- bun run lint # Biome linter (src/ bin/)
13
- bun run dev # Run CLI locally
14
- bun run build # Bundle for distribution
15
- ```
16
-
17
- ## Architecture
18
-
19
- ```
20
- bin/nax.ts # CLI entry point (commander)
21
- src/
22
- agents/ # AgentAdapter interface + implementations (claude.ts)
23
- cli/ # CLI commands (init, run, features, agents, status)
24
- config/ # NaxConfig schema + layered loader + validation (global → project)
25
- execution/ # Main orchestration loop (the core)
26
- hooks/ # Lifecycle hooks (hooks.json → shell commands + NAX_* env)
27
- pipeline/ # Pipeline orchestration utilities
28
- prd/ # PRD/user-story loader, ordering, completion tracking
29
- queue/ # Queue manager for multi-agent parallel execution
30
- routing/ # Complexity classifier + test strategy decision tree
31
- tdd/ # Three-session TDD types + file isolation checker + orchestrator
32
- test/ # Bun test files (*.test.ts)
33
- ```
34
-
35
- ### Key Concepts
36
-
37
- - **Complexity Routing**: Tasks classified as simple/medium/complex/expert → mapped to model tiers (cheap/standard/premium)
38
- - **Three-Session TDD**: Session 1 (test-writer, only test files) → Session 2 (implementer, only source files) → Session 3 (verifier, auto-approves legitimate fixes)
39
- - **Isolation Enforcement**: Git diff verification between TDD sessions — test-writer can't touch source, implementer can't touch tests
40
- - **Hook System**: `hooks.json` maps lifecycle events (on-start, on-complete, on-pause, on-error, on-story-start, on-story-end) to shell commands
41
- - **Layered Config**: `~/.nax/config.json` (global) merged with `<project>/nax/config.json` (project overrides)
42
-
43
- ### Pipeline Architecture (v0.3 target)
44
-
45
- The execution loop should be refactored from a monolithic `run()` into composable pipeline stages. This enables adding/removing/reordering stages without editing a 600+ line function.
46
-
47
- ```typescript
48
- // src/pipeline/types.ts
49
- interface PipelineStage {
50
- name: string; // unique stage identifier
51
- enabled: (ctx: PipelineContext) => boolean; // skip if false
52
- execute: (ctx: PipelineContext) => Promise<StageResult>; // do the work
53
- }
54
-
55
- interface PipelineContext {
56
- config: NaxConfig;
57
- prd: PRD;
58
- story: UserStory; // current story (or batch leader)
59
- stories: UserStory[]; // batch (length 1 for single)
60
- routing: RoutingResult;
61
- workdir: string;
62
- featureDir?: string;
63
- hooks: HooksConfig;
64
- // accumulated through stages
65
- constitution?: string;
66
- contextMarkdown?: string;
67
- prompt?: string;
68
- agentResult?: AgentResult;
69
- reviewResult?: ReviewResult;
70
- }
71
-
72
- type StageResult =
73
- | { action: 'continue' } // proceed to next stage
74
- | { action: 'skip'; reason: string } // skip this story
75
- | { action: 'fail'; reason: string } // mark story failed
76
- | { action: 'escalate' } // retry with higher tier
77
- | { action: 'pause'; reason: string } // pause execution (queue command)
78
- ```
79
-
80
- **Default pipeline stages (in order):**
81
- ```typescript
82
- const defaultPipeline: PipelineStage[] = [
83
- queueCheckStage, // check for PAUSE/ABORT/SKIP commands
84
- routingStage, // classify complexity → model tier
85
- constitutionStage, // load & inject project constitution
86
- contextStage, // build file context from relevant sources
87
- promptStage, // assemble final prompt from story + context + constitution
88
- executionStage, // spawn agent session (single, batch, or TDD)
89
- verifyStage, // check agent output, tests pass
90
- reviewStage, // post-impl quality gate (typecheck/lint/test)
91
- completionStage, // mark story done, fire hooks, log progress
92
- ];
93
- ```
94
-
95
- **Design rules:**
96
- - Each stage is a separate file: `src/pipeline/stages/<name>.ts`
97
- - Stages communicate via `PipelineContext` — no side-channel state
98
- - The pipeline runner (`src/pipeline/runner.ts`) iterates stages, handles StageResult actions
99
- - The outer loop (load PRD → pick story → run pipeline → repeat) stays in `src/execution/runner.ts` but delegates per-story work to the pipeline
100
- - Hooks fire inside stages (e.g., `completionStage` fires `on-story-complete`), not in the outer loop
101
- - Config can override stage order or disable stages: `config.pipeline.stages`
102
-
103
- ## Code Style
104
-
105
- - Bun-native APIs preferred (Bun.file, Bun.write, Bun.spawn, Bun.sleep)
106
- - Each module directory: `types.ts` (interfaces), implementation files, `index.ts` (barrel exports)
107
- - Immutable patterns — avoid mutation
108
- - No classes unless wrapping stateful adapters (like ClaudeCodeAdapter)
109
- - Functional style for pure logic (routing, classification, isolation checks)
110
- - Biome for formatting and linting
111
-
112
- ## Testing
113
-
114
- - Test framework: `bun:test` (describe/test/expect)
115
- - Test files: `test/*.test.ts`
116
- - Test naming: `test/<module>.test.ts`
117
- - All routing/classification logic must have unit tests
118
- - Isolation checker must have unit tests
119
- - Run `bun test` before committing — all tests must pass
120
-
121
- ## File Conventions
122
-
123
- - Max ~400 lines per file, split if larger
124
- - Types/interfaces in dedicated `types.ts` per module
125
- - Barrel exports via `index.ts` — import from module path, not deep paths
126
- - Config defaults co-located with schema (`DEFAULT_CONFIG` in `schema.ts`)
127
-
128
- ## Current Status (v0.2.0-dev)
129
-
130
- **Tests:** 222 passing across 16 files, 504 assertions
131
- **Last Review:** 2026-02-17 — Grade B+ (82/100) — see `docs/20260217-post-impl-review.md`
132
-
133
- ### Implemented (v0.1 → v0.2)
134
- - [x] Agent adapter interface + Claude Code implementation
135
- - [x] Config schema + layered loader + validation
136
- - [x] Hook lifecycle system + **command injection prevention** (SEC-1 ✅)
137
- - [x] Complexity-based routing + test strategy decision tree
138
- - [x] TDD isolation checker + three-session TDD orchestrator
139
- - [x] PRD loader/saver with dependency-aware ordering
140
- - [x] Execution runner with cost tracking
141
- - [x] Queue manager + **PAUSE/ABORT/SKIP commands** (v0.2 Phase 2 ✅)
142
- - [x] CLI: init, run, analyze, features create/list, agents, status
143
- - [x] **Story-scoped context extraction from PRD** (v0.2 Phase 1 ✅)
144
- - [x] **Explicit 3-tier escalation chain** fast→balanced→powerful (v0.2 Phase 3 ✅)
145
- - [x] **Story batching for simple stories** with --no-batch flag (v0.2 Phase 4 ✅)
146
- - [x] **Path validation + bounds checking** (SEC-2 ✅) — `src/config/path-security.ts`
147
- - [x] **Agent installation check + retry with exponential backoff** (BUG-1 partial ✅)
148
- - [x] **Atomic queue file handling** — rename-before-read pattern (BUG-2 ✅)
149
- - [x] **PRD size limits** — `maxStoriesPerFeature` config + validation (MEM-1 partial ✅)
150
- - [x] **Improved cost estimation** — structured output parsing + confidence (BUG-3 partial ✅)
151
- - [x] **Story dependency validation** in analyze command (BUG-6 ✅)
152
- - [x] **Hook timeout messages** — clear timeout vs failure distinction (BUG-5 ✅)
153
-
154
- ### Remaining Issues (from review, by priority)
155
-
156
- #### P1 — Reliability
157
- - [ ] **MEM-1 (partial):** Lazy loading for large PRDs not implemented — only size limit validation exists. No memory pressure detection or streaming JSON parsing.
158
- - [ ] **PERF-1:** O(n²) batch story selection — not yet optimized with pre-computed eligible stories.
159
- - [ ] **BUG-3 (partial):** Cost estimation still falls back to duration-based guessing when structured output unavailable. No per-story confidence scores.
160
-
161
- #### P2 — Quality
162
- - [ ] **ENH-1:** JSDoc coverage ~40% — `src/agents/claude.ts` (1 JSDoc), `bin/nax.ts` (1 JSDoc) are underserved. Most exported functions in runner.ts have docs but `routeTask()`, `buildContext()`, `runThreeSessionTdd()` lack usage examples.
163
- - [ ] **TYPE-1:** Config loader still uses `as unknown as` double-casting (2 instances). No Zod runtime validation.
164
- - [ ] **BUG-4:** Batch failure still escalates only first story. No config option for batch-wide escalation.
165
- - [ ] **ENH-2:** No agent capability negotiation — adapters don't declare supported tiers/features.
166
- - [ ] **PERF-2:** PRD reloaded every iteration — no dirty flag optimization.
167
- - [ ] **ENH-3:** Context builder doesn't load file content — stories only, no source code context.
168
-
169
- #### P3 — Polish
170
- - [ ] **STYLE-1:** `runner.ts` is 901 lines (was 779, grew with fixes). Needs splitting into prompts/batching/queue-handler/escalation modules.
171
- - [ ] **ENH-4:** No progress bar or ETA display — only line-by-line iteration logging.
172
- - [ ] **TYPE-2:** `QueueCommand` still mixed string literals + object — not discriminated union.
173
- - [ ] **ENH-5:** No dry-run mode for three-session TDD.
174
- - [ ] **PERF-3:** Token estimation still uses `Math.ceil(text.length / 3)` — no improved heuristic.
175
-
176
- #### P4 — Consistency
177
- - [ ] **STYLE-2:** Inconsistent error handling patterns (throw vs return null vs log warning).
178
- - [ ] **STYLE-3:** Magic numbers not extracted as named constants.
179
-
180
- ## Git
181
-
182
- - Conventional commits: `feat:`, `fix:`, `refactor:`, `test:`, `docs:`, `chore:`
183
- - Run `bun test && bun run typecheck` before committing
184
- - Keep commits atomic — one logical change per commit
185
-
186
- ## Important
187
-
188
- - This is a Bun project — do NOT use Node.js APIs when Bun equivalents exist
189
- - Agent adapters spawn external processes — always handle timeouts and cleanup
190
- - Never hardcode API keys — agents use their own auth (e.g., Claude Code uses ANTHROPIC_API_KEY from env)
191
- - The execution runner has `[TODO]` markers for unimplemented agent spawning — that's the next priority
package/docs/ROADMAP.md DELETED
@@ -1,390 +0,0 @@
1
- # nax Roadmap
2
-
3
- > **Authoritative source** for planned and shipped versions.
4
- > Specs in `memory/` are detailed references. GitLab issues are supplementary.
5
- > Full release notes → `docs/releases/`
6
-
7
- ---
8
-
9
- ## v0.18.0 — Orchestration Quality ✅
10
-
11
- **Theme:** Fix execution bugs and improve orchestration reliability
12
- **Status:** ✅ Shipped (2026-03-03)
13
-
14
- ### Bugfixes (Priority)
15
- - [x] ~~**BUG-016:** Hardcoded 120s timeout in verify stage → read from config~~
16
- - [x] ~~**BUG-017:** `run.complete` not emitted on SIGTERM → emit in crash handler~~
17
- - [x] ~~**BUG-018:** Test-writer spawns on every retry → skip when tests exist (`story.attempts > 0`)~~
18
- - [x] ~~**BUG-019:** Misleading TIMEOUT output preview → separate TIMEOUT vs TEST_FAILURE messaging~~
19
- - [x] ~~**BUG-020:** Missing storyId in JSONL events → audit all emitters~~
20
- - [x] ~~**BUG-021:** `Task classified` log shows raw LLM result, not final routing after cache/config override → log final routing only~~
21
- - [x] ~~**BUG-022:** Story interleaving wastes iterations — after failure, `getNextStory()` picks next pending story instead of retrying the failed one → prioritize current story retries before moving on~~
22
- - [x] ~~**BUG-023:** Agent failure doesn't log exitCode/stderr → add to `execution.Agent session failed` event~~
23
- - [x] ~~**BUG-025:** `needsHumanReview` doesn't trigger interactive plugin in headless mode → wire to interaction chain or suppress the log~~
24
-
25
- ---
26
-
27
- ## v0.18.1 — Type Safety + CI Pipeline ✅
28
-
29
- **Theme:** Fix all TypeScript/lint errors, establish CI pipeline
30
- **Status:** ✅ Shipped (2026-03-03)
31
-
32
- ### TypeScript Fixes (60 errors across 21 files)
33
- - [x] ~~**TS-001:** Fix context module exports (13 errors)~~
34
- - [x] ~~**TS-002:** Fix config/command type safety (12 errors)~~
35
- - [x] ~~**TS-003:** Fix review/verification types (9 errors)~~
36
- - [x] ~~**TS-004:** Fix escalation PRD type construction (4 errors)~~
37
- - [x] ~~**TS-005:** Fix misc types (6 errors)~~
38
- - [x] ~~**LINT-001:** Run biome check --fix + manual review~~
39
-
40
- ### CI Pipeline (new)
41
- - [x] `.gitlab-ci.yml` — stages: test → release → notify
42
- - [x] Image: `nathapp/node-bun:22.21.0-1.3.9-alpine` (test/release), `gkci/node:22.14.0-alpine-ci` (notify)
43
- - [x] `before_script`: apk add git python3 make g++, safe.directory, git identity
44
- - [x] Test env: `NAX_SKIP_PRECHECK=1 bun test test/ --timeout=60000`
45
- - [x] CI skip guards for env-sensitive tests (claude binary, PID checks, subprocess integration)
46
- - [x] Fixed `checkClaudeCLI()` ENOENT crash — try/catch around Bun.spawn
47
- - [x] Release trigger: `[run-release]` in commit message on master
48
- - [x] Runner requirement: 8GB shared runner (`saas-linux-small-amd64`)
49
- - [x] **Result: 1952 pass, 56 skip, 0 fail**
50
-
51
- ---
52
-
53
- ## v0.18.2 — Smart Test Runner + Routing Fix ✅
54
-
55
- **Theme:** Scope verify to changed files only + fix routing override
56
- **Status:** ✅ Shipped (2026-03-03)
57
-
58
- ### Smart Test Runner
59
- - [x] ~~After agent implementation, run `git diff --name-only` to get changed source files~~
60
- - [x] ~~Map source → test files by naming convention (`src/foo/bar.ts` → `test/unit/foo/bar.test.ts`)~~
61
- - [x] ~~Run only related tests for verify (instead of full suite)~~
62
- - [x] ~~Fallback to full suite when mapping yields no test files~~
63
- - [x] ~~Config flag `execution.smartTestRunner: true` (default: true) to opt out~~
64
- - [x] ~~Result: verify drops from ~125s to ~10-20s for typical single-file fixes~~
65
-
66
- ### Bun PTY Migration (BUN-001)
67
- - [x] ~~Replace `node-pty` with `Bun.spawn` (piped stdio) — shipped in v0.18.5~~
68
-
69
-
70
- ---
71
-
72
- ## v0.18.3 — Execution Reliability ✅
73
-
74
- **Theme:** Fix execution pipeline bugs (escalation, routing, review), structured failure context, and Smart Runner enhancement
75
- **Status:** ✅ Shipped (2026-03-04)
76
- **Spec:** [docs/specs/verification-architecture-v2.md](specs/verification-architecture-v2.md) (Phase 1)
77
-
78
- ### Bugfixes — Completed
79
- - [x] **BUG-026:** Regression gate timeout → accept scoped pass + warn (not escalate). Config: `regressionGate.acceptOnTimeout: true`.
80
- - [x] **BUG-028:** Routing cache ignores escalation tier — `clearCacheForStory(storyId)` in `llm.ts`, called on tier escalation in both `preIterationTierCheck()` and `handleTierEscalation()`.
81
-
82
- ### Structured Failure Context — Completed
83
- - [x] **SFC-001:** `StructuredFailure` type with `TestFailureContext[]` + `priorFailures?: StructuredFailure[]` on `UserStory`. Populated on verify, regression, rectification, and escalation failures.
84
- - [x] **SFC-002:** Format `priorFailures` into agent prompt at priority 95 via `createPriorFailuresContext()` in `context/builder.ts`.
85
-
86
- ### Bugfixes — Completed (Round 2)
87
- - [x] **BUG-029:** Escalation resets story to `pending` → bypasses BUG-022 retry priority. After escalation, `getNextStory()` picks the next pending story instead of retrying the escalated one. **Location:** `src/prd/index.ts:getNextStory()`. **Fix:** Recognize escalated-pending stories in Priority 1 (e.g. check `story.routing.modelTier` changed, or use `"retry-pending"` status).
88
- - [x] **BUG-030:** Review lint/typecheck failure → hard `"fail"`, no rectification or retry. `review.ts:92` returns `{ action: "fail" }` → `markStoryFailed()` permanently. Lint errors are auto-fixable but story is killed with zero retry. **Fix:** Return `"escalate"` for lint/typecheck failures (or add review-rectification loop). Reserve `"fail"` for plugin reviewer rejection only.
89
- - [x] **BUG-032:** Routing stage overrides escalated `modelTier` with complexity-derived tier. `routing.ts:43` always runs `complexityToModelTier()` even when `story.routing.modelTier` was set by escalation → escalated tier silently ignored. BUG-013 fix (`applyCachedRouting`) runs too late. **Fix:** Skip `complexityToModelTier()` when `story.routing.modelTier` is explicitly set.
90
-
91
- ### STR-007: Smart Test Runner Enhancement — Completed
92
- - [x] Configurable `testFilePatterns` in config (default: `test/**/*.test.ts`)
93
- - [x] `testFileFallback` config option: `"import-grep"` | `"full-suite"` (default: `"import-grep"`)
94
- - [x] 3-pass test discovery: path-convention → import-grep (grep test files for changed module name) → full-suite
95
- - [x] Config schema update: `execution.smartTestRunner` becomes object `{ enabled, testFilePatterns, fallback }` (backward compat: boolean coerced)
96
-
97
- ---
98
-
99
- ## v0.18.4 — Routing Stability ✅
100
-
101
- **Theme:** Fix routing classifier consistency and LLM routing reliability
102
- **Status:** ✅ Shipped (2026-03-04)
103
-
104
- ### Bugfixes
105
- - [x] **BUG-031:** Keyword fallback classifier gives inconsistent strategy across retries for same story. `priorErrors` text shifts keyword classification. **Fix:** Keyword classifier should only use original story fields; or lock `story.routing.testStrategy` once set.
106
- - [x] **BUG-033:** LLM routing has no retry on timeout — single 15s attempt, then keyword fallback. **Fix:** Add `routing.llm.retries` config (default: 1) with backoff. Raise default timeout to 30s for batch routing.
107
-
108
- ---
109
-
110
- ## v0.18.5 — Bun PTY Migration ✅
111
-
112
- **Theme:** Remove native `node-pty` dependency, Bun-native subprocess for agent sessions
113
- **Status:** ✅ Shipped (2026-03-04)
114
- **Spec:** [docs/specs/bun-pty-migration.md](specs/bun-pty-migration.md)
115
-
116
- ### BUN-001: Replace node-pty with Bun.spawn
117
- - [x] ~~All sub-items complete — `claude.ts` + `usePty.ts` migrated to `Bun.spawn`, `node-pty` removed from `package.json`, CI cleaned up~~
118
-
119
- ---
120
-
121
- ## v0.23.0 — Status File Consolidation ✅
122
-
123
- **Theme:** Auto-write status.json to well-known paths, align readers, remove dead options
124
- **Status:** ✅ Shipped (2026-03-07)
125
- **Spec:** [docs/specs/status-file-consolidation.md](specs/status-file-consolidation.md)
126
- **Pre-requisite for:** v0.24.0 (Central Run Registry)
127
-
128
- ### Stories
129
- - [x] ~~**SFC-001:** Auto-write project-level status — remove `--status-file` flag, always write to `<workdir>/nax/status.json`~~
130
- - [x] ~~**BUG-043:** Fix scoped test command construction + add `testScoped` config with `{{files}}` template~~
131
- - [x] ~~**BUG-044:** Log scoped and full-suite test commands at info level in verify stage~~
132
- - [x] ~~**SFC-002:** Write feature-level status on run end — copy final snapshot to `<workdir>/nax/features/<feature>/status.json`~~
133
- - [x] ~~**SFC-003:** Align status readers — `nax status` + `nax diagnose` read from correct paths~~
134
- - [x] ~~**SFC-004:** Clean up dead code — remove `--status-file` option, `.nax-status.json` references~~
135
-
136
- ---
137
-
138
-
139
- ## v0.28.0 — Prompt Builder
140
-
141
- **Theme:** Unified, user-overridable prompt architecture replacing 11 scattered functions
142
- **Status:** 🔲 Planned
143
- **Spec:** `nax/features/prompt-builder/prd.json`
144
-
145
- ### Stories
146
- - [ ] **PB-001:** PromptBuilder class with layered section architecture + fluent API
147
- - [ ] **PB-002:** Typed sections: isolation, role-task, story, verdict, conventions
148
- - [ ] **PB-003:** Default templates + user override loader + config schema (`prompts.overrides`)
149
- - [ ] **PB-004:** Migrate all 6 user-facing prompt call sites to PromptBuilder
150
- - [ ] **PB-005:** Document `prompts` config in `nax config --explain` + precheck validation
151
-
152
- ---
153
-
154
- ## v0.27.1 — Pipeline Observability ✅ Shipped (2026-03-08)
155
-
156
- **Theme:** Fix redundant verify stage + improve pipeline skip log messages
157
- **Status:** ✅ Shipped (2026-03-08)
158
-
159
- ### Bugfixes
160
- - [x] **BUG-054:** Skip pipeline verify stage when TDD full-suite gate already passed — `runFullSuiteGate()` now returns `boolean`, propagated via `ThreeSessionTddResult` → `executionStage` → `ctx.fullSuiteGatePassed` → `verifyStage.enabled()` returns false with reason "not needed (full-suite gate already passed)"
161
- - [x] **BUG-055:** Pipeline skip messages now differentiate "not needed" from "disabled". Added optional `skipReason(ctx)` to `PipelineStage` interface; `rectify`, `autofix`, `regression`, `verify` stages all provide context-aware reasons
162
-
163
- ## v0.27.0 — Review Quality ✅ Shipped (2026-03-08)
164
-
165
- **Theme:** Fix review stage reliability — dirty working tree false-positive, stale precheck, dead config fields
166
- **Status:** ✅ Shipped (2026-03-08)
167
- **Spec:** `nax/features/review-quality/prd.json`
168
-
169
- ### Stories
170
- - [x] **RQ-001:** Assert clean working tree before running review typecheck/lint (BUG-049)
171
- - [x] **RQ-002:** Fix `checkOptionalCommands` precheck to use correct config resolution path (BUG-050)
172
- - [x] **RQ-003:** Consolidate dead `quality.commands.typecheck/lint` into review resolution chain (BUG-051)
173
-
174
- ---
175
-
176
- ## v0.26.0 — Routing Persistence ✅ Shipped (2026-03-08)
177
-
178
- - **RRP-001:** Persist initial routing classification to `prd.json` on first classification
179
- - **RRP-002:** Add `initialComplexity` to `StoryRouting` and `StoryMetrics` for accurate reporting
180
- - **RRP-003:** Add `contentHash` to `StoryRouting` for staleness detection — stale cached routing is re-classified
181
- - **RRP-004:** Unit tests for routing persistence, idempotence, staleness, content hash, metrics
182
- - **BUG-052:** Replace `console.warn` with structured JSONL logger in `review/runner.ts` and `optimizer/index.ts`
183
-
184
- ---
185
-
186
- ## v0.25.0 — Trigger Completion ✅ Shipped (2026-03-07)
187
-
188
- **Theme:** Wire all 8 unwired interaction triggers, 3 missing hook events, and add plugin integration tests
189
- **Status:** ✅ Shipped (2026-03-07)
190
- **Spec:** [docs/specs/trigger-completion.md](specs/trigger-completion.md)
191
-
192
- ### Stories
193
- - [x] **TC-001:** Wire `cost-exceeded` + `cost-warning` triggers — fire at 80%/100% of cost limit in sequential-executor.ts
194
- - [x] **TC-002:** Wire `max-retries` trigger — fire on permanent story failure via `story:failed` event in wireInteraction
195
- - [x] **TC-003:** Wire `security-review`, `merge-conflict`, `pre-merge` triggers — review rejection, git conflict detection, pre-completion gate
196
- - [x] **TC-004:** Wire `story-ambiguity` + `review-gate` triggers — ambiguity keyword detection, per-story human checkpoint
197
- - [x] **TC-005:** Wire missing hook events — `on-resume`, `on-session-end`, `on-error` to pipeline events
198
- - [x] **TC-006:** Auto plugin + Telegram + Webhook integration tests — mock LLM/network, cover approve/reject/HMAC flows
199
-
200
- ---
201
-
202
- ## v0.24.0 — Central Run Registry ✅
203
-
204
- **Theme:** Global run index across all projects — single source of truth for all nax run history
205
- **Status:** ✅ Shipped (2026-03-07)
206
- **Spec:** [docs/specs/central-run-registry.md](specs/central-run-registry.md)
207
-
208
- ### Stories
209
- - [x] ~~**CRR-000:** `src/pipeline/subscribers/events-writer.ts` — `wireEventsWriter()`, writes lifecycle events to `~/.nax/events/<project>/events.jsonl` (machine-readable completion signal for watchdog/CI)~~
210
- - [x] ~~**CRR-001:** `src/pipeline/subscribers/registry.ts` — `wireRegistry()` subscriber, listens to `run:started`, writes `~/.nax/runs/<project>-<feature>-<runId>/meta.json` (path pointers only — no data duplication, no symlinks)~~
211
- - [x] ~~**CRR-002:** `src/commands/runs.ts` — `nax runs` CLI, reads `meta.json` → resolves live `status.json` from `statusPath`, displays table (project, feature, status, stories, duration, date). Filters: `--project`, `--last`, `--status`~~
212
- - [x] ~~**CRR-003:** `nax logs --run <runId>` — resolve run from global registry via `eventsDir`, stream logs from any directory~~
213
-
214
- ---
215
-
216
- ## v0.21.0 — Process Reliability & Observability ✅
217
-
218
- **Theme:** Kill orphan processes cleanly, smart-runner precision, test strategy quality
219
- **Status:** ✅ Shipped (2026-03-06)
220
-
221
- ### Shipped
222
- - [x] **BUG-039 (simple):** Timeouts for review/runner.ts lint/typecheck, git.ts, executor.ts timer leak
223
- - [x] **BUG-039 (medium):** runOnce() SIGKILL follow-up + pidRegistry.unregister() in finally; LLM stream drain (stdout/stderr cancel) before proc.kill() on timeout
224
- - [x] **FEAT-010:** baseRef tracking — capture HEAD per attempt, `git diff <baseRef>..HEAD` in smart-runner (precise, no cross-story pollution)
225
- - [x] **FEAT-011:** Path-only context for oversized files (>10KB) — was silently dropped, now agent gets a path hint
226
- - [x] **FEAT-013:** Deprecated `test-after` from auto routing — simple/medium stories now default to `three-session-tdd-lite`
227
- - [x] ~~**BUG-041:**~~ Won't fix — superseded by FEAT-010
228
- - [x] ~~**FEAT-012:**~~ Won't fix — balanced tier sufficient for test-writer
229
-
230
- ### → v0.22.1 Pipeline Re-Architecture ✅ Shipped (2026-03-07)
231
- **ADR:** [docs/adr/ADR-005-pipeline-re-architecture.md](adr/ADR-005-pipeline-re-architecture.md)
232
- **Plan:** [docs/adr/ADR-005-implementation-plan.md](adr/ADR-005-implementation-plan.md)
233
-
234
- **Theme:** Eliminate ad-hoc orchestration, consolidate 4 scattered verification paths into single orchestrator, add event-bus-driven hooks/plugins/interaction, new stages (rectify, autofix, regression), post-run pipeline SSOT.
235
-
236
- - [x] **Phase 1:** VerificationOrchestrator + Pipeline Event Bus (additive, no behavior change)
237
- - [x] **Phase 2:** New stages — `rectify`, `autofix`, `regression` + `retry` stage action
238
- - [x] **Phase 3:** Event-bus subscribers for hooks, reporters, interaction (replace 20+ scattered call sites)
239
- - [x] **Phase 5:** Post-run pipeline SSOT — `deferred-regression` stage, tier escalation into `iteration-runner`, `runAcceptanceLoop` → `runPipeline(postRunPipeline)`
240
-
241
- **Resolved:**
242
- - [x] **BUG-040:** Lint/typecheck auto-repair → `autofix` stage + `quality.commands.lintFix/formatFix`
243
- - [x] **BUG-042:** Verifier failure capture → unified `VerifyResult` with `failures[]` always populated
244
- - [x] **FEAT-014:** Heartbeat observability → Pipeline Event Bus with typed events
245
- - [x] **BUG-026:** Regression gate triggers full retry → targeted `rectify` stage with `retry` action
246
- - [x] **BUG-028:** Routing cache ignores escalation tier → cache key includes tier
247
-
248
- **Test results:** 2264 pass, 12 skip, 1 fail (pre-existing disk space flaky)
249
-
250
- ---
251
-
252
- ## v0.20.0 — Verification Architecture v2 ✅
253
-
254
- **Theme:** Eliminate duplicate test runs, deferred regression gate, structured escalation context
255
- **Status:** ✅ Shipped (2026-03-06)
256
- **Spec:** [docs/specs/verification-architecture-v2.md](specs/verification-architecture-v2.md)
257
-
258
- ### Shipped
259
- - [x] Pipeline verify stage is single test execution point (Smart Test Runner)
260
- - [x] Removed scoped re-test in `post-verify.ts` (duplicate eliminated)
261
- - [x] Review stage: typecheck + lint only — `checks: ["typecheck", "lint"]`
262
- - [x] Deferred regression gate — `src/execution/lifecycle/run-regression.ts`
263
- - [x] Reverse Smart Test Runner mapping: test → source → responsible story
264
- - [x] Targeted rectification per story with full failure context
265
- - [x] `regressionGate.mode: "deferred" | "per-story" | "disabled"` config
266
- - [x] `maxRectificationAttempts` config (default: 2)
267
- - [x] BUG-037: verify output shows last 20 lines (failures, not prechecks)
268
-
269
- ---
270
-
271
- ## v0.19.0 — Hardening & Compliance ✅
272
-
273
- **Theme:** Security hardening, _deps injection pattern, Node.js API removal
274
- **Status:** ✅ Shipped (2026-03-04)
275
- **Spec:** [docs/specs/verification-architecture-v2.md](specs/verification-architecture-v2.md) (Phase 2)
276
-
277
- ### Shipped
278
- - [x] Pipeline verify stage is the single test execution point (Smart Test Runner)
279
- - [x] Remove scoped re-test in `post-verify.ts` (duplicate of pipeline verify)
280
- - [x] Review stage runs typecheck + lint only — remove `review.commands.test` execution
281
- - [x] `priorFailures` injected into escalated agent prompts via `context/builder.ts`
282
- - [x] Reverse file mapping for regression attribution
283
-
284
- ---
285
-
286
- ## Shipped
287
-
288
- | Version | Theme | Date | Details |
289
- |:---|:---|:---|:---|
290
- | v0.27.1 | Pipeline Observability | 2026-03-08 | BUG-054: skip redundant verify after full-suite gate; BUG-055: differentiate skip reasons |
291
- | v0.26.0 | Routing Persistence | 2026-03-08 | RRP-001–004: persist initial routing, initialComplexity, contentHash staleness detection, unit tests; BUG-052: structured logger in review/optimizer |
292
- | v0.25.0 | Trigger Completion | 2026-03-07 | TC-001–004: run.complete event, crash recovery, headless formatter, trigger completion |
293
- | v0.24.0 | Central Run Registry | 2026-03-07 | CRR-000–003: events writer, registry, nax runs CLI, nax logs --run global resolution |
294
- | v0.23.0 | Status File Consolidation | 2026-03-07 | SFC-001–004: auto-write status.json, feature-level status, align readers, remove dead code; BUG-043/044: testScoped config + command logging |
295
- | v0.18.1 | Type Safety + CI Pipeline | 2026-03-03 | 60 TS errors + 12 lint errors fixed, GitLab CI green (1952/56/0) |
296
- | v0.22.2 | Routing Stability + SFC-001 | 2026-03-07 | BUG-040 floating outputPromise crash on LLM timeout retry; SFC-001 auto-write status.json |
297
- | v0.22.1 | Pipeline Re-Architecture | 2026-03-07 | VerificationOrchestrator, EventBus, new stages (rectify/autofix/regression/deferred-regression), post-run SSOT. 2264 pass |
298
- | v0.20.0 | Verification Architecture v2 | 2026-03-06 | Deferred regression gate, remove duplicate tests, BUG-037 |
299
- | v0.19.0 | Hardening & Compliance | 2026-03-04 | SEC-1 to SEC-5, BUG-1, Node.js API removal, _deps rollout |
300
- | v0.18.5 | Bun PTY Migration | 2026-03-04 | BUN-001: node-pty → Bun.spawn, CI cleanup, flaky test fix |
301
- | v0.18.4 | Routing Stability | 2026-03-04 | BUG-031 keyword drift, BUG-033 LLM retry, pre-commit hook |
302
- | v0.18.3 | Execution Reliability + Smart Runner | 2026-03-04 | BUG-026/028/029/030/032 + SFC-001/002 + STR-007, all items complete |
303
- | v0.18.2 | Smart Test Runner + Routing Fix | 2026-03-03 | FIX-001 + STR-001–006, 2038 pass/11 skip/0 fail |
304
- | v0.18.0 | Orchestration Quality | 2026-03-03 | BUG-016/017/018/019/020/021/022/023/025 all fixed |
305
- | v0.17.0 | Config Management | 2026-03-02 | CM-001 --explain, CM-002 --diff, CM-003 default view |
306
- | v0.16.4 | Bugfixes: Routing + Env Allowlist | 2026-03-02 | BUG-012/013/014 |
307
- | v0.16.1 | Project Context Generator | 2026-03-01 | `nax generate`, auto-inject, multi-language |
308
- | v0.16.0 | Story Size Gate | 2026-03-01 | [releases/v0.16.0.md](releases/v0.16.0.md) |
309
- | v0.15.3 | Constitution Generator + Runner Interaction Wiring | 2026-02-28 | [releases/v0.15.3.md](releases/v0.15.3.md) |
310
- | v0.15.1 | Architectural Compliance + Security Hardening | 2026-02-28 | [releases/v0.15.1.md](releases/v0.15.1.md) |
311
- | v0.15.0 | Interactive Pipeline | 2026-02-28 | [releases/v0.15.0.md](releases/v0.15.0.md) |
312
- | v0.14.4 | Code Audit Cleanup (MEDIUM findings) | 2026-02-28 | [releases/v0.14.4.md](releases/v0.14.4.md) |
313
- | v0.14.3 | Code Audit Fixes (CRITICAL+HIGH+MEDIUM) | 2026-02-28 | [releases/v0.14.3.md](releases/v0.14.3.md) |
314
- | v0.14.2 | E2E Test Hang Fix | 2026-02-28 | [releases/v0.14.2.md](releases/v0.14.2.md) |
315
- | v0.14.1 | nax diagnose CLI | 2026-02-28 | [releases/v0.14.1.md](releases/v0.14.1.md) |
316
- | v0.14.0 | Failure Resilience | 2026-02-28 | [releases/v0.14.0.md](releases/v0.14.0.md) |
317
- | v0.13.0 | Precheck | 2026-02-27 | [releases/v0.13.0.md](releases/v0.13.0.md) |
318
- | v0.12.0 | Structured Logging | 2026-02-27 | [releases/v0.12.0.md](releases/v0.12.0.md) |
319
- | v0.11.0 and earlier | Plugin Integration, LLM Routing, Core Pipeline | 2026-02-27 | [releases/v0.11.0-and-earlier.md](releases/v0.11.0-and-earlier.md) |
320
-
321
- ---
322
-
323
- ## Backlog
324
-
325
- ### Bugs
326
- - [x] ~~BUG-002: Orphan Claude processes~~
327
- - [x] ~~BUG-003: PRD status "done" not skipped~~
328
- - [x] ~~BUG-004: router.ts crashes on missing tags~~
329
- - [x] ~~BUG-005: Hardcoded `bun run lint` in review~~
330
- - [x] ~~BUG-006: Context auto-detection~~
331
- - [x] ~~BUG-008: E2E tests hang with infinite retry~~
332
- - [x] ~~BUG-009: No cross-story regression check~~
333
- - [x] ~~BUG-010: Greenfield TDD no test files~~
334
- - [x] ~~BUG-011: Escalation tier budget not enforced~~
335
- - [x] ~~BUG-012: Greenfield detection ignores pre-existing test files~~
336
- - [x] ~~BUG-013: Escalation routing not applied in iterations~~
337
- - [x] ~~BUG-014: buildAllowedEnv() strips USER/LOGNAME~~
338
- - [x] ~~**BUG-015:** `loadConstitution()` leaks global `~/.nax/constitution.md` into unit tests — fixed via `skipGlobal: true` in all unit tests~~
339
- - [x] ~~**BUG-027:** `runPrecheck()` always prints to stdout — pollutes test output when called programmatically. Shipped in v0.18.2.~~
340
- - [x] ~~**BUG-028:** Routing cache ignores escalation tier — escalated stories re-run at original tier. Shipped in v0.18.3.~~
341
- - [x] ~~**BUG-016:** Hardcoded 120s timeout in pipeline verify stage → fixed in v0.18.0~~
342
- - [x] ~~**BUG-017:** run.complete not emitted on SIGTERM → fixed in v0.18.0~~
343
- - [x] ~~**BUG-018:** Test-writer wastes ~3min/retry when tests already exist → fixed in v0.18.0~~
344
- - [x] ~~**BUG-019:** Misleading TIMEOUT output preview → fixed in v0.18.0~~
345
- - [x] ~~**BUG-020:** Missing storyId in JSONL events → fixed in v0.18.0~~
346
- - [x] ~~**BUG-021:** `Task classified` log shows raw LLM result, not final routing → fixed in v0.18.0~~
347
- - [x] ~~**BUG-022:** Story interleaving — `getNextStory()` round-robins instead of exhausting retries on current story → fixed in v0.18.0~~
348
- - [x] ~~**BUG-023:** Agent failure silent — no exitCode/stderr in JSONL → fixed in v0.18.0~~
349
- - [x] ~~**BUG-025:** `needsHumanReview` not triggering interactive plugin → fixed in v0.18.0~~
350
- - [x] ~~**BUG-029:** Escalation resets story to `pending`. Fixed.~~
351
- - [x] ~~**BUG-030:** Review lint failure resets. Fixed.~~
352
- - [x] ~~**BUG-031:** Keyword fallback classifier inconsistency. Fixed.~~
353
- - [x] ~~**BUG-032:** Routing stage overrides escalated modelTier. Fixed.~~
354
- - [x] ~~**BUG-033:** LLM routing timeout/retry. Fixed.~~
355
- - [x] ~~**BUG-037:** Test output summary (verify stage) tail. Fixed.~~
356
- - [x] ~~**BUG-038:** smart-runner over-matching. Fixed.~~
357
- - [x] ~~**BUG-043:** Scoped test command construction. Fixed.~~
358
- - [x] ~~**BUG-044:** Scoped/full-suite test command logging. Fixed.~~
359
- - [x] ~~**BUG-049:** Review typecheck runs on dirty working tree. Fixed in v0.27.0.~~
360
- - [x] ~~**BUG-050:** `checkOptionalCommands` precheck uses legacy config fields. Fixed in v0.27.0.~~
361
- - [x] ~~**BUG-051:** `quality.commands.typecheck/lint` are dead config. Fixed in v0.27.0.~~
362
- - [x] ~~**BUG-052:** `console.warn` in runtime pipeline code bypasses JSONL logger. Fixed in v0.26.0.~~
363
- - [x] ~~**BUG-054:** Redundant scoped verify after TDD full-suite gate passes. Fixed in v0.27.1.~~ When rectification gate runs full test suite and passes, the pipeline verify stage re-runs scoped tests (subset). **Fix:** Skip verify if full-suite gate already passed.
364
- - [x] ~~**BUG-055:** Pipeline skip messages conflate "not needed" with "disabled". Fixed in v0.27.1.~~ `runner.ts:54` logs "skipped (disabled)" for all stages where `enabled()` returns false, even if just because tests passed. **Fix:** Differentiate log message.
365
-
366
- ### Features
367
- - [x] ~~`nax unlock` command~~
368
- - [x] ~~Constitution file support~~
369
- - [x] ~~Per-story testStrategy override — v0.18.1~~
370
- - [x] ~~Smart Test Runner — v0.18.2~~
371
- - [ ] **Central Run Registry** — moved to v0.24.0
372
- - [x] ~~**BUN-001:** Bun PTY Migration — replace `node-pty` with `Bun.spawn` (piped stdio). Shipped in v0.18.5.~~
373
- - [ ] **CI-001:** CI Memory Optimization — parallel test sharding for 1GB runners
374
- - [ ] **CI-001:** CI Memory Optimization — parallel test sharding to pass on 1GB runners (currently requires 8GB). Evaluate `bun test --shard` when stable.
375
- - [ ] Cost tracking dashboard
376
- - [ ] npm publish setup
377
- - [ ] `nax diagnose --ai` flag (LLM-assisted, future TBD)
378
- - [ ] **Auto-decompose oversized stories** — When story size gate triggers, offer via interaction chain to auto-decompose using `nax analyse`.
379
- - [ ] **AST-based context file detection** — replace keyword-matching with import/symbol graph analysis. Target: v0.19+
380
- - [ ] VitePress documentation site — full CLI reference, hosted as standalone docs (pre-publish requirement)
381
-
382
- ---
383
-
384
- ## Versioning
385
-
386
- Sequential canary → stable: `v0.12.0-canary.0` → `canary.N` → `v0.12.0`
387
- Canary: `npm publish --tag canary`
388
- Stable: `npm publish` (latest)
389
-
390
- *Last updated: 2026-03-08 (v0.27.1 shipped — Pipeline Observability; v0.28.0 PRD ready — Prompt Builder)*
File without changes