Skip to content

feat(workflows): add plugin slots - #4352

Open
markuswondrak wants to merge 3 commits into
github:mainfrom
markuswondrak:feat/workflow-plugin-slots
Open

feat(workflows): add plugin slots#4352
markuswondrak wants to merge 3 commits into
github:mainfrom
markuswondrak:feat/workflow-plugin-slots

Conversation

@markuswondrak

Copy link
Copy Markdown
Contributor

Summary

Adds the upstream opt-in plugin workflow slot described in Discussion #3473, building on the standalone WorkflowResolver introduced by #3557.

  • Registers a stateless plugin step that persists an unfilled named slot as skipped with output.slot.
  • Allows project overlays to fill slots through the existing ID-anchored replace operation, without changing resolver or merge semantics.
  • Rejects slots inside fan-out.step templates because runtime-multiplied templates are not addressable overlay anchors.
  • Adds engine, resolver-attribution, bundled-reference, documentation, and manual testing-guide coverage.

Validation

  • .venv/bin/python -m pytest tests/workflows/ tests/test_workflows.py -v
  • .venv/bin/python -m pytest tests/unit/test_bundler_references.py -v
  • .venv/bin/python -m pytest tests/test_presets.py -v
  • Manual disposable-project smoke: unfilled state, overlay replacement, persisted state, and resolver attribution.

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

Copilot AI balanced review requested due to automatic review settings August 27, 2026 08:15
@markuswondrak
markuswondrak requested a review from mnriem as a code owner August 27, 2026 08:15

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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 plugin step.
  • 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.

Comment thread spec/workflow_overlays/OVERLAY_TESTING_GUIDE.md Outdated
Assisted-by: GitHub Copilot (model: gpt-5.6-terra, autonomous)
@markuswondrak
markuswondrak force-pushed the feat/workflow-plugin-slots branch from e3b7f59 to 3247ceb Compare August 27, 2026 08:23
Copilot AI review requested due to automatic review settings August 27, 2026 08:23

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated no new comments.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated no new comments.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 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

Comment thread src/specify_cli/workflows/steps/plugin/__init__.py

@mnriem mnriem left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Please address Copilot feedback

Markus added 2 commits September 2, 2026 10:06
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)
Copilot AI review requested due to automatic review settings September 2, 2026 08:47

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approval recommended

The implementation consistently enforces the slot contract and includes comprehensive automated coverage.

Review details
  • Files reviewed: 10/10 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@markuswondrak
markuswondrak requested a review from mnriem September 2, 2026 11:01
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