@nathapp/nax 0.27.1 → 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 (383) 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 +42 -1
  5. package/src/cli/prompts.ts +18 -6
  6. package/src/config/defaults.ts +2 -0
  7. package/src/config/schemas.ts +11 -0
  8. package/src/config/types.ts +8 -0
  9. package/src/context/builder.ts +10 -1
  10. package/src/pipeline/stages/execution.ts +5 -0
  11. package/src/pipeline/stages/prompt.ts +13 -4
  12. package/src/precheck/checks-warnings.ts +37 -0
  13. package/src/precheck/checks.ts +1 -0
  14. package/src/precheck/index.ts +14 -7
  15. package/src/prompts/builder.ts +178 -0
  16. package/src/prompts/index.ts +2 -0
  17. package/src/prompts/loader.ts +43 -0
  18. package/src/prompts/sections/conventions.ts +15 -0
  19. package/src/prompts/sections/index.ts +11 -0
  20. package/src/prompts/sections/isolation.ts +24 -0
  21. package/src/prompts/sections/role-task.ts +34 -0
  22. package/src/prompts/sections/story.ts +13 -0
  23. package/src/prompts/sections/verdict.ts +70 -0
  24. package/src/prompts/templates/implementer.ts +6 -0
  25. package/src/prompts/templates/single-session.ts +6 -0
  26. package/src/prompts/templates/test-writer.ts +6 -0
  27. package/src/prompts/templates/verifier.ts +6 -0
  28. package/src/prompts/types.ts +21 -0
  29. package/src/review/runner.ts +6 -1
  30. package/src/tdd/session-runner.ts +12 -12
  31. package/src/version.ts +2 -1
  32. package/.claude/rules/01-project-conventions.md +0 -34
  33. package/.claude/rules/02-test-architecture.md +0 -39
  34. package/.claude/rules/03-test-writing.md +0 -58
  35. package/.claude/rules/04-forbidden-patterns.md +0 -29
  36. package/.claude/settings.json +0 -15
  37. package/.githooks/pre-commit +0 -16
  38. package/.gitlab-ci.yml +0 -103
  39. package/.mcp.json +0 -8
  40. package/BRIEF.md +0 -140
  41. package/CLAUDE.md +0 -143
  42. package/US-007-IMPLEMENTATION.md +0 -139
  43. package/biome.json +0 -14
  44. package/bun.lock +0 -163
  45. package/bunfig.toml +0 -12
  46. package/docker-compose.test.yml +0 -15
  47. package/docs/20260216-fix-plan-context-review.md +0 -56
  48. package/docs/20260216-relentless-vs-ngent-comparison.md +0 -208
  49. package/docs/20260216-v02-plan.md +0 -136
  50. package/docs/20260216-v02-review.md +0 -685
  51. package/docs/20260217-dogfood-findings.md +0 -56
  52. package/docs/20260217-p2-plus-plan.md +0 -117
  53. package/docs/20260217-partial-fixes-plan.md +0 -62
  54. package/docs/20260217-plan-analyze-spec.md +0 -117
  55. package/docs/20260217-post-impl-review.md +0 -1137
  56. package/docs/20260217-quick-wins-plan.md +0 -66
  57. package/docs/20260217-split-runner-plan.md +0 -75
  58. package/docs/20260217-v03-impl-plan.md +0 -80
  59. package/docs/20260217-v03-post-impl-review.md +0 -589
  60. package/docs/20260217-v04-impl-plan.md +0 -86
  61. package/docs/20260217-v05-post-impl-review.md +0 -850
  62. package/docs/20260217-v06-post-impl-review.md +0 -817
  63. package/docs/20260218-adr003-port-plan.md +0 -151
  64. package/docs/20260218-review-adr003-verification.md +0 -175
  65. package/docs/20260219-fix-plan-bug16-19.md +0 -79
  66. package/docs/20260219-fix-plan-bug20-22.md +0 -114
  67. package/docs/20260219-plan-llm-routing.md +0 -116
  68. package/docs/20260219-review-bug20-22-fixes.md +0 -135
  69. package/docs/20260219-routing-baseline-keyword.md +0 -63
  70. package/docs/20260220-plan-structured-logging-p1.md +0 -80
  71. package/docs/20260220-plan-structured-logging-p2.md +0 -37
  72. package/docs/20260220-review-llm-routing.md +0 -180
  73. package/docs/20260220-review-post-fix-llm-routing.md +0 -70
  74. package/docs/20260221-fix-plan-relevantfiles-split.md +0 -101
  75. package/docs/20260221-fix-plan-routing-mode.md +0 -125
  76. package/docs/20260221-review-v0.9-implementation.md +0 -379
  77. package/docs/20260222-fix-plan-v091-routing-isolation.md +0 -197
  78. package/docs/20260223-fix-plan-prompt-audit.md +0 -62
  79. package/docs/20260224-nax-roadmap-phases.md +0 -189
  80. package/docs/20260225-phase2-llm-service-layer.md +0 -401
  81. package/docs/20260225-review-v0.10.1.md +0 -187
  82. package/docs/20260303-v010-implementation-plan.md +0 -165
  83. package/docs/20260304-review-nax.md +0 -492
  84. package/docs/CLAUDE.md.bak +0 -191
  85. package/docs/ROADMAP.md +0 -364
  86. package/docs/SPEC-rectification.md +0 -0
  87. package/docs/SPEC.md +0 -324
  88. package/docs/US-001-plugin-loading-verification.md +0 -152
  89. package/docs/adr/ADR-005-implementation-plan.md +0 -655
  90. package/docs/adr/ADR-005-pipeline-re-architecture.md +0 -464
  91. package/docs/architecture-analysis.md +0 -1076
  92. package/docs/bugs/BUG-21-escalation-null-attempts.md +0 -48
  93. package/docs/bugs-from-dogfood-run-c.md +0 -243
  94. package/docs/code-review-20260228.md +0 -612
  95. package/docs/code-review-v0.15.0.md +0 -629
  96. package/docs/hook-lifecycle-test-plan.md +0 -149
  97. package/docs/releases/v0.11.0-and-earlier.md +0 -20
  98. package/docs/releases/v0.12.0.md +0 -15
  99. package/docs/releases/v0.13.0.md +0 -14
  100. package/docs/releases/v0.14.0.md +0 -20
  101. package/docs/releases/v0.14.1.md +0 -36
  102. package/docs/releases/v0.14.2.md +0 -51
  103. package/docs/releases/v0.14.3.md +0 -174
  104. package/docs/releases/v0.14.4.md +0 -94
  105. package/docs/releases/v0.15.0.md +0 -502
  106. package/docs/releases/v0.15.1.md +0 -170
  107. package/docs/releases/v0.15.3.md +0 -193
  108. package/docs/specs/bug-039-orphan-processes.md +0 -131
  109. package/docs/specs/bug-040-review-rectification.md +0 -82
  110. package/docs/specs/bug-041-cross-story-test-isolation.md +0 -88
  111. package/docs/specs/bug-042-verifier-failure-capture.md +0 -117
  112. package/docs/specs/bun-pty-migration.md +0 -171
  113. package/docs/specs/central-run-registry.md +0 -116
  114. package/docs/specs/feat-010-smart-runner-git-history.md +0 -96
  115. package/docs/specs/feat-011-file-context-strategy.md +0 -73
  116. package/docs/specs/feat-012-tdd-writer-tier.md +0 -79
  117. package/docs/specs/feat-013-test-after-review.md +0 -89
  118. package/docs/specs/feat-014-heartbeat-observability.md +0 -127
  119. package/docs/specs/status-file-consolidation.md +0 -93
  120. package/docs/specs/status-file-v0.10.1.md +0 -812
  121. package/docs/specs/trigger-completion.md +0 -145
  122. package/docs/specs/verification-architecture-v2.md +0 -343
  123. package/docs/tdd/strategies.md +0 -97
  124. package/docs/v0.10-global-config.md +0 -206
  125. package/docs/v0.10-plugin-system.md +0 -415
  126. package/docs/v0.10-prompt-optimizer.md +0 -234
  127. package/docs/v0.3-spec.md +0 -244
  128. package/docs/v0.4-spec.md +0 -140
  129. package/docs/v0.5-spec.md +0 -237
  130. package/docs/v0.6-spec.md +0 -371
  131. package/docs/v0.7-spec.md +0 -177
  132. package/docs/v0.8-llm-routing.md +0 -206
  133. package/docs/v0.8-structured-logging.md +0 -132
  134. package/docs/v0.9.3-prompt-audit.md +0 -112
  135. package/examples/plugins/console-reporter/index.test.ts +0 -207
  136. package/examples/plugins/console-reporter/index.ts +0 -110
  137. package/memory/topic/feat-010-baseref.md +0 -28
  138. package/memory/topic/feat-013-test-after-deprecation.md +0 -22
  139. package/nax/config.json +0 -154
  140. package/nax/features/bug-039-medium/prd.json +0 -45
  141. package/nax/features/bugfix-v0171/prd.json +0 -52
  142. package/nax/features/central-run-registry/prd.json +0 -105
  143. package/nax/features/config-management/prd.json +0 -108
  144. package/nax/features/config-management/progress.txt +0 -5
  145. package/nax/features/diagnose/acceptance.test.ts +0 -414
  146. package/nax/features/diagnose/prd.json +0 -41
  147. package/nax/features/nax-compliance/prd.json +0 -52
  148. package/nax/features/nax-compliance/progress.txt +0 -1
  149. package/nax/features/orchestration-fixes/prd.json +0 -89
  150. package/nax/features/orchestration-fixes/progress.txt +0 -1
  151. package/nax/features/plugin-integration/US-007-VERIFICATION.md +0 -259
  152. package/nax/features/plugin-integration/prd.json +0 -208
  153. package/nax/features/plugin-integration/progress.txt +0 -5
  154. package/nax/features/post-rearch-bugfix/prd.json +0 -137
  155. package/nax/features/precheck/prd.json +0 -205
  156. package/nax/features/precheck/progress.txt +0 -15
  157. package/nax/features/review-quality/prd.json +0 -55
  158. package/nax/features/routing-persistence/prd.json +0 -104
  159. package/nax/features/routing-persistence/progress.txt +0 -1
  160. package/nax/features/smart-test-runner/plan.md +0 -7
  161. package/nax/features/smart-test-runner/prd.json +0 -203
  162. package/nax/features/smart-test-runner/progress.txt +0 -13
  163. package/nax/features/smart-test-runner/spec.md +0 -7
  164. package/nax/features/smart-test-runner/tasks.md +0 -8
  165. package/nax/features/status-file-consolidation/prd.json +0 -106
  166. package/nax/features/structured-logging/prd.json +0 -199
  167. package/nax/features/trigger-completion/prd.json +0 -150
  168. package/nax/features/trigger-completion/progress.txt +0 -7
  169. package/nax/features/unlock/prd.json +0 -36
  170. package/nax/features/v0.18.3-execution-reliability/prd.json +0 -80
  171. package/nax/features/v0.18.3-execution-reliability/progress.txt +0 -3
  172. package/nax/features/v0.19.0-hardening/plan.md +0 -7
  173. package/nax/features/v0.19.0-hardening/prd.json +0 -84
  174. package/nax/features/v0.19.0-hardening/progress.txt +0 -7
  175. package/nax/features/v0.19.0-hardening/spec.md +0 -18
  176. package/nax/features/v0.19.0-hardening/tasks.md +0 -8
  177. package/nax/features/verify-v2/prd.json +0 -79
  178. package/nax/features/verify-v2/progress.txt +0 -3
  179. package/nax/status.json +0 -36
  180. package/test/COVERAGE-GAPS.md +0 -333
  181. package/test/e2e/cm-003-default-view.test.ts +0 -195
  182. package/test/e2e/plan-analyze-run.test.ts +0 -902
  183. package/test/helpers/helpers.test.ts +0 -295
  184. package/test/helpers/timeout.ts +0 -42
  185. package/test/integration/US-002-TEST-SUMMARY.md +0 -107
  186. package/test/integration/US-003-TEST-SUMMARY.md +0 -149
  187. package/test/integration/US-004-TEST-SUMMARY.md +0 -106
  188. package/test/integration/US-005-TEST-SUMMARY.md +0 -138
  189. package/test/integration/US-007-TEST-SUMMARY.md +0 -100
  190. package/test/integration/cli/agent-validation.test.ts +0 -439
  191. package/test/integration/cli/cli-config-default-edge-cases.test.ts +0 -223
  192. package/test/integration/cli/cli-config-default-view.test.ts +0 -230
  193. package/test/integration/cli/cli-config-diff.test.ts +0 -461
  194. package/test/integration/cli/cli-config.test.ts +0 -737
  195. package/test/integration/cli/cli-diagnose.test.ts +0 -595
  196. package/test/integration/cli/cli-logs.test.ts +0 -346
  197. package/test/integration/cli/cli-plugins.test.ts +0 -679
  198. package/test/integration/cli/cli-precheck.test.ts +0 -372
  199. package/test/integration/cli/cli-run-headless.test.ts +0 -174
  200. package/test/integration/cli/cli.test.ts +0 -76
  201. package/test/integration/cli/precheck-integration.test.ts +0 -476
  202. package/test/integration/cli/precheck-orchestrator.test.ts +0 -247
  203. package/test/integration/cli/precheck.test.ts +0 -806
  204. package/test/integration/config/config-loader.test.ts +0 -266
  205. package/test/integration/config/config.test.ts +0 -444
  206. package/test/integration/config/merger.test.ts +0 -466
  207. package/test/integration/config/paths.test.ts +0 -52
  208. package/test/integration/config/security-loader.test.ts +0 -83
  209. package/test/integration/context/context-integration.test.ts +0 -703
  210. package/test/integration/context/context-path-security.test.ts +0 -173
  211. package/test/integration/context/context-provider-injection.test.ts +0 -507
  212. package/test/integration/context/context-verification-integration.test.ts +0 -296
  213. package/test/integration/context/s5-greenfield-fallback.test.ts +0 -298
  214. package/test/integration/execution/execution-isolation.test.ts +0 -143
  215. package/test/integration/execution/execution.test.ts +0 -634
  216. package/test/integration/execution/feature-status-write.test.ts +0 -302
  217. package/test/integration/execution/parallel.test.ts +0 -251
  218. package/test/integration/execution/prd-pause.test.ts +0 -205
  219. package/test/integration/execution/prd-resolvers.test.ts +0 -186
  220. package/test/integration/execution/progress.test.ts +0 -34
  221. package/test/integration/execution/runner-batching.test.ts +0 -682
  222. package/test/integration/execution/runner-config-plugins.test.ts +0 -462
  223. package/test/integration/execution/runner-escalation.test.ts +0 -561
  224. package/test/integration/execution/runner-fixes.test.ts +0 -400
  225. package/test/integration/execution/runner-plugin-integration.test.ts +0 -544
  226. package/test/integration/execution/runner-queue-and-attempts.test.ts +0 -476
  227. package/test/integration/execution/status-file-integration.test.ts +0 -289
  228. package/test/integration/execution/status-file.test.ts +0 -380
  229. package/test/integration/execution/status-writer.test.ts +0 -447
  230. package/test/integration/execution/story-id-in-events.test.ts +0 -274
  231. package/test/integration/interaction/interaction-chain-pipeline.test.ts +0 -476
  232. package/test/integration/pipeline/hooks.test.ts +0 -363
  233. package/test/integration/pipeline/pipeline-acceptance.test.ts +0 -303
  234. package/test/integration/pipeline/pipeline-events.test.ts +0 -476
  235. package/test/integration/pipeline/pipeline.test.ts +0 -660
  236. package/test/integration/pipeline/reporter-lifecycle.test.ts +0 -862
  237. package/test/integration/pipeline/verify-stage.test.ts +0 -286
  238. package/test/integration/plan/analyze-integration.test.ts +0 -262
  239. package/test/integration/plan/analyze-scanner.test.ts +0 -132
  240. package/test/integration/plan/logger.test.ts +0 -461
  241. package/test/integration/plan/plan.test.ts +0 -157
  242. package/test/integration/plugins/config-integration.test.ts +0 -173
  243. package/test/integration/plugins/config-resolution.test.ts +0 -523
  244. package/test/integration/plugins/loader.test.ts +0 -644
  245. package/test/integration/plugins/plugins-registry.test.ts +0 -747
  246. package/test/integration/plugins/validator.test.ts +0 -564
  247. package/test/integration/review/review-config-commands.test.ts +0 -320
  248. package/test/integration/review/review-config-schema.test.ts +0 -117
  249. package/test/integration/review/review-plugin-integration.test.ts +0 -729
  250. package/test/integration/review/review.test.ts +0 -150
  251. package/test/integration/routing/plugin-routing-advanced.test.ts +0 -461
  252. package/test/integration/routing/plugin-routing-core.test.ts +0 -527
  253. package/test/integration/routing/routing-stage-bug-021.test.ts +0 -275
  254. package/test/integration/routing/routing-stage-greenfield.test.ts +0 -287
  255. package/test/integration/tdd/tdd-cleanup.test.ts +0 -246
  256. package/test/integration/tdd/tdd-orchestrator-core.test.ts +0 -565
  257. package/test/integration/tdd/tdd-orchestrator-failureCategory.test.ts +0 -355
  258. package/test/integration/tdd/tdd-orchestrator-fallback.test.ts +0 -311
  259. package/test/integration/tdd/tdd-orchestrator-lite.test.ts +0 -289
  260. package/test/integration/tdd/tdd-orchestrator-prompts.test.ts +0 -260
  261. package/test/integration/tdd/tdd-orchestrator-verdict.test.ts +0 -536
  262. package/test/integration/tmp/headless-test/test.jsonl +0 -30
  263. package/test/integration/verification/test-scanner.test.ts +0 -403
  264. package/test/integration/verification/verification-asset-check.test.ts +0 -143
  265. package/test/integration/worktree/manager.test.ts +0 -218
  266. package/test/integration/worktree/worktree-merge.test.ts +0 -341
  267. package/test/manual/logging-formatter-demo.ts +0 -158
  268. package/test/ui/tui-agent-panel.test.tsx +0 -99
  269. package/test/ui/tui-pty-integration.test.tsx +0 -146
  270. package/test/unit/acceptance.test.ts +0 -187
  271. package/test/unit/agent-stderr-capture.test.ts +0 -147
  272. package/test/unit/agents/claude.test.ts +0 -107
  273. package/test/unit/analyze-classifier.test.ts +0 -216
  274. package/test/unit/analyze.test.ts +0 -224
  275. package/test/unit/auto-detect.test.ts +0 -250
  276. package/test/unit/cli-status-project-level.test.ts +0 -283
  277. package/test/unit/cli-status.test.ts +0 -418
  278. package/test/unit/commands/common.test.ts +0 -321
  279. package/test/unit/commands/logs.test.ts +0 -458
  280. package/test/unit/commands/runs.test.ts +0 -303
  281. package/test/unit/commands/unlock.test.ts +0 -320
  282. package/test/unit/config/defaults.test.ts +0 -70
  283. package/test/unit/config/quality-commands-schema.test.ts +0 -72
  284. package/test/unit/config/regression-gate-schema.test.ts +0 -160
  285. package/test/unit/config/smart-runner-flag.test.ts +0 -250
  286. package/test/unit/constitution-generators.test.ts +0 -161
  287. package/test/unit/constitution.test.ts +0 -210
  288. package/test/unit/context/context-autodetect.test.ts +0 -297
  289. package/test/unit/context/context-build.test.ts +0 -575
  290. package/test/unit/context/context-coverage.test.ts +0 -236
  291. package/test/unit/context/context-error.test.ts +0 -93
  292. package/test/unit/context/context-estimate-tokens.test.ts +0 -201
  293. package/test/unit/context/context-format.test.ts +0 -302
  294. package/test/unit/context/context-isolation.test.ts +0 -267
  295. package/test/unit/context/context-sort.test.ts +0 -93
  296. package/test/unit/context/context-story.test.ts +0 -108
  297. package/test/unit/context/prior-failures.test.ts +0 -463
  298. package/test/unit/context.test.ts +0 -1726
  299. package/test/unit/cost.test.ts +0 -231
  300. package/test/unit/crash-recovery.test.ts +0 -309
  301. package/test/unit/escalation.test.ts +0 -127
  302. package/test/unit/execution/lifecycle/run-completion.test.ts +0 -240
  303. package/test/unit/execution/lifecycle/run-regression.test.ts +0 -420
  304. package/test/unit/execution/pid-registry.test.ts +0 -241
  305. package/test/unit/execution/sequential-executor.test.ts +0 -235
  306. package/test/unit/execution/sfc-004-dead-code-cleanup.test.ts +0 -89
  307. package/test/unit/execution/structured-failure.test.ts +0 -415
  308. package/test/unit/execution-logging-stderr.test.ts +0 -157
  309. package/test/unit/execution-stage.test.ts +0 -123
  310. package/test/unit/fix-generator.test.ts +0 -276
  311. package/test/unit/formatters.test.ts +0 -468
  312. package/test/unit/greenfield.test.ts +0 -180
  313. package/test/unit/hooks/shell-security.test.ts +0 -40
  314. package/test/unit/interaction/auto-plugin.test.ts +0 -162
  315. package/test/unit/interaction/human-review-trigger.test.ts +0 -165
  316. package/test/unit/interaction-network-failures.test.ts +0 -390
  317. package/test/unit/interaction-plugins.test.ts +0 -472
  318. package/test/unit/logging/formatter.test.ts +0 -456
  319. package/test/unit/merge.test.ts +0 -269
  320. package/test/unit/metrics/aggregator.test.ts +0 -164
  321. package/test/unit/metrics/tracker.test.ts +0 -186
  322. package/test/unit/metrics.test.ts +0 -276
  323. package/test/unit/optimizer/noop.optimizer.test.ts +0 -125
  324. package/test/unit/optimizer/rule-based.optimizer.test.ts +0 -358
  325. package/test/unit/pipeline/event-bus.test.ts +0 -105
  326. package/test/unit/pipeline/routing-partial-override.test.ts +0 -121
  327. package/test/unit/pipeline/runner-retry.test.ts +0 -89
  328. package/test/unit/pipeline/stages/autofix.test.ts +0 -97
  329. package/test/unit/pipeline/stages/completion-review-gate.test.ts +0 -218
  330. package/test/unit/pipeline/stages/execution-ambiguity.test.ts +0 -311
  331. package/test/unit/pipeline/stages/execution-merge-conflict.test.ts +0 -218
  332. package/test/unit/pipeline/stages/rectify.test.ts +0 -101
  333. package/test/unit/pipeline/stages/regression-stage.test.ts +0 -69
  334. package/test/unit/pipeline/stages/review.test.ts +0 -201
  335. package/test/unit/pipeline/stages/routing-idempotence.test.ts +0 -139
  336. package/test/unit/pipeline/stages/routing-initial-complexity.test.ts +0 -321
  337. package/test/unit/pipeline/stages/routing-persistence.test.ts +0 -380
  338. package/test/unit/pipeline/stages/verify.test.ts +0 -267
  339. package/test/unit/pipeline/subscribers/events-writer.test.ts +0 -227
  340. package/test/unit/pipeline/subscribers/hooks.test.ts +0 -84
  341. package/test/unit/pipeline/subscribers/interaction.test.ts +0 -313
  342. package/test/unit/pipeline/subscribers/registry.test.ts +0 -149
  343. package/test/unit/pipeline/subscribers/reporters.test.ts +0 -90
  344. package/test/unit/pipeline/verify-smart-runner.test.ts +0 -345
  345. package/test/unit/prd-auto-default.test.ts +0 -291
  346. package/test/unit/prd-failure-category.test.ts +0 -177
  347. package/test/unit/prd-get-next-story.test.ts +0 -215
  348. package/test/unit/precheck-checks.test.ts +0 -841
  349. package/test/unit/precheck-story-size-gate.test.ts +0 -288
  350. package/test/unit/precheck-types.test.ts +0 -143
  351. package/test/unit/prompts.test.ts +0 -476
  352. package/test/unit/queue.test.ts +0 -237
  353. package/test/unit/rectification.test.ts +0 -285
  354. package/test/unit/registry.test.ts +0 -288
  355. package/test/unit/review/runner.test.ts +0 -117
  356. package/test/unit/routing/content-hash.test.ts +0 -99
  357. package/test/unit/routing/routing-stability.test.ts +0 -208
  358. package/test/unit/routing/strategies/llm.test.ts +0 -306
  359. package/test/unit/routing-advanced.test.ts +0 -313
  360. package/test/unit/routing-core.test.ts +0 -341
  361. package/test/unit/routing-strategies.test.ts +0 -440
  362. package/test/unit/storyid-events.test.ts +0 -213
  363. package/test/unit/tdd-verdict.test.ts +0 -492
  364. package/test/unit/test-output-parser.test.ts +0 -377
  365. package/test/unit/ui/tui-controls.test.ts +0 -335
  366. package/test/unit/ui/tui-cost-and-pty.test.ts +0 -190
  367. package/test/unit/ui/tui-layout.test.ts +0 -379
  368. package/test/unit/ui/tui-stories.test.ts +0 -333
  369. package/test/unit/unit-isolation.test.ts +0 -135
  370. package/test/unit/utils/git.test.ts +0 -50
  371. package/test/unit/utils/path-security.test.ts +0 -47
  372. package/test/unit/utils-helpers.test.ts +0 -318
  373. package/test/unit/verdict.test.ts +0 -325
  374. package/test/unit/verification/orchestrator-types.test.ts +0 -54
  375. package/test/unit/verification/orchestrator.test.ts +0 -66
  376. package/test/unit/verification/smart-runner-config.test.ts +0 -163
  377. package/test/unit/verification/smart-runner-discovery.test.ts +0 -354
  378. package/test/unit/verification/smart-runner.test.ts +0 -262
  379. package/test/unit/verification/strategies/acceptance.test.ts +0 -33
  380. package/test/unit/verification/strategies/regression.test.ts +0 -87
  381. package/test/unit/verification/strategies/scoped.test.ts +0 -100
  382. package/test/unit/worktree-manager.test.ts +0 -159
  383. package/tsconfig.json +0 -27
