Statuses and reason codes¶
Story lifecycle (stories.state)¶
ingested → text_pending → text_final → clustered → brief_ready →
report_final → published; merged redirects to the kept story id.
text_final means extraction finished (ok or not); decided after
summaries.extraction_wait_seconds (120) if pending.
articles.text_status¶
| Status | Meaning |
|---|---|
pending |
Not fetched yet |
ok |
Text extracted |
failed |
HTTP error, too big, not HTML, < DISCOVER_EXTRACT_MIN_WORDS |
skipped |
robots.txt disallowed |
none |
Link-only enrichment member (never summarized) |
stories.enrich_status / enrich_reason¶
| Value | Meaning |
|---|---|
pending |
Admitted; being searched (brief waits up to wait_seconds) |
done |
Searched (with or without additions) |
retry |
No provider answered — enrich_next_attempt_at backoff |
skipped:pattern / skipped:no_signal / skipped:url_pattern |
Not searched (rules) |
provider_unavailable: <error> |
All providers failed/cooling down |
degraded: <provider> unavailable: <error> |
Only a fallback answered; retried (max 3) |
late_regen_deferred |
Extra sources kept for the next regeneration |
recovered after N failed attempt(s) |
Succeeded after retries |
stories.context_status / context_reason¶
NULL → pending → done | retry. Reasons for empty results: no_angles,
skipped_cooldown, provider_errors:<kind>, no_hits, all_rejected —
see the context reasons table.
Candidate rejection reasons¶
enrichment_candidates / context_candidates: same_domain, social,
aggregator, denied, already_ingested/duplicate_url, bad_url, time,
language, below_threshold (snippet/title/text), near_duplicate
/duplicate, robots, fetch, paywalled, off_topic, same_event
(+ same_event_signal: ceiling, numbers, date_band, entities_verb,
judge), flagged, domain_cap, opinion_cap, not_article,
judge_rejected, judge_same_event, judge_failed.
Enrichment via (acceptance rule)¶
text (rule A) / snippet+b / entities+c / title+d / link (link-only).
Report state / status¶
ready | pending | skipped(reason) | failed(reason);
insufficient_text, reports_off. Attempt reasons: empty_content,
truncated, reasoning_consumed_budget, timeout, http_<status>,
invalid_json, validation:<rule>, insufficient_text.
image_source¶
feed | page | member | logo | none on articles and stories. Image rejection
reasons in images: too_large, not_image, svg, ico,
tracking_pixel, too_small, decompression_bomb, private_address,
bad_scheme, too_many_redirects, http_<status>.
Alert notification status¶
queued, sent, held (quiet hours/rate limit → digest), failed
(max_attempts reached; Retry in the log).
story_events.type¶
story.published, story.updated, story.retracted, heartbeat.