Non-primary scenes inherit the primary scene's severity from the call doc, so bdb57ae closed one of three leaks and the other two now carry the weight alone
#95
Reference in New Issue
Block a user
Found by the standing P0 correlation static pass, unattended run 2026-09-01, at
b722223. Not a regression caused bybdb57ae— it is a pre-existing sibling defect thatbdb57aemade load-bearing.What
bdb57aeactually fixed, and what it leftbdb57ae(#87) stopped_build_contextfalling back to the call doc'slocation_coordswhen a scene passes none (incident_correlator.py:792-799). Verified: each scene now geocodes its own location (intelligence.py:309-323), only genuinely locationless scenes lose coords, andrecorrelation_sweep.py:96-97passes both explicitly so the sweep path is unchanged. No regression in the coords path. #87's stated defect is fixed and #87 is closed.But the primary-scene leak had three channels into
_build_context, not one. Coords was the one that got fixed:location_coordsbdb57aeembeddingincident_correlator.py:780, written fromprocessed[0]atintelligence.py:368severityincident_correlator.py:784, written fromprocessed[0]atintelligence.py:356intelligence.pyunionstags,unitsandvehiclesacross scenes but writesseverityandembeddingfromprocessed[0]only. So a non-primary scene is still judged on scene 1's content.Why the severity half bites in both directions
majorseverity makes a content-free scene non-thin atincident_correlator.py:644, which lets it clear the creation gate at:1293and open its own"other"incident. That is server-26#5's failure mode, arriving through a field the scene never claimed.:1214-1219and the content-divergence veto at:1644,1657, so scene 2 is matched on scene 1's meaning.Together these are precisely the #87-class leak. Removing the coords crutch without removing the siblings means the two remaining channels now carry the full weight of the primary scene's identity.
Fix shape
severityandembeddingshould be per-scene in the extraction output rather than call-level, and_build_contextshould read the scene's own values with no call-doc fallback — the same shapebdb57aeused for coords. Do #80 and this in one pass; splitting them repeats exactly the partial-fix pattern this issue documents.Test gap
No test covers
_build_context's embedding or severity sourcing.drb-c2-coreis at 290 pass / 0 fail at HEAD (bdb57aeadded one), but all three findings from this pass sit outside the tested gate and dedup paths. A fix here must arrive with a multi-scene fixture where scene 1 ismajorand scene 2 is content-free.Not verified
Whether the severity leak fires in practice — that needs a real multi-scene call where scene 1 is
majorand no recent talkgroup incident exists. AI is off during the week for cost, so this is static reading only. Worth confirming in the next evening window.Related: #87 (closed), #80, #91, #5. Recorded in
DEFERRED.mdalongside the #87 row so neither is the sole record.Fixed in
a9d1d24(branchfix/scene-context-leak-80-95, not yet merged/deployed)._build_contextno longer readsembedding/severityoff the call doc — each scene threads its own value throughpreview_correlation/correlate_call, exactly like the #87 coords fix.recorrelation_sweeppasses the call doc value explicitly (whole-call re-link, link-only). +2 regression tests intest_incident_identity.py; full c2-core suite green (295 passed).Remaining leg of this defect class split to #102 (
llm_correlator._call_blockstill reads the whole-call transcript per scene). Review-flagged side effects: #103 (divergence veto on None embedding), #104 (reprocess stale severity).