Skip to content

[Feature]: Declare verdict inputs on the gates of the bundled speckit and catalog bugfix workflows #5389

Open

Description

@mcowdell-westmar

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 (Windows NUL), sys.stdin.isatty() returns True. 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.md does not say whether a gate may have options other than approve, edit and reject, or which option names on_reject applies 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_verdict

Then 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=approve passes each gate of the bundled speckit and catalog bugfix with 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

  1. added
    triage-can-waitVerdict: valid and in-scope but deprioritized; held behind the evidence gate
    on Nov 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    triage-can-waitVerdict: valid and in-scope but deprioritized; held behind the evidence gate

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions