@nathapp/nax 0.21.0 → 0.22.1

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,5 @@
1
+ // RE-ARCH: rewrite
2
+
1
3
  /**
2
4
  * Hook Runner Tests
3
5
  *
@@ -5,8 +7,8 @@
5
7
  */
6
8
 
7
9
  import { describe, expect, test } from "bun:test";
8
- import { fireHook, loadHooksConfig } from "../../src/hooks/runner";
9
- import type { HookContext, HooksConfig } from "../../src/hooks/types";
10
+ import { fireHook, loadHooksConfig } from "../../../src/hooks/runner";
11
+ import type { HookContext, HooksConfig } from "../../../src/hooks/types";
10
12
 
11
13
  describe("Hook Security", () => {
12
14
  test("executes safe commands without shell", async () => {
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Tests for acceptance pipeline stage
3
4
  */
@@ -5,12 +6,12 @@
5
6
  import { afterEach, beforeEach, describe, expect, test } from "bun:test";
6
7
  import fs from "node:fs/promises";
7
8
  import path from "node:path";
8
- import type { NaxConfig } from "../../src/config/schema";
9
- import { DEFAULT_CONFIG } from "../../src/config/schema";
10
- import { initLogger, resetLogger } from "../../src/logger";
11
- import { acceptanceStage } from "../../src/pipeline/stages/acceptance";
12
- import type { PipelineContext } from "../../src/pipeline/types";
13
- import type { PRD } from "../../src/prd/types";
9
+ import type { NaxConfig } from "../../../src/config/schema";
10
+ import { DEFAULT_CONFIG } from "../../../src/config/schema";
11
+ import { initLogger, resetLogger } from "../../../src/logger";
12
+ import { acceptanceStage } from "../../../src/pipeline/stages/acceptance";
13
+ import type { PipelineContext } from "../../../src/pipeline/types";
14
+ import type { PRD } from "../../../src/prd/types";
14
15
 
15
16
  const testDir = `/tmp/nax-acceptance-test-${Date.now()}`;
16
17
  const featureDir = path.join(testDir, "nax/features/test-feature");
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Pipeline Events Tests
3
4
  *
@@ -5,12 +6,12 @@
5
6
  */
6
7
 
7
8
  import { afterEach, beforeEach, describe, expect, test } from "bun:test";
8
- import type { NaxConfig } from "../../src/config/schema";
9
- import { initLogger, resetLogger } from "../../src/logger";
10
- import { PipelineEventEmitter } from "../../src/pipeline/events";
11
- import { runPipeline } from "../../src/pipeline/runner";
12
- import type { PipelineContext, PipelineStage, StageResult } from "../../src/pipeline/types";
13
- import type { UserStory } from "../../src/prd/types";
9
+ import type { NaxConfig } from "../../../src/config/schema";
10
+ import { initLogger, resetLogger } from "../../../src/logger";
11
+ import { PipelineEventEmitter } from "../../../src/pipeline/events";
12
+ import { runPipeline } from "../../../src/pipeline/runner";
13
+ import type { PipelineContext, PipelineStage, StageResult } from "../../../src/pipeline/types";
14
+ import type { UserStory } from "../../../src/prd/types";
14
15
 
15
16
  // ── Test Fixtures ────────────────────────────────────
16
17
 
@@ -1,3 +1,5 @@
1
+ // RE-ARCH: rewrite
2
+
1
3
  /**
2
4
  * Pipeline Runner Tests
3
5
  *
@@ -5,11 +7,11 @@
5
7
  */
6
8
 
7
9
  import { afterEach, beforeEach, describe, expect, test } from "bun:test";
8
- import type { NaxConfig } from "../../src/config/schema";
9
- import { initLogger, resetLogger } from "../../src/logger";
10
- import { runPipeline } from "../../src/pipeline/runner";
11
- import type { PipelineContext, PipelineStage } from "../../src/pipeline/types";
12
- import type { PRD, UserStory } from "../../src/prd/types";
10
+ import type { NaxConfig } from "../../../src/config/schema";
11
+ import { initLogger, resetLogger } from "../../../src/logger";
12
+ import { runPipeline } from "../../../src/pipeline/runner";
13
+ import type { PipelineContext, PipelineStage } from "../../../src/pipeline/types";
14
+ import type { PRD, UserStory } from "../../../src/prd/types";
13
15
 
14
16
  /** Helper: Create minimal test context */
15
17
  function createTestContext(overrides?: Partial<PipelineContext>): PipelineContext {
@@ -545,8 +547,8 @@ describe("Pipeline Runner", () => {
545
547
  // routeTddFailure — TDD failure routing by failureCategory
546
548
  // ─────────────────────────────────────────────────────────────────────────────
547
549
 
548
- import { routeTddFailure } from "../../src/pipeline/stages/execution";
549
- import type { FailureCategory } from "../../src/tdd/types";
550
+ import { routeTddFailure } from "../../../src/pipeline/stages/execution";
551
+ import type { FailureCategory } from "../../../src/tdd/types";
550
552
 
551
553
  describe("routeTddFailure", () => {
552
554
  /** Minimal context stub — only retryAsLite is used */
@@ -1,3 +1,5 @@
1
+ // RE-ARCH: rewrite
2
+
1
3
  /**
2
4
  * Test reporter lifecycle events
3
5
  *
@@ -9,7 +11,7 @@ import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, test } fr
9
11
  import * as fs from "node:fs/promises";
10
12
  import * as os from "node:os";
11
13
  import * as path from "node:path";
12
- import { ALL_AGENTS } from "../../src/agents/registry";
14
+ import { ALL_AGENTS } from "../../../src/agents/registry";
13
15
  import type {
14
16
  AgentAdapter,
15
17
  AgentCapabilities,
@@ -19,12 +21,12 @@ import type {
19
21
  DecomposeResult,
20
22
  PlanOptions,
21
23
  PlanResult,
22
- } from "../../src/agents/types";
23
- import type { NaxConfig } from "../../src/config";
24
- import { run } from "../../src/execution/runner";
25
- import { loadHooksConfig } from "../../src/hooks";
26
- import type { IReporter, NaxPlugin, RunEndEvent, RunStartEvent, StoryCompleteEvent } from "../../src/plugins/types";
27
- import { loadPRD, savePRD } from "../../src/prd";
24
+ } from "../../../src/agents/types";
25
+ import type { NaxConfig } from "../../../src/config";
26
+ import { run } from "../../../src/execution/runner";
27
+ import { loadHooksConfig } from "../../../src/hooks";
28
+ import type { IReporter, NaxPlugin, RunEndEvent, RunStartEvent, StoryCompleteEvent } from "../../../src/plugins/types";
29
+ import { loadPRD, savePRD } from "../../../src/prd";
28
30
 
29
31
  // ============================================================================
30
32
  // Mock agent (satisfies agent installation check in runner)
@@ -1,3 +1,5 @@
1
+ // RE-ARCH: rewrite
2
+
1
3
  /**
2
4
  * Verify Stage Tests
3
5
  */
@@ -6,11 +8,11 @@ import { afterEach, beforeEach, describe, expect, test } from "bun:test";
6
8
  import { mkdtempSync } from "node:fs";
7
9
  import { tmpdir } from "node:os";
8
10
  import { join } from "node:path";
9
- import type { NaxConfig } from "../../src/config/schema";
10
- import { initLogger, resetLogger } from "../../src/logger";
11
- import { verifyStage } from "../../src/pipeline/stages/verify";
12
- import type { PipelineContext } from "../../src/pipeline/types";
13
- import type { PRD, UserStory } from "../../src/prd/types";
11
+ import type { NaxConfig } from "../../../src/config/schema";
12
+ import { initLogger, resetLogger } from "../../../src/logger";
13
+ import { verifyStage } from "../../../src/pipeline/stages/verify";
14
+ import type { PipelineContext } from "../../../src/pipeline/types";
15
+ import type { PRD, UserStory } from "../../../src/prd/types";
14
16
 
15
17
  /** Helper: Create minimal test context */
16
18
  function createTestContext(overrides?: Partial<PipelineContext>): PipelineContext {
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Integration Tests for Analyze Command
3
4
  */
@@ -5,8 +6,8 @@
5
6
  import { afterAll, beforeAll, describe, expect, test } from "bun:test";
6
7
  import { existsSync, mkdirSync, rmSync } from "node:fs";
7
8
  import { join } from "node:path";
8
- import { analyzeFeature } from "../../src/cli/analyze";
9
- import { DEFAULT_CONFIG } from "../../src/config";
9
+ import { analyzeFeature } from "../../../src/cli/analyze";
10
+ import { DEFAULT_CONFIG } from "../../../src/config";
10
11
 
11
12
  describe("analyzeFeature integration", () => {
12
13
  const testDir = "/tmp/nax-analyze-test";
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Tests for Codebase Scanner
3
4
  */
@@ -5,12 +6,12 @@
5
6
  import { describe, expect, test } from "bun:test";
6
7
  import { existsSync } from "node:fs";
7
8
  import { join } from "node:path";
8
- import { scanCodebase } from "../../src/analyze/scanner";
9
+ import { scanCodebase } from "../../../src/analyze/scanner";
9
10
 
10
11
  describe("scanCodebase", () => {
11
12
  test("scans project codebase successfully", async () => {
12
13
  // Use the nax project itself as test data
13
- const workdir = join(import.meta.dir, "..");
14
+ const workdir = join(import.meta.dir, "../..");
14
15
 
15
16
  const scan = await scanCodebase(workdir);
16
17
 
@@ -50,7 +51,7 @@ describe("scanCodebase", () => {
50
51
  test(
51
52
  "extracts dependencies from package.json",
52
53
  async () => {
53
- const workdir = join(import.meta.dir, "../..");
54
+ const workdir = join(import.meta.dir, "../../..");
54
55
 
55
56
  const scan = await scanCodebase(workdir);
56
57
 
@@ -64,7 +65,7 @@ describe("scanCodebase", () => {
64
65
  test(
65
66
  "detects test framework",
66
67
  async () => {
67
- const workdir = join(import.meta.dir, "../..");
68
+ const workdir = join(import.meta.dir, "../../..");
68
69
 
69
70
  const scan = await scanCodebase(workdir);
70
71
 
@@ -78,7 +79,7 @@ describe("scanCodebase", () => {
78
79
  test(
79
80
  "detects test directory",
80
81
  async () => {
81
- const workdir = join(import.meta.dir, "../..");
82
+ const workdir = join(import.meta.dir, "../../..");
82
83
 
83
84
  const scan = await scanCodebase(workdir);
84
85
 
@@ -92,7 +93,7 @@ describe("scanCodebase", () => {
92
93
  test(
93
94
  "file tree respects max depth",
94
95
  async () => {
95
- const workdir = join(import.meta.dir, "../..");
96
+ const workdir = join(import.meta.dir, "../../..");
96
97
 
97
98
  const scan = await scanCodebase(workdir);
98
99
 
@@ -114,7 +115,7 @@ describe("scanCodebase", () => {
114
115
  test(
115
116
  "file tree includes directories and files",
116
117
  async () => {
117
- const workdir = join(import.meta.dir, "../..");
118
+ const workdir = join(import.meta.dir, "../../..");
118
119
 
119
120
  const scan = await scanCodebase(workdir);
120
121
 
@@ -1,7 +1,7 @@
1
1
  import { afterEach, beforeEach, describe, expect, test } from "bun:test";
2
2
  import { existsSync, readFileSync, rmSync } from "node:fs";
3
3
  import path from "node:path";
4
- import { Logger, getLogger, initLogger, resetLogger } from "../../src/logger";
4
+ import { Logger, getLogger, initLogger, resetLogger } from "../../../src/logger";
5
5
 
6
6
  const TEST_LOG_DIR = path.join(process.cwd(), "test-logs");
7
7
  const TEST_LOG_FILE = path.join(TEST_LOG_DIR, "test.jsonl");
@@ -1,8 +1,8 @@
1
1
  import { afterEach, beforeEach, describe, expect, test } from "bun:test";
2
2
  import { existsSync } from "node:fs";
3
- import { planCommand } from "../../src/cli/plan";
4
- import type { NaxConfig } from "../../src/config";
5
- import { DEFAULT_CONFIG } from "../../src/config/schema";
3
+ import { planCommand } from "../../../src/cli/plan";
4
+ import type { NaxConfig } from "../../../src/config";
5
+ import { DEFAULT_CONFIG } from "../../../src/config/schema";
6
6
 
7
7
  describe("planCommand", () => {
8
8
  let tmpDir: string;
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * End-to-end plugin config integration test
3
4
  *
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Plugin config path resolution tests
3
4
  *
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Plugin Loader Tests
3
4
  *
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Plugin Registry Tests
3
4
  *
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Plugin Validator Tests
3
4
  *
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Review Config-Driven Commands Tests (US-005)
3
4
  *
@@ -12,9 +13,9 @@ import { describe, expect, test } from "bun:test";
12
13
  import { mkdtempSync, writeFileSync } from "node:fs";
13
14
  import { tmpdir } from "node:os";
14
15
  import { join } from "node:path";
15
- import type { ExecutionConfig } from "../../src/config/schema";
16
- import { runReview } from "../../src/review";
17
- import type { ReviewConfig } from "../../src/review";
16
+ import type { ExecutionConfig } from "../../../src/config/schema";
17
+ import { runReview } from "../../../src/review";
18
+ import type { ReviewConfig } from "../../../src/review";
18
19
 
19
20
  describe("Review Config-Driven Commands (US-005)", () => {
20
21
  test("uses explicit executionConfig.lintCommand when provided", async () => {
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Config Schema Validation for lintCommand and typecheckCommand (US-005)
3
4
  *
@@ -5,8 +6,8 @@
5
6
  */
6
7
 
7
8
  import { describe, expect, test } from "bun:test";
8
- import { type NaxConfig, NaxConfigSchema } from "../../src/config/schema";
9
- import { DEFAULT_CONFIG } from "../../src/config/schema";
9
+ import { type NaxConfig, NaxConfigSchema } from "../../../src/config/schema";
10
+ import { DEFAULT_CONFIG } from "../../../src/config/schema";
10
11
 
11
12
  describe("Config Schema: lintCommand and typecheckCommand (US-005)", () => {
12
13
  test("accepts lintCommand as string", () => {
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Review Stage Plugin Integration Tests
3
4
  *
@@ -9,10 +10,10 @@ import { mkdtempSync, writeFileSync } from "node:fs";
9
10
  import { tmpdir } from "node:os";
10
11
  import { join } from "node:path";
11
12
  import { spawn } from "bun";
12
- import { reviewStage } from "../../src/pipeline/stages/review";
13
- import type { PipelineContext } from "../../src/pipeline/types";
14
- import { PluginRegistry } from "../../src/plugins/registry";
15
- import type { IReviewPlugin, NaxPlugin } from "../../src/plugins/types";
13
+ import { reviewStage } from "../../../src/pipeline/stages/review";
14
+ import type { PipelineContext } from "../../../src/pipeline/types";
15
+ import { PluginRegistry } from "../../../src/plugins/registry";
16
+ import type { IReviewPlugin, NaxPlugin } from "../../../src/plugins/types";
16
17
 
17
18
  /**
18
19
  * Create a mock pipeline context with minimal required fields
@@ -1,3 +1,4 @@
1
+ // RE-ARCH: keep
1
2
  /**
2
3
  * Review Phase Tests
3
4
  */
@@ -6,8 +7,8 @@ import { describe, expect, test } from "bun:test";
6
7
  import { mkdtempSync } from "node:fs";
7
8
  import { tmpdir } from "node:os";
8
9
  import { join } from "node:path";
9
- import { runReview } from "../../src/review";
10
- import type { ReviewConfig } from "../../src/review";
10
+ import { runReview } from "../../../src/review";
11
+ import type { ReviewConfig } from "../../../src/review";
11
12
 
12
13
  describe("Review Phase", () => {
13
14
  test("runReview - all checks pass", async () => {