plugins(workflow-orchestration): scaffold 4 pipeline plugins (board, backend, blocked, refinement)#26
Conversation
…cJZGZB)
Adds the four OpsAgents pipeline skills to the public marketplace:
- board-pipeline — drain To Do → Code Review
- backend-pipeline — Blocked + In Progress + To Do sweep, cli-dev safety stack
- blocked-pipeline — gate-state decision tree for the Blocked column
- board-refinement — production-readiness audit (4 stages, 2 adversarial-review dynamic-workflow opt-ins)
Each plugin is a fresh marketplace directory with the canonical layout:
plugins/<name>/
.claude-plugin/plugin.json v0.2.0, MIT, SOSA level 2
README.md identity + install + sister-plugin links
skills/<name>/SKILL.md mirror of OpsAgentsAI/skills-and-plugins canonical
SKILL.md content is the Phase-1 + Card-4 canonical (with Cowork-private
paths normalized: ~/Documents/Claude/CLAUDE.md → ~/CLAUDE.md, memory paths
generalized, /Users/michalshatz/ refs replaced with ~/...).
Root README gains a new "Workflow Orchestration" section above Mobile devs,
with a callout sentence linking the dynamic-workflows architecture doc per
Card 6 AC #2.
This unblocks card x5cJZGZB by giving its mirror push a destination. Once
this PR merges, the OpsAgentsAI/skills-and-plugins#88 SKILL.md edits can
re-mirror to these public skill paths via standard skills-sync.
Card: https://trello.com/c/x5cJZGZB
Architecture: https://www.notion.so/Dynamic-Workflows-in-OpsAgents-Pipelines-Architecture-36f38b5dfb27815480cafb6011f94b0e
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Code Review
This pull request introduces four new workflow orchestration plugins (backend-pipeline, blocked-pipeline, board-pipeline, and board-refinement) along with their respective skill definitions and documentation, and updates the main README.md. The review feedback highlights several logical contradictions and inconsistencies within the newly added SKILL.md files. These include conflicting instructions on whether still-gated cards can be left in the Blocked column or must be routed to the Backlog, missing recap categories, mismatched stage references between sister pipelines, and a dynamic-workflow prompt that lacks the required adversarial structure.
| @@ -0,0 +1,69 @@ | |||
| --- | |||
| name: blocked-pipeline | |||
| description: "Walk the Blocked column on a Trello board — for each card, verify whether its gate has cleared and either release, leave, archive, or rescope. Loops until every blocked card has been decisioned." | |||
There was a problem hiding this comment.
The description states that the pipeline will "either release, leave, archive, or rescope" blocked cards. However, step 5d explicitly states that "Leave in Blocked" is invalid and that still-gated cards must be routed to the Backlog (with minor exceptions for active operator gates). The description should be updated to reflect "route to Backlog" instead of "leave" to avoid contradicting the actual acceptance criteria.
| description: "Walk the Blocked column on a Trello board — for each card, verify whether its gate has cleared and either release, leave, archive, or rescope. Loops until every blocked card has been decisioned." | |
| description: "Walk the Blocked column on a Trello board — for each card, verify whether its gate has cleared and either release, archive, rescope, or route to Backlog. Loops until every blocked card has been decisioned." |
|
|
||
| Board: $ARGUMENTS | ||
|
|
||
| You are running Michal's on-demand **Blocked-column pipeline** against the board above. Goal: drain the 🚧 Blocked / 🚫 Blocked list by deciding each card — release the ones whose gates have cleared, archive the ones whose work is now obsolete, leave the ones that are still genuinely gated. Per `~/CLAUDE.md` autonomy rule: make the call and ship. |
There was a problem hiding this comment.
The goal statement says "leave the ones that are still genuinely gated". This contradicts step 5d, which states that "Leave in Blocked" is invalid and that still-gated cards must be routed to the Backlog. The goal statement should be updated to clarify that still-gated cards are routed to the Backlog.
| You are running Michal's on-demand **Blocked-column pipeline** against the board above. Goal: drain the 🚧 Blocked / 🚫 Blocked list by deciding each card — release the ones whose gates have cleared, archive the ones whose work is now obsolete, leave the ones that are still genuinely gated. Per `~/CLAUDE.md` autonomy rule: make the call and ship. | |
| You are running Michal's on-demand **Blocked-column pipeline** against the board above. Goal: drain the 🚧 Blocked / 🚫 Blocked list by deciding each card — release the ones whose gates have cleared, archive the ones whose work is now obsolete, or route still-gated cards to Backlog. Per CLAUDE.md autonomy rule: make the call and ship. |
|
|
||
| e. **No skipping the LinkedIn ToS cluster.** If the gate references the LinkedIn ToS addendum card (recruiter `jSiJw3oQ` or any future equivalent), only release when that card is in Done — never on memory alone. ToS gates are legal-shaped; the lawyer signoff is the hard requirement. | ||
|
|
||
| 6. **Recap.** Print a `🔀 BLOCKED PIPELINE` block listing every card touched, one line each, grouped by decision: Released / Archived / Rescoped / Left / Needs Michal. Include shortUrls. **Token spend per dynamic-workflow invocation** is logged in the recap (runtime-sourced — surfaces runaway fan-outs before they eat the day's budget). Mirror the recap to the board's Runner Log card if one exists; otherwise post once on the most-recently-touched card. |
There was a problem hiding this comment.
The recap groups list Left as a category, but do not include a category for cards that were routed to the Backlog (which is the required action for still-gated cards per step 5d). Consider updating the recap groups to include Backlog or Routed to Backlog to ensure all decisions are properly accounted for.
| 6. **Recap.** Print a `🔀 BLOCKED PIPELINE` block listing every card touched, one line each, grouped by decision: Released / Archived / Rescoped / Left / Needs Michal. Include shortUrls. **Token spend per dynamic-workflow invocation** is logged in the recap (runtime-sourced — surfaces runaway fan-outs before they eat the day's budget). Mirror the recap to the board's Runner Log card if one exists; otherwise post once on the most-recently-touched card. | |
| 6. **Recap.** Print a BLOCKED PIPELINE block listing every card touched, one line each, grouped by decision: Released / Archived / Rescoped / Routed to Backlog / Left / Needs Michal. Include shortUrls. **Token spend per dynamic-workflow invocation** is logged in the recap (runtime-sourced — surfaces runaway fan-outs before they eat the day's budget). Mirror the recap to the board's Runner Log card if one exists; otherwise post once on the most-recently-touched card. |
|
|
||
| 4. **Scope of this pipeline = To Do columns only.** Process every card in `To Do` (and any `To Do — *` splits like `To Do — Core` / `To Do — Front`). Skip 🚧 Blocked entirely. Do NOT touch Code Review, Deploy Staging, QA, Deploy Prod, or Done — cards already in those columns are out of scope and stay where they are. The pipeline's only job is: drain To Do → Code Review. | ||
|
|
||
| **Why Code Review is out of scope (isolation rule, 2026-05-29 lesson).** The Claude session that wrote a PR cannot independently review its own PR — same-context = confirmation bias. Fresh-context Task-dispatched review belongs to `/board-refinement` Stage 1.5, which runs in a separate session with no visibility into the authoring transcript. `/board-pipeline` ships cards INTO Code Review; `/board-refinement` drains Code Review OUT. Mixing the two collapses the isolation gap and re-introduces the same-session review failure mode (`/opsagents-cto` Delivery Protocol §3). |
There was a problem hiding this comment.
This line references /board-refinement Stage 1.5, but the board-refinement skill definition only defines Stages 1 through 5 (with Stage 2 being the CTO deploy-gate verdict). To maintain consistency across skills, this reference should be updated to point to Stage 2.
| **Why Code Review is out of scope (isolation rule, 2026-05-29 lesson).** The Claude session that wrote a PR cannot independently review its own PR — same-context = confirmation bias. Fresh-context Task-dispatched review belongs to `/board-refinement` Stage 1.5, which runs in a separate session with no visibility into the authoring transcript. `/board-pipeline` ships cards INTO Code Review; `/board-refinement` drains Code Review OUT. Mixing the two collapses the isolation gap and re-introduces the same-session review failure mode (`/opsagents-cto` Delivery Protocol §3). | |
| **Why Code Review is out of scope (isolation rule, 2026-05-29 lesson).** The Claude session that wrote a PR cannot independently review its own PR — same-context = confirmation bias. Fresh-context Task-dispatched review belongs to /board-refinement Stage 2, which runs in a separate session with no visibility into the authoring transcript. /board-pipeline ships cards INTO Code Review; /board-refinement drains Code Review OUT. Mixing the two collapses the isolation gap and re-introduces the same-session review failure mode (/opsagents-cto Delivery Protocol §3). |
| - **Optional: dynamic-workflow stale-bug fan-out.** If the To Do column has 10+ cards and most carry file:line bug citations, prompt Claude to spin up a dynamic workflow: | ||
| > "Run a dynamic workflow: one subagent per card in `To Do`. Each subagent fetches the cited file at `?ref=main` via `gh_exec` and greps for the cited pattern. Converge on a verdict per card: STALE (close direct to Done with grep evidence) or LIVE (continue to specialist dispatch). Persist progress per card so an interrupted run resumes from the last verified card." | ||
| Honor rule #19 — each subagent prompt must include `ToolSearch select:gh_exec,trello_exec`. Cap at 20 parallel agents (Trello API budget; cli-gateway proxies through one shared token and 429s above ~30 concurrent). Adversarial reviewer required when the fan-out writes (Done-close), not just reads. |
There was a problem hiding this comment.
The note in line 47 states that an "Adversarial reviewer [is] required when the fan-out writes (Done-close), not just reads." However, the prompt provided in line 46 only spins up "one subagent per card" without any adversarial structure. To satisfy the adversarial requirement, the prompt should be updated to define two adversarial agents per card (one arguing STALE, the other trying to refute).
| - **Optional: dynamic-workflow stale-bug fan-out.** If the To Do column has 10+ cards and most carry file:line bug citations, prompt Claude to spin up a dynamic workflow: | |
| > "Run a dynamic workflow: one subagent per card in `To Do`. Each subagent fetches the cited file at `?ref=main` via `gh_exec` and greps for the cited pattern. Converge on a verdict per card: STALE (close direct to Done with grep evidence) or LIVE (continue to specialist dispatch). Persist progress per card so an interrupted run resumes from the last verified card." | |
| Honor rule #19 — each subagent prompt must include `ToolSearch select:gh_exec,trello_exec`. Cap at 20 parallel agents (Trello API budget; cli-gateway proxies through one shared token and 429s above ~30 concurrent). Adversarial reviewer required when the fan-out writes (Done-close), not just reads. | |
| - **Optional: dynamic-workflow stale-bug fan-out.** If the To Do column has 10+ cards and most carry file:line bug citations, prompt Claude to spin up a dynamic workflow: | |
| > "Run a dynamic workflow: two adversarial agents per card in To Do. One argues the bug is STALE (already fixed on main), the other tries to refute by finding the live bug pattern. Converge on a verdict per card: STALE (close direct to Done with grep evidence) or LIVE (continue to specialist dispatch). Persist progress per card so an interrupted run resumes from the last verified card." | |
| Honor rule #19 — each subagent prompt must include ToolSearch select:gh_exec,trello_exec. Cap at 20 parallel agents (Trello API budget; cli-gateway proxies through one shared token and 429s above ~30 concurrent). Adversarial reviewer required when the fan-out writes (Done-close), not just reads. |
…g rule) Pulls in the 2026-05-29 rule shipped after PR open: /board-pipeline now drains To Do AND In Progress / Doing on every run (the rule lives at canonical OpsAgentsAI/skills-and-plugins:skills/board-pipeline/SKILL.md step 4, with a 'Why In Progress is in scope' paragraph at step 4 + loop-until condition at step 6). Also pulls in board-refinement Stage 1.5 (Code Review drain via fresh-context Task-dispatched review) and the corresponding isolation-rule paragraph in board-pipeline step 4. Card: https://trello.com/c/Qifn7vE6 — rule durable record on opsagents-pipelines Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ective 2026-05-29) Pulls in the rule shipped via canonical SKILL.md + filed as durable record on opsagents-pipelines card MyWi01lz: the prior "operator-gated cred-mint stays in Blocked" carve-out is retired. Every invocation of /blocked-pipeline ends with 🚧 Blocked empty — cred-mint, marketplace, ToS, lawyer-signoff gates all route to 🧊 Backlog with explicit unblock command + recap escalation. Memory file feedback_blocked_pipeline_must_drain.md is already consistent (says routing to Backlog includes operator-step gates). Card: https://trello.com/c/MyWi01lz Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Closing un-merged per Michal directive 2026-05-29 — the SKILL.md content this PR mirrors ships the per-card adversarial-review dynamic-workflow opt-ins that are being rolled back (see OpsAgentsAI/skills-and-plugins#88 closure for the rationale). The 4 plugin scaffold directories themselves remain independently valuable as marketplace destinations — a clean follow-up PR will land them with the canonical (pre-Phase-1, no-adversarial-opt-ins) SKILL.md content + a root README callout pointing at the new Knowledge: https://trello.com/c/z4KW9hQ0 |
Summary
Closes Trello card x5cJZGZB by scaffolding the 4 OpsAgents pipeline skills into the public marketplace.
Why this PR exists: Card x5cJZGZB's AC originally said "mirror the 4 Phase-1 SKILL.md edits to MSApps-Mobile/claude-plugins" — but probing the marketplace showed the destination plugin dirs don't exist (33 existing plugins, none of
board-pipeline/backend-pipeline/blocked-pipeline/board-refinement). So the original scope was wrong; the mirror needs a scaffold first. This PR delivers that scaffold + the SKILL.md mirror in one shipping unit, collapsing what was previously split across Cards 6 + p8mN1V2f.What's in this PR
4 new plugin directories under
plugins/, each with:The four plugins:
board-pipelinebackend-pipelineblocked-pipelineboard-refinementPublic-stripping
Each
skills/<name>/SKILL.mdis the canonical fromOpsAgentsAI/skills-and-pluginswith Cowork-private paths normalized:~/Documents/Claude/CLAUDE.md→~/CLAUDE.md~/Documents/Claude/OpsAgents/CLAUDE.md→<your-project>/CLAUDE.md/Users/michalshatz/.claude/projects/-Users-michalshatz-Documents-Claude/memory/→~/.claude/projects/<project>/memory//Users/michalshatz/.claude/skills/→~/.claude/skills/Grep verified no
Documents/Claude/michalshatzreferences survive in the 4 mirrored SKILL.md files.Root README callout
Adds a new Workflow Orchestration section under the existing Developer Tools section in the root README, with the AC-required callout sentence linking the architecture doc:
Test plan
plugin.jsonis valid JSON for all 4 plugins (jqsucceeds)Linked
What's NOT in this PR
CONNECTORS.mdper plugin — deferred; existing marketplace plugins don't all carry it. Can be added in a follow-up.skills-syncpattern after future PRs to canonical.🤖 Generated with Claude Code