krz/omaha-metro-blotter

Archive of police activity and ALPR surveillance across the Omaha metro. alpr archive omaha police surveillance

Commit f5ea97189e

f5ea97189e452cff008a8ebbf2f8068ada0bbbc1

parent: c55bd528dd

Verified · cmc

cmc <hello@cleberg.net> · 2026-08-23 21:25 UTC

Scope the staleness check to the live feeds

opd_archive is closed years ending 2021-12-31, so it is permanently
"stale" and failed the pull job on every run — the check still
excluded the old name, opd_csv. The archive published before the check
ran, so nothing was lost, but the site job was skipped.

Switched from an exclusion to an allowlist of the three live feeds:
adding another backfill source can no longer turn this into a standing
failure.

Layout: unified · split

.github/workflows/daily-pull.yml +4 −1
@@ -186,9 +186,12 @@ jobs:
186 # raise the alarm without also blocking the archive from being published. 186 # raise the alarm without also blocking the archive from being published.
187 - name: Check the feeds are still moving 187 - name: Check the feeds are still moving
188 run: | 188 run: |
189 # An allowlist, not an exclusion: naming the live feeds means adding a
190 # backfill source cannot quietly turn this into a permanent failure,
191 # which is exactly what renaming opd_csv to opd_archive did.
189 sqlite3 -noheader "$DB" \ 192 sqlite3 -noheader "$DB" \
190 "SELECT source || ' ' || MAX(occurred_at) FROM incidents 193 "SELECT source || ' ' || MAX(occurred_at) FROM incidents
191 WHERE source <> 'opd_csv' GROUP BY source 194 WHERE source IN ('opd', 'sarpy', 'cbpd') GROUP BY source
192 HAVING MAX(occurred_at) < datetime('now', '-7 days')" > stale.txt 195 HAVING MAX(occurred_at) < datetime('now', '-7 days')" > stale.txt
193 if [ -s stale.txt ]; then 196 if [ -s stale.txt ]; then
194 while read -r line; do echo "::error::feed is stale: $line"; done < stale.txt 197 while read -r line; do echo "::error::feed is stale: $line"; done < stale.txt