@nathapp/nax 0.50.3 → 0.51.2
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 +30 -0
- package/README.md +177 -104
- package/dist/nax.js +417 -213
- package/package.json +1 -3
- package/bin/nax.ts +0 -1195
- package/src/acceptance/fix-generator.ts +0 -322
- package/src/acceptance/generator.ts +0 -415
- package/src/acceptance/index.ts +0 -42
- package/src/acceptance/refinement.ts +0 -224
- package/src/acceptance/templates/cli.ts +0 -47
- package/src/acceptance/templates/component.ts +0 -78
- package/src/acceptance/templates/e2e.ts +0 -43
- package/src/acceptance/templates/index.ts +0 -21
- package/src/acceptance/templates/snapshot.ts +0 -50
- package/src/acceptance/templates/unit.ts +0 -48
- package/src/acceptance/types.ts +0 -138
- package/src/agents/acp/adapter.ts +0 -888
- package/src/agents/acp/cost.ts +0 -9
- package/src/agents/acp/index.ts +0 -7
- package/src/agents/acp/interaction-bridge.ts +0 -126
- package/src/agents/acp/parser.ts +0 -119
- package/src/agents/acp/spawn-client.ts +0 -373
- package/src/agents/acp/types.ts +0 -22
- package/src/agents/aider/adapter.ts +0 -135
- package/src/agents/claude/adapter.ts +0 -258
- package/src/agents/claude/complete.ts +0 -80
- package/src/agents/claude/cost.ts +0 -16
- package/src/agents/claude/execution.ts +0 -215
- package/src/agents/claude/index.ts +0 -3
- package/src/agents/claude/interactive.ts +0 -77
- package/src/agents/claude/plan.ts +0 -179
- package/src/agents/codex/adapter.ts +0 -153
- package/src/agents/cost/calculate.ts +0 -154
- package/src/agents/cost/index.ts +0 -10
- package/src/agents/cost/parse.ts +0 -97
- package/src/agents/cost/pricing.ts +0 -59
- package/src/agents/cost/types.ts +0 -45
- package/src/agents/gemini/adapter.ts +0 -177
- package/src/agents/index.ts +0 -18
- package/src/agents/opencode/adapter.ts +0 -106
- package/src/agents/registry.ts +0 -136
- package/src/agents/shared/decompose.ts +0 -154
- package/src/agents/shared/model-resolution.ts +0 -43
- package/src/agents/shared/types-extended.ts +0 -164
- package/src/agents/shared/validation.ts +0 -69
- package/src/agents/shared/version-detection.ts +0 -109
- package/src/agents/types.ts +0 -205
- package/src/analyze/classifier.ts +0 -282
- package/src/analyze/index.ts +0 -16
- package/src/analyze/scanner.ts +0 -171
- package/src/analyze/types.ts +0 -51
- package/src/cli/accept.ts +0 -108
- package/src/cli/agents.ts +0 -87
- package/src/cli/analyze-parser.ts +0 -291
- package/src/cli/analyze.ts +0 -352
- package/src/cli/config-descriptions.ts +0 -219
- package/src/cli/config-diff.ts +0 -103
- package/src/cli/config-display.ts +0 -285
- package/src/cli/config-get.ts +0 -55
- package/src/cli/config.ts +0 -14
- package/src/cli/constitution.ts +0 -17
- package/src/cli/diagnose-analysis.ts +0 -159
- package/src/cli/diagnose-formatter.ts +0 -87
- package/src/cli/diagnose.ts +0 -203
- package/src/cli/generate.ts +0 -250
- package/src/cli/index.ts +0 -42
- package/src/cli/init-context.ts +0 -405
- package/src/cli/init-detect.ts +0 -303
- package/src/cli/init.ts +0 -296
- package/src/cli/interact.ts +0 -295
- package/src/cli/plan.ts +0 -509
- package/src/cli/plugins.ts +0 -122
- package/src/cli/prompts-export.ts +0 -58
- package/src/cli/prompts-init.ts +0 -200
- package/src/cli/prompts-main.ts +0 -183
- package/src/cli/prompts-shared.ts +0 -70
- package/src/cli/prompts-tdd.ts +0 -88
- package/src/cli/prompts.ts +0 -17
- package/src/cli/runs.ts +0 -174
- package/src/cli/status-cost.ts +0 -151
- package/src/cli/status-features.ts +0 -405
- package/src/cli/status.ts +0 -13
- package/src/commands/common.ts +0 -171
- package/src/commands/diagnose.ts +0 -17
- package/src/commands/index.ts +0 -9
- package/src/commands/logs-formatter.ts +0 -201
- package/src/commands/logs-reader.ts +0 -171
- package/src/commands/logs.ts +0 -103
- package/src/commands/precheck.ts +0 -86
- package/src/commands/runs.ts +0 -220
- package/src/commands/unlock.ts +0 -96
- package/src/config/defaults.ts +0 -218
- package/src/config/index.ts +0 -22
- package/src/config/loader.ts +0 -143
- package/src/config/merge.ts +0 -106
- package/src/config/merger.ts +0 -147
- package/src/config/path-security.ts +0 -121
- package/src/config/paths.ts +0 -27
- package/src/config/permissions.ts +0 -63
- package/src/config/runtime-types.ts +0 -522
- package/src/config/schema-types.ts +0 -53
- package/src/config/schema.ts +0 -60
- package/src/config/schemas.ts +0 -426
- package/src/config/test-strategy.ts +0 -71
- package/src/config/types.ts +0 -57
- package/src/config/validate.ts +0 -103
- package/src/constitution/generator.ts +0 -158
- package/src/constitution/generators/aider.ts +0 -41
- package/src/constitution/generators/claude.ts +0 -35
- package/src/constitution/generators/cursor.ts +0 -36
- package/src/constitution/generators/opencode.ts +0 -38
- package/src/constitution/generators/types.ts +0 -33
- package/src/constitution/generators/windsurf.ts +0 -36
- package/src/constitution/index.ts +0 -11
- package/src/constitution/loader.ts +0 -121
- package/src/constitution/types.ts +0 -31
- package/src/context/auto-detect.ts +0 -228
- package/src/context/builder.ts +0 -299
- package/src/context/elements.ts +0 -122
- package/src/context/formatter.ts +0 -107
- package/src/context/generator.ts +0 -343
- package/src/context/generators/aider.ts +0 -34
- package/src/context/generators/claude.ts +0 -28
- package/src/context/generators/codex.ts +0 -28
- package/src/context/generators/cursor.ts +0 -28
- package/src/context/generators/gemini.ts +0 -28
- package/src/context/generators/opencode.ts +0 -30
- package/src/context/generators/windsurf.ts +0 -28
- package/src/context/greenfield.ts +0 -114
- package/src/context/index.ts +0 -34
- package/src/context/injector.ts +0 -279
- package/src/context/parent-context.ts +0 -39
- package/src/context/test-scanner.ts +0 -370
- package/src/context/types.ts +0 -98
- package/src/decompose/apply.ts +0 -50
- package/src/decompose/builder.ts +0 -181
- package/src/decompose/index.ts +0 -8
- package/src/decompose/sections/codebase.ts +0 -26
- package/src/decompose/sections/constraints.ts +0 -32
- package/src/decompose/sections/index.ts +0 -4
- package/src/decompose/sections/sibling-stories.ts +0 -25
- package/src/decompose/sections/target-story.ts +0 -31
- package/src/decompose/types.ts +0 -55
- package/src/decompose/validators/complexity.ts +0 -45
- package/src/decompose/validators/coverage.ts +0 -134
- package/src/decompose/validators/dependency.ts +0 -91
- package/src/decompose/validators/index.ts +0 -35
- package/src/decompose/validators/overlap.ts +0 -128
- package/src/errors.ts +0 -67
- package/src/execution/batching.ts +0 -157
- package/src/execution/crash-heartbeat.ts +0 -77
- package/src/execution/crash-recovery.ts +0 -79
- package/src/execution/crash-signals.ts +0 -165
- package/src/execution/crash-writer.ts +0 -154
- package/src/execution/deferred-review.ts +0 -105
- package/src/execution/dry-run.ts +0 -81
- package/src/execution/escalation/escalation.ts +0 -46
- package/src/execution/escalation/index.ts +0 -13
- package/src/execution/escalation/tier-escalation.ts +0 -346
- package/src/execution/escalation/tier-outcome.ts +0 -143
- package/src/execution/executor-types.ts +0 -73
- package/src/execution/helpers.ts +0 -38
- package/src/execution/index.ts +0 -27
- package/src/execution/iteration-runner.ts +0 -160
- package/src/execution/lifecycle/acceptance-loop.ts +0 -309
- package/src/execution/lifecycle/headless-formatter.ts +0 -83
- package/src/execution/lifecycle/index.ts +0 -11
- package/src/execution/lifecycle/parallel-lifecycle.ts +0 -101
- package/src/execution/lifecycle/precheck-runner.ts +0 -140
- package/src/execution/lifecycle/run-cleanup.ts +0 -81
- package/src/execution/lifecycle/run-completion.ts +0 -247
- package/src/execution/lifecycle/run-initialization.ts +0 -187
- package/src/execution/lifecycle/run-regression.ts +0 -305
- package/src/execution/lifecycle/run-setup.ts +0 -240
- package/src/execution/lifecycle/story-size-prompts.ts +0 -123
- package/src/execution/lock.ts +0 -129
- package/src/execution/parallel-coordinator.ts +0 -281
- package/src/execution/parallel-executor-rectification-pass.ts +0 -117
- package/src/execution/parallel-executor-rectify.ts +0 -136
- package/src/execution/parallel-executor.ts +0 -330
- package/src/execution/parallel-worker.ts +0 -149
- package/src/execution/parallel.ts +0 -13
- package/src/execution/pid-registry.ts +0 -275
- package/src/execution/pipeline-result-handler.ts +0 -221
- package/src/execution/progress.ts +0 -27
- package/src/execution/queue-handler.ts +0 -109
- package/src/execution/runner-completion.ts +0 -171
- package/src/execution/runner-execution.ts +0 -243
- package/src/execution/runner-setup.ts +0 -86
- package/src/execution/runner.ts +0 -265
- package/src/execution/sequential-executor.ts +0 -219
- package/src/execution/status-file.ts +0 -264
- package/src/execution/status-writer.ts +0 -181
- package/src/execution/story-context.ts +0 -266
- package/src/execution/story-selector.ts +0 -76
- package/src/execution/test-output-parser.ts +0 -14
- package/src/execution/timeout-handler.ts +0 -100
- package/src/hooks/index.ts +0 -2
- package/src/hooks/runner.ts +0 -280
- package/src/hooks/types.ts +0 -79
- package/src/interaction/chain.ts +0 -170
- package/src/interaction/index.ts +0 -61
- package/src/interaction/init.ts +0 -84
- package/src/interaction/plugins/auto.ts +0 -243
- package/src/interaction/plugins/cli.ts +0 -300
- package/src/interaction/plugins/telegram.ts +0 -384
- package/src/interaction/plugins/webhook.ts +0 -286
- package/src/interaction/state.ts +0 -171
- package/src/interaction/triggers.ts +0 -250
- package/src/interaction/types.ts +0 -170
- package/src/logger/formatters.ts +0 -84
- package/src/logger/index.ts +0 -16
- package/src/logger/logger.ts +0 -296
- package/src/logger/types.ts +0 -48
- package/src/logging/formatter.ts +0 -355
- package/src/logging/index.ts +0 -22
- package/src/logging/types.ts +0 -93
- package/src/metrics/aggregator.ts +0 -191
- package/src/metrics/index.ts +0 -14
- package/src/metrics/tracker.ts +0 -200
- package/src/metrics/types.ts +0 -115
- package/src/optimizer/index.ts +0 -63
- package/src/optimizer/noop.optimizer.ts +0 -24
- package/src/optimizer/rule-based.optimizer.ts +0 -248
- package/src/optimizer/types.ts +0 -53
- package/src/pipeline/event-bus.ts +0 -297
- package/src/pipeline/events.ts +0 -130
- package/src/pipeline/index.ts +0 -19
- package/src/pipeline/runner.ts +0 -149
- package/src/pipeline/stages/acceptance-setup.ts +0 -144
- package/src/pipeline/stages/acceptance.ts +0 -215
- package/src/pipeline/stages/autofix.ts +0 -262
- package/src/pipeline/stages/completion.ts +0 -110
- package/src/pipeline/stages/constitution.ts +0 -63
- package/src/pipeline/stages/context.ts +0 -122
- package/src/pipeline/stages/execution.ts +0 -359
- package/src/pipeline/stages/index.ts +0 -86
- package/src/pipeline/stages/optimizer.ts +0 -74
- package/src/pipeline/stages/prompt.ts +0 -79
- package/src/pipeline/stages/queue-check.ts +0 -103
- package/src/pipeline/stages/rectify.ts +0 -101
- package/src/pipeline/stages/regression.ts +0 -99
- package/src/pipeline/stages/review.ts +0 -94
- package/src/pipeline/stages/routing.ts +0 -276
- package/src/pipeline/stages/verify.ts +0 -286
- package/src/pipeline/subscribers/events-writer.ts +0 -135
- package/src/pipeline/subscribers/hooks.ts +0 -179
- package/src/pipeline/subscribers/interaction.ts +0 -103
- package/src/pipeline/subscribers/registry.ts +0 -73
- package/src/pipeline/subscribers/reporters.ts +0 -174
- package/src/pipeline/types.ts +0 -220
- package/src/plugins/extensions.ts +0 -225
- package/src/plugins/index.ts +0 -33
- package/src/plugins/loader.ts +0 -352
- package/src/plugins/plugin-logger.ts +0 -41
- package/src/plugins/registry.ts +0 -168
- package/src/plugins/types.ts +0 -206
- package/src/plugins/validator.ts +0 -352
- package/src/prd/index.ts +0 -220
- package/src/prd/schema.ts +0 -268
- package/src/prd/types.ts +0 -273
- package/src/prd/validate.ts +0 -41
- package/src/precheck/checks-agents.ts +0 -63
- package/src/precheck/checks-blockers.ts +0 -23
- package/src/precheck/checks-cli.ts +0 -68
- package/src/precheck/checks-config.ts +0 -102
- package/src/precheck/checks-git.ts +0 -117
- package/src/precheck/checks-system.ts +0 -101
- package/src/precheck/checks-warnings.ts +0 -221
- package/src/precheck/checks.ts +0 -36
- package/src/precheck/index.ts +0 -374
- package/src/precheck/story-size-gate.ts +0 -144
- package/src/precheck/types.ts +0 -31
- package/src/prompts/builder.ts +0 -166
- package/src/prompts/index.ts +0 -2
- package/src/prompts/loader.ts +0 -43
- package/src/prompts/sections/conventions.ts +0 -19
- package/src/prompts/sections/hermetic.ts +0 -41
- package/src/prompts/sections/index.ts +0 -12
- package/src/prompts/sections/isolation.ts +0 -70
- package/src/prompts/sections/role-task.ts +0 -182
- package/src/prompts/sections/story.ts +0 -55
- package/src/prompts/sections/verdict.ts +0 -70
- package/src/prompts/types.ts +0 -21
- package/src/queue/index.ts +0 -2
- package/src/queue/manager.ts +0 -254
- package/src/queue/types.ts +0 -54
- package/src/review/index.ts +0 -8
- package/src/review/orchestrator.ts +0 -154
- package/src/review/runner.ts +0 -303
- package/src/review/types.ts +0 -70
- package/src/routing/batch-route.ts +0 -35
- package/src/routing/builder.ts +0 -81
- package/src/routing/chain.ts +0 -75
- package/src/routing/content-hash.ts +0 -25
- package/src/routing/index.ts +0 -20
- package/src/routing/loader.ts +0 -62
- package/src/routing/router.ts +0 -305
- package/src/routing/strategies/adaptive.ts +0 -215
- package/src/routing/strategies/index.ts +0 -8
- package/src/routing/strategies/keyword.ts +0 -180
- package/src/routing/strategies/llm-prompts.ts +0 -224
- package/src/routing/strategies/llm.ts +0 -320
- package/src/routing/strategies/manual.ts +0 -50
- package/src/routing/strategy.ts +0 -102
- package/src/tdd/cleanup.ts +0 -120
- package/src/tdd/index.ts +0 -22
- package/src/tdd/isolation.ts +0 -117
- package/src/tdd/orchestrator.ts +0 -406
- package/src/tdd/prompts.ts +0 -40
- package/src/tdd/rectification-gate.ts +0 -274
- package/src/tdd/session-runner.ts +0 -263
- package/src/tdd/types.ts +0 -84
- package/src/tdd/verdict-reader.ts +0 -266
- package/src/tdd/verdict.ts +0 -152
- package/src/tui/App.tsx +0 -265
- package/src/tui/components/AgentPanel.tsx +0 -75
- package/src/tui/components/CostOverlay.tsx +0 -118
- package/src/tui/components/HelpOverlay.tsx +0 -107
- package/src/tui/components/StatusBar.tsx +0 -63
- package/src/tui/components/StoriesPanel.tsx +0 -177
- package/src/tui/hooks/useKeyboard.ts +0 -142
- package/src/tui/hooks/useLayout.ts +0 -137
- package/src/tui/hooks/usePipelineEvents.ts +0 -183
- package/src/tui/hooks/usePty.ts +0 -189
- package/src/tui/index.tsx +0 -38
- package/src/tui/types.ts +0 -76
- package/src/utils/errors.ts +0 -12
- package/src/utils/git.ts +0 -245
- package/src/utils/json-file.ts +0 -72
- package/src/utils/log-test-output.ts +0 -25
- package/src/utils/path-security.ts +0 -73
- package/src/utils/queue-writer.ts +0 -54
- package/src/verification/crash-detector.ts +0 -34
- package/src/verification/executor.ts +0 -250
- package/src/verification/index.ts +0 -12
- package/src/verification/orchestrator-types.ts +0 -154
- package/src/verification/orchestrator.ts +0 -76
- package/src/verification/parser.ts +0 -220
- package/src/verification/rectification-loop.ts +0 -172
- package/src/verification/rectification.ts +0 -108
- package/src/verification/runners.ts +0 -129
- package/src/verification/smart-runner.ts +0 -307
- package/src/verification/strategies/acceptance.ts +0 -136
- package/src/verification/strategies/regression.ts +0 -90
- package/src/verification/strategies/scoped.ts +0 -154
- package/src/verification/types.ts +0 -117
- package/src/version.ts +0 -40
- package/src/worktree/dispatcher.ts +0 -6
- package/src/worktree/index.ts +0 -2
- package/src/worktree/manager.ts +0 -193
- package/src/worktree/merge.ts +0 -302
- package/src/worktree/types.ts +0 -4
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,36 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.51.0] - 2026-03-21
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **STRAT-001: `no-test` strategy** — New test strategy for stories with zero behavioral change (config, docs, CI/build files, dependency bumps, pure refactors). Requires `noTestJustification` field at every assignment point (plan prompt, LLM routing, batch routing) to prevent lazy test-skipping. `no-test` stories use an implement-only prompt (no RED/GREEN/REFACTOR), are exempt from greenfield override (BUG-010) and test-after escalation (S5), and batch separately from tested stories.
|
|
13
|
+
- **DIR-001: Rename `nax/` → `.nax/`** — Project-level config directory now uses hidden dot-prefix convention (like `.git/`, `.claude/`). `PROJECT_NAX_DIR = ".nax"` SSOT constant in `src/config/paths.ts`. Package configs moved from `<pkg>/nax/config.json` to `.nax/packages/<pkg>/config.json`. 93 files updated.
|
|
14
|
+
- **BUG-073: Acceptance fix story quality** — Fix stories now include acceptance test file path, truncated failure output, and "fix implementation not tests" instruction. Batched by related stories (cap 8) instead of 1-per-AC. Fix stories inherit `workdir` from related story. `>80%` AC failure triggers test regeneration instead of fix stories.
|
|
15
|
+
- **BUG-073: Acceptance staleness detection** — SHA-256 fingerprint of AC set stored in `acceptance-meta.json`. Acceptance test auto-regenerates (with `.bak` backup) when stories are added/removed/modified.
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- **fix(acceptance):** Correct `__dirname` depth in generator prompt — test file is exactly 3 `../` levels from root, not 4.
|
|
20
|
+
- **fix(acceptance):** Acceptance tests always run from repo root — covers both single repo and monorepo. Test uses `__dirname`-based paths into packages.
|
|
21
|
+
- **fix(acceptance):** Fix stories use per-package config for review/verify stages when `story.workdir` is set.
|
|
22
|
+
- **fix(review):** Fallback to `quality.commands` when `review.commands` not configured — prevents routing failures in monorepo packages.
|
|
23
|
+
- **fix(review):** Use optional chaining for `quality?.commands` — avoids crash when config has no quality section.
|
|
24
|
+
- **fix(pkg):** Remove `src/` and `bin/` from npm `files` — only `dist/` published. 354 files / 4.7MB → 5 files / 3.1MB.
|
|
25
|
+
|
|
26
|
+
### Refactored
|
|
27
|
+
|
|
28
|
+
- **refactor(test):** Add `withDepsRestore` helper in `test/helpers/deps.ts` — eliminates save/restore boilerplate across 13 test files (−98 net lines).
|
|
29
|
+
|
|
30
|
+
### Migration
|
|
31
|
+
|
|
32
|
+
- Rename your project's `nax/` directory to `.nax/`
|
|
33
|
+
- For monorepo: move `<pkg>/nax/config.json` → `.nax/packages/<pkg>/config.json`
|
|
34
|
+
- Update `.gitignore` patterns: `nax/**/runs/` → `.nax/**/runs/`, etc.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
8
38
|
## [0.50.0] - 2026-03-19
|
|
9
39
|
|
|
10
40
|
### Added
|
package/README.md
CHANGED
|
@@ -33,15 +33,20 @@ nax run -f my-feature --plan --from spec.md
|
|
|
33
33
|
## How It Works
|
|
34
34
|
|
|
35
35
|
```
|
|
36
|
-
|
|
36
|
+
(plan →) acceptance setup → route → execute → verify → (escalate) → regression gate → acceptance
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
-
1. **
|
|
40
|
-
2. **
|
|
41
|
-
3. **
|
|
42
|
-
4. **
|
|
43
|
-
5. **
|
|
44
|
-
6. **
|
|
39
|
+
1. **Plan** *(optional)* — `nax run --plan` generates a `prd.json` from a spec file using an LLM
|
|
40
|
+
2. **Acceptance setup** *(pre-run)* — generate acceptance tests and assert RED (tests must fail before implementation)
|
|
41
|
+
3. **Route** — classify story complexity and select model tier (fast → balanced → powerful)
|
|
42
|
+
4. **Context** — gather relevant code, tests, and project standards
|
|
43
|
+
5. **Execute** — run an agent session (Claude Code, Codex, Gemini CLI, or ACP)
|
|
44
|
+
6. **Verify** — run scoped tests; if failing, **rectify** before escalating
|
|
45
|
+
7. **Review** — lint + typecheck; if failing, **autofix** before escalating
|
|
46
|
+
8. **Escalate** — on repeated failure, retry with a higher model tier
|
|
47
|
+
9. **Loop** — repeat steps 3–8 per story until all pass or a cost/iteration limit is hit
|
|
48
|
+
10. **Regression gate** — deferred full-suite run after all stories pass
|
|
49
|
+
11. **Acceptance** *(post-run)* — run the generated acceptance tests against the completed feature
|
|
45
50
|
|
|
46
51
|
---
|
|
47
52
|
|
|
@@ -49,7 +54,7 @@ analyze → route → execute → verify → (loop until all stories pass) → r
|
|
|
49
54
|
|
|
50
55
|
### `nax init`
|
|
51
56
|
|
|
52
|
-
Initialize nax in your project. Creates the
|
|
57
|
+
Initialize nax in your project. Creates the `.nax/` folder structure.
|
|
53
58
|
|
|
54
59
|
```bash
|
|
55
60
|
nax init
|
|
@@ -57,7 +62,7 @@ nax init
|
|
|
57
62
|
|
|
58
63
|
Creates:
|
|
59
64
|
```
|
|
60
|
-
nax/
|
|
65
|
+
.nax/
|
|
61
66
|
├── config.json # Project-level config
|
|
62
67
|
└── features/ # One folder per feature
|
|
63
68
|
```
|
|
@@ -68,7 +73,7 @@ nax/
|
|
|
68
73
|
nax init --package packages/api
|
|
69
74
|
```
|
|
70
75
|
|
|
71
|
-
Creates
|
|
76
|
+
Creates `.nax/mono/packages/api/context.md` for per-package agent context.
|
|
72
77
|
|
|
73
78
|
---
|
|
74
79
|
|
|
@@ -80,7 +85,7 @@ Scaffold a new feature.
|
|
|
80
85
|
nax features create user-auth
|
|
81
86
|
```
|
|
82
87
|
|
|
83
|
-
Creates
|
|
88
|
+
Creates `.nax/features/user-auth/spec.md` — fill in the overview, user stories, and acceptance criteria, then run `nax plan` to generate `prd.json`.
|
|
84
89
|
|
|
85
90
|
### `nax features list`
|
|
86
91
|
|
|
@@ -135,7 +140,7 @@ nax run -f my-feature
|
|
|
135
140
|
| Flag | Description |
|
|
136
141
|
|:-----|:------------|
|
|
137
142
|
| `-f, --feature <name>` | Feature name |
|
|
138
|
-
| `-a, --agent <name>` | Force a specific agent (`claude`, `opencode`, `codex`, etc.) |
|
|
143
|
+
| `-a, --agent <name>` | Force a specific agent (`claude`, `opencode`, `codex`, etc.). Only applies when `agent.protocol = "cli"` — ignored when using ACP protocol. |
|
|
139
144
|
| `--plan` | Run plan phase first (requires `--from`) |
|
|
140
145
|
| `--from <spec-path>` | Spec file for `--plan` |
|
|
141
146
|
| `--one-shot` | Skip interactive Q&A during planning (ACP only) |
|
|
@@ -201,21 +206,28 @@ nax status -f my-feature
|
|
|
201
206
|
|
|
202
207
|
---
|
|
203
208
|
|
|
204
|
-
### `nax logs
|
|
209
|
+
### `nax logs`
|
|
205
210
|
|
|
206
|
-
Stream logs from the current or last run.
|
|
211
|
+
Stream logs from the current or last run. Run from your project directory.
|
|
207
212
|
|
|
208
213
|
```bash
|
|
209
|
-
|
|
214
|
+
# List all recorded runs
|
|
215
|
+
nax logs --list
|
|
210
216
|
|
|
211
|
-
# Follow in real-time
|
|
212
|
-
nax logs
|
|
217
|
+
# Follow current run in real-time
|
|
218
|
+
nax logs --follow
|
|
213
219
|
|
|
214
220
|
# Filter by story
|
|
215
|
-
nax logs
|
|
221
|
+
nax logs --story US-003
|
|
216
222
|
|
|
217
|
-
# Filter by level
|
|
218
|
-
nax logs
|
|
223
|
+
# Filter by log level
|
|
224
|
+
nax logs --level error
|
|
225
|
+
|
|
226
|
+
# Select a specific run by ID
|
|
227
|
+
nax logs --run <runId>
|
|
228
|
+
|
|
229
|
+
# Raw JSONL output (for scripting)
|
|
230
|
+
nax logs --json
|
|
219
231
|
```
|
|
220
232
|
|
|
221
233
|
---
|
|
@@ -255,7 +267,7 @@ Output sections:
|
|
|
255
267
|
|
|
256
268
|
### `nax generate`
|
|
257
269
|
|
|
258
|
-
Generate agent config files from
|
|
270
|
+
Generate agent config files from `.nax/context.md`. Supports Claude Code, OpenCode, Codex, Cursor, Windsurf, Aider, and Gemini.
|
|
259
271
|
|
|
260
272
|
```bash
|
|
261
273
|
nax generate
|
|
@@ -265,7 +277,7 @@ nax generate
|
|
|
265
277
|
|
|
266
278
|
| Flag | Description |
|
|
267
279
|
|:-----|:------------|
|
|
268
|
-
| `-c, --context <path>` | Context file path (default:
|
|
280
|
+
| `-c, --context <path>` | Context file path (default: `.nax/context.md`) |
|
|
269
281
|
| `-o, --output <dir>` | Output directory (default: project root) |
|
|
270
282
|
| `-a, --agent <name>` | Generate for a specific agent only (`claude`, `opencode`, `cursor`, `windsurf`, `aider`, `codex`, `gemini`) |
|
|
271
283
|
| `--dry-run` | Preview without writing files |
|
|
@@ -287,7 +299,7 @@ nax generate
|
|
|
287
299
|
|
|
288
300
|
**Workflow:**
|
|
289
301
|
|
|
290
|
-
1. Create
|
|
302
|
+
1. Create `.nax/context.md` — describe your project's architecture, conventions, and coding standards
|
|
291
303
|
2. Run `nax generate` — writes agent config files to the project root (and per-package if configured)
|
|
292
304
|
3. Commit the generated files — your agents will automatically pick them up
|
|
293
305
|
|
|
@@ -301,7 +313,7 @@ nax generate --package packages/api
|
|
|
301
313
|
nax generate --all-packages
|
|
302
314
|
```
|
|
303
315
|
|
|
304
|
-
Each package can have its own
|
|
316
|
+
Each package can have its own context file at `.nax/mono/<package>/context.md` for package-specific agent instructions (created via `nax init --package <package>`).
|
|
305
317
|
|
|
306
318
|
---
|
|
307
319
|
|
|
@@ -317,7 +329,7 @@ nax prompts -f my-feature
|
|
|
317
329
|
|
|
318
330
|
| Flag | Description |
|
|
319
331
|
|:-----|:------------|
|
|
320
|
-
| `--init` | Export default role templates to
|
|
332
|
+
| `--init` | Export default role templates to `.nax/templates/` for customization |
|
|
321
333
|
| `--role <role>` | Show prompt for a specific role (`implementer`, `test-writer`, `verifier`, `tdd-simple`) |
|
|
322
334
|
|
|
323
335
|
After running `--init`, edit the templates and nax will use them automatically via `prompts.overrides` config.
|
|
@@ -354,12 +366,19 @@ nax agents
|
|
|
354
366
|
|
|
355
367
|
---
|
|
356
368
|
|
|
357
|
-
### `nax config
|
|
369
|
+
### `nax config`
|
|
358
370
|
|
|
359
|
-
Display the effective merged configuration
|
|
371
|
+
Display the effective merged configuration (global + project layers).
|
|
360
372
|
|
|
361
373
|
```bash
|
|
362
|
-
|
|
374
|
+
# Show merged config
|
|
375
|
+
nax config
|
|
376
|
+
|
|
377
|
+
# Show with field descriptions
|
|
378
|
+
nax config --explain
|
|
379
|
+
|
|
380
|
+
# Show only fields where project overrides global
|
|
381
|
+
nax config --diff
|
|
363
382
|
```
|
|
364
383
|
|
|
365
384
|
---
|
|
@@ -371,7 +390,7 @@ Config is layered — project overrides global:
|
|
|
371
390
|
| File | Scope |
|
|
372
391
|
|:-----|:------|
|
|
373
392
|
| `~/.nax/config.json` | Global (all projects) |
|
|
374
|
-
|
|
|
393
|
+
| `.nax/config.json` | Project-level override |
|
|
375
394
|
|
|
376
395
|
**Key options:**
|
|
377
396
|
|
|
@@ -414,7 +433,7 @@ Review commands (`lint`, `typecheck`) are executed directly via `Bun.spawn` —
|
|
|
414
433
|
}
|
|
415
434
|
```
|
|
416
435
|
```json
|
|
417
|
-
// nax/config.json
|
|
436
|
+
// .nax/config.json
|
|
418
437
|
"quality": {
|
|
419
438
|
"commands": {
|
|
420
439
|
"typecheck": "bun run build-and-check"
|
|
@@ -442,13 +461,15 @@ Use `testScoped` to define the exact scoped test command with a `{{files}}` plac
|
|
|
442
461
|
|
|
443
462
|
If `testScoped` is not configured, nax falls back to a heuristic that replaces the last path-like token in the `test` command. **Recommended:** always configure `testScoped` explicitly to avoid surprises.
|
|
444
463
|
|
|
445
|
-
**TDD strategy options:**
|
|
464
|
+
**TDD strategy options:** <a name="tdd-strategy-options"></a>
|
|
446
465
|
|
|
447
466
|
| Value | Behaviour |
|
|
448
467
|
|:------|:----------|
|
|
449
|
-
| `auto` | nax decides based on complexity and tags |
|
|
450
|
-
| `
|
|
451
|
-
| `
|
|
468
|
+
| `auto` | nax decides based on complexity and tags — simple→`tdd-simple`, security/public-api→`three-session-tdd`, else→`three-session-tdd-lite` |
|
|
469
|
+
| `strict` | Always use `three-session-tdd` (strictest — all stories) |
|
|
470
|
+
| `lite` | Always use `three-session-tdd-lite` |
|
|
471
|
+
| `simple` | Always use `tdd-simple` (1 session) |
|
|
472
|
+
| `off` | No TDD — tests written after implementation (`test-after`) |
|
|
452
473
|
|
|
453
474
|
---
|
|
454
475
|
|
|
@@ -462,12 +483,12 @@ Customize the instructions sent to each agent role for your project's specific n
|
|
|
462
483
|
|
|
463
484
|
```bash
|
|
464
485
|
nax prompts --init # Create default templates
|
|
465
|
-
# Edit nax/templates/*.md
|
|
486
|
+
# Edit .nax/templates/*.md
|
|
466
487
|
nax prompts --export test-writer # Preview a role's prompt
|
|
467
488
|
nax run -f my-feature # Uses your custom prompts
|
|
468
489
|
```
|
|
469
490
|
|
|
470
|
-
**Full guide:** See [Prompt Customization Guide](docs/prompt-customization.md) for detailed instructions, role reference, and best practices.
|
|
491
|
+
**Full guide:** See [Prompt Customization Guide](docs/guides/prompt-customization.md) for detailed instructions, role reference, and best practices.
|
|
471
492
|
|
|
472
493
|
---
|
|
473
494
|
|
|
@@ -477,12 +498,13 @@ nax selects a test strategy per story based on complexity and tags:
|
|
|
477
498
|
|
|
478
499
|
| Strategy | Sessions | When | Description |
|
|
479
500
|
|:---------|:---------|:-----|:------------|
|
|
480
|
-
| `test
|
|
501
|
+
| `no-test` | 1 | Config, docs, CI, pure refactors with no behavior change | No tests written or run — requires `noTestJustification` in prd.json |
|
|
502
|
+
| `test-after` | 1 | Refactors, deletions | Single session, tests written after implementation |
|
|
481
503
|
| `tdd-simple` | 1 | Simple stories | Single session with TDD prompt (red-green-refactor) |
|
|
482
504
|
| `three-session-tdd-lite` | 3 | Medium stories | Three sessions, relaxed isolation rules |
|
|
483
505
|
| `three-session-tdd` | 3 | Complex/security stories | Three sessions, strict file isolation |
|
|
484
506
|
|
|
485
|
-
Configure the default TDD behavior in
|
|
507
|
+
Configure the default TDD behavior in `.nax/config.json`:
|
|
486
508
|
|
|
487
509
|
```json
|
|
488
510
|
{
|
|
@@ -492,11 +514,7 @@ Configure the default TDD behavior in `nax/config.json`:
|
|
|
492
514
|
}
|
|
493
515
|
```
|
|
494
516
|
|
|
495
|
-
|
|
496
|
-
|:------|:----------|
|
|
497
|
-
| `auto` | nax decides based on complexity and tags (default) |
|
|
498
|
-
| `lite` | Prefer `three-session-tdd-lite` for complex stories |
|
|
499
|
-
| `strict` | Always use full `three-session-tdd` for complex stories |
|
|
517
|
+
See [TDD strategy options](#tdd-strategy-options) for all values.
|
|
500
518
|
|
|
501
519
|
---
|
|
502
520
|
|
|
@@ -544,7 +562,7 @@ Configured under `quality.testing` — supports **per-package override** in mono
|
|
|
544
562
|
|
|
545
563
|
> **Tip:** `externalBoundaries` and `mockGuidance` complement `context.md`. nax provides the rule ("mock all I/O"), while `context.md` provides project-specific knowledge ("use `ioredis-mock` for Redis"). Use both for best results.
|
|
546
564
|
|
|
547
|
-
> **Monorepo:** Each package can override `quality.testing` in its own
|
|
565
|
+
> **Monorepo:** Each package can override `quality.testing` in its own `.nax/mono/<package>/config.json`. For example, `packages/api` can specify Redis boundaries while `apps/web` specifies HTTP-only.
|
|
548
566
|
|
|
549
567
|
> **Opt-out:** Set `quality.testing.hermetic: false` if your project requires real integration calls (e.g. live database tests against a local dev container).
|
|
550
568
|
|
|
@@ -552,34 +570,41 @@ Configured under `quality.testing` — supports **per-package override** in mono
|
|
|
552
570
|
|
|
553
571
|
## Story Decomposition
|
|
554
572
|
|
|
555
|
-
|
|
573
|
+
Story decomposition is **opt-in** — disabled by default. Enable it by adding a `decompose` block to `.nax/config.json`.
|
|
556
574
|
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
**How it works:**
|
|
560
|
-
|
|
561
|
-
1. The `DecomposeBuilder` constructs a prompt with the target story, sibling stories (to prevent overlap), and codebase context
|
|
562
|
-
2. An LLM generates sub-stories with IDs, titles, descriptions, acceptance criteria, and dependency ordering
|
|
563
|
-
3. Post-decompose validators check:
|
|
564
|
-
- **Overlap** — sub-stories must not duplicate scope of existing stories
|
|
565
|
-
- **Coverage** — sub-stories must cover all parent acceptance criteria
|
|
566
|
-
- **Complexity** — each sub-story must be simpler than the parent
|
|
567
|
-
- **Dependencies** — dependency graph must be acyclic with valid references
|
|
568
|
-
4. The parent story is replaced in the PRD with the validated sub-stories
|
|
575
|
+
When enabled, nax checks during the routing stage whether a story is oversized (complex/expert complexity with more ACs than `maxAcceptanceCriteria`). If so, an LLM breaks it into smaller sub-stories and replaces the original in the PRD.
|
|
569
576
|
|
|
570
577
|
**Configuration:**
|
|
571
578
|
|
|
572
579
|
```json
|
|
573
580
|
{
|
|
574
581
|
"decompose": {
|
|
575
|
-
"
|
|
576
|
-
"
|
|
577
|
-
"
|
|
578
|
-
"
|
|
582
|
+
"trigger": "auto",
|
|
583
|
+
"maxAcceptanceCriteria": 6,
|
|
584
|
+
"maxSubstories": 5,
|
|
585
|
+
"maxSubstoryComplexity": "medium",
|
|
586
|
+
"maxRetries": 2,
|
|
587
|
+
"model": "balanced"
|
|
579
588
|
}
|
|
580
589
|
}
|
|
581
590
|
```
|
|
582
591
|
|
|
592
|
+
**Trigger modes:**
|
|
593
|
+
|
|
594
|
+
| Value | Behaviour |
|
|
595
|
+
|:------|:----------|
|
|
596
|
+
| `auto` | Decompose automatically — no confirmation prompt |
|
|
597
|
+
| `confirm` | Show interaction prompt — you approve, skip, or continue as-is |
|
|
598
|
+
| `disabled` | Never decompose — log a warning if story is oversized |
|
|
599
|
+
|
|
600
|
+
> **Note:** `storySizeGate` (under `precheck`) is a separate pre-run guard that warns if stories exceed size limits before execution starts. Decomposition happens during routing, mid-run.
|
|
601
|
+
|
|
602
|
+
**How it works:**
|
|
603
|
+
|
|
604
|
+
1. An LLM generates sub-stories with IDs, titles, descriptions, acceptance criteria, and dependency ordering
|
|
605
|
+
2. Post-decompose validators check overlap, coverage, complexity, and dependency ordering
|
|
606
|
+
3. The parent story is replaced in the PRD with the validated sub-stories
|
|
607
|
+
|
|
583
608
|
---
|
|
584
609
|
|
|
585
610
|
## Regression Gate
|
|
@@ -601,8 +626,8 @@ After all stories pass their individual verification, nax can run a deferred ful
|
|
|
601
626
|
| Mode | Behaviour |
|
|
602
627
|
|:-----|:----------|
|
|
603
628
|
| `disabled` | No regression gate |
|
|
604
|
-
| `per-story` | Full suite after each story
|
|
605
|
-
| `deferred` | Full suite once after all stories pass (recommended) |
|
|
629
|
+
| `per-story` | Full suite after each story — higher cost and slower if stories fail regression |
|
|
630
|
+
| `deferred` | Full suite once after all stories pass (recommended) — **default** |
|
|
606
631
|
|
|
607
632
|
If the regression gate detects failures, nax maps them to the responsible story via git blame and attempts automated rectification. If rectification fails, affected stories are marked as `regression-failed`.
|
|
608
633
|
|
|
@@ -646,7 +671,9 @@ nax run -f my-feature --parallel 3
|
|
|
646
671
|
|
|
647
672
|
## Agents
|
|
648
673
|
|
|
649
|
-
nax supports multiple coding agents.
|
|
674
|
+
nax supports multiple coding agents via the [Agent Client Protocol (ACP)](https://github.com/openclaw/acpx). **ACP protocol is recommended** — it provides persistent sessions, structured cost/token reporting, and works with all supported agents.
|
|
675
|
+
|
|
676
|
+
> **CLI protocol** (`agent.protocol: "cli"`) is supported for Claude Code only and is being gradually deprecated in favour of ACP. New projects should use ACP.
|
|
650
677
|
|
|
651
678
|
```bash
|
|
652
679
|
# List installed agents and their capabilities
|
|
@@ -655,21 +682,16 @@ nax agents
|
|
|
655
682
|
|
|
656
683
|
**Supported agents:**
|
|
657
684
|
|
|
658
|
-
| Agent |
|
|
659
|
-
|
|
660
|
-
| `claude` |
|
|
661
|
-
| `opencode`
|
|
662
|
-
| `codex` | ACP | Codex via acpx |
|
|
663
|
-
| `cursor` | ACP | Cursor via acpx |
|
|
664
|
-
| `windsurf` | ACP | Windsurf via acpx |
|
|
665
|
-
| `aider` | ACP | Aider via acpx |
|
|
666
|
-
| `gemini` | ACP | Gemini CLI via acpx |
|
|
685
|
+
| Agent | CLI mode |
|
|
686
|
+
|:------|:---------|
|
|
687
|
+
| `claude` | ✅ Stable |
|
|
688
|
+
| All others (`codex`, `gemini`, `opencode`, `cursor`, `copilot`, `kilo`, `qwen`, `kimi`, `iflow`, `droid`, `kiro`, and more) | 🧪 Experimental |
|
|
667
689
|
|
|
668
|
-
|
|
690
|
+
nax connects to agents via [acpx](https://github.com/openclaw/acpx). All agents run as persistent ACP sessions — nax sends prompts and receives structured JSON-RPC responses including token counts and exact USD cost per session. For the full list of supported agents and their ACP startup commands, see the [acpx agent docs](https://github.com/openclaw/acpx#agents).
|
|
669
691
|
|
|
670
|
-
|
|
692
|
+
> **Note:** When `agent.protocol` is set to `"acp"`, the `--agent` CLI flag has no effect — all execution routes through the ACP adapter regardless of agent name.
|
|
671
693
|
|
|
672
|
-
> **Known issue — `acpx` ≤ 0.3.1:** The `--model` flag is not supported. Model selection via `execution.model` or per-package `model` overrides has no effect
|
|
694
|
+
> **Known issue — `acpx` ≤ 0.3.1:** The `--model` flag is not supported. Model selection via `execution.model` or per-package `model` overrides has no effect. As a temporary workaround, use the [nathapp-io/acpx](https://github.com/nathapp-io/acpx) fork which adds `--model` support. Upstream fix is tracked in [openclaw/acpx#49](https://github.com/openclaw/acpx/issues/49).
|
|
673
695
|
|
|
674
696
|
**Configuring agents:**
|
|
675
697
|
|
|
@@ -683,10 +705,11 @@ nax uses [acpx](https://github.com/nathapp/acpx) as the ACP transport. All agent
|
|
|
683
705
|
}
|
|
684
706
|
```
|
|
685
707
|
|
|
686
|
-
**Force a specific agent at runtime:**
|
|
708
|
+
**Force a specific agent at runtime (CLI protocol only):**
|
|
687
709
|
|
|
688
710
|
```bash
|
|
689
|
-
|
|
711
|
+
# Only applies when agent.protocol = "cli" (Claude Code only — other agents experimental)
|
|
712
|
+
nax run -f my-feature --agent claude
|
|
690
713
|
```
|
|
691
714
|
|
|
692
715
|
---
|
|
@@ -708,27 +731,27 @@ nax init --package packages/web
|
|
|
708
731
|
|
|
709
732
|
### Per-Package Config
|
|
710
733
|
|
|
711
|
-
Each package
|
|
734
|
+
Each package's config and context are stored centrally under the root `.nax/mono/` directory:
|
|
712
735
|
|
|
713
736
|
```
|
|
714
737
|
repo-root/
|
|
715
|
-
├── nax/
|
|
716
|
-
│
|
|
717
|
-
|
|
718
|
-
│
|
|
719
|
-
│
|
|
720
|
-
│
|
|
721
|
-
│
|
|
722
|
-
│
|
|
723
|
-
│
|
|
724
|
-
│
|
|
725
|
-
│
|
|
738
|
+
├── .nax/
|
|
739
|
+
│ ├── config.json # root config
|
|
740
|
+
│ └── mono/
|
|
741
|
+
│ ├── packages/
|
|
742
|
+
│ │ └── api/
|
|
743
|
+
│ │ ├── config.json # overrides for packages/api
|
|
744
|
+
│ │ └── context.md # agent context for packages/api
|
|
745
|
+
│ └── apps/
|
|
746
|
+
│ └── api/
|
|
747
|
+
│ ├── config.json # overrides for apps/api
|
|
748
|
+
│ └── context.md # agent context for apps/api
|
|
726
749
|
```
|
|
727
750
|
|
|
728
751
|
**Overridable fields per package:** `execution`, `review`, `acceptance`, `quality`, `context`
|
|
729
752
|
|
|
730
753
|
```json
|
|
731
|
-
// packages/api/
|
|
754
|
+
// .nax/mono/packages/api/config.json
|
|
732
755
|
{
|
|
733
756
|
"quality": {
|
|
734
757
|
"commands": {
|
|
@@ -764,7 +787,7 @@ When `nax plan` generates stories for a monorepo, it auto-discovers packages fro
|
|
|
764
787
|
- `turbo.json` → `packages` field
|
|
765
788
|
- `package.json` → `workspaces`
|
|
766
789
|
- `pnpm-workspace.yaml` → `packages`
|
|
767
|
-
- Existing
|
|
790
|
+
- Existing `.nax/mono/*/context.md` files
|
|
768
791
|
|
|
769
792
|
### Generate Agent Files for All Packages
|
|
770
793
|
|
|
@@ -772,7 +795,7 @@ When `nax plan` generates stories for a monorepo, it auto-discovers packages fro
|
|
|
772
795
|
nax generate --all-packages
|
|
773
796
|
```
|
|
774
797
|
|
|
775
|
-
Generates a `CLAUDE.md` (or agent-specific file) in each discovered package directory, using the package's own
|
|
798
|
+
Generates a `CLAUDE.md` (or agent-specific file) in each discovered package directory, using the package's own `.nax/mono/<package>/context.md` if present.
|
|
776
799
|
|
|
777
800
|
---
|
|
778
801
|
|
|
@@ -780,7 +803,7 @@ Generates a `CLAUDE.md` (or agent-specific file) in each discovered package dire
|
|
|
780
803
|
|
|
781
804
|
Integrate notifications, CI triggers, or custom scripts via lifecycle hooks.
|
|
782
805
|
|
|
783
|
-
**Project hooks** (
|
|
806
|
+
**Project hooks** (`.nax/hooks.json`):
|
|
784
807
|
|
|
785
808
|
```json
|
|
786
809
|
{
|
|
@@ -883,7 +906,7 @@ nax can pause execution and prompt you for decisions at critical points. Configu
|
|
|
883
906
|
| `max-retries` | 🟡 Yellow | `skip` | Story exhausted all retry attempts — skip and continue? |
|
|
884
907
|
| `pre-merge` | 🟡 Yellow | `escalate` | Checkpoint before merging to main branch |
|
|
885
908
|
| `human-review` | 🟡 Yellow | `skip` | Human review required on critical failure |
|
|
886
|
-
| `story-oversized` | 🟡 Yellow | `continue` | Story too complex — decompose into sub-stories? |
|
|
909
|
+
| `story-oversized` | 🟡 Yellow | `continue` | Story too complex — decompose into sub-stories? (only fires when `decompose.trigger = "confirm"`) |
|
|
887
910
|
| `story-ambiguity` | 🟢 Green | `continue` | Story requirements unclear — continue with best effort? |
|
|
888
911
|
| `review-gate` | 🟢 Green | `continue` | Code review checkpoint before proceeding |
|
|
889
912
|
|
|
@@ -913,7 +936,7 @@ nax can pause execution and prompt you for decisions at critical points. Configu
|
|
|
913
936
|
|
|
914
937
|
Extend nax with custom reviewers, reporters, or integrations.
|
|
915
938
|
|
|
916
|
-
**Project plugins** (
|
|
939
|
+
**Project plugins** (`.nax/config.json`):
|
|
917
940
|
|
|
918
941
|
```json
|
|
919
942
|
{
|
|
@@ -976,35 +999,85 @@ nax precheck -f my-feature
|
|
|
976
999
|
|
|
977
1000
|
**Run stopped mid-way**
|
|
978
1001
|
|
|
979
|
-
nax saves progress in
|
|
1002
|
+
nax saves progress in `.nax/features/<name>/prd.json`. Re-run with the same command — completed stories are skipped automatically.
|
|
980
1003
|
|
|
981
1004
|
---
|
|
982
1005
|
|
|
983
1006
|
## PRD Format
|
|
984
1007
|
|
|
985
|
-
User stories are defined in
|
|
1008
|
+
User stories are defined in `.nax/features/<name>/prd.json`. Typically generated by `nax plan` — but you can write it by hand.
|
|
986
1009
|
|
|
987
1010
|
```json
|
|
988
1011
|
{
|
|
1012
|
+
"project": "my-app",
|
|
989
1013
|
"feature": "user-auth",
|
|
1014
|
+
"branchName": "feat/user-auth",
|
|
1015
|
+
"createdAt": "2026-01-01T00:00:00.000Z",
|
|
1016
|
+
"updatedAt": "2026-01-01T00:00:00.000Z",
|
|
990
1017
|
"userStories": [
|
|
991
1018
|
{
|
|
992
1019
|
"id": "US-001",
|
|
993
1020
|
"title": "Add login endpoint",
|
|
994
|
-
"description": "POST /auth/login
|
|
1021
|
+
"description": "POST /auth/login accepts email + password, returns signed JWT on success",
|
|
995
1022
|
"acceptanceCriteria": [
|
|
996
|
-
"Returns JWT on
|
|
997
|
-
"Returns 401 on invalid credentials"
|
|
1023
|
+
"Returns 200 + JWT on valid credentials",
|
|
1024
|
+
"Returns 401 on invalid credentials",
|
|
1025
|
+
"Rate-limits to 5 attempts per minute"
|
|
998
1026
|
],
|
|
999
|
-
"complexity": "medium",
|
|
1000
1027
|
"tags": ["auth", "security"],
|
|
1001
|
-
"
|
|
1028
|
+
"dependencies": [],
|
|
1029
|
+
"status": "pending",
|
|
1030
|
+
"passes": false,
|
|
1031
|
+
"attempts": 0,
|
|
1032
|
+
"escalations": [],
|
|
1033
|
+
"contextFiles": ["src/auth/types.ts"],
|
|
1034
|
+
"expectedFiles": ["src/auth/login.ts", "test/auth/login.test.ts"]
|
|
1035
|
+
},
|
|
1036
|
+
{
|
|
1037
|
+
"id": "US-002",
|
|
1038
|
+
"title": "Update changelog",
|
|
1039
|
+
"description": "Add v1.0 entry to CHANGELOG.md",
|
|
1040
|
+
"acceptanceCriteria": ["CHANGELOG.md has v1.0 section"],
|
|
1041
|
+
"tags": ["docs"],
|
|
1042
|
+
"dependencies": [],
|
|
1043
|
+
"status": "pending",
|
|
1044
|
+
"passes": false,
|
|
1045
|
+
"attempts": 0,
|
|
1046
|
+
"escalations": [],
|
|
1047
|
+
"routing": {
|
|
1048
|
+
"complexity": "simple",
|
|
1049
|
+
"testStrategy": "no-test",
|
|
1050
|
+
"noTestJustification": "Docs-only change — no executable code",
|
|
1051
|
+
"reasoning": "Pure documentation update"
|
|
1052
|
+
}
|
|
1002
1053
|
}
|
|
1003
1054
|
]
|
|
1004
1055
|
}
|
|
1005
1056
|
```
|
|
1006
1057
|
|
|
1007
|
-
|
|
1058
|
+
**Key fields:**
|
|
1059
|
+
|
|
1060
|
+
| Field | Required | Description |
|
|
1061
|
+
|:------|:---------|:------------|
|
|
1062
|
+
| `id` | ✅ | Story ID — must be unique (e.g. `US-001`) |
|
|
1063
|
+
| `title` | ✅ | Short story title |
|
|
1064
|
+
| `description` | ✅ | What needs to be built |
|
|
1065
|
+
| `acceptanceCriteria` | ✅ | Testable outcomes — used for acceptance tests |
|
|
1066
|
+
| `tags` | ✅ | Routing hints that influence complexity classification and test strategy selection. Security tags (`auth`, `security`, `jwt`, `oauth`, `rbac`, etc.) and public-API tags (`public-api`, `endpoint`, `sdk`, etc.) force `three-session-tdd`. UI/integration tags (`ui`, `layout`, `cli`, `integration`) prefer `three-session-tdd-lite`. |
|
|
1067
|
+
| `dependencies` | ✅ | Story IDs that must pass before this one runs |
|
|
1068
|
+
| `status` | ✅ | `pending` \| `in-progress` \| `passed` \| `failed` \| `skipped` \| `blocked` \| `paused` |
|
|
1069
|
+
| `passes` | ✅ | `true` once all ACs pass — set by nax, not manually |
|
|
1070
|
+
| `attempts` | ✅ | Retry counter — set by nax |
|
|
1071
|
+
| `escalations` | ✅ | Escalation history — set by nax |
|
|
1072
|
+
| `contextFiles` | optional | Files pre-loaded into agent prompt |
|
|
1073
|
+
| `expectedFiles` | optional | Files that must exist after execution (pre-flight gate) |
|
|
1074
|
+
| `workdir` | optional | Package subdirectory for monorepo stories (e.g. `packages/api`) |
|
|
1075
|
+
| `routing` | optional | Pre-set routing — skip LLM classification if provided |
|
|
1076
|
+
| `routing.testStrategy` | optional | Override test strategy (e.g. `no-test`, `tdd-simple`). Only honored when `routing.contentHash` is absent — omit `contentHash` to prevent the LLM classifier from overriding your manual value. |
|
|
1077
|
+
| `routing.noTestJustification` | required if `no-test` | Explain why no tests are needed |
|
|
1078
|
+
| `storyPoints` | optional | Estimate (default: 1) |
|
|
1079
|
+
|
|
1080
|
+
> **Tip:** Use `"status": "passed"` to manually skip a story that's already done.
|
|
1008
1081
|
|
|
1009
1082
|
---
|
|
1010
1083
|
|