sprint-report
Generate a sprint status report for the current phase. Default is --table.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Generate a sprint status report for the current phase. Default is --table.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
| name | sprint-report |
| description | Generate a sprint status report for the current phase. Default is --table. |
Build fenced JSON and pipe to the Jinja2 template. mode controls table vs detailed.
/sprint-report [--table | --detailed | --html]
Default: --table
Always use gh pr list --json first โ single call, returns all open PRs with CI and merge state:
gh pr list --state open --json number,title,headRefName,mergeStateStatus,statusCheckRollup,reviewDecision
This is faster and sufficient for populating sprint_rows and integration_row. Only drill into individual gh run view calls if you need failure details for a specific job.
Use the standard gh pr list --json command directly; no custom wrapper is
required.
Dogfooding rule: If the fields returned by gh pr list --json are missing information needed to fill the report (e.g., no per-job failure detail, no QA state, truncated CI summary), file a GitHub issue describing what field or format change would make it sufficient, then improve the query. Do not silently work around gaps with extra commands โ surface them as product issues.
The template path is relative โ must run from the main repo root (not a worktree).
The CLAUDE_PROJECT_DIR fallback here assumes it points at the main repo root
when you are operating from a worktree; if that environment variable is unset,
the git worktree list | head -1 fallback is used instead.
cd "${CLAUDE_PROJECT_DIR:-$(git worktree list | head -1 | awk '{print $1}')}"
echo '<json>' > /tmp/sprint-report.json
sc-compose render --file .claude/skills/sprint-report/report.md.j2 --var-file /tmp/sprint-report.json
--html uses wrapper-owned orchestration:
sc-compose examples sprint-report-html.--write-only is set.sc-compose itself remains a single-render tool. It does not gain hooks or
browser-open behavior for this flow.
Example structured payload:
{
"report": {
"title": "HTML Sprint Report",
"phase": "Phase HTML-Report",
"generated_at": "2026-04-20T05:30:00Z",
"repository": "randlee/sc-compose"
},
"summary": {
"completed": 2,
"in_review": 1,
"blocked": 0
},
"pr": {
"number": 47,
"url": "https://github.com/randlee/sc-compose/pull/47",
"merge_url": "https://github.com/randlee/sc-compose/pull/47"
},
"ci": {
"run_name": "CI #118",
"run_url": "https://github.com/randlee/sc-compose/actions/runs/118",
"status": "PASS",
"summary": "fmt, clippy, and workspace tests are green."
},
"links": {
"plan_url": "https://github.com/randlee/sc-compose/blob/develop/docs/project-plan.md",
"findings_url": "https://github.com/randlee/sc-compose/blob/develop/docs/html-sprint-report-plan.md"
},
"sprints": [
{
"id": "H1",
"title": "Structured object inputs",
"stage": "merged",
"qa": "PASS",
"ci": "PASS",
"pr_url": "https://github.com/randlee/sc-compose/pull/45",
"note": "Object values and nested field diagnostics landed."
}
]
}
Recommended wrapper flow:
cd "${CLAUDE_PROJECT_DIR:-$(git worktree list | head -1 | awk '{print $1}')}"
OUTPUT_PATH="${SPRINT_REPORT_HTML_OUT:-/tmp/sprint-report.html}"
echo '<json>' > /tmp/sprint-report-html.json
sc-compose examples sprint-report-html \
--var-file /tmp/sprint-report-html.json \
--output "${OUTPUT_PATH}"
python3 - <<'PY' "${OUTPUT_PATH}"
import pathlib
import sys
import webbrowser
path = pathlib.Path(sys.argv[1]).resolve()
webbrowser.open(path.as_uri())
PY
When --write-only is requested, skip the python3 -m webbrowser step and
just report the output path.
{
"mode": "table",
"sprint_rows": "| AK.1 | โ
| โ
| ๐ | #621 |\n| AK.2 | โ
| โ
| ๐ | #622 |",
"integration_row": "| **integrate** | | โ | ๐ | โ |"
}
{
"mode": "detailed",
"sprint_rows": "Sprint: AK.1 Contract reconciliation\nPR: #621\nQA: PASS โ (iter 3)\nCI: Merged to integrate/phase-AK โ\nโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\nSprint: AK.2 OTel core\nPR: #622\nQA: PASS โ\nCI: Running (1 pending)",
"integration_row": "Integration: integrate/phase-AK โ develop\nCI: Running โ pending AK.4 + AK.5"
}
| State | DEV | QA | CI |
|---|---|---|---|
| Assigned | ๐ฅ | ๐ฅ | |
| In progress | ๐ | ๐ | ๐ |
| Done/Pass | โ | โ | โ |
| Findings | ๐ฉ | ๐ฉ | |
| Fixing | ๐จ | ||
| Blocked | ๐ง | ||
| Fail | โ | ||
| Merged | ๐ | ||
| Ready to merge | ๐ |
Build a local, self-contained HTML A/B comparison viewer for two or more generated HTML variants (e.g. different template revisions, different data sets, before/after fixes), so a human can pick between panes side-by-side without any external hosting.
Reusable QA orchestration skill for GitHub PRs. Use for multi-pass QA, CI monitoring, and template-driven findings and final quality reports.
Generate and triage adversarial templates, var-files, and rendering inputs against sc-compose by coordinating bounded background agents, differential and metamorphic checks, minimization, and regression-test promotion. Use when trying to break a rendering subsystem, validating a risky change, hunting parser/validator/rendering edge cases, or turning a confirmed fuzz failure into a unit or CLI test.
Team-lead drives plan hardening after the current plan state already exists in repo docs.
Session initialization for the team-lead identity. Confirms identity and detects whether a full team restore is needed. Only run when ATM_IDENTITY=team-lead.
Repair Claude teammate routing after same-session compaction or resume when sc-compose still exists on disk and the saved leadSessionId still matches the current SESSION_ID, but ATM or teammate reachability is broken.