Skip to content

feat(fast-feature): run unattended by replacing both human gates - #92

Open
AndreJorgeLopes wants to merge 2 commits into
mainfrom
feat/fast-feature-unattended
Open

AndreJorgeLopes wants to merge 2 commits into
mainfrom
feat/fast-feature-unattended

Conversation

@AndreJorgeLopes

Copy link
Copy Markdown
Owner

fast-feature stopped 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

Where Gate
Step 2 Ambiguity in the ACs sent it into /devflow:brainstorming, an interactive loop
Step 5 The test inventory needed explicit user approval before implementation could start
Step 6 phase-handoff gated the spawn on a one-click AskUserQuestion

What 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-handoff gains --unattended to skip the spawn gate. If the runtime cannot spawn a session without a click at all, fast-feature continues into /devflow:executing-plans in the same session and says so in its report rather than hanging.

Verification

make test passes. The first run failed on skills-check because the generated devflow-plugin/ copies were stale, which is the check doing its job; make skills-sync regenerated 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.

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.
Copilot AI lite review requested due to automatic review settings August 26, 2026 13:53

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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 --unattended behavior to phase-handoff documentation to allow skipping the one-click AskUserQuestion gate.
  • Rework fast-feature guidance 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-feature with 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.

Comment on lines +105 to 109
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
```
Comment on lines +105 to 109
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
```
Comment on lines +104 to 108
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>

Copilot AI commented Aug 26, 2026

Copy link
Copy Markdown

🟡 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 des...

Addressed in 1e40cf9: Step 6 now invokes devflow:phase-handoff --phase lock-tests --next-phase impl --unattended, and the closing report text now conditionally covers both outcomes (spawned session vs in-session execution).

@@ -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.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

test

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants