feat: quick-dev fast lane — per-story quick-dev under full profiles (default OFF)#9
Merged
Merged
Conversation
… profiles (default OFF) Opt-in per-story routing of LOW-RISK stories through bmad-quick-dev (one-shot) under small/medium/large profiles, while substantial stories keep the mandatory 7-step BMAD cycle. Off by default; the installer prompts to enable it and for the max_ac size gate. Routing: a fast-laned story runs bmad-create-story FIRST (PREPARE_STORY_BRANCH -> CREATE_STORY -> NANO_QUICK_DEV) so the pre-story gate has a real story file to enforce its guardrails; nano still skips create-story (distinguished by fast_lane_active). The decision is locked at NANO_QUICK_DEV so quick-dev's post-impl File List can't flip it off. Gate (new pure fast-lane-gate.js): deterministic, conservative (defaults `full` on any uncertainty). deny-globs (auth/migrations/secrets) beat an explicit fast tag; an AC-count budget beats it too; inference only fires when every declared path is allow-listed; explicit story-file tags and epic/plan tags (sprint-plan.yaml) can force the decision, story-file winning. Every routing choice is a fast_lane_decision ledger entry. Manual marks (highest authority): a user marks a story/epic fast|full|auto in chat (set_fast_lane UserCommand), via `autopilot fast-lane <key> <fast|full|auto>`, or during /sprintpilot-plan-sprint. Marks persist in a Sprintpilot-owned, clobber-resistant fast-lane-overrides.json (survives re-plan). A `fast` mark wins over the gate (deny-globs/size/tags) and applies even when the lane is globally off; only fast_lane_forced_full still overrides it, to prevent a fast->fail->fast loop. Escalation net: a quick-dev hard failure re-runs the full cycle from CREATE_STORY; a success that flags failing tests / high severity routes to CODE_REVIEW (the adversarial review the fast lane skipped) — a done story survives re-resolution there but not at CREATE_STORY. Both record the story in fast_lane_forced_full (a write-through CRITICAL_KEY) so it never re-fast-lanes, and carry a phase-appropriate escalation note. nano_quick_dev is wall-clock budgeted under full profiles. Observability: report.js + `autopilot progress` show fast-laned / kept-full / escalated counts and the current story's decision. Hardened across six adversarial review rounds. Docs: README, AGENTS, CONFIGURATION, USAGE, ARCHITECTURE, Sprintpilot.md, workflow contracts. Tests: ~110 unit/integration cases + an opt-in e2e scenario. 2382 pass, Biome clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
| re += c; | ||
| } | ||
| } | ||
| return new RegExp(`^${re}$`); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Opt-in (default OFF) per-story routing of LOW-RISK stories through
bmad-quick-dev(one-shot) undersmall/medium/largeprofiles, while substantial stories keep the mandatory 7-step BMAD cycle. Brings nano's speed to the full profiles per story, with strong guardrails.How it works
bmad-create-storyFIRST (PREPARE_STORY_BRANCH → CREATE_STORY → NANO_QUICK_DEV) so the pre-story gate can judge it from real acceptance criteria + declared paths; nano still skips create-story. The decision is locked atNANO_QUICK_DEVso quick-dev's post-impl File List can't flip it off.fast-lane-gate.js, pure/deterministic): defaultsfullon any doubt; deny-globs (auth/migrations/secrets) and an AC-count budget beat a fast tag; inference only fires when every declared path is allow-listed.CREATE_STORY; a success that flags failing tests / high severity routes toCODE_REVIEW(the adversarial review the fast lane skipped). Both record the story infast_lane_forced_full(write-through CRITICAL_KEY) so it never re-fast-lanes.Configuring fast/full per story or epic
Three ways (docs in CONFIGURATION.md):
autopilot fast-lane <story|epic-<id>> <fast|full|auto>, theset_fast_lanechat command, or/sprintpilot-plan-sprintStep 11c. Persists in clobber-resistantfast-lane-overrides.json(survives re-plan). Afastmark overrides the gate and works even when the lane is off; onlyfast_lane_forced_fullbeats it.fast_lane:/risk:in the.md) — subject to deny-globs + max_ac.sprint-plan.yaml.Safety & observability
Default OFF; installer prompts to enable + set
max_ac. Tests stay required. Every routing choice is afast_lane_decisionledger entry;autopilot progressshows fast-laned / kept-full / escalated counts.Hardening
Developed and hardened across seven independent adversarial review rounds (create-story-first routing, decision lock, success→CODE_REVIEW escalation, ledger-emit fix, installer regex scoping, manual-override precedence). Docs updated across README, AGENTS, CONFIGURATION, USAGE, ARCHITECTURE, Sprintpilot.md, and the orchestrator/planner skill contracts.
Tests
~110 new unit/integration cases (gate truth table, routing, escalation, derive-profile, metrics, overrides store, commands/CLI) + an opt-in e2e scenario. 2384 pass, Biome clean, all source
node --checkclean.🤖 Generated with Claude Code