All posts
Muhtalip Dede profile photoMuhtalip Dede · Founder of kprompt3 min read

Building AI SRE in Public #7: AI Timeline

Incident chronology as typed EvidenceRef[], not chat folklore. Events, rollout revisions, and HPA in one Investigation artifact — with honest degraded[] when Prom/OTel/mesh are missing.

This is episode 7 of Building AI SRE in Public. Episode 6 framed investigation as a gated graph — fan-out, independent verify, merge into a refuse-able artifact. Timeline answers a different question operators ask every night: not “what is broken?” but “in what order did the world change?” Chat scroll is a terrible chronology. Typed EvidenceRef[] is not.

The claim

Postmortems and handoffs need an ordered evidence trail: Events, controller revisions, HPA transitions — pointers to signals, not a novel. AI SRE should emit that trail as data (Investigation.timeline[]), degrade honestly when Prom/OTel/mesh are missing, and never invent timestamps to make the story prettier.

Chat is folklore with timestamps

A forty-turn agent session can contain the truth and still fail institutional memory. “We looked at events, then logs, then scaled” is not reviewable in CI, not mergeable across tools, and not comparable across incidents. Folklore does not jq. Chronology does.

Chat chronologyTyped timeline
Scroll order = claim ordertime-sorted EvidenceRef[]
Hard to put in a ticketSame Investigation envelope as investigate/why
Invented narrative gluedegraded[] when signals are missing
Dies with the sessionJSON artifact for humans and pipelines

What a timeline walks (MVP)

  • Events on the target workload (Deployment, StatefulSet, DaemonSet, or Pod) and related pods
  • ReplicaSet revisions for Deployments (deployment.kubernetes.io/revision)
  • ControllerRevision history for StatefulSets and DaemonSets where available
  • HPA targeting the Deployment (status + condition transitions)

Primary payload is timeline[] of EvidenceRef — the same ADR-0014 Investigation kind used by investigate and why. Findings may be thin; chronology is the product. Window defaults to something like 1h so “what happened” stays bounded.

Chronology, not chat

kprompt "timeline for api" -n payments
kprompt "what happened to ledger" -n payments -o json
kprompt "timeline for StatefulSet db" -n payments

kprompt "timeline for api" -n payments -o json \
  | jq '{summary, degraded, timeline: [.timeline[] | {type, reason, message, ts: .timestamp}]}'

vs investigate / why

investigatewhytimeline
FocusMulti-hop RCACause treeChronology
Primary fieldfindingsSymptom→Causetimeline[]
Trigger“investigate X”“why is X pending”“timeline / what happened”

Same envelope, different jobs. Investigation Graph (ep.6) may fan out signals; Timeline orders what already happened. Neither replaces PlanResult for mutate — chronology informs the plan; approval still gates apply.

Honesty: degraded beats fiction

MVP lists prometheus, otel, and mesh in Investigation.degraded. Timeline does not invent metric spikes or trace spans to fill gaps. That is the same compiler temperament as PlanResult: refuse to fake structure. When those hops land, they append EvidenceRef kinds — they do not rewrite the past into a prettier story.

Why this belongs in an AI SRE series

Classic AIOps dashboards had timelines and still burned trust when they auto-acted. LLM agents have narratives and still burn trust when they skip artifacts. AI SRE needs both: a time-ordered evidence trail and a refuse-able plan. Timeline is the trail. PlanResult is the proposal. Approval is the boundary. Verify closes the loop (ep.6 / Medium “Investigate → Verify”).

What ships vs building

  • Shipped: timeline / what happened → Investigation with timeline[] (Events, RS/ControllerRevision, HPA)
  • Shipped: same --output json contract as investigate/why; degraded[] for Prom/OTel/mesh
  • Building: metric/trace/mesh hops on the chronology
  • Building: richer app/timeline viewer surfaces on Team (when enrolled)
  • Non-goal: chat-only RCA as the source of truth; inventing signals to fill gaps

Try the chronology

Non-prod drill

# kind + a broken workload (see kprompt-examples)
make break SCENARIO=01-crashloop
kprompt "timeline for api" -n payments
kprompt "investigate api" -n payments   # RCA beside chronology
# Prefer reading JSON timeline[] before any suggested mutate

If your AI ops tool cannot export “what happened” as ordered evidence without scraping a chat UI, you still have folklore — just with better English.

Next

Episode 8 is Cluster Memory — durable local facts that bias Observe context without becoming sole proof. The hub tracks the rest of the arc.