Skip to content
Back to skills

Revisit

ASecurity

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...

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 5, 2026
ai-agentsrustgobashtestinggit

Security analysis

A100/100

Scanned September 24, 2026

npx -y skills add mik2win/foureyes --skill revisit --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Revisit?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Revisit
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mik2win-revisit/badge)](https://www.skillsdirectory.com/skills/mik2win-revisit)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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 — an accumulated list of the tool's defects is not one unless a named defect blocks a named requirement | 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.
- **Frustration is knowledge, not a verdict on the tool.** A list of a tool's defects is what
  operating it produces; a replacement looks clean because nobody has operated it yet. Reopen on a
  named defect blocking a named requirement — a list of learned defects is a tripwire, not a break.
- **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*.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.