Trust · operations
Service status
What our scheduled checks actually did, from the run log. Sources are checked twice daily by scheduled jobs — this page shows the times runs were observed to start and finish, never the schedule, and it records failures and partial runs exactly like successes. ShortageSignal is not a live or continuous service, and absence of a notice is never evidence that a medicine is available.
Our scheduled checks are behind: the last successful check of the sources finished 20 Oct 2026, 21:00 UTC (16 days ago), more than 36 hours ago. Checks normally run twice daily, so figures on this page may be out of date.
Latest source check
Partial started (16 days ago), finished (16 days ago).
Quality gate: passed. 408 of 420 captured posts parsed; ‘other’/context share 2.1%; posts carrying a flagged source anomaly 38.8%.
12 posts parked in the latest parse: they could not be parsed completely or their captured file was missing, so that run wrote nothing from them to the record (4 × patient safety alert: incomplete parse; 4 × protocol-extension post: incomplete parse; 2 × supply notification: incomplete parse; 2 × new-protocol post: incomplete parse). A run that parks posts is recorded as partial, not complete.
Steps: parse: success, poppler: success, register: success, scotland: success, protocols: success
Other checks
Cadence, as observed
Sources are checked twice daily by scheduled jobs, not continuously; GitHub's scheduler does not guarantee start times, so we publish the times runs were observed to start. In the last 30 days: 1 run before 12:00 UTC started at 11:46 UTC; 26 runs 12:00 UTC or later started between 12:11 and 23:48 UTC. 27 of 27 recorded checks completed the parse; the longest gap between successful checks was 20.0 hours.
Source checks (last 30 days)
Recorded since 30 Sep 2026, 18:39 UTC. Every source-check run recorded in the last 30 days (27). “Partial” means the parse completed but some posts were parked or another step failed; nothing from a parked post reaches the record.
| Job | Started (observed) | Took | Outcome | Parsed | Parked | Gate | Steps |
|---|---|---|---|---|---|---|---|
| parse | 356s | Partial | 408/420 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 358s | Partial | 408/420 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 390s | Partial | 408/420 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 540s | Partial | 408/420 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 351s | Partial | 407/419 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 556s | Partial | 407/419 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 534s | Partial | 407/419 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 509s | Partial | 407/419 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 557s | Partial | 407/419 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 508s | Partial | 407/419 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 341s | Partial | 407/419 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 340s | Partial | 407/419 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 528s | Partial | 406/418 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 502s | Partial | 406/418 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 362s | Partial | 406/418 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 344s | Partial | 405/417 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 445s | Partial | 405/417 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 554s | Partial | 405/417 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 438s | Partial | 404/416 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 404s | Partial | 404/416 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 506s | Partial | 404/416 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 452s | Partial | 404/416 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 496s | Partial | 404/416 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 431s | Partial | 404/416 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 451s | Partial | 404/416 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 567s | Partial | 404/416 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success | |
| parse | 333s | Partial | 404/416 | 12 2 × supply notification: incomplete parse; 4 × patient safety alert: incomplete parse; 2 × new-protocol post: incomplete parse; 4 × protocol-extension post: incomplete parse | passed | parse: success, poppler: success, register: success, scotland: success, protocols: success |
Other jobs (latest 30 runs)
The newest 30 runs of the other scheduled jobs in the last 30 days, newest first — these go back only to 17 Oct 2026, 21:31 UTC, because the alerts dispatcher is scheduled far more often than the source checks. Kinds: alerts = Email alerts dispatcher; digest = Monthly Index digest; postparse = After-parse discoverability (IndexNow, cache refresh).
| Job | Started (observed) | Took | Outcome | Parsed | Parked | Gate | Steps |
|---|---|---|---|---|---|---|---|
| alerts | 7s | Completeddry-run | — | — | — | dispatch: success | |
| alerts | 7s | Completeddry-run | — | — | — | dispatch: success | |
| identifiers | 70s | Completed | — | — | — | bnf: skipped, pca: skipped, match: success | |
| alerts | 9s | Completeddry-run | — | — | — | dispatch: success | |
| postparseworkflow_run | 11s | Completed | — | — | — | indexnow: success, revalidate: success indexnow changed=0 submitted=0 | |
| alerts | 6s | Completeddry-run | — | — | — | dispatch: success | |
| identifiers | 48s | Completed | — | — | — | bnf: skipped, pca: skipped, match: success | |
| postparseworkflow_run | 12s | Completed | — | — | — | indexnow: success, revalidate: success indexnow changed=0 submitted=0 | |
| alerts | 7s | Completeddry-run | — | — | — | dispatch: success | |
| alerts | 6s | Completeddry-run | — | — | — | dispatch: success | |
| alerts | 6s | Completeddry-run | — | — | — | dispatch: success | |
| identifiers | 59s | Completed | — | — | — | bnf: skipped, pca: skipped, match: success | |
| postparseworkflow_run | 7s | Completed | — | — | — | indexnow: success, revalidate: success indexnow changed=0 submitted=0 | |
| alerts | 5s | Completeddry-run | — | — | — | dispatch: success | |
| identifiers | 72s | Completed | — | — | — | bnf: skipped, pca: skipped, match: success | |
| postparseworkflow_run | 10s | Completed | — | — | — | indexnow: success, revalidate: success indexnow changed=16 submitted=16 | |
| digest_weekly | 9s | Completeddry-run | — | — | — | weekly: success | |
| alerts | 8s | Completeddry-run | — | — | — | dispatch: success | |
| alerts | 7s | Completeddry-run | — | — | — | dispatch: success | |
| alerts | 11s | Completeddry-run | — | — | — | dispatch: success | |
| identifiers | 48s | Completed | — | — | — | bnf: skipped, pca: skipped, match: success | |
| postparseworkflow_run | 8s | Completed | — | — | — | indexnow: success, revalidate: success indexnow changed=0 submitted=0 | |
| alerts | 7s | Completeddry-run | — | — | — | dispatch: success | |
| alerts | 6s | Completeddry-run | — | — | — | dispatch: success | |
| identifiers | 46s | Completed | — | — | — | bnf: skipped, pca: skipped, match: success | |
| postparseworkflow_run | 8s | Completed | — | — | — | indexnow: success, revalidate: success indexnow changed=0 submitted=0 | |
| alerts | 7s | Completeddry-run | — | — | — | dispatch: success | |
| alerts | 7s | Completeddry-run | — | — | — | dispatch: success | |
| alerts | 8s | Completeddry-run | — | — | — | dispatch: success | |
| identifiers | 62s | Completed | — | — | — | bnf: skipped, pca: skipped, match: success |
The same figures are available as JSON at /api/v1/status. How the checks work: methodology. Corrections to published figures: corrections log.