Skip to content

States, badges and health codes

The exact values behind a filter’s status line, its health verdict, the deployment’s warnings and the alerts Sift sends. For what they mean in practice, see Health, Actions and alerts and Filters and their lifecycle.

StateScores eventsFiltersMeaning
draftnonoCreated, with no spec to run yet.
authoringnonoA spec is being written and reviewed.
shadowyesnoScoring every event and escalating every one of them.
proposedyesnoAn operating point has been computed and is waiting on a person’s decision.
activeyesyesFiltering events that score below the approved threshold. The only state that filters.
pausednonoHolding events: Sift is not reading the source, so nothing is scored, filtered or sent to the agent.
retirednonoEnd of life. There is no move out of it.
FromToApproval neededAlso requires
draftauthoringnonea spec
authoringshadowgold-set approvala spec; a paired agent if the filter sends whole events
authoringdraftnone
shadowproposednonea trained model in shadow; a paired agent if the filter sends whole events
shadowactivenone (a resume)a standing threshold approval for the current version; a paired agent if the filter sends whole events
shadowpausednone
proposedactivethreshold approvala spec; a paired agent if the filter sends whole events
proposedshadownone
proposedpausednone
activepausednone
activeshadownone
pausedshadownone
pausedactivenone (a resume)a standing threshold approval for the current version; a paired agent if the filter sends whole events
any but retiredretirednone

Every move that reduces filtering needs no approval. The console names active to shadow Stop filtering and a move to paused Hold events. A move back into active from shadow or paused is a Resume, which re-affirms the standing approval with a written reason. Sift can also move an active filter to shadow itself: a fall-back.

The Filters page, the filter’s header and the threshold screen show at most two badges: first whether the filter is filtering, then whether anything is wrong.

BadgeShown when
FilteringThe filter is active and can filter at its operating point.
no first badgeThe filter is active and filters nothing. It always has a health verdict then (active.filters_nothing).
shadow, proposed, paused, draft, authoring, retiredThe filter is in that state, and so is not filtering. The badge shows the state’s name (rendered in capitals, such as SHADOW); its hover text reads, for example, “Shadow: not filtering”.
AttentionThe health verdict is attention. Hover text is the reason; it links to the filter’s Actions tab.
FaultThe health verdict is fault. Hover text is the reason; it links to the filter’s Actions tab.

A healthy filter (ok) has no health badge.

Each filter has one health verdict: ok, attention (a person should look) or fault (something is broken). A verdict that is not ok carries a code, a reason and the act that resolves it. The code is stable while the condition holds; the reason’s numbers change. Each code has one severity. Alerts and webhooks are keyed by the code.

On the dashboard, Alerts, the fleet table and the Filters list, a filter’s health can lag by a moment: a change to a filter itself shows at once, a new label or agent run can take a little longer. A filter’s own page, alerts and webhooks, and every approval show the current state.

