KQ-2071 · CAUSE/LINES

Cause Lines

An agent activity feed drawn oldest first on a causal gutter, where selecting an event lights its chain: lines start at the selected node and grow along their own paths up to the events that caused it and down to the ones it caused on springs.glide, hop after hop, while unrelated events dim and the selected node's ring lands on springs.snap. Every link is always there as a faint ghost, a link through an event the agent filter hides is drawn dotted, and in a narrow container the gutter gives way to indented rails whose rows step in by generation. The feed is a listbox: Up and Down walk it, Shift with Up or Down jumps to the nearest cause or effect, P pins the chain and Escape unpins it.

KQ-2071 · CAUSE/LINES

Sync incident

Fieldline · eu-west · 13 events

Schema v12 rolled out to eu-westWarden09:40:12
Webhooks now carry region_codeIntake09:40:48
214 rows with an unknown fieldLedgerwarning09:41:30
Rows parked in quarantineLedger09:41:31
Mirror push missing 214 rowsCourierwarning09:42:10
Courier retries the batchCourier09:42:14
Retry storm on /syncCouriererror09:43:02
Sync latency p95 at 4.1 sWardenwarning09:43:20
Webhook acks slow to 3.2 sIntakewarning09:43:41
Duplicate payloads storedIntakeerror09:44:05
Throttle on /sync engagedWardenerror09:44:30
On-call paged: Ines VargaWarden09:45:00
Mapping v12 deployedLedger09:51:18

Retry storm on /sync

15 min ago

1,880 retries a minute from 9 workers; each 409 resets the backoff.

Up and Down walk the feed. Shift with Up or Down jumps to the nearest cause or effect. P pins the chain, Escape unpins it.

Retry storm on /sync · all agents · live · 13 events

Install

One command — the source lands in your repo. Or copy it from the Code tab.

$ pnpm dlx shadcn@latest add @kinetiq/cause-lines

Props

events
CauseEvent[]
default defaultCauseEvents
The feed, any order: { id, at, agent, severity, title, detail? }. Drawn oldest first so causes sit above effects.
links
CauseLink[]
default defaultCauseLinks
Which event set off which: { from, to }.
agents
CauseAgent[]
default defaultCauseAgents
The agents writing into the feed, in filter order: { id, name, initial? }.
severities
CauseSeverity[]
default defaultCauseSeverities
Severity levels: { id, label, tone } where tone is neutral, accent, warn or danger.
value / defaultValue
string | null
default — / null
The selected event id, controlled or initial.
onSelectEvent
(id, event) => void
default —
Fires from the click or key that selected an event, or with null when a filter hid it.
pinned / defaultPinned
string | null
default — / null
The event whose chain stays lit while the selection moves, controlled or initial.
onPinChain
(id, chain) => void
default —
Fires from P or the Pin button with the pinned id (or null) and its lit chain in feed order.
agentFilter / defaultAgentFilter
string | null
default — / null
The agent whose events show, or null for every agent.
onFilterAgent
(agentId) => void
default —
Fires from the chip that changed the filter.
status
"live" | "paused" | "loading" | "empty" | "error"
default "live"
Whether the feed is streaming, held, or has nothing to show yet.
onLiveChange
(live) => void
default —
The Live / Paused pill was pressed; omit it and the pill is a label.
onRetry
() => void
default —
Try again was pressed after the feed failed to load.
now
number
default defaultCauseNow
The moment relative times count from, in ms.
reach
number
default 3
How many hops of causes and effects light up each way, 1 to 6.
title
string
default "Sync incident"
The feed's heading and the listbox's name.
subtitle
string
default "Fieldline · eu-west"
Under the heading, before the event count.
curveStyle
"arc" | "elbow" | "chevron"
default "arc"
How a causal line bends into the gutter: round bows, square brackets or angled chevrons.
dimLevel
number
default 0.3
Opacity of the events outside the lit chain, 0.1 to 0.6.
accent
"cobalt" | "plum" | "mint" | "ink" | string
default "cobalt"
The chain, the selection and Live: a named pigment or any CSS colour.
disabled
boolean
default false
Read only: nothing can be selected, pinned or filtered.
className
string
default —
Classes for the surface; it caps at 36rem tall and the feed scrolls inside.