marketplace/bundles/plan-marshall/skills/workflow-pr-doctor/SKILL.md
Diagnose and fix PR issues (build, reviews, Sonar) — thin wrapper around verification-feedback with producer=pr-state
npx skillsauth add cuioss/plan-marshall workflow-pr-doctorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
The pr-doctor body (CI wait, multi-source fetch over build / PR comments / Sonar, per-finding triage) lives in plan-marshall:plan-marshall/workflow/verification-feedback.md § Step 1 under producer=pr-state. The triage core (FIX / SUPPRESS / ACCEPT / AskUserQuestion) lives in plan-marshall:plan-marshall/workflow/triage.md Steps 1-6.
Execution mode: Dispatch verification-feedback.md with producer=pr-state; do not implement the body here.
Prohibited actions:
verification-feedback.md is the single source of truth.phase-6-finalize finalize loop dispatches verification-feedback directly.Constraints:
/workflow-pr-doctor) MUST resolve through manage-config effort resolve-target --phase phase-6-finalize --role verification-feedback and dispatch the canonical executor variant.When /workflow-pr-doctor is invoked, resolve the level + target via:
python3 .plan/execute-script.py plan-marshall:manage-config:manage-config \
effort resolve-target --phase phase-6-finalize --role verification-feedback
Emit the standardized post-resolve dispatch log line — see ../ref-workflow-architecture/standards/dispatch-logging.md § Emission contract:
python3 .plan/execute-script.py plan-marshall:manage-logging:manage-logging \
work --plan-id {plan_id} --level INFO \
--message "[DISPATCH] (plan-marshall:workflow-pr-doctor) target={target} level={level} role=verification-feedback workflow=plan-marshall:plan-marshall/workflow/verification-feedback.md plan_id={plan_id}"
Then dispatch the returned target (execution-context-{level} or canonical) with this prompt body:
name: workflow-pr-doctor
plan_id: {plan_id} # current plan or unset for standalone runs
workflow: plan-marshall:plan-marshall/workflow/verification-feedback
skills:
- plan-marshall:manage-findings
- plan-marshall:manage-tasks
- plan-marshall:manage-architecture
- plan-marshall:manage-config
- plan-marshall:tools-integration-ci
- plan-marshall:workflow-integration-git
- plan-marshall:workflow-integration-github
- plan-marshall:workflow-integration-sonar
WORKTREE: {worktree}
producer: pr-state
pr_number: {pr_number} # required; auto-detect via `ci pr view` when absent
caller_phase: phase-6-finalize
The dispatched envelope runs verification-feedback.md Step 1 (producer=pr-state branch) inline and continues into the triage core.
Pass-through from verification-feedback.md:
status: success | loop_back | error | ci_failure
display_detail: "<≤80 char summary, e.g. 'PR #123 diagnosed, 2 issues, 1 fix applied'>"
producer: pr-state
findings_processed: {N}
findings_resolved: {M}
fix_tasks_created: {K}
The canonical argparse surface for pr_doctor.py. The plugin-doctor analyzer (_analyze_manage_invocation.py) reads this section as source-of-truth for the manage-invocation-invalid and missing-canonical-block rules. Consuming docs xref this section by name instead of restating the command inline. See pm-plugin-development:plugin-script-architecture cross-skill-integration.md § "Script invocation in documentation".
python3 .plan/execute-script.py plan-marshall:workflow-pr-doctor:pr_doctor track-attempt \
--category {build,reviews,sonar} --current CURRENT [--max-attempts MAX_ATTEMPTS]
python3 .plan/execute-script.py plan-marshall:workflow-pr-doctor:pr_doctor diagnose \
[--build-status {success,failure}] [--build-failures BUILD_FAILURES] \
[--review-comments REVIEW_COMMENTS] [--sonar-issues SONAR_ISSUES]
python3 .plan/execute-script.py plan-marshall:workflow-pr-doctor:pr_doctor parse-handoff \
--handoff HANDOFF [--pr PR] [--checks {build,reviews,sonar,all}] \
[--auto-fix] [--wait] [--no-wait] [--max-fix-attempts MAX_FIX_ATTEMPTS]
verification-feedback.md — orchestrator body.triage.md — canonical per-finding decision + action loop.standards/automated-review-lifecycle.md — phase-6-finalize automated-review variant (now a thin sibling of producer=pr-comment in verification-feedback.md).development
Domain-owned OpenRewrite log-line finding parser for the java-cui domain — parses the
development
Domain-owned OpenRewrite marker detection for the java-cui domain — scans Java/Kotlin sources for cui-rewrite TODO markers, categorizes them by recipe, and fails the gate on any detected marker
development
Operator control surface for the marshalld build server — enrol/drop a project in the machine-global registry (the opt-in enable signal and anti-laundering wall), manage the daemon lifecycle (start, stop, drain, status, install, upgrade) version-pinned to the verified bundle copy, and inspect the daemon's per-project interaction-audit log (read-only)
tools
The tiny build-consumption client for the marshalld build server — submit a build job, bounded long-poll for its result, ping the daemon identity, and preflight registry-plus-liveness in one call; consumption only, never provisioning or enrolment