resolve_drift
Records a human resolution for a detected drift anchor — fix, supersede, acknowledge, dismiss, harden, or soften — so violations get closed out, parked with a review date, or escalated to a blocking gate.
Instructions
Record a resolution for a drifting anchor — the human feedback loop.
6 actions: • fix — "we fixed the code/reality to match intent" → state becomes aligned • supersede — "intent evolved, this is the new direction" → state becomes aligned • acknowledge — "we know, parking it for now" → state becomes held (with optional review date) • dismiss — "false positive, not actually drifting" → edges dismissed AND the gate stops firing on it (hit_term: just that word; gate:false: close the edges but keep the gate watching) • harden — "re-injected but still violated, enforce it" → card_policy.gate_mode=hard (PreToolUse will BLOCK) • soften — "back off to a warning" → gate_mode=soft
WHEN TO CALL: • After drift_status shows 🔴 drift or 🟡 review items • When the user says "that's fixed" / "ignore that" / "we changed direction" • When acknowledging a known gap with a review date
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"anchor_id": "<anchor_id>",
"action": "<action>"
},
"name": "resolve_drift"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| gate | No | For dismiss: false = these detections were false positives, close them, but KEEP the gate watching this anchor (its signals still fire). Use when the anchor's rule is right and only this evidence was wrong — e.g. a lexical hit in a file that is not what the rule is about. Default true also silences the gate (whole anchor, or just hit_term). | |
| action | Yes | Resolution action. With candidate_id (an orphaned proposal): 'surface' keeps it visible for the human, 'dismiss' retires it. | |
| hit_term | No | For dismiss: silence only this match term (the word the gate quoted back at you). Omit to silence the whole anchor at the gate — prefer the term, so the anchor's real detections keep working. | |
| anchor_id | Yes | The drift_anchor ID to resolve | |
| rationale | No | Why this resolution (recorded for audit trail) | |
| candidate_id | No | Resolve an orphaned proposal (from recall({ dream: true })) instead of an anchor: pass its candidate_id with action surface | dismiss and a rationale that references the North Star. (Absorbs resolve_proposal.) | |
| review_after | No | For acknowledge: ISO date to re-check (e.g. "2026-07-04") | |
| superseded_by | No | For supersede: the new anchor ID that replaces this one |