← Files incident.ioARCHIVED FILE

skills/doctor/references/content-drift.md

4.1 KB · Oct 7, 2026 · 18:03 UTC

↓ Download file

# The content-drift leg

Operational content drifts apart: a runbook restates tool mechanics a skill owns and
the copies diverge; a procedure names a lever that was replaced; a doc points at
another doc that no longer carries the fact. Each copy looked right when written. This
leg finds the drift across every content pair — runbook↔skill, skill↔skill,
architecture↔runbook — and routes each finding, without editing anything.

It reads whatever corpora the session can reach: the workspace's runbooks,
architecture docs, and plugin skill trees, plus plugins via `extension_plugin_list`.
Where a corpus is out of reach, the report says which pairs went unchecked.

## The checks

Work per system (the pipeline, the database, the queue), pairing every artifact that
speaks about it. Where the session can delegate, fan the systems out to sub-agents —
one per system keeps each reviewer's reading load honest; otherwise work them
serially.

1. **Restated subjects.** A runbook or doc explaining a skill's subject — how to call
   its tools, what null versus zero means, a generic flow — holds a second copy that
   drifts. The jurisdiction test is the runbooks skill's format ("a skill owns one
   system's tools and result semantics; the runbook owns the symptom, thresholds, and
   decision"); apply it, don't restate it. Compare the copies before reporting: where
   they already disagree, say which is current — the divergence, not the duplication,
   is the finding's severity.
2. **Dead levers.** Every flag, gate, tool, and command that procedural content tells
   a responder to reach for, verified against what exists: search the codebase where
   the session has one, check tool listings, ask the user for what neither can reach.
   A lever that no longer exists is the leg's highest-severity finding — someone
   reaches for it mid-incident and finds nothing. Report what replaced it when the
   verification turned it up; never guess a replacement.
3. **Stale pointers.** Ownership disclaimers ("X is owned by <doc>") verified that the
   named home actually carries the content; format docs that cite a file as their
   worked model verified that the exemplar still models the rule. A pointer to a home
   that doesn't hold the content strands the only real copy wherever it happens to
   live.
4. **Orphaned generic content.** Skill-shaped content — one system's tool contract,
   result semantics, a generic interrogation flow — living inside a runbook, where no
   skill owns the system at all. That's an extraction candidate: a brief proposing the
   new skill and what the runbook keeps, never an extraction performed here.

## Routes

| Finding | Route |
|---|---|
| Restated subject, copies agree | trim-and-chain brief → the `runbooks-author` skill's maintain job (or the owning doc's editor) |
| Restated subject, copies disagree | same brief, led by which copy is current — severity from the disagreement |
| Dead lever | a correction brief naming the verified replacement, or "replacement unknown — verify before editing" |
| Stale pointer | fix brief for whichever end is wrong: repoint, or move the content home |
| Orphaned generic content | extraction brief → the `skill-authoring` skill's create job |
| Pair unverifiable from this session | reported in "Not readable from this session" |

## Rules

- **Propose-only, like every leg.** The report carries briefs; nothing is trimmed,
  repointed, or extracted in this run.
- **Verify both copies before alarming.** A passage that looks like a restatement may
  be a deliberate one-clause use of a neighbouring fact — the runbooks format
  sanctions those. Quote what you compared.
- **Verify against what agents actually receive.** A local checkout can lag the
  branch the plugin syncs from; verify anchors and levers against that branch and the
  live tool listings, and say so when the checkout you read from is behind it.
- **Scale to the estate.** A first run on a large corpus reports the worst systems and
  says what it didn't cover; "checked everything, found nothing" from a run that
  plainly couldn't have checked everything is the report style this skill exists to
  prevent.

SHA-256: 91f066d4f86d39b70dcc1e7e104159f833531f20c85b1e9420d2fbc6a3b1bcee