Skip to content

AICOMSTAT V2 Event Vocabulary Census

rayswaynl edited this page Jul 3, 2026 · 1 revision

AICOMSTAT V2 Event Vocabulary Census

Source-backed lane 304 census for AICOMSTAT|v2|EVENT records on the live grading lineage. It answers a narrower question than the overview page: which v2 event families are actually emitted, which fields they carry, and whether Tools/Soak/analyze_soak.py can see or score them.

Scope

Item Value
Source base origin/claude/build84-cmdcon36@5fca3239069a5eff6335f06fecb26bb72e8c9ceb
Source root scanned Missions/[55-2hc]warfarev2_073v48co.chernarus
Analyzer checked Tools/Soak/analyze_soak.py on the same base
Emitters found 74 `AICOMSTAT
Distinct v2 event families 59
Analyzer-specific KPI branches ASSAULT_ARRIVED, ASSAULT_DISPATCH, TARGET_ABANDON
Analyzer watchlist names present as v2 emitters 6 / 12
Event families with side-token collection risk 15

Findings

  1. The live source emits 59 distinct v2 event families, while the current analyzer has hard KPI logic for only ASSAULT_DISPATCH, ASSAULT_ARRIVED and TARGET_ABANDON (analyze_soak.py:349-369).
  2. The generic v2 regex at analyze_soak.py:229-231 requires the side field to match [A-Z]+. That misses numeric side IDs emitted by several HC/driver-side lines and lowercase all in AI_SCUD_LOOP.
  3. The analyzer watchlist at analyze_soak.py:91-103 is partly stale for this lineage: 6 of its 12 names are not live v2 event families.
  4. CAPTURE_TRACE is partially visible. The server-side ORDER_PUBLISHED line uses a side string and is parsed, but the driver-side ORDER_ACCEPT, ARRIVAL_GATE, ARRIVAL_WAIT and BEGIN_CAPTURE lines use numeric side IDs and are skipped before the gate/wait summary at analyze_soak.py:1000 can count them.
  5. Many useful events are generic-collected but not surfaced in the text report or JSON: economy flow, combat totals, team founding/retirement, SCUD AI actions, GUER checkpoint/scavenger events and HC reconnect/drop audits.

Analyzer Coverage Model

Analyzer code What it covers Source
RE_V2_EVENT Generic ingest for `AICOMSTAT v2
ASSAULT_DISPATCH branch Dispatch count, reissue count and team journey seed Tools/Soak/analyze_soak.py:349-359
ASSAULT_ARRIVED branch Arrival count and elapsed journey samples Tools/Soak/analyze_soak.py:360-368
TARGET_ABANDON branch Abandon totals and reason counts Tools/Soak/analyze_soak.py:369-371
NEW_EVENT_TYPES Text/JSON count-and-sample watchlist Tools/Soak/analyze_soak.py:91-103,989-990,1260
CAPTURE_TRACE gate/wait Extra render-only gate/wait summary from generic-collected CAPTURE_TRACE events Tools/Soak/analyze_soak.py:1000-1007

Analyzer Watchlist Names Without Live V2 Emitters

Watchlist name Current source status
TARGET_ESCALATE No live source hit in the checked Chernarus mission tree; analyzer watchlist only.
TOPUP_REQ AICOMLog prose at Server/AI/Commander/AI_Commander_Produce.sqf:194; no AICOMSTAT v2 EVENT emitter.
TOPUP_DONE AICOMSTAT v1 EVENT at Common/Functions/Common_RunCommanderTeam.sqf:2337; not v2 and side is numeric.
TEAM_RECYCLE AICOMLog prose at Server/AI/Commander/AI_Commander_Produce.sqf:124; no AICOMSTAT v2 EVENT emitter.
ECON_SINK No literal v2 type; live v2 emitters are ECON_SINK_SURGE and ECON_SINK_RESEARCH.
STAGE No literal v2 type; live v2 emitter is STRIKE_STAGE_RELEASE.

Full V2 Event Census

