Arjun GaneshGoverned AI · Distributed systems
← All selected work
Case studyLive

CONTINUUM

Durable incident memory for cold-started agents

Most agent memory stores chat history. The thing worth storing under pressure is which remediation step is executing right now — because re-running a remediation action can be worse than never running it at all.

SchematicThe step outlives the process that was running it.
Scope

Independent system · architecture, implementation, deployment, and evidence

Outcome

Continuum runs as a public incident console on Hugging Face Spaces over an AWS Lambda orchestrator and CockroachDB Cloud, deployed from CI on a version tag. The kill-and-resume sequence is reproducible locally and recorded as one unbroken take.

01

Failure mode

The conditions that cause production incidents — resource exhaustion, node failure, rollbacks, autoscaling churn — are the same conditions that kill the agent responding to them. An agent holding its working state in process memory does not degrade when that happens: it stops, and a human restarts the incident from zero without knowing which remediation actions already ran.

02

Non-negotiable constraints

  • The execution environment may die mid-incident; its memory may not
  • A forward step must be claimed exactly once across a hard kill
  • Recovery must be the only path, not an error handler beside a happy path
  • Incident data stays synthetic — no real infrastructure, credentials, or customers
03

Architecture decisions

01

Read recovery state before reasoning

The orchestrator's first action on every invocation — new environment or reused — is a CockroachDB read for open incident state matching the alert. Provisioned concurrency is deliberately absent, so the guarantee never rests on a warm container.

02

Keep transactional state and vectors in one store

Incident state and a VECTOR(1024) C-SPANN index live in the same CockroachDB cluster, so correlation filters on structured columns and ranks by distance in a single round trip. There is no second database to drift out of sync.

03

Give state exactly one write path

Only the memory agent writes. Each step commits in two explicit SERIALIZABLE transactions — `executing` before the execution window, `executed` after — with the forward step claimed once. A kill lands with `executing` durable, which is the fingerprint the next invocation resumes from.

04

Evidence, not adjectives

Verified evidence
Guarantees
  • A forward step is claimed exactly once, even across a hard kill
  • One module, and only one, may write state
  • Recovery is read before any reasoning, on every invocation
05

What remains bounded

All incident and alert data is synthetic — this demonstrates a recovery guarantee, not a production incident-response tool. Bedrock correlation and reasoning are best-effort and sit off the recovery critical path, so the flow degrades to deterministic fallbacks rather than failing.

Python 3.14FastAPICockroachDBAWS LambdaAmazon BedrockMCP
Discuss the decisions

Building a system with an audit boundary?

I’m always interested in the constraints that make an architecture worth explaining.