CodeMeaningWhat to do (console action)
delivery.failingEscalations are not reaching the agent. On an active filter, it goes on filtering everything else; otherwise the verdicts it learns from are not arriving.Check delivery: Settings › Delivery. Check the Kindo connection and the agent.
polling.failingThe source has failed to poll 3 or more times in a row, so nothing new is scored.Check the source.
alarm.keep_filtering.driftA drift alarm is open and the filter keeps filtering through it, because On alarm is Keep filtering.Investigate.
alarm.keep_filtering.ceilingThe filter passed its trigger ceiling and keeps filtering through the alarm.Investigate.
deliver.verdict_shiftWith Shape delivery grouping, the agent finds grouped events actionable less often than events sent singly: grouping is hiding events it would act on. Under Stop filtering, the stage returns to measuring.Group less, or switch it back to measuring (Settings › Pipeline).
deliver.overdueHeld groups are past their due time and nothing released them. They count as undelivered, and Sift later sends them singly.Check delivery. See deliveries_overdue below.
guarantee.pausedAlways-escalate rules have had no answer from the decision model for 15 minutes or more, on an active filter. The filter runs as approved, without the escalations the rules would add.Check the decision model. Clears on the next answered batch.
queue.losingThe agent budget’s held queue lost escalations in the last hour: aged out past its age limit, or pushed out of a full queue. The agent never saw them. Clears an hour after the last loss.Raise the budget or the queue: Settings › Delivery. Or accept the loss.
loosened.driftSift moved the filter to its safer point on a drift alarm (On alarm is Filter at a safer point). It keeps filtering, at the looser point its approval named, so more reaches the agent. A second drift breach falls it back to shadow.Return to the approved point, or the alarm’s other moves (Investigate, Retrain).
CodeMeaningWhat to do (console action)
alarm.acknowledgedThe filter was resumed over an open drift alarm. It keeps filtering until the reading clears, seven days pass, or another signal breaches.Review the alarm.
fell_back.driftSift stopped the filter filtering on a drift alarm and withdrew its approval. It escalates everything.Resume or retrain.
fell_back.ceilingSift stopped the filter filtering when it passed its trigger ceiling, and withdrew its approval.Resume or retrain.
fell_back.unapprovedSift stopped the filter filtering because its current version has no approved operating point.Approve the running model or retrain, Approve on its evidence, or Retrain it.
approval.neededA new version changed what the filter filters, so it escalates everything until the running model is approved at it or it is retrained.Approve the running model or retrain.
version.pendingA version that needs approval waits behind the running one, which keeps running as it is until then.Review the change.
retrain.waitingA retrained model, or a stage ready to join, is waiting. The running model keeps filtering until somebody decides.Review the retrained model.
model.staleThe active model has gone more than twice its retrain schedule without a retrain (a never schedule ages as weekly).Retrain it.
active.filters_nothingActive, but filtering nothing: every stage that filters is in shadow, or no operating point is in force.Depends on the cause: Switch it back on in Settings, Review the retrained model, Review the proposed operating point, Train a model to propose one, or Review the operating point.
events.heldThe filter is paused. Its agent receives nothing from Sift until it scores again.Resume on the current model, or Move it back to shadow.
spec.missingThe filter has no spec, so there is nothing to run.Write its spec.
gold_set.waitingA gold set is waiting for review; nothing can train until it is approved.Review the gold set.
agent.unconfiguredThe paired agent says it has no instructions, so escalations go unjudged and its runs are left out of training.Configure its agent.
agent.no_verdictThe agent’s newest runs all returned no verdict Sift could read, so the filter has stopped learning.Check its agent (the paired agent), or Read the briefing (an agent Sift did not write).
agent.outdatedThe paired agent was generated to a contract version Sift no longer supports, so it may act twice on an event sent twice.Regenerate the agent and pair the new one.
displaced_agent.runningThe agent this filter replaced has run again, so both run on this traffic.Retire it in Kindo.
displaced_agent.unverifiedSift cannot confirm that the replaced agent has stopped, so no spend saved is reported.Check it in Kindo, or acknowledge it on Actions.
verdict_check.openEnough agent verdicts the decision model disputes are waiting for a person.Check the verdicts.
decision_fit.droppedThe decision model reads this filter less well than a feature it uses needs. Nothing is switched off.The feature’s own act.
guarantee.rule_reviewA plain-language rule sends fewer actionable events than a looser Decide threshold would for as many extra escalations.Review rule ”…” in Settings › Pipeline.
collapse.runawayOne group holds more than Runaway share of the last day’s events: almost certainly distinct events merged.Retune or switch it to shadow.
collapse.compression_shiftThe share of events Collapse folds away moved by at least Compression shift against the week before.Retune or switch it to shadow.
deliver.at_char_capGroup runs were sent full at the character cap in the last days, so their events were cut to fit.Fewer events per run, or a higher cap.
budget.boundThe agent budget is spent: it kept escalations back in the last hour, and they wait in the held queue (or as grouped runs) for room. The agent sees them late.Open the agent load: Settings › Delivery.
queue.fillingThe held queue is at the budget’s Warn at share of its depth limit, or its oldest item of its age limit. Past either limit, escalations leave it unsent.Open the agent load.
budget.record_onlyUnder Record only, escalations over the budget were recorded and not sent in the last hour.Open the agent load.
budget.nearAgent runs reached the budget’s Warn at share in 2 of the last 3 hours. Alerted only when it is the filter’s verdict.Open the agent load.
load.unboundedNo agent budget, and the agent runs the filter started were over its agent’s capacity in each of the last 2 hours. Only the deployment’s Kindo rate limit bounds them. Raised in shadow and proposed only, including on a filter with no agent-load settings of its own (it is then measured against the deployment’s default capacity). Runs a warm start sends count.Set a budget: Settings › Delivery.

The agent-load attention codes (budget.bound, queue.filling, budget.record_only, budget.near, load.unbounded) are not shown on a paused filter: events.held ends its list. A paused filter keeps its held queue, and neither sends nor ages it out until it resumes.

While a filter is being set up, its verdict is its current Setup step: setup.<step>.action when a person can do the step now, and setup.<step>.problem when the step stopped (a build failed, a set was rejected, a training run failed). Both are attention. A step Sift is doing, or one that cannot start yet, reads ok.

<step>Step title on the Actions tab
specWrite its spec
pair_agentConnect its agent; or Regenerate the agent, Fill in its agent’s instructions, Get its agent’s verdicts back
gold_setReview the gold set
start_shadowStart watching in shadow
collect_labelsCollect n labels; Collect 20 actionable events; or Collect verdicts on ranked hours
resumeResume on the current model
trainTrain a model
approve_thresholdApprove an operating point
measure_stageMeasure collapsing; Measure what grouping saves
collect_stage_verdictsCollect n cluster verdicts
approve_stageApprove collapsing repeats; Switch grouping on
stage_agentPair an agent that takes groups