package/docs/v0.7-spec.md DELETED
@@ -1,177 +0,0 @@
1
- # nax v0.7 Specification
2
- **Date:** 2026-02-17
3
- **Status:** Draft
4
-
5
- ## Theme: Test Context Injection
6
-
7
- v0.7 addresses test redundancy caused by isolated story sessions. Each agent session currently writes tests without knowing what prior stories already covered, leading to duplicate coverage.
8
-
9
- ## Problem
10
-
11
- During dogfooding (bun-kv-store, 8 stories), we observed:
12
- - 6 tests for "name is required" (missing, empty, whitespace, not string, null, undefined)
13
- - Each story independently writes "comprehensive tests" for its area
14
- - Validation stories re-test what CRUD stories already covered
15
- - **Root cause:** Each session's prompt has zero visibility into existing test files
16
-
17
- ## Solution: Test Context Injection
18
-
19
- Inject a summary of existing test files into each story's prompt so the agent knows what's already covered and avoids duplication.
20
-
21
- ### How It Works
22
-
23
- Before the **prompt stage**, scan the project's test directory and generate a concise summary:
24
-
25
- ```
26
- ## Existing Test Coverage
27
-
28
- ### test/store.test.ts (45 tests)
29
- - CRUD operations: create, read, update, delete
30
- - Error handling: missing key, invalid value
31
- - Batch operations: getMany, setMany
32
-
33
- ### test/validation.test.ts (12 tests)
34
- - Input validation: name required, type checking
35
- - Size limits: max key length, max value size
36
- ```
37
-
38
- This summary is injected into the prompt alongside the story context, constitution, and other context elements.
39
-
40
- ### Context Element
41
-
42
- ```typescript
43
- interface TestCoverageContext {
44
- type: 'test-coverage';
45
- priority: 85; // Below constitution (95), above file context (50)
46
- content: string; // Formatted test summary
47
- tokens: number;
48
- source: string; // e.g., "test/*.test.ts"
49
- }
50
- ```
51
-
52
- ### Summary Generation
53
-
54
- ```typescript
55
- interface TestSummaryOptions {
56
- /** Test directory to scan (default: auto-detect from config or common patterns) */
57
- testDir?: string;
58
- /** Glob pattern for test files (default: "**/*.test.{ts,js,tsx,jsx}") */
59
- testPattern?: string;
60
- /** Max tokens for the summary (default: 500) */
61
- maxTokens?: number;
62
- /** Summary detail level */
63
- detail: 'names-only' | 'names-and-counts' | 'describe-blocks';
64
- }
65
- ```
66
-
67
- **Detail levels:**
68
- - `names-only` — Just file names and test count: `test/store.test.ts (45 tests)`
69
- - `names-and-counts` — File names + top-level describe blocks with counts
70
- - `describe-blocks` — File names + describe blocks + test names (most expensive but most useful)
71
-
72
- **Default:** `names-and-counts` (good balance of info vs tokens)
73
-
74
- ### Scanning Approach
75
-
76
- 1. Find test files matching pattern
77
- 2. For each file, extract `describe()` and `test()`/`it()` block names via regex (no AST parsing needed)
78
- 3. Format as markdown summary
79
- 4. Truncate to token budget
80
-
81
- ### Prompt Injection
82
-
83
- Add to the story prompt:
84
-
85
- ```
86
- ## Existing Test Coverage
87
-
88
- The following tests already exist. DO NOT duplicate this coverage.
89
- Focus only on testing NEW behavior introduced by this story.
90
-
91
- ### test/store.test.ts (45 tests)
92
- - CRUD operations (12 tests): create, read, update, delete, upsert
93
- - Validation (8 tests): required fields, type checks, size limits
94
- - Error handling (6 tests): not found, duplicate key, connection error
95
- ...
96
-
97
- ## Your Story
98
-
99
- US-007: Add input sanitization
100
- ...
101
- ```
102
-
103
- ### Config
104
-
105
- ```json
106
- {
107
- "context": {
108
- "testCoverage": {
109
- "enabled": true,
110
- "detail": "names-and-counts",
111
- "maxTokens": 500,
112
- "testDir": "test",
113
- "testPattern": "**/*.test.{ts,js}"
114
- }
115
- }
116
- }
117
- ```
118
-
119
- ## Acceptance Criteria
120
-
121
- - [ ] Test files scanned and summarized before each story prompt
122
- - [ ] Summary injected into prompt at priority 85
123
- - [ ] `describe()` and `test()` names extracted via regex
124
- - [ ] Summary respects maxTokens budget
125
- - [ ] Config allows enabling/disabling and adjusting detail level
126
- - [ ] Summary updates between stories (reflects tests added by prior stories)
127
- - [ ] No performance regression (scanning should be <100ms for typical projects)
128
-
129
- ## Implementation Plan
130
-
131
- ### Phase 1: Test Scanner
132
- **Files:** `src/context/test-scanner.ts`
133
- - Scan test directory for test files
134
- - Extract describe/test block names via regex
135
- - Format as markdown summary
136
- - Respect token budget
137
-
138
- **Commit:** `feat(context): add test file scanner for coverage summary`
139
-
140
- ### Phase 2: Context Integration
141
- **Files:** `src/context/builder.ts`, `src/pipeline/stages/context.ts`, `src/config/schema.ts`
142
- - Add TestCoverageContext element type
143
- - Wire scanner into context stage (runs before prompt assembly)
144
- - Add config schema for testCoverage settings
145
- - Summary refreshes between stories
146
-
147
- **Commit:** `feat(context): inject test coverage summary into story prompts`
148
-
149
- ### Phase 3: Prompt Guidance
150
- **Files:** `src/execution/prompts.ts`
151
- - Add "DO NOT duplicate" instruction in prompt template
152
- - Reference existing coverage summary
153
- - Reinforce constitution test guidance
154
-
155
- **Commit:** `feat(prompts): add test dedup guidance referencing coverage summary`
156
-
157
- ## Test Strategy
158
- - Mode: test-after
159
- - Unit tests: scanner regex extraction, summary formatting, token truncation
160
- - Integration: context builder includes test coverage element
161
- - Run `bun test && bun run typecheck` after each phase
162
-
163
- ## Estimated Effort
164
- ~300-400 LOC across 3 phases.
165
-
166
- ## Measurement
167
-
168
- Compare v0.5.0 (no dedup) vs v0.7.0 (context injection) on the same dogfood project:
169
-
170
- | Metric | v0.5.0 | v0.7.0 |
171
- |:---|:---|:---|
172
- | Total tests generated | ? | ? |
173
- | Redundant tests | ? | ? |
174
- | Code quality grade | ? | ? |
175
- | Acceptance rate | ? | ? |
176
- | Total cost | ? | ? |
177
- | Total time | ? | ? |
@@ -1,206 +0,0 @@
1
- # v0.8 — LLM-Enhanced Routing
2
-
3
- > Priority: **HIGH** — keyword routing causes costly misroutes (e.g., US-008 simple barrel exports → powerful + TDD due to "public api" keyword match).
4
-
5
- ## Problem
6
-
7
- Keyword-based routing is brittle and expensive:
8
- 1. **False positives**: "public api" in title → three-session-tdd even for simple barrel exports ($1.25 wasted)
9
- 2. **False negatives**: Complex integration work without magic keywords → test-after on fast tier
10
- 3. **No semantic understanding**: Can't assess *actual* implementation effort from acceptance criteria
11
- 4. **Keyword overlap**: Security keywords fire on simple "add auth header to request" stories
12
-
13
- Evidence from dogfood runs:
14
- - Run D2: US-008 ("Export public API and create barrel exports") — simple task, keyword matched "public api" → powerful + three-session-tdd. Cost: $1.25. Should have been: fast + test-after (~$0.10).
15
-
16
- ## Design
17
-
18
- ### Config
19
-
20
- ```json
21
- {
22
- "routing": {
23
- "strategy": "llm",
24
- "llm": {
25
- "model": "fast",
26
- "fallbackToKeywords": true,
27
- "maxInputTokens": 2000,
28
- "cacheDecisions": true
29
- }
30
- }
31
- }
32
- ```
33
-
34
- - `model`: Tier used for the routing LLM call itself (default: `fast` — routing should be cheap)
35
- - `fallbackToKeywords`: If LLM call fails (timeout, parse error), fall back to keyword strategy (default: `true`)
36
- - `maxInputTokens`: Token budget for story context sent to LLM (default: `2000`)
37
- - `cacheDecisions`: Cache routing decisions per story ID within a run (default: `true`)
38
-
39
- ### LLM Prompt
40
-
41
- The LLM receives a structured prompt with the story and must return a JSON decision:
42
-
43
- ```
44
- You are a code task router. Given a user story, classify its complexity and select the appropriate execution strategy.
45
-
46
- ## Story
47
- Title: {title}
48
- Description: {description}
49
- Acceptance Criteria:
50
- {acceptanceCriteria as numbered list}
51
- Tags: {tags}
52
-
53
- ## Available Tiers
54
- - fast: Simple changes, typos, config updates, boilerplate. <30 min of coding.
55
- - balanced: Standard features, moderate logic, straightforward tests. 30-90 min.
56
- - powerful: Complex architecture, security-critical, multi-file refactors, novel algorithms. >90 min.
57
-
58
- ## Available Test Strategies
59
- - test-after: Write implementation first, add tests after. For straightforward work.
60
- - three-session-tdd: Separate test-writer → implementer → verifier sessions. For complex/critical work where test design matters.
61
-
62
- ## Rules
63
- - Default to the CHEAPEST option that will succeed.
64
- - three-session-tdd ONLY when: (a) security/auth logic, (b) complex algorithms, (c) public API contracts that consumers depend on.
65
- - Simple barrel exports, re-exports, or index files are ALWAYS test-after + fast, regardless of keywords.
66
- - A story touching many files doesn't automatically mean complex — copy-paste refactors are simple.
67
-
68
- Respond with ONLY this JSON (no markdown, no explanation):
69
- {"complexity":"simple|medium|complex|expert","modelTier":"fast|balanced|powerful","testStrategy":"test-after|three-session-tdd","reasoning":"<one line>"}
70
- ```
71
-
72
- ### Implementation
73
-
74
- Modify `src/routing/strategies/llm.ts`:
75
-
76
- ```typescript
77
- export const llmStrategy: RoutingStrategy = {
78
- name: "llm",
79
-
80
- async route(story: UserStory, context: RoutingContext): Promise<RoutingDecision | null> {
81
- const config = context.config;
82
- const llmConfig = config.routing.llm;
83
- if (!llmConfig) return null;
84
-
85
- // Check cache
86
- if (llmConfig.cacheDecisions && cachedDecisions.has(story.id)) {
87
- return cachedDecisions.get(story.id)!;
88
- }
89
-
90
- try {
91
- const prompt = buildRoutingPrompt(story, config);
92
- const modelId = config.models[llmConfig.model ?? "fast"];
93
-
94
- const result = await callLlm(modelId, prompt, {
95
- maxTokens: 200,
96
- timeout: 15_000, // 15s hard limit — routing shouldn't block
97
- });
98
-
99
- const decision = parseRoutingResponse(result, story, config);
100
-
101
- if (llmConfig.cacheDecisions) {
102
- cachedDecisions.set(story.id, decision);
103
- }
104
-
105
- return decision;
106
- } catch (err) {
107
- logger.warn(`LLM routing failed for ${story.id}: ${err.message}`);
108
- return null; // Falls through to keyword strategy
109
- }
110
- },
111
- };
112
- ```
113
-
114
- ### LLM Call Mechanism
115
-
116
- nax already spawns Claude Code via `Bun.spawn`. For the routing LLM call, we need a **lightweight** approach:
117
-
118
- **Option A — Claude Code one-shot**: `claude -p "..." --model <model>` with 15s timeout.
119
- - Pro: Reuses existing infra, model aliases work.
120
- - Con: ~3-5s startup overhead per call. For 9 stories = 27-45s total.
121
-
122
- **Option B — Direct API call**: HTTP request to provider API (Anthropic/OpenAI/Google).
123
- - Pro: <1s per call, batch-friendly.
124
- - Con: Needs API key handling, provider-specific code.
125
-
126
- **Recommendation: Option A** for v0.8 (simplicity), with config option to batch all stories in one call:
127
-
128
- ```
129
- // Single LLM call for all pending stories (batch mode)
130
- "Route these 9 stories:\n1. US-001: ...\n2. US-002: ...\n\nRespond with JSON array: [{id, complexity, modelTier, testStrategy, reasoning}]"
131
- ```
132
-
133
- Batch mode cuts 9 calls → 1 call. ~5s total routing overhead.
134
-
135
- ### Strategy Interface Change
136
-
137
- The current `RoutingStrategy.route()` is synchronous. LLM routing needs async:
138
-
139
- ```typescript
140
- export interface RoutingStrategy {
141
- readonly name: string;
142
- route(story: UserStory, context: RoutingContext): RoutingDecision | null | Promise<RoutingDecision | null>;
143
- }
144
- ```
145
-
146
- `StrategyChain.route()` becomes async (already called with `await` in `routeStory()`).
147
-
148
- ### Error Handling
149
-
150
- | Failure | Behavior |
151
- |:---|:---|
152
- | LLM timeout (>15s) | Return null → keyword fallback |
153
- | JSON parse error | Return null → keyword fallback |
154
- | Invalid field values | Return null → keyword fallback |
155
- | LLM returns unknown complexity | Clamp to nearest valid value |
156
- | All failures logged | `logger.warn()` with story ID |
157
-
158
- ### Logging
159
-
160
- ```
161
- [routing] LLM classified US-008 as simple/fast/test-after: "Barrel export file, no logic to test"
162
- [routing] LLM routing failed for US-003: timeout after 15000ms, falling back to keyword
163
- ```
164
-
165
- ## Cost Analysis
166
-
167
- | Scenario | Keyword Cost | LLM Routing Cost | Savings |
168
- |:---|:---|:---|:---|
169
- | US-008 (barrel exports) | $1.25 (powerful+TDD) | $0.10 (fast+test-after) + $0.01 routing | **$1.14 saved** |
170
- | 9-story run (batch) | Variable | ~$0.02 routing overhead | Net positive if prevents 1+ misroute |
171
-
172
- LLM routing call: ~500 input tokens + 100 output tokens per story = ~$0.001 on Flash.
173
- Batch mode (9 stories): ~2000 input + 400 output = ~$0.003 total.
174
-
175
- **ROI: One prevented misroute pays for ~400 routing calls.**
176
-
177
- ## Acceptance Criteria
178
-
179
- 1. `config.routing.strategy = "llm"` activates LLM routing
180
- 2. LLM strategy returns structured `RoutingDecision` with reasoning
181
- 3. Falls back to keyword strategy on any LLM failure
182
- 4. Batch mode: single LLM call routes all pending stories
183
- 5. Routing decisions cached per story ID within a run
184
- 6. Strategy chain async support (non-breaking — keyword still sync)
185
- 7. Routing overhead < 10s for batch of 10 stories
186
- 8. Logging: every LLM routing decision logged with reasoning
187
-
188
- ## Files to Modify
189
-
190
- - `src/routing/strategies/llm.ts` — Main implementation
191
- - `src/routing/strategy.ts` — Make interface async-compatible
192
- - `src/routing/chain.ts` — `route()` becomes async
193
- - `src/config/schema.ts` — Add `LlmRoutingConfig` type
194
- - `src/config/defaults.ts` — Add LLM routing defaults
195
- - `test/routing/llm-strategy.test.ts` — Unit tests
196
- - `test/routing/chain.test.ts` — Update for async
197
-
198
- ## Non-Goals (v0.8)
199
-
200
- - Direct API calls (Option B) — defer to v0.9+
201
- - Adaptive routing (learning from historical data) — existing stub, separate feature
202
- - Custom routing prompts — hardcoded prompt is fine for now
203
-
204
- ---
205
-
206
- *Created 2026-02-19*
@@ -1,132 +0,0 @@
1
- # Feature: Structured Logging for nax v0.8
2
-
3
- ## Problem
4
-
5
- nax currently uses raw `console.log` with chalk formatting throughout the codebase. Developers running `nax run` in headless mode have no way to:
6
- - Control verbosity (only see errors vs full debug output)
7
- - Get timing data per story/stage for performance analysis
8
- - Review token counts and API costs per story
9
- - Debug failures with full prompt/response dumps
10
- - Parse logs programmatically for CI/CD integration
11
-
12
- ## Requirements
13
-
14
- **REQ-1: Log Levels**
15
- - Support 4 levels: `error`, `warn`, `info`, `debug`
16
- - Default level: `info`
17
- - CLI flags: `--verbose` (debug), `--quiet` (error+warn only), `--silent` (error only)
18
- - Environment variable override: `NAX_LOG_LEVEL=debug`
19
-
20
- **REQ-2: Structured Log Format**
21
- - Each log entry includes: `timestamp`, `level`, `stage`, `storyId`, `message`
22
- - Console output: human-readable with chalk (current style, but level-gated)
23
- - File output: JSON Lines (`.jsonl`) for machine parsing
24
- - File location: `nax/features/<name>/runs/<run-id>.jsonl`
25
-
26
- **REQ-3: Stage Lifecycle Events**
27
- - Emit structured events at each stage transition:
28
- - `run.start` — feature name, story count, config
29
- - `iteration.start` — iteration number, story id, complexity
30
- - `context.built` — file count, token estimate
31
- - `agent.start` — model, prompt size (chars/tokens), TDD strategy
32
- - `agent.complete` — exit code, duration, stdout size, cost estimate
33
- - `test.start` — test command
34
- - `test.complete` — pass/fail, test count, duration
35
- - `verification.start` — verification strategy
36
- - `verification.complete` — pass/fail, issues found
37
- - `story.complete` — story id, status, attempts, duration, cost
38
- - `iteration.complete` — stories done this iteration
39
- - `run.complete` — total stories, passed, failed, cost, duration
40
-
41
- **REQ-4: Per-Story Metrics**
42
- - Track and report per story: duration, API cost, token count (in/out), attempts, test count
43
- - Include in `prd.json` story metadata after run completes
44
- - Summary table at end of run (visible at `info` level)
45
-
46
- **REQ-5: Debug Mode**
47
- - `--debug` or `NAX_LOG_LEVEL=debug` enables:
48
- - Full prompt text logged to file (not console)
49
- - Full agent response logged to file
50
- - Claude CLI command logged
51
- - Environment variables passed to agent (sanitized — mask tokens)
52
-
53
- **REQ-6: Run History**
54
- - Each `nax run` creates a unique run ID (ISO timestamp or UUID)
55
- - Log file persisted at `nax/features/<name>/runs/<run-id>.jsonl`
56
- - Latest run symlinked as `nax/features/<name>/runs/latest.jsonl`
57
- - `nax runs list -f <feature>` lists past runs with summary
58
- - `nax runs show <run-id> -f <feature>` shows detailed run report
59
-
60
- **REQ-7: Logger API (Internal)**
61
- - Singleton logger instance, configured once at CLI entry
62
- - API: `logger.info(stage, storyId, message, data?)`, `logger.debug(...)`, etc.
63
- - Replace all `console.log` calls with logger calls
64
- - Logger writes to both console (filtered by level) and file (all levels)
65
-
66
- ## Acceptance Criteria
67
-
68
- **AC-1:** `nax run -f foo --headless` shows same output as today at `info` level
69
- **AC-2:** `nax run -f foo --verbose` shows agent timing, token counts, and prompt sizes
70
- **AC-3:** `nax run -f foo --quiet` shows only warnings, errors, and final summary
71
- **AC-4:** After a run, `nax/features/foo/runs/latest.jsonl` contains structured events
72
- **AC-5:** Each JSONL line is valid JSON with `timestamp`, `level`, `stage`, `storyId` fields
73
- **AC-6:** `nax runs list -f foo` shows past runs with date, stories, cost, status
74
- **AC-7:** Per-story metrics (duration, cost, attempts) appear in the run summary table
75
- **AC-8:** Debug mode logs full prompts to file without printing to console
76
- **AC-9:** No `console.log` calls remain in src/ (all replaced with logger)
77
-
78
- ## Technical Notes
79
-
80
- ### Logger Implementation
81
- ```typescript
82
- // src/logger.ts
83
- export type LogLevel = "error" | "warn" | "info" | "debug";
84
-
85
- export interface LogEntry {
86
- timestamp: string;
87
- level: LogLevel;
88
- stage: string;
89
- storyId?: string;
90
- message: string;
91
- data?: Record<string, unknown>;
92
- }
93
-
94
- export class Logger {
95
- constructor(options: { level: LogLevel; filePath?: string });
96
- error(stage: string, message: string, data?: Record<string, unknown>): void;
97
- warn(stage: string, message: string, data?: Record<string, unknown>): void;
98
- info(stage: string, message: string, data?: Record<string, unknown>): void;
99
- debug(stage: string, message: string, data?: Record<string, unknown>): void;
100
- withStory(storyId: string): StoryLogger; // scoped logger
101
- }
102
- ```
103
-
104
- ### Migration Strategy
105
- 1. Create `src/logger.ts` with Logger class
106
- 2. Add `--verbose`, `--quiet`, `--silent` flags to `bin/nax.ts`
107
- 3. Replace `console.log` calls one module at a time
108
- 4. Add stage events to orchestrator loop
109
- 5. Add run history commands
110
-
111
- ### Dependencies
112
- - None (use Bun built-in fs for file writing)
113
- - chalk remains for console formatting
114
-
115
- ### File Structure
116
- ```
117
- nax/features/<name>/runs/
118
- ├── 2026-02-19T10-30-00Z.jsonl
119
- ├── 2026-02-20T14-15-00Z.jsonl
120
- └── latest.jsonl -> 2026-02-20T14-15-00Z.jsonl
121
- ```
122
-
123
- ## Out of Scope
124
- - Remote log shipping (Datadog, Sentry, etc.)
125
- - Log rotation or cleanup policies
126
- - Real-time log streaming via WebSocket
127
- - Custom log formatters or plugins
128
- - Metrics dashboard or visualization
129
-
130
- ---
131
-
132
- *Spec created 2026-02-19 for nax v0.8*
@@ -1,112 +0,0 @@
1
- # v0.9.3 — Prompt Audit & Context Isolation
2
-
3
- **Status:** Draft
4
- **Author:** Subrina
5
- **Date:** 2026-02-23
6
- **Base:** v0.9.2
7
-
8
- ## Overview
9
-
10
- Add tooling to inspect and verify story-scoped prompt isolation. Ensures each story's agent prompt contains only context relevant to that story — no cross-story leakage.
11
-
12
- ## Motivation
13
-
14
- - No way to inspect what prompts agents actually receive without running a full `nax run`
15
- - `generateTestCoverageSummary` scans the entire repo's test files, leaking context from other stories into unrelated story prompts
16
- - No automated test verifying that `buildContext()` properly isolates per-story context
17
- - Prompt inspection is critical for debugging routing, context, and the upcoming v0.10 prompt optimizer
18
-
19
- ## Deliverables
20
-
21
- ### 1. `nax prompts` CLI Command
22
-
23
- New subcommand that assembles prompts for all stories in a feature without executing agents.
24
-
25
- ```bash
26
- # Dump all story prompts to stdout
27
- nax prompts -f core
28
-
29
- # Write to directory
30
- nax prompts -f core --out ./prompt-dump/
31
-
32
- # Single story
33
- nax prompts -f core --story US-003
34
- ```
35
-
36
- **Pipeline stages executed:** routing → context → constitution → prompt (stops before execution).
37
-
38
- **Output per story:**
39
- ```
40
- prompt-dump/
41
- US-001.prompt.md # Final assembled prompt
42
- US-001.context.md # Context markdown only (for isolation audit)
43
- US-002.prompt.md
44
- US-002.context.md
45
- ...
46
- ```
47
-
48
- Each file includes a YAML frontmatter header:
49
- ```yaml
50
- ---
51
- storyId: US-003
52
- title: "Create health indicator interface"
53
- testStrategy: test-after
54
- modelTier: balanced
55
- contextTokens: 2450
56
- promptTokens: 3800
57
- dependencies: [US-001]
58
- contextElements:
59
- - type: progress, tokens: 45
60
- - type: story, storyId: US-003, tokens: 890
61
- - type: dependency, storyId: US-001, tokens: 720
62
- - type: test-coverage, tokens: 795
63
- ---
64
- ```
65
-
66
- **For three-session-tdd stories:** outputs `US-001.test-writer.md`, `US-001.implementer.md`, `US-001.verifier.md`.
67
-
68
- ### 2. `buildContext` Isolation Unit Tests
69
-
70
- Test that `buildContext()` for a given story only includes:
71
- - The current story
72
- - Declared dependency stories
73
- - Progress summary (counts only, no story details)
74
- - Test coverage (to be scoped — see #3)
75
- - Error context from current story only
76
- - File context from current story's `contextFiles` only
77
-
78
- **Negative assertions:**
79
- - No story IDs from non-dependency stories appear in output
80
- - No acceptance criteria from unrelated stories leak through
81
- - Progress summary contains only aggregate counts, not story titles
82
-
83
- ### 3. Scoped Test Coverage Scanner
84
-
85
- Fix `generateTestCoverageSummary` to scope results to story-relevant files:
86
-
87
- **Current behavior:** Scans all test files in `testDir` → agent sees coverage from every story.
88
-
89
- **New behavior:**
90
- 1. If story has `contextFiles` → derive test file patterns from source paths (e.g., `src/health.service.ts` → `test/health.service.spec.ts`)
91
- 2. If no `contextFiles` → fall back to full scan (current behavior) with a warning logged
92
- 3. Add `context.testCoverage.scopeToStory` config option (default: `true`)
93
-
94
- ## User Stories
95
-
96
- | # | Title | Complexity | Test Strategy | Dependencies |
97
- |:--|:------|:-----------|:--------------|:-------------|
98
- | US-001 | `nax prompts` CLI command with file output | medium | test-after | — |
99
- | US-002 | `buildContext` isolation unit tests | simple | test-after | — |
100
- | US-003 | Scope test coverage scanner to story-relevant files | medium | test-after | — |
101
-
102
- ## Non-Goals
103
-
104
- - No changes to prompt assembly logic (that's v0.10 optimizer territory)
105
- - No `--optimized` flag yet (depends on v0.10)
106
- - No changes to TDD orchestrator prompt builders (just audit them)
107
-
108
- ## Compatibility
109
-
110
- - `nax prompts` is additive — new CLI command, no existing behavior changed
111
- - Test coverage scoping is behind config flag with backward-compatible default
112
- - No breaking changes