feat(workflows): add plugin slots - #4352
Conversation
There was a problem hiding this comment.
Pull request overview
Adds opt-in plugin slots to workflows, enabling project overlays to replace upstream extension points safely.
Changes:
- Registers and validates the stateless
pluginstep. - Persists unfilled slots as skipped and rejects fan-out placement.
- Adds automated tests and user documentation.
Reviewed changes
Copilot reviewed 11 out of 11 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
src/specify_cli/workflows/__init__.py |
Registers the plugin step. |
src/specify_cli/workflows/engine.py |
Validates plugin types and fan-out restrictions. |
src/specify_cli/workflows/steps/plugin/__init__.py |
Implements plugin-slot behavior. |
tests/workflows/test_plugin_step.py |
Tests validation, execution, overlays, and attribution. |
tests/unit/test_bundler_references.py |
Covers bundled plugin references. |
tests/test_workflows.py |
Updates built-in registry expectations. |
docs/reference/workflows.md |
Documents plugin-slot usage. |
workflows/README.md |
Adds the plugin step overview. |
workflows/PUBLISHING.md |
Adds plugin to publishing validation. |
workflows/ARCHITECTURE.md |
Updates workflow architecture documentation. |
spec/workflow_overlays/OVERLAY_TESTING_GUIDE.md |
Adds a manual validation walkthrough. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Assisted-by: GitHub Copilot (model: gpt-5.6-terra, autonomous)
e3b7f59 to
3247ceb
Compare
There was a problem hiding this comment.
🟡 Changes recommended
Fan-out exclusion is not enforced when workflows execute without prior validation.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
- Files reviewed: 10/10 changed files
- Comments generated: 1
- Review effort level: Balanced
mnriem
left a comment
There was a problem hiding this comment.
Please address Copilot feedback
Mirror GateStep's inside_fan_out check so plugin slots inside fan-out templates fail at execution time, not only at static validation. This closes the gap when WorkflowEngine.execute() is called without prior validation. Assisted-by: opencode (model: qwen3.7-max, supervised)
|
The feature should use workflow slot terminology rather than “plugin slot.” This is a reserved no-op position replaced through a workflow overlay; it does not register or resolve plugins. “Extension point” could also be confused with Spec Kit extensions. Please rename the public API consistently:
This also preserves “plugin” for any future genuine plugin mechanism. Posted on behalf of @mnriem by GitHub Copilot (model: GPT-5.6 Sol). |
There was a problem hiding this comment.
🟢 Approval recommended
The implementation matches the documented slot contract and includes focused coverage for execution, validation, overlays, and attribution.
Review details
- Files reviewed: 10/10 changed files
- Comments generated: 0 new
- Review effort level: Balanced
mnriem
left a comment
There was a problem hiding this comment.
Please address my feedback in regards to the naming. Thanks!
Summary
Adds the upstream opt-in plugin workflow slot described in Discussion #3473, building on the standalone WorkflowResolver introduced by #3557.
Validation
Scope
No new CLI verbs, PresetResolver changes, shared helper extraction, resolver/merge behavior changes, bundled workflow slot, or status-color change.
Posted on behalf of @markuswondrak by GitHub Copilot (model: gpt-5.6-terra, autonomous).