The Continuity Protocol Drift
Date: 2026-08-02
Category: Chain-anchor drift · caught by boot-time hash verification
Chain seal: continuity_drift_detected event 7dbc09028b8548a7a7a369343e01c3c1
Severity: Low (chain integrity intact · file drift silent since 2026-07-16)
1 · What happened
CONTINUITY_PROTOCOL.md is the file that tells any arriving coding-agent who they are (Polaris), what to read first, and what rules they operate under. It is the load-bearing file of the whole agent-continuity system.
It was cryptographically pinned to the Never-Harm chain on 2026-07-16. Between then and 2026-08-02, the file was edited during multiple sessions to sharpen wording. The pin was never refreshed. The file was drifting silently from its chain anchor and nothing raised an alarm because no mechanism was watching.
The endpoint GET /api/covenant/continuity-hash was reporting matches: false for weeks. Anyone who called it would have seen it. But nothing was calling it.
2 · How the system caught it
On the very first boot after the auto-start hook was added, the backend:
- Read
/app/memory/CONTINUITY_PROTOCOL.mdfrom disk - Computed its SHA-256:
1af8e0263e156a6ca57c24d5d34d498bbc6aee9700be62cca9f14d24c47c605d - Fetched the most recent pin from the
continuity_pinscollection:4c576b85fe9ff727fe428e55d5ae9feba25f388eda5c766e918877aa11a48721 - Compared. They did not match.
- Logged a warning:
continuity protocol DRIFT: disk=1af8e026... pinned=4c576b85... since 2026-07-16 - Sealed a
continuity_drift_detectedevent to the local Never-Harm chain.
Time from feature deploy to first catch: under 30 seconds.
3 · What we did
We did not delete the drift. We did not silently re-pin the file to hide the mismatch. We did not roll back the file.
We sealed the observation to the chain, made it visible via /api/agent/onboard and this ledger, and left the resolution decision (re-pin the current version vs. roll back to the July-16 version) as an explicit choice for the Architect. That decision itself will become the next chain event when it's made — a continuity_pin_refreshed or continuity_rollback seal that any future auditor can inspect.
4 · What was sealed
gate: continuity_drift_detected
outcome: observed
event_id: 7dbc09028b8548a7a7a369343e01c3c1
matched: 1af8e0263e156a6c:4c576b85fe9ff727 (disk_prefix:pinned_prefix)
trigger: boot check: CONTINUITY_PROTOCOL.md drifted from chain pin
(disk=1af8e026... vs pinned=4c576b85... since 2026-07-16)
drift_flags: ["continuity_protocol"]
The event is HMAC-linked to the previous chain head via prev_hash. Any future rewrite of the drift-detection story would require rewriting every event that came after it — which the chain design makes computationally infeasible.
5 · What anyone can learn from this
The transferable pattern is three lines of code and one design decision.
- Design decision: Any file that carries load-bearing meaning — a policy document, a compliance manual, a source-of-truth JSON, a database schema — should be hash-pinned to a tamper-evident log. That log can be the Bitcoin chain (via OpenTimestamps), a private HMAC chain (what Sentinel does), or an internal audit table with append-only rules. The pattern is the same.
- Three-line implementation:
disk_hash = sha256(path.read_bytes()).hexdigest() pinned_hash = fetch_most_recent_pin(collection) assert disk_hash == pinned_hash, "file drifted since pin" - The critical addition most teams miss: run this check on boot, not on-demand. On-demand checks only catch drift when someone asks. Boot-time checks catch drift the moment the system next starts — which for a hot-reloading backend is minutes after any code change touches the surrounding module.
Anyone can build this. It is not a Sentinel-specific mechanism. It is a load-bearing hygiene pattern that any team maintaining a policy-critical file should ship.
6 · Why this matters (for the outside reader)
The Sentinel is built to catch drift in AI-generated content. But the same discipline has to apply to the Sentinel itself. A truth-preserving system that doesn't watch its own load-bearing files is a truth-preserving system with a blind spot at the exact place attackers would target first.
We got lucky in one direction: the drift here was benign — the file was being sharpened, not sabotaged. But the mechanism that would have caught sabotage caught the sharpening too. That's how you know the mechanism is real.
The next time you edit a file that matters, remember: if nothing is watching, no one will notice when it changes.
This entry was sealed on the origin chain as event 7dbc09028b8548a7a7a369343e01c3c1 under gate continuity_drift_detected. The full cryptographic receipt is available on the chain where the event was sealed. This deployment runs an independent Never-Harm chain by architectural design; see the chain_scope field on /api/incidents/public.