Coverage wording:

  • KPI parsed means the analyzer computes a named metric from this family.
  • watchlist count/sample means the analyzer can display count plus recent samples if the generic regex collected it.
  • generic-collected only means it enters soak.events but is not printed as a KPI or included as a named JSON field.
  • side-token miss means the current regex does not collect that emitter because the side token is numeric or lowercase.
Event family Emitters Source sites Fields / variants Analyzer coverage
AIRMOBILE_LEG 1 Common/Functions/Common_AICOMAirLeg.sqf:276 keys: dist, lifted, team, walked not collected by current side regex
side-token miss: numeric/lowercase side
AIRMOBILE_PARADROP 1 Common/Functions/Common_AICOMAirLeg.sqf:123 keys: reason, team, town not collected by current side regex
side-token miss: numeric/lowercase side
AIR_PARADROP 1 Common/Functions/Common_RunCommanderTeam.sqf:561 keys: reason, team, town not collected by current side regex
side-token miss: numeric/lowercase side
AIR_RETAIN 1 Common/Functions/Common_RunCommanderTeam.sqf:667 keys: heli, team not collected by current side regex
side-token miss: numeric/lowercase side
AI_SCUD 1 Server/Init/Init_IcbmTel.sqf:1132 keys: clusterN, platform, side, target generic-collected only
AI_SCUD_BUY 1 Server/Init/Init_IcbmTel.sqf:1194 keys: cost, funds, side generic-collected only
AI_SCUD_LOOP 2 Server/Init/Init_IcbmTel.sqf:1207
Server/Init/Init_IcbmTel.sqf:1220
pos: offline (game over), online not collected by current side regex
side-token miss: numeric/lowercase side
AI_SCUD_SKIP_FUNDS 1 Server/Init/Init_IcbmTel.sqf:1123 keys: funds, need generic-collected only
AI_SCUD_TRACK 1 Server/Init/Init_IcbmTel.sqf:1110 keys: clusterN, pos
pos: awaiting-confirm
generic-collected only
ASSAULT_ARRIVED 1 Server/AI/Commander/AI_Commander_AssignTowns.sqf:106 keys: dist, elapsed, team, town KPI parsed: arrival count/elapsed/team journey
ASSAULT_DISPATCH 1 Server/AI/Commander/AI_Commander_AssignTowns.sqf:758 keys: dist, reissue, team, town KPI parsed: dispatch count/reissue/team journey
ASSAULT_STRANDED 1 Server/AI/Commander/AI_Commander_AssignTowns.sqf:162 keys: dist, elapsed, moved, stuck, team, town generic-collected only
BREAKOFF 1 Common/Functions/Common_RunCommanderTeam.sqf:2006 keys: live, resNear, team watchlist count/sample
side-token miss: numeric/lowercase side
CAPTURE_TRACE 5 Common/Functions/Common_RunCommanderTeam.sqf:931
Common/Functions/Common_RunCommanderTeam.sqf:1369
Common/Functions/Common_RunCommanderTeam.sqf:1651
Common/Functions/Common_RunCommanderTeam.sqf:1684
+1 more
keys: dist, gate, mode, route, seq, strike, team, town
pos: ARRIVAL_GATE, ARRIVAL_WAIT, BEGIN_CAPTURE, ORDER_ACCEPT, ORDER_PUBLISHED
watchlist plus gate/wait summary
partial: numeric/lowercase side emitters missed
COMBATSTAT 1 Server/AI/Commander/AI_Commander.sqf:879 keys: cas, killed, made, netCas, netKilled, netMade, netVehLost, vehLost generic-collected only
CONVOY_DELIVERED 1 Server/Functions/AI_Commander_Wildcard.sqf:1105 keys: supply generic-collected only
DONATION 1 Server/PVFunctions/RequestAIComDonate.sqf:94 keys: wallet_after generic-collected only
EASA_AI_KIT 1 Common/Functions/Common_RunCommanderTeam.sqf:400 keys: turret, type not collected by current side regex
side-token miss: numeric/lowercase side
ECONFLOW 1 Server/AI/Commander/AI_Commander.sqf:799 keys: aicomFunds, netPlayerFunds, playerFunds, supply generic-collected only
ECONOMY 1 Server/AI/Commander/AI_Commander.sqf:777 keys: funds, netFunds, netSupply, supply, towns generic-collected only
ECON_SINK_RESEARCH 1 Server/AI/Commander/AI_Commander.sqf:699 keys: fundsCost, id, lvl, sv generic-collected only
ECON_SINK_SURGE 3 Server/AI/Commander/AI_Commander.sqf:600
Server/AI/Commander/AI_Commander.sqf:615
Server/AI/Commander/AI_Commander.sqf:620
keys: cap, funds, reason, state generic-collected only
FOUND_GATE_SKIP 1 Server/AI/Commander/AI_Commander_Teams.sqf:1084 keys: ownAny, type generic-collected only
FRONT_DWELL_HOLD 1 Server/AI/Commander/AI_Commander_Strategy.sqf:389 keys: age, kept, scored generic-collected only
GUERCP_CLEARED 1 Server/Functions/AI_Commander_Wildcard_GUER.sqf:285 keys: byOcc, clearSupply generic-collected only
GUERCP_HELD 1 Server/Functions/AI_Commander_Wildcard_GUER.sqf:302 keys: avail, fobToken generic-collected only
GUERSCAV_DESPAWN 1 Server/Functions/AI_Commander_Wildcard_GUER.sqf:400 keys: el, ttl generic-collected only
GUERSCAV_WRECK 1 Server/Functions/AI_Commander_Wildcard_GUER.sqf:393 keys: remaining, reward, type generic-collected only
GUERWILDCARD_G<n> 1 Server/Functions/AI_Commander_Wildcard_GUER.sqf:416 pos: draw result/detail generic-collected only
HCDISPATCH 1 Server/AI/Commander/AI_Commander_Teams.sqf:179 keys: founded, pending, pendingAgeSec, target generic-collected only
HCDISPATCH_REAP 1 Server/AI/Commander/AI_Commander_Teams.sqf:185 keys: reason
pos: pending->
generic-collected only
HCDROP_AICOM_AUDIT 1 Server/Functions/Server_OnPlayerDisconnected.sqf:86 keys: delay, group, headingFresh, headingStale, headingUnknown, live, name, oldOwnerLive, owner, teams, uid generic-collected only
HCRECON_AICOM_AUDIT 1 Server/Functions/Server_HandleSpecial.sqf:1061 keys: group, headingFresh, headingStale, headingUnknown, live, newOwnerLive, owner, teams, uid generic-collected only
JOURNEY_COMMIT 1 Server/AI/Commander/AI_Commander_AssignTowns.sqf:544 keys: progress, team, town generic-collected only
ORBITER_STUCK 1 Server/AI/Commander/AI_Commander_AssignTowns.sqf:149 keys: dist, strike, team, town watchlist count/sample
RALLY_ARRIVED 1 Common/Functions/Common_RunCommanderTeam.sqf:1412 keys: dist, seq, team watchlist count/sample
side-token miss: numeric/lowercase side
RALLY_FALLBACK 1 Common/Functions/Common_RunCommanderTeam.sqf:1294 keys: dist, seq, team not collected by current side regex
side-token miss: numeric/lowercase side
RALLY_ORDER 1 Server/AI/Commander/AI_Commander_Strategy.sqf:667 keys: alive, team, want watchlist count/sample
RECYCLE_FLAG 4 Server/AI/Commander/AI_Commander_AssignTowns.sqf:175
Server/AI/Commander/AI_Commander_AssignTowns.sqf:355
Server/AI/Commander/AI_Commander_AssignTowns.sqf:444
Server/AI/Commander/AI_Commander_AssignTowns.sqf:466
keys: failedjourneys, reason, team watchlist count/sample
RESEARCH_AIR 1 Server/AI/Commander/AI_Commander.sqf:108 pos: appended generic-collected only
RICH_GEAR 1 Common/Functions/Common_RunCommanderTeam.sqf:466 keys: atMag, extraMags, tier not collected by current side regex
side-token miss: numeric/lowercase side
SIDE_BLACKLIST 2 Server/AI/Commander/AI_Commander_AssignTowns.sqf:376
Server/AI/Commander/AI_Commander_AssignTowns.sqf:483
keys: abandons, cooldown, town generic-collected only
SMOKE 2 Common/Functions/Common_RunCommanderTeam.sqf:1450
Common/Functions/Common_RunCommanderTeam.sqf:2002
keys: cls, team
pos: ASSAULT, BREAKOFF
not collected by current side regex
side-token miss: numeric/lowercase side
STRIKE_STAGE_RELEASE 1 Server/AI/Commander/AI_Commander_Strategy.sqf:789 keys: bodies, held, need generic-collected only
STRUCTURE_BUILT 1 Server/AI/Commander/AI_Commander_Base.sqf:779 keys: branchOut, cost, paidBy, struct generic-collected only
TARGET_ABANDON 3 Server/AI/Commander/AI_Commander_AssignTowns.sqf:346
Server/AI/Commander/AI_Commander_AssignTowns.sqf:436
Server/AI/Commander/AI_Commander_AssignTowns.sqf:458
keys: cooldown, onGoto, reason, team, town KPI parsed: abandon count/reasons
TEAMS_TARGET 1 Server/AI/Commander/AI_Commander_Teams.sqf:128 keys: base, delta, effective, floor, pc generic-collected only
TEAM_FOUNDED 1 Server/AI/Commander/AI_Commander_Teams.sqf:1215 keys: class, cost, template, via generic-collected only
TEAM_RETIRED 2 Server/AI/Commander/AI_Commander_DisbandLowTier.sqf:79
Server/AI/Commander/AI_Commander_Teams.sqf:216
keys: footTeams, founded, pc, reason, target, units generic-collected only
TEAM_TYPED 1 Server/AI/Commander/AI_Commander_AssignTypes.sqf:276 keys: class, template, via generic-collected only
TOWN_FLIP 1 Server/FSM/server_town.sqf:291 keys: from, fromID, to, toID, town not collected by current side regex
side-token miss: numeric/lowercase side
UNSTUCK_FIRED 1 Common/Functions/Common_RunCommanderTeam.sqf:983 keys: dist, map, team, tier generic-collected only
UNSTUCK_STRIKE 1 Server/AI/Commander/AI_Commander_AssignTowns.sqf:726 keys: team, tier generic-collected only
UPGRADE_RESEARCHED 1 Server/Functions/Server_AI_Com_Upgrade.sqf:99 keys: fundsCost, id, lvl, paidBy, supplyCost generic-collected only
UPRISING_DONE 1 Server/Functions/AI_Commander_Wildcard.sqf:876 pos: cleared generic-collected only
VEHDROP 1 Common/Functions/Common_AICOMAirLeg.sqf:396 keys: depth, team, veh not collected by current side regex
side-token miss: numeric/lowercase side
VEHLIFT 1 Common/Functions/Common_AICOMAirLeg.sqf:271 keys: depth, team, tier, veh not collected by current side regex
side-token miss: numeric/lowercase side
WEDGE_RELEASE 1 Server/AI/Commander/AI_Commander_Strategy.sqf:588 keys: mode, moved, team generic-collected only
WILDCARD_W<n> 1 Server/Functions/AI_Commander_Wildcard.sqf:1512 pos: draw result/detail generic-collected only

Parser Follow-Ups

Priority Follow-up Why
1 Relax RE_V2_EVENT side capture from [A-Z]+ to a non-pipe token such as `([^ ]+)` and normalize side strings later.
2 Add a generic v2_event_counts object to analyzer JSON and a compact text table for all collected event families. This preserves telemetry value for events that are not full KPIs yet.
3 Rename or map stale watchlist labels: ECON_SINK -> ECON_SINK_SURGE/ECON_SINK_RESEARCH, STAGE -> STRIKE_STAGE_RELEASE, and document TOPUP_DONE as v1 unless upgraded. Prevents false zeroes in soak reports.
4 Add parser regression fixtures for numeric side IDs and lowercase all. The existing regex failure is silent; a small fixture catches it.
5 Decide whether driver-side CAPTURE_TRACE should emit side strings instead of numeric IDs, or whether the parser should own all normalization. Parser-side normalization is the smaller blast-radius fix; emitter consistency is cleaner long term.

Continue Reading

Sidebar

Clone this wiki locally