@nathapp/nax 0.28.0 → 0.29.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 +13 -2
- package/dist/nax.js +72691 -0
- package/package.json +12 -4
- 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/prompts/sections/role-task.ts +4 -2
- 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/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/docs/releases/v0.15.3.md
DELETED
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
# nax v0.15.3 Release Notes
|
|
2
|
-
|
|
3
|
-
**Release Date**: 2026-02-28
|
|
4
|
-
**Type**: Minor Feature Release
|
|
5
|
-
|
|
6
|
-
## Overview
|
|
7
|
-
|
|
8
|
-
This release ships two major features:
|
|
9
|
-
1. **US-010**: Constitution-to-Agent-Config Generator — Auto-generate agent-specific config files from `nax/constitution.md`
|
|
10
|
-
2. **US-008**: Interaction System Wiring — Integrate the interaction system into the runner loop
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## New Features
|
|
15
|
-
|
|
16
|
-
### US-010: Constitution-to-Agent-Config Generator
|
|
17
|
-
|
|
18
|
-
The `nax/constitution.md` file is now the **single source of truth** for project coding standards. nax automatically generates agent-specific config files from it.
|
|
19
|
-
|
|
20
|
-
**What's New:**
|
|
21
|
-
- New `nax constitution generate` CLI command
|
|
22
|
-
- Support for 5 agent formats:
|
|
23
|
-
- Claude Code (`CLAUDE.md`)
|
|
24
|
-
- OpenCode/Codex (`AGENTS.md`)
|
|
25
|
-
- Cursor (`.cursorrules`)
|
|
26
|
-
- Windsurf (`.windsurfrules`)
|
|
27
|
-
- Aider (`.aider.conf.yml`)
|
|
28
|
-
- Dry-run mode for testing generation without writing files
|
|
29
|
-
- Automatic file freshness checking
|
|
30
|
-
|
|
31
|
-
**Usage:**
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
# Generate config files for all agents
|
|
35
|
-
nax constitution generate
|
|
36
|
-
|
|
37
|
-
# Generate for specific agent
|
|
38
|
-
nax constitution generate --agent claude
|
|
39
|
-
|
|
40
|
-
# Dry-run mode (preview without writing)
|
|
41
|
-
nax constitution generate --dry-run
|
|
42
|
-
|
|
43
|
-
# Custom paths
|
|
44
|
-
nax constitution generate --constitution custom/path.md --output dist/
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
**Implementation Details:**
|
|
48
|
-
- **Generators**: `src/constitution/generators/` — One generator per agent format
|
|
49
|
-
- **Orchestrator**: `src/constitution/generator.ts` — Coordinates all generators
|
|
50
|
-
- **CLI Command**: `src/cli/constitution.ts` — User-facing command
|
|
51
|
-
- **Tests**: `test/unit/constitution-generators.test.ts` — 17 passing tests
|
|
52
|
-
|
|
53
|
-
**Files Modified/Created:**
|
|
54
|
-
- `src/constitution/generators/types.ts` (new)
|
|
55
|
-
- `src/constitution/generators/claude.ts` (new)
|
|
56
|
-
- `src/constitution/generators/opencode.ts` (new)
|
|
57
|
-
- `src/constitution/generators/cursor.ts` (new)
|
|
58
|
-
- `src/constitution/generators/windsurf.ts` (new)
|
|
59
|
-
- `src/constitution/generators/aider.ts` (new)
|
|
60
|
-
- `src/constitution/generator.ts` (new, 191 lines)
|
|
61
|
-
- `src/cli/constitution.ts` (new, 109 lines)
|
|
62
|
-
- `bin/nax.ts` (modified to register command)
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
### US-008: Interaction System Wiring
|
|
67
|
-
|
|
68
|
-
The interaction system (v0.15.0) is now fully integrated into the runner loop.
|
|
69
|
-
|
|
70
|
-
**What's New:**
|
|
71
|
-
- Interaction chain initialized at runner startup
|
|
72
|
-
- Support for headless mode (skips interactions)
|
|
73
|
-
- Automatic cleanup of interaction plugins on shutdown
|
|
74
|
-
- Ready for trigger integration (security-review, cost-warning, pre-merge, max-retries, etc.)
|
|
75
|
-
|
|
76
|
-
**Implementation Details:**
|
|
77
|
-
- **Initialization**: `src/interaction/init.ts` — Creates interaction chain from config
|
|
78
|
-
- **Runner Integration**: `src/execution/lifecycle/run-setup.ts` — Initializes chain during setup
|
|
79
|
-
- **Cleanup**: `src/execution/lifecycle/run-cleanup.ts` — Destroys chain on shutdown
|
|
80
|
-
- **Runner Context**: `src/execution/runner.ts` — Passes chain through execution pipeline
|
|
81
|
-
|
|
82
|
-
**Files Modified:**
|
|
83
|
-
- `src/interaction/init.ts` (new, 83 lines)
|
|
84
|
-
- `src/interaction/index.ts` (exports `initInteractionChain`)
|
|
85
|
-
- `src/execution/lifecycle/run-setup.ts` (modified to initialize chain)
|
|
86
|
-
- `src/execution/lifecycle/run-cleanup.ts` (modified to destroy chain)
|
|
87
|
-
- `src/execution/runner.ts` (modified to extract and pass chain)
|
|
88
|
-
|
|
89
|
-
**Configuration:**
|
|
90
|
-
|
|
91
|
-
Interaction config in `nax/config.json`:
|
|
92
|
-
```json
|
|
93
|
-
{
|
|
94
|
-
"interaction": {
|
|
95
|
-
"plugin": "cli",
|
|
96
|
-
"defaults": {
|
|
97
|
-
"timeout": 600000,
|
|
98
|
-
"fallback": "escalate"
|
|
99
|
-
},
|
|
100
|
-
"triggers": {
|
|
101
|
-
"security-review": true,
|
|
102
|
-
"cost-warning": true,
|
|
103
|
-
"pre-merge": true,
|
|
104
|
-
"max-retries": true
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
When running `--headless`, all interactions are skipped (fallbacks applied immediately).
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
## Breaking Changes
|
|
115
|
-
|
|
116
|
-
None.
|
|
117
|
-
|
|
118
|
-
---
|
|
119
|
-
|
|
120
|
-
## Bug Fixes
|
|
121
|
-
|
|
122
|
-
None.
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
## Documentation
|
|
127
|
-
|
|
128
|
-
- Added `docs/releases/v0.15.3.md`
|
|
129
|
-
- Updated `docs/ROADMAP.md` — marked US-008 and US-010 as complete
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
## Testing
|
|
134
|
-
|
|
135
|
-
- **New Tests**: 17 constitution generator tests (all passing)
|
|
136
|
-
- **Test Coverage**: All generators tested with known input/output
|
|
137
|
-
- **Line Count Compliance**: All new files < 400 lines
|
|
138
|
-
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
## Migration Guide
|
|
142
|
-
|
|
143
|
-
### For Constitution Generator (US-010)
|
|
144
|
-
|
|
145
|
-
1. Ensure `nax/constitution.md` exists in your project
|
|
146
|
-
2. Run `nax constitution generate` to create agent config files
|
|
147
|
-
3. Commit generated files to version control
|
|
148
|
-
4. Optional: Add generation to CI pipeline
|
|
149
|
-
|
|
150
|
-
### For Interaction System (US-008)
|
|
151
|
-
|
|
152
|
-
1. No action required — system initializes automatically if configured
|
|
153
|
-
2. To enable interactions, add `interaction` section to `nax/config.json`
|
|
154
|
-
3. To disable interactions, omit `interaction` section or run with `--headless`
|
|
155
|
-
|
|
156
|
-
---
|
|
157
|
-
|
|
158
|
-
## What's Next
|
|
159
|
-
|
|
160
|
-
- **v0.15.4+**: Wire trigger checkpoints into pipeline stages
|
|
161
|
-
- Pre-flight security review
|
|
162
|
-
- Cost gates (warning + exceeded)
|
|
163
|
-
- Pre-merge approval
|
|
164
|
-
- Max retries handling
|
|
165
|
-
|
|
166
|
-
---
|
|
167
|
-
|
|
168
|
-
## Contributors
|
|
169
|
-
|
|
170
|
-
- Claude Opus 4.6 <noreply@anthropic.com>
|
|
171
|
-
|
|
172
|
-
---
|
|
173
|
-
|
|
174
|
-
## Install
|
|
175
|
-
|
|
176
|
-
```bash
|
|
177
|
-
# From NPM (when published)
|
|
178
|
-
npm install -g @nathapp/nax@0.15.3
|
|
179
|
-
|
|
180
|
-
# From source
|
|
181
|
-
git clone https://github.com/nathapp/nax.git
|
|
182
|
-
cd nax
|
|
183
|
-
git checkout v0.15.3
|
|
184
|
-
bun install
|
|
185
|
-
bun run build
|
|
186
|
-
npm install -g .
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
---
|
|
190
|
-
|
|
191
|
-
## Changelog
|
|
192
|
-
|
|
193
|
-
Full changelog: https://github.com/nathapp/nax/compare/v0.15.1...v0.15.3
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
# BUG-039 — Orphan Process Prevention
|
|
2
|
-
|
|
3
|
-
**Status:** Proposal
|
|
4
|
-
**Target:** v0.21.0
|
|
5
|
-
**Author:** Nax Dev
|
|
6
|
-
**Date:** 2026-03-06
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 1. Problem
|
|
11
|
-
|
|
12
|
-
When nax aborts a story (timeout, error, SIGTERM), several child processes are left running as orphans:
|
|
13
|
-
- `bun run lint` / `bun run typecheck` (review stage)
|
|
14
|
-
- `git diff`, `git log`, `git rev-parse` (smart runner, utils/git.ts)
|
|
15
|
-
- `claude` CLI (decompose — no timeout at all)
|
|
16
|
-
|
|
17
|
-
These processes accumulate across stories and survive after nax exits, consuming CPU/memory.
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## 2. Root Causes
|
|
22
|
-
|
|
23
|
-
| Location | Process | Issue | Severity |
|
|
24
|
-
|---|---|---|---|
|
|
25
|
-
| `review/runner.ts:runCheck()` | `lint`, `typecheck` | No timeout, no kill, not in PidRegistry | 🔴 Critical |
|
|
26
|
-
| `agents/claude.ts:decompose()` | `claude` CLI | No timeout set | 🔴 Critical |
|
|
27
|
-
| `utils/git.ts:captureGitRef()` | `git rev-parse` | No timeout | 🟡 Medium |
|
|
28
|
-
| `utils/git.ts:hasCommitsForStory()` | `git log` | No timeout | 🟡 Medium |
|
|
29
|
-
| `verification/smart-runner.ts` | `git diff` | No timeout, not killed on verify abort | 🟡 Medium |
|
|
30
|
-
| `agents/claude.ts:runOnce()` | `claude` CLI | SIGTERM only — no SIGKILL follow-up after grace period | 🟡 Medium |
|
|
31
|
-
| `agents/claude.ts:runOnce()` | `claude` CLI | If timeout throws, `pidRegistry.unregister()` skipped → PID leaks | 🟡 Medium |
|
|
32
|
-
| `routing/strategies/llm.ts` | `claude` CLI | Timeout kills proc but streams not drained → `proc.exited` may hang | 🟡 Medium |
|
|
33
|
-
| `verification/executor.ts:drainWithDeadline()` | internal | `setTimeout` in drain race never cleared | 🟢 Minor |
|
|
34
|
-
| `execution/pid-registry.ts:killPid()` | `kill` binary | Spawns `kill` subprocesses without timeout | 🟢 Minor |
|
|
35
|
-
|
|
36
|
-
**Already correct:** `executor.ts:executeWithTimeout()` — SIGTERM + grace + SIGKILL process group. `crash-recovery.ts` — `pidRegistry.killAll()` on all signals. `pid-registry.ts:cleanupStale()` — kills orphans at startup.
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
## 3. Proposed Fixes
|
|
41
|
-
|
|
42
|
-
### Fix 1 — Shared `gitWithTimeout()` helper
|
|
43
|
-
|
|
44
|
-
Replace all bare git spawns in `utils/git.ts` and `smart-runner.ts`:
|
|
45
|
-
|
|
46
|
-
```typescript
|
|
47
|
-
// src/utils/git.ts
|
|
48
|
-
const GIT_TIMEOUT_MS = 10_000;
|
|
49
|
-
|
|
50
|
-
async function gitWithTimeout(args: string[], workdir: string): Promise<{ stdout: string; exitCode: number }> {
|
|
51
|
-
const proc = Bun.spawn(["git", ...args], { cwd: workdir, stdout: "pipe", stderr: "pipe" });
|
|
52
|
-
const timerId = setTimeout(() => proc.kill("SIGKILL"), GIT_TIMEOUT_MS);
|
|
53
|
-
const exitCode = await proc.exited;
|
|
54
|
-
clearTimeout(timerId);
|
|
55
|
-
const stdout = await new Response(proc.stdout).text();
|
|
56
|
-
return { stdout, exitCode };
|
|
57
|
-
}
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
Apply to: `captureGitRef()`, `hasCommitsForStory()`, `getChangedSourceFiles()` in `smart-runner.ts`.
|
|
61
|
-
|
|
62
|
-
### Fix 2 — Review `runCheck()` timeout
|
|
63
|
-
|
|
64
|
-
Wrap each check spawn with SIGTERM+SIGKILL pattern. Config: `review.checkTimeoutSeconds` (default: 120).
|
|
65
|
-
|
|
66
|
-
### Fix 3 — `decompose()` timeout
|
|
67
|
-
|
|
68
|
-
Add `timeoutSeconds` to `DecomposeOptions` (default: 300). Apply same setTimeout → SIGTERM pattern as `runOnce()`.
|
|
69
|
-
|
|
70
|
-
### Fix 4 — `runOnce()` SIGKILL follow-up + `finally` unregister
|
|
71
|
-
|
|
72
|
-
```typescript
|
|
73
|
-
setTimeout(() => {
|
|
74
|
-
timedOut = true;
|
|
75
|
-
proc.kill("SIGTERM");
|
|
76
|
-
setTimeout(() => { try { proc.kill("SIGKILL"); } catch {} }, gracePeriodMs);
|
|
77
|
-
}, timeoutMs);
|
|
78
|
-
|
|
79
|
-
// Always unregister, even on exception:
|
|
80
|
-
try {
|
|
81
|
-
const exitCode = await proc.exited;
|
|
82
|
-
clearTimeout(timeoutId);
|
|
83
|
-
} finally {
|
|
84
|
-
await pidRegistry.unregister(processPid);
|
|
85
|
-
}
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
### Fix 5 — `llm.ts` stream drain on timeout
|
|
89
|
-
|
|
90
|
-
Cancel streams before killing to prevent `proc.exited` hang:
|
|
91
|
-
|
|
92
|
-
```typescript
|
|
93
|
-
} catch (err) {
|
|
94
|
-
clearTimeout(timeoutId);
|
|
95
|
-
proc.stdout.cancel().catch(() => {});
|
|
96
|
-
proc.stderr.cancel().catch(() => {});
|
|
97
|
-
proc.kill();
|
|
98
|
-
throw err;
|
|
99
|
-
}
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### Fix 6 — `drainWithDeadline()` timer cleanup
|
|
103
|
-
|
|
104
|
-
Store and clear the setTimeout handle after the race resolves.
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
## 4. Files Affected
|
|
109
|
-
|
|
110
|
-
| File | Change |
|
|
111
|
-
|---|---|
|
|
112
|
-
| `src/utils/git.ts` | Add `gitWithTimeout()` helper; use in all git spawns |
|
|
113
|
-
| `src/verification/smart-runner.ts` | Use `gitWithTimeout()` for `git diff` |
|
|
114
|
-
| `src/review/runner.ts` | Add timeout + SIGTERM/SIGKILL to `runCheck()` |
|
|
115
|
-
| `src/config/schemas.ts` | Add `review.checkTimeoutSeconds` (default: 120) |
|
|
116
|
-
| `src/config/types.ts` | Add `checkTimeoutSeconds` to `ReviewConfig` |
|
|
117
|
-
| `src/agents/claude.ts` | Fix `decompose()` timeout; `runOnce()` SIGKILL + finally |
|
|
118
|
-
| `src/agents/types.ts` | Add `timeoutSeconds` to `DecomposeOptions` |
|
|
119
|
-
| `src/routing/strategies/llm.ts` | Cancel streams before kill on timeout |
|
|
120
|
-
| `src/verification/executor.ts` | `clearTimeout` in `drainWithDeadline()` |
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
## 5. Test Plan
|
|
125
|
-
|
|
126
|
-
- `runCheck()` with hanging command → killed after `checkTimeoutSeconds`
|
|
127
|
-
- `decompose()` with hanging claude → times out, PID unregistered
|
|
128
|
-
- `runOnce()` timeout → SIGKILL after grace period; PID unregistered even on exception
|
|
129
|
-
- `gitWithTimeout()` → returns error after 10s (no hanging promise)
|
|
130
|
-
- `drainWithDeadline()` → no leaked setTimeout (verify with fake timers)
|
|
131
|
-
- `llm.ts` timeout → `proc.exited` resolves after kill (no hang)
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
# BUG-040 — Review Rectification Loop
|
|
2
|
-
|
|
3
|
-
**Status:** Proposal
|
|
4
|
-
**Target:** v0.21.0
|
|
5
|
-
**Author:** Nax Dev
|
|
6
|
-
**Date:** 2026-03-06
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 1. Problem
|
|
11
|
-
|
|
12
|
-
A story that fails lint or typecheck during the review stage is **permanently killed** — no retry, no agent fix, immediate escalation. This wastes an entire escalation slot on a trivial auto-fixable error.
|
|
13
|
-
|
|
14
|
-
**Example:** Agent implements story correctly. All tests pass (verify ✅). Review runs `biome check` → 3 lint errors. Review returns `{ action: "fail" }` → story marked failed → escalates to `balanced` → `balanced` agent re-implements from scratch → also gets lint errors → `powerful` tier used. All for a `biome --fix` that takes 2 seconds.
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## 2. Root Cause
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
review.ts:execute() → runReview() → { success: false }
|
|
22
|
-
→ return { action: "fail" } ← always "fail" for any review failure
|
|
23
|
-
|
|
24
|
-
pipeline-result-handler.ts
|
|
25
|
-
case "fail": markStoryFailed() ← permanent, no retry
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
The verify stage correctly returns `"escalate"` on test failure, enabling rectification. Review has no equivalent.
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## 3. Proposed Architecture
|
|
33
|
-
|
|
34
|
-
```
|
|
35
|
-
review.ts → runReview() fails
|
|
36
|
-
→ return { action: "review-rectify", output } ← NEW
|
|
37
|
-
|
|
38
|
-
pipeline-result-handler.ts
|
|
39
|
-
case "review-rectify":
|
|
40
|
-
→ runReviewRectification(story, reviewOutput, config, workdir)
|
|
41
|
-
→ agent: "Fix these lint/typecheck errors:\n<output>"
|
|
42
|
-
→ re-run review
|
|
43
|
-
→ pass? → "continue"
|
|
44
|
-
→ fail? → "escalate" (if attempts exhausted)
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## 4. Files Affected
|
|
50
|
-
|
|
51
|
-
| File | Change |
|
|
52
|
-
|---|---|
|
|
53
|
-
| `src/pipeline/stages/review.ts` | Return `{ action: "review-rectify", output }` instead of `"fail"` |
|
|
54
|
-
| `src/pipeline/types.ts` | Add `"review-rectify"` to `StageAction` union |
|
|
55
|
-
| `src/execution/pipeline-result-handler.ts` | Handle `"review-rectify"` → call `runReviewRectification()` |
|
|
56
|
-
| `src/execution/review-rectification.ts` | **New:** `runReviewRectification()` loop |
|
|
57
|
-
| `src/config/schemas.ts` | Add `review.maxRectificationAttempts` (default: 1) |
|
|
58
|
-
| `src/config/types.ts` | Add `maxRectificationAttempts` to `ReviewConfig` |
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
|
|
62
|
-
## 5. Config Changes
|
|
63
|
-
|
|
64
|
-
```jsonc
|
|
65
|
-
{
|
|
66
|
-
"review": {
|
|
67
|
-
"enabled": true,
|
|
68
|
-
"checks": ["typecheck", "lint"],
|
|
69
|
-
"maxRectificationAttempts": 1 // 0 = revert to old "fail" behavior
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
## 6. Test Plan
|
|
77
|
-
|
|
78
|
-
- Lint failure → `runReviewRectification()` called with lint output
|
|
79
|
-
- Rectification passes → story continues (not escalated)
|
|
80
|
-
- Rectification fails → story escalates (not permanently failed)
|
|
81
|
-
- `maxRectificationAttempts: 0` → old behavior (immediate escalate)
|
|
82
|
-
- Plugin reviewer rejection → still `"fail"` (not routed through rectification)
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
# BUG-041 — Cross-Story Test Isolation
|
|
2
|
-
|
|
3
|
-
**Status:** Won't Fix — superseded by FEAT-010 (baseRef tracking eliminates root cause)
|
|
4
|
-
**Target:** N/A
|
|
5
|
-
**Author:** Nax Dev
|
|
6
|
-
**Date:** 2026-03-06
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 1. Problem
|
|
11
|
-
|
|
12
|
-
**Scenario:**
|
|
13
|
-
1. Story A touches `src/parser.ts`. Verify runs `test/unit/parser.test.ts` → 2 tests fail. Story A escalates.
|
|
14
|
-
2. Story B touches `src/formatter.ts`. Smart runner also picks up `test/unit/parser.test.ts` (both changed since common base). Formatter tests pass, parser tests still fail (inherited from Story A).
|
|
15
|
-
3. Story B is marked failed — its implementation was correct. It escalates needlessly.
|
|
16
|
-
|
|
17
|
-
**Root cause:** Verify has no memory of which test failures pre-existed before a story's session. All failures are attributed to the current story.
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## 2. Root Cause
|
|
22
|
-
|
|
23
|
-
The verify stage runs tests and reports pass/fail with no concept of:
|
|
24
|
-
- Which tests were already failing before this story ran
|
|
25
|
-
- Whether a failure is "inherited" vs "introduced by this story"
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## 3. Proposed Solution
|
|
30
|
-
|
|
31
|
-
### 3.1 Baseline snapshot at story start
|
|
32
|
-
|
|
33
|
-
Before the agent session starts (same time as FEAT-010's `baseRef` capture), record which test files the smart runner would pick up for this story and which are already failing. Store as `story.inheritedFailures: string[]`.
|
|
34
|
-
|
|
35
|
-
### 3.2 Verify: filter inherited failures
|
|
36
|
-
|
|
37
|
-
After running tests and parsing `TestFailure[]`:
|
|
38
|
-
- If ALL failures are in `inheritedFailures` files → return `{ action: "continue" }` with warning: *"Failures are pre-existing — not attributed to this story"*
|
|
39
|
-
- If ANY failure is in a new file → escalate normally
|
|
40
|
-
|
|
41
|
-
### 3.3 Re-verify when source story resolves
|
|
42
|
-
|
|
43
|
-
When Story A eventually passes verify, clear its test files from downstream stories' `inheritedFailures` so they get re-evaluated on the next run.
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## 4. Data Model Changes
|
|
48
|
-
|
|
49
|
-
```typescript
|
|
50
|
-
// src/prd/types.ts
|
|
51
|
-
interface UserStory {
|
|
52
|
-
baseRef?: string; // from FEAT-010
|
|
53
|
-
inheritedFailures?: string[]; // NEW — test files already failing before this story
|
|
54
|
-
}
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## 5. Files Affected
|
|
60
|
-
|
|
61
|
-
| File | Change |
|
|
62
|
-
|---|---|
|
|
63
|
-
| `src/prd/types.ts` | Add `inheritedFailures?: string[]` to `UserStory` |
|
|
64
|
-
| `src/execution/sequential-executor.ts` | Capture `inheritedFailures` baseline before agent runs |
|
|
65
|
-
| `src/verification/smart-runner.ts` | Export `runBaselineCheck(testFiles, workdir)` helper |
|
|
66
|
-
| `src/pipeline/stages/verify.ts` | Filter inherited failures from escalation decision |
|
|
67
|
-
| `src/execution/lifecycle/run-regression.ts` | Clear inherited failures when source story passes |
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
## 6. Edge Cases
|
|
72
|
-
|
|
73
|
-
| Scenario | Handling |
|
|
74
|
-
|---|---|
|
|
75
|
-
| Baseline check times out | `inheritedFailures: []` — conservative, may incorrectly blame story but no false passes |
|
|
76
|
-
| Flaky inherited failure disappears | Story B's verify finds no inherited failures → correct attribution |
|
|
77
|
-
| ALL test files in `inheritedFailures` | Return `continue` with warning |
|
|
78
|
-
| First story in a run | No prior failures → `inheritedFailures: []` → normal behavior |
|
|
79
|
-
| Deferred regression gate | Runs after all stories pass — inherited failures expected to be resolved |
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
## 7. Test Plan
|
|
84
|
-
|
|
85
|
-
- Story B inherits Story A's failing test file → verify returns `continue` (not escalated)
|
|
86
|
-
- Story B introduces new failing test → escalated normally
|
|
87
|
-
- Story A passes → Story B's `inheritedFailures` cleared for next run
|
|
88
|
-
- Baseline check timeout → `inheritedFailures: []` → conservative
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
# BUG-042 — Verifier Test Failure Capture
|
|
2
|
-
|
|
3
|
-
**Status:** Proposal
|
|
4
|
-
**Target:** v0.21.0
|
|
5
|
-
**Author:** Nax Dev
|
|
6
|
-
**Date:** 2026-03-06
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 1. Problem
|
|
11
|
-
|
|
12
|
-
The deferred regression gate (`run-regression.ts`) calls `parseBunTestOutput()` → gets structured `TestFailure[]` (file, testName, error, stackTrace) → targeted rectification works well.
|
|
13
|
-
|
|
14
|
-
The per-story verify stage (`verify.ts`) does NOT call `parseBunTestOutput()` on failure → passes raw output string to rectification → agent receives a wall of text and must parse it mentally.
|
|
15
|
-
|
|
16
|
-
**Same failure, two different agent experiences:**
|
|
17
|
-
|
|
18
|
-
| Path | Agent gets | Quality |
|
|
19
|
-
|---|---|---|
|
|
20
|
-
| Deferred regression | Structured `TestFailure[]` | ✅ Precise context |
|
|
21
|
-
| Per-story verify | Raw output (last 20 lines) | ⚠️ Noisy, may miss root cause |
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## 2. Current vs Proposed Data Flow
|
|
26
|
-
|
|
27
|
-
**Current:**
|
|
28
|
-
```
|
|
29
|
-
verify.ts → runVerification() → { success: false, output: "...raw..." }
|
|
30
|
-
→ rectification: testOutput = raw string
|
|
31
|
-
→ priorFailures[].testFailures = undefined
|
|
32
|
-
→ agent prompt: wall of text
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
**Proposed:**
|
|
36
|
-
```
|
|
37
|
-
verify.ts → runVerification() → { success: false, output: "...raw..." }
|
|
38
|
-
→ parseBunTestOutput(output) → TestFailure[]
|
|
39
|
-
→ VerificationResult.failures = TestFailure[]
|
|
40
|
-
→ rectification: testOutput + structured failures
|
|
41
|
-
→ priorFailures[].testFailures = TestFailure[]
|
|
42
|
-
→ agent prompt: structured failure table
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## 3. Code Changes
|
|
48
|
-
|
|
49
|
-
**`src/verification/types.ts`** — add failures field:
|
|
50
|
-
```typescript
|
|
51
|
-
interface VerificationResult {
|
|
52
|
-
success: boolean;
|
|
53
|
-
output?: string;
|
|
54
|
-
status: "SUCCESS" | "TEST_FAILURE" | "TIMEOUT" | "ERROR";
|
|
55
|
-
passCount?: number;
|
|
56
|
-
failCount?: number;
|
|
57
|
-
failures?: TestFailure[]; // NEW
|
|
58
|
-
}
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
**`src/pipeline/stages/verify.ts`** — parse on failure:
|
|
62
|
-
```typescript
|
|
63
|
-
// Add to _verifyDeps:
|
|
64
|
-
export const _verifyDeps = {
|
|
65
|
-
regression,
|
|
66
|
-
parseBunTestOutput, // NEW — injectable for tests
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
// After runVerification() failure:
|
|
70
|
-
if (!result.success && result.output) {
|
|
71
|
-
result.failures = _verifyDeps.parseBunTestOutput(result.output).failures;
|
|
72
|
-
}
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
**Structured log** — replace last-20-lines with failure summary:
|
|
76
|
-
```typescript
|
|
77
|
-
// Current: logger.warn("verify", "Test failures", { output: last20lines });
|
|
78
|
-
// Proposed:
|
|
79
|
-
for (const f of (result.failures ?? []).slice(0, 5)) {
|
|
80
|
-
logger.warn("verify", `FAIL: ${f.testName}`, { file: f.file, error: f.error });
|
|
81
|
-
}
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
**`src/execution/post-verify-rectification.ts`** — populate `testFailures` in `StructuredFailure`:
|
|
85
|
-
```typescript
|
|
86
|
-
const structuredFailure: StructuredFailure = {
|
|
87
|
-
// ...existing fields
|
|
88
|
-
testFailures: result.failures?.map(f => ({
|
|
89
|
-
file: f.file ?? "",
|
|
90
|
-
testName: f.testName,
|
|
91
|
-
error: f.error,
|
|
92
|
-
stackTrace: f.stackTrace ?? [],
|
|
93
|
-
})),
|
|
94
|
-
};
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## 4. Files Affected
|
|
100
|
-
|
|
101
|
-
| File | Change |
|
|
102
|
-
|---|---|
|
|
103
|
-
| `src/verification/types.ts` | Add `failures?: TestFailure[]` to `VerificationResult` |
|
|
104
|
-
| `src/pipeline/stages/verify.ts` | Call `parseBunTestOutput()` on failure; add to `_verifyDeps` |
|
|
105
|
-
| `src/execution/post-verify-rectification.ts` | Populate `testFailures` from `result.failures` |
|
|
106
|
-
| `src/execution/verification.ts` | Pass `failures` through if available |
|
|
107
|
-
|
|
108
|
-
---
|
|
109
|
-
|
|
110
|
-
## 5. Test Plan
|
|
111
|
-
|
|
112
|
-
- `verify.ts` test failure → `result.failures` populated with `TestFailure[]`
|
|
113
|
-
- `result.failures` forwarded to rectification loop and `priorFailures`
|
|
114
|
-
- Agent prompt includes structured failure table (via existing priorFailures formatter)
|
|
115
|
-
- `parseBunTestOutput` in `_verifyDeps` is mockable
|
|
116
|
-
- Empty/no output → `result.failures = []` (no crash)
|
|
117
|
-
- Timeout → `result.failures` not set (timeout ≠ test failure)
|