@nathapp/nax 0.28.0 → 0.30.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.
- package/CHANGELOG.md +23 -2
- package/bin/nax.ts +2 -3
- package/dist/nax.js +72753 -0
- package/package.json +11 -3
- package/src/cli/analyze.ts +2 -7
- package/src/cli/config.ts +3 -1
- package/src/config/defaults.ts +1 -0
- package/src/config/schemas.ts +1 -0
- package/src/config/types.ts +1 -0
- package/src/context/builder.ts +10 -1
- package/src/execution/lifecycle/headless-formatter.ts +2 -4
- package/src/prompts/builder.ts +12 -69
- package/src/prompts/sections/isolation.ts +38 -8
- package/src/prompts/sections/role-task.ts +79 -17
- package/src/review/runner.ts +6 -1
- package/src/version.ts +2 -1
- package/.claude/rules/01-project-conventions.md +0 -34
- package/.claude/rules/02-test-architecture.md +0 -39
- package/.claude/rules/03-test-writing.md +0 -58
- package/.claude/rules/04-forbidden-patterns.md +0 -29
- package/.claude/settings.json +0 -15
- package/.githooks/pre-commit +0 -16
- package/.gitlab-ci.yml +0 -103
- package/.mcp.json +0 -8
- package/BRIEF.md +0 -140
- package/CLAUDE.md +0 -143
- package/US-007-IMPLEMENTATION.md +0 -139
- package/biome.json +0 -14
- package/bun.lock +0 -163
- package/bunfig.toml +0 -12
- package/docker-compose.test.yml +0 -15
- package/docs/20260216-fix-plan-context-review.md +0 -56
- package/docs/20260216-relentless-vs-ngent-comparison.md +0 -208
- package/docs/20260216-v02-plan.md +0 -136
- package/docs/20260216-v02-review.md +0 -685
- package/docs/20260217-dogfood-findings.md +0 -56
- package/docs/20260217-p2-plus-plan.md +0 -117
- package/docs/20260217-partial-fixes-plan.md +0 -62
- package/docs/20260217-plan-analyze-spec.md +0 -117
- package/docs/20260217-post-impl-review.md +0 -1137
- package/docs/20260217-quick-wins-plan.md +0 -66
- package/docs/20260217-split-runner-plan.md +0 -75
- package/docs/20260217-v03-impl-plan.md +0 -80
- package/docs/20260217-v03-post-impl-review.md +0 -589
- package/docs/20260217-v04-impl-plan.md +0 -86
- package/docs/20260217-v05-post-impl-review.md +0 -850
- package/docs/20260217-v06-post-impl-review.md +0 -817
- package/docs/20260218-adr003-port-plan.md +0 -151
- package/docs/20260218-review-adr003-verification.md +0 -175
- package/docs/20260219-fix-plan-bug16-19.md +0 -79
- package/docs/20260219-fix-plan-bug20-22.md +0 -114
- package/docs/20260219-plan-llm-routing.md +0 -116
- package/docs/20260219-review-bug20-22-fixes.md +0 -135
- package/docs/20260219-routing-baseline-keyword.md +0 -63
- package/docs/20260220-plan-structured-logging-p1.md +0 -80
- package/docs/20260220-plan-structured-logging-p2.md +0 -37
- package/docs/20260220-review-llm-routing.md +0 -180
- package/docs/20260220-review-post-fix-llm-routing.md +0 -70
- package/docs/20260221-fix-plan-relevantfiles-split.md +0 -101
- package/docs/20260221-fix-plan-routing-mode.md +0 -125
- package/docs/20260221-review-v0.9-implementation.md +0 -379
- package/docs/20260222-fix-plan-v091-routing-isolation.md +0 -197
- package/docs/20260223-fix-plan-prompt-audit.md +0 -62
- package/docs/20260224-nax-roadmap-phases.md +0 -189
- package/docs/20260225-phase2-llm-service-layer.md +0 -401
- package/docs/20260225-review-v0.10.1.md +0 -187
- package/docs/20260303-v010-implementation-plan.md +0 -165
- package/docs/20260304-review-nax.md +0 -492
- package/docs/CLAUDE.md.bak +0 -191
- package/docs/ROADMAP.md +0 -390
- package/docs/SPEC-rectification.md +0 -0
- package/docs/SPEC.md +0 -324
- package/docs/US-001-plugin-loading-verification.md +0 -152
- package/docs/adr/ADR-005-implementation-plan.md +0 -655
- package/docs/adr/ADR-005-pipeline-re-architecture.md +0 -464
- package/docs/architecture-analysis.md +0 -1076
- package/docs/bugs/BUG-21-escalation-null-attempts.md +0 -48
- package/docs/bugs-from-dogfood-run-c.md +0 -243
- package/docs/code-review-20260228.md +0 -612
- package/docs/code-review-v0.15.0.md +0 -629
- package/docs/hook-lifecycle-test-plan.md +0 -149
- package/docs/releases/v0.11.0-and-earlier.md +0 -20
- package/docs/releases/v0.12.0.md +0 -15
- package/docs/releases/v0.13.0.md +0 -14
- package/docs/releases/v0.14.0.md +0 -20
- package/docs/releases/v0.14.1.md +0 -36
- package/docs/releases/v0.14.2.md +0 -51
- package/docs/releases/v0.14.3.md +0 -174
- package/docs/releases/v0.14.4.md +0 -94
- package/docs/releases/v0.15.0.md +0 -502
- package/docs/releases/v0.15.1.md +0 -170
- package/docs/releases/v0.15.3.md +0 -193
- package/docs/specs/bug-039-orphan-processes.md +0 -131
- package/docs/specs/bug-040-review-rectification.md +0 -82
- package/docs/specs/bug-041-cross-story-test-isolation.md +0 -88
- package/docs/specs/bug-042-verifier-failure-capture.md +0 -117
- package/docs/specs/bun-pty-migration.md +0 -171
- package/docs/specs/central-run-registry.md +0 -116
- package/docs/specs/feat-010-smart-runner-git-history.md +0 -96
- package/docs/specs/feat-011-file-context-strategy.md +0 -73
- package/docs/specs/feat-012-tdd-writer-tier.md +0 -79
- package/docs/specs/feat-013-test-after-review.md +0 -89
- package/docs/specs/feat-014-heartbeat-observability.md +0 -127
- package/docs/specs/status-file-consolidation.md +0 -93
- package/docs/specs/status-file-v0.10.1.md +0 -812
- package/docs/specs/trigger-completion.md +0 -145
- package/docs/specs/verification-architecture-v2.md +0 -343
- package/docs/tdd/strategies.md +0 -97
- package/docs/v0.10-global-config.md +0 -206
- package/docs/v0.10-plugin-system.md +0 -415
- package/docs/v0.10-prompt-optimizer.md +0 -234
- package/docs/v0.3-spec.md +0 -244
- package/docs/v0.4-spec.md +0 -140
- package/docs/v0.5-spec.md +0 -237
- package/docs/v0.6-spec.md +0 -371
- package/docs/v0.7-spec.md +0 -177
- package/docs/v0.8-llm-routing.md +0 -206
- package/docs/v0.8-structured-logging.md +0 -132
- package/docs/v0.9.3-prompt-audit.md +0 -112
- package/examples/plugins/console-reporter/index.test.ts +0 -207
- package/examples/plugins/console-reporter/index.ts +0 -110
- package/memory/topic/feat-010-baseref.md +0 -28
- package/memory/topic/feat-013-test-after-deprecation.md +0 -22
- package/nax/config.json +0 -154
- package/nax/features/bug-039-medium/prd.json +0 -45
- package/nax/features/bugfix-v0171/prd.json +0 -52
- package/nax/features/central-run-registry/prd.json +0 -105
- package/nax/features/config-management/prd.json +0 -108
- package/nax/features/config-management/progress.txt +0 -5
- package/nax/features/diagnose/acceptance.test.ts +0 -414
- package/nax/features/diagnose/prd.json +0 -41
- package/nax/features/nax-compliance/prd.json +0 -52
- package/nax/features/nax-compliance/progress.txt +0 -1
- package/nax/features/orchestration-fixes/prd.json +0 -89
- package/nax/features/orchestration-fixes/progress.txt +0 -1
- package/nax/features/plugin-integration/US-007-VERIFICATION.md +0 -259
- package/nax/features/plugin-integration/prd.json +0 -208
- package/nax/features/plugin-integration/progress.txt +0 -5
- package/nax/features/post-rearch-bugfix/prd.json +0 -137
- package/nax/features/precheck/prd.json +0 -205
- package/nax/features/precheck/progress.txt +0 -15
- package/nax/features/prompt-builder/prd.json +0 -152
- package/nax/features/prompt-builder/progress.txt +0 -3
- package/nax/features/review-quality/prd.json +0 -55
- package/nax/features/routing-persistence/prd.json +0 -104
- package/nax/features/routing-persistence/progress.txt +0 -1
- package/nax/features/smart-test-runner/plan.md +0 -7
- package/nax/features/smart-test-runner/prd.json +0 -203
- package/nax/features/smart-test-runner/progress.txt +0 -13
- package/nax/features/smart-test-runner/spec.md +0 -7
- package/nax/features/smart-test-runner/tasks.md +0 -8
- package/nax/features/status-file-consolidation/prd.json +0 -106
- package/nax/features/structured-logging/prd.json +0 -199
- package/nax/features/trigger-completion/prd.json +0 -150
- package/nax/features/trigger-completion/progress.txt +0 -7
- package/nax/features/unlock/prd.json +0 -36
- package/nax/features/v0.18.3-execution-reliability/prd.json +0 -80
- package/nax/features/v0.18.3-execution-reliability/progress.txt +0 -3
- package/nax/features/v0.19.0-hardening/plan.md +0 -7
- package/nax/features/v0.19.0-hardening/prd.json +0 -84
- package/nax/features/v0.19.0-hardening/progress.txt +0 -7
- package/nax/features/v0.19.0-hardening/spec.md +0 -18
- package/nax/features/v0.19.0-hardening/tasks.md +0 -8
- package/nax/features/verify-v2/prd.json +0 -79
- package/nax/features/verify-v2/progress.txt +0 -3
- package/nax/status.json +0 -36
- package/src/prompts/templates/implementer.ts +0 -6
- package/src/prompts/templates/single-session.ts +0 -6
- package/src/prompts/templates/test-writer.ts +0 -6
- package/src/prompts/templates/verifier.ts +0 -6
- package/test/COVERAGE-GAPS.md +0 -333
- package/test/e2e/cm-003-default-view.test.ts +0 -195
- package/test/e2e/plan-analyze-run.test.ts +0 -902
- package/test/helpers/helpers.test.ts +0 -295
- package/test/helpers/timeout.ts +0 -42
- package/test/integration/US-002-TEST-SUMMARY.md +0 -107
- package/test/integration/US-003-TEST-SUMMARY.md +0 -149
- package/test/integration/US-004-TEST-SUMMARY.md +0 -106
- package/test/integration/US-005-TEST-SUMMARY.md +0 -138
- package/test/integration/US-007-TEST-SUMMARY.md +0 -100
- package/test/integration/cli/agent-validation.test.ts +0 -439
- package/test/integration/cli/cli-config-default-edge-cases.test.ts +0 -223
- package/test/integration/cli/cli-config-default-view.test.ts +0 -230
- package/test/integration/cli/cli-config-diff.test.ts +0 -461
- package/test/integration/cli/cli-config-prompts-explain.test.ts +0 -74
- package/test/integration/cli/cli-config.test.ts +0 -737
- package/test/integration/cli/cli-diagnose.test.ts +0 -595
- package/test/integration/cli/cli-logs.test.ts +0 -346
- package/test/integration/cli/cli-plugins.test.ts +0 -679
- package/test/integration/cli/cli-precheck.test.ts +0 -372
- package/test/integration/cli/cli-run-headless.test.ts +0 -174
- package/test/integration/cli/cli.test.ts +0 -76
- package/test/integration/cli/precheck-integration.test.ts +0 -476
- package/test/integration/cli/precheck-orchestrator.test.ts +0 -247
- package/test/integration/cli/precheck.test.ts +0 -806
- package/test/integration/config/config-loader.test.ts +0 -266
- package/test/integration/config/config.test.ts +0 -444
- package/test/integration/config/merger.test.ts +0 -466
- package/test/integration/config/paths.test.ts +0 -52
- package/test/integration/config/security-loader.test.ts +0 -83
- package/test/integration/context/context-integration.test.ts +0 -703
- package/test/integration/context/context-path-security.test.ts +0 -173
- package/test/integration/context/context-provider-injection.test.ts +0 -507
- package/test/integration/context/context-verification-integration.test.ts +0 -296
- package/test/integration/context/s5-greenfield-fallback.test.ts +0 -298
- package/test/integration/execution/execution-isolation.test.ts +0 -143
- package/test/integration/execution/execution.test.ts +0 -634
- package/test/integration/execution/feature-status-write.test.ts +0 -302
- package/test/integration/execution/parallel.test.ts +0 -251
- package/test/integration/execution/prd-pause.test.ts +0 -205
- package/test/integration/execution/prd-resolvers.test.ts +0 -186
- package/test/integration/execution/progress.test.ts +0 -34
- package/test/integration/execution/runner-batching.test.ts +0 -682
- package/test/integration/execution/runner-config-plugins.test.ts +0 -462
- package/test/integration/execution/runner-escalation.test.ts +0 -561
- package/test/integration/execution/runner-fixes.test.ts +0 -400
- package/test/integration/execution/runner-plugin-integration.test.ts +0 -544
- package/test/integration/execution/runner-queue-and-attempts.test.ts +0 -476
- package/test/integration/execution/status-file-integration.test.ts +0 -289
- package/test/integration/execution/status-file.test.ts +0 -380
- package/test/integration/execution/status-writer.test.ts +0 -447
- package/test/integration/execution/story-id-in-events.test.ts +0 -274
- package/test/integration/interaction/interaction-chain-pipeline.test.ts +0 -476
- package/test/integration/pipeline/hooks.test.ts +0 -363
- package/test/integration/pipeline/pipeline-acceptance.test.ts +0 -303
- package/test/integration/pipeline/pipeline-events.test.ts +0 -476
- package/test/integration/pipeline/pipeline.test.ts +0 -660
- package/test/integration/pipeline/reporter-lifecycle.test.ts +0 -862
- package/test/integration/pipeline/verify-stage.test.ts +0 -286
- package/test/integration/plan/analyze-integration.test.ts +0 -262
- package/test/integration/plan/analyze-scanner.test.ts +0 -132
- package/test/integration/plan/logger.test.ts +0 -461
- package/test/integration/plan/plan.test.ts +0 -157
- package/test/integration/plugins/config-integration.test.ts +0 -173
- package/test/integration/plugins/config-resolution.test.ts +0 -523
- package/test/integration/plugins/loader.test.ts +0 -644
- package/test/integration/plugins/plugins-registry.test.ts +0 -747
- package/test/integration/plugins/validator.test.ts +0 -564
- package/test/integration/prompts/pb-004-migration.test.ts +0 -523
- package/test/integration/review/review-config-commands.test.ts +0 -320
- package/test/integration/review/review-config-schema.test.ts +0 -117
- package/test/integration/review/review-plugin-integration.test.ts +0 -729
- package/test/integration/review/review.test.ts +0 -150
- package/test/integration/routing/plugin-routing-advanced.test.ts +0 -461
- package/test/integration/routing/plugin-routing-core.test.ts +0 -527
- package/test/integration/routing/routing-stage-bug-021.test.ts +0 -275
- package/test/integration/routing/routing-stage-greenfield.test.ts +0 -287
- package/test/integration/tdd/tdd-cleanup.test.ts +0 -246
- package/test/integration/tdd/tdd-orchestrator-core.test.ts +0 -565
- package/test/integration/tdd/tdd-orchestrator-failureCategory.test.ts +0 -355
- package/test/integration/tdd/tdd-orchestrator-fallback.test.ts +0 -311
- package/test/integration/tdd/tdd-orchestrator-lite.test.ts +0 -289
- package/test/integration/tdd/tdd-orchestrator-prompts.test.ts +0 -260
- package/test/integration/tdd/tdd-orchestrator-verdict.test.ts +0 -536
- package/test/integration/tmp/headless-test/test.jsonl +0 -30
- package/test/integration/verification/test-scanner.test.ts +0 -403
- package/test/integration/verification/verification-asset-check.test.ts +0 -143
- package/test/integration/worktree/manager.test.ts +0 -218
- package/test/integration/worktree/worktree-merge.test.ts +0 -341
- package/test/manual/logging-formatter-demo.ts +0 -158
- package/test/ui/tui-agent-panel.test.tsx +0 -99
- package/test/ui/tui-pty-integration.test.tsx +0 -146
- package/test/unit/acceptance.test.ts +0 -187
- package/test/unit/agent-stderr-capture.test.ts +0 -147
- package/test/unit/agents/claude.test.ts +0 -107
- package/test/unit/analyze-classifier.test.ts +0 -216
- package/test/unit/analyze.test.ts +0 -224
- package/test/unit/auto-detect.test.ts +0 -250
- package/test/unit/cli-status-project-level.test.ts +0 -283
- package/test/unit/cli-status.test.ts +0 -418
- package/test/unit/commands/common.test.ts +0 -321
- package/test/unit/commands/logs.test.ts +0 -458
- package/test/unit/commands/runs.test.ts +0 -303
- package/test/unit/commands/unlock.test.ts +0 -320
- package/test/unit/config/defaults.test.ts +0 -70
- package/test/unit/config/quality-commands-schema.test.ts +0 -72
- package/test/unit/config/regression-gate-schema.test.ts +0 -160
- package/test/unit/config/smart-runner-flag.test.ts +0 -250
- package/test/unit/constitution-generators.test.ts +0 -161
- package/test/unit/constitution.test.ts +0 -210
- package/test/unit/context/context-autodetect.test.ts +0 -297
- package/test/unit/context/context-build.test.ts +0 -575
- package/test/unit/context/context-coverage.test.ts +0 -236
- package/test/unit/context/context-error.test.ts +0 -93
- package/test/unit/context/context-estimate-tokens.test.ts +0 -201
- package/test/unit/context/context-format.test.ts +0 -302
- package/test/unit/context/context-isolation.test.ts +0 -267
- package/test/unit/context/context-sort.test.ts +0 -93
- package/test/unit/context/context-story.test.ts +0 -108
- package/test/unit/context/prior-failures.test.ts +0 -463
- package/test/unit/context.test.ts +0 -1726
- package/test/unit/cost.test.ts +0 -231
- package/test/unit/crash-recovery.test.ts +0 -309
- package/test/unit/escalation.test.ts +0 -127
- package/test/unit/execution/lifecycle/run-completion.test.ts +0 -240
- package/test/unit/execution/lifecycle/run-regression.test.ts +0 -420
- package/test/unit/execution/pid-registry.test.ts +0 -241
- package/test/unit/execution/sequential-executor.test.ts +0 -235
- package/test/unit/execution/sfc-004-dead-code-cleanup.test.ts +0 -89
- package/test/unit/execution/structured-failure.test.ts +0 -415
- package/test/unit/execution-logging-stderr.test.ts +0 -157
- package/test/unit/execution-stage.test.ts +0 -123
- package/test/unit/fix-generator.test.ts +0 -276
- package/test/unit/formatters.test.ts +0 -468
- package/test/unit/greenfield.test.ts +0 -180
- package/test/unit/hooks/shell-security.test.ts +0 -40
- package/test/unit/interaction/auto-plugin.test.ts +0 -162
- package/test/unit/interaction/human-review-trigger.test.ts +0 -165
- package/test/unit/interaction-network-failures.test.ts +0 -390
- package/test/unit/interaction-plugins.test.ts +0 -472
- package/test/unit/logging/formatter.test.ts +0 -456
- package/test/unit/merge.test.ts +0 -269
- package/test/unit/metrics/aggregator.test.ts +0 -164
- package/test/unit/metrics/tracker.test.ts +0 -186
- package/test/unit/metrics.test.ts +0 -276
- package/test/unit/optimizer/noop.optimizer.test.ts +0 -125
- package/test/unit/optimizer/rule-based.optimizer.test.ts +0 -358
- package/test/unit/pipeline/event-bus.test.ts +0 -105
- package/test/unit/pipeline/routing-partial-override.test.ts +0 -121
- package/test/unit/pipeline/runner-retry.test.ts +0 -89
- package/test/unit/pipeline/stages/autofix.test.ts +0 -97
- package/test/unit/pipeline/stages/completion-review-gate.test.ts +0 -218
- package/test/unit/pipeline/stages/execution-ambiguity.test.ts +0 -311
- package/test/unit/pipeline/stages/execution-merge-conflict.test.ts +0 -218
- package/test/unit/pipeline/stages/rectify.test.ts +0 -101
- package/test/unit/pipeline/stages/regression-stage.test.ts +0 -69
- package/test/unit/pipeline/stages/review.test.ts +0 -201
- package/test/unit/pipeline/stages/routing-idempotence.test.ts +0 -139
- package/test/unit/pipeline/stages/routing-initial-complexity.test.ts +0 -321
- package/test/unit/pipeline/stages/routing-persistence.test.ts +0 -380
- package/test/unit/pipeline/stages/verify.test.ts +0 -267
- package/test/unit/pipeline/subscribers/events-writer.test.ts +0 -227
- package/test/unit/pipeline/subscribers/hooks.test.ts +0 -84
- package/test/unit/pipeline/subscribers/interaction.test.ts +0 -313
- package/test/unit/pipeline/subscribers/registry.test.ts +0 -149
- package/test/unit/pipeline/subscribers/reporters.test.ts +0 -90
- package/test/unit/pipeline/verify-smart-runner.test.ts +0 -345
- package/test/unit/prd-auto-default.test.ts +0 -291
- package/test/unit/prd-failure-category.test.ts +0 -177
- package/test/unit/prd-get-next-story.test.ts +0 -215
- package/test/unit/precheck/checks-warnings.test.ts +0 -114
- package/test/unit/precheck-checks.test.ts +0 -841
- package/test/unit/precheck-story-size-gate.test.ts +0 -288
- package/test/unit/precheck-types.test.ts +0 -143
- package/test/unit/prompts/builder.test.ts +0 -258
- package/test/unit/prompts/loader.test.ts +0 -355
- package/test/unit/prompts/sections/conventions.test.ts +0 -30
- package/test/unit/prompts/sections/isolation.test.ts +0 -35
- package/test/unit/prompts/sections/role-task.test.ts +0 -40
- package/test/unit/prompts/sections/sections.test.ts +0 -238
- package/test/unit/prompts/sections/story.test.ts +0 -45
- package/test/unit/prompts/sections/verdict.test.ts +0 -58
- package/test/unit/prompts.test.ts +0 -476
- package/test/unit/queue.test.ts +0 -237
- package/test/unit/rectification.test.ts +0 -285
- package/test/unit/registry.test.ts +0 -288
- package/test/unit/review/runner.test.ts +0 -117
- package/test/unit/routing/content-hash.test.ts +0 -99
- package/test/unit/routing/routing-stability.test.ts +0 -208
- package/test/unit/routing/strategies/llm.test.ts +0 -306
- package/test/unit/routing-advanced.test.ts +0 -313
- package/test/unit/routing-core.test.ts +0 -341
- package/test/unit/routing-strategies.test.ts +0 -440
- package/test/unit/storyid-events.test.ts +0 -213
- package/test/unit/tdd-verdict.test.ts +0 -492
- package/test/unit/test-output-parser.test.ts +0 -377
- package/test/unit/ui/tui-controls.test.ts +0 -335
- package/test/unit/ui/tui-cost-and-pty.test.ts +0 -190
- package/test/unit/ui/tui-layout.test.ts +0 -379
- package/test/unit/ui/tui-stories.test.ts +0 -333
- package/test/unit/unit-isolation.test.ts +0 -135
- package/test/unit/utils/git.test.ts +0 -50
- package/test/unit/utils/path-security.test.ts +0 -47
- package/test/unit/utils-helpers.test.ts +0 -318
- package/test/unit/verdict.test.ts +0 -325
- package/test/unit/verification/orchestrator-types.test.ts +0 -54
- package/test/unit/verification/orchestrator.test.ts +0 -66
- package/test/unit/verification/smart-runner-config.test.ts +0 -163
- package/test/unit/verification/smart-runner-discovery.test.ts +0 -354
- package/test/unit/verification/smart-runner.test.ts +0 -262
- package/test/unit/verification/strategies/acceptance.test.ts +0 -33
- package/test/unit/verification/strategies/regression.test.ts +0 -87
- package/test/unit/verification/strategies/scoped.test.ts +0 -100
- package/test/unit/worktree-manager.test.ts +0 -159
- package/tsconfig.json +0 -27
package/test/COVERAGE-GAPS.md
DELETED
|
@@ -1,333 +0,0 @@
|
|
|
1
|
-
# Phase 0 Coverage Gap Analysis
|
|
2
|
-
|
|
3
|
-
**Date:** 2026-03-06
|
|
4
|
-
**Version:** v0.22.0
|
|
5
|
-
**Purpose:** Document new test files needed for Phases 1-4, and key integration behaviors to preserve from re-architected code.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## New Test Files Needed by Phase
|
|
10
|
-
|
|
11
|
-
These test files must be created in future phases to maintain coverage for new architecture components. Each entry includes acceptance criteria extracted from rewrite-tagged tests.
|
|
12
|
-
|
|
13
|
-
### Phase 1: Foundation (Event Bus + Verification Orchestrator)
|
|
14
|
-
|
|
15
|
-
| New File | Purpose | Dependencies | Status |
|
|
16
|
-
|:---|:---|:---|:---|
|
|
17
|
-
| `test/unit/verification/orchestrator.test.ts` | Test unified VerificationOrchestrator entry point | Depends on strategies (P1-002..004) | ⬜ TODO |
|
|
18
|
-
| `test/unit/verification/types.test.ts` | Type guards and result builders for Verify result | P1-001 types | ⬜ TODO |
|
|
19
|
-
| `test/unit/verification/strategies/scoped.test.ts` | Test scoped test execution strategy | Port from `test/unit/pipeline/stages/verify.test.ts` | ⬜ TODO |
|
|
20
|
-
| `test/unit/verification/strategies/regression.test.ts` | Test full-suite regression verification | Port from `test/unit/execution/post-verify-regression.test.ts` | ⬜ TODO |
|
|
21
|
-
| `test/unit/verification/strategies/acceptance.test.ts` | Test AC test strategy | Port from `test/unit/acceptance.test.ts` | ⬜ TODO |
|
|
22
|
-
| `test/unit/pipeline/event-bus.test.ts` | Event emission and type safety | Standalone new event types | ⬜ TODO |
|
|
23
|
-
|
|
24
|
-
**Gate:** All 6 new tests pass; no existing tests regress.
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
### Phase 2: New Pipeline Stages
|
|
29
|
-
|
|
30
|
-
| New File | Purpose | Dependencies | Status |
|
|
31
|
-
|:---|:---|:---|:---|
|
|
32
|
-
| `test/unit/pipeline/stages/rectify.test.ts` | Test rectification stage logic | Depends on Phase 1 orchestrator | ⬜ TODO |
|
|
33
|
-
| `test/unit/pipeline/stages/autofix.test.ts` | Test autofix stage (lint/format/typecheck fix) | Config schema updates | ⬜ TODO |
|
|
34
|
-
| `test/unit/pipeline/stages/regression.test.ts` | Test inline regression verification | Port from `test/unit/execution/post-verify-regression.test.ts` | ⬜ TODO |
|
|
35
|
-
| `test/unit/pipeline/runner-retry.test.ts` | Test retry action handling in pipeline runner | Pipeline runner updates | ⬜ TODO |
|
|
36
|
-
| `test/integration/pipeline-new-flow.test.ts` | E2E test of full new pipeline flow | All new stages wired together | ⬜ TODO |
|
|
37
|
-
|
|
38
|
-
**Gate:** All 5 new tests pass; new stages integrate correctly with existing pipeline.
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
### Phase 3: Subscriber Consolidation
|
|
43
|
-
|
|
44
|
-
| New File | Purpose | Dependencies | Status |
|
|
45
|
-
|:---|:---|:---|:---|
|
|
46
|
-
| `test/unit/pipeline/subscribers/hooks.test.ts` | Test hooks event bus subscriber | Event bus (P1) | ⬜ TODO |
|
|
47
|
-
| `test/unit/pipeline/subscribers/reporters.test.ts` | Test reporter event bus subscriber | Event bus (P1) | ⬜ TODO |
|
|
48
|
-
| `test/unit/pipeline/subscribers/interaction.test.ts` | Test interaction trigger event bus subscriber | Event bus (P1) | ⬜ TODO |
|
|
49
|
-
| `test/integration/subscriber-wiring.test.ts` | E2E test of all subscribers wired together | All subscribers | ⬜ TODO |
|
|
50
|
-
|
|
51
|
-
**Gate:** All 4 new tests pass; hooks/reporters/triggers all fire correctly via event bus; zero direct fireHook/getReporters/executeTrigger calls remain.
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
### Phase 4: Executor Simplification
|
|
56
|
-
|
|
57
|
-
No new test files required; existing test assertions ported to new files in earlier phases.
|
|
58
|
-
|
|
59
|
-
**Gate:** All tests pass; sequential-executor.ts < 120 lines; pipeline-result-handler.ts < 200 lines.
|
|
60
|
-
|
|
61
|
-
---
|
|
62
|
-
|
|
63
|
-
## Key Integration Behaviors to Preserve
|
|
64
|
-
|
|
65
|
-
These behaviors are extracted from the 5 rewrite-tagged test files and must survive the re-architecture. Tests for these behaviors will be rewritten in new pipeline/subscriber stages, but the assertions must be preserved.
|
|
66
|
-
|
|
67
|
-
### 1. Full Pipeline Flow (`test/integration/pipeline/pipeline.test.ts`)
|
|
68
|
-
|
|
69
|
-
**Current tests:** ~10 tests covering routing → execution → verify → review → completion
|
|
70
|
-
|
|
71
|
-
**Assertions to preserve:**
|
|
72
|
-
- ✅ Pipeline executes all stages in correct order
|
|
73
|
-
- ✅ Context flows correctly from stage to stage (routing decision → execution config → verify with correct strategy → review with correct checks)
|
|
74
|
-
- ✅ Pipeline returns correct final action (continue, escalate, pause, fail, skip)
|
|
75
|
-
- ✅ Errors in one stage don't crash pipeline; stage can return escalate/fail
|
|
76
|
-
- ✅ Custom pipeline order via config is respected
|
|
77
|
-
- ✅ Pipeline context is immutable across stages (no cross-stage mutations)
|
|
78
|
-
- ✅ Story metrics (duration, cost) are correctly accumulated
|
|
79
|
-
|
|
80
|
-
**Rewrite location:** New pipeline flow integration test (P2) will verify order: routing → execution → verify → rectify → review → autofix → regression → completion
|
|
81
|
-
|
|
82
|
-
---
|
|
83
|
-
|
|
84
|
-
### 2. Verify Stage (`test/integration/pipeline/verify-stage.test.ts`)
|
|
85
|
-
|
|
86
|
-
**Current tests:** ~8 tests covering scoped verification, smart runner, parser
|
|
87
|
-
|
|
88
|
-
**Assertions to preserve:**
|
|
89
|
-
- ✅ Verify stage calls smart runner for test discovery
|
|
90
|
-
- ✅ Verify stage calls parser to extract test failures from output
|
|
91
|
-
- ✅ Verify returns VerifyResult with pass/fail status, counts, failures[]
|
|
92
|
-
- ✅ Verify handles timeout gracefully (returns failed status, not throw)
|
|
93
|
-
- ✅ Verify respects maxTimeoutSeconds config
|
|
94
|
-
- ✅ Verify handles missing/empty test output
|
|
95
|
-
|
|
96
|
-
**Rewrite location:** `test/unit/verification/strategies/scoped.test.ts` — same assertions, new function signature
|
|
97
|
-
|
|
98
|
-
---
|
|
99
|
-
|
|
100
|
-
### 3. Rectification Flow (`test/integration/pipeline/rectification-flow.test.ts`)
|
|
101
|
-
|
|
102
|
-
**Current tests:** ~8 tests covering full rectification cycle
|
|
103
|
-
|
|
104
|
-
**Assertions to preserve:**
|
|
105
|
-
- ✅ Scoped verify pass → full suite fails → rectification prompt sent → fix applied → verify rerun → full suite passes
|
|
106
|
-
- ✅ Rectification respects maxRetries config
|
|
107
|
-
- ✅ Rectification exhaustion → escalate (not infinite loop)
|
|
108
|
-
- ✅ Rectification failure reasons are logged and categorized
|
|
109
|
-
- ✅ Story status transitions correctly on rectify success/failure
|
|
110
|
-
|
|
111
|
-
**Rewrite location:** `test/unit/pipeline/stages/rectify.test.ts` — same end-to-end flow, new stage implementation
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
### 4. Hooks Lifecycle (`test/integration/pipeline/hooks.test.ts`)
|
|
116
|
-
|
|
117
|
-
**Current tests:** ~6 tests covering hook firing at lifecycle points
|
|
118
|
-
|
|
119
|
-
**Assertions to preserve:**
|
|
120
|
-
- ✅ on-start hook fires before first story execution
|
|
121
|
-
- ✅ on-story-start hook fires for each story
|
|
122
|
-
- ✅ on-story-complete hook fires after story success/failure
|
|
123
|
-
- ✅ on-pause hook fires when execution pauses
|
|
124
|
-
- ✅ on-complete hook fires after all stories done
|
|
125
|
-
- ✅ Hook errors don't crash pipeline (fire-and-forget)
|
|
126
|
-
- ✅ Hook environment variables are passed correctly
|
|
127
|
-
|
|
128
|
-
**Rewrite location:** `test/unit/pipeline/subscribers/hooks.test.ts` — same hook trigger points, wired via event bus
|
|
129
|
-
|
|
130
|
-
---
|
|
131
|
-
|
|
132
|
-
### 5. Reporter Lifecycle (`test/integration/pipeline/reporter-lifecycle.test.ts`)
|
|
133
|
-
|
|
134
|
-
**Current tests:** ~6 tests covering reporter plugin lifecycle events
|
|
135
|
-
|
|
136
|
-
**Assertions to preserve:**
|
|
137
|
-
- ✅ onRunStart() called before execution starts
|
|
138
|
-
- ✅ onStoryComplete() called after each story completes with correct data
|
|
139
|
-
- ✅ onRunEnd() called after all stories done with final summary
|
|
140
|
-
- ✅ Reporter errors don't crash pipeline (fire-and-forget)
|
|
141
|
-
- ✅ Multiple reporters all receive events
|
|
142
|
-
- ✅ Reporter data includes story ID, status, cost, duration
|
|
143
|
-
|
|
144
|
-
**Rewrite location:** `test/unit/pipeline/subscribers/reporters.test.ts` — same event timing, wired via event bus
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
### 6. Interaction Triggers (`test/integration/interaction/interaction-chain-pipeline.test.ts`)
|
|
149
|
-
|
|
150
|
-
**Current tests:** ~3 acceptance criteria with 10+ scenario tests
|
|
151
|
-
|
|
152
|
-
**Assertions to preserve:**
|
|
153
|
-
- ✅ `human-review` trigger fires when story exhausts max retries
|
|
154
|
-
- ✅ `max-retries` trigger is accessible from interaction chain
|
|
155
|
-
- ✅ Interaction request contains story ID, attempt number, failure reason
|
|
156
|
-
- ✅ Interaction response (skip/retry/abort) affects story status
|
|
157
|
-
- ✅ CLI interaction plugin participates in non-headless human-review
|
|
158
|
-
- ✅ Interaction errors (timeout/no-response) fall back to configured fallback action
|
|
159
|
-
|
|
160
|
-
**Rewrite location:** `test/unit/pipeline/subscribers/interaction.test.ts` — same trigger conditions, wired via event bus
|
|
161
|
-
|
|
162
|
-
---
|
|
163
|
-
|
|
164
|
-
## Behavior Categories
|
|
165
|
-
|
|
166
|
-
### 1. Verification Behaviors
|
|
167
|
-
|
|
168
|
-
**Must be preserved:** How tests are discovered, executed, parsed, and categorized (scoped vs regression vs acceptance).
|
|
169
|
-
|
|
170
|
-
**Where tested:** Phase 1 strategy tests + Phase 2 regression stage test
|
|
171
|
-
|
|
172
|
-
**Critical path:**
|
|
173
|
-
1. Smart runner discovers test files ✅
|
|
174
|
-
2. Test executor spawns with correct config ✅
|
|
175
|
-
3. Parser extracts pass/fail from stdout/stderr ✅
|
|
176
|
-
4. Structured failures[] are populated correctly ✅
|
|
177
|
-
|
|
178
|
-
---
|
|
179
|
-
|
|
180
|
-
### 2. Pipeline Flow Behaviors
|
|
181
|
-
|
|
182
|
-
**Must be preserved:** Stage execution order, context threading, error handling, final action decisions.
|
|
183
|
-
|
|
184
|
-
**Where tested:** Phase 2 pipeline integration test + Phase 3 subscriber wiring test
|
|
185
|
-
|
|
186
|
-
**Critical path:**
|
|
187
|
-
1. Stages execute in correct order ✅
|
|
188
|
-
2. Each stage receives correct context ✅
|
|
189
|
-
3. Each stage returns correct action ✅
|
|
190
|
-
4. Pipeline handles stage errors gracefully ✅
|
|
191
|
-
|
|
192
|
-
---
|
|
193
|
-
|
|
194
|
-
### 3. Rectification Cycle
|
|
195
|
-
|
|
196
|
-
**Must be preserved:** Scoped fail → full suite fail → prompt → fix → retry flow.
|
|
197
|
-
|
|
198
|
-
**Where tested:** Phase 2 rectify stage test
|
|
199
|
-
|
|
200
|
-
**Critical path:**
|
|
201
|
-
1. Scoped tests pass ✅
|
|
202
|
-
2. Full suite run returns failures ✅
|
|
203
|
-
3. Rectification prompt is sent to agent ✅
|
|
204
|
-
4. Agent fix is applied ✅
|
|
205
|
-
5. Full suite re-run passes ✅
|
|
206
|
-
|
|
207
|
-
---
|
|
208
|
-
|
|
209
|
-
### 4. Review & Autofix Cycle
|
|
210
|
-
|
|
211
|
-
**Must be preserved:** Linting/format/typecheck failures → auto-fix → retry flow.
|
|
212
|
-
|
|
213
|
-
**Where tested:** Phase 2 autofix stage test
|
|
214
|
-
|
|
215
|
-
**Critical path:**
|
|
216
|
-
1. Review fails on lint/format/typecheck ✅
|
|
217
|
-
2. Auto-fix commands run ✅
|
|
218
|
-
3. Auto-fix fixes the issues ✅
|
|
219
|
-
4. Review is re-run and passes ✅
|
|
220
|
-
|
|
221
|
-
---
|
|
222
|
-
|
|
223
|
-
### 5. Escalation & Retry
|
|
224
|
-
|
|
225
|
-
**Must be preserved:** Failed attempt tracking, tier escalation, max retries exhaustion.
|
|
226
|
-
|
|
227
|
-
**Where tested:** Phase 2 retry action test + Phase 3 interaction subscriber test
|
|
228
|
-
|
|
229
|
-
**Critical path:**
|
|
230
|
-
1. Story failure increments attempts ✅
|
|
231
|
-
2. Attempts >= maxRetries triggers escalation ✅
|
|
232
|
-
3. Escalation moves story to higher tier ✅
|
|
233
|
-
4. Max retries exhaustion triggers human-review ✅
|
|
234
|
-
|
|
235
|
-
---
|
|
236
|
-
|
|
237
|
-
### 6. Lifecycle Events (Hooks, Reporters, Triggers)
|
|
238
|
-
|
|
239
|
-
**Must be preserved:** Timely firing of hooks/reporters at correct execution points, and trigger conditions.
|
|
240
|
-
|
|
241
|
-
**Where tested:** Phase 3 subscriber tests + subscriber wiring test
|
|
242
|
-
|
|
243
|
-
**Critical path:**
|
|
244
|
-
1. Events fire at correct lifecycle points ✅
|
|
245
|
-
2. Subscribers receive events with correct data ✅
|
|
246
|
-
3. Event errors don't crash pipeline ✅
|
|
247
|
-
4. Triggers fire on correct conditions ✅
|
|
248
|
-
|
|
249
|
-
---
|
|
250
|
-
|
|
251
|
-
## Implementation Checklist
|
|
252
|
-
|
|
253
|
-
### Phase 0 (Test Cleanup) — COMPLETE ✅
|
|
254
|
-
- [x] US-P0-001: Reorganize test folder structure
|
|
255
|
-
- [x] US-P0-002: Split monster test files >400 lines (partial; context.test.ts remaining)
|
|
256
|
-
- [x] US-P0-003: Tag tests for re-architecture impact
|
|
257
|
-
- [x] US-P0-004: Coverage gap analysis (this document)
|
|
258
|
-
|
|
259
|
-
### Phase 1 (Foundation) — TO DO
|
|
260
|
-
- [ ] US-P1-001: Verification orchestrator types
|
|
261
|
-
- [ ] US-P1-002: Verification orchestrator — scoped strategy (port `verify.test.ts` assertions)
|
|
262
|
-
- [ ] US-P1-003: Verification orchestrator — regression strategy (port `post-verify-regression.test.ts`)
|
|
263
|
-
- [ ] US-P1-004: Verification orchestrator — acceptance strategy (port `acceptance.test.ts`)
|
|
264
|
-
- [ ] US-P1-005: Verification orchestrator — entry point + rectification
|
|
265
|
-
- [ ] US-P1-006: Pipeline event bus
|
|
266
|
-
|
|
267
|
-
### Phase 2 (New Stages) — TO DO
|
|
268
|
-
- [ ] US-P2-001: Pipeline runner — `retry` action
|
|
269
|
-
- [ ] US-P2-002: `rectify` stage (preserve `rectification-flow.test.ts` assertions)
|
|
270
|
-
- [ ] US-P2-003: `autofix` stage
|
|
271
|
-
- [ ] US-P2-004: `regression` stage (port `post-verify-regression.test.ts`)
|
|
272
|
-
- [ ] US-P2-005: Wire new stages into pipeline + update verify/review (port `pipeline.test.ts`)
|
|
273
|
-
|
|
274
|
-
### Phase 3 (Subscribers) — TO DO
|
|
275
|
-
- [ ] US-P3-001: Hooks subscriber (preserve `hooks.test.ts` assertions)
|
|
276
|
-
- [ ] US-P3-002: Reporter subscriber (preserve `reporter-lifecycle.test.ts` assertions)
|
|
277
|
-
- [ ] US-P3-003: Interaction subscriber (preserve `interaction-chain-pipeline.test.ts` assertions)
|
|
278
|
-
- [ ] US-P3-004: Wire subscribers at startup
|
|
279
|
-
|
|
280
|
-
### Phase 4 (Simplification) — TO DO
|
|
281
|
-
- [ ] US-P4-001: Remove routing duplication
|
|
282
|
-
- [ ] US-P4-002: Remove post-verify from result handler
|
|
283
|
-
- [ ] US-P4-003: Simplify executor loop
|
|
284
|
-
- [ ] US-P4-004: Delete deprecated files + cleanup
|
|
285
|
-
|
|
286
|
-
---
|
|
287
|
-
|
|
288
|
-
## Test Portability Notes
|
|
289
|
-
|
|
290
|
-
When porting tests from rewrite-tagged files to new phase files:
|
|
291
|
-
|
|
292
|
-
1. **Keep all assertion.toBe/toEqual/toHaveBeenCalled patterns** — these validate the behavioral contract
|
|
293
|
-
2. **Update only the setup/mocking** — old code may mock `src/execution/runner`, new code mocks event bus
|
|
294
|
-
3. **Extract acceptance criteria headers** — reuse AC comments in new test files
|
|
295
|
-
4. **Preserve test naming** — if old test named "X returns Y when Z", keep the pattern in new test
|
|
296
|
-
|
|
297
|
-
Example migration:
|
|
298
|
-
```typescript
|
|
299
|
-
// OLD (test/integration/pipeline/hooks.test.ts):
|
|
300
|
-
test("on-story-complete hook fires after story success", async () => {
|
|
301
|
-
await runPipeline(...)
|
|
302
|
-
expect(fireHook).toHaveBeenCalledWith("on-story-complete", ...)
|
|
303
|
-
})
|
|
304
|
-
|
|
305
|
-
// NEW (test/unit/pipeline/subscribers/hooks.test.ts):
|
|
306
|
-
test("on-story-complete hook fires after story success", async () => {
|
|
307
|
-
const bus = new PipelineEventEmitter()
|
|
308
|
-
const subscriber = wireHooks(bus, hooks, workdir)
|
|
309
|
-
bus.emit("story:complete", story, metrics)
|
|
310
|
-
expect(hooks.runner.fireHook).toHaveBeenCalledWith("on-story-complete", ...)
|
|
311
|
-
})
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
---
|
|
315
|
-
|
|
316
|
-
## Summary
|
|
317
|
-
|
|
318
|
-
**Test files to be deleted (Phase 4):**
|
|
319
|
-
- test/unit/execution/post-verify.test.ts
|
|
320
|
-
- test/unit/execution/post-verify-regression.test.ts
|
|
321
|
-
- test/unit/execution/lifecycle/run-regression.test.ts
|
|
322
|
-
- test/integration/pipeline/rectification-flow.test.ts
|
|
323
|
-
|
|
324
|
-
**Test files to be rewritten (Phases 1-3):**
|
|
325
|
-
- test/integration/pipeline/pipeline.test.ts → P2 new pipeline flow
|
|
326
|
-
- test/integration/pipeline/verify-stage.test.ts → P1 scoped strategy
|
|
327
|
-
- test/integration/pipeline/hooks.test.ts → P3 hooks subscriber
|
|
328
|
-
- test/integration/interaction/interaction-chain-pipeline.test.ts → P3 interaction subscriber
|
|
329
|
-
- test/integration/pipeline/reporter-lifecycle.test.ts → P3 reporter subscriber
|
|
330
|
-
|
|
331
|
-
**Assertions preserved:** 50+ test cases converted into new test files via straightforward ports.
|
|
332
|
-
|
|
333
|
-
**Critical behaviors:** Full pipeline flow, verification strategies, rectification cycle, autofix cycle, escalation, lifecycle events.
|
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
// RE-ARCH: keep
|
|
2
|
-
/**
|
|
3
|
-
* Acceptance Tests for CM-003: nax config (default view)
|
|
4
|
-
*
|
|
5
|
-
* Tests the acceptance criteria for running `nax config` without flags.
|
|
6
|
-
*
|
|
7
|
-
* ACCEPTANCE CRITERIA:
|
|
8
|
-
* 1. Running `nax config` prints the effective merged config as formatted JSON
|
|
9
|
-
* 2. Header shows paths of config files found (global, project)
|
|
10
|
-
* 3. Missing config files noted in header
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { describe, test, expect, beforeEach, afterEach } from "bun:test";
|
|
14
|
-
import { mkdtempSync, rmSync, writeFileSync, mkdirSync } from "node:fs";
|
|
15
|
-
import { tmpdir } from "node:os";
|
|
16
|
-
import { join } from "node:path";
|
|
17
|
-
|
|
18
|
-
describe("CM-003: nax config (default view)", () => {
|
|
19
|
-
let tempDir: string;
|
|
20
|
-
let originalCwd: string;
|
|
21
|
-
|
|
22
|
-
beforeEach(() => {
|
|
23
|
-
tempDir = mkdtempSync(join(tmpdir(), "cm-003-test-"));
|
|
24
|
-
originalCwd = process.cwd();
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
afterEach(() => {
|
|
28
|
-
process.chdir(originalCwd);
|
|
29
|
-
rmSync(tempDir, { recursive: true, force: true });
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
// AC1: Running `nax config` prints the effective merged config as formatted JSON
|
|
33
|
-
test("AC1: prints effective merged config as formatted JSON", async () => {
|
|
34
|
-
process.chdir(tempDir);
|
|
35
|
-
|
|
36
|
-
const proc = Bun.spawn(["bun", join(import.meta.dir, "../../bin/nax.ts"), "config"], {
|
|
37
|
-
cwd: tempDir,
|
|
38
|
-
stdout: "pipe",
|
|
39
|
-
stderr: "pipe",
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
const output = await new Response(proc.stdout).text();
|
|
43
|
-
const exitCode = await proc.exited;
|
|
44
|
-
|
|
45
|
-
expect(exitCode).toBe(0);
|
|
46
|
-
|
|
47
|
-
// Should output valid JSON
|
|
48
|
-
const lines = output.split("\n");
|
|
49
|
-
const jsonStartIndex = lines.findIndex((line) => line.startsWith("{"));
|
|
50
|
-
expect(jsonStartIndex).toBeGreaterThanOrEqual(0);
|
|
51
|
-
|
|
52
|
-
const jsonOutput = lines.slice(jsonStartIndex).join("\n");
|
|
53
|
-
expect(() => JSON.parse(jsonOutput)).not.toThrow();
|
|
54
|
-
|
|
55
|
-
// Verify it's the merged config (contains version, models, etc.)
|
|
56
|
-
const parsed = JSON.parse(jsonOutput);
|
|
57
|
-
expect(parsed.version).toBe(1);
|
|
58
|
-
expect(parsed.models).toBeDefined();
|
|
59
|
-
expect(parsed.autoMode).toBeDefined();
|
|
60
|
-
expect(parsed.execution).toBeDefined();
|
|
61
|
-
|
|
62
|
-
// Verify it's formatted (pretty-printed with indentation)
|
|
63
|
-
expect(jsonOutput).toContain(" "); // Should have 2-space indentation
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
// AC2: Header shows paths of config files found (global, project)
|
|
67
|
-
test("AC2: header shows global config path", async () => {
|
|
68
|
-
process.chdir(tempDir);
|
|
69
|
-
|
|
70
|
-
const proc = Bun.spawn(["bun", join(import.meta.dir, "../../bin/nax.ts"), "config"], {
|
|
71
|
-
cwd: tempDir,
|
|
72
|
-
stdout: "pipe",
|
|
73
|
-
stderr: "pipe",
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
const output = await new Response(proc.stdout).text();
|
|
77
|
-
const exitCode = await proc.exited;
|
|
78
|
-
|
|
79
|
-
expect(exitCode).toBe(0);
|
|
80
|
-
|
|
81
|
-
// Should show global config line
|
|
82
|
-
expect(output).toContain("// Global config:");
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
test("AC2: header shows project config path when present", async () => {
|
|
86
|
-
// Create project config
|
|
87
|
-
const naxDir = join(tempDir, "nax");
|
|
88
|
-
mkdirSync(naxDir, { recursive: true });
|
|
89
|
-
writeFileSync(
|
|
90
|
-
join(naxDir, "config.json"),
|
|
91
|
-
JSON.stringify({
|
|
92
|
-
execution: {
|
|
93
|
-
maxIterations: 42,
|
|
94
|
-
},
|
|
95
|
-
}),
|
|
96
|
-
);
|
|
97
|
-
|
|
98
|
-
process.chdir(tempDir);
|
|
99
|
-
|
|
100
|
-
const proc = Bun.spawn(["bun", join(import.meta.dir, "../../bin/nax.ts"), "config"], {
|
|
101
|
-
cwd: tempDir,
|
|
102
|
-
stdout: "pipe",
|
|
103
|
-
stderr: "pipe",
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
const output = await new Response(proc.stdout).text();
|
|
107
|
-
const exitCode = await proc.exited;
|
|
108
|
-
|
|
109
|
-
expect(exitCode).toBe(0);
|
|
110
|
-
|
|
111
|
-
// Should show project config path
|
|
112
|
-
expect(output).toContain("// Project config:");
|
|
113
|
-
expect(output).toContain("config.json");
|
|
114
|
-
|
|
115
|
-
// Verify the merged config reflects project override
|
|
116
|
-
const lines = output.split("\n");
|
|
117
|
-
const jsonStartIndex = lines.findIndex((line) => line.startsWith("{"));
|
|
118
|
-
const jsonOutput = lines.slice(jsonStartIndex).join("\n");
|
|
119
|
-
const parsed = JSON.parse(jsonOutput);
|
|
120
|
-
expect(parsed.execution.maxIterations).toBe(42);
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
// AC3: Missing config files noted in header
|
|
124
|
-
test("AC3: notes missing project config in header", async () => {
|
|
125
|
-
// Use a directory without nax/config.json
|
|
126
|
-
const isolatedDir = join(tempDir, "isolated");
|
|
127
|
-
mkdirSync(isolatedDir, { recursive: true });
|
|
128
|
-
process.chdir(isolatedDir);
|
|
129
|
-
|
|
130
|
-
const proc = Bun.spawn(["bun", join(import.meta.dir, "../../bin/nax.ts"), "config"], {
|
|
131
|
-
cwd: isolatedDir,
|
|
132
|
-
stdout: "pipe",
|
|
133
|
-
stderr: "pipe",
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
const output = await new Response(proc.stdout).text();
|
|
137
|
-
const exitCode = await proc.exited;
|
|
138
|
-
|
|
139
|
-
expect(exitCode).toBe(0);
|
|
140
|
-
|
|
141
|
-
// Should indicate project config is not found
|
|
142
|
-
expect(output).toContain("// Project config:");
|
|
143
|
-
expect(output).toContain("(not found)");
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
// Additional verification: header includes resolution order info
|
|
147
|
-
test("header includes resolution order information", async () => {
|
|
148
|
-
process.chdir(tempDir);
|
|
149
|
-
|
|
150
|
-
const proc = Bun.spawn(["bun", join(import.meta.dir, "../../bin/nax.ts"), "config"], {
|
|
151
|
-
cwd: tempDir,
|
|
152
|
-
stdout: "pipe",
|
|
153
|
-
stderr: "pipe",
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
const output = await new Response(proc.stdout).text();
|
|
157
|
-
const exitCode = await proc.exited;
|
|
158
|
-
|
|
159
|
-
expect(exitCode).toBe(0);
|
|
160
|
-
|
|
161
|
-
// Should show resolution order
|
|
162
|
-
expect(output).toContain("// Resolution order:");
|
|
163
|
-
expect(output).toContain("defaults");
|
|
164
|
-
expect(output).toContain("global");
|
|
165
|
-
expect(output).toContain("project");
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
// Additional verification: header precedes JSON
|
|
169
|
-
test("header appears before JSON output with blank line separator", async () => {
|
|
170
|
-
process.chdir(tempDir);
|
|
171
|
-
|
|
172
|
-
const proc = Bun.spawn(["bun", join(import.meta.dir, "../../bin/nax.ts"), "config"], {
|
|
173
|
-
cwd: tempDir,
|
|
174
|
-
stdout: "pipe",
|
|
175
|
-
stderr: "pipe",
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
const output = await new Response(proc.stdout).text();
|
|
179
|
-
const exitCode = await proc.exited;
|
|
180
|
-
|
|
181
|
-
expect(exitCode).toBe(0);
|
|
182
|
-
|
|
183
|
-
const lines = output.split("\n");
|
|
184
|
-
|
|
185
|
-
// Header should come before JSON
|
|
186
|
-
const headerIndex = lines.findIndex((line) => line.includes("// nax Configuration"));
|
|
187
|
-
const jsonIndex = lines.findIndex((line) => line.startsWith("{"));
|
|
188
|
-
|
|
189
|
-
expect(headerIndex).toBeGreaterThanOrEqual(0);
|
|
190
|
-
expect(jsonIndex).toBeGreaterThan(headerIndex);
|
|
191
|
-
|
|
192
|
-
// Should have blank line between header and JSON
|
|
193
|
-
expect(lines[jsonIndex - 1]).toBe("");
|
|
194
|
-
});
|
|
195
|
-
});
|