Repository navigation
Description
Problem Statement
The bundled speckit workflow (1.0.1) and the catalog bugfix workflow (1.0.0) declare no verdict_input on any gate. docs/workflow-steps/types.md, "Gate Verdict Inputs", says that with no verdict input a gate "prompts on a TTY; pauses otherwise". A run started where there is no terminal can therefore pause at a gate but can never get past it. Examples are a GitHub Actions job, or an agent session that drives specify workflow run and specify workflow resume. Each resume pauses again at the same gate.
An overlay cannot add the input: docs/workflows/overlays.md, Limitations: "Overlays cannot add new inputs or change the input schema of the base workflow." Workflow composition does not help either. "Calling a Child Gate" maps a root input only to a child gate that already declares verdict_input. So the only way to answer these gates without a terminal is to copy the bundled workflow and add the inputs.
Two smaller observations from the same setup (Specify CLI 1.3.0 on Windows):
- When stdin is redirected from
/dev/null(WindowsNUL),sys.stdin.isatty()returnsTrue. The gate then prompts, reads end of input, and falls back to a rejection, so the run aborts instead of pausing. An empty pipe (: | specify workflow run ...) pauses as documented. docs/workflow-steps/types.mddoes not say whether a gate may have options other than approve, edit and reject, or which option nameson_rejectapplies to.
Proposed Solution
Declare an optional verdict input for each gate in the bundled and catalog workflows, with a default of "", so the current behaviour (prompt on a TTY, pause otherwise) is unchanged. For example, for speckit:
inputs:
spec_verdict: {type: string, enum: ["", approve, reject], default: ""}
plan_verdict: {type: string, enum: ["", approve, reject], default: ""}
steps:
- id: review-spec
type: gate
# ...unchanged...
verdict_input: spec_verdictThen specify workflow resume <run_id> --input spec_verdict=approve works with no terminal. The same applies to review-assessment in bugfix.
Alternatives Considered
- An overlay: not possible, because overlays cannot add inputs.
- A project-authored copy of the workflow with the inputs added. This works, and it is what we do now, but the copy has to be compared against every release.
- Answering gates only at a terminal. This rules out unattended runs.
Component
Agent integrations (command files, workflows)
Use Cases
- A CI job that starts a workflow run and resumes it when a reviewer gives an answer, for example with a label on an issue.
- An agent session that orchestrates runs and passes a reviewer's verdict on resume.
Acceptance Criteria
specify workflow resume <run_id> --input <gate>_verdict=approvepasses each gate of the bundledspeckitand catalogbugfixwith no TTY.- With the input empty or absent, behaviour is unchanged.
Additional Context
Specify CLI 1.3.0; docs read at f29319d.
AI Disclosure
Drafted by Claude Code (model Claude Opus 5.5, auto permission mode) for the repository owner, who directed that this request be filed. The facts were checked by running the CLI: gate pause and resume with and without a verdict input, and the NUL versus empty-pipe stdin behaviour.
Activity