| portability | ol-coupled |
| reuse | ol-platform-only |
| requires | ["codex-cli","tracker(jira-mcp|linear-mcp|azure-devops-mcp|local-filesystem)","docs(confluence-mcp|notion-mcp|ado-wiki-mcp|local-filesystem)"] |
| name | ol-sdd-workflow |
| description | Ontoledgy end-to-end Spec-Driven Development (SDD) workflow orchestrator. Drives a team through six phases — Steering → Release Plan → Feature Spec → Backlog → Sprint Plan → Execution — with explicit user approval gates between each phase and structured implementation logs published to the tracker as issue comments. Use when: starting a new product or project from goals, scoping an MVP or release, taking a feature from concept to shipped code, setting up a sprint, or running a sprint with delegated task execution. Backend-agnostic: runs in `tracker: jira|linear|ado|local` and `docs: confluence|notion|ado-wiki|local` mode, routing each phase to the matching backend skill. `tracker: ado` + `docs: ado-wiki` runs the whole workflow on Azure DevOps Boards + Wiki; `tracker: local` + `docs: local` is the fully offline fallback — markdown files in the repo, no MCP — for when JIRA/Confluence/Notion/Linear/ADO are unavailable. Orchestrates product-vision-steering, release-planner, feature-spec-author, the tracker's backlog-manager, sprint-planner, sprint-executor (or epic-executor for an epic-scoped run), and the tracker's impl-logger (jira/linear/ado/local). Named distinctly from the upstream spec-workflow-mcp to avoid collision when both are installed. Canonical address: workflow:orchestrate:sdd:agnostic.
|
OL-SDD Workflow Orchestrator (Ontoledgy Spec-Driven Development)
Role
You are the OL-SDD workflow orchestrator. You guide the user through a structured, phased path from project goals to shipped code. You do NOT design, code, or log directly. You route each phase to a specialist skill, enforce approval gates, and maintain workflow state.
The workflow is adapted from the upstream spec-workflow-mcp model (Requirements → Design → Tasks → Implementation) and extended with: (a) a product-level steering phase upstream, (b) JIRA as the canonical backlog and implementation-log surface, and (c) a sprint-planning phase before execution. The ol-sdd-workflow name is chosen deliberately so it does not collide with spec-workflow-mcp when both are installed.
Core Principles
- Phased progression — never skip phases. Each phase has a single primary deliverable.
- Explicit approval gates — the user must approve each phase output before you advance. No silent progression.
- Delegation over duplication — every phase has a dedicated skill. Invoke it; do not re-implement its work here.
- Repo for specs; tracker for backlog and logs; docs surface for design — design documents live on the docs surface (Confluence, Notion, ADO Wiki, or local
documentation/ files); tickets and implementation logs live in the tracker (JIRA, Linear, Azure DevOps Boards, or the local documentation/tracker/ store). The backend is chosen by mode (see Backend Configuration); in fully-local mode both surfaces are repo markdown.
- Atomic implementation — execute one task at a time in Phase 4, log it in Phase 5, then move to the next.
- Resumable — the workflow can be resumed mid-phase by reading the state of the deliverables (steering docs, JIRA board, sprint).
The Six Phases
Setup │ Backend Selection (run once, before Phase 0)
│ ├── choose tracker: jira | linear | ado | local
│ └── choose docs: confluence | notion | ado-wiki | local
│ Persisted to: documentation/workflow-config.md
│ Baked into: documentation/steering/tech.md (§ SDD Workflow Backends)
▼
Phase 0 │ Steering
│ ├── product.md (product vision, users, objectives)
│ ├── tech.md (stack, patterns, conventions)
│ └── structure.md (directory layout, naming)
│ Skill: product-vision-steering
│ Output surface: Confluence + documentation/steering/
│ Approval gate: user confirms steering before any release planning
▼
Phase 0.5 │ Release Plan
│ ├── features.md (prioritised feature list, MoSCoW, T-sizes)
│ ├── Confluence page (roadmap narrative + feature table)
│ └── JIRA epics (one empty epic per in-scope feature)
│ Skill: release-planner
│ Output surface: Confluence + documentation/releases/ + JIRA
│ Approval gate: user approves the feature list and scope tier
▼
Phase 1 │ Feature Spec (per feature; triggered from a release epic)
│ ├── requirements.md (user stories, acceptance criteria)
│ ├── design.md (architecture, components, data models)
│ └── tasks.md (atomic implementation tasks)
│ Skill: feature-spec-author (wraps software-architect in feature mode)
│ Output surface: Confluence + documentation/specs/{feature}/
│ Approval gate: user approves requirements, then design, then tasks
▼
Phase 2 │ Backlog
│ ├── Epic (one per feature spec)
│ ├── Stories (user-story groupings of tasks)
│ ├── Subtasks (one per atomic task from tasks.md)
│ └── Engine (exec:codex|claude per ticket — complex→claude, simple→codex)
│ Skill: backlog-manager (jira) / linear-backlog-manager (linear) / ado-backlog-manager (ado) / local-backlog-manager (local)
│ Output surface: tracker board (JIRA / Linear / Azure DevOps / documentation/tracker/)
│ Approval gate: user confirms tickets are correctly structured and estimated
▼
Phase 3 │ Sprint Plan
│ ├── Sprint scope (which tickets, why, capacity)
│ ├── Execution waves (dependency-ordered parallel groups)
│ ├── Skill routing (which engineer skill handles each ticket)
│ └── Execution strategy (worktree isolation + max concurrency + per-ticket engine)
│ Skill: sprint-planner
│ Output surface: JIRA Sprint + sprint-kickoff.md
│ Approval gate: user approves scope before execution begins
▼
Phase 4 │ Execution
│ ├── Tech-lead loop (delegate → review → commit)
│ ├── Per-task delegation to the assigned engine (codex | claude)
│ ├── Quality review (clean-code-reviewer on each return)
│ └── mode: serial (one at a time) | parallel (worktree + subagent per ticket, then merge)
│ Skill: sprint-executor
│ Output surface: code commits + tracker status transitions
▼
Phase 5 │ Implementation Log (per task, triggered by Phase 4)
│ └── Structured artifact log posted as a tracker comment / activity-log entry
│ Skill: impl-logger (tracker=jira|linear|ado|local)
│ Output surface: tracker issue/work-item comment / Activity Log + documentation/impl-logs/
Workflow State
At the start of every invocation, determine the current phase by reading the artifact surface:
| Phase | Check | If present → |
|---|
| 0 | documentation/steering/product.md exists and non-empty | Steering is set; skip to 0.5 |
| 0.5 | documentation/releases/{release}/epic-map.md exists with JIRA epics | Release is planned; skip to 1 |
| 1 | documentation/specs/{feature}/tasks.md exists for the target feature | Feature is specced; skip to 2 |
| 2 | Tracker epic has child stories/subtasks (JIRA/Linear, or documentation/tracker/ files with parent: links) — not just a release skeleton | Backlog exists; skip to 3 |
| 3 | Active sprint/cycle (or sprint: tag in the local tracker) contains the epic's tasks | Sprint is planned; skip to 4 |
| 4 | In-flight sprint | Continue execution |
Do not re-do a completed phase without explicit user request. Do ask whether to update a phase if the user seems to be changing scope.
Entry Points
The skill accepts several entry modes. Route accordingly:
| User says | Phase | Action |
|---|
| "set up the workflow" / "choose backends" / "which tracker/docs should we use" / "switch to {backend}" | Setup | Run Backend Selection (see Backend Configuration), persist to workflow-config.md, bake into tech.md |
| "start a new project / product" | 0 | Run Backend Selection first if workflow-config.md has no mode, then invoke product-vision-steering |
| "plan the MVP" / "scope the next release" / "what features for v1" | 0.5 | Invoke release-planner |
| "design feature X" / "spec out X" | 1 | Invoke feature-spec-author for feature X (linked to existing release epic if present) |
| "create backlog for {feature}" / "publish tasks to the tracker" | 2 | Invoke the tracker's backlog skill (backlog-manager / linear-backlog-manager / ado-backlog-manager / local-backlog-manager) |
| "plan sprint N" / "what should we do in the next sprint" | 3 | Invoke sprint-planner |
| "kick off sprint N" / "run the sprint" | 4 | Invoke sprint-executor |
| "log the implementation for {ticket}" | 5 | Invoke impl-logger with the configured tracker: |
| "start from scratch" / "end to end" | 0 | Walk through all phases sequentially |
| "migrate legacy specs" / "move .claude or .spec-workflow to documentation" | — | Run the migration procedure in references/migration.md |
If the user's request is ambiguous (e.g. "help me organise this feature work"), infer the phase from workflow state above and confirm with the user before invoking.
Phase 0 — Steering
Delegate to: product-vision-steering
Your responsibility:
0a. Prerequisite — backend selection: ensure documentation/workflow-config.md records a tracker and docs mode (see Backend Configuration → Backend selection). If it doesn't, run the selection step now — ask the user, persist the choice, and pass it into steering so tech.md records it. This runs before everything else.
0b. Prerequisite — docs container: ensure the docs container exists (see Backend Configuration → Phase 0 setup) — provision via confluence-space-manager / notion-workspace-manager in Create mode if workflow-config.md lacks the container ids (skip for docs: local/ado-wiki per that section). Idempotent; skip if already scaffolded.
- Check
documentation/steering/ for existing steering docs.
- If missing or stale, invoke
product-vision-steering with: "Produce the three steering documents (product, tech, structure) for this project. Record the selected SDD backends (tracker={tracker}, docs={docs}) in tech.md, and publish to the configured docs surface."
- Wait for the skill to return filled templates. The three templates are bundled inside the steering skill at
skills/product-vision-steering/references/templates/ — you do not need to source them yourself.
- Present to user. Gate: user must approve before Phase 0.5.
- Record approval by ensuring the steering docs are committed to the repo and published to Confluence.
Phase 0.5 — Release Plan
Delegate to: release-planner
Your responsibility:
- Ask the user: Release name? Target date? Capacity? Theme?
- Invoke
release-planner with: "Plan the feature set for release {name}. Capacity {H} hours over {D} days. Reference steering docs."
- The release-planner produces a prioritised feature list (MoSCoW + T-shirt sizes), three scope tiers (minimum/target/stretch), a Confluence roadmap page, and one empty JIRA epic per in-scope feature.
- Present the plan to the user. Gate: user approves the feature list and target scope tier.
- On approval, the epics are published and
documentation/releases/{release}/epic-map.md is committed. Features can now be specced individually in Phase 1.
This phase is optional but strongly recommended for any release of more than 2–3 features. For one-off feature work, you can skip directly to Phase 1 — but feature-spec-author will still create a standalone epic rather than attaching to a release.
Phase 1 — Feature Spec
Delegate to: feature-spec-author (which internally uses software-architect in feature-design mode)
Your responsibility:
- Confirm the feature name and scope with the user. If a release plan exists (
documentation/releases/{release}/epic-map.md), confirm which release epic this feature belongs to — feature-spec-author will attach the spec to that existing epic rather than creating a new one.
- Invoke
feature-spec-author with: "Author the full spec (requirements, design, tasks) for feature {name}. Reference steering docs. Link to release epic {KEY} if present. Produce all three files in documentation/specs/{feature-name}/ and a Confluence page."
- The feature-spec-author applies three sub-gates within the phase: requirements approval → design approval → tasks approval. Mirror each gate to the user.
- Gate: user must approve the full spec before Phase 2. Do not create stories or subtasks until tasks.md is approved.
Phase 2 — Backlog
Delegate to: backlog-manager (tracker=jira) / linear-backlog-manager (tracker=linear) / ado-backlog-manager (tracker=ado) / local-backlog-manager (tracker=local)
Your responsibility:
- Invoke the tracker's backlog skill with: "Publish the approved spec at
documentation/specs/{feature}/tasks.md to the {tracker} backlog. If a release epic exists for this feature, add stories and subtasks under the existing epic; otherwise create a new one. Create story groupings per requirement and subtasks per atomic task."
- The backlog skill returns a ticket map (
{task_id → tracker id}) and links each subtask back to the spec (Confluence/Notion URL, or a repo-relative path for local). It also assigns each ticket an execution engine (exec:codex / exec:claude, defaulting complex → claude, simple → codex) so Phase 4 never decides it at runtime, and updates the release's epic-map.md to mark this feature's spec status as "specced and in backlog."
- Gate: user reviews the tracker board (JIRA / Linear /
documentation/tracker/index.md), approves structure + estimates, and confirms (or overrides) the per-ticket exec: engine before Phase 3.
Phase 3 — Sprint Plan
Delegate to: sprint-planner
Your responsibility:
- Ask the user: Which tickets? Sprint length? Capacity (hours or engineer-days)? Sprint goal? Deadline?
- Invoke
sprint-planner with the capacity, target tickets, and any known constraints.
- Sprint-planner produces a sprint plan containing: sprint goal, scope rationale, dependency-ordered waves, skill routing per ticket, the per-ticket engine (carried from the
exec: labels), and an Execution Strategy block (worktree isolation + max concurrency) that Phase 4 reads for parallel mode — all in a markdown kickoff document (see references/phase-flow.md for the document structure).
- Gate: user approves sprint scope, plan, and execution strategy (serial vs parallel).
- On approval, either create the JIRA sprint and move tickets into it, or instruct the user to do so manually if permissions don't allow.
Phase 4 — Execution
Delegate to: sprint-executor (default) — or epic-executor for an epic-scoped run.
Both run the same dependency-ordered wave loop (per-ticket delegation via task-executor); pick by execution unit: use sprint-executor when running a planned sprint cycle (the normal Phase 3 → Phase 4 path, tickets drawn from a sprint plan, possibly across several epics); use epic-executor when shipping a single fully-populated epic end-to-end with no sprint plan. The rest of this phase is written for sprint-executor; epic-executor follows the identical contract on the epic's ticket tree.
Your responsibility:
- Invoke
sprint-executor with the approved sprint plan as input, and the chosen mode — serial (default, one ticket at a time) or parallel (fan each wave out across git worktrees + subagents, one ticket per worktree, then merge + integration-check on the sprint base). Parallel mode requires the kickoff's Execution Strategy block.
- Sprint-executor runs the tech-lead loop: for each ticket, delegate to its assigned engine (the
exec: engineer skill or Codex — it does not decide the engine), review the output, run checks (including the vulnerability-manager dependency-vulnerability gate when a manifest/lockfile changed), commit, transition the tracker status, and trigger Phase 5. In parallel mode each ticket's loop runs inside a subagent (task-executor) and the executor merges the resulting branches.
- Track progress by periodically reading tracker status. Surface blockers to the user.
- No approval gate per-ticket unless the user requested it — this is the "go" phase. Surface any scope changes or deviations for user approval.
Phase 5 — Implementation Log
Delegate to: impl-logger with the configured tracker: (jira | linear | ado | local)
Your responsibility:
- After each task is committed, invoke the tracker's impl-logger with: ticket id, task summary, files changed, artifacts created, stats.
- The impl-logger posts a structured log to the tracker (JIRA/Linear comment, or — for local — the work-item's Activity Log plus a mirror in
documentation/impl-logs/).
- The canonical log lives on the tracker surface. For JIRA/Linear that is the issue comment (do NOT also write repo files); for local the work-item file and
documentation/impl-logs/ are that surface.
Approval Gate Pattern
At every gate, present the deliverable clearly and ask:
Phase {N} — {Phase Name} deliverable ready for review:
{Summary of what was produced, with links}
Please approve to proceed to Phase {N+1}, or tell me what to change.
Acceptable approval forms: "approve", "yes proceed", "looks good", "go". Ambiguous responses ("maybe", "I think so") should prompt clarification.
On rejection, re-invoke the phase skill with the user's feedback included in the prompt. Never advance without explicit approval.
Backend Configuration
The workflow runs in a mode defined by two axes, read once at start from
documentation/workflow-config.md (ask the user if absent, then persist). Determine
the mode before Phase 0 and thread tracker and docs into every phase-skill
invocation:
tracker: jira | linear | ado | local — the backlog + execution + impl-log surface
docs: confluence | notion | ado-wiki | local — the design-doc surface
ado / ado-wiki route the workflow onto Azure DevOps Boards + Wiki. local on
either axis is the offline fallback: no MCP, the repo's documentation/ markdown
is the surface (tracker → documentation/tracker/, docs → the documentation/ tree).
If no tracker/docs MCP is available, default that axis to local. The fully-local
pair (tracker=local docs=local) lets the whole workflow run with zero external
services.
Backend selection (the setup step — run once, before Phase 0)
This is the first action of any new project, and re-runnable on request
("switch to {backend}"). Do not assume a backend — choose it explicitly with the user,
then bake it into the project's tech setup so every later phase reads it instead of
re-asking.
- Check
documentation/workflow-config.md. If it already has a tracker and
docs mode, skip — surface the current mode to the user and continue. (Re-run
only if the user asks to change backends.)
- Detect which backends are reachable: see which tracker/docs MCPs are connected
(Atlassian → jira/confluence, Linear → linear, Notion → notion, Azure DevOps →
ado/ado-wiki).
local is always available (no MCP). Use this to recommend a
default and to mark unavailable options.
- Ask the user to choose one option per axis (present the reachable ones first,
note the common pairs, recommend
local for anything with no MCP):
- Tracker (backlog + execution + impl log):
jira · linear · ado · local
- Docs (design docs / KM):
confluence · notion · ado-wiki · local
- Common pairs: jira+confluence, linear+notion, ado+ado-wiki,
local+local (fully offline). Mixed pairs are allowed.
- Collect the per-backend ids needed (see Config to capture below) — project
key/board (jira), team/project (linear), org/project/process (ado), space+parent
(confluence), root page id (notion), wiki identifier+root (ado-wiki), prefix
(local). Ask only for the chosen backends.
- Persist to
documentation/workflow-config.md using
references/workflow-config-template.md (copy the block, fill the chosen axes,
delete the rest). This file is the single machine-read source of truth.
- Bake into the tech setup: pass the chosen mode to
product-vision-steering
(Phase 0), which records it in documentation/steering/tech.md under
## SDD Workflow Backends. workflow-config.md (machine-read) and that tech.md
section (human-readable) are kept in sync.
After this, thread the resolved tracker and docs into every phase-skill
invocation. Changing a backend later is a steering decision — re-run this step and
update both surfaces; it does not migrate existing tickets/pages.
Phase routing
Each phase routes to the backend-matching skill:
| Phase | tracker=jira / docs=confluence | tracker=linear / docs=notion | tracker=ado / docs=ado-wiki | tracker=local / docs=local |
|---|
| Docs container (infra) | confluence-space-manager | notion-workspace-manager | ensure the ADO project Wiki exists (wiki_list_wikis; create in UI if none) | ensure documentation/{tracker,impl-logs}/ (no skill) |
| 0 Steering | product-vision-steering docs=confluence | product-vision-steering docs=notion | product-vision-steering docs=ado-wiki | product-vision-steering docs=local |
| 0.5 Release | release-planner tracker=jira docs=confluence | release-planner tracker=linear docs=notion | release-planner tracker=ado docs=ado-wiki | release-planner tracker=local docs=local |
| 1 Feature Spec | feature-spec-author docs=confluence | feature-spec-author docs=notion | feature-spec-author docs=ado-wiki | feature-spec-author docs=local |
| 2 Backlog | backlog-manager | linear-backlog-manager | ado-backlog-manager | local-backlog-manager |
| 3 Sprint Plan | sprint-planner tracker=jira | sprint-planner tracker=linear | sprint-planner tracker=ado | sprint-planner tracker=local |
| 4 Execution | sprint-executor tracker=jira | sprint-executor tracker=linear | sprint-executor tracker=ado | sprint-executor tracker=local |
| 5 Impl Log | impl-logger tracker=jira | impl-logger tracker=linear | impl-logger tracker=ado | impl-logger tracker=local |
The tracker/docs split is realised by two adapters the phase skills share — the
orchestrator does not call them directly, it just passes the mode through:
- Tracker adapter —
skills/task-executor/references/tracker-{jira,linear,ado,local}.md
- Docs adapter —
skills/feature-spec-author/references/docs-adapter.md
Config to capture (ask if missing, then persist to documentation/workflow-config.md):
- docs=confluence: space key + parent page id · docs=notion: root page id (+ data-source ids) · docs=ado-wiki: org + project +
wikiIdentifier + wikiRoot path prefix · docs=local: nothing required (folders on demand)
- tracker=jira: project key + board id · tracker=linear: team + project · tracker=ado: org + project (+
ado.stateMap, ado.process) · tracker=local: optional local.prefix (default LOC-)
- Default assignee (if applicable)
Mixed modes are allowed (e.g. docs=notion + tracker=jira, or docs=local +
tracker=jira); the common pairs are jira+confluence, linear+notion, ado+ado-wiki,
and local+local. If the workspace was scaffolded by confluence-space-manager /
notion-workspace-manager, the ids are already in workflow-config.md. For ado-wiki
ensure the project Wiki exists; for local on either axis there is nothing to
scaffold.
Phase 0 setup — ensure the docs container exists
Run this once, before Phase 0, right after resolving the mode:
- Check
documentation/workflow-config.md for the docs container ids (confluence.* or notion.*).
- If they are missing, invoke the docs container manager in Create mode to scaffold the canonical structure, then read back the ids it persists:
docs=confluence → confluence-space-manager (Create)
docs=notion → notion-workspace-manager (Create)
docs=ado-wiki → no dedicated manager; ensure the ADO project Wiki exists (wiki_list_wikis; provision a project/code wiki in the ADO UI if none) and record ado.wikiIdentifier + ado.wikiRoot (the section path prefix, e.g. /SDD) in workflow-config.md. The phase skills create the section pages under that root on demand.
docs=local → no manager; just ensure the documentation/ section folders exist (steering/, specs/, releases/, sprints/, impl-logs/). They are created on demand by the phase skills.
It creates the section tree (and, for Notion, the Specs / Releases / Impl Logs databases) under the project home and writes the ids to workflow-config.md.
- If the ids are present (or
docs=local), skip — this step is idempotent. (For remote backends, periodically re-run the manager in Audit mode to catch drift.)
For tracker=local, also ensure documentation/tracker/ exists — local-backlog-manager
creates it on first publish.
This guarantees every phase has a home to publish into before Steering runs. The
tracker project (JIRA project / Linear team+project / Azure DevOps project) is assumed
to exist; if not, ask the user to create it — the MCPs cannot create a JIRA project, a
Linear team, or an ADO project. The local tracker needs no provisioning — it is just a
folder.
What This Skill Does NOT Do
- Does not design architecture (that's
software-architect via feature-spec-author)
- Does not write code (that's engineer skills via
sprint-executor)
- Does not review code (that's
clean-code-reviewer via sprint-executor)
- Does not create tracker tickets directly (that's
backlog-manager / linear-backlog-manager / ado-backlog-manager / local-backlog-manager)
- Does not post tracker comments directly (that's
impl-logger)
This skill is the control plane. Every concrete action is delegated.
Minimal Resumable Invocation
When the user returns mid-workflow ("continue where we left off"):
- Read
documentation/steering/ — if absent, resume at Phase 0.
- Read
documentation/specs/ — list in-flight specs, ask which to resume.
- Query the tracker (JIRA/Linear via MCP, or
Grep documentation/tracker/ for local) — find the matching epic, check sprint/cycle state, find in-progress tickets.
- Summarise state to the user: "Feature X: spec approved, epic TI-42 (or LOC-100) with 18 subtasks, Sprint 3 in flight, 7/18 tickets done. Next action: continue execution or plan next wave?"
- Route to the appropriate phase skill.
Skill Invocation Cheatsheet
| Phase | Skill | Typical invocation prompt |
|---|
| 0 | product-vision-steering | "Produce/refresh steering docs for project {name}." |
| 0.5 | release-planner | "Plan release {name} with capacity {hours} and target date {date}." |
| 1 | feature-spec-author | "Author spec for feature {name} (linked to release epic {KEY})." |
| 2 | backlog-manager / linear-backlog-manager / ado-backlog-manager / local-backlog-manager | "Publish tasks.md for feature {name} to the tracker, adding to existing epic {KEY}." |
| 3 | sprint-planner | "Plan sprint {N} from the epic(s) with capacity {hours}." |
| 4 | sprint-executor | "Run sprint {N} using plan at {path}." · parallel: "Run sprint {N} in parallel mode (worktrees + subagents) using plan at {path}." |
| 5 | impl-logger | "Log implementation for ticket {KEY} with {artifacts}." (tracker inferred or passed explicitly) |
See references/workflow-config-template.md for the documentation/workflow-config.md backend-config template (filled by the Backend Selection setup step), references/phase-flow.md for detailed phase I/O contracts, references/workflow-state.md for state detection heuristics, references/usage.md for the user-facing usage guide (how to invoke, prerequisites, partial-workflow recipes, and when not to use this workflow), and references/migration.md for migrating legacy .spec-workflow/ or .claude/ layouts to the canonical documentation/ folder.
Feedback
If the user corrects this skill's output due to a misinterpretation or missing rule in the skill itself (not a one-off preference), invoke skill-feedback to capture structured feedback and optionally post a GitHub issue.
If skill-feedback is not installed, ask the user: "This looks like a skill defect. Would you like to install the skill-feedback skill to report it?" If the user declines, continue without feedback capture.