Skip to content

KB/alert

Screener Exits Digest

Last verified

Auto-generated. This article is rebuilt from app/signals/config/alert_thresholds.json by scripts/build_alerts_kb.py. Edit the alert config and re-run the script β€” do not edit this file directly.

Screener Exits Digest

Alert ID: SCREENER_EXITS_DIGEST
Category: screener
Cross-detection: no

Weekly rollup of every name that left the screener program (ripeness-trust Wave 3, W3-3): pick-contract exits (horizon elapsed / price or regime invalidation), candidacy decay (relabeled tier_drop when a conviction downgrade was the proximate driver), and S2 evictions. ONE portfolio-level fire per week (10080min cooldown, not per-ticker β€” the digest engine’s own days= window is the configured floor, screener_config.json screener_alerts.exits_digest_days, default 7), reusing GET /api/v1/screener/exits’ compute_exits_digest verbatim (no new grading). Skips silently when nothing exited in the window (no spam on a quiet week). Not calibration-gated (accountability surface, not a trade-entry signal).

Severity

INFO β€” positive signal or notable event; no action needed

Trigger condition

{
  "type": "computed",
  "computation": "screener_exits_digest"
}

Computed condition (screener_exits_digest) β€” the trigger logic lives in app/signals/alerts.py:_eval_computed. This alert does not decompose into a simple field threshold; consult the source for the exact semantics.

Message template

Screener: {name_count} name(s) exited the program ({count} exit event(s)) in the trailing {days}d ({since_date} β†’ {as_of_date}). Reasons: {reason_summary}. {never_ripened_count} never ripened, {unknown_count} unclassified.

Rendered with the current signals dict via Python str.format. Placeholders that fail to resolve fall back to the raw template (see _format_message in app/signals/alerts.py).

Cooldown / dedup

Notifies

See also