@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
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
// RE-ARCH: keep
|
|
2
|
-
/**
|
|
3
|
-
* Edge Case Tests for `nax config` Default View
|
|
4
|
-
*
|
|
5
|
-
* Tests edge cases and regression scenarios for the default view.
|
|
6
|
-
* These tests ensure the feature handles unusual scenarios correctly.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { describe, test, expect, beforeEach, afterEach } from "bun:test";
|
|
10
|
-
import { mkdtempSync, rmSync, writeFileSync, mkdirSync } from "node:fs";
|
|
11
|
-
import { tmpdir } from "node:os";
|
|
12
|
-
import { join } from "node:path";
|
|
13
|
-
|
|
14
|
-
describe("nax config (default view) - edge cases", () => {
|
|
15
|
-
let tempDir: string;
|
|
16
|
-
let originalCwd: string;
|
|
17
|
-
|
|
18
|
-
beforeEach(() => {
|
|
19
|
-
tempDir = mkdtempSync(join(tmpdir(), "nax-config-edge-test-"));
|
|
20
|
-
originalCwd = process.cwd();
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
afterEach(() => {
|
|
24
|
-
process.chdir(originalCwd);
|
|
25
|
-
rmSync(tempDir, { recursive: true, force: true });
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
// NOTE: Error handling tests removed - those belong in a separate error handling story
|
|
29
|
-
// The current story (CM-003) focuses on the happy path: displaying config when files are valid
|
|
30
|
-
|
|
31
|
-
test("handles project config with only comments (valid but empty JSON)", async () => {
|
|
32
|
-
// Create project config with only {}
|
|
33
|
-
const naxDir = join(tempDir, "nax");
|
|
34
|
-
mkdirSync(naxDir, { recursive: true });
|
|
35
|
-
writeFileSync(join(naxDir, "config.json"), "{}");
|
|
36
|
-
|
|
37
|
-
process.chdir(tempDir);
|
|
38
|
-
|
|
39
|
-
const proc = Bun.spawn(["bun", join(import.meta.dir, "../../../bin/nax.ts"), "config"], {
|
|
40
|
-
cwd: tempDir,
|
|
41
|
-
stdout: "pipe",
|
|
42
|
-
stderr: "pipe",
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
const output = await new Response(proc.stdout).text();
|
|
46
|
-
const exitCode = await proc.exited;
|
|
47
|
-
|
|
48
|
-
expect(exitCode).toBe(0);
|
|
49
|
-
|
|
50
|
-
// Should show project config as found (even though it's empty)
|
|
51
|
-
expect(output).toContain("// Project config:");
|
|
52
|
-
expect(output).toContain("config.json");
|
|
53
|
-
|
|
54
|
-
// Should still output valid JSON (merged with defaults)
|
|
55
|
-
const lines = output.split("\n");
|
|
56
|
-
const jsonStartIndex = lines.findIndex((line) => line.startsWith("{"));
|
|
57
|
-
const jsonOutput = lines.slice(jsonStartIndex).join("\n");
|
|
58
|
-
const parsed = JSON.parse(jsonOutput);
|
|
59
|
-
expect(parsed.version).toBe(1);
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
test("handles deep nesting when walking up directory tree", async () => {
|
|
63
|
-
// Create project config at root
|
|
64
|
-
const naxDir = join(tempDir, "nax");
|
|
65
|
-
mkdirSync(naxDir, { recursive: true });
|
|
66
|
-
writeFileSync(
|
|
67
|
-
join(naxDir, "config.json"),
|
|
68
|
-
JSON.stringify({
|
|
69
|
-
execution: {
|
|
70
|
-
maxIterations: 50,
|
|
71
|
-
},
|
|
72
|
-
}),
|
|
73
|
-
);
|
|
74
|
-
|
|
75
|
-
// Create deeply nested subdirectory
|
|
76
|
-
const deepDir = join(tempDir, "a", "b", "c", "d", "e", "f");
|
|
77
|
-
mkdirSync(deepDir, { recursive: true });
|
|
78
|
-
process.chdir(deepDir);
|
|
79
|
-
|
|
80
|
-
const proc = Bun.spawn(["bun", join(import.meta.dir, "../../../bin/nax.ts"), "config"], {
|
|
81
|
-
cwd: deepDir,
|
|
82
|
-
stdout: "pipe",
|
|
83
|
-
stderr: "pipe",
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
const output = await new Response(proc.stdout).text();
|
|
87
|
-
const exitCode = await proc.exited;
|
|
88
|
-
|
|
89
|
-
expect(exitCode).toBe(0);
|
|
90
|
-
|
|
91
|
-
// Should find project config by walking up
|
|
92
|
-
expect(output).toContain("// Project config:");
|
|
93
|
-
expect(output).toContain("config.json");
|
|
94
|
-
|
|
95
|
-
// Should reflect merged config
|
|
96
|
-
const lines = output.split("\n");
|
|
97
|
-
const jsonStartIndex = lines.findIndex((line) => line.startsWith("{"));
|
|
98
|
-
const jsonOutput = lines.slice(jsonStartIndex).join("\n");
|
|
99
|
-
const parsed = JSON.parse(jsonOutput);
|
|
100
|
-
expect(parsed.execution.maxIterations).toBe(50);
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
test("outputs complete config structure with all top-level keys", async () => {
|
|
104
|
-
process.chdir(tempDir);
|
|
105
|
-
|
|
106
|
-
const proc = Bun.spawn(["bun", join(import.meta.dir, "../../../bin/nax.ts"), "config"], {
|
|
107
|
-
cwd: tempDir,
|
|
108
|
-
stdout: "pipe",
|
|
109
|
-
stderr: "pipe",
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
const output = await new Response(proc.stdout).text();
|
|
113
|
-
const exitCode = await proc.exited;
|
|
114
|
-
|
|
115
|
-
expect(exitCode).toBe(0);
|
|
116
|
-
|
|
117
|
-
const lines = output.split("\n");
|
|
118
|
-
const jsonStartIndex = lines.findIndex((line) => line.startsWith("{"));
|
|
119
|
-
const jsonOutput = lines.slice(jsonStartIndex).join("\n");
|
|
120
|
-
const parsed = JSON.parse(jsonOutput);
|
|
121
|
-
|
|
122
|
-
// Verify all required top-level keys are present
|
|
123
|
-
expect(parsed).toHaveProperty("version");
|
|
124
|
-
expect(parsed).toHaveProperty("models");
|
|
125
|
-
expect(parsed).toHaveProperty("autoMode");
|
|
126
|
-
expect(parsed).toHaveProperty("routing");
|
|
127
|
-
expect(parsed).toHaveProperty("execution");
|
|
128
|
-
expect(parsed).toHaveProperty("quality");
|
|
129
|
-
expect(parsed).toHaveProperty("tdd");
|
|
130
|
-
expect(parsed).toHaveProperty("constitution");
|
|
131
|
-
expect(parsed).toHaveProperty("analyze");
|
|
132
|
-
expect(parsed).toHaveProperty("review");
|
|
133
|
-
expect(parsed).toHaveProperty("plan");
|
|
134
|
-
expect(parsed).toHaveProperty("acceptance");
|
|
135
|
-
expect(parsed).toHaveProperty("context");
|
|
136
|
-
expect(parsed).toHaveProperty("interaction");
|
|
137
|
-
expect(parsed).toHaveProperty("precheck");
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
test("merges nested config overrides correctly", async () => {
|
|
141
|
-
// Create project config with nested overrides
|
|
142
|
-
const naxDir = join(tempDir, "nax");
|
|
143
|
-
mkdirSync(naxDir, { recursive: true });
|
|
144
|
-
writeFileSync(
|
|
145
|
-
join(naxDir, "config.json"),
|
|
146
|
-
JSON.stringify({
|
|
147
|
-
execution: {
|
|
148
|
-
maxIterations: 15,
|
|
149
|
-
rectification: {
|
|
150
|
-
enabled: false,
|
|
151
|
-
maxRetries: 5,
|
|
152
|
-
},
|
|
153
|
-
},
|
|
154
|
-
}),
|
|
155
|
-
);
|
|
156
|
-
|
|
157
|
-
process.chdir(tempDir);
|
|
158
|
-
|
|
159
|
-
const proc = Bun.spawn(["bun", join(import.meta.dir, "../../../bin/nax.ts"), "config"], {
|
|
160
|
-
cwd: tempDir,
|
|
161
|
-
stdout: "pipe",
|
|
162
|
-
stderr: "pipe",
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
const output = await new Response(proc.stdout).text();
|
|
166
|
-
const exitCode = await proc.exited;
|
|
167
|
-
|
|
168
|
-
expect(exitCode).toBe(0);
|
|
169
|
-
|
|
170
|
-
const lines = output.split("\n");
|
|
171
|
-
const jsonStartIndex = lines.findIndex((line) => line.startsWith("{"));
|
|
172
|
-
const jsonOutput = lines.slice(jsonStartIndex).join("\n");
|
|
173
|
-
const parsed = JSON.parse(jsonOutput);
|
|
174
|
-
|
|
175
|
-
// Verify nested overrides
|
|
176
|
-
expect(parsed.execution.maxIterations).toBe(15);
|
|
177
|
-
expect(parsed.execution.rectification.enabled).toBe(false);
|
|
178
|
-
expect(parsed.execution.rectification.maxRetries).toBe(5);
|
|
179
|
-
|
|
180
|
-
// Verify non-overridden fields are preserved
|
|
181
|
-
expect(parsed.execution.iterationDelayMs).toBeDefined();
|
|
182
|
-
expect(parsed.execution.rectification.fullSuiteTimeoutSeconds).toBeDefined();
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
test("handles project config with schema version mismatch", async () => {
|
|
186
|
-
// Create project config with future schema version
|
|
187
|
-
const naxDir = join(tempDir, "nax");
|
|
188
|
-
mkdirSync(naxDir, { recursive: true });
|
|
189
|
-
writeFileSync(
|
|
190
|
-
join(naxDir, "config.json"),
|
|
191
|
-
JSON.stringify({
|
|
192
|
-
version: 999, // Future version
|
|
193
|
-
execution: {
|
|
194
|
-
maxIterations: 25,
|
|
195
|
-
},
|
|
196
|
-
}),
|
|
197
|
-
);
|
|
198
|
-
|
|
199
|
-
process.chdir(tempDir);
|
|
200
|
-
|
|
201
|
-
const proc = Bun.spawn(["bun", join(import.meta.dir, "../../../bin/nax.ts"), "config"], {
|
|
202
|
-
cwd: tempDir,
|
|
203
|
-
stdout: "pipe",
|
|
204
|
-
stderr: "pipe",
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
const output = await new Response(proc.stdout).text();
|
|
208
|
-
const stderr = await new Response(proc.stderr).text();
|
|
209
|
-
const exitCode = await proc.exited;
|
|
210
|
-
|
|
211
|
-
// Should either succeed with warning or fail gracefully
|
|
212
|
-
if (exitCode !== 0) {
|
|
213
|
-
expect(stderr.toLowerCase()).toMatch(/error|invalid|version/);
|
|
214
|
-
} else {
|
|
215
|
-
// If it succeeds, verify output is valid
|
|
216
|
-
const lines = output.split("\n");
|
|
217
|
-
const jsonStartIndex = lines.findIndex((line) => line.startsWith("{"));
|
|
218
|
-
expect(jsonStartIndex).toBeGreaterThan(0);
|
|
219
|
-
const jsonOutput = lines.slice(jsonStartIndex).join("\n");
|
|
220
|
-
expect(() => JSON.parse(jsonOutput)).not.toThrow();
|
|
221
|
-
}
|
|
222
|
-
});
|
|
223
|
-
});
|
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
// RE-ARCH: keep
|
|
2
|
-
/**
|
|
3
|
-
* CLI Integration Tests for `nax config` Default View
|
|
4
|
-
*
|
|
5
|
-
* Tests the full end-to-end flow of running `nax config` without flags
|
|
6
|
-
* via the CLI entry point (bin/nax.ts).
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { describe, test, expect, beforeEach, afterEach } from "bun:test";
|
|
10
|
-
import { mkdtempSync, rmSync, writeFileSync, mkdirSync } from "node:fs";
|
|
11
|
-
import { tmpdir } from "node:os";
|
|
12
|
-
import { join } from "node:path";
|
|
13
|
-
|
|
14
|
-
describe("nax config (default view) - CLI integration", () => {
|
|
15
|
-
let tempDir: string;
|
|
16
|
-
let originalCwd: string;
|
|
17
|
-
|
|
18
|
-
beforeEach(() => {
|
|
19
|
-
// Create temp directory
|
|
20
|
-
tempDir = mkdtempSync(join(tmpdir(), "nax-config-cli-test-"));
|
|
21
|
-
originalCwd = process.cwd();
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
afterEach(() => {
|
|
25
|
-
// Cleanup
|
|
26
|
-
process.chdir(originalCwd);
|
|
27
|
-
rmSync(tempDir, { recursive: true, force: true });
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
test("prints effective merged config as JSON with header", async () => {
|
|
31
|
-
process.chdir(tempDir);
|
|
32
|
-
|
|
33
|
-
// Run `nax config` command
|
|
34
|
-
const proc = Bun.spawn(["bun", join(import.meta.dir, "../../../bin/nax.ts"), "config"], {
|
|
35
|
-
cwd: tempDir,
|
|
36
|
-
stdout: "pipe",
|
|
37
|
-
stderr: "pipe",
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
const output = await new Response(proc.stdout).text();
|
|
41
|
-
const exitCode = await proc.exited;
|
|
42
|
-
|
|
43
|
-
expect(exitCode).toBe(0);
|
|
44
|
-
|
|
45
|
-
// Should have header
|
|
46
|
-
expect(output).toContain("// nax Configuration");
|
|
47
|
-
expect(output).toContain("// Resolution order: defaults → global → project → CLI overrides");
|
|
48
|
-
expect(output).toContain("// Global config:");
|
|
49
|
-
expect(output).toContain("// Project config:");
|
|
50
|
-
|
|
51
|
-
// Should have valid JSON after header
|
|
52
|
-
const lines = output.split("\n");
|
|
53
|
-
const jsonStartIndex = lines.findIndex((line) => line.startsWith("{"));
|
|
54
|
-
expect(jsonStartIndex).toBeGreaterThan(0);
|
|
55
|
-
|
|
56
|
-
const jsonOutput = lines.slice(jsonStartIndex).join("\n");
|
|
57
|
-
expect(() => JSON.parse(jsonOutput)).not.toThrow();
|
|
58
|
-
|
|
59
|
-
const parsed = JSON.parse(jsonOutput);
|
|
60
|
-
expect(parsed.version).toBe(1);
|
|
61
|
-
expect(parsed.models).toBeDefined();
|
|
62
|
-
expect(parsed.autoMode).toBeDefined();
|
|
63
|
-
expect(parsed.execution).toBeDefined();
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
test("shows global config path in header", async () => {
|
|
67
|
-
process.chdir(tempDir);
|
|
68
|
-
|
|
69
|
-
const proc = Bun.spawn(["bun", join(import.meta.dir, "../../../bin/nax.ts"), "config"], {
|
|
70
|
-
cwd: tempDir,
|
|
71
|
-
stdout: "pipe",
|
|
72
|
-
stderr: "pipe",
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
const output = await new Response(proc.stdout).text();
|
|
76
|
-
const exitCode = await proc.exited;
|
|
77
|
-
|
|
78
|
-
expect(exitCode).toBe(0);
|
|
79
|
-
|
|
80
|
-
// Should show global config path (may be "not found" or actual path)
|
|
81
|
-
expect(output).toContain("// Global config:");
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
test("shows (not found) for missing project config", async () => {
|
|
85
|
-
// Use a directory without nax/config.json
|
|
86
|
-
const isolatedDir = join(tempDir, "isolated");
|
|
87
|
-
mkdirSync(isolatedDir, { recursive: true });
|
|
88
|
-
process.chdir(isolatedDir);
|
|
89
|
-
|
|
90
|
-
const proc = Bun.spawn(["bun", join(import.meta.dir, "../../../bin/nax.ts"), "config"], {
|
|
91
|
-
cwd: isolatedDir,
|
|
92
|
-
stdout: "pipe",
|
|
93
|
-
stderr: "pipe",
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
const output = await new Response(proc.stdout).text();
|
|
97
|
-
const exitCode = await proc.exited;
|
|
98
|
-
|
|
99
|
-
expect(exitCode).toBe(0);
|
|
100
|
-
|
|
101
|
-
// Should show project config as not found
|
|
102
|
-
expect(output).toContain("// Project config: (not found)");
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
test("shows project config path when present", async () => {
|
|
106
|
-
// Create project config
|
|
107
|
-
const naxDir = join(tempDir, "nax");
|
|
108
|
-
mkdirSync(naxDir, { recursive: true });
|
|
109
|
-
writeFileSync(
|
|
110
|
-
join(naxDir, "config.json"),
|
|
111
|
-
JSON.stringify({
|
|
112
|
-
execution: {
|
|
113
|
-
maxIterations: 20,
|
|
114
|
-
},
|
|
115
|
-
}),
|
|
116
|
-
);
|
|
117
|
-
|
|
118
|
-
process.chdir(tempDir);
|
|
119
|
-
|
|
120
|
-
const proc = Bun.spawn(["bun", join(import.meta.dir, "../../../bin/nax.ts"), "config"], {
|
|
121
|
-
cwd: tempDir,
|
|
122
|
-
stdout: "pipe",
|
|
123
|
-
stderr: "pipe",
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
const output = await new Response(proc.stdout).text();
|
|
127
|
-
const exitCode = await proc.exited;
|
|
128
|
-
|
|
129
|
-
expect(exitCode).toBe(0);
|
|
130
|
-
|
|
131
|
-
// Should show project config path
|
|
132
|
-
expect(output).toContain("// Project config:");
|
|
133
|
-
expect(output).toContain("config.json");
|
|
134
|
-
|
|
135
|
-
// Should reflect merged config
|
|
136
|
-
const lines = output.split("\n");
|
|
137
|
-
const jsonStartIndex = lines.findIndex((line) => line.startsWith("{"));
|
|
138
|
-
const jsonOutput = lines.slice(jsonStartIndex).join("\n");
|
|
139
|
-
const parsed = JSON.parse(jsonOutput);
|
|
140
|
-
expect(parsed.execution.maxIterations).toBe(20);
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
test("header precedes JSON output with blank line", async () => {
|
|
144
|
-
process.chdir(tempDir);
|
|
145
|
-
|
|
146
|
-
const proc = Bun.spawn(["bun", join(import.meta.dir, "../../../bin/nax.ts"), "config"], {
|
|
147
|
-
cwd: tempDir,
|
|
148
|
-
stdout: "pipe",
|
|
149
|
-
stderr: "pipe",
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
const output = await new Response(proc.stdout).text();
|
|
153
|
-
const exitCode = await proc.exited;
|
|
154
|
-
|
|
155
|
-
expect(exitCode).toBe(0);
|
|
156
|
-
|
|
157
|
-
const lines = output.split("\n");
|
|
158
|
-
|
|
159
|
-
// Find header and JSON start
|
|
160
|
-
const headerLineIndex = lines.findIndex((line) => line.includes("// nax Configuration"));
|
|
161
|
-
const jsonLineIndex = lines.findIndex((line) => line.startsWith("{"));
|
|
162
|
-
|
|
163
|
-
expect(headerLineIndex).toBeGreaterThanOrEqual(0);
|
|
164
|
-
expect(jsonLineIndex).toBeGreaterThan(headerLineIndex);
|
|
165
|
-
|
|
166
|
-
// Should have blank line between header and JSON
|
|
167
|
-
expect(lines[jsonLineIndex - 1]).toBe("");
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
test("JSON output is pretty-printed (indented)", async () => {
|
|
171
|
-
process.chdir(tempDir);
|
|
172
|
-
|
|
173
|
-
const proc = Bun.spawn(["bun", join(import.meta.dir, "../../../bin/nax.ts"), "config"], {
|
|
174
|
-
cwd: tempDir,
|
|
175
|
-
stdout: "pipe",
|
|
176
|
-
stderr: "pipe",
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
const output = await new Response(proc.stdout).text();
|
|
180
|
-
const exitCode = await proc.exited;
|
|
181
|
-
|
|
182
|
-
expect(exitCode).toBe(0);
|
|
183
|
-
|
|
184
|
-
// JSON should be pretty-printed with 2-space indentation
|
|
185
|
-
expect(output).toMatch(/"version": 1/);
|
|
186
|
-
expect(output).toMatch(/"models": \{/);
|
|
187
|
-
expect(output).toContain(" "); // Should have indentation
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
test("works when run from project subdirectory", async () => {
|
|
191
|
-
// Create project config
|
|
192
|
-
const naxDir = join(tempDir, "nax");
|
|
193
|
-
mkdirSync(naxDir, { recursive: true });
|
|
194
|
-
writeFileSync(
|
|
195
|
-
join(naxDir, "config.json"),
|
|
196
|
-
JSON.stringify({
|
|
197
|
-
execution: {
|
|
198
|
-
maxIterations: 30,
|
|
199
|
-
},
|
|
200
|
-
}),
|
|
201
|
-
);
|
|
202
|
-
|
|
203
|
-
// Create subdirectory and run from there
|
|
204
|
-
const subdir = join(tempDir, "src", "components");
|
|
205
|
-
mkdirSync(subdir, { recursive: true });
|
|
206
|
-
process.chdir(subdir);
|
|
207
|
-
|
|
208
|
-
const proc = Bun.spawn(["bun", join(import.meta.dir, "../../../bin/nax.ts"), "config"], {
|
|
209
|
-
cwd: subdir,
|
|
210
|
-
stdout: "pipe",
|
|
211
|
-
stderr: "pipe",
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
const output = await new Response(proc.stdout).text();
|
|
215
|
-
const exitCode = await proc.exited;
|
|
216
|
-
|
|
217
|
-
expect(exitCode).toBe(0);
|
|
218
|
-
|
|
219
|
-
// Should find project config by walking up
|
|
220
|
-
expect(output).toContain("// Project config:");
|
|
221
|
-
expect(output).toContain("config.json");
|
|
222
|
-
|
|
223
|
-
// Should reflect merged config
|
|
224
|
-
const lines = output.split("\n");
|
|
225
|
-
const jsonStartIndex = lines.findIndex((line) => line.startsWith("{"));
|
|
226
|
-
const jsonOutput = lines.slice(jsonStartIndex).join("\n");
|
|
227
|
-
const parsed = JSON.parse(jsonOutput);
|
|
228
|
-
expect(parsed.execution.maxIterations).toBe(30);
|
|
229
|
-
});
|
|
230
|
-
});
|