@nathapp/nax 0.28.0 → 0.30.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 (385) hide show
  1. package/CHANGELOG.md +23 -2
  2. package/bin/nax.ts +2 -3
  3. package/dist/nax.js +72753 -0
  4. package/package.json +11 -3
  5. package/src/cli/analyze.ts +2 -7
  6. package/src/cli/config.ts +3 -1
  7. package/src/config/defaults.ts +1 -0
  8. package/src/config/schemas.ts +1 -0
  9. package/src/config/types.ts +1 -0
  10. package/src/context/builder.ts +10 -1
  11. package/src/execution/lifecycle/headless-formatter.ts +2 -4
  12. package/src/prompts/builder.ts +12 -69
  13. package/src/prompts/sections/isolation.ts +38 -8
  14. package/src/prompts/sections/role-task.ts +79 -17
  15. package/src/review/runner.ts +6 -1
  16. package/src/version.ts +2 -1
  17. package/.claude/rules/01-project-conventions.md +0 -34
  18. package/.claude/rules/02-test-architecture.md +0 -39
  19. package/.claude/rules/03-test-writing.md +0 -58
  20. package/.claude/rules/04-forbidden-patterns.md +0 -29
  21. package/.claude/settings.json +0 -15
  22. package/.githooks/pre-commit +0 -16
  23. package/.gitlab-ci.yml +0 -103
  24. package/.mcp.json +0 -8
  25. package/BRIEF.md +0 -140
  26. package/CLAUDE.md +0 -143
  27. package/US-007-IMPLEMENTATION.md +0 -139
  28. package/biome.json +0 -14
  29. package/bun.lock +0 -163
  30. package/bunfig.toml +0 -12
  31. package/docker-compose.test.yml +0 -15
  32. package/docs/20260216-fix-plan-context-review.md +0 -56
  33. package/docs/20260216-relentless-vs-ngent-comparison.md +0 -208
  34. package/docs/20260216-v02-plan.md +0 -136
  35. package/docs/20260216-v02-review.md +0 -685
  36. package/docs/20260217-dogfood-findings.md +0 -56
  37. package/docs/20260217-p2-plus-plan.md +0 -117
  38. package/docs/20260217-partial-fixes-plan.md +0 -62
  39. package/docs/20260217-plan-analyze-spec.md +0 -117
  40. package/docs/20260217-post-impl-review.md +0 -1137
  41. package/docs/20260217-quick-wins-plan.md +0 -66
  42. package/docs/20260217-split-runner-plan.md +0 -75
  43. package/docs/20260217-v03-impl-plan.md +0 -80
  44. package/docs/20260217-v03-post-impl-review.md +0 -589
  45. package/docs/20260217-v04-impl-plan.md +0 -86
  46. package/docs/20260217-v05-post-impl-review.md +0 -850
  47. package/docs/20260217-v06-post-impl-review.md +0 -817
  48. package/docs/20260218-adr003-port-plan.md +0 -151
  49. package/docs/20260218-review-adr003-verification.md +0 -175
  50. package/docs/20260219-fix-plan-bug16-19.md +0 -79
  51. package/docs/20260219-fix-plan-bug20-22.md +0 -114
  52. package/docs/20260219-plan-llm-routing.md +0 -116
  53. package/docs/20260219-review-bug20-22-fixes.md +0 -135
  54. package/docs/20260219-routing-baseline-keyword.md +0 -63
  55. package/docs/20260220-plan-structured-logging-p1.md +0 -80
  56. package/docs/20260220-plan-structured-logging-p2.md +0 -37
  57. package/docs/20260220-review-llm-routing.md +0 -180
  58. package/docs/20260220-review-post-fix-llm-routing.md +0 -70
  59. package/docs/20260221-fix-plan-relevantfiles-split.md +0 -101
  60. package/docs/20260221-fix-plan-routing-mode.md +0 -125
  61. package/docs/20260221-review-v0.9-implementation.md +0 -379
  62. package/docs/20260222-fix-plan-v091-routing-isolation.md +0 -197
  63. package/docs/20260223-fix-plan-prompt-audit.md +0 -62
  64. package/docs/20260224-nax-roadmap-phases.md +0 -189
  65. package/docs/20260225-phase2-llm-service-layer.md +0 -401
  66. package/docs/20260225-review-v0.10.1.md +0 -187
  67. package/docs/20260303-v010-implementation-plan.md +0 -165
  68. package/docs/20260304-review-nax.md +0 -492
  69. package/docs/CLAUDE.md.bak +0 -191
  70. package/docs/ROADMAP.md +0 -390
  71. package/docs/SPEC-rectification.md +0 -0
  72. package/docs/SPEC.md +0 -324
  73. package/docs/US-001-plugin-loading-verification.md +0 -152
  74. package/docs/adr/ADR-005-implementation-plan.md +0 -655
  75. package/docs/adr/ADR-005-pipeline-re-architecture.md +0 -464
  76. package/docs/architecture-analysis.md +0 -1076
  77. package/docs/bugs/BUG-21-escalation-null-attempts.md +0 -48
  78. package/docs/bugs-from-dogfood-run-c.md +0 -243
  79. package/docs/code-review-20260228.md +0 -612
  80. package/docs/code-review-v0.15.0.md +0 -629
  81. package/docs/hook-lifecycle-test-plan.md +0 -149
  82. package/docs/releases/v0.11.0-and-earlier.md +0 -20
  83. package/docs/releases/v0.12.0.md +0 -15
  84. package/docs/releases/v0.13.0.md +0 -14
  85. package/docs/releases/v0.14.0.md +0 -20
  86. package/docs/releases/v0.14.1.md +0 -36
  87. package/docs/releases/v0.14.2.md +0 -51
  88. package/docs/releases/v0.14.3.md +0 -174
  89. package/docs/releases/v0.14.4.md +0 -94
  90. package/docs/releases/v0.15.0.md +0 -502
  91. package/docs/releases/v0.15.1.md +0 -170
  92. package/docs/releases/v0.15.3.md +0 -193
  93. package/docs/specs/bug-039-orphan-processes.md +0 -131
  94. package/docs/specs/bug-040-review-rectification.md +0 -82
  95. package/docs/specs/bug-041-cross-story-test-isolation.md +0 -88
  96. package/docs/specs/bug-042-verifier-failure-capture.md +0 -117
  97. package/docs/specs/bun-pty-migration.md +0 -171
  98. package/docs/specs/central-run-registry.md +0 -116
  99. package/docs/specs/feat-010-smart-runner-git-history.md +0 -96
  100. package/docs/specs/feat-011-file-context-strategy.md +0 -73
  101. package/docs/specs/feat-012-tdd-writer-tier.md +0 -79
  102. package/docs/specs/feat-013-test-after-review.md +0 -89
  103. package/docs/specs/feat-014-heartbeat-observability.md +0 -127
  104. package/docs/specs/status-file-consolidation.md +0 -93
  105. package/docs/specs/status-file-v0.10.1.md +0 -812
  106. package/docs/specs/trigger-completion.md +0 -145
  107. package/docs/specs/verification-architecture-v2.md +0 -343
  108. package/docs/tdd/strategies.md +0 -97
  109. package/docs/v0.10-global-config.md +0 -206
  110. package/docs/v0.10-plugin-system.md +0 -415
  111. package/docs/v0.10-prompt-optimizer.md +0 -234
  112. package/docs/v0.3-spec.md +0 -244
  113. package/docs/v0.4-spec.md +0 -140
  114. package/docs/v0.5-spec.md +0 -237
  115. package/docs/v0.6-spec.md +0 -371
  116. package/docs/v0.7-spec.md +0 -177
  117. package/docs/v0.8-llm-routing.md +0 -206
  118. package/docs/v0.8-structured-logging.md +0 -132
  119. package/docs/v0.9.3-prompt-audit.md +0 -112
  120. package/examples/plugins/console-reporter/index.test.ts +0 -207
  121. package/examples/plugins/console-reporter/index.ts +0 -110
  122. package/memory/topic/feat-010-baseref.md +0 -28
  123. package/memory/topic/feat-013-test-after-deprecation.md +0 -22
  124. package/nax/config.json +0 -154
  125. package/nax/features/bug-039-medium/prd.json +0 -45
  126. package/nax/features/bugfix-v0171/prd.json +0 -52
  127. package/nax/features/central-run-registry/prd.json +0 -105
  128. package/nax/features/config-management/prd.json +0 -108
  129. package/nax/features/config-management/progress.txt +0 -5
  130. package/nax/features/diagnose/acceptance.test.ts +0 -414
  131. package/nax/features/diagnose/prd.json +0 -41
  132. package/nax/features/nax-compliance/prd.json +0 -52
  133. package/nax/features/nax-compliance/progress.txt +0 -1
  134. package/nax/features/orchestration-fixes/prd.json +0 -89
  135. package/nax/features/orchestration-fixes/progress.txt +0 -1
  136. package/nax/features/plugin-integration/US-007-VERIFICATION.md +0 -259
  137. package/nax/features/plugin-integration/prd.json +0 -208
  138. package/nax/features/plugin-integration/progress.txt +0 -5
  139. package/nax/features/post-rearch-bugfix/prd.json +0 -137
  140. package/nax/features/precheck/prd.json +0 -205
  141. package/nax/features/precheck/progress.txt +0 -15
  142. package/nax/features/prompt-builder/prd.json +0 -152
  143. package/nax/features/prompt-builder/progress.txt +0 -3
  144. package/nax/features/review-quality/prd.json +0 -55
  145. package/nax/features/routing-persistence/prd.json +0 -104
  146. package/nax/features/routing-persistence/progress.txt +0 -1
  147. package/nax/features/smart-test-runner/plan.md +0 -7
  148. package/nax/features/smart-test-runner/prd.json +0 -203
  149. package/nax/features/smart-test-runner/progress.txt +0 -13
  150. package/nax/features/smart-test-runner/spec.md +0 -7
  151. package/nax/features/smart-test-runner/tasks.md +0 -8
  152. package/nax/features/status-file-consolidation/prd.json +0 -106
  153. package/nax/features/structured-logging/prd.json +0 -199
  154. package/nax/features/trigger-completion/prd.json +0 -150
  155. package/nax/features/trigger-completion/progress.txt +0 -7
  156. package/nax/features/unlock/prd.json +0 -36
  157. package/nax/features/v0.18.3-execution-reliability/prd.json +0 -80
  158. package/nax/features/v0.18.3-execution-reliability/progress.txt +0 -3
  159. package/nax/features/v0.19.0-hardening/plan.md +0 -7
  160. package/nax/features/v0.19.0-hardening/prd.json +0 -84
  161. package/nax/features/v0.19.0-hardening/progress.txt +0 -7
  162. package/nax/features/v0.19.0-hardening/spec.md +0 -18
  163. package/nax/features/v0.19.0-hardening/tasks.md +0 -8
  164. package/nax/features/verify-v2/prd.json +0 -79
  165. package/nax/features/verify-v2/progress.txt +0 -3
  166. package/nax/status.json +0 -36
  167. package/src/prompts/templates/implementer.ts +0 -6
  168. package/src/prompts/templates/single-session.ts +0 -6
  169. package/src/prompts/templates/test-writer.ts +0 -6
  170. package/src/prompts/templates/verifier.ts +0 -6
  171. package/test/COVERAGE-GAPS.md +0 -333
  172. package/test/e2e/cm-003-default-view.test.ts +0 -195
  173. package/test/e2e/plan-analyze-run.test.ts +0 -902
  174. package/test/helpers/helpers.test.ts +0 -295
  175. package/test/helpers/timeout.ts +0 -42
  176. package/test/integration/US-002-TEST-SUMMARY.md +0 -107
  177. package/test/integration/US-003-TEST-SUMMARY.md +0 -149
  178. package/test/integration/US-004-TEST-SUMMARY.md +0 -106
  179. package/test/integration/US-005-TEST-SUMMARY.md +0 -138
  180. package/test/integration/US-007-TEST-SUMMARY.md +0 -100
  181. package/test/integration/cli/agent-validation.test.ts +0 -439
  182. package/test/integration/cli/cli-config-default-edge-cases.test.ts +0 -223
  183. package/test/integration/cli/cli-config-default-view.test.ts +0 -230
  184. package/test/integration/cli/cli-config-diff.test.ts +0 -461
  185. package/test/integration/cli/cli-config-prompts-explain.test.ts +0 -74
  186. package/test/integration/cli/cli-config.test.ts +0 -737
  187. package/test/integration/cli/cli-diagnose.test.ts +0 -595
  188. package/test/integration/cli/cli-logs.test.ts +0 -346
  189. package/test/integration/cli/cli-plugins.test.ts +0 -679
  190. package/test/integration/cli/cli-precheck.test.ts +0 -372
  191. package/test/integration/cli/cli-run-headless.test.ts +0 -174
  192. package/test/integration/cli/cli.test.ts +0 -76
  193. package/test/integration/cli/precheck-integration.test.ts +0 -476
  194. package/test/integration/cli/precheck-orchestrator.test.ts +0 -247
  195. package/test/integration/cli/precheck.test.ts +0 -806
  196. package/test/integration/config/config-loader.test.ts +0 -266
  197. package/test/integration/config/config.test.ts +0 -444
  198. package/test/integration/config/merger.test.ts +0 -466
  199. package/test/integration/config/paths.test.ts +0 -52
  200. package/test/integration/config/security-loader.test.ts +0 -83
  201. package/test/integration/context/context-integration.test.ts +0 -703
  202. package/test/integration/context/context-path-security.test.ts +0 -173
  203. package/test/integration/context/context-provider-injection.test.ts +0 -507
  204. package/test/integration/context/context-verification-integration.test.ts +0 -296
  205. package/test/integration/context/s5-greenfield-fallback.test.ts +0 -298
  206. package/test/integration/execution/execution-isolation.test.ts +0 -143
  207. package/test/integration/execution/execution.test.ts +0 -634
  208. package/test/integration/execution/feature-status-write.test.ts +0 -302
  209. package/test/integration/execution/parallel.test.ts +0 -251
  210. package/test/integration/execution/prd-pause.test.ts +0 -205
  211. package/test/integration/execution/prd-resolvers.test.ts +0 -186
  212. package/test/integration/execution/progress.test.ts +0 -34
  213. package/test/integration/execution/runner-batching.test.ts +0 -682
  214. package/test/integration/execution/runner-config-plugins.test.ts +0 -462
  215. package/test/integration/execution/runner-escalation.test.ts +0 -561
  216. package/test/integration/execution/runner-fixes.test.ts +0 -400
  217. package/test/integration/execution/runner-plugin-integration.test.ts +0 -544
  218. package/test/integration/execution/runner-queue-and-attempts.test.ts +0 -476
  219. package/test/integration/execution/status-file-integration.test.ts +0 -289
  220. package/test/integration/execution/status-file.test.ts +0 -380
  221. package/test/integration/execution/status-writer.test.ts +0 -447
  222. package/test/integration/execution/story-id-in-events.test.ts +0 -274
  223. package/test/integration/interaction/interaction-chain-pipeline.test.ts +0 -476
  224. package/test/integration/pipeline/hooks.test.ts +0 -363
  225. package/test/integration/pipeline/pipeline-acceptance.test.ts +0 -303
  226. package/test/integration/pipeline/pipeline-events.test.ts +0 -476
  227. package/test/integration/pipeline/pipeline.test.ts +0 -660
  228. package/test/integration/pipeline/reporter-lifecycle.test.ts +0 -862
  229. package/test/integration/pipeline/verify-stage.test.ts +0 -286
  230. package/test/integration/plan/analyze-integration.test.ts +0 -262
  231. package/test/integration/plan/analyze-scanner.test.ts +0 -132
  232. package/test/integration/plan/logger.test.ts +0 -461
  233. package/test/integration/plan/plan.test.ts +0 -157
  234. package/test/integration/plugins/config-integration.test.ts +0 -173
  235. package/test/integration/plugins/config-resolution.test.ts +0 -523
  236. package/test/integration/plugins/loader.test.ts +0 -644
  237. package/test/integration/plugins/plugins-registry.test.ts +0 -747
  238. package/test/integration/plugins/validator.test.ts +0 -564
  239. package/test/integration/prompts/pb-004-migration.test.ts +0 -523
  240. package/test/integration/review/review-config-commands.test.ts +0 -320
  241. package/test/integration/review/review-config-schema.test.ts +0 -117
  242. package/test/integration/review/review-plugin-integration.test.ts +0 -729
  243. package/test/integration/review/review.test.ts +0 -150
  244. package/test/integration/routing/plugin-routing-advanced.test.ts +0 -461
  245. package/test/integration/routing/plugin-routing-core.test.ts +0 -527
  246. package/test/integration/routing/routing-stage-bug-021.test.ts +0 -275
  247. package/test/integration/routing/routing-stage-greenfield.test.ts +0 -287
  248. package/test/integration/tdd/tdd-cleanup.test.ts +0 -246
  249. package/test/integration/tdd/tdd-orchestrator-core.test.ts +0 -565
  250. package/test/integration/tdd/tdd-orchestrator-failureCategory.test.ts +0 -355
  251. package/test/integration/tdd/tdd-orchestrator-fallback.test.ts +0 -311
  252. package/test/integration/tdd/tdd-orchestrator-lite.test.ts +0 -289
  253. package/test/integration/tdd/tdd-orchestrator-prompts.test.ts +0 -260
  254. package/test/integration/tdd/tdd-orchestrator-verdict.test.ts +0 -536
  255. package/test/integration/tmp/headless-test/test.jsonl +0 -30
  256. package/test/integration/verification/test-scanner.test.ts +0 -403
  257. package/test/integration/verification/verification-asset-check.test.ts +0 -143
  258. package/test/integration/worktree/manager.test.ts +0 -218
  259. package/test/integration/worktree/worktree-merge.test.ts +0 -341
  260. package/test/manual/logging-formatter-demo.ts +0 -158
  261. package/test/ui/tui-agent-panel.test.tsx +0 -99
  262. package/test/ui/tui-pty-integration.test.tsx +0 -146
  263. package/test/unit/acceptance.test.ts +0 -187
  264. package/test/unit/agent-stderr-capture.test.ts +0 -147
  265. package/test/unit/agents/claude.test.ts +0 -107
  266. package/test/unit/analyze-classifier.test.ts +0 -216
  267. package/test/unit/analyze.test.ts +0 -224
  268. package/test/unit/auto-detect.test.ts +0 -250
  269. package/test/unit/cli-status-project-level.test.ts +0 -283
  270. package/test/unit/cli-status.test.ts +0 -418
  271. package/test/unit/commands/common.test.ts +0 -321
  272. package/test/unit/commands/logs.test.ts +0 -458
  273. package/test/unit/commands/runs.test.ts +0 -303
  274. package/test/unit/commands/unlock.test.ts +0 -320
  275. package/test/unit/config/defaults.test.ts +0 -70
  276. package/test/unit/config/quality-commands-schema.test.ts +0 -72
  277. package/test/unit/config/regression-gate-schema.test.ts +0 -160
  278. package/test/unit/config/smart-runner-flag.test.ts +0 -250
  279. package/test/unit/constitution-generators.test.ts +0 -161
  280. package/test/unit/constitution.test.ts +0 -210
  281. package/test/unit/context/context-autodetect.test.ts +0 -297
  282. package/test/unit/context/context-build.test.ts +0 -575
  283. package/test/unit/context/context-coverage.test.ts +0 -236
  284. package/test/unit/context/context-error.test.ts +0 -93
  285. package/test/unit/context/context-estimate-tokens.test.ts +0 -201
  286. package/test/unit/context/context-format.test.ts +0 -302
  287. package/test/unit/context/context-isolation.test.ts +0 -267
  288. package/test/unit/context/context-sort.test.ts +0 -93
  289. package/test/unit/context/context-story.test.ts +0 -108
  290. package/test/unit/context/prior-failures.test.ts +0 -463
  291. package/test/unit/context.test.ts +0 -1726
  292. package/test/unit/cost.test.ts +0 -231
  293. package/test/unit/crash-recovery.test.ts +0 -309
  294. package/test/unit/escalation.test.ts +0 -127
  295. package/test/unit/execution/lifecycle/run-completion.test.ts +0 -240
  296. package/test/unit/execution/lifecycle/run-regression.test.ts +0 -420
  297. package/test/unit/execution/pid-registry.test.ts +0 -241
  298. package/test/unit/execution/sequential-executor.test.ts +0 -235
  299. package/test/unit/execution/sfc-004-dead-code-cleanup.test.ts +0 -89
  300. package/test/unit/execution/structured-failure.test.ts +0 -415
  301. package/test/unit/execution-logging-stderr.test.ts +0 -157
  302. package/test/unit/execution-stage.test.ts +0 -123
  303. package/test/unit/fix-generator.test.ts +0 -276
  304. package/test/unit/formatters.test.ts +0 -468
  305. package/test/unit/greenfield.test.ts +0 -180
  306. package/test/unit/hooks/shell-security.test.ts +0 -40
  307. package/test/unit/interaction/auto-plugin.test.ts +0 -162
  308. package/test/unit/interaction/human-review-trigger.test.ts +0 -165
  309. package/test/unit/interaction-network-failures.test.ts +0 -390
  310. package/test/unit/interaction-plugins.test.ts +0 -472
  311. package/test/unit/logging/formatter.test.ts +0 -456
  312. package/test/unit/merge.test.ts +0 -269
  313. package/test/unit/metrics/aggregator.test.ts +0 -164
  314. package/test/unit/metrics/tracker.test.ts +0 -186
  315. package/test/unit/metrics.test.ts +0 -276
  316. package/test/unit/optimizer/noop.optimizer.test.ts +0 -125
  317. package/test/unit/optimizer/rule-based.optimizer.test.ts +0 -358
  318. package/test/unit/pipeline/event-bus.test.ts +0 -105
  319. package/test/unit/pipeline/routing-partial-override.test.ts +0 -121
  320. package/test/unit/pipeline/runner-retry.test.ts +0 -89
  321. package/test/unit/pipeline/stages/autofix.test.ts +0 -97
  322. package/test/unit/pipeline/stages/completion-review-gate.test.ts +0 -218
  323. package/test/unit/pipeline/stages/execution-ambiguity.test.ts +0 -311
  324. package/test/unit/pipeline/stages/execution-merge-conflict.test.ts +0 -218
  325. package/test/unit/pipeline/stages/rectify.test.ts +0 -101
  326. package/test/unit/pipeline/stages/regression-stage.test.ts +0 -69
  327. package/test/unit/pipeline/stages/review.test.ts +0 -201
  328. package/test/unit/pipeline/stages/routing-idempotence.test.ts +0 -139
  329. package/test/unit/pipeline/stages/routing-initial-complexity.test.ts +0 -321
  330. package/test/unit/pipeline/stages/routing-persistence.test.ts +0 -380
  331. package/test/unit/pipeline/stages/verify.test.ts +0 -267
  332. package/test/unit/pipeline/subscribers/events-writer.test.ts +0 -227
  333. package/test/unit/pipeline/subscribers/hooks.test.ts +0 -84
  334. package/test/unit/pipeline/subscribers/interaction.test.ts +0 -313
  335. package/test/unit/pipeline/subscribers/registry.test.ts +0 -149
  336. package/test/unit/pipeline/subscribers/reporters.test.ts +0 -90
  337. package/test/unit/pipeline/verify-smart-runner.test.ts +0 -345
  338. package/test/unit/prd-auto-default.test.ts +0 -291
  339. package/test/unit/prd-failure-category.test.ts +0 -177
  340. package/test/unit/prd-get-next-story.test.ts +0 -215
  341. package/test/unit/precheck/checks-warnings.test.ts +0 -114
  342. package/test/unit/precheck-checks.test.ts +0 -841
  343. package/test/unit/precheck-story-size-gate.test.ts +0 -288
  344. package/test/unit/precheck-types.test.ts +0 -143
  345. package/test/unit/prompts/builder.test.ts +0 -258
  346. package/test/unit/prompts/loader.test.ts +0 -355
  347. package/test/unit/prompts/sections/conventions.test.ts +0 -30
  348. package/test/unit/prompts/sections/isolation.test.ts +0 -35
  349. package/test/unit/prompts/sections/role-task.test.ts +0 -40
  350. package/test/unit/prompts/sections/sections.test.ts +0 -238
  351. package/test/unit/prompts/sections/story.test.ts +0 -45
  352. package/test/unit/prompts/sections/verdict.test.ts +0 -58
  353. package/test/unit/prompts.test.ts +0 -476
  354. package/test/unit/queue.test.ts +0 -237
  355. package/test/unit/rectification.test.ts +0 -285
  356. package/test/unit/registry.test.ts +0 -288
  357. package/test/unit/review/runner.test.ts +0 -117
  358. package/test/unit/routing/content-hash.test.ts +0 -99
  359. package/test/unit/routing/routing-stability.test.ts +0 -208
  360. package/test/unit/routing/strategies/llm.test.ts +0 -306
  361. package/test/unit/routing-advanced.test.ts +0 -313
  362. package/test/unit/routing-core.test.ts +0 -341
  363. package/test/unit/routing-strategies.test.ts +0 -440
  364. package/test/unit/storyid-events.test.ts +0 -213
  365. package/test/unit/tdd-verdict.test.ts +0 -492
  366. package/test/unit/test-output-parser.test.ts +0 -377
  367. package/test/unit/ui/tui-controls.test.ts +0 -335
  368. package/test/unit/ui/tui-cost-and-pty.test.ts +0 -190
  369. package/test/unit/ui/tui-layout.test.ts +0 -379
  370. package/test/unit/ui/tui-stories.test.ts +0 -333
  371. package/test/unit/unit-isolation.test.ts +0 -135
  372. package/test/unit/utils/git.test.ts +0 -50
  373. package/test/unit/utils/path-security.test.ts +0 -47
  374. package/test/unit/utils-helpers.test.ts +0 -318
  375. package/test/unit/verdict.test.ts +0 -325
  376. package/test/unit/verification/orchestrator-types.test.ts +0 -54
  377. package/test/unit/verification/orchestrator.test.ts +0 -66
  378. package/test/unit/verification/smart-runner-config.test.ts +0 -163
  379. package/test/unit/verification/smart-runner-discovery.test.ts +0 -354
  380. package/test/unit/verification/smart-runner.test.ts +0 -262
  381. package/test/unit/verification/strategies/acceptance.test.ts +0 -33
  382. package/test/unit/verification/strategies/regression.test.ts +0 -87
  383. package/test/unit/verification/strategies/scoped.test.ts +0 -100
  384. package/test/unit/worktree-manager.test.ts +0 -159
  385. package/tsconfig.json +0 -27
