marketplace/bundles/plan-marshall/skills/workflow-integration-ci/SKILL.md
PR review response workflow - fetch comments, triage, and respond to review feedback (GitHub and GitLab)
npx skillsauth add cuioss/plan-marshall workflow-integration-ciInstall 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.
Handles PR review comment workflows - fetching comments, triaging them, and generating appropriate responses. Works with both GitHub and GitLab via the unified tools-integration-ci abstraction.
Execution mode: Fetch PR review comments, triage each for action, implement fixes or generate responses, resolve threads.
Prohibited actions:
Constraints:
python3 .plan/execute-script.py commandFetch Comments Workflow - Retrieves PR review comments
tools-integration-ci abstraction (GitHub or GitLab)Handle Review Workflow - Processes and responds to comments
Automated Review Lifecycle - Complete CI-wait → fetch → triage → respond → resolve cycle
3_automated_review == truePurpose: Fetch all review comments for a PR.
Input: PR number (optional, defaults to current branch's PR)
Steps:
Get PR Comments via CI Integration
Use the pr-comments command from marshal.json (provider-agnostic):
python3 .plan/execute-script.py plan-marshall:tools-integration-ci:ci pr comments \
--pr-number {number} [--unresolved-only]
Or use the workflow script for additional processing:
python3 .plan/execute-script.py plan-marshall:workflow-integration-ci:pr fetch-comments [--pr {number}]
Output (TOON format):
status: success
operation: pr_comments
provider: github|gitlab
pr_number: 123
total: N
unresolved: N
comments[N]{id,thread_id,author,body,path,line,resolved,created_at}:
c1 PRRT_abc alice Fix security issue src/Auth.java 42 false 2025-01-15T10:30:00Z
Return Comment List
Output: Structured list of comments for triage
Purpose: Process review comments and respond appropriately.
Input: PR number or comment list from Fetch workflow
Steps:
Get Comments If not provided, use Fetch Comments workflow first.
Triage Each Comment For each unresolved comment:
Script: plan-marshall:workflow-integration-ci
python3 .plan/execute-script.py plan-marshall:workflow-integration-ci:pr triage --comment '{json}'
Script outputs decision:
comment_id: ...
action: code_change|explain|ignore
reason: ...
priority: high|medium|low|none
suggested_implementation: ...
Process by Action Type
For code_change:
For explain:
python3 .plan/execute-script.py plan-marshall:tools-integration-ci:ci pr reply \
--pr-number {pr} --body "..."
For ignore:
Group by Priority
Return Summary
Output:
pr_number: 123
processed:
code_changes: 3
explanations: 1
ignored: 1
files_modified[1]:
- ...
status: success
Purpose: Complete automated review cycle for a PR — wait for CI, fetch review comments, triage, respond, and resolve threads. Used by phase-6-finalize when 3_automated_review == true.
Input:
plan_id — for logging and Q-Gate findingspr_number — PR number (from phase-6-finalize Step 4 or pr-view)review_bot_buffer_seconds — seconds to wait after CI for review bots (from config)Steps:
Wait for CI
Use the built-in ci wait command which handles polling internally:
python3 .plan/execute-script.py plan-marshall:tools-integration-ci:ci ci wait \
--pr-number {pr_number}
Bash tool timeout: 1800000ms (30-minute safety net). Internal timeout managed by script.
final_status: success → proceed to step 2final_status: failure → return {status: ci_failure, details: ...} for loop-backstatus: timeout → ask user (continue/skip/abort)Buffer for Review Bots
Wait for automated review bots (Gemini Code Assist, etc.) to post comments:
sleep {review_bot_buffer_seconds}
Fetch Comments
Use Workflow 1 (Fetch Comments) with --unresolved-only:
python3 .plan/execute-script.py plan-marshall:workflow-integration-ci:pr fetch-comments --pr {pr_number} --unresolved-only
Triage Each Comment
Use Workflow 2 (Handle Review) triage for each unresolved comment:
python3 .plan/execute-script.py plan-marshall:workflow-integration-ci:pr triage --comment '{comment_json}'
Process by Action Type
ID format rules (from fetch-comments output):
thread-reply --thread-id: Use the comment's id field (GraphQL node ID, format: PRRC_kwDO...). This is the inReplyTo target.resolve-thread --thread-id: Use the thread_id field (GraphQL node ID, format: PRRT_kwDO...).For each triaged comment:
code_change (requires implementation):
python3 .plan/execute-script.py plan-marshall:manage-findings:manage-findings \
qgate add --plan-id {plan_id} --phase 6-finalize --source qgate \
--type pr-comment --title "{comment summary}" \
--detail "{comment body} at {path}:{line}"
python3 .plan/execute-script.py plan-marshall:tools-integration-ci:ci pr thread-reply \
--pr-number {pr_number} --thread-id {comment_id} --body "Acknowledged — creating fix task."
explain (reply with explanation):
python3 .plan/execute-script.py plan-marshall:tools-integration-ci:ci pr thread-reply \
--pr-number {pr_number} --thread-id {comment_id} --body "{explanation}"
python3 .plan/execute-script.py plan-marshall:tools-integration-ci:ci pr resolve-thread \
--pr-number {pr_number} --thread-id {thread_id}
ignore (dismiss):
python3 .plan/execute-script.py plan-marshall:tools-integration-ci:ci pr resolve-thread \
--pr-number {pr_number} --thread-id {thread_id}
Return Summary
Output:
status: success
pr_number: {pr_number}
ci_status: success
comments_total: {N}
comments_unresolved: {N}
processed:
code_changes: {N}
explanations: {N}
ignored: {N}
threads_resolved: {N}
loop_back_needed: {true|false}
findings_created: {N}
If loop_back_needed == true, phase-6-finalize creates fix tasks and loops back to phase-5-execute.
Script: plan-marshall:workflow-integration-ci → pr.py
Purpose: Fetch PR review comments from GitHub.
Usage:
python3 .plan/execute-script.py plan-marshall:workflow-integration-ci:pr fetch-comments [--pr <number>]
Requirements: gh CLI installed and authenticated
Output: TOON with comments array
Purpose: Analyze a single comment and determine action.
Usage:
python3 .plan/execute-script.py plan-marshall:workflow-integration-ci:pr triage --comment '{"id":"...", "body":"...", ...}'
Output: TOON with action decision
| Pattern | Action | Priority | |---------|--------|----------| | security, vulnerability, injection | code_change | high | | bug, error, fix, broken | code_change | high | | please add/remove/change | code_change | medium | | rename, variable name, typo | code_change | low | | why, explain, reasoning, ? | explain | low | | lgtm, approved, looks good | ignore | none |
development
The single append-only change-ledger — one worktree_sha-stamped substrate for kind=build and kind=change entries — plus the first-class worktree-sha freshness API
development
Authoring standards for ASCII box diagrams in skill and doc source — box-drawing conventions, right-border alignment, and a deterministic check/fix validator over fenced/literal code blocks in .md and .adoc files
testing
Recipe for verifying and fixing alignment of ASCII box diagrams across .md skill source and .adoc documentation, one deliverable per offending file
development
Pure platform-agnostic terminal-title composition consumed by platform-runtime via PYTHONPATH