Repository navigation
feat(fast-feature): run unattended by replacing both human gates - #92
AndreJorgeLopes wants to merge 2 commits into
Conversation
fast-feature had two points where it stopped and waited for a person: the ambiguity brainstorm in step 2, and the test-inventory approval in step 5, plus the one-click spawn gate inherited from phase-handoff. Neither gate is removed, both are re-implemented so they do not need a human: - Ambiguity the codebase can settle is now decided and recorded in the spec's decision log, where review can overturn it, instead of asked about. A fork that genuinely needs a product or cross-team answer is reported as a blocker rather than guessed at, which is the one case that still stops the run. - The test-inventory approval is given by an independent reviewer subagent that did not write the tests, checking AC coverage, that each test fails for the right reason, that none is tautological, and that nothing exceeds scope. Self-approval stays forbidden; a human was only ever one way to get a second pair of eyes. phase-handoff gains --unattended so the spawn gate can be skipped for runs that must not block, and fast-feature falls through to executing-plans in-session if the runtime cannot spawn without a click.
There was a problem hiding this comment.
🟡 Changes recommended
The fast-feature Step 6 invocation still omits --unattended (and the reporting language is unconditional), which undermines the new unattended/non-blocking behavior described by the PR.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Updates the devflow “fast-feature” workflow so it can run unattended end-to-end for already-specced tickets by removing mid-run human interaction points while keeping equivalent safeguards (recorded ambiguity decisions, independent test-inventory review, and an optional handoff gate bypass).
Changes:
- Add
--unattendedbehavior tophase-handoffdocumentation to allow skipping the one-clickAskUserQuestiongate. - Rework
fast-featureguidance to resolve ambiguity from repo context (or stop on true blockers) instead of entering an interactive brainstorming loop. - Replace the Phase 1.8 human approval expectation in
fast-featurewith an independent reviewer subagent requirement, and document a no-human-click spawn fallback.
File summaries
| File | Description |
|---|---|
| skills/phase-handoff/SKILL.md | Documents --unattended to skip the one-click handoff gate before spawning the next session. |
| skills/fast-feature/SKILL.md | Reframes fast-feature as unattended: resolves ambiguity from codebase, uses independent reviewer for test-inventory gate, and expects unattended phase handoff. |
| devflow-plugin/skills/phase-handoff/SKILL.md | Generated plugin copy of the phase-handoff skill updated to match --unattended behavior. |
| devflow-plugin/skills/fast-feature/SKILL.md | Generated plugin copy of fast-feature updated to match unattended workflow guidance. |
| devflow-plugin/commands/phase-handoff.md | Generated command doc updated to include --unattended semantics in the description and steps. |
| devflow-plugin/commands/fast-feature.md | Generated command doc updated to match unattended fast-feature guidance. |
Review details
- Files reviewed: 6/6 changed files
- Comments generated: 3
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| This is the ONLY phase boundary that spawns a new session. After the reviewer approves, invoke: | ||
|
|
||
| ``` | ||
| devflow:phase-handoff --phase lock-tests --next-phase impl | ||
| ``` |
| This is the ONLY phase boundary that spawns a new session. After the reviewer approves, invoke: | ||
|
|
||
| ``` | ||
| devflow:phase-handoff --phase lock-tests --next-phase impl | ||
| ``` |
| This is the ONLY phase boundary that spawns a new session. After the reviewer approves, invoke: | ||
|
|
||
| ``` | ||
| devflow:phase-handoff --phase lock-tests --next-phase impl | ||
| ``` |
Co-authored-by: AndreJorgeLopes <17115089+AndreJorgeLopes@users.noreply.github.com>
Addressed in 1e40cf9: Step 6 now invokes |
| @@ -1,10 +1,12 @@ | |||
| --- | |||
| description: [0.28.0] Use when driving a single already-specced ticket through devflow in one session — a quick ambiguity-only brainstorm, then spec, plan, and lock-tests back-to-back, spawning a new session only for the execute phase. Also the per-ticket driver that orchestrate-epic invokes. | |||
| description: [0.28.0] Use when driving a single already-specced ticket through devflow in one session, unattended, resolving ambiguity from the codebase rather than by asking, then spec, plan, and lock-tests back-to-back with an independent reviewer standing in for the human gate, spawning a new session only for the execute phase. Also the per-ticket driver that orchestrate-epic invokes. | |||
fast-featurestopped and waited for a person in two places, plus a third it inherited. That made it unusable for the case it was built for: driving a queue of already-specced tickets without a human sitting there.What was blocking
/devflow:brainstorming, an interactive loopphase-handoffgated the spawn on a one-clickAskUserQuestionWhat changed
Neither gate is deleted. Both are re-implemented so they do not need a human.
Ambiguity is decided, not asked about. If the codebase can settle a fork, it settles it, and the choice plus its rationale go into the spec's decision log where review can overturn it in one comment. If a fork genuinely needs a product decision or another team's answer, it stops and reports a blocker rather than guessing. That is the one case that still halts a run, and it should.
The test-inventory approval moves to an independent reviewer subagent that did not write the tests. It checks that every acceptance criterion has a test, that each test fails today for the right reason, that none is tautological (would it pass before the change), and that nothing exceeds the ticket's scope. Self-approval stays forbidden. The point of that gate was always a second pair of eyes, and a human was only ever one way to get them.
phase-handoffgains--unattendedto skip the spawn gate. If the runtime cannot spawn a session without a click at all,fast-featurecontinues into/devflow:executing-plansin the same session and says so in its report rather than hanging.Verification
make testpasses. The first run failed onskills-checkbecause the generateddevflow-plugin/copies were stale, which is the check doing its job;make skills-syncregenerated them and they are committed here alongside the sources.Note
The reviewer step assumes the running harness can dispatch a subagent. Where it cannot, the honest fallback is to stop at the inventory and report, not to self-approve. That is stated in the skill.