Execute a Sprints v2 Developer lane — accept one assignment, implement and verify it, own the PR through green and review, merge only after live authorization, and record judgment without overlapping edits.
Scanned 9/3/2026
Install to Claude Code
npx -y skills add jedbjorn/subfloor --skill sprint_dev --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Sprint Dev?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/jedbjorn-sprint-dev)More formats (shields.io, HTML) on the badges page.
---
name: sprint_dev
description: Execute a Sprints v2 Developer lane — accept one assignment, implement and verify it, own the PR through green and review, merge only after live authorization, and record judgment without overlapping edits.
category: workflow
common: false
---
# sprint_dev — own one editing lane
Use for an actionable armed-Sprint assignment. Use the simplest path supported
by current durable state. Treat ownership, lifecycle, writes, and handoffs as
hard boundaries. Repeat a read only when later activity could have changed it
or a command requires live revalidation.
## Route the entry
Load `sprint_dev` on every entry, then classify it:
| Trigger | First read / action |
|---|---|
| Assignment, verdict, question, blocker, relay | Inspect `sc sprint inbox --sprint <id>` once; accept or handle the relevant message. |
| Self-describing engine-wide PR fact | Inspect the fact + registered PR directly. Do not manufacture a Sprint inbox item; check the inbox once immediately before the next typed handoff. |
| Live FnB instruction | Preserve its authority; read only durable state needed for safe action. |
```text
sc sprint inbox --sprint <id>
sc sprint accept --sprint <id> --message <message-id>
sc sprint decline --sprint <id> --message <message-id> --reason <reason>
```
Accepting starts ownership; decline concretely. After an informational message,
`accept` marks the message read and does not change Sprint or work-unit state.
For an unusable bookkeeping receipt, retry the exact command once, then use its
normal read surface once to prove the postcondition. For informational `accept`,
prior inbox presence + absence of that exact message id proves the read landed;
name the defect next handoff. NEVER infer assignment ownership, review outcome,
merge authorization, lifecycle/work-unit transition, governing revision, PR
head/green state, or cleanup authority. An unproved postcondition stops.
Assignments and review requests use Force-new delivery; verdicts and PR-event
wakes use Re-enter. Delivery waits for a natural boundary; the runtime owns
bundling, rotation, and recovery. Stop after a successful typed handoff.
## Bound the lane
Read assignment, output, bound revision, dependencies, roles, worktree, grant,
and judgments. Own one active unit; never start another lane or edit another
shell's worktree. Resolve ambiguity to shippable in-scope work + rationale. Ask
Planner before changing boundary, interface, deliverable, priority, or scope.
Put one question, blocker, decision, answer, or useful context item in a short
body file. Unit questions/blockers require a reply:
```text
sc sprint send --sprint <id> --to <shortname> --body-file <path> \
--intent question --requires-reply --work-unit <work-unit-id> \
--key <stable-key>
```
Use `--intent blocker` for a blocked lane. Cross-unit, closeout, or external
authority rulings are Sprint-level decisions:
```text
sc sprint send --sprint <id> --to <shortname> --body-file <path> \
--intent decision --requires-reply --sprint-level --key <stable-key>
```
Reply through the original message; the server inherits its scope, so never add
`--work-unit` or `--sprint-level` to a reply:
```text
sc sprint send --sprint <id> --to <shortname> --body-file <path> \
--intent information --reply-to <message-id> --key <stable-key>
```
Ask the Reviewer about review evidence and the Planner about scope or
cross-unit authority. Confirm the durable reply, then `accept` the incoming
message. At a decision boundary, stop until the required answer arrives;
unread recovery re-wakes, so send no duplicate reminder.
Stable key = recipient + exact body + intent + reply + scope. Reuse it only for
the same failed/ambiguous write; when any of those fields changes, use a new
key. Keep bodies near 6,000 characters and below
8,000; run `wc -m < <path>`. Handoff completes only when the command exits
successfully and confirms durable state + wake. If a command is rejected or
transport fails, correct/retry. If relay itself fails, give FnB command +
evidence + impact + recommendation; invent no alternate protocol.
A Developer does not pause the Sprint. Report blocker or integrity evidence to
the Planner, continue safe independent work, and stop at the unsafe boundary.
The Reviewer decides continue/replan/pause; the Planner executes the decision.
Scratch proof/diffs/reports -> gitignored `shared/sprints/sprint-<n>/`; never
commit/PR them. Durable judgment -> `record-review`; reports -> `sprint_reports`;
decisions -> relay.
## Build and verify
Sync + branch; implement the smallest complete change. Per boot `TESTING
POSTURE`, finish code + run every available smallest affected gate. If the
selected interpreter, runner, or declared dependency cannot execute one,
record exact seat evidence; the registered PR supplies only that proof. Test
assertion/source collection red or incomplete code = failure. Optional browser
skip = non-failing. Keep external calls outside DB transactions; preserve
durable identities and append-only evidence. Record failures, anomalies,
retries, review friction, and departures for closeout.
Immediately before `complete-unit`, `register-pr`, or `request-review`, re-run
`sc sprint inbox --sprint <id>` once and act on new messages. After the typed
handoff confirms its durable write, stop without another inbox pass. The
reopened-PR route below is the sole exception.
## Report-only or no-code completion
Only an explicitly planned report/no-code lane may finish without a PR. Keep
the result near 6,000 characters and below 8,000; run `wc -m < <path>`, perform
the pre-handoff inbox check, then require a durable completion receipt:
```text
sc sprint complete-unit --sprint <id> --work-unit <id> \
--result-file <path>
```
Stop after success. A code lane continues through merge observation.
## Register and observe the PR
```text
sc sprint register-pr --sprint <id> --repository <owner/name> \
--pr <number> --work-unit <id>
```
Register complete code even when a local gate is unavailable; registration
obtains evidence, not review. After `register-pr` succeeds, retain ownership;
Red/green/closed Re-enter wakes continue. Required checks: pending -> native
wake; red -> fix/push; green -> judge/request review; none or untrustworthy
watcher after one bounded read -> report + block. Follow context: armed -> fix
red + judge/pass green; paused -> fix red now + judge green, review after
resume; no active Sprint -> fix red if needed + no action on green.
Planner/Reviewer get none.
If the same registered PR was externally closed, then reopened, rebased, and
pushed, replay the exact `register-pr` command. Require `created: false`, which
keeps identity/ownership and takes a fresh snapshot. Its one pre-handoff inbox
check covers registration replay + the immediately following review request.
Do not wait for a second PR-fact wake: immediately request review. Green
proceeds; any other snapshot returns the watcher diagnostic without partial
handoff. Never register a replacement PR or ask the Planner to bypass observed
green.
Otherwise, when no local action remains, stop for the native PR fact. Start no
recurring loop, scheduled job, daemon, or external watcher. A stalled gate
permits one bounded read, then stop or report its evidence:
```text
sc sprint watcher-state --sprint <id>
```
Do not repeat this read as a polling loop.
## Review handoff and correction
Complete each round in order:
1. Finish readiness judgment + available local proof; require observed green.
2. Perform the once-only inbox check; handle and `accept` new messages.
3. Use `submit` first or `resubmit` after changes requested. The engine injects
the PR URL, registered id, exact green head, and work-unit id into the
Reviewer's canonical bare one-line locator. Create no readiness file. Send
no scope narrative, verification evidence, rationale, or review-focus
steering. Put only the work-unit id and spec reference in the PR body; write
no PR comments or annotations.
4. As the literal final action, run:
```text
sc sprint request-review \
--sprint <id> --registered-pr <registered-id> \
--intent <submit|resubmit> --key <stable-key>
```
5. Require confirmation of the durable write + Reviewer wake; run no trailing
command and stop and await the native verdict wake.
Changes requested returns by Re-enter. Apply every blocking finding,
re-establish green, and resubmit with a new review-round key. Do not narrate
cleared findings; the Reviewer verifies the full diff at the engine-injected
head. Record disagreements as judgment. Reviewer owns scope/severity; Planner
executes resulting action.
## Merge boundary
Approval is stale evidence. Immediately before merge, re-read live GitHub,
grant, ownership, unit state, approved head, and checks through:
```text
sc sprint authorize-merge \
--sprint <id> --registered-pr <registered-id>
```
Merge only the returned repository, PR, and head SHA. A refusal means wait for
the watcher or re-enter the appropriate loop; never bypass it.
## Post-merge handoff
After the authorized merge:
1. Clean the worktree; put merged PR + SHA, unit result, verification,
judgments, and departures in the handoff file.
2. Re-run `sc sprint inbox --sprint <id>` once; handle and `accept` new items.
3. Run `wc -m < <path>`; keep the body near 6,000 characters and below 8,000.
4. As the literal final action, send:
```text
sc sprint send --sprint <id> --to <planner-shortname> --body-file <path> \
--intent handoff --key <stable-merged-handoff-key>
```
5. Require the durable message + Planner wake, then stop immediately. Run no trailing Git,
Sprint, inbox, cleanup, or status command. Automatic merge
observation records the PR transition; this handoff releases the next wave.
## Report and stop
Report broken bases, destructive ambiguity, unavailable GitHub, untrustworthy
runners, provider exhaustion, or unrecoverable environment with evidence,
impact, and recommendation. Stop when merged + reported, declined, returned to
review, paused for a native wake, or awaiting Planner/FnB recovery. Ask for
later work only after this editing lane is terminal.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!