/door — Is This Decision a One-Way Door?
Most disasters are irreversible choices made casually, and most wasted time is
reversible choices made ceremoniously. This skill sorts them — then spends effort
only where it can't be refunded.
Invocation
/door uuid vs bigint primary keys
/door # triage the decision currently under discussion
Procedure
State the decision and the options. Two sentences max per option.
The sort question: if this turns out wrong, what does undoing it cost in
6–12 months? Answer in concrete units: a rename, a migration, a rewrite, a
breaking API change for N consumers, a data backfill.
TWO-WAY DOOR (cheap to reverse) →
- Pick now. Prefer the boring option. Write one line saying why. Move on.
- Explicitly banned: further research, option matrices, asking for approval.
ONE-WAY DOOR (expensive/impossible to reverse) → answer all five, in writing:
- Lock-in: exactly what becomes unchangeable (formats, contracts, published
IDs, wire protocols, stored data shapes)?
- Who pays: which future person/system eats the cost if wrong, and when?
- Escape hatch: what would migration off this cost? Can a seam be added NOW
to make it cheaper (adapter layer, versioned field, opaque ID)?
- Shrink the door: can any part be deferred or made reversible? The best
one-way-door answer is often "make it a two-way door first."
- Kill-gate: what measurable signal, by when, tells us we chose wrong?
(Hand this to
/gate.)
Verdict line (goes in the commit / PR / decision log):
DOOR: one-way | locked: <what> | escape: <cost> | gate: <signal>
or DOOR: two-way | picked <X> because <one clause>.
Disagreement check (one-way verdicts)
For ONE-WAY doors, get a second, independent answer before committing: dispatch
the same decision (options + lock-in facts, no shared reasoning) to a different
model if one is available, otherwise an independent subagent with
no shared context — and diff the two verdicts. Agreement → proceed. Disagreement
is a mechanical proxy for "this is hard": queue it via /escalate instead of
deciding inline.
Rules
- If you can't name the lock-in concretely, you don't understand the decision yet —
that's the finding; go read the code/spec first.
- Deciding fast on two-way doors is not recklessness, it's the point.
- A one-way door decided under time pressure must at minimum get the escape-hatch
seam, even if analysis is cut short.
Worked example (real ruling, 2026-07-09 — reproduced as a static transcript)
Decision: merge a PR wholesale vs cherry-pick only the target commits.
The branch carried unrelated feature work alongside the target changes.
- Options: merge whole (one revertable merge commit) vs cherry-pick (clean
history, but hand-splitting 13 commits invites conflicts and silent loss).
- Sort question: undoing a bad merge costs one
git revert -m 1 — cheap.
- Lock-in enumerated: no schemas, no published IDs, no API contracts touched —
nothing permanent.
- The stowaway work wasn't taken on faith: its commit trail (13 deliberate
commits, including its own fix rounds) showed it was built and corrected,
not dumped.
- Merged whole, no option matrix, moved on.
DOOR: two-way | picked wholesale merge because a merge commit is one revert away and the stowaway work's own commit trail verified it
Composes with
/gate — step 4's kill-gate is authored there.
/premortem — run it on any one-way door before committing.
spec-citation hook — one-way-door paths (schema/, migrations/, contracts) are
exactly what you list in .claude/judgment.json protected globs.
/precedent — run it first; a banked ruling can settle the door outright.
/escalate — one-way doors with no precedent, or a failed disagreement
check, queue there instead of being decided inline.
/think — one-way doors deserve a second-order pass before committing.
/verdict — every door ruling is logged there.
1---2name: door3description: One-way-door decision triage. Sorts any decision into reversible (just pick) vs irreversible (slow down, enumerate lock-in). Use before schema changes, ID formats, API contracts, auth models, naming, tech-stack picks, or whenever a choice feels weighty.4---56# /door — Is This Decision a One-Way Door?78Most disasters are irreversible choices made casually, and most wasted time is9reversible choices made ceremoniously. This skill sorts them — then spends effort10only where it can't be refunded.1112## Invocation1314```15/door uuid vs bigint primary keys16/door # triage the decision currently under discussion17```1819## Procedure20211. **State the decision and the options.** Two sentences max per option.22232. **The sort question:** if this turns out wrong, what does undoing it cost in24 6–12 months? Answer in concrete units: a rename, a migration, a rewrite, a25 breaking API change for N consumers, a data backfill.26273. **TWO-WAY DOOR** (cheap to reverse) →28 - Pick now. Prefer the boring option. Write one line saying why. Move on.29 - Explicitly banned: further research, option matrices, asking for approval.30314. **ONE-WAY DOOR** (expensive/impossible to reverse) → answer all five, in writing:32 - **Lock-in:** exactly what becomes unchangeable (formats, contracts, published33 IDs, wire protocols, stored data shapes)?34 - **Who pays:** which future person/system eats the cost if wrong, and when?35 - **Escape hatch:** what would migration off this cost? Can a seam be added NOW36 to make it cheaper (adapter layer, versioned field, opaque ID)?37 - **Shrink the door:** can any part be deferred or made reversible? The best38 one-way-door answer is often "make it a two-way door first."39 - **Kill-gate:** what measurable signal, by when, tells us we chose wrong?40 (Hand this to `/gate`.)41425. **Verdict line** (goes in the commit / PR / decision log):43 `DOOR: one-way | locked: <what> | escape: <cost> | gate: <signal>`44 or `DOOR: two-way | picked <X> because <one clause>`.4546## Disagreement check (one-way verdicts)4748For ONE-WAY doors, get a second, independent answer before committing: dispatch49the same decision (options + lock-in facts, no shared reasoning) to a different50model if one is available, otherwise an independent subagent with51no shared context — and diff the two verdicts. Agreement → proceed. Disagreement52is a mechanical proxy for "this is hard": queue it via `/escalate` instead of53deciding inline.5455## Rules5657- If you can't name the lock-in concretely, you don't understand the decision yet —58 that's the finding; go read the code/spec first.59- Deciding fast on two-way doors is not recklessness, it's the point.60- A one-way door decided under time pressure must at minimum get the escape-hatch61 seam, even if analysis is cut short.6263### Worked example (real ruling, 2026-07-09 — reproduced as a static transcript)6465**Decision:** merge a PR wholesale vs cherry-pick only the target commits.66The branch carried unrelated feature work alongside the target changes.67681. Options: merge whole (one revertable merge commit) vs cherry-pick (clean69 history, but hand-splitting 13 commits invites conflicts and silent loss).702. Sort question: undoing a bad merge costs one `git revert -m 1` — cheap.713. Lock-in enumerated: no schemas, no published IDs, no API contracts touched —72 nothing permanent.734. The stowaway work wasn't taken on faith: its commit trail (13 deliberate74 commits, including its own fix rounds) showed it was built and corrected,75 not dumped.765. Merged whole, no option matrix, moved on.7778`DOOR: two-way | picked wholesale merge because a merge commit is one revert away and the stowaway work's own commit trail verified it`7980## Composes with8182- `/gate` — step 4's kill-gate is authored there.83- `/premortem` — run it on any one-way door before committing.84- `spec-citation` hook — one-way-door paths (schema/, migrations/, contracts) are85 exactly what you list in `.claude/judgment.json` protected globs.86- `/precedent` — run it first; a banked ruling can settle the door outright.87- `/escalate` — one-way doors with no precedent, or a failed disagreement88 check, queue there instead of being decided inline.89- `/think` — one-way doors deserve a `second-order` pass before committing.90- `/verdict` — every door ruling is logged there.