feat: add feature-assess agentic workflow that installs and runs Spec Kit - #4186
Conversation
… Kit Add a gh-aw agentic workflow (Copilot engine) that, when an issue is labeled `feature-assess`, installs the Spec Kit CLI, initializes it for Copilot, installs the `assess` extension, and runs its five-stage idea-assessment pipeline (intake → research → define → shape → decide) against the issue. Setup and execution are captured entirely as prose the agent runs with its bash tools — no imperative steps: block. Each stage's artifact is posted as its own issue comment (summarized if it exceeds the comment size limit), then one verdict label is applied (feature-go / feature-needs-clarification / feature-kill, or feature-invalid). Frontmatter grants the bash commands (uv, specify, curl, …) and network egress (python, github, astral.sh) needed for the prompt-driven install, and pins the Copilot engine. Includes the compiled feature-assess.lock.yml (gh aw compile, v0.79.8). Assisted-by: GitHub Copilot (model: Claude Opus 4.8, autonomous) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2ec8128b-ee80-4222-b58a-570990994454
There was a problem hiding this comment.
Pull request overview
Adds an agentic workflow that installs Spec Kit and assesses labeled feature requests through the five-stage assess pipeline.
Changes:
- Adds label-triggered feature assessment and staged issue comments.
- Configures installation, network access, safety controls, and verdict labels.
- Includes the compiled GitHub Actions workflow.
Show a summary per file
| File | Description |
|---|---|
.github/workflows/feature-assess.md |
Defines the agentic assessment workflow. |
.github/workflows/feature-assess.lock.yml |
Contains the generated executable workflow. |
Review details
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
- Files reviewed: 1/2 changed files
- Comments generated: 3
- Review effort level: Balanced
…ng, network parity Address the three findings from the automated review on github#4186: - Install the Spec Kit CLI from the checked-out revision ($GITHUB_WORKSPACE) instead of the mutable default branch, so each run uses the exact CLI and bundled assess instructions of the workflow commit under evaluation (with a pinned git+…@$GITHUB_SHA fallback). Fixes reproducibility. - On install/network failure, stop and post a comment WITHOUT applying any verdict label; feature-invalid is reserved for unassessable request content, not operational/runner failures. Fixes mislabeling valid requests. - Add gitlab.com, stackoverflow.com, and *.stackexchange.com to network.allowed so the firewall allowlist matches the hosts the prompt permits fetching from. Recompiled feature-assess.lock.yml (gh aw compile, v0.79.8). Assisted-by: GitHub Copilot (model: Claude Opus 4.8, autonomous) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2ec8128b-ee80-4222-b58a-570990994454
|
Addressed all three review findings in b37fa87:
Posted on behalf of @mnriem by GitHub Copilot (model: Claude Opus 4.8), acting autonomously. The commit carries an |
…note Address the two findings from the second automated review on github#4186: - Add gist.github.com to network.allowed. gh-aw domain entries are exact and the github ecosystem does not cover the gist subdomain, so gist fetches the URL policy permits were being blocked by the firewall. Regenerated the lock. - Reword the comment-failure note: add_comment safe outputs are only queued during the agent job and delivered in a later safe_outputs job the agent cannot observe, so it cannot detect or report a post-time delivery failure. Restrict the recovery instruction to queue-time errors and defer delivery failures to the run logs/conclusion. Recompiled feature-assess.lock.yml (gh aw compile, v0.79.8). Assisted-by: GitHub Copilot (model: Claude Opus 4.8, autonomous) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2ec8128b-ee80-4222-b58a-570990994454
|
Addressed both round-2 review findings in 4703672:
Posted on behalf of @mnriem by GitHub Copilot (model: Claude Opus 4.8), acting autonomously. The commit carries an |
…essment Address the finding from the third automated review on github#4186: - add-labels only adds, so re-running the assessment (feature-assess removed and re-added) could leave a stale feature-* verdict alongside the new one. Configure remove-labels for all four verdict labels and instruct Step 7 to strip any existing verdict label before adding the current result, so the issue always carries exactly one feature-* verdict (feature-invalid included). Recompiled feature-assess.lock.yml (gh aw compile, v0.79.8). Assisted-by: GitHub Copilot (model: Claude Opus 4.8, autonomous) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2ec8128b-ee80-4222-b58a-570990994454
|
Addressed the round-3 review finding in 4a45f25: Verdict label exclusivity —
Posted on behalf of @mnriem by GitHub Copilot (model: Claude Opus 4.8), acting autonomously. The commit carries an |
There was a problem hiding this comment.
Review details
Suppressed comments (3)
Previously missed (2) — in code that hasn't changed since the last review.
.github/workflows/feature-assess.md:167
- This claims to apply the assess extension's URL policy faithfully, but the extension also allowlists
bitbucket.org,*.atlassian.net,linear.app,notion.so,*.notion.site, anddocs.google.com(extensions/assess/commands/speckit.assess.intake.md:67andspeckit.assess.research.md:40). The copied list andnetwork.allowedomit all six, so valid issue sources accepted by the real stages will instead be skipped or firewall-blocked. Align both lists with the extension (then regenerate the lock file), or explicitly document that this workflow intentionally narrows the extension policy rather than saying it follows it exactly.
- Fetch without prompting only for widely-used public hosts (`github.com`,
`gist.github.com`, `gitlab.com`, `stackoverflow.com`, `*.stackexchange.com`).
For any other host, do **not** fetch; record
`[UNVERIFIED — fetch skipped: host not on safe list: <host>]` and continue.
.github/workflows/feature-assess.md:199
- This hard-codes a dot-separated command, but Step 2 initializes Copilot in its default skills mode. In that mode
CopilotIntegration.build_command_invocation()emits/speckit-specify(src/specify_cli/integrations/copilot/__init__.py:326-339), and the installed decide command resolves its placeholder to that form. Keeping/speckit.specifyhere can make the generated handoff point users at a command that does not exist.
This issue also appears on line 253 of the same file.
the handoff summary to `/speckit.specify`. Honour the command's downgrade
.github/workflows/feature-assess.md:253
- The workflow uses Copilot's default skills layout, whose specification command is
/speckit-specify, not/speckit.specify(src/specify_cli/integrations/copilot/__init__.py:326-339). This verdict guidance should use the same invocation as the installed skill so the label's handoff instruction is actionable.
- `feature-go` — verdict is **go** (ready to hand off to `/speckit.specify`).
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Balanced
What
Adds a GitHub agentic workflow (gh-aw, Copilot engine) that runs the Spec Kit
assessextension's idea-assessment pipeline against a feature-request issue. Labeling an issuefeature-assesstriggers an agent that:uv tool install specify-cli --from git+…, withpip/uv-installer fallbacks)specify init --here --integration copilot)assessextension (specify extension add assess)The whole install-and-run sequence is captured as prose in the workflow body (no imperative
steps:block) and executed by the agent with its bash tools — marrying the GitHub Actions agentic harness with Spec Kit itself.Files
.github/workflows/feature-assess.md— workflow source.github/workflows/feature-assess.lock.yml— compiled withgh aw compile(v0.79.8); do not hand-editFrontmatter config
engine: copilot; trigger gated on thefeature-assesslabeluv,specify,curl,pip,git, …network.allowed: [defaults, github, python, astral.sh]so the sandbox firewall permits the CLI installsafe-outputs: up to 5 comments + 1 labelRequired labels
feature-assess,feature-go,feature-needs-clarification,feature-kill,feature-invalid(already created on this repo).Verdict labels
feature-go·feature-needs-clarification·feature-kill(orfeature-invalidwhen unassessable).Validation
Compiles cleanly (
0 error(s), 0 warning(s)). The prompt-driven CLI install runs against the runner's live network/toolchain, so the first labeled-issue run on this repo is the true end-to-end validation — it has not yet executed live.🤖 This pull request was created by GitHub Copilot (model: Claude Opus 4.8), acting autonomously on behalf of @mnriem. The branch, commit, and this description were agent-generated; the commit carries an
Assisted-by:trailer.