@nathapp/nax 0.21.0 → 0.22.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 (210) hide show
  1. package/.mcp.json +8 -0
  2. package/docs/ROADMAP.md +20 -5
  3. package/docs/adr/ADR-005-implementation-plan.md +655 -0
  4. package/docs/adr/ADR-005-pipeline-re-architecture.md +464 -0
  5. package/package.json +1 -1
  6. package/src/agents/claude.ts +44 -9
  7. package/src/config/types.ts +11 -0
  8. package/src/execution/dry-run.ts +81 -0
  9. package/src/execution/escalation/tier-outcome.ts +29 -44
  10. package/src/execution/executor-types.ts +65 -0
  11. package/src/execution/index.ts +0 -17
  12. package/src/execution/iteration-runner.ts +132 -0
  13. package/src/execution/lifecycle/index.ts +0 -1
  14. package/src/execution/lifecycle/run-regression.ts +5 -5
  15. package/src/execution/pipeline-result-handler.ts +51 -254
  16. package/src/execution/sequential-executor.ts +72 -316
  17. package/src/execution/story-selector.ts +75 -0
  18. package/src/pipeline/event-bus.ts +276 -0
  19. package/src/pipeline/runner.ts +51 -77
  20. package/src/pipeline/stages/autofix.ts +133 -0
  21. package/src/pipeline/stages/completion.ts +22 -30
  22. package/src/pipeline/stages/index.ts +30 -13
  23. package/src/pipeline/stages/rectify.ts +93 -0
  24. package/src/pipeline/stages/regression.ts +88 -0
  25. package/src/pipeline/stages/review.ts +19 -153
  26. package/src/pipeline/stages/verify.ts +18 -2
  27. package/src/pipeline/subscribers/hooks.ts +133 -0
  28. package/src/pipeline/subscribers/interaction.ts +68 -0
  29. package/src/pipeline/subscribers/reporters.ts +174 -0
  30. package/src/pipeline/types.ts +10 -1
  31. package/src/review/orchestrator.ts +105 -0
  32. package/src/tdd/prompts.ts +1 -1
  33. package/src/verification/index.ts +1 -1
  34. package/src/verification/orchestrator-types.ts +145 -0
  35. package/src/verification/orchestrator.ts +76 -0
  36. package/src/{execution/post-verify-rectification.ts → verification/rectification-loop.ts} +13 -20
  37. package/src/verification/{gate.ts → runners.ts} +17 -105
  38. package/src/verification/strategies/acceptance.ts +133 -0
  39. package/src/verification/strategies/regression.ts +90 -0
  40. package/src/verification/strategies/scoped.ts +123 -0
  41. package/test/COVERAGE-GAPS.md +333 -0
  42. package/test/{acceptance → e2e}/cm-003-default-view.test.ts +1 -0
  43. package/test/{integration/e2e.test.ts → e2e/plan-analyze-run.test.ts} +1 -0
  44. package/test/integration/{agent-validation.test.ts → cli/agent-validation.test.ts} +3 -3
  45. package/test/integration/{cli-config-default-edge-cases.test.ts → cli/cli-config-default-edge-cases.test.ts} +6 -5
  46. package/test/integration/{cli-config-default-view.test.ts → cli/cli-config-default-view.test.ts} +8 -7
  47. package/test/integration/{cli-config-diff.test.ts → cli/cli-config-diff.test.ts} +3 -2
  48. package/test/integration/{cli-config.test.ts → cli/cli-config.test.ts} +3 -2
  49. package/test/integration/{cli-diagnose.test.ts → cli/cli-diagnose.test.ts} +5 -4
  50. package/test/integration/{cli-logs.test.ts → cli/cli-logs.test.ts} +12 -3
  51. package/test/integration/{cli-plugins.test.ts → cli/cli-plugins.test.ts} +4 -3
  52. package/test/integration/{cli-precheck.test.ts → cli/cli-precheck.test.ts} +4 -3
  53. package/test/integration/{cli-run-headless.test.ts → cli/cli-run-headless.test.ts} +3 -2
  54. package/test/integration/{cli.test.ts → cli/cli.test.ts} +2 -1
  55. package/test/integration/{precheck-integration.test.ts → cli/precheck-integration.test.ts} +10 -9
  56. package/test/integration/{precheck-orchestrator.test.ts → cli/precheck-orchestrator.test.ts} +4 -3
  57. package/test/integration/{precheck.test.ts → cli/precheck.test.ts} +5 -4
  58. package/test/integration/{config-loader.test.ts → config/config-loader.test.ts} +2 -1
  59. package/test/integration/{config.test.ts → config/config.test.ts} +2 -2
  60. package/test/integration/config/merger.test.ts +1 -0
  61. package/test/integration/config/paths.test.ts +1 -0
  62. package/test/integration/{security-loader.test.ts → config/security-loader.test.ts} +2 -2
  63. package/test/integration/{context-integration.test.ts → context/context-integration.test.ts} +7 -6
  64. package/test/integration/{path-security.test.ts → context/context-path-security.test.ts} +2 -2
  65. package/test/integration/{context-provider-injection.test.ts → context/context-provider-injection.test.ts} +7 -6
  66. package/test/integration/{context-verification-integration.test.ts → context/context-verification-integration.test.ts} +5 -4
  67. package/test/integration/{s5-greenfield-fallback.test.ts → context/s5-greenfield-fallback.test.ts} +4 -3
  68. package/test/integration/{isolation.test.ts → execution/execution-isolation.test.ts} +1 -1
  69. package/test/integration/{execution.test.ts → execution/execution.test.ts} +8 -8
  70. package/test/integration/{parallel.test.ts → execution/parallel.test.ts} +2 -1
  71. package/test/integration/{prd-pause.test.ts → execution/prd-pause.test.ts} +2 -2
  72. package/test/integration/{prd-resolvers.test.ts → execution/prd-resolvers.test.ts} +3 -2
  73. package/test/integration/{progress.test.ts → execution/progress.test.ts} +1 -1
  74. package/test/integration/execution/runner-batching.test.ts +682 -0
  75. package/test/integration/{runner-config-plugins.test.ts → execution/runner-config-plugins.test.ts} +3 -2
  76. package/test/integration/execution/runner-escalation.test.ts +561 -0
  77. package/test/integration/{runner-fixes.test.ts → execution/runner-fixes.test.ts} +4 -3
  78. package/test/integration/{runner-plugin-integration.test.ts → execution/runner-plugin-integration.test.ts} +6 -5
  79. package/test/integration/execution/runner-queue-and-attempts.test.ts +476 -0
  80. package/test/integration/{status-file-integration.test.ts → execution/status-file-integration.test.ts} +9 -8
  81. package/test/integration/{status-file.test.ts → execution/status-file.test.ts} +3 -2
  82. package/test/integration/{status-writer.test.ts → execution/status-writer.test.ts} +5 -4
  83. package/test/integration/{story-id-in-events.test.ts → execution/story-id-in-events.test.ts} +9 -8
  84. package/test/integration/{interaction-chain-pipeline.test.ts → interaction/interaction-chain-pipeline.test.ts} +26 -14
  85. package/test/integration/{hooks.test.ts → pipeline/hooks.test.ts} +4 -2
  86. package/test/integration/{pipeline-acceptance.test.ts → pipeline/pipeline-acceptance.test.ts} +7 -6
  87. package/test/integration/{pipeline-events.test.ts → pipeline/pipeline-events.test.ts} +7 -6
  88. package/test/integration/{pipeline.test.ts → pipeline/pipeline.test.ts} +9 -7
  89. package/test/integration/{reporter-lifecycle.test.ts → pipeline/reporter-lifecycle.test.ts} +9 -7
  90. package/test/integration/{verify-stage.test.ts → pipeline/verify-stage.test.ts} +7 -5
  91. package/test/integration/{analyze-integration.test.ts → plan/analyze-integration.test.ts} +3 -2
  92. package/test/integration/{analyze-scanner.test.ts → plan/analyze-scanner.test.ts} +8 -7
  93. package/test/integration/{logger.test.ts → plan/logger.test.ts} +1 -1
  94. package/test/integration/{plan.test.ts → plan/plan.test.ts} +3 -3
  95. package/test/integration/plugins/config-integration.test.ts +1 -0
  96. package/test/integration/plugins/config-resolution.test.ts +1 -0
  97. package/test/integration/plugins/loader.test.ts +1 -0
  98. package/test/integration/plugins/{registry.test.ts → plugins-registry.test.ts} +1 -0
  99. package/test/integration/plugins/validator.test.ts +1 -0
  100. package/test/integration/{review-config-commands.test.ts → review/review-config-commands.test.ts} +4 -3
  101. package/test/integration/{review-config-schema.test.ts → review/review-config-schema.test.ts} +3 -2
  102. package/test/integration/{review-plugin-integration.test.ts → review/review-plugin-integration.test.ts} +5 -4
  103. package/test/integration/{review.test.ts → review/review.test.ts} +3 -2
  104. package/test/integration/routing/plugin-routing-advanced.test.ts +461 -0
  105. package/test/integration/{plugin-routing.test.ts → routing/plugin-routing-core.test.ts} +9 -403
  106. package/test/integration/{routing-stage-bug-021.test.ts → routing/routing-stage-bug-021.test.ts} +8 -7
  107. package/test/integration/{routing-stage-greenfield.test.ts → routing/routing-stage-greenfield.test.ts} +7 -6
  108. package/test/integration/{tdd-cleanup.test.ts → tdd/tdd-cleanup.test.ts} +1 -1
  109. package/test/integration/tdd/tdd-orchestrator-core.test.ts +565 -0
  110. package/test/integration/tdd/tdd-orchestrator-failureCategory.test.ts +355 -0
  111. package/test/integration/tdd/tdd-orchestrator-fallback.test.ts +311 -0
  112. package/test/integration/tdd/tdd-orchestrator-lite.test.ts +289 -0
  113. package/test/integration/tdd/tdd-orchestrator-prompts.test.ts +260 -0
  114. package/test/integration/tdd/tdd-orchestrator-verdict.test.ts +536 -0
  115. package/test/integration/tmp/headless-test/test.jsonl +30 -0
  116. package/test/integration/{test-scanner.test.ts → verification/test-scanner.test.ts} +1 -1
  117. package/test/integration/{verification-asset-check.test.ts → verification/verification-asset-check.test.ts} +3 -2
  118. package/test/unit/acceptance.test.ts +1 -0
  119. package/test/unit/agent-stderr-capture.test.ts +1 -0
  120. package/test/unit/agents/claude.test.ts +1 -0
  121. package/test/unit/analyze-classifier.test.ts +1 -0
  122. package/test/unit/auto-detect.test.ts +1 -0
  123. package/test/unit/cli-status.test.ts +1 -0
  124. package/test/unit/commands/common.test.ts +1 -0
  125. package/test/unit/commands/logs.test.ts +1 -0
  126. package/test/unit/commands/unlock.test.ts +1 -0
  127. package/test/unit/config/defaults.test.ts +1 -0
  128. package/test/unit/config/regression-gate-schema.test.ts +1 -0
  129. package/test/unit/config/smart-runner-flag.test.ts +1 -0
  130. package/test/unit/constitution-generators.test.ts +1 -0
  131. package/test/unit/constitution.test.ts +1 -0
  132. package/test/unit/context/context-autodetect.test.ts +297 -0
  133. package/test/unit/context/context-build.test.ts +575 -0
  134. package/test/unit/context/context-coverage.test.ts +236 -0
  135. package/test/unit/context/context-error.test.ts +93 -0
  136. package/test/unit/context/context-estimate-tokens.test.ts +201 -0
  137. package/test/unit/context/context-format.test.ts +302 -0
  138. package/test/unit/context/context-isolation.test.ts +267 -0
  139. package/test/unit/context/context-sort.test.ts +93 -0
  140. package/test/unit/context/context-story.test.ts +108 -0
  141. package/test/{context → unit/context}/prior-failures.test.ts +5 -4
  142. package/test/unit/context.test.ts +1 -0
  143. package/test/unit/crash-recovery.test.ts +1 -0
  144. package/test/unit/escalation.test.ts +1 -0
  145. package/test/unit/execution/lifecycle/run-completion.test.ts +1 -0
  146. package/test/unit/execution/lifecycle/run-regression.test.ts +2 -0
  147. package/test/{execution → unit/execution}/pid-registry.test.ts +2 -1
  148. package/test/{execution → unit/execution}/structured-failure.test.ts +3 -2
  149. package/test/unit/execution-logging-stderr.test.ts +1 -0
  150. package/test/unit/execution-stage.test.ts +1 -0
  151. package/test/unit/fix-generator.test.ts +1 -0
  152. package/test/unit/greenfield.test.ts +1 -0
  153. package/test/unit/interaction/human-review-trigger.test.ts +1 -0
  154. package/test/unit/interaction-network-failures.test.ts +1 -0
  155. package/test/unit/interaction-plugins.test.ts +1 -0
  156. package/test/unit/logging/formatter.test.ts +1 -0
  157. package/test/unit/merge.test.ts +1 -0
  158. package/test/unit/pipeline/event-bus.test.ts +105 -0
  159. package/test/unit/pipeline/routing-partial-override.test.ts +1 -0
  160. package/test/unit/pipeline/runner-retry.test.ts +89 -0
  161. package/test/unit/pipeline/stages/autofix.test.ts +97 -0
  162. package/test/unit/pipeline/stages/rectify.test.ts +101 -0
  163. package/test/unit/pipeline/stages/regression-stage.test.ts +69 -0
  164. package/test/unit/pipeline/stages/verify.test.ts +1 -0
  165. package/test/unit/pipeline/subscribers/hooks.test.ts +45 -0
  166. package/test/unit/pipeline/subscribers/interaction.test.ts +31 -0
  167. package/test/unit/pipeline/subscribers/reporters.test.ts +90 -0
  168. package/test/unit/pipeline/verify-smart-runner.test.ts +1 -0
  169. package/test/unit/prd-auto-default.test.ts +1 -0
  170. package/test/unit/prd-failure-category.test.ts +1 -0
  171. package/test/unit/prd-get-next-story.test.ts +1 -0
  172. package/test/unit/precheck-checks.test.ts +1 -0
  173. package/test/unit/precheck-story-size-gate.test.ts +1 -0
  174. package/test/unit/precheck-types.test.ts +1 -0
  175. package/test/unit/prompts.test.ts +1 -0
  176. package/test/unit/rectification.test.ts +2 -1
  177. package/test/unit/registry.test.ts +1 -0
  178. package/test/unit/routing/routing-stability.test.ts +1 -0
  179. package/test/unit/routing/strategies/llm.test.ts +1 -0
  180. package/test/unit/routing-advanced.test.ts +313 -0
  181. package/test/unit/routing-core.test.ts +341 -0
  182. package/test/unit/routing-strategies.test.ts +442 -0
  183. package/test/unit/storyid-events.test.ts +1 -0
  184. package/test/{ui → unit/ui}/tui-controls.test.ts +8 -7
  185. package/test/{ui → unit/ui}/tui-cost-and-pty.test.ts +4 -3
  186. package/test/{ui → unit/ui}/tui-layout.test.ts +5 -4
  187. package/test/{ui → unit/ui}/tui-stories.test.ts +5 -4
  188. package/test/unit/{isolation.test.ts → unit-isolation.test.ts} +1 -0
  189. package/test/unit/{helpers.test.ts → utils-helpers.test.ts} +1 -0
  190. package/test/unit/verdict.test.ts +1 -0
  191. package/test/unit/verification/orchestrator-types.test.ts +54 -0
  192. package/test/unit/verification/orchestrator.test.ts +66 -0
  193. package/test/unit/verification/smart-runner-config.test.ts +1 -0
  194. package/test/unit/verification/smart-runner-discovery.test.ts +8 -7
  195. package/test/unit/verification/strategies/acceptance.test.ts +33 -0
  196. package/test/unit/verification/strategies/regression.test.ts +87 -0
  197. package/test/unit/verification/strategies/scoped.test.ts +100 -0
  198. package/test/unit/worktree-manager.test.ts +1 -0
  199. package/src/execution/lifecycle/story-hooks.ts +0 -38
  200. package/src/execution/post-verify.ts +0 -193
  201. package/src/execution/rectification.ts +0 -13
  202. package/src/execution/verification.ts +0 -72
  203. package/test/integration/rectification-flow.test.ts +0 -512
  204. package/test/integration/runner.test.ts +0 -1679
  205. package/test/integration/tdd-orchestrator.test.ts +0 -1762
  206. package/test/unit/execution/post-verify-regression.test.ts +0 -362
  207. package/test/unit/execution/post-verify.test.ts +0 -236
  208. package/test/unit/routing.test.ts +0 -1039
  209. /package/test/{integration → helpers}/helpers.test.ts +0 -0
  210. /package/test/integration/worktree/{merge.test.ts → worktree-merge.test.ts} +0 -0
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Integration tests for precheck integration with nax run
3
4
  *
