Skip to content

v0.9.0 — AOI geofences become a continuous watch

Choose a tag to compare

@marc-shade marc-shade released this 02 Sep 11:04
· 3 commits to main since this release

AOI geofences become a continuous watch: the collector daemon sweeps
every defined area on its interval, and a webhook fires when something
enters or leaves.

Added

  • Scheduled AOI sweeps: aoi_digest is now a collector source
    (analysis.aoi.fetch_aoi_sweep, a fetcher-only wrapper that opens
    the AOI store on the fetcher's own cache database), so
    intel-collector --daemon advances every defined geofence's change
    snapshot on each cycle - the daemon interval is the watch cadence,
    and the existing launchd wrapper makes it survive reboots. New aoi
    domain group for --sources aoi. Digests land in the collector log
    and the vector store, and in the webhook below when configured.
  • AOI change notifications: set WORLD_INTEL_AOI_WEBHOOK and the
    sweep POSTs every non-quiet digest (something entered or left a
    geofence) to that URL - json payload by default
    (title/totals/markdown/timestamp), or raw markdown with a Title
    header via WORLD_INTEL_AOI_WEBHOOK_FORMAT=text for ntfy-style
    sinks. Quiet sweeps never fire; an unreachable sink or non-2xx
    response never fails the sweep (snapshots already advanced) but is
    recorded honestly in the digest's notification field. New
    Fetcher.post() carries the delivery - deliberately outside the
    caching/retry/breaker machinery, since the target is the operator's
    own endpoint. Live-verified end-to-end against a local sink: a real
    sweep detected a change and the sink received the JSON payload.
  • Per-source collector timeout overrides (SOURCE_TIMEOUTS): a live
    smoke caught a single 50 km AOI sweep on a cold cache blowing the
    flat 45 s budget (the digest fans out to ~8 domains per AOI, several
    rate-floored); the sweep now gets 240 s and the override path is
    regression-tested.