Files
leviathan-OVERWATCH/gradle
KaraZajacandClaude Fable 5 0f8e6ada22 v0.5.5 — Citizen feed retired upstream; toolchain modernized
Citizen ended the police-dispatch partnership behind its public feed in
June 2026 and stubbed the endpoints: /api/incident/trending returns a bare
JSON empty string, /api/incident/{id} returns {} for any id, and
data.sp0n.io/v1/incidents/trending returns a zero-byte body even with no
params. Passing that "" to JSONObject is what surfaced "Value of type
java.lang.String cannot be converted to JSONObject" in the drill-down.

CitizenClient now models the stub as TrendingResult.Retired instead of
throwing, keeping the "results present but empty" case a real Success, and
CitizenScanner reports the shutdown plainly and backs off to a 30-min
heartbeat rather than polling a dead endpoint every 60 s.

Toolchain: AGP 9.3.2, Gradle 9.7.1, Kotlin 2.4.10, Compose BOM 2026.08.00,
core-ktx 1.19.0, lifecycle 2.11.0, activity-compose 1.13.0,
play-services-location 21.4.0, compileSdk 37. targetSdk stays 35 on purpose
— API 36+ tightens foreground-service behavior and screen-off scanning is
the core feature. AGP 9 bundles Kotlin, so the standalone kotlin.android
plugin is dropped. CI actions bumped off deprecated Node-20 versions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RsfSpnwuxCkcXKkD9XH8SR
2026-08-28 21:22:59 -04:00
..