@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,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.