@@ -1,234 +0,0 @@
1
- # v0.10 — Prompt Optimizer
2
-
3
- **Status:** Draft
4
- **Author:** Subrina
5
- **Date:** 2026-02-22
6
- **Base:** v0.9.2
7
-
8
- ## Overview
9
-
10
- Abstract prompt optimization layer that sits between prompt assembly and agent execution. Reduces token usage while preserving semantic meaning. Supports built-in strategies (rule-based, LLM) and external/custom optimizers.
11
-
12
- ## Motivation
13
-
14
- - Prompts assembled by `promptStage` contain verbose formatting, redundant context, and boilerplate that inflates token counts
15
- - Coding agents (Claude, etc.) perform equally well with concise instructions
16
- - No standardized hook point exists for prompt transformation before execution
17
- - External teams may want to plug in specialized compressors (LLMLingua, custom APIs)
18
-
19
- ## Architecture
20
-
21
- ```
22
- promptStage → optimizerStage (NEW) → executionStage
23
-
24
- IPromptOptimizer (interface)
25
- ├── NoopOptimizer (default, passthrough)
26
- ├── RuleBasedOptimizer (built-in)
27
- │ ├── strip redundant whitespace/formatting
28
- │ ├── deduplicate context vs constitution overlap
29
- │ └── compact acceptance criteria
30
- └── LlmOptimizer (built-in, optional)
31
- └── uses fast-tier model to rewrite verbose prompts
32
- ```
33
-
34
- ### File Structure
35
-
36
- ```
37
- src/optimizer/
38
- types.ts # IPromptOptimizer, PromptOptimizerInput, PromptOptimizerResult
39
- index.ts # resolveOptimizer() factory
40
- noop.optimizer.ts # NoopOptimizer (passthrough)
41
- rule-based.optimizer.ts # RuleBasedOptimizer
42
- llm.optimizer.ts # LlmOptimizer
43
- loader.ts # Custom module loader
44
- src/pipeline/stages/
45
- optimizer.ts # optimizerStage
46
- ```
47
-
48
- ## Interface
49
-
50
- ```typescript
51
- export interface IPromptOptimizer {
52
- /** Unique optimizer name */
53
- name: string;
54
-
55
- /**
56
- * Optimize a prompt before it is sent to the coding agent.
57
- *
58
- * Implementations MUST preserve all technical requirements,
59
- * acceptance criteria semantics, and code references.
60
- */
61
- optimize(input: PromptOptimizerInput): Promise<PromptOptimizerResult>;
62
- }
63
-
64
- export interface PromptOptimizerInput {
65
- /** Assembled prompt from promptStage */
66
- prompt: string;
67
- /** Stories being executed (for context) */
68
- stories: UserStory[];
69
- /** Raw context markdown (pre-assembly, for dedup detection) */
70
- contextMarkdown?: string;
71
- /** Nax configuration */
72
- config: NaxConfig;
73
- }
74
-
75
- export interface PromptOptimizerResult {
76
- /** Optimized prompt */
77
- prompt: string;
78
- /** Estimated token count before optimization */
79
- originalTokens: number;
80
- /** Estimated token count after optimization */
81
- optimizedTokens: number;
82
- /** Savings percentage (0-1) */
83
- savings: number;
84
- /** List of applied optimization rules/passes */
85
- appliedRules: string[];
86
- }
87
- ```
88
-
89
- ## Built-in Optimizers
90
-
91
- ### NoopOptimizer
92
-
93
- Passthrough — returns prompt unchanged with zero savings. Default when optimizer is disabled or strategy is unrecognized.
94
-
95
- ### RuleBasedOptimizer
96
-
97
- Deterministic, zero-cost transformations:
98
-
99
- | Rule | Description |
100
- |:-----|:------------|
101
- | `stripWhitespace` | Collapse multiple blank lines to single, trim trailing whitespace |
102
- | `compactCriteria` | Convert verbose acceptance criteria to terse bullet format |
103
- | `deduplicateContext` | Remove context sections that duplicate constitution content |
104
- | `maxPromptTokens` | If prompt exceeds threshold, aggressively trim context (not story/AC) |
105
-
106
- ### LlmOptimizer
107
-
108
- Uses a fast-tier model (e.g., haiku) to rewrite the prompt:
109
-
110
- - Only triggers when prompt exceeds `minPromptTokens` threshold
111
- - System prompt: "Rewrite this coding task prompt to be {targetReduction}% shorter. Preserve ALL technical requirements, acceptance criteria, file paths, and code references exactly. Remove only verbose prose, redundant explanations, and formatting fluff."
112
- - Falls back to original prompt if LLM call fails
113
-
114
- ## Configuration
115
-
116
- New `optimizer` section in `nax/config.json`:
117
-
118
- ```json
119
- {
120
- "optimizer": {
121
- "enabled": true,
122
- "strategy": "rule-based",
123
- "strategies": {
124
- "rule-based": {
125
- "stripWhitespace": true,
126
- "compactCriteria": true,
127
- "deduplicateContext": true,
128
- "maxPromptTokens": 8000
129
- },
130
- "llm": {
131
- "model": "fast",
132
- "targetReduction": 0.4,
133
- "minPromptTokens": 2000
134
- },
135
- "custom": {
136
- "module": "./my-optimizer.js",
137
- "options": {}
138
- }
139
- }
140
- }
141
- }
142
- ```
143
-
144
- All fields are optional. When `optimizer` is absent or `enabled: false`, the NoopOptimizer is used.
145
-
146
- ## Pipeline Integration
147
-
148
- ```typescript
149
- // src/pipeline/stages/optimizer.ts
150
- export const optimizerStage: PipelineStage = {
151
- name: "optimizer",
152
- enabled: (ctx) => ctx.config.optimizer?.enabled ?? false,
153
- async execute(ctx: PipelineContext): Promise<StageResult> {
154
- const optimizer = resolveOptimizer(ctx.config);
155
- const result = await optimizer.optimize({
156
- prompt: ctx.prompt!,
157
- stories: ctx.stories,
158
- contextMarkdown: ctx.contextMarkdown,
159
- config: ctx.config,
160
- });
161
- ctx.prompt = result.prompt;
162
- logger.info("optimizer", `${optimizer.name}: ${result.savings}% savings`, {
163
- originalTokens: result.originalTokens,
164
- optimizedTokens: result.optimizedTokens,
165
- rules: result.appliedRules,
166
- });
167
- return { action: "continue" };
168
- },
169
- };
170
- ```
171
-
172
- Stage order: `routing → context → constitution → prompt → **optimizer** → execution → review → acceptance → completion`
173
-
174
- ## Custom/External Optimizer
175
-
176
- Custom optimizers are loaded via the **plugin system** (see `v0.10-plugin-system.md`). A plugin providing an optimizer implements the `IPromptOptimizer` interface:
177
-
178
- ```javascript
179
- // nax/plugins/my-optimizer/index.js
180
- module.exports = {
181
- name: "my-custom-optimizer",
182
- version: "1.0.0",
183
- provides: ["optimizer"],
184
- extensions: {
185
- optimizer: {
186
- name: "llmlingua",
187
- async optimize(input) {
188
- const optimized = await externalService.compress(input.prompt);
189
- return {
190
- prompt: optimized,
191
- originalTokens: estimateTokens(input.prompt),
192
- optimizedTokens: estimateTokens(optimized),
193
- savings: calculateSavings(input.prompt, optimized),
194
- appliedRules: ["external-compression"],
195
- };
196
- },
197
- },
198
- },
199
- };
200
- ```
201
-
202
- Plugin optimizers override the built-in strategy when loaded. See plugin system spec for loading and conflict resolution.
203
-
204
- ## User Stories
205
-
206
- | # | Title | Complexity | Est. LOC | Dependencies |
207
- |:--|:------|:-----------|:---------|:-------------|
208
- | US-001 | Define IPromptOptimizer interface, types, and NoopOptimizer | simple | 60 | — |
209
- | US-002 | Implement RuleBasedOptimizer | medium | 150 | US-001 |
210
- | US-003 | Implement LlmOptimizer with fast-tier rewrite | medium | 120 | US-001 |
211
- | US-004 | Add optimizerStage to pipeline + config schema + resolveOptimizer factory | medium | 100 | US-001 |
212
- | US-005 | Custom module loader for external optimizers | simple | 60 | US-001, US-004 |
213
-
214
- ## Token Estimation
215
-
216
- Use a simple heuristic for token counting (no external tokenizer dependency):
217
-
218
- ```typescript
219
- /** ~4 chars per token for English text (rough estimate) */
220
- export function estimateTokens(text: string): number {
221
- return Math.ceil(text.length / 4);
222
- }
223
- ```
224
-
225
- This is sufficient for savings calculation. Exact counts are not required.
226
-
227
- ## Design Decisions
228
-
229
- 1. **NoopOptimizer as default** — zero breaking changes, fully opt-in
230
- 2. **Strategy pattern** — `resolveOptimizer()` factory selects implementation based on config
231
- 3. **Composable (future)** — interface supports chaining (rule-based → LLM) in a future version
232
- 4. **Metrics in result** — always report token savings for cost tracking and logging
233
- 5. **Fail-safe** — all optimizers fall back to original prompt on error
234
- 6. **No external dependencies** — rule-based and LLM optimizers use only existing nax infrastructure
package/docs/v0.3-spec.md DELETED
@@ -1,244 +0,0 @@
1
- # ngent v0.3 Specification
2
- **Date:** 2026-02-17
3
- **Status:** Draft
4
-
5
- ## Overview
6
-
7
- v0.3 adds LLM-enhanced analysis and a constitution system inspired by Relentless. The goal: replace keyword-based routing with codebase-aware intelligence, and give ngent a governance framework that agents reference during execution.
8
-
9
- ## Feature 1: LLM-Enhanced Analyze
10
-
11
- ### Problem
12
- `ngent analyze` currently uses keyword matching to classify stories. "Add caching" looks simple by keywords, but if the codebase has no cache infrastructure, it's actually complex. Only an LLM reading the code can catch that.
13
-
14
- ### Solution
15
- During `ngent analyze`, make one cheap LLM call (haiku) that reads the codebase structure + story descriptions and returns structured routing decisions.
16
-
17
- ### Flow
18
- ```
19
- ngent analyze
20
- 1. Parse tasks.md → extract stories (existing)
21
- 2. Scan codebase → generate summary (NEW)
22
- - file tree (src/ only, max depth 3)
23
- - package.json dependencies
24
- - existing test patterns
25
- 3. LLM call → classify all stories in one shot (NEW)
26
- Input: codebase summary + all stories
27
- Output: JSON array with per-story:
28
- - complexity: simple/medium/complex/expert
29
- - relevantFiles: string[] (files the story will likely touch)
30
- - reasoning: string (why this classification)
31
- - estimatedLOC: number
32
- - risks: string[] (potential issues)
33
- 4. Merge LLM output into prd.json (existing routing fields)
34
- 5. Fall back to keyword matching if LLM call fails (graceful degradation)
35
- ```
36
-
37
- ### Classification Prompt (single call)
38
- ```
39
- You are a code complexity classifier. Given a codebase summary and user stories,
40
- classify each story's implementation complexity.
41
-
42
- CODEBASE:
43
- {fileTree}
44
- {dependencies}
45
- {existingPatterns}
46
-
47
- STORIES:
48
- {storiesJson}
49
-
50
- For each story, respond with JSON:
51
- [{
52
- "storyId": "US-001",
53
- "complexity": "simple|medium|complex|expert",
54
- "relevantFiles": ["src/path/to/file.ts"],
55
- "reasoning": "Why this complexity level",
56
- "estimatedLOC": 50,
57
- "risks": ["No existing cache layer"]
58
- }]
59
- ```
60
-
61
- ### Config
62
- ```json
63
- {
64
- "analyze": {
65
- "llmEnhanced": true,
66
- "classifierModel": "fast",
67
- "fallbackToKeywords": true,
68
- "maxCodebaseSummaryTokens": 5000
69
- }
70
- }
71
- ```
72
-
73
- ### Cost
74
- ~$0.01-0.02 per analyze run (one haiku call). Pays for itself by preventing one misrouted story.
75
-
76
- ### Acceptance Criteria
77
- - [ ] Codebase scanner generates file tree + dependency summary
78
- - [ ] Single LLM call classifies all stories with structured JSON output
79
- - [ ] relevantFiles populated in prd.json for context builder to use
80
- - [ ] Falls back to keyword matching on LLM failure (timeout, parse error)
81
- - [ ] Config option to disable LLM-enhanced analysis
82
- - [ ] Works with existing tasks.md format (no changes required)
83
-
84
- ---
85
-
86
- ## Feature 2: Constitution System
87
-
88
- ### Problem
89
- ngent agents execute stories with a generic prompt. There's no project-specific governance — coding standards, architectural rules, testing requirements. Relentless solves this with a versioned constitution that agents reference.
90
-
91
- ### Solution
92
- Add a `constitution.md` file to the ngent project directory that gets injected into every agent session prompt.
93
-
94
- ### Structure
95
- ```
96
- project/
97
- ngent/
98
- config.json
99
- constitution.md ← NEW
100
- tasks.md
101
- prd.json
102
- ```
103
-
104
- ### Constitution Format
105
- ```markdown
106
- # Project Constitution
107
-
108
- ## Coding Standards
109
- - Use Bun-native APIs, not Node.js
110
- - Functional style for pure logic
111
- - Max 400 lines per file
112
-
113
- ## Testing Requirements
114
- - All new code must have tests
115
- - Use bun:test (describe/test/expect)
116
- - Target 80%+ coverage
117
-
118
- ## Architecture Rules
119
- - Each module: types.ts, implementation, index.ts barrel
120
- - No circular dependencies
121
- - Immutable data patterns
122
-
123
- ## Forbidden Patterns
124
- - No `any` type
125
- - No console.log in production code
126
- - No hardcoded secrets
127
- ```
128
-
129
- ### How It Works
130
- 1. `ngent init` creates a starter `constitution.md` (template with common rules)
131
- 2. Human customizes it for their project
132
- 3. During `ngent run`, constitution is injected into every agent prompt:
133
- ```
134
- CONSTITUTION (follow these rules strictly):
135
- {constitutionContent}
136
-
137
- STORY:
138
- {storyPrompt}
139
- ```
140
- 4. Constitution content counts against context token budget (priority 95 — highest after story itself)
141
- 5. Large constitutions get truncated with warning
142
-
143
- ### Config
144
- ```json
145
- {
146
- "constitution": {
147
- "enabled": true,
148
- "path": "constitution.md",
149
- "maxTokens": 2000
150
- }
151
- }
152
- ```
153
-
154
- ### Acceptance Criteria
155
- - [ ] `ngent init` generates starter constitution.md
156
- - [ ] Constitution loaded and injected into all agent prompts
157
- - [ ] Counts against context token budget (priority 95)
158
- - [ ] Warning if constitution exceeds maxTokens
159
- - [ ] Config option to disable
160
- - [ ] Works with both single-session and TDD modes
161
-
162
- ---
163
-
164
- ## Feature 3: Simplified Review Phase
165
-
166
- ### Problem
167
- Stories are marked complete after tests pass. No automated quality gate for lint, typecheck, or code quality issues that tests don't catch.
168
-
169
- ### Solution
170
- After each story's implementation, run a quick verification phase before marking it as passed.
171
-
172
- ### Flow
173
- ```
174
- Story implementation complete (tests pass)
175
- → Review phase:
176
- 1. bun run typecheck (if tsconfig exists)
177
- 2. bun run lint (if lint script exists)
178
- 3. bun test (final verification)
179
- → All pass → mark story as passed
180
- → Any fail → mark story as failed (with review failure reason)
181
- ```
182
-
183
- ### Config
184
- ```json
185
- {
186
- "review": {
187
- "enabled": true,
188
- "checks": ["typecheck", "lint", "test"],
189
- "commands": {
190
- "typecheck": "bun run typecheck",
191
- "lint": "bun run lint",
192
- "test": "bun test"
193
- }
194
- }
195
- }
196
- ```
197
-
198
- ### Acceptance Criteria
199
- - [ ] Review phase runs after each story implementation
200
- - [ ] Configurable checks (typecheck, lint, test)
201
- - [ ] Custom commands per check
202
- - [ ] Failure in review marks story as failed with reason
203
- - [ ] Can be disabled via config
204
- - [ ] Review results logged in progress.txt
205
-
206
- ---
207
-
208
- ## Feature 4: SpecKit-Inspired Workflow Commands (Optional)
209
-
210
- Inspired by Relentless's command chain: specify → plan → tasks → analyze → implement.
211
-
212
- ### New Commands
213
- ```bash
214
- ngent specify "Add URL shortener with analytics"
215
- → Generates spec.md from natural language (sonnet call)
216
-
217
- ngent plan
218
- → LLM-enhanced analyze (Feature 1 above)
219
- → Auto-populates relevantFiles, complexity, risks
220
-
221
- ngent run
222
- → Execute with constitution (Feature 2) + review (Feature 3)
223
- ```
224
-
225
- `ngent specify` is the DECOMPOSE stage discussed earlier — optional, human can still write tasks.md manually.
226
-
227
- ### Acceptance Criteria
228
- - [ ] `ngent specify` generates structured spec.md from description
229
- - [ ] `ngent plan` is alias for LLM-enhanced analyze
230
- - [ ] Both commands optional — existing tasks.md workflow still works
231
-
232
- ---
233
-
234
- ## Priority Order
235
-
236
- | # | Feature | Effort | Impact |
237
- |:---|:---|:---|:---|
238
- | 1 | LLM-Enhanced Analyze | M | High — fixes routing accuracy |
239
- | 2 | Constitution System | S-M | High — governs all agent behavior |
240
- | 3 | Review Phase | S | Medium — quality gate |
241
- | 4 | SpecKit Commands | M | Low — convenience, not essential |
242
-
243
- ## Estimated Total
244
- ~600-800 LOC. Features 1-3 are the core of v0.3. Feature 4 is nice-to-have.
package/docs/v0.4-spec.md DELETED
@@ -1,140 +0,0 @@
1
- # ngent v0.4 Specification
2
- **Date:** 2026-02-17
3
- **Status:** Draft
4
-
5
- ## Feature: Acceptance Validation & Self-Correcting Loop
6
-
7
- ### Problem
8
- ngent verifies stories individually (tests pass?) but never validates the feature as a whole against the human's acceptance criteria. Stories can all pass but the feature can still mismatch what was specified.
9
-
10
- ### Solution
11
- Two-phase acceptance validation:
12
-
13
- 1. **At analyze time:** Generate acceptance tests from spec.md ACs
14
- 2. **After all stories complete:** Run acceptance tests as final gate
15
- 3. **On failure:** Auto-generate fix stories targeting only the gaps, retry (max 2 loops)
16
-
17
- ### Flow
18
- ```
19
- ngent analyze
20
- → Decompose spec → stories (existing)
21
- → NEW: Generate acceptance tests from spec.md ACs
22
- → Write to ngent/features/<name>/acceptance.test.ts
23
-
24
- ngent run
25
- → Execute all stories (existing pipeline)
26
- → All stories pass
27
- → NEW: Acceptance stage — run acceptance.test.ts
28
- → All pass → ✅ Feature complete
29
- → Some fail →
30
- Map failed ACs → relevant stories
31
- Create fix stories (US-FIX-001, etc.)
32
- Run fix stories only
33
- Re-run acceptance tests
34
- Pass? → ✅ Done
35
- Fail again? → Loop (max 2 retries)
36
- Still failing? → ⏸ Pause, ask human
37
- ```
38
-
39
- ### Acceptance Test Generation
40
-
41
- During `ngent analyze`, after decomposing stories, make one additional LLM call:
42
-
43
- ```
44
- Input: spec.md acceptance criteria + codebase context + story list
45
- Output: acceptance.test.ts with one test per AC
46
-
47
- Example:
48
- AC-2: "set(key, value, ttl) expires after ttl milliseconds"
49
-
50
- test("AC-2: TTL expiry", async () => {
51
- const store = new KVStore();
52
- store.set("key", "value", 50);
53
- await Bun.sleep(60);
54
- expect(store.get("key")).toBeUndefined();
55
- });
56
- ```
57
-
58
- **Rules for acceptance tests:**
59
- - Test observable behavior only (not implementation details)
60
- - Each AC maps to exactly one test
61
- - Tests are independent (no shared state)
62
- - Tests must be runnable without mocking (integration-level)
63
-
64
- ### Fix Story Generation
65
-
66
- When acceptance tests fail:
67
-
68
- ```typescript
69
- interface FixStory {
70
- id: string; // "US-FIX-001"
71
- title: string; // "Fix: AC-2 TTL expiry timing"
72
- failedAC: string; // "AC-2"
73
- testOutput: string; // actual vs expected from test failure
74
- relatedStories: string[]; // ["US-002"] — original stories that built this
75
- description: string; // LLM-generated fix description
76
- }
77
- ```
78
-
79
- The fix story prompt includes:
80
- - The failed acceptance test output
81
- - The relevant source code (from relatedStories)
82
- - The original AC text
83
- - Instruction: "Fix the code to make this acceptance test pass"
84
-
85
- ### Pipeline Integration
86
-
87
- New pipeline stage: `acceptanceStage` — runs after `completionStage` when all stories are done.
88
-
89
- ```typescript
90
- const defaultPipeline: PipelineStage[] = [
91
- queueCheckStage,
92
- routingStage,
93
- constitutionStage,
94
- contextStage,
95
- promptStage,
96
- executionStage,
97
- verifyStage,
98
- reviewStage,
99
- completionStage,
100
- acceptanceStage, // NEW — runs only when all stories complete
101
- ];
102
- ```
103
-
104
- ### Config
105
- ```json
106
- {
107
- "acceptance": {
108
- "enabled": true,
109
- "maxRetries": 2,
110
- "generateTests": true,
111
- "testPath": "acceptance.test.ts"
112
- }
113
- }
114
- ```
115
-
116
- ### Human Override
117
- ```bash
118
- ngent accept --override AC-2 "intentional: using lazy expiry instead of exact timing"
119
- ```
120
- Marks an AC as accepted despite test failure. Stored in prd.json:
121
- ```json
122
- {
123
- "acceptanceOverrides": {
124
- "AC-2": "intentional: using lazy expiry instead of exact timing"
125
- }
126
- }
127
- ```
128
-
129
- ### Acceptance Criteria for This Feature
130
- - [ ] Acceptance tests generated from spec.md ACs during analyze
131
- - [ ] Tests run after all stories complete
132
- - [ ] Failed ACs mapped to relevant stories
133
- - [ ] Fix stories auto-generated and executed
134
- - [ ] Max 2 retry loops before pausing for human
135
- - [ ] `ngent accept --override` skips specific ACs
136
- - [ ] Works with existing pipeline (new stage, not inline)
137
- - [ ] Config to disable acceptance validation
138
-
139
- ### Estimated Effort
140
- ~400-600 LOC. Medium complexity — mostly LLM prompt engineering for test generation and fix story creation.