GET /api/v1/system/status lists the deployment’s warnings. Each has a code, a severity (critical, warning or info), a message and a remedy. The Alerts page lists critical ones under Faults and the rest under Waiting on you.

CodeSeverityMeaningWhat to do
default_admin_passwordcriticalThe seeded admin account still uses the default password.Change the password from the account menu, or set SIFT_DEFAULT_ADMIN_PASSWORD before first start.
no_kindo_credentialwarningNo Kindo API key is stored, so nothing can reach Kindo.Add one under Administration. See The Kindo connection.
kindo_credential_unverifiedwarningThe stored key has not been verified against the API.Run Verify on the credential.
kindo_model_unselectedwarningNo model is chosen on the Kindo connection, so Sift uses SIFT_COPILOT_MODEL.Choose one on the Kindo connection page.
kindo_model_unavailablecriticalThe latest Verify found the chosen model is no longer offered to the key; every call Sift makes names it.Choose another model on the Kindo connection page.
escalations_undeliveredcriticalFilters decided to escalate events that never reached an agent. Filtering has stopped while this holds, but events already filtered were not seen.Check that Kindo is reachable and the key is valid, then review the filter’s Filtered events for the window. Once delivery works, escalations from the last 24 hours on running filters are sent again within about 20 minutes.
escalations_failingwarningThe agent is refusing escalations. Filtering has not stopped yet.Check that Kindo is reachable. If it stays down, filtering stops and this becomes escalations_undelivered.
scoring_backlogcriticalEvents read more than 30 minutes ago have never been scored, so they are neither filtered nor escalated.Sift’s background services are not keeping up. An operator checks them: see Troubleshooting.
polls_overduecriticalRunning filters have not been polled for more than 15 minutes past when they were due.Sift’s background services are not keeping up. An operator checks them: see Troubleshooting.
deliveries_overduecriticalDelivery groups are more than 2 minutes past their due time and nothing released them.Sift’s background services are not keeping up. An operator checks them: see Troubleshooting.
cutover_incompletewarningActive filters replaced an agent that has run again, so both agents run and no spend saved is reported.Retire or repoint the old agent in Kindo, or acknowledge it on the filter’s Actions.
cutover_unverifiedwarningSift could not read the agent a filter replaced, so whether it still runs is unknown.Check the Kindo key and that the agent exists, or acknowledge it on the filter’s Actions.
agent_runs_backloggedwarningAn agent run waited more than 5 minutes on the deployment’s Kindo rate limit in the last 15 minutes. Every filter, the reading of agent verdicts, and the assistant share that limit, and no filter’s agent budget sees it.Set an agent budget on the busiest filters, so their overflow waits in their own queue in priority order. Raise SIFT_KINDO_MAX_REQUESTS_PER_SECOND only if the Kindo tenant’s quota allows.
webhook_failingwarningWebhook endpoints are not receiving alerts: a delivery has retried for more than 15 minutes, or one was abandoned in the last day.Open the gear icon (Administration) › Notifications to see what the receiver answered. A delivery that could not be decrypted means SIFT_SECRET_KEY changed: enter the endpoint’s URL and secrets again.
broker_unreachablecriticalOne of Sift’s background services did not answer: nothing is polled, scored, triggered or sent.An operator checks the services: see Troubleshooting.
worker_pool_silentcriticalOne or more of Sift’s background services has stopped reporting in. This is raised within 15 seconds of one stopping.An operator checks the services: see Troubleshooting.
decision_model_unavailablewarningThe decision model is not answering, and filters use it. Their decision-model features pause; each runs as it would without them.Check the decision model under the gear icon (Administration) › Decision model.
decision_model_directinfoSift calls the decision model directly, outside Kindo.None needed. Unset SIFT_JEV_ENABLED to stop.

Sift turns every filter health verdict that is not ok, every system warning, and a failing or degraded Kindo connection into an alert. An alert is raised once its condition has held for 2 minutes and cleared once it has been gone for 10 minutes. Webhooks receive the raise and the clear. See Notifications and webhooks.

CategoryConsole labelContains
filter_faultFilter faultsFilter health codes with severity fault.
filter_attentionFilters waiting on someoneFilter health codes with severity attention.
systemDeploymentSystem warnings, and the Kindo connection as kindo.failing (fault) or kindo.degraded (attention).

A filter’s alert is its verdict: its first condition. The agent load’s conditions are the exception. budget.bound, queue.filling, queue.losing, budget.record_only, loosened.drift and load.unbounded are each an alert of their own, keyed by their own code, even when another condition leads the verdict, and each is raised and cleared on its own. budget.near is alerted only as the verdict, so a filter that often runs near its budget pages nobody.

A new webhook endpoint subscribes to filter_fault and system by default. No webhook carries escalations_undelivered, escalations_failing, cutover_incomplete, cutover_unverified or deliveries_overdue (each filter’s own alert carries them), broker_unreachable or worker_pool_silent (alerts cannot be sent while those hold), or decision_model_direct (a configuration, not a fault). A retired filter raises nothing.