Decision re-review discipline — audit past architecture/technology decisions (ADRs, select-tech picks, structural choices baked into code with no record) by extracting each decision's load-bearing assumptions and testing them against TODAY's reality, internal and external. Verdict per decision: HOLDS / STRAINED (tripwire set) / BROKEN (reopen with evidence). Guards both failure modes: drive-by relitigation and silent ossification. TRIGGER when: the user asks "is X still the right choice", "we...
Scanned 9/5/2026
Install to Claude Code
npx -y skills add mik2win/foureyes --skill revisit --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Revisit?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/mik2win-revisit)More formats (shields.io, HTML) on the badges page.
---
name: revisit
disable-model-invocation: true
description: >-
Decision re-review discipline — audit past architecture/technology decisions (ADRs,
select-tech picks, structural choices baked into code with no record) by extracting each
decision's load-bearing assumptions and testing them against TODAY's reality, internal
and external. Verdict per decision: HOLDS / STRAINED (tripwire set) / BROKEN (reopen
with evidence). Guards both failure modes: drive-by relitigation and silent ossification.
TRIGGER when: the user asks "is X still the right choice", "we decided this a year ago —
does it still make sense", "review our past decisions", "why do we even use Y", or a
skill hits a prior ADR that looks stale.
DO NOT TRIGGER when: making a NEW technology choice (use /select-tech), scanning code
for rot rather than decisions for staleness (use /arch-health), recording a fresh
decision (use /domain-model), or deciding a service boundary with no prior decision on
file (use /decompose).
allowed-tools: Read, Grep, Glob, Bash, Write, WebFetch, WebSearch, AskUserQuestion, Agent
effort: high
---
# Revisit Decisions: $ARGUMENTS
`$ARGUMENTS` names one decision to re-examine ("the choice of Redis for sessions", an ADR
number) or is empty = inventory all recorded and load-bearing decisions and triage them.
## Principle
Code rots visibly; **decisions rot silently**. Every decision was correct *given its
assumptions* — expected scale, team size, what the ecosystem offered, what the product
needed. The code stays; the assumptions expire; nobody is notified. A codebase can be
clean at every `path:line` and still be built on choices that stopped making sense two
years ago.
The counterweight has a failure mode of its own: **relitigation**. Reopening settled
decisions because a new session "would have chosen differently" destroys the stability
that lets teams build. So this skill is an **assumption audit, not a preference audit**:
a decision is reopened only when a *named load-bearing assumption* is shown false today,
with evidence. "I'd have picked otherwise" is not grounds; "the library was chosen for
feature X, which the stdlib has shipped natively since" is.
This skill **verdicts and routes** — the re-decision itself happens in the routed skill.
## Phase 0 — Load profile & inventory sources
1. Read `.claude/PROJECT.md` — **Stack**, **Architecture**, **Integrations**, **Plans
location**. Missing or `TEMPLATE` → fall back to the root `CLAUDE.md` (always in context)
when it carries those facts, proceeding on it and noting you're running without a kit
profile; only if *neither* has them, **STOP**, run `/bootstrap` first.
2. Decision sources, in order of authority:
- `docs/adr/` (or the ADR location in `PROJECT.md`) — recorded decisions.
- The Plans location — `/select-tech` reports, `/rollout` strategies, archived plans
with decision sections.
- `CONTEXT.md` — terms that encode decisions.
- **Undocumented decisions** — load-bearing choices visible only in code: the
framework, the queue, the ORM, a pervasive pattern. No record ≠ no decision; it means
the assumptions were never written down.
3. Recalled knowledge about any tool or library is **dated by construction**
(`core.md`) — and the revisiting agent is itself the stalest instrument in
the room: its sense of "what people use now" froze at training time. That disqualifies
it as a *source* and makes its own instinct one more assumption to test — every
external fact in Phase 2 gets verified live, including the ones that feel certain.
## Phase 1 — Extract the load-bearing assumptions
For each decision in scope, state: **what was decided · when · what it assumed.**
- From an ADR: read its Context/Consequences; the assumptions are usually explicit.
- From an undocumented decision: **decision archaeology** — `git log` the introducing
commit(s), the PR description if reachable, the state of the tree at the time. Write
down the reconstructed assumptions and mark them **RECONSTRUCTED** (lower confidence —
the bar for calling them broken is correspondingly higher, since you may have guessed
the rationale wrong). Propose a retro-ADR via `/domain-model` so the next revisit
doesn't re-dig.
- An assumption is load-bearing only if its falsity would have changed the decision.
List 2–5 per decision, each **falsifiable** ("traffic stays under N", "no native
alternative exists", "team stays at one squad") — vague assumptions can't be tested and
don't count.
## Phase 2 — Test each assumption against today
**Predict before you peek** (`core.md`): before checking, write the expected
finding; a surprise is signal either way.
- **Internal evidence** (the repo can answer): current scale/usage numbers, call-site
counts (`grep -rn`), whether the pain the decision solved still exists, whether the
constraint it honored still binds, churn around the decision's code. Fan out agents for
breadth; every claim cites `path:line` or a command's output.
- **External evidence** (the world can answer — this is where research happens):
is the dependency alive (issue tracker, release cadence, maintainer count — the
`/select-tech` lens: the tracker over the README)? Has the ecosystem moved — language/
framework/platform now covering natively what the dependency was adopted for? Has a
category-winner emerged since? Verify via WebFetch/WebSearch **live, never from
memory**. A broad "what does the landscape look like now" question routes to the global
`/deep-research`; a testable "would our hard case work on Y now" routes to `/spike`.
- **User evidence** (only the user can answer): team size/shape changes, product
direction, actual production numbers not visible in the repo. Ask via
`AskUserQuestion` — never assume the org held still.
## Phase 3 — Verdict per decision
| Verdict | Meaning | Action |
|---------|---------|--------|
| **HOLDS** | load-bearing assumptions verified true today | re-affirm: note "revisited YYYY-MM-DD — holds" on the ADR; no further work |
| **STRAINED** | an assumption is weakening but not false | set a **tripwire** — a measurable condition ("p95 > Xms", "library goes 12 months without a release", "second team forms") recorded on the ADR; do NOT reopen now |
| **BROKEN** | a named load-bearing assumption is false today, with evidence | reopen — route in Phase 4 |
The **anti-relitigation gate**: a BROKEN verdict must cite the assumption verbatim and
the evidence that falsifies it. If you cannot fill both slots, the verdict is HOLDS or
STRAINED — however much a different choice might appeal. Conversely, HOLDS must rest on
*checked* assumptions, not on deference to the document: "the ADR says so" is not
verification.
## Phase 4 — Route what's broken; record everything
| Reopened decision is about… | Route |
|-----------------------------|-------|
| A library/framework/service choice | `/select-tech` — fresh selection; the incumbent goes on the ballot with its **escape cost** priced in |
| Structure / module shape | `/arch-health` (find the leverage) or `/prepare` (change is known) |
| A service boundary (split/merge) | `/decompose` |
| Shipping the replacement | `/rollout` — a reversed decision is usually a risky migration |
Recording (via `/domain-model`): **never edit a past ADR's substance — supersede it** with
a new ADR linking back ("supersedes ADR-NNNN; assumption X broken by Y"). History is how
future sessions avoid re-digging. HOLDS/STRAINED annotations (revisit date, tripwires) are
the only in-place additions. Apply file changes only with user confirmation.
## Output
`Write` the table below as a durable report to the **Plans location** from `PROJECT.md`
(e.g. `<plans>/<YYYY-MM-DD>-revisit.md`; git policy per `PROJECT.md` → Artifact git
policy) — tripwires are worthless if they die with the session — then present it:
```
## Decision Revisit — <scope>
| Decision (ADR/source) | Age | Load-bearing assumptions | Verdict | Evidence | Route |
### Reopened
- <decision> — assumption broken: "<verbatim>" — evidence: <fact> → /select-tech | /prepare | /decompose
### Tripwires set (STRAINED)
- <decision> — reopen when: <measurable condition>
### Undocumented decisions found
- <choice> — reconstructed assumptions … → retro-ADR proposed
### Held
- <decision> — revisited, holds (assumptions checked: …)
```
## Hard rules
- **Assumption audit, not preference audit.** Reopen only on a named broken assumption
with evidence; taste is never grounds.
- **HOLDS requires checking.** Re-affirming without testing the assumptions is
ossification wearing a checkmark.
- **External facts verified live** — recalled library/ecosystem knowledge is dated by
construction.
- **Supersede, never rewrite.** Past ADRs are history; changes land as new ADRs.
- **Verdict and route only** — the re-decision happens in `/select-tech` / `/prepare` /
`/decompose`, not here.
## Cross-reference
- **`/select-tech`** — executes a reopened technology choice (incumbent on the ballot).
- **`/decompose`** — executes a reopened service-boundary decision.
- **`/domain-model`** — owns the ADR log this skill reads, annotates, and supersedes into.
- **`/arch-health`** — scans code for rot; this skill scans decisions for staleness. Its
"sanctioned exception" check is the meeting point: what it must not relitigate, this
skill is allowed to test.
- **`/retro`** — mines what *recurred*; this skill tests what was *assumed*.
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!