decision-archaeology · git:20260727.e7caac4 · 2026-07-27 · sha256 0229a700de4b2cd9
decision-archaeology git:20260727.e7caac4A
Immutable. This exact content is served forever at /api/v1/blob/0229a700de4b2cd9.
--- name: decision-archaeology description: Reconstruct the rationale for a past decision by walking time-ordered artifacts (commits, PRs, design docs, chat logs, internal memos). Self-contained — does not invoke `/source-map` or other research-pack skills, because the source surface is time-ordered and internal, and authority is established by an artifact's place in the history rather than by external curation. Produces `<topic-slug>-archaeology.md` with chronology, the rationale chain, the alternatives that were considered and rejected, and a revival check flagging rejected alternatives whose original rejection rationale no longer holds. Depth cues — `quickly`, `top three`, `briefly`, `summary only` for the main rationale chain; `comprehensively`, `exhaustively`, `in depth`, `extensive` for branch alternatives and dead ends. --- # /decision-archaeology Reconstructs *why* a past decision was made by following its artifact trail in chronological order. ## Output rendering Rationale / narrative — Use short ## headings and 2–3 sentence paragraphs. Don't force narrative into a table. Key–value / one record — For a single record's fields, use an aligned key: value list, not a two-row table. ## When to invoke - "Why did we choose X over Y?" type questions. - Pre-refactor work — before changing a decision, understand it. - Post-incident — the decision predates the people on call. - Not for forward-looking decisions — those go to `/compare-hypotheses`. ## Self-contained orchestration This skill is **self-contained**. It does not invoke `/source-map` or any other research-pack skill. The reason is methodological, not incidental: - The source surface for archaeology is **time-ordered**: commits, PRs, design docs, memos, chat archives, dated incident reports. - Internal artifacts dominate; external curation is mostly absent. - Authority is established by an artifact's place in the history (who signed off, when, in what context), not by the external-authority conventions `/source-map` is built to discover. The skill `does not invoke` `/source-map` because applying `/source-map`'s authority-curation discipline to a time-ordered internal trail would produce miscategorisation: a junior engineer's PR comment can be the decisive primary source, and a senior architect's design doc can be the document that the team ignored. ## Methodology Rationale reconstruction has three converging disciplines: 1. **Chronology** — order the artifacts by timestamp, not by importance. The order of events explains the decision; reordering by salience loses it. 2. **Rationale chain** — each artifact links to a "because" that points back to an earlier artifact or an external constraint. Trace the chain. 3. **Alternatives-considered** — record what was rejected, and why, from the artifacts. Decisions that don't name their alternatives are weaker decisions. ## Procedure 1. **Identify the decision** — the change, the doc, the commit that embodies the decision. This is the *terminal* artifact. 2. **Walk backwards** — use Read, Grep, Glob on local artifacts; use `source-extractor` subagent on URL-bearing artifacts (linked issues, external docs). 3. **Build chronology** — strictly time-ordered list of relevant artifacts. 4. **Extract rationale per artifact** — what changed, why, what was rejected, who signed. 5. **Surface alternatives-considered** — the rejected branches deserve their own section. 6. **Run the revival check** — for each rejected alternative, ask whether *the rationale that rejected it still holds today*. A rejection is never an unconditional verdict: it was conditional on the constraints at decision time (the library didn't exist, the team was too small, the latency budget was tighter, the cost was prohibitive). When a constraint that drove the rejection has since changed, the rejection is **stale** and the alternative is a **revival candidate**. See *The revival check* below. This is the payoff of recording *why* each alternative was rejected: a rationale you can name is a rationale you can later audit against the present. 7. **Write `<topic-slug>-archaeology.md`**. No `<topic-slug>-sources.md` is produced. `<topic-slug>` is the kebab-case topic slug; the naming rule lives in the `/desk-research` skill body (§ Typed, topic-named artifacts). ## `<topic-slug>-archaeology.md` output schema ```markdown # Decision archaeology — <decision name> ## Terminal artifact - <commit / PR / doc> dated <date>. <One-paragraph summary of what it embodies>. ## Chronology 1. **<date>** — <artifact>. <One-sentence rationale>. Cited from: <path or url>. 2. **<date>** — <artifact>. (same shape). ## Rationale chain - The decision rests on: <antecedent>. - Which rested on: <prior antecedent>. - Which rested on: <external constraint or first cause>. ## Alternatives considered - **<alternative name>** — rejected at step <N>. Reason: <citation>. - **<alternative name>** — rejected at step <N>. Reason: <citation>. ## Revival candidates - **<alternative name>** — rejected because <original rationale>. That constraint has changed: <what changed, with a citation or dated signal>. The original reason no longer holds, so this is a candidate to reconsider. (Not a recommendation to adopt it — only a flag that its rejection is stale.) ## Open questions - <a rationale link the artifact trail does not actually establish>. ``` The revival check is **distinct from** the alternatives-considered record above it. Alternatives-considered is the *historical* record — what was rejected and why, as of the decision. The revival check is a *forward-looking* audit of that record against today's constraints: it reads each historical rejection rationale and asks whether it survived. An alternative that was rejected for a reason still true today does *not* become a revival candidate; only one whose rejection rationale has been overtaken by a changed constraint does. ## Citation discipline Every chronology entry carries a citation (the path, the URL, the commit hash). Inferred rationales — where the artifact does not state the "because" outright — are marked `[inference]`. Cross-artifact syntheses are marked `[synthesis]`. ## Depth cues - `quickly`, `top three`, `briefly`, `summary only` — return the main rationale chain only; skip alternatives-considered and the revival check. - `comprehensively`, `exhaustively`, `in depth`, `extensive` — walk branch alternatives and dead ends; surface artifacts that influenced the decision indirectly; include rejected drafts; run the revival check over every rejected alternative.