ワンクリックで
sprint-wrap-up
End-of-sprint checklist — finalize results, clean up worktrees, update docs, prepare for retro. Any agent can run this.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
End-of-sprint checklist — finalize results, clean up worktrees, update docs, prepare for retro. Any agent can run this.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Compare two test262 result files to find exactly which tests changed status. Use after a test262 run shows unexpected pass count changes.
Compile a source file to WAT and analyze the output for codegen inefficiencies. Use after a codegen change to verify the output is clean, when investigating performance issues, or when creating optimization issues from real compiler output.
Write an implementation spec for a hard issue. Read compiler source, identify exact functions/lines, design the fix, document edge cases.
Quickly find which commit introduced a test262 regression using git bisect with automated test.
Atomically claim an issue for a developer (human or agent) via the cross-developer lock ref, so two devs never pick up the same task. Syncs with origin first, refuses if already claimed or already done on main, and pushes the claim immediately without touching main or triggering CI.
Create a new issue file from a test262 failure pattern. Includes smoke test, sample extraction, and proper frontmatter.
| name | sprint-wrap-up |
| description | End-of-sprint checklist — finalize results, clean up worktrees, update docs, prepare for retro. Any agent can run this. |
Run this when all sprint tasks are done or the sprint is being closed.
# Check TaskList for any in_progress or pending tasks
For each unmerged task: either have the dev self-merge via /test-and-merge, or document why it's deferred.
ls /workspace/.claude/worktrees/
For each worktree:
git -C <wt> diff --statgit -C <wt> log --oneline main..HEADgit worktree remove --force <wt>Then prune dead agent-status heartbeats and resync the shared checkout:
node /workspace/scripts/prune-agent-status.mjs # clears stale ✕ records
bash /workspace/scripts/sync-workspace-main.sh # FF /workspace to origin/main
(prune-agent-status also runs automatically on every SessionStart; this is
the belt-and-suspenders end-of-sprint sweep.)
git branch | grep -v '^\*'
Delete branches that are fully merged. Keep branches with unmerged work.
Check that test262 has been run on the current main (either via CI sharded run on the last merged PR, or a local run). Do NOT run locally unless CI didn't cover it.
# Check latest CI test262 run on main
gh run list --workflow=test262-sharded.yml --branch=main --limit 1
# Or check local results
node -e "const r=JSON.parse(require('fs').readFileSync('benchmarks/results/test262-current.json','utf8')); console.log(r.summary.pass, '/', r.summary.total)"
Record results in sprint doc.
git tag sprint/N # replace N with sprint number
git push origin sprint/N
Sprint-end tags ONLY
sprint/N— it does not tag a version. Nevergit tag vX.Y.Zat sprint end. Version tags are cut exclusively vianode scripts/release.mjs <x.y.z>(the deliberate, reviewed release flow); seedocs/releasing.mdand loopdive/js2#389.
Then set end_tag_pushed: true in the wrap_checklist in plan/issues/sprints/{N}/sprint.md.
Any issue still open (status not done/wont-fix) when the sprint closes must
be moved forward, or the dashboard counts a closed sprint as incomplete and the
work falls off the radar:
# Bump every open issue tagged `sprint: N` to the next sprint (N+1)
for f in $(grep -rl '^sprint: N$' plan/issues/*.md); do
grep -qE '^status:\s*(done|wont-fix)\b' "$f" || sed -i 's/^sprint: N$/sprint: M/' "$f" # N=closing, M=next
done
node scripts/sync-sprint-issue-tables.mjs # refresh the GENERATED_ISSUE_TABLES in every sprint doc
Add a ## Carry-over section to the closing sprint doc listing the moved issue
numbers and the phrase "moved into [sprint-M.md]" (this sets the dashboard's
explicitCarryOver flag).
Sprint docs are flat files (#1616): plan/issues/sprints/{N}.md (NOT a
{N}/sprint.md directory). Edit plan/issues/sprints/{N}.md:
status: closed (and closed: <date>)status: active so it becomes the current
sprint (the active sprint = highest sprintNumber with !isClosed && !isPlanning)status_closed: true in wrap_checklistFlipping status: in the doc is not enough. The statusline and dashboard
read the committed website/dashboard/data/sprints.json, which is a generated
artifact. If you skip this, a doc-closed/tagged sprint still shows as "active"
in the statusline (this is the bug that left s59 stuck after it was closed
2026-06-05):
node website/dashboard/build-data.js
git add website/dashboard/data/sprints.json
# Verify the active sprint advanced:
node scripts/statusline-sprint.mjs --porcelain # should print "M <done> <total>"
build-data.js also rewrites data.js / issues.json / feature-examples.json.
Those are large and regenerated on every push to main by the deploy pipeline, so
when wrapping mid-flight (open PRs in the queue) commit only sprints.json to
avoid conflicts with in-flight issue-status changes; leave the siblings for the
deploy regen.
Spawn the scrum-master agent to write plan/log/retrospectives/sprint-{N}.md. The SM reads:
plan/issues/sprints/{N}.md — results, deferred tasksgit log sprint-{N}/begin..sprint/{N} — what landedThe retrospective must exist before the sprint is considered closed. A "record sprint results" commit without a retro file is not a complete wrap-up.
After the retro file is written, set retro_written: true in wrap_checklist.
Append entry to plan/diary.md with sprint summary (baseline, net tests, key wins, carry-overs).
After appending, set diary_updated: true in wrap_checklist.
Before closing the sprint, run the harvest-errors skill to cluster any new failure patterns that surfaced during the sprint and file issues for them. This keeps the next sprint's backlog populated with concrete, actionable work instead of requiring manual triage.
Invoke the harvest-errors skill (or spawn a dedicated harvester agent)
The harvester:
node scripts/fetch-baseline-jsonl.mjs first to populate
.test262-cache/test262-current.jsonl — the file is no longer
committed; see #1528)plan/issues/plan/issues/ for unaddressed buckets above the threshold (default: >50 occurrences)Commit any newly-filed issues before Step 10.
Why here and not at sprint kickoff: after the sprint's merges have landed, the failure distribution has shifted — running harvest at wrap-up captures the current gaps, not stale pre-sprint ones. The next sprint's planning session (PO) can then slice the fresh issue list by theme. See memory: feedback_harvest_at_sprint_end.md.
Update /home/node/.claude/projects/-workspace/memory/project_next_session.md with:
Sprint docs are flat files ({N}.md), and the regenerated dashboard data must
ride along or the statusline won't update:
git add plan/issues/sprints/{N}.md plan/issues/sprints/{M}.md \
website/dashboard/data/sprints.json \
plan/diary.md plan/log/retrospectives/sprint-{N}.md
# Plus the carried issue files: git add plan/issues/<id>-*.md
git commit -m "chore(sprint-{N}): close sprint — carry-over to {M}, retro, diary, dashboard data. ✓"
git push