Admin Replay: re-run the pipeline over past calls in a sandbox, so correlation changes are measured without live AI windows #170
Open
opened 2026-09-26 15:15:54 -04:00 by logan
·
6 comments
No Branch/Tag Specified
Labels
Clear labels
area/ai-pipeline
area/auth
area/billing
area/correlation
area/discord
area/frontend
area/governance
area/growth
area/infra-deploy
area/legal
area/map
area/mqtt
area/node-ota
area/osint
area/recording-audio
area/sdr-radio
area/transcription
board
board:agenda
minutes:draft
minutes:final
role:ceo
role:cfo
role:cio
role:ciso
role:cmo
role:coo
role:cto
Scene/entity extraction, summarizer, AI providers, embeddings
AuthN/Z, roles, tenancy/org scoping, API keys, credentials
Plans, entitlements, AI spend accounting and caps
Incident correlation, linking, lifecycle, severity, corr_debug
Discord bot, radio bots, voice streams, bot tokens, webhooks
Web UI: Next.js app and the edge-node local dashboard
Board process, minutes, unattended runner, agent tooling
Go-to-market, outreach, cold email, discovery conversations
CI/CD, VM, registry, Firestore rules/indexes deploy, Terraform/Caddy
ToS, retention, licences/DAAs, CAN-SPAM, E&O, name suppression
Live map: pins, paths, tiles, legend, geocoding
Node-C2 MQTT, checkins, commands, node sweeper, dynsec
Node install, enrollment, OTA updater, image skew
External feeds: cameras, 511, ADS-B, AIS, outages, and their licences
Call capture, boundaries, PulseAudio, ring buffer, trimming, attribution
OP25 decode, SDR hardware/tuning, conventional, second SDR, mesh radio
STT, transcript correction, place verification, name accuracy
Board process: minutes and board-filed items
Needs board scoping at the next sitting; CEO removes the label once scoped
One exec pre-read, closed by CEO
CEO ruling; open until enacted
Filed by the CEO
Filed by the CFO
Filed by the CIO
Filed by the CISO
Filed by the CMO
Filed by the COO
Filed by the CTO
kind
behavior-bug
Wrong product behavior; the instrument reads it correctly
kind
measurement-bug
Corrupts the recording/instrument (debug data, evals, health checks), not behavior
priority
p0
Drop everything: prod broken, live exposure, or owner-ruled P0
priority
p1
Next up: blocks a gate, a customer, or core incident quality
priority
p2
Normal: real defect or planned work, schedule in turn
priority
p3
Low: minor, cosmetic, or someday
status
blocked
Waiting on an external party, spend, or another issue
status
in-progress
Branch or PR open against it
status
needs-decision
Waiting on an owner or board ruling before work
status
needs-info
Root cause or repro unknown; needs a reading first
type
bug
Something built is wrong: code, data, or a measurement
type
chore
Maintenance, refactor, tests, pinning, cleanup: no user-visible change
type
decision
A ruling to make or record: board minutes, owner calls, legal reviews
type
docs
Docs, runbooks, CLAUDE.md, skills, SOPs
type
feature
New capability or an extension of an existing one
type
security
Security, privacy, credential or tenant-isolation exposure
type
tracking
Tracker, checklist, initiative or punch-list spanning several changes
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: logan/server-26#170
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Owner ruling 2026-09-26: correlation work can't keep depending on live AI windows (days of wall time, burns credits, and the 09-20→22 window was invalidated by #169). Recordings are kept regardless of AI, so replay past traffic instead — as a permanent admin section, not a one-off script.
Built on branch
feat/replay(Server):app/internal/replay.py— runs a time range of real calls through the live pipeline code (upload._extract_and_correlate, now shared with the live path), original order, clock pinned per call, intoreplay_runs/{run_id}/calls|incidents(ContextVar redirect infirestore.py). Modes: audio (re-Whisper), transcripts (re-extract), reuse (correlation only, reuses a prior run's scenes — isolates correlator changes from extraction noise). Simulates idle-resolve + recorrelation sweeps on virtual time. No alerts/summaries/vocab. One run at a time, ≤5000 calls, ≤7 days.app/routers/replay.py—/admin/replayestimate/start/list/get/cancel/delete/incidents.resolved_viafield on every incident resolve (units_cleared, llm_closure, reassignment, children_resolved, idle_timeout, emptied_by_*) — also useful live: first time a real clear can be told from a timeout without inference.Next after merge: replay 09-22 11:30–19:00Z (transcripts mode) once Gemini/OpenAI are funded, as the baseline row. Follow-up worth filing separately: hand-labelled ground truth for one afternoon so runs get a real score, not just shape metrics.
Replay iterations, 09-22 10:00-12:00 ET (290 calls), 2026-09-26:
6e82ee8f0a88d4731b54bFixed along the way: extraction failures were silent (#172), gemini-2.5-pro gone -> 3.8-flash (
6e82ee8), short "45-9, I'm clear." never reached extraction, clearance matched by exact string, junk non-units held incidents open, parser false positives (731b54b).Findings not fixed:
Answer key: hand-labelled 09-22 14:00-16:00Z (25 real incidents) at
Version 5C/replay_groundtruth_0922.json, scored pairwise over labelled calls.6e82ee8baselinef0a88d4clearance731b54bclearance reviewe972cactimer+reopen+substantive cap (reuse731b54b)Only ~5/25 real incidents had an audible clear, which is why severity-scaled timer + reopen-on-link (
e972cac, review fixes737bdf0) is the close mechanism, not unit 10-8s.Remaining misses: MVA tail (15:56 follow-up opened a new incident and absorbed a separate disabled-vehicle job), small traffic stops / DOT cutout never become incidents (creation gate), NYPD patch missing-person traffic fragmented (garbled STT). Not yet validated on a second window — the answer key is one 2h slice, so treat 0.807 as in-sample.
Traffic stops (owner: should show on the portal) + provisional LLM closure:
433b35dtraffic stops (fresh extraction)266c958reuse of433b35dextractionStops now opening incidents: 45 Adam (Central Express), CM2 (southbound), plus the West Main / BRP->CCC / Parsons stops.
Measurement note: fresh extraction is noisy — the trespass incident fragmented in
433b35dpurely from different extracted units. Compare correlator changes with reuse mode on a fixed extraction; judge extraction changes on their targeted outcome, not one F1 number.Second window validates the in-sample number. Sat 09-21 18:00-20:00 ET (204 calls), hand-labelled blind before viewing the system grouping:
Version 5C/replay_groundtruth_0921.json(23 real incidents).65705bfreuse65705bffreshHeld-out misses: Ossining Post 4 plate-read stops ("Post 4. 52-62... Frank David Boy 4514" — a stop phrased as a plate read, not "on a stop"), a harassment case-number request, a DEC/MTA ID check, and two small Dobbs/Ch1 calls. The knife-menacing (17 calls) and Pine & Lincoln detention (9 calls) incidents were tracked end to end.
Gemini accounting (
65705bf, reuse run, 09-22 window): correlation 3.6-flash 124 calls in 211k/out 9k/thinking 0; tiebreak 3.8-flash 60 calls in 105k/out 4k/thinking 39k.Plate reads -> traffic stops (
e90a73f), both windows, fresh extraction:Ossining Post 4 plate-read stops (Hemlock, Ramapo) now open incidents. Nit seen: one stop titled "Traffic Stop at 96 times 5" (a ten-code signal extracted as a location).
Live-AI window, measured 2026-10-04. AI went dry on billing (#196): Gemini correlation from 09-29 15:07Z, OpenAI STT from 09-30 12:15Z. Healthy window is 09-27 15Z → 09-29 15:07Z. The 09-29 15:08Z → 09-30 12:15Z stretch is a free control: same code, extraction alive, correlation rules-only. Data: live call docs via
/calls/search+/incidents/{id}, slim dumpVersion 5C/corr_dump_2026-10-04.json. debug/correlation can't reach this far back (#197).6658c26)e236409)Reading:
e009090. Biggest B incidents: 37 calls/75 min (9A MVA), 34/120 (CIP), 27/102 (disabled train). None as large as the 40-call/2h34m Rollover in A.No live F1. There's no hand-labelled live window, and replay can't run while AI is dry. So better/worse vs 0.80–0.87 is unproven: the shape is consistent with replay, low confidence.
Instrument check: #96 is closed and these use the per-scene
scenesmap, so corr_path counts are clean. #155 (units_cleared rarely populates) taints closure stats only: resolved_via is ~90% idle_timeout. #169 doesn't apply, since the LLM answered in about 45% of healthy scene decisions. Traffic-stop and same-location counts are title/location regex heuristics.