@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,502 +0,0 @@
1
- # Release Notes: v0.15.0
2
-
3
- **Release Date:** 2026-02-28
4
- **Type:** Feature Release + Architecture Refactor
5
-
6
- ## Summary
7
-
8
- **Part 1: Interactive Pipeline Core (US-001 through US-004)**
9
-
10
- Implemented the foundation for interactive decision gates, user prompts, and pause/resume workflows. This enables nax to ask for user approval at critical points (security reviews, cost limits, merge gates) and persist state for long-running feature development.
11
-
12
- **Part 2: Execution Module Refactor (Phase 1 + 2 + 3)**
13
-
14
- Complete re-architecture of the execution module. Extracted god-file logic from `runner.ts` (1,638 lines) into focused sub-modules within new `lifecycle/` and `escalation/` subdirectories. Phase 1 extracted escalation and reporter notification logic. Phase 2 extracted sequential executor and initialization. **Phase 3 achieved <400 line target by extracting all remaining concerns.**
15
-
16
- ## Part 1: Interactive Pipeline Core
17
-
18
- ### US-001: Interaction Plugin Interface + Types
19
-
20
- **New Directory:** `src/interaction/`
21
-
22
- ```typescript
23
- // Core types
24
- interface InteractionRequest {
25
- id: string; // e.g. 'ix-US003-review-1'
26
- type: 'confirm' | 'choose' | 'input' | 'review' | 'notify' | 'webhook';
27
- stage: 'pre-flight' | 'execution' | 'review' | 'merge' | 'cost' | 'custom';
28
- summary: string; // human-readable question
29
- fallback: 'continue' | 'skip' | 'escalate' | 'abort';
30
- // ... metadata, options, timeout
31
- }
32
-
33
- interface InteractionResponse {
34
- requestId: string;
35
- action: 'approve' | 'reject' | 'choose' | 'input' | 'skip' | 'abort';
36
- value?: string;
37
- respondedBy?: string;
38
- // ...
39
- }
40
-
41
- interface InteractionPlugin {
42
- name: string;
43
- send(request: InteractionRequest): Promise<void>;
44
- receive(requestId: string, timeout?: number): Promise<InteractionResponse>;
45
- init?(config: Record<string, unknown>): Promise<void>;
46
- destroy?(): Promise<void>;
47
- }
48
- ```
49
-
50
- **Files:**
51
- - `src/interaction/types.ts` — Core types, trigger metadata
52
- - `src/interaction/chain.ts` — Plugin chain with priority and fallback cascade
53
- - `src/interaction/index.ts` — Barrel exports
54
-
55
- ### US-002: CLI Plugin (Default)
56
-
57
- **File:** `src/interaction/plugins/cli.ts`
58
-
59
- - Default plugin for non-headless mode
60
- - Reads from stdin using readline
61
- - Supports `confirm`, `choose`, `input`, `review` types
62
- - Timeout handling with fallback to configured behavior
63
-
64
- ### US-003: State Persistence (Pause/Resume)
65
-
66
- **File:** `src/interaction/state.ts`
67
-
68
- - `serializeRunState()` — Save run state to `nax/features/<name>/run-state.json`
69
- - `deserializeRunState()` — Load and resume from paused state
70
- - `savePendingInteraction()` — Persist pending interactions to `interactions/` directory
71
- - Support for `--force-resume` flag (future integration)
72
-
73
- ### US-004: Built-in Triggers + Hook Extension
74
-
75
- **File:** `src/interaction/triggers.ts`
76
-
77
- **8 Built-in Triggers:**
78
-
79
- | Trigger | Fallback | Safety | Use Case |
80
- |:--------|:---------|:-------|:---------|
81
- | `security-review` | abort | red | Critical security issues found |
82
- | `cost-exceeded` | abort | red | Cost limit exceeded |
83
- | `merge-conflict` | abort | red | Merge conflict detected |
84
- | `cost-warning` | escalate | yellow | Approaching cost limit |
85
- | `max-retries` | skip | yellow | Max retries reached |
86
- | `pre-merge` | escalate | yellow | Before merging to main |
87
- | `story-ambiguity` | continue | green | Story requirements unclear |
88
- | `review-gate` | continue | green | Code review checkpoint |
89
-
90
- **Hook Extension:**
91
-
92
- Extended `HookDef` interface to support interaction field:
93
-
94
- ```typescript
95
- interface HookDef {
96
- command: string;
97
- interaction?: {
98
- type: "confirm" | "choose" | "input" | "review" | "notify";
99
- summary: string; // supports {{variable}} syntax
100
- fallback: "continue" | "skip" | "escalate" | "abort";
101
- timeout?: number;
102
- };
103
- }
104
- ```
105
-
106
- **Config Integration:**
107
-
108
- Added `interaction` config to `NaxConfig`:
109
-
110
- ```json
111
- {
112
- "interaction": {
113
- "plugin": "cli",
114
- "config": {},
115
- "defaults": {
116
- "timeout": 600000,
117
- "fallback": "escalate"
118
- },
119
- "triggers": {
120
- "security-review": true,
121
- "cost-warning": true
122
- }
123
- }
124
- }
125
- ```
126
-
127
- ## Part 2: Execution Module Refactor
128
-
129
- ### New Directory Structure
130
-
131
- ```
132
- src/execution/
133
- lifecycle/
134
- acceptance-loop.ts — acceptance retry loop (272 lines)
135
- precheck-runner.ts — precheck validation (101 lines)
136
- run-initialization.ts — agent check, state reconciliation (141 lines)
137
- run-lifecycle.ts — setup/teardown orchestration (307 lines)
138
- run-setup.ts — initial setup phase (177 lines)
139
- run-completion.ts — final metrics and status (122 lines)
140
- run-cleanup.ts — finally block cleanup (67 lines)
141
- headless-formatter.ts — headless output formatting (88 lines)
142
- parallel-lifecycle.ts — parallel completion handling (97 lines)
143
- story-hooks.ts — reporter notification helpers
144
- index.ts — barrel exports
145
- escalation/
146
- escalation.ts — tier escalation helpers
147
- tier-escalation.ts — pre-iteration checks + tier handling
148
- index.ts — barrel exports
149
- sequential-executor.ts — sequential story execution loop (648 lines)
150
- parallel-executor.ts — parallel execution wrapper (213 lines)
151
- runner.ts — thin orchestrator (366 lines)
152
- ```
153
-
154
- ### Phase 1: Escalation + Lifecycle Extraction
155
-
156
- 1. **`lifecycle/story-hooks.ts`** (new)
157
- - `emitStoryComplete()` — centralized reporter notification
158
- - Eliminates 4+ duplicated reporter emission blocks
159
-
160
- 2. **`escalation/tier-escalation.ts`** (new)
161
- - `resolveMaxAttemptsOutcome()` — pause vs fail decision logic
162
- - `preIterationTierCheck()` — pre-iteration budget validation
163
- - `handleTierEscalation()` — pipeline escalation handler (203 lines)
164
-
165
- 3. **Moved modules to subdirectories:**
166
- - `lifecycle/run-lifecycle.ts`
167
- - `lifecycle/acceptance-loop.ts`
168
- - `escalation/escalation.ts`
169
-
170
- ### Phase 2: Sequential Executor + Initialization Extraction
171
-
172
- 4. **`sequential-executor.ts`** (new)
173
- - `executeSequential()` — main sequential execution loop
174
- - Story selection, pipeline invocation, result handling
175
- - Heartbeat management, progress tracking
176
- - Extracted ~700 lines from runner.ts
177
-
178
- 5. **`lifecycle/precheck-runner.ts`** (new)
179
- - `runPrecheckValidation()` — precheck execution before run starts
180
- - Validates project state, dependencies, configuration
181
- - Blocks on Tier 1 failures, warns on Tier 2 failures
182
- - Extracted ~70 lines from runner.ts
183
-
184
- 6. **`lifecycle/run-initialization.ts`** (new)
185
- - `initializeRun()` — agent check, state reconciliation, limits validation
186
- - `reconcileState()` — marks failed stories with git commits as passed
187
- - `checkAgentInstalled()` — validates agent binary availability
188
- - `validateStoryCount()` — enforces maxStoriesPerFeature limit
189
- - Extracted ~45 lines from runner.ts
190
-
191
- ### Phase 3: Runner.ts Under 400 Lines
192
-
193
- 7. **`lifecycle/run-setup.ts`** (new)
194
- - `setupRun()` — complete initial setup phase
195
- - Status writer initialization, PID registry, crash handlers
196
- - Lock acquisition, plugin loading, precheck validation
197
- - Run initialization orchestration
198
- - Extracted ~100 lines from runner.ts
199
-
200
- 8. **`lifecycle/run-completion.ts`** (new)
201
- - `handleRunCompletion()` — final metrics and status updates
202
- - Save run metrics, log completion summary
203
- - Update final status with per-story metrics
204
- - Extracted ~50 lines from runner.ts
205
-
206
- 9. **`lifecycle/run-cleanup.ts`** (new)
207
- - `cleanupRun()` — finally block cleanup operations
208
- - Reporter onRunEnd notifications, plugin teardown
209
- - Lock release
210
- - Extracted ~35 lines from runner.ts
211
-
212
- 10. **`lifecycle/headless-formatter.ts`** (new)
213
- - `outputRunHeader()` — headless mode run header
214
- - `outputRunFooter()` — headless mode run summary
215
- - Extracted ~45 lines from runner.ts (with deduplication)
216
-
217
- 11. **`lifecycle/parallel-lifecycle.ts`** (new)
218
- - `handleParallelCompletion()` — parallel execution completion
219
- - Metrics saving and reporter notifications
220
- - Extracted ~30 lines from runner.ts
221
-
222
- 12. **`parallel-executor.ts`** (new)
223
- - `runParallelExecution()` — complete parallel execution flow
224
- - Status updates, parallel story execution, completion handling
225
- - Extracted ~130 lines from runner.ts
226
-
227
- ## Impact
228
-
229
- ### Interactive Pipeline Core
230
-
231
- - **New Capability:** Decision gates and user prompts during execution
232
- - **Pause/Resume:** State persistence for long-running features
233
- - **Safety Tiers:** Red/yellow/green classification for trigger severity
234
- - **Extensible:** Plugin architecture supports custom interaction backends (Slack, webhook, etc.)
235
- - **Hook Integration:** Hooks can now trigger interactive prompts via `interaction` field
236
-
237
- **Use Cases Unlocked:**
238
- - Pre-merge approval gates
239
- - Cost budget enforcement with user confirmation
240
- - Security review checkpoints
241
- - Story ambiguity clarification during execution
242
- - Long-running features with pause/resume across sessions
243
-
244
- ### File Size Reduction
245
-
246
- - **Phase 1:** runner.ts: 1,638 → 1,428 lines (-210 lines, -13%)
247
- - **Phase 2:** runner.ts: 1,428 → 601 lines (-827 lines, -58%)
248
- - **Phase 3:** runner.ts: 601 → 366 lines (-235 lines, -39%)
249
- - **Total Reduction:** 1,638 → 366 lines (-1,272 lines, -78%)
250
- - **Target Achievement:** ✅ 366 lines is under the 400-line target (hard limit achieved)
251
-
252
- ### Code Quality
253
-
254
- - **runner.ts now 366 lines** (under 400-line hard limit)
255
- - All lifecycle modules under 310 lines
256
- - Eliminated duplicated code (reporter notifications, output formatting, metrics saving)
257
- - Centralized all concerns (escalation, precheck, initialization, setup, completion, cleanup)
258
- - All existing tests pass
259
- - No lint violations
260
- - No logic changes — pure structural refactor
261
-
262
- ### Modular Benefits
263
-
264
- - **runner.ts is now a thin orchestrator** — delegates all concerns to focused modules
265
- - **Setup phase** fully encapsulated in run-setup.ts
266
- - **Completion phase** fully encapsulated in run-completion.ts
267
- - **Cleanup phase** fully encapsulated in run-cleanup.ts
268
- - **Parallel execution** fully encapsulated in parallel-executor.ts
269
- - **Sequential execution** fully encapsulated in sequential-executor.ts
270
- - **Headless formatting** reusable across execution paths
271
- - All modules independently testable
272
-
273
- ## Testing
274
-
275
- - **Test Suite:** ✓ All tests pass
276
- - **Integration Tests:** ✓ runner.test.ts (62 tests passing)
277
- - **Lint:** ✓ No violations (`bun x biome check src/`)
278
- - **Type Check:** ✓ Passes
279
-
280
- ## Breaking Changes
281
-
282
- **None.** All exports re-exported from new modules for backward compatibility.
283
-
284
- ## Migration Guide
285
-
286
- No migration required. All existing imports continue to work via barrel exports.
287
-
288
- ## Architecture Achievement
289
-
290
- **Target achieved:** runner.ts reduced from 1,638 lines to 366 lines (78% reduction).
291
-
292
- The 400-line hard limit is now met. runner.ts is a true thin orchestrator that:
293
- - Delegates setup to run-setup.ts
294
- - Delegates parallel execution to parallel-executor.ts
295
- - Delegates sequential execution to sequential-executor.ts
296
- - Delegates completion to run-completion.ts
297
- - Delegates cleanup to run-cleanup.ts
298
-
299
- No further extraction needed. All files are under 650 lines (most under 400).
300
-
301
- ---
302
-
303
- ## Part 3: Interactive Pipeline Phase 2 (US-005 through US-009)
304
-
305
- ### US-005: Telegram Plugin
306
-
307
- **File:** `src/interaction/plugins/telegram.ts`
308
-
309
- - Sends interaction requests via Telegram Bot API with inline keyboard buttons
310
- - Polls for callback query (button click) or reply message responses
311
- - Config: `{ botToken, chatId }` (supports env vars: `NAX_TELEGRAM_TOKEN`, `NAX_TELEGRAM_CHAT_ID`)
312
- - Timeout handling with graceful expiration message (editMessageText)
313
- - Formatting: emoji headers, feature/story/stage context, inline keyboard rows
314
-
315
- **Example:**
316
-
317
- ```typescript
318
- const plugin = new TelegramInteractionPlugin();
319
- await plugin.init({
320
- botToken: process.env.NAX_TELEGRAM_TOKEN,
321
- chatId: process.env.NAX_TELEGRAM_CHAT_ID,
322
- });
323
-
324
- await plugin.send(request);
325
- const response = await plugin.receive(request.id, 60000);
326
- ```
327
-
328
- ### US-006: `nax interact` CLI
329
-
330
- **File:** `src/cli/interact.ts`
331
-
332
- **Commands:**
333
-
334
- 1. **`nax interact list -f <feature>`** — List pending interactions
335
- - Shows requestId, type, stage, summary, timeout countdown
336
- - JSON output mode with `--json`
337
-
338
- 2. **`nax interact respond <id> --action approve|reject|choose|input --value <val>`** — Respond to interaction
339
- - Validates action matches request type
340
- - Saves response to `responses/<id>.json`
341
- - Deletes pending interaction
342
-
343
- 3. **`nax interact cancel <id>`** — Cancel with fallback
344
- - Applies configured fallback behavior
345
- - Saves response and cleans up
346
-
347
- **Example:**
348
-
349
- ```bash
350
- # List pending interactions
351
- nax interact list -f my-feature
352
-
353
- # Respond to confirm request
354
- nax interact respond ix-US003-review-1 --action approve
355
-
356
- # Respond to choose request
357
- nax interact respond ix-choice-1 --action choose --value option-a
358
-
359
- # Cancel with fallback
360
- nax interact cancel ix-timeout-1
361
- ```
362
-
363
- ### US-007: Webhook Plugin
364
-
365
- **File:** `src/interaction/plugins/webhook.ts`
366
-
367
- - Sends HTTP POST InteractionRequest JSON to configured URL
368
- - Starts local HTTP server to receive callback at `/nax/interact/:requestId`
369
- - HMAC-SHA256 signature verification (header: `X-Nax-Signature`)
370
- - Auto-shutdown server after response or timeout
371
- - Config: `{ url, callbackPort?, secret? }`
372
-
373
- **Example:**
374
-
375
- ```typescript
376
- const plugin = new WebhookInteractionPlugin();
377
- await plugin.init({
378
- url: "https://my-app.com/nax/webhook",
379
- callbackPort: 8765,
380
- secret: "my-hmac-secret",
381
- });
382
- ```
383
-
384
- ### US-008: Auto AI Responder Plugin
385
-
386
- **File:** `src/interaction/plugins/auto.ts`
387
-
388
- - Automatically responds to interactions using LLM decision-making
389
- - Confidence threshold (default: 0.7) — escalates to human if confidence < threshold
390
- - Safety rule: **NEVER** auto-approves `security-review` (hardcoded)
391
- - Config: `{ model?, confidenceThreshold?, maxCostPerDecision? }`
392
-
393
- **Decision Prompt:**
394
-
395
- ```
396
- You are an AI decision assistant for a code orchestration system.
397
-
398
- ## Rules
399
- 1. For "red" safety tier (security-review, cost-exceeded, merge-conflict): ALWAYS return confidence 0
400
- 2. For "yellow" safety tier (cost-warning, max-retries, pre-merge): High confidence (0.8+) ONLY if clearly safe
401
- 3. For "green" safety tier (story-ambiguity, review-gate): Can approve with moderate confidence (0.6+)
402
- 4. Never auto-approve security issues
403
-
404
- Respond with JSON: {"action":"...","value":"...","confidence":0.0-1.0,"reasoning":"..."}
405
- ```
406
-
407
- **Example:**
408
-
409
- ```typescript
410
- const plugin = new AutoInteractionPlugin();
411
- await plugin.init({
412
- model: "fast",
413
- confidenceThreshold: 0.7,
414
- naxConfig: config,
415
- });
416
-
417
- const response = await plugin.decide(request);
418
- // Returns undefined if confidence < threshold or security-review
419
- ```
420
-
421
- ### US-009: `nax status` Enhancement
422
-
423
- **File:** `src/cli/status.ts`
424
-
425
- **New Features:**
426
-
427
- - Shows paused state with pending interaction details
428
- - Timeout countdown display (seconds remaining or EXPIRED)
429
- - Fallback action and safety category indicator (🔴/🟡/🟢)
430
- - Hint to respond with `nax interact respond` command
431
-
432
- **Example Output:**
433
-
434
- ```
435
- 📊 my-feature
436
-
437
- ⏸️ Paused — Waiting for Interaction (2 pending)
438
-
439
- 🔴 trigger-security-review-1709234567890
440
- Type: confirm
441
- Summary: Security review failed — abort execution?
442
- Fallback: abort
443
- Timeout: 543s remaining
444
-
445
- 🟡 trigger-cost-warning-1709234567891
446
- Type: confirm
447
- Summary: Cost warning: $2.50 / $5.00 — escalate to higher tier?
448
- Fallback: escalate
449
- Timeout: EXPIRED
450
-
451
- 💡 Respond with: nax interact respond <id> --action approve|reject|skip|abort
452
-
453
- ⚡ Active Run:
454
- Run ID: run-20260228T120000
455
- PID: 12345
456
- Progress: 3/5 stories
457
- Cost: $2.50
458
- ```
459
-
460
- ## Impact
461
-
462
- ### New Plugins
463
-
464
- - **Telegram:** Remote interaction via Telegram Bot API
465
- - **Webhook:** HTTP-based integration for custom backends
466
- - **Auto:** AI-powered automatic responses (with safety guardrails)
467
-
468
- ### CLI Improvements
469
-
470
- - **`nax interact list`** — View pending interactions
471
- - **`nax interact respond`** — Respond from CLI
472
- - **`nax interact cancel`** — Cancel with fallback
473
- - **`nax status`** — Shows paused state and interaction details
474
-
475
- ### Safety Features
476
-
477
- - Auto plugin never auto-approves security-review (hardcoded safety rule)
478
- - Confidence threshold prevents low-confidence auto-approvals
479
- - Safety tier indicators (red/yellow/green) in status display
480
- - Timeout countdown for time-sensitive decisions
481
-
482
- ## Testing
483
-
484
- - **Unit Tests:** `test/unit/interaction-plugins.test.ts` (10 tests passing)
485
- - **All Tests:** ✓ New tests pass, pre-existing failures unrelated to changes
486
- - **Lint:** ✓ No violations (`bun x biome check src/`)
487
- - **Type Check:** ✓ No new errors
488
-
489
- ## Future Work
490
-
491
- **US-010:** Runner integration — wire triggers into pipeline stages
492
- **US-011:** TUI integration for interactive prompts in TUI mode
493
- **US-012:** Slack plugin for team-based approval workflows
494
-
495
- ---
496
-
497
- **Commits:**
498
- - Interactive Pipeline Phase 1: `feat(interaction): implement interactive pipeline core (US-001 through US-004)`
499
- - Interactive Pipeline Phase 2: `feat(interaction): implement Telegram, webhook, auto plugins + interact CLI (US-005 through US-009)`
500
- - Phase 1: `refactor(execution): split runner.ts god file into focused sub-modules`
501
- - Phase 2: `refactor(execution): Phase 2 — extract sequential/parallel executors, complete runner.ts split`
502
- - Phase 3: `refactor(execution): Phase 3 — runner.ts under 400 lines`
@@ -1,170 +0,0 @@
1
- # v0.15.1 — Architectural Compliance + Security Hardening
2
-
3
- **Release Date:** 2026-02-28
4
- **Type:** Patch
5
- **Breaking Changes:** None
6
-
7
- ---
8
-
9
- ## Overview
10
-
11
- This release resolves all critical findings from the v0.15.0 code review. The primary focus is architectural compliance (enforcing the 400-line file limit) and security hardening for the interaction plugin system.
12
-
13
- ---
14
-
15
- ## Changes
16
-
17
- ### ARCH-001: File Size Compliance (CRITICAL)
18
-
19
- **Issue:** 14 files exceeded the 400-line hard limit mandated by CLAUDE.md.
20
-
21
- **Resolution:** All files have been split into smaller, cohesive modules:
22
-
23
- | Original File | Lines | Split Into | Result |
24
- |:---|---:|:---|:---|
25
- | `config/schema.ts` | 853 | `types.ts` + `schemas.ts` + `defaults.ts` + barrel | ✅ All under 400 |
26
- | `agents/claude.ts` | 820 | `claude.ts` + `claude-decompose.ts` + `claude-plan.ts` | ✅ All under 400 |
27
- | `agents/types.ts` | 430 | `types.ts` + `types-extended.ts` | ✅ All under 400 |
28
- | `tdd/orchestrator.ts` | 743 | `orchestrator.ts` + `session-runner.ts` + `rectification-gate.ts` | ✅ All under 400 |
29
- | `execution/sequential-executor.ts` | 648 | `sequential-executor.ts` + `pipeline-result-handler.ts` | ✅ All under 400 |
30
- | `cli/diagnose.ts` | 638 | `diagnose.ts` + `diagnose-analysis.ts` + `diagnose-formatter.ts` | ✅ All under 400 |
31
- | `execution/post-verify.ts` | 584 | `post-verify.ts` + `post-verify-rectification.ts` | ✅ All under 400 |
32
- | `context/builder.ts` | 576 | `builder.ts` + `elements.ts` + `formatter.ts` | ✅ All under 400 |
33
- | `cli/analyze.ts` | 568 | `analyze.ts` + `analyze-parser.ts` | ✅ All under 400 |
34
- | `precheck/checks.ts` | 548 | barrel + `checks-blockers.ts` + `checks-warnings.ts` | ✅ All under 400 |
35
- | `cli/status.ts` | 519 | barrel + `status-cost.ts` + `status-features.ts` | ✅ All under 400 |
36
- | `execution/helpers.ts` | 450 | barrel + `story-context.ts` + `lock.ts` | ✅ All under 400 |
37
- | `execution/escalation/tier-escalation.ts` | 439 | `tier-escalation.ts` + `tier-outcome.ts` | ✅ All under 400 |
38
- | `routing/strategies/llm.ts` | 432 | `llm.ts` + `llm-prompts.ts` | ✅ All under 400 |
39
-
40
- **Backward Compatibility:** All split files use barrel re-exports. No external import paths were broken.
41
-
42
- **Verification:**
43
- ```bash
44
- find src/ -name '*.ts' -exec wc -l {} + | awk '$1 > 400 { print }'
45
- # Output: (empty) — all files under 400 lines
46
- ```
47
-
48
- ---
49
-
50
- ### SEC-001: Webhook Payload Security (CRITICAL)
51
-
52
- **Issue:** Webhook plugin did not enforce payload size limit. Malicious actors could send multi-GB JSON payloads to exhaust memory.
53
-
54
- **Resolution:**
55
- - Added `maxPayloadBytes` config option (default: 1MB)
56
- - Enforced payload size limit via `Content-Length` header check
57
- - Added fallback body size check for requests without `Content-Length`
58
- - Returns `413 Payload Too Large` for oversized requests
59
-
60
- **Error Message Sanitization:**
61
- - Previously: `Bad Request: Invalid response format (${err.message})` (leaks Zod validation errors)
62
- - Now: `Bad Request: Invalid response format` (sanitized, no leak)
63
-
64
- **Files Changed:**
65
- - `src/interaction/plugins/webhook.ts`
66
-
67
- ---
68
-
69
- ### SEC-002/SEC-003: Telegram Network Error Handling + Exponential Backoff (CRITICAL)
70
-
71
- **Issue:** Telegram plugin had no error handling for network failures in `getUpdates()`. On network errors, the plugin would:
72
- 1. Return empty updates (correct)
73
- 2. Immediately retry at 1-second intervals (incorrect — hammers failing API)
74
- 3. Use `console.error` instead of proper logging (information leakage risk)
75
-
76
- **Resolution:**
77
- - Added exponential backoff to `getUpdates()` polling:
78
- - Initial backoff: 1 second
79
- - Max backoff: 30 seconds
80
- - Backoff resets on successful API call
81
- - Removed all `console.error` calls (fire-and-forget errors are silently dropped)
82
- - `answerCallbackQuery()` and `sendTimeoutMessage()` remain fire-and-forget (non-critical operations)
83
-
84
- **Files Changed:**
85
- - `src/interaction/plugins/telegram.ts`
86
-
87
- ---
88
-
89
- ### TEST-001: Network Failure Test Coverage (MEDIUM)
90
-
91
- **Issue:** No tests for network failures, malformed responses, or timeout edge cases.
92
-
93
- **Resolution:** Added comprehensive test suite:
94
-
95
- **New Test File:** `test/unit/interaction-network-failures.test.ts` (15 tests, 100% pass)
96
-
97
- **Test Coverage:**
98
- - **Telegram Plugin:**
99
- - Network error in `send()` (connection refused)
100
- - Malformed API response (invalid JSON)
101
- - HTTP error status (500)
102
- - Network failure in `getUpdates()` (returns empty updates)
103
- - Exponential backoff on consecutive failures
104
- - Backoff reset on success
105
- - **Webhook Plugin:**
106
- - Network error in `send()` (connection refused)
107
- - HTTP error in `send()` (503)
108
- - Exponential backoff in `receive()` polling
109
- - Payload size limit enforcement (via `Content-Length`)
110
- - Payload size limit enforcement (via actual body size)
111
- - Malformed JSON rejection (sanitized error message)
112
- - Invalid schema rejection (sanitized error message)
113
- - Missing HMAC signature rejection
114
- - Invalid HMAC signature rejection
115
-
116
- ---
117
-
118
- ## Schema Validation
119
-
120
- **InteractionConfig Zod Schema:** Already present and correct (lines 663-683 in `config/schemas.ts`). No changes needed.
121
-
122
- ---
123
-
124
- ## Test Results
125
-
126
- **Full Test Suite:**
127
- ```bash
128
- bun test --timeout=60000
129
- ```
130
-
131
- **Results:**
132
- - ✅ 1775 pass
133
- - ⏭ 10 skip
134
- - ❌ 56 fail (all pre-existing, unrelated to v0.15.1 changes)
135
-
136
- **New Tests:**
137
- - ✅ 15 pass (`test/unit/interaction-network-failures.test.ts`)
138
- - ✅ 10 pass (`test/unit/interaction-plugins.test.ts` — existing tests, still passing)
139
-
140
- ---
141
-
142
- ## Migration Guide
143
-
144
- No migration needed. This is a pure patch release with backward-compatible structural refactoring and security hardening.
145
-
146
- **If you use webpack/rollup/esbuild:** The file splits may slightly increase bundle size due to additional module boundaries. In practice, tree-shaking should eliminate any overhead.
147
-
148
- **If you import from deep paths:**
149
- - ✅ `import { NaxConfig } from "@nathapp/nax/config"` — still works (barrel re-exports)
150
- - ✅ `import { ClaudeCodeAdapter } from "@nathapp/nax/agents"` — still works
151
- - ✅ All public APIs unchanged
152
-
153
- ---
154
-
155
- ## Contributors
156
-
157
- - Claude Sonnet 4.5 (code-reviewer agent)
158
- - Claude Opus 4.6 (refactor-cleaner agent)
159
- - William (review)
160
-
161
- ---
162
-
163
- ## Next Steps
164
-
165
- See [ROADMAP.md](../ROADMAP.md) for v0.16.0 planning.
166
-
167
- **Immediate Backlog:**
168
- - Add Prometheus metrics for interaction plugin success/failure rates
169
- - Implement plugin fallback cascade (REL-001 from code review — deferred to v0.16.0)
170
- - Add LLM call mocking for Auto plugin tests (TEST-002 from code review)