@@ -19,11 +20,11 @@ import { afterEach, beforeEach, describe, expect, test } from "bun:test";
19
20
  const skipInCI = process.env.CI ? test.skip : test;
20
21
  import { mkdirSync, rmSync } from "node:fs";
21
22
  import { join } from "node:path";
22
- import type { NaxConfig } from "../../src/config";
23
- import { DEFAULT_CONFIG } from "../../src/config";
24
- import { run } from "../../src/execution";
25
- import type { PRD } from "../../src/prd";
26
- import { loadPRD } from "../../src/prd";
23
+ import type { NaxConfig } from "../../../src/config";
24
+ import { DEFAULT_CONFIG } from "../../../src/config";
25
+ import { run } from "../../../src/execution";
26
+ import type { PRD } from "../../../src/prd";
27
+ import { loadPRD } from "../../../src/prd";
27
28
 
28
29
  describe("Precheck Integration with nax run", () => {
29
30
  let testDir: string;
@@ -34,7 +35,7 @@ describe("Precheck Integration with nax run", () => {
34
35
  savedSkipPrecheck = process.env.NAX_SKIP_PRECHECK;
35
36
  delete process.env.NAX_SKIP_PRECHECK;
36
37
 
37
- testDir = join(import.meta.dir, "..", "..", ".tmp", `precheck-integration-${Date.now()}`);
38
+ testDir = join(import.meta.dir, "..", "..", "..", ".tmp", `precheck-integration-${Date.now()}`);
38
39
  mkdirSync(testDir, { recursive: true });
39
40
 
40
41
  // Initialize as git repo to pass git checks
@@ -152,7 +153,7 @@ describe("Precheck Integration with nax run", () => {
152
153
 
153
154
  test("AC4: --skip-precheck bypasses precheck validations", async () => {
154
155
  // Create non-git temp directory (will fail precheck)
155
- const nonGitDir = join(import.meta.dir, "..", "..", ".tmp", `non-git-${Date.now()}`);
156
+ const nonGitDir = join(import.meta.dir, "..", "..", "..", ".tmp", `non-git-${Date.now()}`);
156
157
  mkdirSync(nonGitDir, { recursive: true });
157
158
 
158
159
  try {
@@ -242,7 +243,7 @@ describe("Precheck Integration with nax run", () => {
242
243
 
243
244
  test("AC2: Tier 1 blocker aborts run with descriptive error", async () => {
244
245
  // Create directory with uncommitted changes (will fail working-tree-clean check)
245
- const dirtyDir = join(import.meta.dir, "..", "..", ".tmp", `dirty-${Date.now()}`);
246
+ const dirtyDir = join(import.meta.dir, "..", "..", "..", ".tmp", `dirty-${Date.now()}`);
246
247
  mkdirSync(dirtyDir, { recursive: true });
247
248
 
248
249
  try {
@@ -421,7 +422,7 @@ describe("Precheck Integration with nax run", () => {
421
422
 
422
423
  test("AC6: failed precheck updates status.json", async () => {
423
424
  // Create non-git directory (will fail precheck)
424
- const nonGitDir = join(import.meta.dir, "..", "..", ".tmp", `non-git-status-${Date.now()}`);
425
+ const nonGitDir = join(import.meta.dir, "..", "..", "..", ".tmp", `non-git-status-${Date.now()}`);
425
426
  mkdirSync(nonGitDir, { recursive: true });
426
427
 
427
428
  try {
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * US-002: Precheck orchestrator with formatted output
3
4
  *
@@ -14,9 +15,9 @@ const skipInCI = process.env.CI ? test.skip : test;
14
15
  import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
15
16
  import { tmpdir } from "node:os";
16
17
  import { join } from "node:path";
17
- import type { NaxConfig } from "../../src/config";
18
- import type { PRD } from "../../src/prd/types";
19
- import { EXIT_CODES, runPrecheck } from "../../src/precheck";
18
+ import type { NaxConfig } from "../../../src/config";
19
+ import type { PRD } from "../../../src/prd/types";
20
+ import { EXIT_CODES, runPrecheck } from "../../../src/precheck";
20
21
 
21
22
  // Helper to create a minimal valid git environment
22
23
  async function setupGitRepo(dir: string): Promise<void> {
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Integration tests for precheck functionality
3
4
  *
@@ -15,10 +16,10 @@ const describeWithClaude = process.env.CI ? describe.skip : describe;
15
16
  import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
16
17
  import { tmpdir } from "node:os";
17
18
  import { join } from "node:path";
18
- import type { NaxConfig } from "../../src/config";
19
- import type { PRD, UserStory } from "../../src/prd/types";
20
- import { runPrecheck } from "../../src/precheck";
21
- import type { PrecheckResult } from "../../src/precheck/types";
19
+ import type { NaxConfig } from "../../../src/config";
20
+ import type { PRD, UserStory } from "../../../src/prd/types";
21
+ import { runPrecheck } from "../../../src/precheck";
22
+ import type { PrecheckResult } from "../../../src/precheck/types";
22
23
 
23
24
  // ─────────────────────────────────────────────────────────────────────────────
24
25
  // Test fixtures
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Config Loader Tests
3
4
  *
@@ -18,7 +19,7 @@ import { existsSync, renameSync } from "node:fs";
18
19
  import { tmpdir } from "node:os";
19
20
  import { homedir } from "node:os";
20
21
  import { join } from "node:path";
21
- import { globalConfigPath, loadConfig } from "../../src/config/loader";
22
+ import { globalConfigPath, loadConfig } from "../../../src/config/loader";
22
23
 
23
24
  describe("Config Loader - Backward Compatibility", () => {
24
25
  let tempDir: string;
@@ -1,6 +1,6 @@
1
1
  import { describe, expect, test } from "bun:test";
2
- import { DEFAULT_CONFIG, NaxConfigSchema } from "../../src/config/schema";
3
- import type { TddStrategy, TestStrategy } from "../../src/config/schema";
2
+ import { DEFAULT_CONFIG, NaxConfigSchema } from "../../../src/config/schema";
3
+ import type { TddStrategy, TestStrategy } from "../../../src/config/schema";
4
4
 
5
5
  describe("Config Validation", () => {
6
6
  test("accepts valid default config", () => {
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Config Merger Test Suite
3
4
  *
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Config Paths Test Suite
3
4
  *
@@ -1,6 +1,6 @@
1
1
  import { describe, expect, test, beforeEach, afterEach } from "bun:test";
2
- import { loadPlugins, _setPluginErrorSink, _resetPluginErrorSink } from "../../src/plugins/loader";
3
- import { loadCustomStrategy } from "../../src/routing/loader";
2
+ import { loadPlugins, _setPluginErrorSink, _resetPluginErrorSink } from "../../../src/plugins/loader";
3
+ import { loadCustomStrategy } from "../../../src/routing/loader";
4
4
  import { resolve } from "node:path";
5
5
  import * as fs from "node:fs/promises";
6
6
 
@@ -1,14 +1,15 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Integration tests for context builder with execution runner
3
4
  */
4
5
 
5
6
  import { afterEach, beforeEach, describe, expect, test } from "bun:test";
6
- import { DEFAULT_CONFIG } from "../../src/config";
7
- import { buildContext, formatContextAsMarkdown } from "../../src/context/builder";
8
- import type { ContextBudget, StoryContext } from "../../src/context/types";
9
- import { run } from "../../src/execution/runner";
10
- import type { RunOptions } from "../../src/execution/runner";
11
- import type { PRD, UserStory } from "../../src/prd";
7
+ import { DEFAULT_CONFIG } from "../../../src/config";
8
+ import { buildContext, formatContextAsMarkdown } from "../../../src/context/builder";
9
+ import type { ContextBudget, StoryContext } from "../../../src/context/types";
10
+ import { run } from "../../../src/execution/runner";
11
+ import type { RunOptions } from "../../../src/execution/runner";
12
+ import type { PRD, UserStory } from "../../../src/prd";
12
13
 
13
14
  // Sample PRD for testing
14
15
  const createTestPRD = (stories: Partial<UserStory>[]): PRD => ({
@@ -2,8 +2,8 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test";
2
2
  import { existsSync, mkdirSync, realpathSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
3
3
  import { tmpdir } from "node:os";
4
4
  import { join } from "node:path";
5
- import { MAX_DIRECTORY_DEPTH, isWithinDirectory, validateDirectory, validateFilePath } from "../../src/config";
6
- import { findProjectDir } from "../../src/config/loader";
5
+ import { MAX_DIRECTORY_DEPTH, isWithinDirectory, validateDirectory, validateFilePath } from "../../../src/config";
6
+ import { findProjectDir } from "../../../src/config/loader";
7
7
 
8
8
  // Create a temporary test directory
9
9
  const testRoot = join(tmpdir(), `nax-path-test-${Date.now()}`);
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Context Provider Injection Tests (US-002)
3
4
  *
@@ -7,12 +8,12 @@
7
8
  */
8
9
 
9
10
  import { afterEach, beforeEach, describe, expect, mock, test } from "bun:test";
10
- import { DEFAULT_CONFIG } from "../../src/config/schema";
11
- import { contextStage } from "../../src/pipeline/stages/context";
12
- import type { PipelineContext } from "../../src/pipeline/types";
13
- import { PluginRegistry } from "../../src/plugins/registry";
14
- import type { IContextProvider, NaxPlugin } from "../../src/plugins/types";
15
- import type { PRD, UserStory } from "../../src/prd/types";
11
+ import { DEFAULT_CONFIG } from "../../../src/config/schema";
12
+ import { contextStage } from "../../../src/pipeline/stages/context";
13
+ import type { PipelineContext } from "../../../src/pipeline/types";
14
+ import { PluginRegistry } from "../../../src/plugins/registry";
15
+ import type { IContextProvider, NaxPlugin } from "../../../src/plugins/types";
16
+ import type { PRD, UserStory } from "../../../src/prd/types";
16
17
 
17
18
  /**
18
19
  * Create a minimal test context for context stage testing
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Integration tests for contextFiles/expectedFiles split
3
4
  * Verifies that context builder and verification use the correct resolvers
@@ -7,10 +8,10 @@ import { describe, expect, test } from "bun:test";
7
8
  import fs from "node:fs/promises";
8
9
  import os from "node:os";
9
10
  import path from "node:path";
10
- import { buildContext } from "../../src/context/builder";
11
- import type { ContextBudget, StoryContext } from "../../src/context/types";
12
- import { getContextFiles, getExpectedFiles } from "../../src/prd";
13
- import type { PRD, UserStory } from "../../src/prd";
11
+ import { buildContext } from "../../../src/context/builder";
12
+ import type { ContextBudget, StoryContext } from "../../../src/context/types";
13
+ import { getContextFiles, getExpectedFiles } from "../../../src/prd";
14
+ import type { PRD, UserStory } from "../../../src/prd";
14
15
 
15
16
  const createTestPRD = (stories: Partial<UserStory>[]): PRD => ({
16
17
  project: "test-project",
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * S5: Strategy Fallback Tests
3
4
  *
@@ -8,9 +9,9 @@
8
9
  */
9
10
 
10
11
  import { describe, expect, test } from "bun:test";
11
- import { resolveMaxAttemptsOutcome } from "../../src/execution/runner";
12
- import type { UserStory } from "../../src/prd";
13
- import type { FailureCategory } from "../../src/tdd/types";
12
+ import { resolveMaxAttemptsOutcome } from "../../../src/execution/runner";
13
+ import type { UserStory } from "../../../src/prd";
14
+ import type { FailureCategory } from "../../../src/tdd/types";
14
15
 
15
16
  describe("S5: greenfield-no-tests fallback", () => {
16
17
  /**
@@ -3,7 +3,7 @@ import { execSync } from "node:child_process";
3
3
  import { mkdtempSync, rmSync } from "node:fs";
4
4
  import { tmpdir } from "node:os";
5
5
  import { join } from "node:path";
6
- import { isSourceFile, isTestFile, verifyTestWriterIsolation } from "../../src/tdd";
6
+ import { isSourceFile, isTestFile, verifyTestWriterIsolation } from "../../../src/tdd";
7
7
 
8
8
  describe("isTestFile", () => {
9
9
  test("matches test/ directory", () => {
@@ -1,9 +1,9 @@
1
1
  import { afterEach, beforeEach, describe, expect, test } from "bun:test";
2
- import { DEFAULT_CONFIG } from "../../src/config";
3
- import { run } from "../../src/execution/runner";
4
- import type { RunOptions } from "../../src/execution/runner";
5
- import { initLogger, resetLogger } from "../../src/logger";
6
- import type { PRD, UserStory } from "../../src/prd";
2
+ import { DEFAULT_CONFIG } from "../../../src/config";
3
+ import { run } from "../../../src/execution/runner";
4
+ import type { RunOptions } from "../../../src/execution/runner";
5
+ import { initLogger, resetLogger } from "../../../src/logger";
6
+ import type { PRD, UserStory } from "../../../src/prd";
7
7
 
8
8
  // Sample PRD for testing
9
9
  const createTestPRD = (stories: Partial<UserStory>[]): PRD => ({
@@ -521,7 +521,7 @@ describe("execution runner — lite mode routing", () => {
521
521
 
522
522
  test("config tdd.strategy='lite' routes complex stories to three-session-tdd-lite", async () => {
523
523
  // Using routeTask directly to verify routing decision
524
- const { routeTask } = await import("../../src/routing");
524
+ const { routeTask } = await import("../../../src/routing");
525
525
 
526
526
  const configWithLiteStrategy = {
527
527
  ...DEFAULT_CONFIG,
@@ -541,7 +541,7 @@ describe("execution runner — lite mode routing", () => {
541
541
  });
542
542
 
543
543
  test("config tdd.strategy='strict' routes complex stories to three-session-tdd", async () => {
544
- const { routeTask } = await import("../../src/routing");
544
+ const { routeTask } = await import("../../../src/routing");
545
545
 
546
546
  const configWithStrictStrategy = {
547
547
  ...DEFAULT_CONFIG,
@@ -561,7 +561,7 @@ describe("execution runner — lite mode routing", () => {
561
561
  });
562
562
 
563
563
  test("config tdd.strategy='auto' routes complex UI-tagged stories to three-session-tdd-lite", async () => {
564
- const { routeTask } = await import("../../src/routing");
564
+ const { routeTask } = await import("../../../src/routing");
565
565
 
566
566
  // With auto strategy + ui tag + complex story → three-session-tdd-lite
567
567
  // (T3: complex/expert with lite tags → three-session-tdd-lite)
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Parallel Execution Tests
3
4
  *
@@ -9,7 +10,7 @@
9
10
  */
10
11
 
11
12
  import { describe, expect, test } from "bun:test";
12
- import type { UserStory } from "../../src/prd/types";
13
+ import type { UserStory } from "../../../src/prd/types";
13
14
 
14
15
  describe("Parallel Execution", () => {
15
16
  describe("Story Grouping", () => {
@@ -1,6 +1,6 @@
1
1
  import { describe, expect, test } from "bun:test";
2
- import { countStories, generateHumanHaltSummary, getNextStory, isStalled, markStoryPaused } from "../../src/prd";
3
- import type { PRD } from "../../src/prd/types";
2
+ import { countStories, generateHumanHaltSummary, getNextStory, isStalled, markStoryPaused } from "../../../src/prd";
3
+ import type { PRD } from "../../../src/prd/types";
4
4
 
5
5
  describe("PRD pause functionality", () => {
6
6
  const createTestPRD = (): PRD => ({
@@ -1,10 +1,11 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Tests for PRD resolver functions: getContextFiles and getExpectedFiles
3
4
  */
4
5
 
5
6
  import { describe, expect, test } from "bun:test";
6
- import { getContextFiles, getExpectedFiles } from "../../src/prd";
7
- import type { UserStory } from "../../src/prd";
7
+ import { getContextFiles, getExpectedFiles } from "../../../src/prd";
8
+ import type { UserStory } from "../../../src/prd";
8
9
 
9
10
  const createStory = (partial: Partial<UserStory>): UserStory => ({
10
11
  id: "US-001",
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, test } from "bun:test";
2
- import { appendProgress } from "../../src/execution/progress";
2
+ import { appendProgress } from "../../../src/execution/progress";
3
3
 
4
4
  describe("appendProgress", () => {
5
5
  test("creates progress.txt and appends entry", async () => {