The primary scene's geocode leaks into every other scene's correlation, fabricating a location match #87
Closed
opened 2026-08-30 02:44:06 -04:00 by logan
·
1 comment
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#87
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.
Found by the standing static correlation pass, unattended run 2026-08-30. Static reading only — no live data, no test written yet. Searched open and closed: this is not a duplicate of #80, #28, #37, #6 or the closed #52. Nearest neighbour is #80, and the difference is stated below.
What happens
incident_correlator.py:792:In the multi-scene loop (
routers/upload.py:334) a scene with no location of its own passeslocation_coords=None. Theorfallback then substitutes the call document's coords — andintelligence.py:357-361wrote those from the primary scene only. Worse, they survive a reprocess in which the new primary scene has no location at all, becausedoc_setmerges rather than replaces.So for scene 2 and every scene after it on a multi-scene call, the correlator is handed an address that scene never claimed.
Why it matters more than a tuning bug
Three consequences, all pushing the same direction — over-merge:
_is_thin_callsees truthy coords, so the scene skips the thin-call handling entirely.incident_correlator.py:1120-1148on coordinates belonging to a different scene._call_fits_incidentthen returnslocation_proximityas the fit signal — the strongest accept evidence the system has.Only ~7% of calls geocode at all. Those are the single most reliable anti-merge signal available, and this converts a subset of them into a fabricated positive accept. That is the distinction from #80: #80 argues the call-level primary-scene embedding and severity make correlation judge on the wrong basis — a tuning question. This one manufactures evidence that does not exist, which no amount of threshold tuning corrects.
Fix direction (not prescriptive)
Do not fall back to the call document's coords for a non-primary scene. A scene with no location should reach the correlator with no location and be judged thin, which is the honest answer. Either pass the scene index down so the fallback applies only to the primary scene, or drop the
orfallback in the scene path entirely. Whichever is chosen, the reprocess-merge behaviour needs its own check — stale coords from a previous primary currently outlive the extraction that produced them.Not verified
No live data was available this run (AI is off; windows are evening-only and there was nothing new to evaluate). Unmeasured: how often calls are genuinely multi-scene, which sets the blast radius. Worth measuring in the next live window before choosing between the two fix directions.
Refs #80, #5, #28.
Fixed and verified. Closing — commit
bdb57ae("correlator: stop non-primary scenes inheriting the call doc's pin (#87)"), an ancestor of liveb722223and deployed.Verified by the standing P0 correlation static pass on the unattended run of 2026-09-01, not merely by reading the commit message:
_build_contextno longer falls back to the call doc'slocation_coordswhen a scene passes none (incident_correlator.py:792-799, which cites this issue directly).intelligence.py:309-323), so only genuinely locationless scenes lose coordinates — the fix does not blank out coords wholesale.recorrelation_sweep.py:96-97passes both values explicitly, so the sweep path is unchanged and did not silently inherit the new behaviour.drb-c2-coreis at 290 pass / 0 fail (bdb57aeadded one test).One thing the fix did not do, now tracked separately. The primary-scene leak had three channels into
_build_context, and coords was one of them.severity(:784) andembedding(:780) are still read off the call doc, becauseintelligence.pywrites both fromprocessed[0]only while it unions tags, units and vehicles. Removing the coords crutch means those two now carry the full weight of the primary scene's identity alone — the direction of travel is toward over-splitting.Neither is a reason to hold this issue open — #87's stated defect is fixed. Recorded in
DEFERRED.mdso the tracker and that file do not drift.