Decision Drift Guard
A supersession is a new accepted user decision replacing an earlier one. Make it explicit before consequential work.
Steps
Load the ledger. Path: .agents/decision-ledger/sessions/<session-id>.md relative to worktree root. Use host session ID or derive from first request. Each session reads/writes only its own file. Filesystem fails: keep ledger in context, say persistence unavailable.
Track decisions. One line per active decision: D-<n> | scope | chosen approach | acceptance. Suggestions stay proposed until user accepts.
Classify new statement against active decisions in same scope:
| Statement means... |
Class |
Action |
| Same meaning |
same |
continue |
| Adds detail or fixes mistake |
refinement |
update record |
| Separate scope |
branch |
create record |
| "Use this instead" |
supersession |
run Gate 1 |
| Cannot both hold |
conflict |
run Gate 1 |
| Cannot tell |
unclear |
ask one question |
Watch for: "actually", "instead", "forget that", "on second thought". Compare meaning, not phrase overlap.
Gate 1 (supersession or conflict only): Show old decision, new instruction, impact. Ask: replace, branch, or refine. Wait for choice.
Gate 2 (after replacement confirmed): Touches architecture, public behavior, data shape, security, cost, or irreversible actions: run /grilling and wait. Otherwise: which old assumption dies, what changes, what must stay.
Commit supersession. Mark old record superseded. Link new with supersedes: D-<n>. Recompute plan, tests, tool actions. Label stale recommendations.
Completion: one active record per replaced scope, every downstream action uses it.
First pass format
- Ledger: loaded or unavailable.
- Classification: supersession or conflict.
- Old decision:
<old>. New instruction: <new>. Impact: <changes>.
- Paused. Choose:
replace, branch, or refine.
1---2name: decision-drift-guard3description: Catch midstream decision changes before plans drift.4---56# Decision Drift Guard78A supersession is a new accepted user decision replacing an earlier one. Make it explicit before consequential work.910## Steps11121. **Load the ledger.** Path: `.agents/decision-ledger/sessions/<session-id>.md` relative to worktree root. Use host session ID or derive from first request. Each session reads/writes only its own file. Filesystem fails: keep ledger in context, say persistence unavailable.13142. **Track decisions.** One line per active decision: `D-<n> | scope | chosen approach | acceptance`. Suggestions stay proposed until user accepts.15163. **Classify new statement** against active decisions in same scope:1718| Statement means... | Class | Action |19|---|---|---|20| Same meaning | same | continue |21| Adds detail or fixes mistake | refinement | update record |22| Separate scope | branch | create record |23| "Use this instead" | supersession | run Gate 1 |24| Cannot both hold | conflict | run Gate 1 |25| Cannot tell | unclear | ask one question |2627Watch for: "actually", "instead", "forget that", "on second thought". Compare meaning, not phrase overlap.28294. **Gate 1** (supersession or conflict only): Show old decision, new instruction, impact. Ask: replace, branch, or refine. Wait for choice.30315. **Gate 2** (after replacement confirmed): Touches architecture, public behavior, data shape, security, cost, or irreversible actions: run `/grilling` and wait. Otherwise: which old assumption dies, what changes, what must stay.32336. **Commit supersession.** Mark old record superseded. Link new with `supersedes: D-<n>`. Recompute plan, tests, tool actions. Label stale recommendations.3435Completion: one active record per replaced scope, every downstream action uses it.3637## First pass format3839- Ledger: loaded or unavailable.40- Classification: supersession or conflict.41- Old decision: `<old>`. New instruction: `<new>`. Impact: `<changes>`.42- Paused. Choose: `replace`, `branch`, or `refine`.