@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.
- package/.mcp.json +8 -0
- package/docs/ROADMAP.md +20 -5
- package/docs/adr/ADR-005-implementation-plan.md +655 -0
- package/docs/adr/ADR-005-pipeline-re-architecture.md +464 -0
- package/package.json +1 -1
- package/src/agents/claude.ts +44 -9
- package/src/config/types.ts +11 -0
- package/src/execution/dry-run.ts +81 -0
- package/src/execution/escalation/tier-outcome.ts +29 -44
- package/src/execution/executor-types.ts +65 -0
- package/src/execution/index.ts +0 -17
- package/src/execution/iteration-runner.ts +132 -0
- package/src/execution/lifecycle/index.ts +0 -1
- package/src/execution/lifecycle/run-regression.ts +5 -5
- package/src/execution/pipeline-result-handler.ts +51 -254
- package/src/execution/sequential-executor.ts +72 -316
- package/src/execution/story-selector.ts +75 -0
- package/src/pipeline/event-bus.ts +276 -0
- package/src/pipeline/runner.ts +51 -77
- package/src/pipeline/stages/autofix.ts +133 -0
- package/src/pipeline/stages/completion.ts +22 -30
- package/src/pipeline/stages/index.ts +30 -13
- package/src/pipeline/stages/rectify.ts +93 -0
- package/src/pipeline/stages/regression.ts +88 -0
- package/src/pipeline/stages/review.ts +19 -153
- package/src/pipeline/stages/verify.ts +18 -2
- package/src/pipeline/subscribers/hooks.ts +133 -0
- package/src/pipeline/subscribers/interaction.ts +68 -0
- package/src/pipeline/subscribers/reporters.ts +174 -0
- package/src/pipeline/types.ts +10 -1
- package/src/review/orchestrator.ts +105 -0
- package/src/tdd/prompts.ts +1 -1
- package/src/verification/index.ts +1 -1
- package/src/verification/orchestrator-types.ts +145 -0
- package/src/verification/orchestrator.ts +76 -0
- package/src/{execution/post-verify-rectification.ts → verification/rectification-loop.ts} +13 -20
- package/src/verification/{gate.ts → runners.ts} +17 -105
- package/src/verification/strategies/acceptance.ts +133 -0
- package/src/verification/strategies/regression.ts +90 -0
- package/src/verification/strategies/scoped.ts +123 -0
- package/test/COVERAGE-GAPS.md +333 -0
- package/test/{acceptance → e2e}/cm-003-default-view.test.ts +1 -0
- package/test/{integration/e2e.test.ts → e2e/plan-analyze-run.test.ts} +1 -0
- package/test/integration/{agent-validation.test.ts → cli/agent-validation.test.ts} +3 -3
- package/test/integration/{cli-config-default-edge-cases.test.ts → cli/cli-config-default-edge-cases.test.ts} +6 -5
- package/test/integration/{cli-config-default-view.test.ts → cli/cli-config-default-view.test.ts} +8 -7
- package/test/integration/{cli-config-diff.test.ts → cli/cli-config-diff.test.ts} +3 -2
- package/test/integration/{cli-config.test.ts → cli/cli-config.test.ts} +3 -2
- package/test/integration/{cli-diagnose.test.ts → cli/cli-diagnose.test.ts} +5 -4
- package/test/integration/{cli-logs.test.ts → cli/cli-logs.test.ts} +12 -3
- package/test/integration/{cli-plugins.test.ts → cli/cli-plugins.test.ts} +4 -3
- package/test/integration/{cli-precheck.test.ts → cli/cli-precheck.test.ts} +4 -3
- package/test/integration/{cli-run-headless.test.ts → cli/cli-run-headless.test.ts} +3 -2
- package/test/integration/{cli.test.ts → cli/cli.test.ts} +2 -1
- package/test/integration/{precheck-integration.test.ts → cli/precheck-integration.test.ts} +10 -9
- package/test/integration/{precheck-orchestrator.test.ts → cli/precheck-orchestrator.test.ts} +4 -3
- package/test/integration/{precheck.test.ts → cli/precheck.test.ts} +5 -4
- package/test/integration/{config-loader.test.ts → config/config-loader.test.ts} +2 -1
- package/test/integration/{config.test.ts → config/config.test.ts} +2 -2
- package/test/integration/config/merger.test.ts +1 -0
- package/test/integration/config/paths.test.ts +1 -0
- package/test/integration/{security-loader.test.ts → config/security-loader.test.ts} +2 -2
- package/test/integration/{context-integration.test.ts → context/context-integration.test.ts} +7 -6
- package/test/integration/{path-security.test.ts → context/context-path-security.test.ts} +2 -2
- package/test/integration/{context-provider-injection.test.ts → context/context-provider-injection.test.ts} +7 -6
- package/test/integration/{context-verification-integration.test.ts → context/context-verification-integration.test.ts} +5 -4
- package/test/integration/{s5-greenfield-fallback.test.ts → context/s5-greenfield-fallback.test.ts} +4 -3
- package/test/integration/{isolation.test.ts → execution/execution-isolation.test.ts} +1 -1
- package/test/integration/{execution.test.ts → execution/execution.test.ts} +8 -8
- package/test/integration/{parallel.test.ts → execution/parallel.test.ts} +2 -1
- package/test/integration/{prd-pause.test.ts → execution/prd-pause.test.ts} +2 -2
- package/test/integration/{prd-resolvers.test.ts → execution/prd-resolvers.test.ts} +3 -2
- package/test/integration/{progress.test.ts → execution/progress.test.ts} +1 -1
- package/test/integration/execution/runner-batching.test.ts +682 -0
- package/test/integration/{runner-config-plugins.test.ts → execution/runner-config-plugins.test.ts} +3 -2
- package/test/integration/execution/runner-escalation.test.ts +561 -0
- package/test/integration/{runner-fixes.test.ts → execution/runner-fixes.test.ts} +4 -3
- package/test/integration/{runner-plugin-integration.test.ts → execution/runner-plugin-integration.test.ts} +6 -5
- package/test/integration/execution/runner-queue-and-attempts.test.ts +476 -0
- package/test/integration/{status-file-integration.test.ts → execution/status-file-integration.test.ts} +9 -8
- package/test/integration/{status-file.test.ts → execution/status-file.test.ts} +3 -2
- package/test/integration/{status-writer.test.ts → execution/status-writer.test.ts} +5 -4
- package/test/integration/{story-id-in-events.test.ts → execution/story-id-in-events.test.ts} +9 -8
- package/test/integration/{interaction-chain-pipeline.test.ts → interaction/interaction-chain-pipeline.test.ts} +26 -14
- package/test/integration/{hooks.test.ts → pipeline/hooks.test.ts} +4 -2
- package/test/integration/{pipeline-acceptance.test.ts → pipeline/pipeline-acceptance.test.ts} +7 -6
- package/test/integration/{pipeline-events.test.ts → pipeline/pipeline-events.test.ts} +7 -6
- package/test/integration/{pipeline.test.ts → pipeline/pipeline.test.ts} +9 -7
- package/test/integration/{reporter-lifecycle.test.ts → pipeline/reporter-lifecycle.test.ts} +9 -7
- package/test/integration/{verify-stage.test.ts → pipeline/verify-stage.test.ts} +7 -5
- package/test/integration/{analyze-integration.test.ts → plan/analyze-integration.test.ts} +3 -2
- package/test/integration/{analyze-scanner.test.ts → plan/analyze-scanner.test.ts} +8 -7
- package/test/integration/{logger.test.ts → plan/logger.test.ts} +1 -1
- package/test/integration/{plan.test.ts → plan/plan.test.ts} +3 -3
- package/test/integration/plugins/config-integration.test.ts +1 -0
- package/test/integration/plugins/config-resolution.test.ts +1 -0
- package/test/integration/plugins/loader.test.ts +1 -0
- package/test/integration/plugins/{registry.test.ts → plugins-registry.test.ts} +1 -0
- package/test/integration/plugins/validator.test.ts +1 -0
- package/test/integration/{review-config-commands.test.ts → review/review-config-commands.test.ts} +4 -3
- package/test/integration/{review-config-schema.test.ts → review/review-config-schema.test.ts} +3 -2
- package/test/integration/{review-plugin-integration.test.ts → review/review-plugin-integration.test.ts} +5 -4
- package/test/integration/{review.test.ts → review/review.test.ts} +3 -2
- package/test/integration/routing/plugin-routing-advanced.test.ts +461 -0
- package/test/integration/{plugin-routing.test.ts → routing/plugin-routing-core.test.ts} +9 -403
- package/test/integration/{routing-stage-bug-021.test.ts → routing/routing-stage-bug-021.test.ts} +8 -7
- package/test/integration/{routing-stage-greenfield.test.ts → routing/routing-stage-greenfield.test.ts} +7 -6
- package/test/integration/{tdd-cleanup.test.ts → tdd/tdd-cleanup.test.ts} +1 -1
- package/test/integration/tdd/tdd-orchestrator-core.test.ts +565 -0
- package/test/integration/tdd/tdd-orchestrator-failureCategory.test.ts +355 -0
- package/test/integration/tdd/tdd-orchestrator-fallback.test.ts +311 -0
- package/test/integration/tdd/tdd-orchestrator-lite.test.ts +289 -0
- package/test/integration/tdd/tdd-orchestrator-prompts.test.ts +260 -0
- package/test/integration/tdd/tdd-orchestrator-verdict.test.ts +536 -0
- package/test/integration/tmp/headless-test/test.jsonl +30 -0
- package/test/integration/{test-scanner.test.ts → verification/test-scanner.test.ts} +1 -1
- package/test/integration/{verification-asset-check.test.ts → verification/verification-asset-check.test.ts} +3 -2
- package/test/unit/acceptance.test.ts +1 -0
- package/test/unit/agent-stderr-capture.test.ts +1 -0
- package/test/unit/agents/claude.test.ts +1 -0
- package/test/unit/analyze-classifier.test.ts +1 -0
- package/test/unit/auto-detect.test.ts +1 -0
- package/test/unit/cli-status.test.ts +1 -0
- package/test/unit/commands/common.test.ts +1 -0
- package/test/unit/commands/logs.test.ts +1 -0
- package/test/unit/commands/unlock.test.ts +1 -0
- package/test/unit/config/defaults.test.ts +1 -0
- package/test/unit/config/regression-gate-schema.test.ts +1 -0
- package/test/unit/config/smart-runner-flag.test.ts +1 -0
- package/test/unit/constitution-generators.test.ts +1 -0
- package/test/unit/constitution.test.ts +1 -0
- package/test/unit/context/context-autodetect.test.ts +297 -0
- package/test/unit/context/context-build.test.ts +575 -0
- package/test/unit/context/context-coverage.test.ts +236 -0
- package/test/unit/context/context-error.test.ts +93 -0
- package/test/unit/context/context-estimate-tokens.test.ts +201 -0
- package/test/unit/context/context-format.test.ts +302 -0
- package/test/unit/context/context-isolation.test.ts +267 -0
- package/test/unit/context/context-sort.test.ts +93 -0
- package/test/unit/context/context-story.test.ts +108 -0
- package/test/{context → unit/context}/prior-failures.test.ts +5 -4
- package/test/unit/context.test.ts +1 -0
- package/test/unit/crash-recovery.test.ts +1 -0
- package/test/unit/escalation.test.ts +1 -0
- package/test/unit/execution/lifecycle/run-completion.test.ts +1 -0
- package/test/unit/execution/lifecycle/run-regression.test.ts +2 -0
- package/test/{execution → unit/execution}/pid-registry.test.ts +2 -1
- package/test/{execution → unit/execution}/structured-failure.test.ts +3 -2
- package/test/unit/execution-logging-stderr.test.ts +1 -0
- package/test/unit/execution-stage.test.ts +1 -0
- package/test/unit/fix-generator.test.ts +1 -0
- package/test/unit/greenfield.test.ts +1 -0
- package/test/unit/interaction/human-review-trigger.test.ts +1 -0
- package/test/unit/interaction-network-failures.test.ts +1 -0
- package/test/unit/interaction-plugins.test.ts +1 -0
- package/test/unit/logging/formatter.test.ts +1 -0
- package/test/unit/merge.test.ts +1 -0
- package/test/unit/pipeline/event-bus.test.ts +105 -0
- package/test/unit/pipeline/routing-partial-override.test.ts +1 -0
- package/test/unit/pipeline/runner-retry.test.ts +89 -0
- package/test/unit/pipeline/stages/autofix.test.ts +97 -0
- package/test/unit/pipeline/stages/rectify.test.ts +101 -0
- package/test/unit/pipeline/stages/regression-stage.test.ts +69 -0
- package/test/unit/pipeline/stages/verify.test.ts +1 -0
- package/test/unit/pipeline/subscribers/hooks.test.ts +45 -0
- package/test/unit/pipeline/subscribers/interaction.test.ts +31 -0
- package/test/unit/pipeline/subscribers/reporters.test.ts +90 -0
- package/test/unit/pipeline/verify-smart-runner.test.ts +1 -0
- package/test/unit/prd-auto-default.test.ts +1 -0
- package/test/unit/prd-failure-category.test.ts +1 -0
- package/test/unit/prd-get-next-story.test.ts +1 -0
- package/test/unit/precheck-checks.test.ts +1 -0
- package/test/unit/precheck-story-size-gate.test.ts +1 -0
- package/test/unit/precheck-types.test.ts +1 -0
- package/test/unit/prompts.test.ts +1 -0
- package/test/unit/rectification.test.ts +2 -1
- package/test/unit/registry.test.ts +1 -0
- package/test/unit/routing/routing-stability.test.ts +1 -0
- package/test/unit/routing/strategies/llm.test.ts +1 -0
- package/test/unit/routing-advanced.test.ts +313 -0
- package/test/unit/routing-core.test.ts +341 -0
- package/test/unit/routing-strategies.test.ts +442 -0
- package/test/unit/storyid-events.test.ts +1 -0
- package/test/{ui → unit/ui}/tui-controls.test.ts +8 -7
- package/test/{ui → unit/ui}/tui-cost-and-pty.test.ts +4 -3
- package/test/{ui → unit/ui}/tui-layout.test.ts +5 -4
- package/test/{ui → unit/ui}/tui-stories.test.ts +5 -4
- package/test/unit/{isolation.test.ts → unit-isolation.test.ts} +1 -0
- package/test/unit/{helpers.test.ts → utils-helpers.test.ts} +1 -0
- package/test/unit/verdict.test.ts +1 -0
- package/test/unit/verification/orchestrator-types.test.ts +54 -0
- package/test/unit/verification/orchestrator.test.ts +66 -0
- package/test/unit/verification/smart-runner-config.test.ts +1 -0
- package/test/unit/verification/smart-runner-discovery.test.ts +8 -7
- package/test/unit/verification/strategies/acceptance.test.ts +33 -0
- package/test/unit/verification/strategies/regression.test.ts +87 -0
- package/test/unit/verification/strategies/scoped.test.ts +100 -0
- package/test/unit/worktree-manager.test.ts +1 -0
- package/src/execution/lifecycle/story-hooks.ts +0 -38
- package/src/execution/post-verify.ts +0 -193
- package/src/execution/rectification.ts +0 -13
- package/src/execution/verification.ts +0 -72
- package/test/integration/rectification-flow.test.ts +0 -512
- package/test/integration/runner.test.ts +0 -1679
- package/test/integration/tdd-orchestrator.test.ts +0 -1762
- package/test/unit/execution/post-verify-regression.test.ts +0 -362
- package/test/unit/execution/post-verify.test.ts +0 -236
- package/test/unit/routing.test.ts +0 -1039
- /package/test/{integration → helpers}/helpers.test.ts +0 -0
- /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 "
|
|
9
|
-
import type { HookContext, HooksConfig } from "
|
|
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 () => {
|
package/test/integration/{pipeline-acceptance.test.ts → pipeline/pipeline-acceptance.test.ts}
RENAMED
|
@@ -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 "
|
|
9
|
-
import { DEFAULT_CONFIG } from "
|
|
10
|
-
import { initLogger, resetLogger } from "
|
|
11
|
-
import { acceptanceStage } from "
|
|
12
|
-
import type { PipelineContext } from "
|
|
13
|
-
import type { PRD } from "
|
|
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 "
|
|
9
|
-
import { initLogger, resetLogger } from "
|
|
10
|
-
import { PipelineEventEmitter } from "
|
|
11
|
-
import { runPipeline } from "
|
|
12
|
-
import type { PipelineContext, PipelineStage, StageResult } from "
|
|
13
|
-
import type { UserStory } from "
|
|
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 "
|
|
9
|
-
import { initLogger, resetLogger } from "
|
|
10
|
-
import { runPipeline } from "
|
|
11
|
-
import type { PipelineContext, PipelineStage } from "
|
|
12
|
-
import type { PRD, UserStory } from "
|
|
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 "
|
|
549
|
-
import type { FailureCategory } from "
|
|
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 "
|
|
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 "
|
|
23
|
-
import type { NaxConfig } from "
|
|
24
|
-
import { run } from "
|
|
25
|
-
import { loadHooksConfig } from "
|
|
26
|
-
import type { IReporter, NaxPlugin, RunEndEvent, RunStartEvent, StoryCompleteEvent } from "
|
|
27
|
-
import { loadPRD, savePRD } from "
|
|
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 "
|
|
10
|
-
import { initLogger, resetLogger } from "
|
|
11
|
-
import { verifyStage } from "
|
|
12
|
-
import type { PipelineContext } from "
|
|
13
|
-
import type { PRD, UserStory } from "
|
|
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 "
|
|
9
|
-
import { DEFAULT_CONFIG } from "
|
|
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 "
|
|
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 "
|
|
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 "
|
|
4
|
-
import type { NaxConfig } from "
|
|
5
|
-
import { DEFAULT_CONFIG } from "
|
|
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;
|
package/test/integration/{review-config-commands.test.ts → review/review-config-commands.test.ts}
RENAMED
|
@@ -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 "
|
|
16
|
-
import { runReview } from "
|
|
17
|
-
import type { ReviewConfig } from "
|
|
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 () => {
|
package/test/integration/{review-config-schema.test.ts → review/review-config-schema.test.ts}
RENAMED
|
@@ -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 "
|
|
9
|
-
import { DEFAULT_CONFIG } from "
|
|
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 "
|
|
13
|
-
import type { PipelineContext } from "
|
|
14
|
-
import { PluginRegistry } from "
|
|
15
|
-
import type { IReviewPlugin, NaxPlugin } from "
|
|
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 "
|
|
10
|
-
import type { ReviewConfig } from "
|
|
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 () => {
|