P0: standing correlation-quality evaluation procedure (scheduled AI window) #57
Closed
opened 2026-08-24 23:03:42 -04:00 by logan
·
3 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#57
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.
P0 — standing procedure, runs every evening session.
Correlation quality is the product. The unit of value is the INCIDENT, not the call, so
correlation gets a measured evaluation on a schedule rather than only when something looks wrong.
The full runbook lives at
Version 5C/.claude/scheduled/drb-worksession.md(STEP 5) and isexecuted by the twice-daily scheduled work session. This issue is the tracker for it.
Procedure
drb-correlation-reviewoverincident_correlator.py,llm_correlator.py,intelligence.py, and the upload router scene loop./healthand has not yet been evaluated against real traffic. Never open a window "just to look".sleep 4200+/opt/drb/ai_off.py) so a crashed agentcannot leave the window open. If arming fails, do not open the window.
stt_enabled+correlation_enabledat BOTH levels — globalconfig/ai_featuresand the per-system
ai_flagson Suffolka342a757-8c1a-460d-b857-252d2c5e6e94and Westchesterf3bc494e-0951-4a61-b16b-7adc5eb157b1, which survive a global off-switch. Record the priorvalues of
summaries_enabled/vocabulary_learning_enabledand restore them after.debug_correlation(limit=100, orphan_hours=2)in-process, saved asVersion 5C/correlation-logs-<date>.jsonso runs are comparable. Trend beats snapshot.No browser required
PUT /admin/featuresneeds a Firebase admin ID token (require_admin_tokeninapp/internal/auth.pydoes not accept the service key), which is why earlier automation neededChrome. Writing Firestore directly from inside the
c2-corecontainer over SSH avoids the HTTProute entirely and is fully headless.
What each window must answer
corr_path/fit_signaldistribution, and whethercorr_consensus/corr_llm_actionpopulate.tier is DISABLEDin the logs — means a model ID or the billing died again. Highest-priority finding.Related: #5, #27, #28, #35, #6.
Follow-up worth doing
/admin/featuresaccepts only a Firebase admin token. Switching it torequire_service_key_or_adminwould make automated toggling first-class instead of aFirestore side-door. Not required for the procedure above — noted so the side-door is a
deliberate choice rather than an accident.
Window run, 2026-08-25 evening (unattended run). Recording it here since this issue owns the procedure.
Trigger: six correlation-affecting commits landed on
mainbetween 2026-08-20 and 2026-08-23 (33a247d…cc038e6, touchingincident_correlator.py,intelligence.py,llm_correlator.py). All postdate theCORRELATION_REVIEW_0820.mdbaseline and none had been evaluated against live traffic.Procedure as actually executed, which is closer to what this issue should specify than what it currently says:
config/ai_featureslevel and the per-systemai_flagslevel,stt_enabledandcorrelation_enabledonly.summaries_enabledandvocabulary_learning_enabledwere alreadyfalseand were deliberately left untouched, so there is nothing to restore and no learned-state confound in the results.Two mechanical notes worth folding into the written procedure:
/opt/drb/aiwin/on the server and are run viacompose run --rm --no-depswithPYTHONPATH=/appand the directory bind-mounted. There is no bind mount of the app source into the runningc2-corecontainer in either compose file, so theexec -T c2-core python /app/ai_off.pyform assumed by the runbook cannot work as written — the runbook is wrong on that point and should be corrected.feature_flagscaches for 30s but per-system docs are read throughdoc_get_cachedwith a 300s TTL. Turning a system on can therefore take up to five minutes to take effect. Turning off is fast, because the global flag is the master switch and beats the per-system value.Also:
tier is DISABLEDis emitted once per model per process (llm_correlator.py:296). A container restart re-arms it, so the absence of that line after a restart proves nothing. Any future run of this procedure should record the c2-core container's start time alongside the log grep, or the check is not evidence.First saved correlation dump under this procedure. Unattended run 2026-09-01, against live
b722223. Saved asVersion 5C/correlation-logs-2026-09-01.json— it is the only one on disk, so this run establishes the baseline and there is no trend to read yet. Every future run compares to this.Taken with no AI window opened — this is a read of existing state, not spend. AI stayed off throughout.
The numbers
orphan_scan_truncated: false)corr_path: new 101 (54.0%) · fast/thin 56 (29.9%) · fast/disambig 21 (11.2%) · fast/single 4 · unit-continuity 4 · location 1.corr_fit_signal: none 150 · unit_overlap 20 · thin_recency 12 · location_proximity 5.corr_consensus: tiebreak 60 · agreed 55 · rules_only 35 · none 37.corr_llm_action: none 127 · orphan 49 · link 11.Verdicts against the standing failure modes
CORRELATION_REVIEW_0820.mdis not firing in this window.orphans_with_transcript: 0— every single orphan has no transcript. These are not correlation failures at all; correlation was never given anything to work with. That reframes the orphan problem as a transcription-coverage problem and points at #7 (bulk reprocess calls stored without a transcript), not at the correlator.linked_calls_without_transcriptis 6.fallback_titled_incidents: 26— a quarter of incidents have no real title.corr_llm_action, and consensus shows 60 tiebreaks. #35 states 3.5%. Do not treat this as a refutation of #35 — per #96 both figures are computed off a per-call blend of scene decisions, so the honest statement is that the instrument disagrees with itself. What is solid: the tier is being consulted, is not disabled, and votesorphan49 times againstlink11 — it is acting predominantly as a brake on linking, not a linker.tier is DISABLEDcondition. Model IDs and billing are alive.Procedure defect found while running this
The dump could not be taken the way this issue specifies.
docker compose runon the VM resolves a stale image, so it executed code older than production and died on a signature change. Filed as #101 — the serious part is that non-signature drift would have produced clean, wrong numbers instead of an error. This dump was taken against the live container instead and is trustworthy; earlier dumps taken viarunare of unverified provenance. #57's procedure text needs updating before the next run.Closing (2026-10-27): this depended on the twice-daily scheduled session, which has been dead since the Linux move, plus live AI windows. Admin Replay (#170) replaces it as the way to measure correlation.