@nathapp/nax 0.18.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/.gitlab-ci.yml +96 -0
- package/BRIEF.md +140 -0
- package/CHANGELOG.md +60 -0
- package/CLAUDE.md +159 -0
- package/README.md +373 -0
- package/US-007-IMPLEMENTATION.md +139 -0
- package/bin/nax.ts +930 -0
- package/biome.json +14 -0
- package/bun.lock +168 -0
- package/bunfig.toml +11 -0
- package/docs/20260216-fix-plan-context-review.md +56 -0
- package/docs/20260216-relentless-vs-ngent-comparison.md +208 -0
- package/docs/20260216-v02-plan.md +136 -0
- package/docs/20260216-v02-review.md +685 -0
- package/docs/20260217-dogfood-findings.md +56 -0
- package/docs/20260217-p2-plus-plan.md +117 -0
- package/docs/20260217-partial-fixes-plan.md +62 -0
- package/docs/20260217-plan-analyze-spec.md +117 -0
- package/docs/20260217-post-impl-review.md +1137 -0
- package/docs/20260217-quick-wins-plan.md +66 -0
- package/docs/20260217-split-runner-plan.md +75 -0
- package/docs/20260217-v03-impl-plan.md +80 -0
- package/docs/20260217-v03-post-impl-review.md +589 -0
- package/docs/20260217-v04-impl-plan.md +86 -0
- package/docs/20260217-v05-post-impl-review.md +850 -0
- package/docs/20260217-v06-post-impl-review.md +817 -0
- package/docs/20260218-adr003-port-plan.md +151 -0
- package/docs/20260218-review-adr003-verification.md +175 -0
- package/docs/20260219-fix-plan-bug16-19.md +79 -0
- package/docs/20260219-fix-plan-bug20-22.md +114 -0
- package/docs/20260219-plan-llm-routing.md +116 -0
- package/docs/20260219-review-bug20-22-fixes.md +135 -0
- package/docs/20260219-routing-baseline-keyword.md +63 -0
- package/docs/20260220-plan-structured-logging-p1.md +80 -0
- package/docs/20260220-plan-structured-logging-p2.md +37 -0
- package/docs/20260220-review-llm-routing.md +180 -0
- package/docs/20260220-review-post-fix-llm-routing.md +70 -0
- package/docs/20260221-fix-plan-relevantfiles-split.md +101 -0
- package/docs/20260221-fix-plan-routing-mode.md +125 -0
- package/docs/20260221-review-v0.9-implementation.md +379 -0
- package/docs/20260222-fix-plan-v091-routing-isolation.md +197 -0
- package/docs/20260223-fix-plan-prompt-audit.md +62 -0
- package/docs/20260224-nax-roadmap-phases.md +189 -0
- package/docs/20260225-phase2-llm-service-layer.md +401 -0
- package/docs/20260225-review-v0.10.1.md +187 -0
- package/docs/20260303-v010-implementation-plan.md +165 -0
- package/docs/CLAUDE.md.bak +191 -0
- package/docs/ROADMAP.md +165 -0
- package/docs/SPEC-rectification.md +0 -0
- package/docs/SPEC.md +324 -0
- package/docs/US-001-plugin-loading-verification.md +152 -0
- package/docs/architecture-analysis.md +1076 -0
- package/docs/bugs/BUG-21-escalation-null-attempts.md +48 -0
- package/docs/bugs-from-dogfood-run-c.md +243 -0
- package/docs/code-review-20260228.md +612 -0
- package/docs/code-review-v0.15.0.md +629 -0
- package/docs/hook-lifecycle-test-plan.md +149 -0
- package/docs/releases/v0.11.0-and-earlier.md +20 -0
- package/docs/releases/v0.12.0.md +15 -0
- package/docs/releases/v0.13.0.md +14 -0
- package/docs/releases/v0.14.0.md +20 -0
- package/docs/releases/v0.14.1.md +36 -0
- package/docs/releases/v0.14.2.md +51 -0
- package/docs/releases/v0.14.3.md +174 -0
- package/docs/releases/v0.14.4.md +94 -0
- package/docs/releases/v0.15.0.md +502 -0
- package/docs/releases/v0.15.1.md +170 -0
- package/docs/releases/v0.15.3.md +193 -0
- package/docs/specs/status-file-v0.10.1.md +812 -0
- package/docs/v0.10-global-config.md +206 -0
- package/docs/v0.10-plugin-system.md +415 -0
- package/docs/v0.10-prompt-optimizer.md +234 -0
- package/docs/v0.3-spec.md +244 -0
- package/docs/v0.4-spec.md +140 -0
- package/docs/v0.5-spec.md +237 -0
- package/docs/v0.6-spec.md +371 -0
- package/docs/v0.7-spec.md +177 -0
- package/docs/v0.8-llm-routing.md +206 -0
- package/docs/v0.8-structured-logging.md +132 -0
- package/docs/v0.9.3-prompt-audit.md +112 -0
- package/examples/plugins/console-reporter/index.test.ts +207 -0
- package/examples/plugins/console-reporter/index.ts +110 -0
- package/nax/config.json +147 -0
- package/nax/features/bugfix-v0171/prd.json +52 -0
- package/nax/features/config-management/prd.json +108 -0
- package/nax/features/config-management/progress.txt +5 -0
- package/nax/features/diagnose/acceptance.test.ts +412 -0
- package/nax/features/diagnose/prd.json +41 -0
- package/nax/features/orchestration-fixes/prd.json +89 -0
- package/nax/features/orchestration-fixes/progress.txt +1 -0
- package/nax/features/plugin-integration/US-007-VERIFICATION.md +259 -0
- package/nax/features/plugin-integration/prd.json +208 -0
- package/nax/features/plugin-integration/progress.txt +5 -0
- package/nax/features/precheck/prd.json +205 -0
- package/nax/features/precheck/progress.txt +15 -0
- package/nax/features/structured-logging/prd.json +199 -0
- package/nax/features/unlock/prd.json +36 -0
- package/package.json +47 -0
- package/src/acceptance/fix-generator.ts +348 -0
- package/src/acceptance/generator.ts +282 -0
- package/src/acceptance/index.ts +30 -0
- package/src/acceptance/types.ts +79 -0
- package/src/agents/claude-decompose.ts +169 -0
- package/src/agents/claude-plan.ts +139 -0
- package/src/agents/claude.ts +324 -0
- package/src/agents/cost.ts +268 -0
- package/src/agents/index.ts +13 -0
- package/src/agents/registry.ts +48 -0
- package/src/agents/types-extended.ts +133 -0
- package/src/agents/types.ts +113 -0
- package/src/agents/validation.ts +69 -0
- package/src/analyze/classifier.ts +305 -0
- package/src/analyze/index.ts +16 -0
- package/src/analyze/scanner.ts +175 -0
- package/src/analyze/types.ts +51 -0
- package/src/cli/accept.ts +108 -0
- package/src/cli/analyze-parser.ts +284 -0
- package/src/cli/analyze.ts +207 -0
- package/src/cli/config.ts +561 -0
- package/src/cli/constitution.ts +109 -0
- package/src/cli/diagnose-analysis.ts +159 -0
- package/src/cli/diagnose-formatter.ts +87 -0
- package/src/cli/diagnose.ts +203 -0
- package/src/cli/generate.ts +127 -0
- package/src/cli/index.ts +37 -0
- package/src/cli/init.ts +188 -0
- package/src/cli/interact.ts +295 -0
- package/src/cli/plan.ts +198 -0
- package/src/cli/plugins.ts +111 -0
- package/src/cli/prompts.ts +295 -0
- package/src/cli/runs.ts +174 -0
- package/src/cli/status-cost.ts +151 -0
- package/src/cli/status-features.ts +338 -0
- package/src/cli/status.ts +13 -0
- package/src/commands/common.ts +171 -0
- package/src/commands/diagnose.ts +17 -0
- package/src/commands/index.ts +8 -0
- package/src/commands/logs.ts +384 -0
- package/src/commands/precheck.ts +86 -0
- package/src/commands/unlock.ts +96 -0
- package/src/config/defaults.ts +160 -0
- package/src/config/index.ts +22 -0
- package/src/config/loader.ts +121 -0
- package/src/config/merger.ts +147 -0
- package/src/config/path-security.ts +121 -0
- package/src/config/paths.ts +27 -0
- package/src/config/schema.ts +56 -0
- package/src/config/schemas.ts +286 -0
- package/src/config/types.ts +423 -0
- package/src/config/validate.ts +103 -0
- package/src/constitution/generator.ts +191 -0
- package/src/constitution/generators/aider.ts +41 -0
- package/src/constitution/generators/claude.ts +35 -0
- package/src/constitution/generators/cursor.ts +36 -0
- package/src/constitution/generators/opencode.ts +38 -0
- package/src/constitution/generators/types.ts +33 -0
- package/src/constitution/generators/windsurf.ts +36 -0
- package/src/constitution/index.ts +10 -0
- package/src/constitution/loader.ts +133 -0
- package/src/constitution/types.ts +31 -0
- package/src/context/auto-detect.ts +227 -0
- package/src/context/builder.ts +246 -0
- package/src/context/elements.ts +83 -0
- package/src/context/formatter.ts +107 -0
- package/src/context/generator.ts +129 -0
- package/src/context/generators/aider.ts +34 -0
- package/src/context/generators/claude.ts +28 -0
- package/src/context/generators/cursor.ts +28 -0
- package/src/context/generators/opencode.ts +30 -0
- package/src/context/generators/windsurf.ts +28 -0
- package/src/context/greenfield.ts +114 -0
- package/src/context/index.ts +33 -0
- package/src/context/injector.ts +279 -0
- package/src/context/test-scanner.ts +370 -0
- package/src/context/types.ts +98 -0
- package/src/errors.ts +67 -0
- package/src/execution/batching.ts +157 -0
- package/src/execution/crash-recovery.ts +373 -0
- package/src/execution/escalation/escalation.ts +44 -0
- package/src/execution/escalation/index.ts +13 -0
- package/src/execution/escalation/tier-escalation.ts +295 -0
- package/src/execution/escalation/tier-outcome.ts +158 -0
- package/src/execution/helpers.ts +38 -0
- package/src/execution/index.ts +45 -0
- package/src/execution/lifecycle/acceptance-loop.ts +272 -0
- package/src/execution/lifecycle/headless-formatter.ts +85 -0
- package/src/execution/lifecycle/index.ts +12 -0
- package/src/execution/lifecycle/parallel-lifecycle.ts +101 -0
- package/src/execution/lifecycle/precheck-runner.ts +140 -0
- package/src/execution/lifecycle/run-cleanup.ts +81 -0
- package/src/execution/lifecycle/run-completion.ts +129 -0
- package/src/execution/lifecycle/run-initialization.ts +141 -0
- package/src/execution/lifecycle/run-lifecycle.ts +312 -0
- package/src/execution/lifecycle/run-setup.ts +204 -0
- package/src/execution/lifecycle/story-hooks.ts +38 -0
- package/src/execution/lifecycle/story-size-prompts.ts +123 -0
- package/src/execution/lock.ts +115 -0
- package/src/execution/parallel-executor.ts +216 -0
- package/src/execution/parallel.ts +400 -0
- package/src/execution/pid-registry.ts +280 -0
- package/src/execution/pipeline-result-handler.ts +388 -0
- package/src/execution/post-verify-rectification.ts +188 -0
- package/src/execution/post-verify.ts +274 -0
- package/src/execution/progress.ts +25 -0
- package/src/execution/prompts.ts +127 -0
- package/src/execution/queue-handler.ts +109 -0
- package/src/execution/rectification.ts +13 -0
- package/src/execution/runner.ts +377 -0
- package/src/execution/sequential-executor.ts +388 -0
- package/src/execution/status-file.ts +264 -0
- package/src/execution/status-writer.ts +139 -0
- package/src/execution/story-context.ts +229 -0
- package/src/execution/test-output-parser.ts +14 -0
- package/src/execution/verification.ts +72 -0
- package/src/hooks/index.ts +2 -0
- package/src/hooks/runner.ts +286 -0
- package/src/hooks/types.ts +67 -0
- package/src/interaction/chain.ts +154 -0
- package/src/interaction/index.ts +60 -0
- package/src/interaction/init.ts +83 -0
- package/src/interaction/plugins/auto.ts +217 -0
- package/src/interaction/plugins/cli.ts +300 -0
- package/src/interaction/plugins/telegram.ts +384 -0
- package/src/interaction/plugins/webhook.ts +258 -0
- package/src/interaction/state.ts +171 -0
- package/src/interaction/triggers.ts +229 -0
- package/src/interaction/types.ts +163 -0
- package/src/logger/formatters.ts +84 -0
- package/src/logger/index.ts +16 -0
- package/src/logger/logger.ts +298 -0
- package/src/logger/types.ts +48 -0
- package/src/logging/formatter.ts +355 -0
- package/src/logging/index.ts +22 -0
- package/src/logging/types.ts +93 -0
- package/src/metrics/aggregator.ts +190 -0
- package/src/metrics/index.ts +14 -0
- package/src/metrics/tracker.ts +200 -0
- package/src/metrics/types.ts +109 -0
- package/src/optimizer/index.ts +62 -0
- package/src/optimizer/noop.optimizer.ts +24 -0
- package/src/optimizer/rule-based.optimizer.ts +248 -0
- package/src/optimizer/types.ts +53 -0
- package/src/pipeline/events.ts +130 -0
- package/src/pipeline/index.ts +19 -0
- package/src/pipeline/runner.ts +161 -0
- package/src/pipeline/stages/acceptance.ts +197 -0
- package/src/pipeline/stages/completion.ts +99 -0
- package/src/pipeline/stages/constitution.ts +63 -0
- package/src/pipeline/stages/context.ts +117 -0
- package/src/pipeline/stages/execution.ts +194 -0
- package/src/pipeline/stages/index.ts +62 -0
- package/src/pipeline/stages/optimizer.ts +74 -0
- package/src/pipeline/stages/prompt.ts +57 -0
- package/src/pipeline/stages/queue-check.ts +103 -0
- package/src/pipeline/stages/review.ts +181 -0
- package/src/pipeline/stages/routing.ts +81 -0
- package/src/pipeline/stages/verify.ts +100 -0
- package/src/pipeline/types.ts +167 -0
- package/src/plugins/index.ts +31 -0
- package/src/plugins/loader.ts +287 -0
- package/src/plugins/registry.ts +168 -0
- package/src/plugins/types.ts +327 -0
- package/src/plugins/validator.ts +352 -0
- package/src/prd/index.ts +172 -0
- package/src/prd/types.ts +202 -0
- package/src/precheck/checks-blockers.ts +391 -0
- package/src/precheck/checks-warnings.ts +142 -0
- package/src/precheck/checks.ts +30 -0
- package/src/precheck/index.ts +247 -0
- package/src/precheck/story-size-gate.ts +144 -0
- package/src/precheck/types.ts +31 -0
- package/src/queue/index.ts +2 -0
- package/src/queue/manager.ts +254 -0
- package/src/queue/types.ts +54 -0
- package/src/review/index.ts +8 -0
- package/src/review/runner.ts +172 -0
- package/src/review/types.ts +66 -0
- package/src/routing/builder.ts +81 -0
- package/src/routing/chain.ts +74 -0
- package/src/routing/index.ts +16 -0
- package/src/routing/loader.ts +58 -0
- package/src/routing/router.ts +303 -0
- package/src/routing/strategies/adaptive.ts +215 -0
- package/src/routing/strategies/index.ts +8 -0
- package/src/routing/strategies/keyword.ts +163 -0
- package/src/routing/strategies/llm-prompts.ts +209 -0
- package/src/routing/strategies/llm.ts +235 -0
- package/src/routing/strategies/manual.ts +50 -0
- package/src/routing/strategy.ts +99 -0
- package/src/tdd/cleanup.ts +111 -0
- package/src/tdd/index.ts +23 -0
- package/src/tdd/isolation.ts +123 -0
- package/src/tdd/orchestrator.ts +383 -0
- package/src/tdd/prompts.ts +270 -0
- package/src/tdd/rectification-gate.ts +183 -0
- package/src/tdd/session-runner.ts +179 -0
- package/src/tdd/types.ts +81 -0
- package/src/tdd/verdict.ts +271 -0
- package/src/tui/App.tsx +265 -0
- package/src/tui/components/AgentPanel.tsx +75 -0
- package/src/tui/components/CostOverlay.tsx +118 -0
- package/src/tui/components/HelpOverlay.tsx +107 -0
- package/src/tui/components/StatusBar.tsx +63 -0
- package/src/tui/components/StoriesPanel.tsx +177 -0
- package/src/tui/hooks/useKeyboard.ts +142 -0
- package/src/tui/hooks/useLayout.ts +137 -0
- package/src/tui/hooks/usePipelineEvents.ts +183 -0
- package/src/tui/hooks/usePty.ts +194 -0
- package/src/tui/index.tsx +38 -0
- package/src/tui/types.ts +76 -0
- package/src/utils/git.ts +83 -0
- package/src/utils/queue-writer.ts +54 -0
- package/src/verification/executor.ts +235 -0
- package/src/verification/gate.ts +207 -0
- package/src/verification/index.ts +12 -0
- package/src/verification/parser.ts +230 -0
- package/src/verification/rectification.ts +108 -0
- package/src/verification/types.ts +113 -0
- package/src/worktree/dispatcher.ts +65 -0
- package/src/worktree/index.ts +2 -0
- package/src/worktree/manager.ts +187 -0
- package/src/worktree/merge.ts +301 -0
- package/src/worktree/types.ts +4 -0
- package/test/TEST_COVERAGE_US001.md +217 -0
- package/test/TEST_COVERAGE_US003.md +84 -0
- package/test/TEST_COVERAGE_US005.md +86 -0
- package/test/US-002-orchestrator.test.ts +246 -0
- package/test/acceptance/cm-003-default-view.test.ts +194 -0
- package/test/execution/pid-registry.test.ts +240 -0
- package/test/execution/post-verify.test.ts +224 -0
- package/test/helpers/timeout.ts +42 -0
- package/test/integration/US-002-TEST-SUMMARY.md +107 -0
- package/test/integration/US-003-TEST-SUMMARY.md +149 -0
- package/test/integration/US-004-TEST-SUMMARY.md +106 -0
- package/test/integration/US-005-TEST-SUMMARY.md +138 -0
- package/test/integration/US-007-TEST-SUMMARY.md +100 -0
- package/test/integration/agent-validation.test.ts +439 -0
- package/test/integration/analyze-integration.test.ts +261 -0
- package/test/integration/analyze-scanner.test.ts +131 -0
- package/test/integration/cli-config-default-edge-cases.test.ts +222 -0
- package/test/integration/cli-config-default-view.test.ts +229 -0
- package/test/integration/cli-config-diff.test.ts +460 -0
- package/test/integration/cli-config.test.ts +736 -0
- package/test/integration/cli-diagnose.test.ts +592 -0
- package/test/integration/cli-logs.test.ts +314 -0
- package/test/integration/cli-plugins.test.ts +678 -0
- package/test/integration/cli-precheck.test.ts +371 -0
- package/test/integration/cli-run-headless.test.ts +173 -0
- package/test/integration/cli.test.ts +75 -0
- package/test/integration/config/merger.test.ts +465 -0
- package/test/integration/config/paths.test.ts +51 -0
- package/test/integration/config-loader.test.ts +265 -0
- package/test/integration/config.test.ts +444 -0
- package/test/integration/context-integration.test.ts +702 -0
- package/test/integration/context-provider-injection.test.ts +506 -0
- package/test/integration/context-verification-integration.test.ts +295 -0
- package/test/integration/e2e.test.ts +896 -0
- package/test/integration/execution.test.ts +625 -0
- package/test/integration/helpers.test.ts +295 -0
- package/test/integration/hooks.test.ts +361 -0
- package/test/integration/interaction-chain-pipeline.test.ts +464 -0
- package/test/integration/isolation.test.ts +143 -0
- package/test/integration/logger.test.ts +461 -0
- package/test/integration/parallel.test.ts +250 -0
- package/test/integration/path-security.test.ts +173 -0
- package/test/integration/pipeline-acceptance.test.ts +302 -0
- package/test/integration/pipeline-events.test.ts +475 -0
- package/test/integration/pipeline.test.ts +658 -0
- package/test/integration/plan.test.ts +157 -0
- package/test/integration/plugin-routing.test.ts +921 -0
- package/test/integration/plugins/config-integration.test.ts +172 -0
- package/test/integration/plugins/config-resolution.test.ts +522 -0
- package/test/integration/plugins/loader.test.ts +641 -0
- package/test/integration/plugins/registry.test.ts +746 -0
- package/test/integration/plugins/validator.test.ts +563 -0
- package/test/integration/prd-pause.test.ts +205 -0
- package/test/integration/prd-resolvers.test.ts +185 -0
- package/test/integration/precheck-integration.test.ts +468 -0
- package/test/integration/precheck.test.ts +805 -0
- package/test/integration/progress.test.ts +34 -0
- package/test/integration/rectification-flow.test.ts +512 -0
- package/test/integration/reporter-lifecycle.test.ts +860 -0
- package/test/integration/review-config-commands.test.ts +319 -0
- package/test/integration/review-config-schema.test.ts +116 -0
- package/test/integration/review-plugin-integration.test.ts +722 -0
- package/test/integration/review.test.ts +149 -0
- package/test/integration/routing-stage-bug-021.test.ts +274 -0
- package/test/integration/routing-stage-greenfield.test.ts +286 -0
- package/test/integration/runner-config-plugins.test.ts +461 -0
- package/test/integration/runner-fixes.test.ts +399 -0
- package/test/integration/runner-plugin-integration.test.ts +543 -0
- package/test/integration/runner.test.ts +1679 -0
- package/test/integration/s5-greenfield-fallback.test.ts +297 -0
- package/test/integration/status-file-integration.test.ts +325 -0
- package/test/integration/status-file.test.ts +379 -0
- package/test/integration/status-writer.test.ts +345 -0
- package/test/integration/story-id-in-events.test.ts +273 -0
- package/test/integration/tdd-cleanup.test.ts +246 -0
- package/test/integration/tdd-orchestrator.test.ts +1762 -0
- package/test/integration/test-scanner.test.ts +403 -0
- package/test/integration/verification-asset-check.test.ts +142 -0
- package/test/integration/verify-stage.test.ts +275 -0
- package/test/integration/worktree/manager.test.ts +218 -0
- package/test/integration/worktree/merge.test.ts +341 -0
- package/test/manual/logging-formatter-demo.ts +158 -0
- package/test/ui/tui-agent-panel.test.tsx +99 -0
- package/test/ui/tui-controls.test.ts +334 -0
- package/test/ui/tui-cost-and-pty.test.ts +189 -0
- package/test/ui/tui-layout.test.ts +378 -0
- package/test/ui/tui-pty-integration.test.tsx +159 -0
- package/test/ui/tui-stories.test.ts +332 -0
- package/test/unit/acceptance.test.ts +186 -0
- package/test/unit/agent-stderr-capture.test.ts +146 -0
- package/test/unit/analyze-classifier.test.ts +215 -0
- package/test/unit/analyze.test.ts +224 -0
- package/test/unit/auto-detect.test.ts +249 -0
- package/test/unit/cli-status.test.ts +417 -0
- package/test/unit/commands/common.test.ts +320 -0
- package/test/unit/commands/logs.test.ts +416 -0
- package/test/unit/commands/unlock.test.ts +319 -0
- package/test/unit/constitution-generators.test.ts +160 -0
- package/test/unit/constitution.test.ts +209 -0
- package/test/unit/context.test.ts +1722 -0
- package/test/unit/cost.test.ts +231 -0
- package/test/unit/crash-recovery.test.ts +308 -0
- package/test/unit/escalation.test.ts +126 -0
- package/test/unit/execution-logging-stderr.test.ts +156 -0
- package/test/unit/execution-stage.test.ts +122 -0
- package/test/unit/fix-generator.test.ts +275 -0
- package/test/unit/formatters.test.ts +469 -0
- package/test/unit/greenfield.test.ts +179 -0
- package/test/unit/helpers.test.ts +317 -0
- package/test/unit/interaction/human-review-trigger.test.ts +164 -0
- package/test/unit/interaction-network-failures.test.ts +389 -0
- package/test/unit/interaction-plugins.test.ts +164 -0
- package/test/unit/isolation.test.ts +134 -0
- package/test/unit/logging/formatter.test.ts +455 -0
- package/test/unit/merge.test.ts +268 -0
- package/test/unit/metrics.test.ts +276 -0
- package/test/unit/optimizer/noop.optimizer.test.ts +125 -0
- package/test/unit/optimizer/rule-based.optimizer.test.ts +358 -0
- package/test/unit/prd-auto-default.test.ts +290 -0
- package/test/unit/prd-failure-category.test.ts +176 -0
- package/test/unit/prd-get-next-story.test.ts +186 -0
- package/test/unit/precheck-checks.test.ts +840 -0
- package/test/unit/precheck-story-size-gate.test.ts +287 -0
- package/test/unit/precheck-types.test.ts +142 -0
- package/test/unit/prompts.test.ts +475 -0
- package/test/unit/queue.test.ts +237 -0
- package/test/unit/rectification.test.ts +284 -0
- package/test/unit/registry.test.ts +287 -0
- package/test/unit/routing.test.ts +937 -0
- package/test/unit/run-lifecycle.test.ts +140 -0
- package/test/unit/storyid-events.test.ts +224 -0
- package/test/unit/tdd-verdict.test.ts +492 -0
- package/test/unit/test-output-parser.test.ts +377 -0
- package/test/unit/verdict.test.ts +324 -0
- package/test/unit/worktree-manager.test.ts +158 -0
- package/tsconfig.json +27 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Fix Plan: Quick Wins Batch (PERF-1, TYPE-2, ENH-4, ENH-5)
|
|
2
|
+
**Date:** 2026-02-17
|
|
3
|
+
**Branch:** master (local commits only)
|
|
4
|
+
|
|
5
|
+
## Phase 1: PERF-1 — Optimize Batch Story Selection
|
|
6
|
+
|
|
7
|
+
**File:** `src/execution/batching.ts`, `src/execution/helpers.ts`
|
|
8
|
+
**Problem:** `groupStoriesIntoBatches()` is called with already-filtered ready stories, but inside the main run loop, batch candidate re-checking is O(n²).
|
|
9
|
+
**Fix:**
|
|
10
|
+
1. In `src/execution/helpers.ts`, add `getReadyStoriesPreGrouped(prd: PRD): { simple: UserStory[], nonSimple: UserStory[] }` that partitions ready stories once.
|
|
11
|
+
2. In `src/execution/batching.ts`, the current `groupStoriesIntoBatches()` is already O(n) — it iterates once. The real PERF-1 issue is in runner.ts where batch candidates are re-checked every iteration. Add a `precomputeBatchPlan(stories: UserStory[], maxBatchSize?: number): StoryBatch[]` that computes the full batch plan once upfront, so the runner just pops the next batch.
|
|
12
|
+
3. In runner.ts, call `precomputeBatchPlan()` once after PRD load (and after prdDirty reload), iterate through batches instead of re-grouping each iteration.
|
|
13
|
+
|
|
14
|
+
**Run:** `bun test`
|
|
15
|
+
**Commit:** `perf(batching): precompute batch plan to eliminate O(n²) re-checking`
|
|
16
|
+
|
|
17
|
+
## Phase 2: TYPE-2 — QueueCommand Discriminated Union
|
|
18
|
+
|
|
19
|
+
**Files:** `src/queue/types.ts`, `src/queue/manager.ts`, `src/execution/runner.ts`, `src/execution/queue-handler.ts`
|
|
20
|
+
**Problem:** `QueueCommand` is `"PAUSE" | "ABORT" | { type: "SKIP"; storyId: string }` — mixed string/object, requires `typeof cmd === "object"` checks.
|
|
21
|
+
**Fix:**
|
|
22
|
+
1. Change `QueueCommand` to discriminated union:
|
|
23
|
+
```ts
|
|
24
|
+
export type QueueCommand =
|
|
25
|
+
| { type: "PAUSE" }
|
|
26
|
+
| { type: "ABORT" }
|
|
27
|
+
| { type: "SKIP"; storyId: string };
|
|
28
|
+
```
|
|
29
|
+
2. Update `parseQueueFile()` in `src/queue/manager.ts`: push `{ type: "PAUSE" }` instead of `"PAUSE"`.
|
|
30
|
+
3. Update all consumers in `src/execution/runner.ts` and `src/execution/queue-handler.ts`: change `cmd === "PAUSE"` to `cmd.type === "PAUSE"`, remove `typeof cmd === "object"` checks.
|
|
31
|
+
4. Update tests in `test/queue.test.ts` and `test/runner.test.ts`.
|
|
32
|
+
|
|
33
|
+
**Run:** `bun test`
|
|
34
|
+
**Commit:** `refactor(queue): convert QueueCommand to discriminated union`
|
|
35
|
+
|
|
36
|
+
## Phase 3: ENH-4 — Progress Display + ENH-5 — TDD Dry-Run
|
|
37
|
+
|
|
38
|
+
**Files:** `src/execution/runner.ts`, `src/tdd/orchestrator.ts`
|
|
39
|
+
**ENH-4 — Progress display:**
|
|
40
|
+
1. In runner.ts, after each story/batch completes, print a progress summary:
|
|
41
|
+
```
|
|
42
|
+
📊 Progress: 5/12 stories | ✅ 4 passed | ❌ 1 failed | 💰 $0.45/$5.00 | ⏱️ ~8 min remaining
|
|
43
|
+
```
|
|
44
|
+
2. Add helper `formatProgress(counts, totalCost, costLimit, elapsed, totalStories): string` in `src/execution/helpers.ts`.
|
|
45
|
+
3. Calculate ETA from average story duration × remaining stories.
|
|
46
|
+
|
|
47
|
+
**ENH-5 — TDD dry-run:**
|
|
48
|
+
1. Add `dryRun?: boolean` to TDD orchestrator options.
|
|
49
|
+
2. When `dryRun === true`, log what would happen without spawning agents:
|
|
50
|
+
```
|
|
51
|
+
[DRY RUN] Would run 3-session TDD for US-005
|
|
52
|
+
Session 1: test-writer (model: haiku)
|
|
53
|
+
Session 2: implementer (model: haiku)
|
|
54
|
+
Session 3: verifier (model: haiku)
|
|
55
|
+
```
|
|
56
|
+
3. Return success with zero cost.
|
|
57
|
+
4. Wire `--dry-run` flag from CLI through to runner and TDD orchestrator.
|
|
58
|
+
|
|
59
|
+
**Run:** `bun test`
|
|
60
|
+
**Commit:** `feat: add progress display and TDD dry-run mode`
|
|
61
|
+
|
|
62
|
+
## Test Strategy
|
|
63
|
+
- Mode: test-after
|
|
64
|
+
- Phase 1: update batching tests for precomputeBatchPlan
|
|
65
|
+
- Phase 2: update queue + runner tests for new discriminated union
|
|
66
|
+
- Phase 3: add test for formatProgress helper and dry-run path
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Fix Plan: STYLE-1 — Split runner.ts (901 LOC) into Focused Modules
|
|
2
|
+
**Date:** 2026-02-17
|
|
3
|
+
**Branch:** master (local commits only)
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Split `src/execution/runner.ts` (901 LOC) into 5 focused modules under `src/execution/`. Preserve all exports via barrel `index.ts`. No logic changes — pure file reorganization.
|
|
8
|
+
|
|
9
|
+
## Target Structure
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
src/execution/
|
|
13
|
+
runner.ts → Main run() loop only (~300 LOC)
|
|
14
|
+
prompts.ts → buildSingleSessionPrompt(), buildBatchPrompt() (~80 LOC)
|
|
15
|
+
batching.ts → groupStoriesIntoBatches(), StoryBatch type (~70 LOC)
|
|
16
|
+
escalation.ts → escalateTier() (~30 LOC)
|
|
17
|
+
queue-handler.ts → readQueueFile(), clearQueueFile() (~60 LOC)
|
|
18
|
+
helpers.ts → hookCtx(), maybeGetContext(), buildStoryContext(), getAllReadyStories(), acquireLock(), releaseLock(), ExecutionResult type (~200 LOC)
|
|
19
|
+
progress.ts → (already exists, unchanged)
|
|
20
|
+
index.ts → Updated barrel exports
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Phase 1: Extract prompts.ts and batching.ts
|
|
24
|
+
|
|
25
|
+
**Extract from runner.ts:**
|
|
26
|
+
1. `buildSingleSessionPrompt()` (lines ~62-90) → `src/execution/prompts.ts`
|
|
27
|
+
2. `buildBatchPrompt()` (lines ~92-130) → `src/execution/prompts.ts`
|
|
28
|
+
3. `StoryBatch` interface (line ~132) → `src/execution/batching.ts`
|
|
29
|
+
4. `groupStoriesIntoBatches()` (lines ~141-187) → `src/execution/batching.ts`
|
|
30
|
+
|
|
31
|
+
**Update imports in runner.ts** to import from new files.
|
|
32
|
+
**Update `src/execution/index.ts`** to re-export from new files.
|
|
33
|
+
|
|
34
|
+
**Run:** `bun test`
|
|
35
|
+
**Commit:** `refactor(execution): extract prompts and batching modules from runner`
|
|
36
|
+
|
|
37
|
+
## Phase 2: Extract escalation.ts, queue-handler.ts, and helpers.ts
|
|
38
|
+
|
|
39
|
+
**Extract from runner.ts:**
|
|
40
|
+
1. `escalateTier()` (lines ~220-242) → `src/execution/escalation.ts`
|
|
41
|
+
2. `readQueueFile()` (lines ~283-317) → `src/execution/queue-handler.ts`
|
|
42
|
+
3. `clearQueueFile()` (lines ~319-330) → `src/execution/queue-handler.ts`
|
|
43
|
+
4. `hookCtx()` (lines ~244-254) → `src/execution/helpers.ts`
|
|
44
|
+
5. `maybeGetContext()` (lines ~256-281) → `src/execution/helpers.ts`
|
|
45
|
+
6. `buildStoryContext()` (lines ~189-218) → `src/execution/helpers.ts`
|
|
46
|
+
7. `getAllReadyStories()` (lines ~340-358) → `src/execution/helpers.ts`
|
|
47
|
+
8. `acquireLock()` / `releaseLock()` (lines ~360-410) → `src/execution/helpers.ts`
|
|
48
|
+
9. `ExecutionResult` interface (line ~333) → `src/execution/helpers.ts`
|
|
49
|
+
|
|
50
|
+
**Update imports in runner.ts** to import from new files.
|
|
51
|
+
**Update `src/execution/index.ts`** to re-export `escalateTier` and `StoryBatch`.
|
|
52
|
+
|
|
53
|
+
**Critical:** Tests import directly from `../src/execution/runner`:
|
|
54
|
+
- `test/routing.test.ts` imports `escalateTier` from runner
|
|
55
|
+
- `test/runner.test.ts` imports `buildBatchPrompt`, `groupStoriesIntoBatches`, `escalateTier`, `StoryBatch` from runner
|
|
56
|
+
- `test/runner-fixes.test.ts` imports `groupStoriesIntoBatches` from runner
|
|
57
|
+
|
|
58
|
+
These must be updated to import from the new module paths OR we re-export from runner.ts for backward compat (prefer re-export for minimal test changes).
|
|
59
|
+
|
|
60
|
+
**Strategy:** Re-export moved functions from runner.ts so existing test imports don't break:
|
|
61
|
+
```ts
|
|
62
|
+
// runner.ts — re-exports for backward compatibility
|
|
63
|
+
export { buildBatchPrompt } from './prompts';
|
|
64
|
+
export { groupStoriesIntoBatches, type StoryBatch } from './batching';
|
|
65
|
+
export { escalateTier } from './escalation';
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Run:** `bun test`
|
|
69
|
+
**Commit:** `refactor(execution): extract escalation, queue-handler, and helpers from runner`
|
|
70
|
+
|
|
71
|
+
## Test Strategy
|
|
72
|
+
- Mode: test-after
|
|
73
|
+
- No new tests — all 231 existing tests must pass unchanged
|
|
74
|
+
- Re-export pattern ensures test imports remain valid
|
|
75
|
+
- Verify with `bun test && bun run typecheck`
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# v0.3 Implementation Plan
|
|
2
|
+
**Date:** 2026-02-17
|
|
3
|
+
**Branch:** master
|
|
4
|
+
|
|
5
|
+
## Phase 1: Constitution System (smallest, unblocks Phase 2-3)
|
|
6
|
+
### 1a: Constitution loader
|
|
7
|
+
**File:** `src/constitution/index.ts` (NEW)
|
|
8
|
+
- Load `constitution.md` from project dir
|
|
9
|
+
- Token counting/truncation with warning
|
|
10
|
+
- Config integration (`constitution.enabled`, `constitution.path`, `constitution.maxTokens`)
|
|
11
|
+
|
|
12
|
+
### 1b: Inject into agent prompts
|
|
13
|
+
**File:** `src/execution/prompts.ts`
|
|
14
|
+
- Add constitution content at priority 95 in prompt assembly
|
|
15
|
+
- Truncation warning if exceeds maxTokens
|
|
16
|
+
|
|
17
|
+
### 1c: `ngent init` generates starter constitution
|
|
18
|
+
**File:** `src/cli/init.ts`
|
|
19
|
+
- Add constitution.md template generation
|
|
20
|
+
|
|
21
|
+
### Tests
|
|
22
|
+
- Constitution loading, truncation, missing file handling
|
|
23
|
+
- Prompt injection with/without constitution
|
|
24
|
+
- Init creates constitution.md
|
|
25
|
+
|
|
26
|
+
**Commit:** `feat(constitution): add constitution system with prompt injection`
|
|
27
|
+
|
|
28
|
+
## Phase 2: LLM-Enhanced Analyze
|
|
29
|
+
### 2a: Codebase scanner
|
|
30
|
+
**File:** `src/analyze/scanner.ts` (NEW)
|
|
31
|
+
- File tree generation (src/, max depth 3)
|
|
32
|
+
- Package.json dependency extraction
|
|
33
|
+
- Existing test pattern detection
|
|
34
|
+
|
|
35
|
+
### 2b: LLM classifier
|
|
36
|
+
**File:** `src/analyze/classifier.ts` (NEW)
|
|
37
|
+
- Single LLM call with structured JSON output
|
|
38
|
+
- Parse and validate response
|
|
39
|
+
- Graceful fallback to keyword matching on failure
|
|
40
|
+
|
|
41
|
+
### 2c: Integration with analyze command
|
|
42
|
+
**File:** `src/cli/analyze.ts` or existing analyze path
|
|
43
|
+
- Config: `analyze.llmEnhanced`, `analyze.classifierModel`, `analyze.fallbackToKeywords`
|
|
44
|
+
- Merge LLM output into prd.json (relevantFiles, reasoning, risks)
|
|
45
|
+
|
|
46
|
+
### Tests
|
|
47
|
+
- Scanner output format
|
|
48
|
+
- Classifier prompt construction and response parsing
|
|
49
|
+
- Fallback behavior on LLM failure
|
|
50
|
+
- Integration with existing analyze flow
|
|
51
|
+
|
|
52
|
+
**Commit:** `feat(analyze): add LLM-enhanced story classification`
|
|
53
|
+
|
|
54
|
+
## Phase 3: Review Phase
|
|
55
|
+
### 3a: Review runner
|
|
56
|
+
**File:** `src/review/index.ts` (NEW)
|
|
57
|
+
- Run configurable checks (typecheck, lint, test)
|
|
58
|
+
- Custom commands per check
|
|
59
|
+
- Collect pass/fail results
|
|
60
|
+
|
|
61
|
+
### 3b: Integration with execution
|
|
62
|
+
**File:** `src/execution/runner.ts`
|
|
63
|
+
- After story passes → run review phase
|
|
64
|
+
- Mark story as failed with review reason if any check fails
|
|
65
|
+
- Log results to progress.txt
|
|
66
|
+
|
|
67
|
+
### Tests
|
|
68
|
+
- Review runner with passing/failing checks
|
|
69
|
+
- Config-driven check selection
|
|
70
|
+
- Integration with story completion flow
|
|
71
|
+
|
|
72
|
+
**Commit:** `feat(review): add post-implementation review phase`
|
|
73
|
+
|
|
74
|
+
## Test Strategy
|
|
75
|
+
- Mode: test-after
|
|
76
|
+
- All new modules get unit tests
|
|
77
|
+
- Run `bun test && bun run typecheck` after each phase
|
|
78
|
+
|
|
79
|
+
## Version
|
|
80
|
+
- Bump to 0.3.0 after all phases complete
|