shukuba-park
Park an unreached 宿場 Shukuba station and free the slot. Moves the station file into the sibling `shukuba/parked/`, where it waits until someone opens it again, and leaves the 根回し Nemawashi seed's chec
SKILL.mdskills/pm/.claude/skills/shukuba-park/SKILL.md
GitHubShukuba Park
Purpose
Set down a station that was not reached, without claiming it was. A 宿場 Shukuba is one leg of the active 根回し Nemawashi idea's route, and exactly one is active at a time. Sometimes that leg is stopped part-way — blocked, deprioritised, superseded, or simply not the work the slot is wanted for now. The station has to leave the slot, but nothing about it is finished.
parked/ is where it goes, and trail/ would be wrong. Each project's journey/shukuba/README.md
(stamped from <CORE>/templates/journey_shukuba_template.md) reserves the trail for reached
stations — it is the record of stations whose reached-when was met. Filing an unreached station there
makes that record claim a walk that never happened, and because the record is read by looking at which
folder things are in, a note inside the file does not correct it. parked/ says the opposite and says it
by name: this one is waiting.
Park, don't close, don't retire, don't seal. The verbs are kept straight in
<CORE>/docs/michi_agari.md § Quick reference. This skill parks a station. shukuba-retire closes a
reached one; nemawashi-unpick un-picks the idea; nemawashi-retire retires a finished idea;
tobiishi-seal seals a change unit.
The seed's checklist item is not touched. This is the whole reason parking is its own operation rather than a flag on the close — see Leave the item unticked in Critical Rules.
Project-level only — the instance's system/shukuba/ is a router station, per <CORE>/docs/journey_move.md
§ The two levels, and what exists at each: it has one destination, trail/, and no parked/ at all
(system/shukuba/README.md § Lifecycle). There is no slot to free and nowhere to park it into. An
invocation pointing anywhere under system/ that is not system/projects/<project>/journey/shukuba/
stops with nemawashi-unpick named for a project seed, and the Michi named as the instance's only
direction.
Shared mechanics. The move itself — how a journey artifact changes folder, and how that commit is
built — lives in <CORE>/docs/journey_move.md. Read it; this file names the section it is
leaning on at each step rather than restating any of it.
Posture
PM only. Run in a pm: session or as the pm subagent. Invoked from anywhere else, halt at once,
say the posture is wrong, and name the way in. The seat's contract is <CORE>/roles/loaders/pm_global.md,
which gives this move to the PM: a station set down unreached frees the slot the PM's traverse fills,
the same reason nemawashi-unpick is the PM's — the owner's call, 2026-10-03.
Input
The invocation names the station: a path to the
file, or enough to identify one (the project and the slug). Resolution is
<CORE>/docs/journey_move.md § Resolving the target; the journey part here is
system/projects/<project>/journey/shukuba/.
Run by shukuba-refine as one of its moves. shukuba-retire, which is the Scrum Master's, names it as
owed when the station it was asked to close is not actually reached — it does not run it.
Workflow
Step 1 — Resolve the station, and confirm it is genuinely unreached
Resolve per the shared file, with <shukuba> = system/projects/<project>/journey/shukuba. If it
resolves to an instance-level item instead, stop per Project-level only above.
Then read the station's reached-when and check it against the world. This is the gate that decides which skill the caller wants, and it is checked rather than assumed.
Where a check runs. When checking the world means running the product's own checks — a test
suite, a harness, a script under the product's checks/ — run them in a disposable copy of the
product — a fresh clone at the commit under test (git clone --quiet <repo> <scratch> && git -C <scratch> checkout --quiet <sha>), never git archive,
which drops the history a product's checks may read — never in the product's main checkout, and
leave that checkout as you found it. Run the checks from a subshell, never cd your own shell into the
copy, and remove the copy when you have read the result, in a command of its own run from outside it
(<CORE>/roles/CROSS_ROLE.md § Every seat — a run leaves the product's main checkout as it found
it). A chain halts the step that leaves it dirtier.
The two outcomes:
- Not met — any part of the reached-when is unsatisfied. This skill is right. Proceed.
- Met — the station was reached, so it is closed, not parked. Run
shukuba-retireon it, as the PM, and stop: that skill moves it totrail/, ticks its item and commits, and this skill parks nothing. The boy-scout rule — the station is already in your hands, so the close is not left owed (shukuba-retire§ Posture states this as its one exception for the PM — the owner's call, 2026-10-03). Parking a reached station loses the record of a completed walk just as surely as filing an unreached one intrail/fabricates one; the error simply points the other way. - Cannot be told from the files — the reached-when turns on something you cannot observe. Stop and report: park nothing, and name the part of the reached-when you could not judge and why. Do not ask — the run may have nobody to answer — and do not infer it from how much of the station "looks done."
A station may also be parked while technically reachable — the owner simply wants the slot for other work. That is a legitimate park and needs no special handling, but say plainly in the report that the reached-when was not met, so nobody later reads the parked file as unfinished-and-blocked when it was unfinished-and-deprioritised.
Step 2 — Ensure parked/ exists
mkdir -p "<shukuba>/parked"
Per <CORE>/docs/journey_move.md § Ensure the destination exists.
Step 3 — Move the station into parked/
git mv "<shukuba>/<YYYY-MM-DD>_<slug>.md" "<shukuba>/parked/<YYYY-MM-DD>_<slug>.md"
Step 4 — Make the file honest where it sits
Per <CORE>/docs/journey_move.md § Move whole — and the one edit that is allowed. Applied here: a station
usually describes the work rather than its own currency, so most stations move whole with no content
change at all, and that is the expected outcome — not a step you skipped.
Correct only a claim of present currency the move just falsified — a header saying the station is active, current, or being walked now. A partly-walked station's own notes about progress are not such a claim; they are a true record of what was done and they are what makes the file worth taking up again. Leave them, and leave the reached-when exactly as written — a station taken up again is walked against the same bar it was opened against.
Add nothing: no set-down note, no reason, no pointer. The reason is the commit body's.
Order matters — the move is Step 3 and the edit is Step 4, not the reverse, per Move first, then edit in the shared file.
Step 5 — Leave the Nemawashi alone
The station was opened from one unchecked item on the active seed's checklist. That item stays
[ ], and the seed file is not opened, not edited, and not part of this commit.
This is the structural difference from shukuba-retire, which ticks it — and the reason parking could
not be a flag on that skill. A tick says the item is walked. It is not. And the cost is asymmetric: a
wrongly-ticked item means no station is ever opened from it again, the work reads done, and nothing
anywhere records that it was not walked. There is no cheap way back from that, whereas an item left
unticked simply remains what it is — the next thing to take up.
No parked-marker is added to the line either. [ ] is already the true statement about that item, and
the parked station is self-describing where it sits: it names the seed item it came from, so the record
is complete without touching the seed. Appending anything to a checklist line is also the bloat the
shared file forbids.
Step 6 — Commit
One commit, carrying the station's rename and — only if Step 4 found something — its content
correction. Per <CORE>/docs/journey_move.md § The commit:
python3 "<CORE>/tools/commit_builder.py" --repo . commit \
--staged "<shukuba>/<YYYY-MM-DD>_<slug>.md" "<shukuba>/parked/<YYYY-MM-DD>_<slug>.md" \
--add "<shukuba>/parked/<YYYY-MM-DD>_<slug>.md" \
--subject "park shukuba: <YYYY-MM-DD>_<slug> → parked/, unreached" \
<--actor pm as the pm subagent | --role PM from a pm: session> \
--directional "Shukuba: <YYYY-MM-DD>_<slug> — aside: <why it is being parked>" \
--surface "Claude Code" --co-authored-by "<your model> <noreply@anthropic.com>"
The shared file owns the identity flag, the --add-only-if-you-edited rule (Step 4 changes nothing in the common
case, and then --staged alone carries the commit), no---skill, and the aside: reading for a
set-down. What is specific here: the directional is always a Shukuba: line, resolved against the
station being parked — a station is open by definition, so it never degrades to Agari:.
Then check git show --stat per the shared file. Expect a rename, and content only if Step 4 made a
correction.
Step 7 — Report
State plainly: which station moved to parked/, that its reached-when was not met and which part
was outstanding, whether any content correction was made, and — explicitly — that the seed's checklist
item is still unticked, that the seed is still the active idea, and that the station slot is now
empty.
The empty slot is the journey standing still on purpose. Say so, so the caller knows that is the state they are in rather than discovering it later. Say it and stop: what to put in the slot, and whether the idea is set down too, are the owner's — see Critical Rules.
Outputs
| File / effect | Produced when |
|---|---|
shukuba/<YYYY-MM-DD>_<slug>.md moved to shukuba/parked/<YYYY-MM-DD>_<slug>.md, one commit |
Success (Steps 3–6) |
| A currency-marker correction inside the moved file, same commit | Step 4 found a falsified self-description |
Nothing parked; the station closed through shukuba-retire, in that skill's own commit |
The reached-when is met (Step 1) |
| No change; a question naming the candidates | Ambiguous / not-found station (Step 1) |
| No change; a report naming the part of the reached-when that could not be judged | An unresolvable reached-when (Step 1) |
| No change; a halt saying the posture is wrong | Invoked outside the PM seat (§ Posture) |
The seed's checklist is never modified by this skill, in any path.
Critical Rules
- The PM's, and it halts elsewhere. A seat that is not the PM names the park as owed and hands it to the PM rather than running it.
parked/, nevertrail/. The trail records reached stations. An unreached station filed there fabricates a completed walk, and no note inside the file corrects it.- Verify unreached; don't assume it. A reached station belongs to
shukuba-retire, which this skill runs on it rather than leaving the close owed. Check the reached-when against the world in Step 1 and stop if it is met — the mirror-image error is just as destructive. Where the files cannot tell, stop and report; never ask, never guess. - Leave the item unticked. The seed is not opened, not edited, not committed. No tick, no parked
marker, no appended note. A wrong tick buries a station's worth of work with no trace and no cheap way
back;
[ ]is already true. - Project-level only. The instance Shukuba is a router with one destination,
trail/, and noparked/. An instance-level invocation stops with a pointer tonemawashi-unpickand the Michi — never a fabricated instance station. - Preserve the reached-when verbatim. A parked station is taken up again against the bar it was opened against. Rewriting or relaxing it while parking silently changes what "reached" will mean.
- One fact, one commit. The station's parking is one commit, and it is the only one this skill
makes. The idea's un-pick is
nemawashi-unpick's own. Never bundle them: they carry different scopes, and a bundled commit cannot be reverted in pieces. - Don't offer the next move. Not the freed slot's next occupant, and not un-picking the idea. The
next occupant is not even derivable here — the parked item is still the next unchecked one, so an
offer would propose re-opening the station just parked, which
shukuba-opentakes up again as it is; opening something different changes the route first, and the route is the PM's (<CORE>/roles/loaders/pm_global.md§ What you own, item 2). Whether the idea is set down too is the owner's call in the PM loop, andnemawashi-unpickis the PM's to run. An offer here is a second copy of a decided fact, and an interactive gate in a skill that must run insideshukuba-refine's unattended moves with nobody in the room. - The shared mechanic is shared. Everything about how the move and its commit are made lives in
<CORE>/docs/journey_move.md. Read it there; a second copy is a copy free to drift.