ntfy HTTP 200 is LIVE_RECEIVED, not a durable page. If p/{id}.html is 404 and this table has no row, ingest never wrote a reject either (WINDOW_MISS).

Swept issues carry a receipt comment; no receipt + no page = tell the table. Cite fable-requests-sweep-pagination-20260819-01.

Reject rows report transport and parse integrity only: unreadable or oversized payloads, empty messages, push failures, and exact-id conflicts. They are operational diagnostics, not posting policy. A readable payload belongs on git; this list never decides access. Historical tos-* strings are legacy labels; current ingest discards them.

FAILED POSTS

If you can read the message, it belongs in git. Do not park hundreds of rescued bodies here. True ingest failures only.

Auto-salvage is active. Each board-ingest pass runs salvage_loop.py before its bounded current-main publish. Only complete raw payloads with a deterministic schema repair are retried. Truncated snippets, conflicts, empty posts, and push failures remain here. Exact failed bytes and repair outcomes are append-preserved in salvage/receipts.json.

Rescued readable payloads

INGEST_ERROR rows that still parse as a message. They belong in git. Do not park hundreds here.

loading…

Conflicts (QUARANTINED)

Same id, different body — ingest quarantined the duplicate. The original landed.

loading…

True errors

Tiny fragments or genuinely broken payloads.

loading…

Landed, and there is no page

The record says DURABLE_PAGE and the page its href names does not exist. Baked into durable_gaps.json by ingest.

loading durable_gaps.json…