-
Notifications
You must be signed in to change notification settings - Fork 0
AI Commander B69 Improvement Roadmap
Produced 2026-06-22 by a multi-agent fleet audit of the live B68 AI commander on the Chernarus mission. Source-of-truth tree:
Missions/[55-2hc]warfarev2_073v48co.chernarus/. All findings verified against live B68 source; every recommended change respects the A2-OA-1.64 / no-sim-gating / never-freeze / antistack-untouched / total-AI-flat-or-down constraints.
2026-06-22 current-head refresh: origin/claude/b69@8d465fce is now the B69 branch head after merged PR #51, with first parent b8530477 and second parent 70a1c808. The isolated diff from B68 head b8a1505f..8d465fce is 44 files / +3203 / -239 across B69-IMPLEMENTATION-PLAN.md, current Chernarus and maintained Vanilla/Takistan. The PR #51 delta b8530477..8d465fce is one current Chernarus AI commander file / +5 / -1, with no maintained Vanilla/Takistan diff. gh pr list --head claude/b69 --state all still returned [] on 2026-06-22, so current B69 remains branch-integration evidence, not a direct master-target PR or stable/release proof.
2026-06-22 PR #47 merged-head addendum: origin/claude/b69-finalpieces@80d3267c1b2b is now an ancestor of origin/claude/b69@0094647d7b64. The merge delta 0a1ccb4d05c5..0094647d7b64 is the same finalpieces set, 8 Chernarus AI commander/client files / +242 / -13 with no maintained Vanilla diff. This is now B69-head evidence, not an open stacked PR and not a master/stable route.
2026-06-22 PR #48 B71-harvest addendum: origin/claude/b69@4dcc10b143a0 now also carries claude/b71-pr-harvest@9cad74c4b6d3. The merge delta 0094647d7b64..4dcc10b143a0 is 6 Chernarus files / +40 / -13 with no maintained Vanilla diff. This is now B69-head evidence for harvested PR #40 marker/FPS residuals, faction vehicle-tint side resolution and a bounded random-position water loop; it is not master/stable or maintained Vanilla proof.
2026-06-22 PR #49 B72-tints-on addendum: origin/claude/b69@39eed5c0 now also carries claude/b72-tints-on@7e1026ea. The merge delta 4dcc10b143a0..39eed5c0 is one current Chernarus constants file / +1 / -1 with no maintained Vanilla diff. This flips WFBE_C_VEHICLE_TINTS from nil-guard default 0 to 1 at Common/Init/Init_CommonConstants.sqf:795; the comment still carries the older default-off / in-engine cosmetic-check caveat, so this remains smoke-pending branch evidence.
2026-06-22 PR #50 Takistan AICOM port addendum: PR #50 merged claude/tk-aicom-port@3b1106a1 into claude/b69 at b8530477ce4f8cc66c60a5d310a85d25c9cbc27c on 2026-06-22T13:33:48Z. The merge delta 39eed5c0..b8530477 is 22 maintained Vanilla/Takistan files / +2499 / -147. It ports the B69/B59-B72 AICOM route into Missions_Vanilla/[61-2hc]warfarev2_073v48co.takistan, including AICOM constants at Common/Init/Init_CommonConstants.sqf:630-652,691-700, the supervisor compile/spawn/watchdog at Server/Init/Init_Server.sqf:58-67,1015-1057, GUER air-defense launch and worker at Init_Server.sqf:789-795 plus Server/Server_GuerAirDef.sqf:37-58,72-76,243-252, client marker/PV support at Client/Init/Init_Client.sqf:494-496 and Client/PVFunctions/HandleSpecial.sqf:52-67, and the same nil-guarded HC top-up caveat in AI_Commander.sqf:228-238. This corrects the old "no maintained Vanilla propagation" status for current B69, but it still needs generated-diff review and Arma smoke before release wording.
2026-06-22 PR #51 B73 troop-truck addendum: PR #51 merged claude/ch-truck-fix@70a1c808 into claude/b69 at 8d465fcede7fc20a7fcb97bd7d02e5211de8d1bf on 2026-06-22T14:03:51Z. The merge delta b8530477..8d465fce is one Chernarus AI commander file / +5 / -1. Chernarus AI_Commander_Teams.sqf:414-418 now gates the B66 pure-infantry troop-truck prepend on WFBE_C_AICOM_ARMED_TRANSPORT_ONLY <= 0, preventing unarmed empty trucks when Common_RunCommanderTeam refuses them under armed-transport-only mode. No maintained Vanilla/Takistan file changed in PR #51, so this guard still needs propagation review and Arma smoke.
| Item | Branch evidence | Status |
|---|---|---|
| HQ-strike order/gate/picker core | Chernarus anchors remain Init_CommonConstants.sqf:229-231 plus AI_Commander_Strategy.sqf:530-539,547,561-565,576; current B69 also ports the maintained Vanilla/Takistan constants at Common/Init/Init_CommonConstants.sqf:649-652 and the AICOM strategy worker in PR #50. |
Source-present on current B69 8d465fce in Chernarus and maintained Vanilla/Takistan. Still not master/stable proof; needs review, generated-diff inspection and HQ-strike Arma smoke before release wording. |
| Capture-phase interrupt | Chernarus anchors remain Init_CommonConstants.sqf:232 and Common_RunCommanderTeam.sqf:709-712,810,867,895,916; PR #50 ports the Takistan interrupt constant at Init_CommonConstants.sqf:652 and Common_RunCommanderTeam.sqf. |
Source-present on current B69 in both maintained roots. Needs capture/HQ-strike smoke and a master-target route before release wording. |
| Supervisor resilience and cadence | Chernarus anchors remain Init_CommonConstants.sqf:375-380, AI_Commander.sqf:28,36,119 and Init_Server.sqf:1017-1044; PR #50 ports the Takistan supervisor compile/spawn/watchdog at Server/Init/Init_Server.sqf:58-67,1015-1057. |
Source-present on current B69 in both maintained roots. Smoke no false restarts, no duplicate supervisor loops, induced stale-heartbeat restart and worker de-correlation before release wording. |
| Posture / relief / MP hardening | Chernarus anchors remain Init_CommonConstants.sqf:364,367,371-383, AI_Commander_Strategy.sqf:424-436,603-640, AI_Commander_MHQReloc.sqf:228-257 and AI_Commander_Teams.sqf:124-128; PR #50 ports the corresponding Takistan AI commander workers and constants. |
Source-present on current B69 in both maintained roots. Needs Arma smoke, tuning review and master/stable routing before release wording. |
| Bootstrap stipend and HC-team metadata |
AI_Commander.sqf:184-216 runs the 0-town bootstrap stipend on the active gate rather than the _canBuild gate. AI_Commander_Teams.sqf:498-507 appends template index and pad class to the delegate-aicom-team payload; PR #50 ports the Takistan workers. |
Stipend hoist and metadata scaffolding are source-present on current B69 in both maintained roots. HC merge/top-up remains caveated because the draft worker is still only nil-guarded and not proven compiled/live. |
| B69 finalpieces / PR #47 route | PR #47 merged claude/b69-finalpieces -> claude/b69 at 0094647d7b641bb79202e77e7f480d6d39aadcdb; PR #50 later ports the relevant current B69 AI commander/client pieces to maintained Vanilla/Takistan at b8530477; PR #51 advances current Chernarus troop-truck guard evidence at 8d465fce. |
B69 branch evidence only. Use it to review finalpieces inside current B69; do not treat it as master/stable or smoke proof. |
| Town-punch and armed transport | Chernarus anchors remain Init_CommonConstants.sqf:389-390,404, AI_Commander_AssignTypes.sqf:166-167, AI_Commander_Teams.sqf:330,335-336,414-418 and Common_RunCommanderTeam.sqf:416; PR #50 ports the Takistan constants at Init_CommonConstants.sqf:691-698 plus the worker/function files, while PR #51 adds a Chernarus-only guard so the B66 pure-infantry troop-truck prepend does not run when WFBE_C_AICOM_ARMED_TRANSPORT_ONLY > 0. |
Core tuning/filter evidence is source-present in both maintained roots, but the B73 lingering-truck guard is Chernarus-only until propagated. Smoke team composition, troop-transport behavior, armed-transport-only fallback cases and no lingering empty trucks before release wording. |
| Stranded survivor merge and HC merge scaffolding | Chernarus anchors remain Init_CommonConstants.sqf:394-400, AI_Commander_Produce.sqf:122,127-128,156, HandleSpecial.sqf:57,59 and AI_Commander.sqf:232-238; Takistan carries the same default-off merge gate at Client/PVFunctions/HandleSpecial.sqf:52-67 and nil-guarded top-up call at AI_Commander.sqf:228-238. AI_Commander_HCTopUp.DRAFT.sqf is present, but Init_Server.sqf:58-67 still does not compile WFBE_SE_FNC_AI_Com_HCTopUp. |
Stranded merge scaffolding is source-present on current B69 in both maintained roots. HC merge/top-up remains default-off draft scaffolding and is not proven compiled/live. |
| Client/HQ fall QoL and spectacle |
Server_OnHQKilled.sqf:57,103 adds base-fall smoke and a BaseFallSting broadcast; LocalizeMessage.sqf:11 consumes the sound-only message. Client_EndGame.sqf:71, client_title_capture.sqf:42 and GUI_Menu_Tactical.sqf:468 add victory outro FX, capture-bar town name and fast-travel arrival confirmation; PR #50 ports the same Takistan file families. |
Current B69 branch UX/FX additions now exist in both maintained roots, but still need default-policy review and in-engine smoke before release wording. |
| B71 harvest / PR #48 route | PR #48 merged claude/b71-pr-harvest into claude/b69 at 4dcc10b143a0. The original merge delta was 6 Chernarus files / +40 / -13. Source anchors include map-gated town markers, terrain-grid fallback, faction tint side resolution and bounded water-reject loops; PR #50 ports the matching Takistan file families including updatetownmarkers.sqf, Init_Client.sqf, Common_CreateVehicle.sqf, Common_AddVehicleTexture.sqf and Common_GetRandomPosition.sqf. |
Current B69 branch evidence now includes maintained Vanilla/Takistan propagation for these file families. Smoke map-open/SpecOps supply cue behavior, profile terrain-grid persistence/default and water-heavy random-position callers before release wording. |
| B72 tints-on / PR #49 route | PR #49 merged claude/b72-tints-on into claude/b69 at 39eed5c0. The PR #49 merge delta was one Chernarus file / +1 / -1; current B69 also has maintained Vanilla/Takistan WFBE_C_VEHICLE_TINTS = 1 at Common/Init/Init_CommonConstants.sqf:629, preserved through PR #50. |
Branch-only cosmetic default flip across current B69 maintained roots. Smoke vehicle spawn appearance across WEST/EAST/GUER/civilian hulls before release wording. |
- 701 agents total across a broad 9-lens pass (41 candidates kept after a 3-vote adversarial panel) and a deep 12-lens blind-spot pass (37 candidates kept after a 5-vote panel), then a full finisher (consolidated synthesis + completeness critic + an A2-OA-safe SQF implementation sketch for all 78 verified items).
- 96 open AICOM items harvested from other agents' wiki work were folded into the deep pass (see Provenance below) and de-duplicated against what already shipped in B66–B68.
- Loop-until-dry discovery, then adversarial verification (code-reality / A2-OA-safety / constraints / novelty / implementability).
B69's spine is FINISHING AI-vs-AI rounds. The only round-ender, the HQ strike, is verified dead on live B68 for three independent reasons that must ship as ONE package: (1) ORDER CONTRACT - HC strikers (100% of live teams) get a 'towns-target' order so they capture the town nearest the enemy HQ instead of assaulting it; the relief path already proves a 'defense'-mode SAD-at-pos is the fix. (2) GATE - the strike required a hard literal > 8 owned towns instead of scaling against count towns, so it was dead or badly tuned whenever the live town count/mode did not match that literal. (3) PICKER - the force is chosen by raw alive body count, so it always sends infantry and never the MBT/attack-heli punch. Shipping any one without the others mis-fires (wrong objective, or an infantry-only rush at a fortified base). All three are small, FPS-neutral (re-task existing teams, zero unit-count change), and form the de-duplicated HQ-STRIKE FINISHER theme. The completeness-critic correctly flags that ~90% of the verified slate is town-target selection while the map's own HIGHEST-severity items had no kept candidate; the deep pass (deepKept) now supplies them, so B69 balances the finisher against four structural gaps: HC-team units-bleed (live teams dribble to ~4-5 vs the 8-12 policy because HC-founded teams are never refilled), supervisor has no watchdog/heartbeat (one uncaught error silently kills a side's brain for the whole round - the top unattended-soak risk), the garrison-vs-maneuver strength split (the real root of the 'dominant-but-passive' stall, since garrison bodies deflate maneuver strength and are never released to offense), and lockstep worker scheduling (both sides' economy workers fire in one frame on an FPS-bound box). A second tier hardens the maneuver/MP layer (relief reliever-strength gate, MHQ re-drive/unstuck, pending-slot timeout reaper, bootstrap-stipend hoist) and a third is pure unattended-soak insurance (HQSite lock timeout, arty-scan throttle, orphaned-constant centralization). Every recommended key is a real verified key; all respect A2-OA 1.64 constraints, publicVariable-is-not-JIP-durable timeouts, no sim-gating/no-freeze, antistack untouched, and AI count flat-or-down (the HC merge and stranded-survivor merge are net FPS-DOWN). The HC units-bleed fix should ship as a same-HC depleted-team MERGE (fewer+bigger groups) rather than a refill, to keep total AI flat-or-down.
| # | Item | Theme tier | Provenance |
|---|---|---|---|
| 1 | Fix HQ-strike order so HC strikers actually assault the enemy HQ instead of capturing the nearest town | — | broad/3-vote |
| 2 | Make the HQ-strike town gate a fraction of total towns, not the old hard literal 8 | — | broad/3-vote |
| 3 | HQ-strike force is selected by raw alive body count, so it always picks infantry and never commits MBT/attack-heli teams (the actual punch) | — | broad/3-vote |
| 4 | Make the blocking capture phase honor a fresh order seq + disband flag (break out of the camp/depot while-loops on re-task) | — | broad/3-vote |
| 5 | Stamp wfbe_teamtype (and a refill pad-class) on every HC team at founding so any refill/merge pass can resolve it | — | deep/5-vote |
| 6 | Add a same-HC depleted-team MERGE pass (fewer+bigger, group-count DOWN) as the FPS-preferred alternative to refill | — | deep/5-vote |
| 7 | Per-tick heartbeat stamp at the top of the supervisor loop (the signal a watchdog needs) | — | deep/5-vote |
| 8 | Standalone server watchdog that re-Spawns a dead/wedged per-side supervisor | — | deep/5-vote |
| 9 | Credit held territory in the PRESS/DEFEND posture gate so the dominant side keeps attacking | — | deep/5-vote |
| 10 | Phase-jitter the two per-side supervisors at spawn so both sides' economy workers never share a frame | — | deep/5-vote |
| 11 | Relief picks the nearest team with no strength check — a 1-2-man remnant gets sent to relieve a town under full assault | — | broad/3-vote |
| 12 | Re-issue doMove every monitor tick + add a sub-window unstuck nudge so the MHQ stops stranding mid-route | — | broad/3-vote |
| 13 | Add a pending-founding-slot timeout reaper so a lost HC dispatch ack can't pin founding below target forever | — | broad/3-vote |
| 14 | Move the 0-town bootstrap stipend off the build-grace gate so a brief human blip can't starve a broke AI for 300s | — | broad/3-vote |
| 15 | Instrument the STALL/POSTURE telemetry with held-town garrison body count to size the split correctly | — | deep/5-vote |
[medium] HQ-strike finisher (the only round-ender, dead on live) - ship order + gate + picker as ONE tight package
Subsystem: strategic-targeting / Strategy.sqf + RunCommanderTeam.sqf
Five broad candidates and two deep candidates all describe the SAME three changes (order-contract swap to 'defense'-mode SAD-on-HQ, town gate as a fraction not the literal 8, picker weighted to MBT/attack-heli with a per-team size floor). De-duplicated into one theme because the critic flagged the HQ-strike appearing in five near-duplicate forms. The three core fixes are interdependent: gate-without-order launches a strike that captures the wrong objective; order-without-picker sends an infantry-only rush at a fortified base. Effort is small per fix but the package is medium. The deep additions (staging-rally to stop the piecemeal trickle, time-to-enemy-away window) are optional polish layered on the same code path and should ship only after the core three are validated. FPS-neutral: re-tasks existing teams, zero unit-count change. A2-OA-safe: a one-token order-mode swap plus count/select-based picker ranking, no A3 commands.
| Item | What it changes | Impact | Effort | Prov | Rec |
|---|---|---|---|---|---|
| Fix HQ-strike order so HC strikers actually assault the enemy HQ instead of capturing the nearest town | Change the HC strike order at AI_Commander_Strategy.sqf:544 from mode "towns-target" to mode "defense" at getPos _enemyHQ. The "defense" branch in Common_RunCommanderTeam.sqf (the if (_mode == "defense") path at :668) runs a HOLD-SAD at the… | high | small | broad/3-vote | ✅ |
| HQ-strike sends HC teams a 'towns-target' order so they capture the town nearest the enemy HQ instead of assau… | Change the HC strike order at AI_Commander_Strategy.sqf:544 from mode "towns-target" to "defense" (keeping getPos _enemyHQ as the pos), so the strikers run the SAD-at-pos seek-and-destroy at the enemy HQ — engaging base defenders and able t… | high | small | broad/3-vote | |
| HQ-strike HC teams attack the nearest TOWN, not the enemy HQ — switch the strike order to 'defense'-mode SAD o… | In AI_Commander_Strategy.sqf:544 change the HC strike order mode from 'towns-target' to 'defense' (keeping pos = getPos _enemyHQ). The HC driver's 'defense' branch (Common_RunCommanderTeam.sqf:668-669) lays a real SAD,100m,COMBAT/RED/WEDGE … | high | small | broad/3-vote | |
| Make the HQ-strike town gate a fraction of total towns, not the hard literal 8 (it never fires on the live 7-t… | Add a constant WFBE_C_AICOM_HQSTRIKE_TOWN_FRAC (default 0.45) in the AICOM block of Init_CommonConstants.sqf, nil-guarded like its siblings. In AI_Commander_Strategy.sqf just before line 513 compute _strikeMinTowns = ceil((count towns) * (m… | high | small | broad/3-vote | ✅ |
| HQ-strike town gate is a hardcoded >8 owned towns, so the round-ending strike never fires on reduced-town lobb… | Add a nil-guarded constant in the AICOM block of Init_CommonConstants.sqf: WFBE_C_AICOM_HQSTRIKE_TOWN_FRAC = 0.5. In AI_Commander_Strategy.sqf just before line 511 compute _strikeMin = round((count towns) * (missionNamespace getVariable ["W… | medium | small | broad/3-vote | |
| HQ-strike force is selected by raw alive body count, so it always picks infantry and never commits MBT/attack-… | In the strike picker (AI_Commander_Strategy.sqf:528-538) compute a punch score instead of raw alive count: _score = _alive; then if the team owns a crewed combat vehicle (scan units _team: any unit u with vehicle u != u AND (vehicle u) isKi… | high | small | broad/3-vote | ✅ |
| HQ-strike picks teams by raw body count — it never sends armour/attack-heli and can commit 2-man scraps; rank … | In the strike picker (AI_Commander_Strategy.sqf:528-538): (1) compute a punch score per candidate = alive-count + a vehicle bonus when the team owns a non-transport Tank or non-transport attack Helicopter (reuse the exact A2-OA classname te… | high | medium | broad/3-vote | |
| Weight the HQ-strike picker toward armour/attack-heli teams and raise the per-team alive floor | In the strike picker loop (AI_Commander_Strategy.sqf:530-538): compute a punch score per candidate instead of raw _alive. Detect a vehicle team A2-safely: _isVehTeam = false; { if (!_isVehTeam && {alive _x} && {(vehicle _x) != _x} && {((veh… | medium | small | broad/3-vote | |
| HQ-strike accepts 2-man remnants (floor of 1) onto a cross-map base rush, wasting the strike and bleeding the … | Add WFBE_C_AICOM_HQSTRIKE_MIN_ALIVE = 6 to Init_CommonConstants.sqf (AICOM block). In the picker, require a candidate INFANTRY team to have _alive >= that floor before it is eligible (initialise _bestN = WFBE_C_AICOM_HQSTRIKE_MIN_ALIVE - 1,… | medium | small | broad/3-vote | |
| HQ-strike: stage strikers at a forward rally and release the final assault only once a body-count threshold is… | In the HQ-hunt block (Strategy.sqf ~518-548), compute a RALLY pos once: a point on the segment from the side HQ toward _enemyHQ at a standoff distance behind the HQ (new const WFBE_C_AICOM_HQSTRIKE_RALLY_STANDOFF, default 800m short of _ene… | high | medium | deep/5-vote | |
| HQ-strike timing: only commit the strike while the enemy's maneuver force is AWAY from its own HQ (exploit kno… | Compute a cheap _enemyHomeDefenders count once per tick: iterate _enemyLogik getVariable ["wfbe_teams",[]], and for each alive enemy team whose (leader _x) distance _enemyHQ is within a new constant WFBE_C_AICOM_HQSTRIKE_AWAY_RADIUS (… |
medium | small | deep/5-vote |
[larger] HC-team units-bleed - stamp teamtype at founding, then MERGE depleted pairs (fewer+bigger, FPS-down)
Subsystem: hc-refill-merge / Strategy.sqf founding + new HC consumer
The #1 documented gap-to-policy across three clusters: 100% of live teams are HC-founded and NEVER refilled, so team size dribbles to ~4-5 vs the 8-12 policy. The merge path (same-HC depleted-team MERGE + stranded-survivor merge-before-cull) is the FPS-PREFERRED form because it is net group-count DOWN and keeps total AI flat-or-down, unlike refill which can inflate count. Prerequisite is stamping wfbe_teamtype at founding so any merge pass can resolve the team. The SendToClient consumer (route to the OWNING HC, not a broadcast RequestSpecial) and central tunables are the wiring. Larger because it spans founding, a new HC-side consumer, and the publicVariable-is-not-JIP-durable handshake (the consumer route needs a timeout). A2-OA-safe via typeName/count/select; respects no-freeze (merged units keep their orders).
| Item | What it changes | Impact | Effort | Prov | Rec |
|---|---|---|---|---|---|
| Stamp wfbe_teamtype (and a refill pad-class) on every HC team at founding so any refill/merge pass can resolve… | Two small additive changes that ship safely on their own (default behaviour unchanged): (1) In AI_Commander_Teams.sqf, after the team is registered (in the aicom-team-created case, Server_HandleSpecial.sqf:215-237, where the team OBJECT exi… | high | small | deep/5-vote | ✅ |
| Add a same-HC depleted-team MERGE pass (fewer+bigger, group-count DOWN) as the FPS-preferred alternative to re… | Add a server-picked, HC-executed merge pass (a second consumer case "aicom-team-merge" in Client/PVFunctions/HandleSpecial.sqf, OR fold into the topup worker as an alternative action). Server side (in the topup worker or a sibling, gated WF… | high | medium | deep/5-vote | ✅ |
| Stranded lone-survivor: merge into the nearest healthy same-side server-local team before culling it (preserve… | Before the cull at Produce.sqf:121-127, gate on a new const WFBE_C_AICOM_STRANDED_MERGE (default 1): scan _teams for the nearest OTHER same-side team that is (a) non-null, (b) server-local (leader local && !wfbe_aicom_hc via the existing WF… | medium | small | deep/5-vote | |
| Write the missing HC-side aicom-team-topup consumer and route the worker to the OWNING HC via SendToClient (no… | Add a case "aicom-team-topup" to Client/PVFunctions/HandleSpecial.sqf (the HC-resident dispatcher): _team = _args select 0; _classes = _args select 1; if (isNull _team // {!local (leader _team)}) exitWith {}; _ldr = leader _team; _sp = _ldr… | high | medium | deep/5-vote | |
| Define the HCTopUp/merge tunables centrally in Init_CommonConstants so the refill knobs are param-tunable and … | In the AICOM block of Init_CommonConstants.sqf (next to the TEAM_SIZE_MIN/MAX/FOUND_SIZE trio at 306-315) add isNil-guarded constants matching the surrounding pattern: WFBE_C_AICOM_HC_TOPUP_ENABLE=0 (default OFF), WFBE_C_AICOM_HC_TOPUP_FRAC… | low | small | deep/5-vote |
[medium] Supervisor resilience - heartbeat + watchdog restart so a side's brain can't silently die for the round
Subsystem: supervisor-watchdog / AICOM supervisor loop
HIGH-severity and the single highest-value robustness item for unattended overnight soaks: one uncaught worker error kills a side's entire brain for the round with no heartbeat or restart. Three keys form a defense-in-depth chain: per-tick heartbeat stamp at the top of the loop (the signal), a standalone server watchdog that re-Spawns a dead/wedged supervisor (the recovery), and inline worker Call isolation so one worker error can't take down the loop (the prevention). The kept lock-timeout fix only protected the Construction_HQSite wait, not the loop itself - this fills that gap. Server-only, no client surface. publicVariable not involved; the heartbeat is a server-local stamp so JIP durability is moot.
| Item | What it changes | Impact | Effort | Prov | Rec |
|---|---|---|---|---|---|
| Per-tick heartbeat stamp at the top of the supervisor loop (the signal a watchdog needs) | At the very TOP of the while{!gameOver} loop body (immediately after line AI_Commander.sqf:93 opens the loop, before the _active gate), add one cheap stamp keyed by side ID so the watchdog can read it without resolving the logic each time: … | high | small | deep/5-vote | ✅ |
| Standalone server watchdog that re-Spawns a dead/wedged per-side supervisor | Add a single server-side watchdog loop, spawned ONCE right after the supervisor spawn at Init_Server.sqf:1015 (e.g. [] Spawn { ... } or a compiled WFBE_SE_FNC_AI_Commander_Watchdog). It does: waitUntil{!isNil 'serverInitFull'}; then while… |
high | medium | deep/5-vote | ✅ |
| Isolate the inline worker Calls so one worker error cannot kill the supervisor loop (defence-in-depth) | Wrap ONLY the two heaviest, construction-touching workers that actually call createVehicle/ExecVM (Base at AI_Commander.sqf:183 and the MHQReloc dispatch at 179) in a child Spawn instead of Call, since they already fork their own Spawn life… | medium | small | deep/5-vote |
Subsystem: garrison-maneuver-split / posture gate + STALL telemetry
The critic names this the actual root of the 'dominant-but-passive, telemetry-only' stall: garrison bodies are counted into maneuver strength and never released to offense, so a winning side's _myStr looks low and it stops attacking. Three keys: credit held territory in the PRESS/DEFEND posture gate so the dominant side keeps attacking (the fix), instrument STALL telemetry with held-town garrison body count to size the split correctly (the measurement), and apply symmetric refit/remnant exclusions to enemy strength to remove the anti-self DEFEND bias (the partial mitigation already verified). Instrument-first then act, since the split size is unknown. FPS-neutral. A2-OA-safe count-based reads. Note: town-garrison SIZING itself stays out of scope per the no-touch-antistack/garrison-cap constraints - this only fixes how garrison bodies are ACCOUNTED in the maneuver decision.
| Item | What it changes | Impact | Effort | Prov | Rec |
|---|---|---|---|---|---|
| Credit held territory in the PRESS/DEFEND posture gate so the dominant side keeps attacking | Add a territory-weighted effective-strength term used ONLY in the posture gate (not in last-stand or HQ-strike). New nil-guarded constant in Init_CommonConstants AICOM block: WFBE_C_AICOM_TOWN_STRENGTH (default 2). In Strategy.sqf just be… |
high | small | deep/5-vote | ✅ |
| Instrument the STALL/POSTURE telemetry with held-town garrison body count to size the split correctly | In the POSTURE/STALL telemetry build, compute a cheap per-side garrison-body count and append it. Sum across owned towns of the live members of each town's wfbe_town_teams: `_garBodies = 0; { if ((_x getVariable "sideID") == _sideID) then… |
medium | small | deep/5-vote | ✅ |
| Apply the same refit/remnant exclusions to enemy strength as to own strength (remove the anti-self DEFEND bias… | Replace the raw _enStr scan at AI_Commander_Strategy.sqf:62-63 with the same exclusion logic used for _myStr, applied to the enemy team list and the enemy HQ. Resolve _enHQ = (_enemySide) Call WFBE_CO_FNC_GetSideHQ; then loop the enemy team… | high | medium | broad/3-vote |
Subsystem: worker-stagger / per-side supervisor scheduling
A named pure-scheduling, FPS-POSITIVE lead with no kept broad candidate: both sides' supervisors and all heavy economy/telemetry workers fire in lockstep in one frame, an avoidable periodic stall. Phase-jitter the two per-side supervisors at spawn so their workers never share a frame, and offset the heavy CMDRSTAT/COMBATSTAT telemetry block off the very first tick. Pure scheduling change, zero behavior change, zero unit-count change - lowest-risk FPS win in the slate. A2-OA-safe (a spawn-time random offset and a tick-skip). No sim-gating: this staggers WHEN work runs, never gates AI on distance or freezes anything.
| Item | What it changes | Impact | Effort | Prov | Rec |
|---|---|---|---|---|---|
| Phase-jitter the two per-side supervisors at spawn so both sides' economy workers never share a frame | In AI_Commander.sqf, immediately AFTER the waitUntil {sleep 1; !(isNil "serverInitFull")} at line 23 (i.e. once both sides have been released together), add a one-time per-side phase offset before the main loop: `private "_phaseJitter"; _phaseJitter = ra… |
medium | small | deep/5-vote | ✅ |
| Stop the heavy per-side CMDRSTAT/COMBATSTAT telemetry block from firing on the very first tick for both sides | Give each side a DIFFERENT telemetry first-fire and avoid the boot co-fire by seeding _ltStat per-side instead of the shared -301. Two safe options: (a) seed _ltStat = -301 + (random 120) so the first CMDRSTAT lands 0..120s apart betwee… |
low | small | deep/5-vote |
Subsystem: maneuver-retreat / defense-garrison / RunCommanderTeam.sqf
Relief appears in five near-duplicate forms and consolidates to one fix: triage by reliever STRENGTH + ETA/mobility + town value, and let it scale beyond the hard RELIEF_MAX=1 under a coordinated multi-town attack (a 1-2-man foot remnant currently gets the side's only relief slot and answers only one town). Bundled with two correctness/safety fixes that share the capture path: make the blocking capture phase honor a fresh order seq + disband flag so a re-tasked team breaks out of the camp/depot while-loops, and reset the AssignTowns stuck-strike ladder when the wedge-watchdog releases a team. Plus two no-freeze-guardrail items: a behaviour!=COMBAT guard on the retreat-cull deleteVehicle (never delete a survivor mid-firefight) and replacing the doStop camp-plant with a tight doMove / proximity re-wake. capture-phase-seq-interrupt is a prerequisite for any re-task (including the HQ-strike re-task) to actually take effect. A2-OA-safe; no-freeze-compliant by construction.
| Item | What it changes | Impact | Effort | Prov | Rec |
|---|---|---|---|---|---|
| Relief picks the nearest team with no strength check — a 1-2-man remnant gets sent to relieve a town under ful… | In the reliever-selection forEach (Strategy.sqf:417-429) raise the eligibility gate from alive>0 to a real floor: require ({alive _x} count (units _team)) >= a new tunable WFBE_C_AICOM_RELIEF_MIN_ALIVE (define =4 in Init_CommonConstants.sqf… | high | small | broad/3-vote | ✅ |
| Reliever chosen by raw straight-line leader distance ignores mobility — a far MBT/mounted team loses to a near… | When ranking relievers (Strategy.sqf:424) replace raw distance with an ETA-weighted effective distance: if the team has a drivable, non-transport land vehicle or is an air team (detect via the same isKindOf 'LandVehicle'/'Air' + alive-drive… | medium | small | broad/3-vote | |
| Triage relief by reliever strength + town value and let it scale when multiple own towns are attacked at once | Three changes in the relief block (AI_Commander_Strategy.sqf:405-452): (1) Skip remnant reliever candidates - in the eligible-team test at :419-423 add && {({alive _x} count (units _team)) >= (missionNamespace getVariable ["WFBE_C_AICOM_REL… | medium | medium | broad/3-vote | |
| Allow relief to scale to >1 town under a coordinated multi-town attack via a bounded fraction, instead of hard… | Replace the flat cap read with a bounded scale: _reliefMax = (1 max (round (_nAttacked * WFBE_C_AICOM_RELIEF_FRAC))) min WFBE_C_AICOM_RELIEF_MAX_HARD, where _nAttacked = count of own towns currently flagged under attack this tick, WFBE_C_AI… | medium | medium | broad/3-vote | |
| Multi-town defense is unprioritized and capped at one: relief iterates towns in raw order and abandons every c… | Before the relief assignment loop, sort _attacked descending by a cheap value key already on the town object — (_x getVariable ['supplyValue',0]) + (_x getVariable ['wfbe_town_value',0]) + hardTier (reuse the 0..4 _hardTier switch already i… | high | medium | broad/3-vote | |
| Relief sends the nearest team by straight-line leader distance regardless of strength or mobility, and answers… | In the reliever pick (AI_Commander_Strategy.sqf:417-426): (1) ETA-weight the distance — when a team owns a drivable land vehicle (the existing mounted test used elsewhere), divide its effective distance by a reach factor (e.g. _eff = _d / 2… | medium | medium | broad/3-vote | |
| Make the blocking capture phase honor a fresh order seq + disband flag (break out of the camp/depot while-loop… | Add a lightweight order-change abort to each capture-phase loop header. Capture the seq at phase entry (e.g. _capSeq = _seq) and add to each while condition: && {((_team getVariable ["wfbe_aicom_order",[_capSeq]]) select 0) == _capSeq} && {… | high | medium | broad/3-vote | ✅ |
| Reset the AssignTowns stuck-strike ladder when the wedge-watchdog releases a team back to towns mode | In the wedge-watchdog release block at Strategy.sqf:486-487, add _wTeam setVariable ["wfbe_aicom_stuckstrikes", 0]; (and, for symmetry with how AssignTowns stores it, leave it server-local non-broadcast exactly like AssignTowns.sqf:224 whic… | medium | small | broad/3-vote | |
| Add a behaviour!=COMBAT guard to the retreat-cull deleteVehicle so a far survivor actively fighting is never d… | Before the cull branch at 121, compute _inContact = if (isNull _ldr) then {false} else {behaviour _ldr == "COMBAT"}; and gate the cull: change the condition to (_rTries >= _rBudget // {_rIssues >= _rMaxIssues} // {_curDist > _rMaxDist}) && … | medium | small | broad/3-vote | |
| Replace the doStop camp-plant with a tight doMove (or add a player-proximity re-wake) to honor the never-froze… | Mirror the depot-hold idiom in the camp-first loop: drop the doStop branch at 845 and instead keep planted units pressing the camp centre with a tight doMove _campTgtPos (the camp hold radius _campHoldR is already ~8m, well inside the 10m s… | medium | small | broad/3-vote |
[medium] MHQ relocation reliability - stop stranding, re-validate the final deploy, replace dead defenses
Subsystem: mhq-base / MHQ monitor + Construction_HQSite
The MHQ single-doMove strands mid-route. Consolidated: re-issue doMove every monitor tick plus a sub-window unstuck nudge, sample the route for enemies each tick and de-escalate the driver near contact (don't drive blind into the front), and require a minimum NET forward advance before paying the full mobilize/drive/deploy cost. On arrival, re-validate the FINAL deploy position against the hostile-ring buffer AND friendly-structure spacing. base-defense-replace-destroyed fixes a monotonic placed-counter so destroyed base defenses are actually replaced (count LIVE statics). Two duplicate keys (construction-hqsite-lock-timeout / hqsite-lock-timeout) are the SAME bound on the unbounded wfbe_hqinuse waitUntil - a publicVariable-not-JIP-durable wait that needs a timeout. A2-OA-safe.
| Item | What it changes | Impact | Effort | Prov | Rec |
|---|---|---|---|---|---|
| Re-issue doMove every monitor tick + add a sub-window unstuck nudge so the MHQ stops stranding mid-route | Inside the existing 5s monitor while-loop (lines 229-262): (a) when not arrived, re-issue (driver _mhq) doMove _destPos every iteration (guard !isNull (driver _mhq)); (b) add a short non-progress sub-window using the already-present _lastCl… | high | small | broad/3-vote | ✅ |
| Sample the route for enemies each tick and de-escalate the MHQ driver near contact instead of driving blind to… | Add a cheap per-tick contact check inside the 5s monitor loop (lines 229-262), reusing _enemyClear (already in Spawn scope, line 161): _eHit=false; { if (side _x == _enemySide && {alive _x}) then {_eHit=true} } forEach (_mhq nearEntities [[… | medium | small | broad/3-vote | |
| Require a minimum NET forward advance before paying the full mobilize/drive/deploy cost on a relocation | After computing each candidate _cand (line 118), accept it only if it advances the base meaningfully toward the front versus the current HQ: require (_hqPos distance _frontPos) - (_cand distance _frontPos) >= WFBE_C_AICOM_MHQ_MIN_ADVANCE (n… | medium | small | broad/3-vote | |
| Re-validate the FINAL deploy position against the hostile-ring buffer AND friendly-structure spacing before re… | Before the final Construction_HQSite ExecVM (line 293), add a clearance pass on _finPos reusing idioms already in this file/Base.sqf: (1) hostile-ring check -- forEach towns, if sideID==_enemyID//sideID==_guerID and 2D distance < _ringClear… | high | medium | broad/3-vote | |
| Replace destroyed base defenses: count LIVE statics, not a monotonic placed-counter | In the defense block (AI_Commander_Base.sqf:458-488), replace the monotonic _defCount read with a LIVE count of the AI's existing base statics near HQ: scan ((_side) Call WFBE_CO_FNC_GetSideStructures) (or nearestObjects [_hqPos,['StaticWea… | high | medium | broad/3-vote | |
| Bound the unbounded wfbe_hqinuse waitUntil in Construction_HQSite so a stuck lock can't deadlock MHQ toggling | Replace the bare waitUntil at Construction_HQSite.sqf:14 with a bounded form that force-claims the lock after a deadline. Before line 14: _hqLockDeadline = time + (missionNamespace getVariable ["WFBE_C_HQSITE_LOCK_TIMEOUT", 20]); then `wa… |
medium | small | broad/3-vote | |
| Bound the wfbe_hqinuse lock wait in Construction_HQSite so a stuck lock can't deadlock the mobilize/deploy cha… | Replace the bare waitUntil at Construction_HQSite.sqf:14 with a bounded form: private "_lockDeadline"; _lockDeadline = time + (missionNamespace getVariable ['WFBE_C_HQSITE_LOCK_TIMEOUT', 20]); waitUntil {!(_logik getVariable ['wfbe_hqinuse', false]) // time… | medium | small | broad/3-vote |
Subsystem: mp-robustness / economy-production
Robustness insurance for overnight rotation. The pending-founding-slot timeout reaper is the headline (a lost HC dispatch ack pins founding below target FOREVER - a documented wait-chain-needs-a-timeout violation, and a direct enabler of the units-bleed). The two near-duplicate stipend keys are the same hoist: move the 0-town bootstrap stipend off the _canBuild build-grace gate so a 1-tick human-commander blip can't starve a broke AI for 300s. Plus: refund the AICOM treasury when Server_BuyUnit cancels a queued refill, gate Wildcard free air-platoon cards on live team count vs TOTAL_AI_MAX (keeps AI count flat-or-down), gate the wealth-conversion rich flag on team HEALTH so surplus cash refills thin teams instead of doubling into more dribble (this complements the HC-merge theme), and centralize the orphaned inline economy constants for tunability/rollback-consistency. All small, server-side. A2-OA-safe.
| Item | What it changes | Impact | Effort | Prov | Rec |
|---|---|---|---|---|---|
| Add a pending-founding-slot timeout reaper so a lost HC dispatch ack can't pin founding below target forever | Reuse the existing wfbe_aicom_pending_since stamp already maintained at Teams.sqf:120-124. At the top of the founding worker (right after _pending is read at :55), if _pending > 0 AND the stamp age exceeds a timeout (e.g. WFBE_C_AICOM_PENDI… | high | small | broad/3-vote | ✅ |
| Move the 0-town bootstrap stipend off the build-grace gate so a brief human blip can't starve a broke AI for 3… | Hoist the bootstrap-stipend block (the _stipendMaxTime/_stipendTowns/_stipendActive computation through the grant at :249-267, plus the prev-active transition logging at :235-248) OUT of the if(_canBuild){...} body and place it directly und… | medium | small | broad/3-vote | ✅ |
| Move the 0-town bootstrap stipend out from under the _canBuild build-grace so a brief human-commander blip can… | Lift the bootstrap-stipend block (AI_Commander.sqf:227-267) out of the if (_canBuild) body and place it under the _active gate (HQ alive + enabled) so it runs in both full and assist states, mirroring how updateresources.sqf already kee… |
medium | small | broad/3-vote | |
| Refund the AI-commander treasury when Server_BuyUnit cancels a queued AICOM refill | In each of the three Server_BuyUnit early-exit blocks (the pre-loop guard at :12, the in-loop guard at :76, the post-wait guard at :107), add an AI-only refund before the exitWith body: guard !isPlayer (leader _team) AND (typeName _side == … | medium | small | broad/3-vote | |
| Gate Wildcard free air-platoon cards (W6 Air Cavalry / W19 QRF) on the side's live team count vs TOTAL_AI_MAX | In the W6 (and the analogous W19) eligibility block, before setting _w6Eligible=true, count the side's current live AICOM teams (reuse the wfbe_aicom_hc OR wfbe_aicom_founded count idiom already at AI_Commander.sqf:300-306 over _logik getVa… | medium | small | broad/3-vote | |
| Gate the wealth-conversion rich flag on team HEALTH so surplus cash refills existing thin teams instead of dou… | In the _fTeams accumulation loop (AI_Commander.sqf:208-214), only count a team toward _fTeams when it is at/above the size floor — reuse the same alive-count + WFBE_C_AICOM_TEAM_SIZE_MIN logic Produce uses (`({alive _x} count units _x) >= f… | medium | small | broad/3-vote | |
| Define the orphaned inline-default economy constants (RETREAT_HOME_RANGE, RETREAT_MAX_TRIES/MIN_CLOSE, FUNDS_P… | Add isNil-guarded definitions in the AICOM block of Init_CommonConstants.sqf matching the surrounding pattern, at the current inline values (zero behaviour change): WFBE_C_AICOM_RETREAT_HOME_RANGE=800, WFBE_C_AICOM_RETREAT_MAX_TRIES=4, WFBE… | low | small | broad/3-vote |
Subsystem: defense-garrison / last-stand recall
Last-stand recalls every team onto a single HQ point and re-moves them every 60s, so teams bunch, block, and present one massed target (the A2-PFM 'teams bunch and block' problem). Disperse via a per-team perimeter/approach arc (laststand-perimeter-dispersion + concentration-arrival-arc-by-lanejit share the same arc-by-team-index mechanic). Allow more emplaced defenders when genuinely in last-stand and funded (DEFENSES_MAX bump), give captured/front towns AI-placed static emplacements, make the capture-hold budget mass-aware (a 6-team concentration currently parks ~12 min on one town), and make Produce fill-to-floor pad a role mix (AT/AR/medic) instead of N rifleman copies. Medium and lower-priority than the finisher; ships after the core. A2-OA-safe; dispersion respects no-freeze (tight doMove arcs).
| Item | What it changes | Impact | Effort | Prov | Rec |
|---|---|---|---|---|---|
| Last-stand recalls every team onto a single HQ point and re-issues the move every 60s — teams bunch, block, an… | Assign each recalled team a staggered perimeter slot instead of the HQ centroid: compute _ang = (_teamIndex * 360 / max(1,count recalledTeams)) and place the defense pos at _hqPos offset by [ _rsin _ang, _rcos _ang ] with r = a new WFBE… | medium | medium | broad/3-vote | |
| Manned base defenses only ring the HQ; captured/front towns get zero AI-placed static emplacements | Add a small bounded forward-defense pass in the Base worker (after the HQ defense block, gated identically on a built Barracks + AI funds): once per Base cadence, if the side holds its primary spearhead-adjacent FRONT town (nearest own town… | medium | medium | broad/3-vote | |
| DEFENSES_MAX=4 is fixed regardless of threat — a side genuinely in last-stand cannot field more emplaced defen… | Make the effective defense ceiling threat-aware in Base.sqf:458: read defMax as the base WFBE_C_AI_COMMANDER_DEFENSES_MAX, but if the side logic flag wfbe_aicom_laststand (set in Strategy.sqf:74) is true, raise the ceiling to a new WFBE_C… | low | small | broad/3-vote | |
| Capture-hold uses a flat 360s budget for BOTH camp-first and depot phases, so a 6-team concentration parks ~12… | Make the depot-hold budget mass-aware. In AssignTowns where the per-town quota is computed (AI_Commander_AssignTowns.sqf:296-320), also broadcast the count of teams assigned to this town into the order (extend wfbe_aicom_order with a 4th el… | medium | medium | broad/3-vote | |
| Disperse the depot-hold by a per-team approach arc so 6 massed teams don't bunch on one 40m point | Reuse the existing persistent per-team _laneJit ({-1,0,1}, AssignTowns.sqf:385) as a stable approach-bearing seed and give each team a small, distinct FINAL hold offset around the town center instead of stacking on the exact center. (1) In … | high | medium | deep/5-vote | |
| Make Produce FILL-TO-FLOOR pad with a role mix (AT/AR/medic) instead of N copies of the last rifleman, so floo… | Replace the single last-Man pick at :227-229 with a small rotating role list resolved once per team: keep the existing last-Man as the default, but if the side's BARRACKSUNITS pool contains an AT/auto-rifleman/medic class (resolved by the s… | medium | medium | broad/3-vote |
Subsystem: air-doctrine / heli team behavior
A behavioral subsystem the broad panel nearly missed: attack-heli teams march like slow ground teams and park on the depot flag. Make them loiter at a CAS standoff over the spearhead instead, and let idle/over-strength heli teams intercept the enemy's published spearhead. Three cannon-nudge keys (two are exact duplicates - heli-cannon-nudge-target-aware-nearest-threat / heli-cannon-nudge-prefer-nearest-threat-not-first) fix the force-fire that targets nearEntities[0] even a tank, denying the gunner's ATGM: pick the nearest/most-dangerous threat, and on a populated server do NOT force the cannon at a human-crewed Tank/APC (leave the gunner's guided ATGM). Directly feeds the HQ-strike picker (heli teams become real punch). A2-OA-safe (isKindOf for vehicle class, no A3 typed reads). No-freeze: loiter is active flight, not a park.
| Item | What it changes | Impact | Effort | Prov | Rec |
|---|---|---|---|---|---|
| Attack-heli teams loiter at a CAS standoff over the spearhead instead of parking on the depot flag | In Common_RunCommanderTeam.sqf, at the TOP of the dismount-capture phase (after _townObj/_townCenter resolve, ~line 727), detect a no-infantry team whose ONLY combat vehicle(s) are attack helis: _footInf empty AND every alive vehicle is `… |
high | medium | deep/5-vote | |
| Attack-heli cannon-nudge force-fires the cannon at the FIRST entity returned (even a tank), denying the gunner… | In the nudge loop (RunCommanderTeam.sqf:148-165): (1) replace the first-match exitWith with a nearest-in-band scan: iterate the nearEntities[["Man","Car","Tank","Air"],_band] result and keep the candidate with the smallest (_h distance _x) … | medium | small | broad/3-vote | |
| Cannon-nudge target picker prefers the nearest/most-dangerous enemy, not nearEntities[0] | Replace the exitWith-on-first loop (line 149) with a nearest-pick: iterate the same nearEntities result, track _best=objNull;_bestD=1e9 and keep the alive enemy-side in-band unit with the smallest _h distance _x, then doTarget/doFire on… |
medium | small | deep/5-vote | |
| Idle/over-strength attack-heli teams intercept the enemy's published spearhead instead of marching to a town | In AI_Commander_AssignTowns.sqf, before the normal town-target assign for a team, add an AIR-INTERCEPT pre-pass gated WFBE_C_AICOM_AIR_INTERCEPT (new const, default 1): if the team is heli-only (every alive vehicle isKindOf "Helicopter", tr… | medium | medium | deep/5-vote | |
| Heli cannon-nudge: do NOT force the cannon at a human-crewed Tank/APC (leave the gunner's guided ATGM); prefer… | In the cannon-nudge target resolve (line 149), when the chosen _tgt isKindOf "Tank" OR isKindOf "APC", check whether it is human-crewed: _humCrew = {isPlayer _x} count crew _tgt. If _humCrew > 0 (a player in the armor), SKIP the cannon fo… |
medium | small | deep/5-vote |
[larger] Realism / smarter-feel behaviors - intel-lite, human-awareness, doctrine, logistics, withdrawal
Subsystem: intel-recon-fog / human-combatant-awareness / doctrine-selection / forward-logistics / graceful-withdrawal
The deep pass fills the qualitative gaps the critic said would make the AI feel smarter rather than incrementally better at town-capture. Grouped as one larger exploratory theme (NOT all for B69): intel-lite (weight enemy strength by HQ-proximity as a cheap fog-of-engagement model, deprioritize towns shielded by a known enemy concentration to flank, last-seen relief fallback); human-combatant awareness (bias spearhead/relief toward fronts where friendly HUMANS fight, keep the MHQ out of human-contested fronts); doctrine selection (replace the 50/50 coin flip with a map+faction-biased pick, bias the second side to counter the first); forward logistics (target self-service at the FORWARD town and cache it, make the detour a graded resupply with ammo cost instead of a free instant snap-repair, optionally dispatch a crewed ammo/repair truck reusing the proven W17 convoy lifecycle); graceful withdrawal (a 'rally' bounding-fall-back order mode + a Strategy-side per-HC-team withdrawal evaluator, since the cull only sees server-local teams); and a closed-loop difficulty governor (cap the low-pop team-flood and de-escalate Wildcard combat cards when the AI is stomping a weak human lobby). High design value but several need in-engine smoke and owner sign-off; ship 1-2 marquee picks in B69, park the rest. All keep AI count flat-or-down (the cap items are net-down); A2-OA-safe; no-freeze.
| Item | What it changes | Impact | Effort | Prov | Rec |
|---|---|---|---|---|---|
| Posture strength read: weight enemy maneuver strength by HQ-proximity so a forward enemy reads as the real thr… | Replace the flat _enStr sum at 62-63 with a proximity-weighted sum gated behind a new default-OFF constant WFBE_C_AICOM_ENSTR_ENGAGE_WEIGHT (default 0 = exact current behaviour, so it ships inert and A/B-safe). When >0: for each alive enemy… | medium | small | deep/5-vote | |
| Spearhead scorer: deprioritise towns shielded by a known enemy team concentration (exploit omniscience to flan… | Once per Strategy tick, BEFORE the scorer loop, build a cheap list of enemy maneuver-team leader positions: iterate the already-fetched _enemyLogik getVariable ["wfbe_teams",[]], and for each non-null group with alive units push `getPos (… |
high | small | deep/5-vote | |
| Relief trigger: react to a town bleeding ownership-risk even when wfbe_active misses the raid (close the fog g… | Add a per-town supplyValue trend as a SECOND relief trigger. On the side logic, keep a small parallel-array memory wfbe_aicom_town_supply_prev (town + last-seen supplyValue, A2-safe parallel arrays keyed by find, mirroring the spearhead… |
medium | medium | deep/5-vote | |
| Spearhead scorer: bias toward enemy/neutral towns where friendly HUMAN players are already fighting (concentra… | Inside the spearhead scorer loop (both copies, 184-189 and 312-316), after computing _dNear, add a friendly-human-contest bonus: count friendly (side==_side AND isPlayer) live units within a ring of the candidate town center via (_t nearEnt… | high | medium | deep/5-vote | |
| Relief triage: prioritize relieving own towns that friendly HUMAN players are defending/standing in over empty… | Before the relief assignment loop (after _attacked is built at 405-406), sort _attacked so towns with friendly human players present come first. Build _attacked as pairs [town, humanScore] where humanScore = count of (isPlayer _x && side _x… | medium | small | deep/5-vote | |
| MHQ relocation: treat nearby friendly HUMAN players' contact as a route-danger signal (don't creep the base in… | In the destination-clearance gate (lines 139-144, where _enemyClear is already checked at _destPos), ALSO defer relocation when a friendly human player is in active contact near the destination: scan `_destPos nearEntities [["Man","Car","Ta… | low | small | deep/5-vote | |
| Replace blind 50/50 doctrine flip with a map+faction-biased weighted pick | In AI_Commander.sqf:27, replace the symmetric random 1 > 0.5 with a tunable map-bias weighted roll: add nil-guarded constant WFBE_C_AICOM_DOCTRINE_HF_BIAS (default 0.62 for Chernarus armour terrain) in Init_CommonConstants.sqf alongside t… |
medium | small | deep/5-vote | |
| Bias the second side's doctrine to COUNTER the opponent's already-chosen doctrine | In AI_Commander.sqf inside the if (isNil {... "wfbe_aicom_doctrine"}) block, BEFORE the random pick: resolve `_enemySide = if (_side == west) then {east} else {west}; _enemyLogic = (_enemySide) Call WFBE_CO_FNC_GetSideLogic; _enemyDoc = "… |
medium | small | deep/5-vote | |
| Target the self-service detour at the FORWARD owned town nearest the front and cache the pick, so resupply pul… | Two coupled changes in the IDLE branch (Common_AICOMServiceTick.sqf:122-135): (1) Among safe owned towns in reach, prefer the one MOST FORWARD - i.e. the safe owned town with the smallest min-distance to any enemy town (the same front-line … | medium | small | deep/5-vote | |
| Make the self-service detour a graded forward-RESUPPLY (partial repair + ammo cost from supply) instead of a f… | Keep the existing detour/abort/timeout machinery untouched (lines 55-145) but change ONLY the arrival-restore block (73-79) into a graded, supply-charged resupply: (1) charge a one-time supply cost via the existing ChangeSideSupply primitiv… | high | small | deep/5-vote | |
| Dispatch a single crewed ammo/repair truck from HQ to the spearhead concentration (real forward resupply) reus… | Add a small server-side forward-resupply dispatcher, gated default-OFF behind a new nil-guarded WFBE_C_AICOM_FWD_RESUPPLY_ENABLE (Init_CommonConstants.sqf, default 0). Fire it from the supervisor on a slow throttle (reuse an existing _lt* c… | high | medium | deep/5-vote | |
| Break-off-and-rally trigger inside the depot-hold capture loop (fighting withdrawal instead of grind-to-extinc… | 1) At founding (Common_RunCommanderTeam.sqf, right after the team is created ~:66), stamp a self-baselined peak strength: _team setVariable ['wfbe_aicom_peakalive', count _units, true] (and bump it whenever a Produce/topup raises live count… | high | medium | deep/5-vote | |
| New 'rally' order mode in the HC executor: bounding fall-back that fights while withdrawing, never a hold-and-… | Add a third mode branch in the fresh-order block (Common_RunCommanderTeam.sqf, mode dispatch around the arrival/road-march at :484-620 and the arrival posture at :668). When _mode == 'rally': (a) lay a MOVE (NOT SAD) waypoint on the rally p… | high | medium | deep/5-vote | |
| Strategy-side per-HC-team graceful-withdrawal evaluator (the cull only ever sees server-local teams; HC teams … | In AI_Commander_Strategy.sqf, in the existing per-team forEach that already runs the wedge-watchdog (:460-505), add a graceful-withdrawal pass for HC teams NOT already in relief/strike/rally: read the team's wfbe_aicom_peakalive (stamped at… | high | medium | deep/5-vote | |
| Let the governor cap the low-pop team-flood (PC_LOW=15) when humans are present and the AI is already winning | In AI_Commander_Teams.sqf where the PC-bucket target is resolved (around :78-86), after picking the bucket value _target, apply an OPTIONAL governor down-clamp: read _dg = _logik getVariable ['wfbe_aicom_diff_mult', 1.0] (the scalar from ca… | medium | small | deep/5-vote | |
| Make Wildcard losing-side escalation bidirectional: de-escalate combat cards when the AI is dominating humans | Extend the escalation block at AI_Commander_Wildcard.sqf:216-218. Keep the existing _losing -> _eMult=2.0 branch. Add a _winning branch gated on a human being present on the enemy side (so pure-AI soaks are unchanged): _winning = (count hum… | medium | small | deep/5-vote |
- HQ-STRIKE PACKAGE IS ATOMIC — must ship all three together or regress: (1) the order-contract fix (hqstrike-hc-order-contract / hqstrike-order-mode-defense-not-townstarget — swap 'towns-target' to 'defense'-mode SAD-on-HQ at Strategy.sqf:544 so HC strikers assault the HQ instead of GetClosestEntity-capturing the nearest town), (2) the gate fix (hqstrike-town-gate-fraction / hqstrike-town-threshold-fraction-not-literal8 — make the >8-owned-towns literal a fraction of WFBE_C_TOWNS_AMOUNT=7 so the finisher can fire at all), and (3) the picker fix (hqstrike-picker-weight-vehicle-punch + hqstrike-team-size-floor-exempt-vehicles — rank by MBT/attack-heli punch and floor team size). Shipping the GATE without the ORDER fix launches a strike that captures the wrong objective (worse: now it fires); shipping the ORDER fix without the PICKER hurls an infantry-only 2-man scrap at a fortified base. The five near-duplicate hqstrike-* keys must be DEDUPED into exactly one change per facet before coding or you get conflicting edits to the same Strategy.sqf lines.
- HC-REFILL CHAIN HAS A STRICT INTERNAL ORDER: hctopup-stamp-teamtype-at-founding MUST land first (it writes wfbe_teamtype at founding) — both hctopup-wire-consumer-on-owning-hc (the refill consumer routed via SendToClient to the OWNING HC, not a broadcast RequestSpecial) and hctopup-same-hc-merge-depleted-pairs depend on that stamp existing to resolve a team's refill pad-class. Shipping the consumer or the merge before the stamp gives every team an unresolved type and the refill/merge silently no-ops. Decide refill-VS-merge before wiring: merge is FPS-DOWN (fewer+bigger groups) and is the preferred lever per the count-discipline mandate; if merge is chosen, the consumer wiring is partly redundant.
- SUPERVISOR WATCHDOG ORDER: aicom-supervisor-heartbeat-stamp must precede aicom-supervisor-watchdog-restart-loop — the restart loop keys on the heartbeat stamp to detect a dead/wedged supervisor; ship the watchdog without the heartbeat and it has no signal and will either never fire or false-restart a healthy brain. aicom-worker-call-guard-noheartbeat-on-error is defence-in-depth and can ship independently, but ideally with the heartbeat so a guarded worker error still updates the stamp.
- GARRISON SPLIT BEFORE PRESS-GATE TUNING: territory-credited-press-gate (keep the dominant side attacking) changes posture math that the same strength model feeds; it should be validated AFTER stall-telemetry-add-garrison-bodies is in and read, otherwise you tune the press gate against a strength number that still double-counts garrison bodies as maneuver strength — you will over- or under-press. Land the telemetry, observe one soak, then tune the gate.
- MHQ RE-DRIVE vs RELOCATION-FLOOR interaction: mhq-redrive-unstuck-nudge (re-issue doMove every tick + unstuck nudge), mhq-min-advance-floor (require net forward gain before paying mobilize/deploy), mhq-final-deploy-clearance-revalidate (re-check hostile-ring + friendly-spacing), and mhq-route-contact-deescalate touch the same relocation lifecycle and the same wfbe_hqinuse lock that construction-hqsite-lock-timeout / hqsite-lock-timeout bound. The two lock-timeout keys are DUPLICATES — pick one. Ship the lock-timeout WITH the re-drive nudge: a more-aggressive per-tick re-drive increases lock contention on Construction_HQSite, so the unbounded-wait fix is a prerequisite, not optional, to avoid a new deadlock.
- RELIEF TRIAGE KEYS ARE OVERLAPPING DUPLICATES that must be consolidated to avoid contradictory edits to the relief picker: relief-reliever-strength-gate, relief-eta-mounted-reach, relief-strength-and-scaling, relief-multi-town-scale, relief-triage-by-value-and-multi, relief-eta-and-strength-and-scale, and relief-prioritize-human-held-towns all rewrite the same nearest-team selection. Merge into one ETA+strength+value+multi-town+human-bias picker before coding; shipping them as separate edits will thrash the same function.
- CONCENTRATION CHOREOGRAPHY DEPENDS ON THE CAPTURE-PHASE INTERRUPT: concentration-arrival-arc-by-lanejit, armor-screen-while-infantry-captures, and rally-break-off-depot-hold-attrition-trigger all modify behavior INSIDE the depot-hold capture loop — they require capture-phase-seq-interrupt (honor fresh order seq + disband flag to break the camp/depot while-loops) to land FIRST, otherwise the loop is still blocking and the new arc/screen/rally behaviors can't be re-tasked in mid-hold. Also reconcile with camp-plant-dostop-proximity-rewake so the never-frozen-AI guardrail isn't violated by the new hold behavior.
- GARRISON-RELEASE LEVER (root of the 'dominant-but-passive' stall) is still only INSTRUMENTED, not FIXED: deepKept has stall-telemetry-add-garrison-bodies (measure) and territory-credited-press-gate (keep attacking) and the enstr-symmetry fix (broadKept), but there is still NO candidate that actually CAPS a town garrison or RELEASES garrison bodies back into the maneuver _myStr pool. The highest-severity strategy root is measured and posture-nudged but the mechanism that miscounts garrisons as maneuver strength is untouched. harvestTop corroborates via 'Town static-defense HC manning is guerilla/resistance-only; occupied W/E town statics never HC-manned' and 'commander-buildable defense positions branch-only'.
- HC DELEGATION FAILOVER (the entire Headless-Client wiki cluster) is unrepresented in either kept set, yet it is the dominant unattended-soak robustness surface: Mode-2 HC delegation has no per-function server fallback (groups silently skipped on HC drop), DR-21 (HC disconnect orphans its AI, no re-registration watchdog), DR-42 (HC-created statics invisible to the server, no accounting/cleanup), the racy fixed sleep-20 registration handshake with no ack, and unbounded delegated-group cleanup polls. Since CMDRSTAT shows 100% of live teams are HC-founded, an HC drop mid-round is the single most likely real-world AICOM failure and the supervisor-watchdog candidates (which guard the per-side supervisor loop) do NOT cover delegation/HC-pool recovery.
- DORMANT/UNCALLED SCHEDULERS surfaced by harvest are not in scope and may invalidate assumptions: AICOM upgrade scheduler has no caller/cadence, AIBuyUnit (unit-production) uncalled, MOVE_INTERVALS movement scheduler orphaned, WFBE_SE_FNC_AI_SetTownAttackPath compiled-but-never-called, AICOM supply-truck FSM permanently broken, and the AICOM upgrade AI_ORDER off-by-one cost-index bug. The fwd-resupply-truck-dispatch-to-spearhead deepKept item reuses the W17 convoy precisely BECAUSE the native supply FSM is dead — but the broken FSM and the uncalled upgrade/production schedulers are left as-is; if any future tech-progression work assumes they run, it will silently no-op.
- TRUE FOG-OF-WAR is still only APPROXIMATED, not modeled: the recon candidates (enstr-contact-recency-decay = HQ-proximity weighting; spearhead-avoid-enemy-concentration = exploit omniscience to flank; relief-trigger-last-seen-fallback) improve targeting but every strategy read STILL pulls ground-truth off the enemy team registry. No belief/confidence-decay store (harvestTop 'Quad AI Commander: log/intel context store with belief + confidence decay' remains unadopted). This is acceptable for B69 (the kept items exploit omniscience smartly) but the fairness/believability direction is still unbuilt.
- COMMANDER HANDOFF / DISCONNECT-TO-AICOM TAKEOVER (harvest Commander-HQ-Lifecycle / Vote cluster) is uncovered: commander disconnect clears the side but does NOT auto-reassign or restart a vote, manual-reassignment call-shape + duplicate-notification (DR-15), vote-menu loops iterate one index past the team array, ATTACK_WAVE_INIT is a forgeable direct-PV channel. On a populated/hybrid server these directly affect whether AICOM cleanly retakes a side — relevant given the locked B67 hybrid-takeover re-tasking decision, and none are in the kept set.
- FIXED-WING AIR and AIR-RECON remain entirely absent — air candidates are all attack-heli (loiter-CAS, intercept, cannon-nudge). No fixed-wing doctrine and no use of air for the recon layer (which would have doubled as the fog-of-war fill). Low priority for B69 but still a whole sub-doctrine at zero.
- HQ-strike finisher: ship the three core fixes (order-contract + town-gate-fraction + vehicle-punch picker) as ONE atomic B69-A patch, or stage order+gate first and add the picker after a soak? The package mis-fires if split, but a single combined patch is harder to bisect if a round-ender regresses. Recommend atomic with a single MISSINIT marker.
- Town-gate fraction value: what fraction of WFBE_C_TOWNS_AMOUNT should arm the strike on the 7-town live config (e.g. >60% owned = strike-eligible)? Needs an explicit threshold you are comfortable with, since this directly controls how often rounds end.
- HC units-bleed: confirm the MERGE path (fewer+bigger, FPS-DOWN) over a refill/top-up. Merge keeps total AI flat-or-down per the hard constraint, but changes team identity mid-round. Acceptable, or do you want refill-to-floor despite the count pressure?
- Supervisor watchdog restart: on a re-Spawn after a wedged supervisor, do we re-adopt existing teams in place (preserve bodies) or accept a brief re-registration gap? Re-adopt is safer for the no-freeze guardrail but more code.
- Garrison-vs-maneuver split is instrument-first this build (stall-telemetry-add-garrison-bodies + territory-credited-press-gate). Are you OK shipping the press-gate territory credit in B69 BEFORE the telemetry has sized the split, or hold the press-gate one build until we have the garrison body-count data?
- Realism cluster (intel-lite / human-awareness / air-CAS / doctrine / logistics / withdrawal): which ONE or TWO marquee items do you want in B69 to make the AI feel qualitatively smarter? Recommend heli-team-loiter-cas-not-depot-park (feeds the HQ-strike punch) plus enstr-contact-recency-decay (cheap fog model, FPS-neutral). The rest park.
- Several harvestTop/wiki items (AICOM upgrade scheduler has no caller, AIBuyUnit uncalled, supply-truck FSM broken, dormant attack-path helper, commander map-order executor unproven) are dormant-code findings from other agents that overlap our logistics/doctrine themes but were NOT in the 3-vote/5-vote verified sets. Do you want a separate scoping pass on those, or treat them as out-of-scope for B69?
- Default posture: harvestTop notes feat/ai-commander flips WFBE_C_AI_COMMANDER_ENABLED default to 1. B69 sharpens AICOM heavily - do you want to keep AICOM opt-in or flip the default on once the finisher is validated?
B69 IS READY for a focused first ship, and is materially MORE complete than the embedded critic block implies — that critic was written against the broad pass and its "no kept candidate" complaints for the four highest-severity items are now STALE: the deep pass closed them. The HC-team units-bleed (4-5-unit dribble vs 8-12 policy) now has a full shipping chain (deepKept hctopup-stamp-teamtype-at-founding → hctopup-wire-consumer-on-owning-hc → hctopup-same-hc-merge-depleted-pairs → hctopup-centralize-missing-constants). The supervisor round-ending SPOF now has aicom-supervisor-heartbeat-stamp + aicom-supervisor-watchdog-restart-loop + aicom-worker-call-guard-noheartbeat-on-error. The "AI is omniscient / no recon" and "air is just slow ground" qualitative gaps both got real candidates (enstr-contact-recency-decay, spearhead-avoid-enemy-concentration, hqstrike-time-to-enemy-away-window; heli-team-loiter-cas-not-depot-park, heli-cas-intercept-enemy-spearhead). Combined-arms, dynamic difficulty, human-combatant awareness, forward logistics, graceful withdrawal and doctrine selection all moved from zero to covered. RECOMMENDED SHAPE: ship B69 as the strategy spine first (the HQ-strike package + relief/MHQ/MP-robustness from broadKept) because it is the verified root cause of the multi-hour AI-vs-AI stalemates and is small/FPS-neutral; then a fast-follow B69.x for the deep behavioral leads (HC-refill-or-merge, supervisor watchdog, recon/air/choreography) which are higher-effort and benefit from in-engine A2-OA smoke. Do NOT block the spine on the deep cluster. The slate is good enough to finish rounds; it is NOT yet a from-scratch-complete AICOM brain, and one more pass is warranted but it can be POST-B69.
A2-OA-safe SQF sketch for every item is on the companion page: AI Commander B69 Implementation Sketches.
Previous: AI commander autonomy audit | Next: AI commander B69 implementation sketches
Main map: Home | AI route: AI runtime/HC loop map | Status: Progress dashboard
Home | Agent Guide | Current live state | Release 1.2.2 (B91) | Quickstart | Progress | Lifecycle wait-chain | Join/disconnect | Parameters/build | Assets/config | SQF atlas | PV index | Modules | Support/specials | Commander/HQ | Commander vote/reassign | Construction/CoIn | Construction cleanup | WDDM compositions | Factory/purchase | Upgrades/research | Towns/camps/capture | Victory/endgame | Markers/cleanup | Server runtime | AI runtime/HC | AI commander audit | HC delegation | Town AI safety | Commander reassignment | Resistance supply | Player UI workflow | UI atlas | Respawn/death | Gear template filter | Vehicle cargo loop | Service guards | UI IDD repair | UI design inspiration | WASP overlay | Feature status | Source propagation | release readiness | Tooling readiness | Integration trust | AntiStack DB | Owner decisions | Shelved registry | Abandoned feature revival | Hardening roadmap | PVF dispatch | Server authority | ICBM authority | Attack-wave authority | Telemetry families | AICOM V2 cutover | Consumer port map | Testing workflow | Server ops | Web tools | Ecosystem repos | Arma 2 OA refs | A2 traps | OA compatibility audit | Coverage ledger | Navigation inventory | Pruning ledger | Knowledge roadmap | Agent context | Collab protocol | Worklog | Audit archive 2026-07 | Briefing reference | Utes invasion concept
- Shelved AICOM concepts - revivable someday ideas (owner-shelved 2026-07-03)
Docs rule: source-backed claims only; Arma 2 OA scripting docs only; gameplay edits start in Missions/[55-2hc]warfarev2_073v48co.chernarus.
- Getting started
- Status and coordination
- Agent context
- Agent collaboration protocol
- Agent worklog
- Agent worklog archive
- Progress dashboard
- PR cleanup and integration lab
- Shelved PR #169: gear price double-count
- Shelved PR #194: Chernarus no-trees
- Coordination board
- Codebase coverage ledger
- Bottleneck removal queue
- Current source status
- Wiki mirror reconciliation
- Navigation inventory
- Registers
- Agent orchestration
- Architecture
- Architecture overview
- Mission entrypoints and lifecycle
- Lifecycle wait chain
- Player join/disconnect and AntiStack lifecycle
- Mission parameters/localization/build inputs
- Stringtable localization key-family catalog
- Source inventory
- Content structure and maps
- Assets/config/localization/parameters
- Mission start parameters index
- Code and networking
- Gameplay systems
- Core systems index
- Gameplay systems atlas
- Commander/HQ lifecycle atlas
- Economy, towns and supply
- Economy system reference
- Balance asymmetries
- Anti-stack skill-balance mechanic
- Empty-side supply income stagnation
- Towns, camps and capture atlas
- Victory and endgame atlas
- Victory conditions reference
- Territorial victory reference
- Marker cleanup and restoration
- Marker loop engine and registries
- Map marker families content catalog
- Marker subsystem function reference
- Client marker FSM updater map
- Support specials and tactical modules
- SCUD TEL tactical munitions
- Naval HVT objectives (carriers/SCUD)
- SCUD saturation strike mechanic
- Takistan airfield FPV drone design
- Construction and CoIn systems
- Structure damage reduction & friendly-fire
- Construction logic list cleanup
- Flak tower & WDDM anchor compositions
- Resistance supply scaffold
- GUER Insurgents faction overview
- GUER Insurgents branch audit
- GUER insurgent player economy
- GUER air-defense loop (Ka-137/Mi-24)
- Upgrades and research atlas
- Supply mission architecture
- Supply mission authority cleanup
- Current supply helicopters PR1
- Respawn and death-loop lifecycle
- Vehicle theft economy pitch
- GUER tunnel network pitch
- Content, reference and catalogs
- Faction unit/vehicle roster catalog
- Auxiliary/SF/civilian unit catalog
- Gear store loadout route catalog
- Upgrade research (cross-faction)
- Gear store price and upgrade catalog
- Gear store catalog (complete, per faction)
- Defense structures catalog
- Artillery reference per faction
- AI squad team templates catalog
- Town AI lifecycle reference
- Town AI group composition catalog
- Class-skill system reference
- Player skill abilities reference
- Default gear template content catalog
- Chernarus map content reference
- Takistan map content reference
- Takistan features
- Takistan parity reference
- Takistan oilfields objective reference
- IRS IR-smoke countermeasure
- Arty module special munitions
- Zeta cargo sling-load reference
- Spawn primitive function reference
- Kill and score pipeline
- Waypoint helper function reference
- Position and proximity function reference
- Side/team state function reference
- Player AI watchdog and recovery
- AICOM stuck-recovery v2
- LoadoutManager data-model contributor guide
- Discord status bot setup and reference
- GLOBALGAMESTATS extension reference
- New player quickstart (player guide)
- Optional client mods (player guide)
- Earning funds and score (player guide)
- Vehicle service and logistics (player guide)
- Commander's handbook (player guide)
- Tactical support menu
- Paradrop player experience
- Supply missions (player guide)
- In-game briefing & Diary field manual
- Playable maps catalog
- Faction root variables reference
- Faction base structures catalog
- Counter-battery radar system
- Bank, Reserve and Artillery Radar structures
- Map ruleset model and object config
- Countermeasures module reference
- Vehicle countermeasure (flares/spoofing)
- UAV terminal and spotter system
- Artillery firing function reference
- Service Point pricing model
- Medic redeployment truck (forward spawn)
- Side-patrol runtime and convoy mechanics
- Day/night cycle and weather system
- Config lookup helper reference
- CIPHER sort utilities reference
- Modded maps status and content
- BattlEye filter setup and OA taxonomy
- Player squad/group join protocol
- AutoFlip vehicle recovery
- Engine stealth fuel toggle
- Valhalla vehicle climbing-assist
- Missile and ordnance Fired-EH reference
- Vehicle equip and rearm reference
- Array and collection utilities
- Server composition spawner reference
- Upgrade queue server loop
- Map boundaries and off-map enforcement
- Namespace/profile/diagnostic utilities
- Group bool getVariable A2-OA trap
- Vehicle weapon balance init
- View distance auto-throttle
- Camp & respawn-camp getters
- Performance audit writer
- Site clearance (bulldozer)
- Factory queue cancel & refund
- AI commander tunable constants
- Experimental feature-flag constants
- Flag system quick reference
- Mission tunable constants catalog
- Gear parsing & cargo capacity
- Structure dressing function
- Paradrop delivery functions
- ICBM nuke client VFX & radiation
- Server HandleSpecial router
- LocalizeMessage chat router
- Gear buy-menu render & price functions
- Server broadcast & telemetry loops
- Per-unit client init pipeline
- Vehicle marking & texture pipeline
- Defense category & budget
- Legacy AI order primitives
- Commander-team driver
- AICOM command verbs
- AICOM behavior fix taxonomy
- AI commander wildcard deck reference
- AICOM aircraft and airfield system
- Static-defense manning
- End-of-game stats screen
- AI commander execution loop
- Deployable bipod / weapon resting
- Town-economy getters
- Server-init deadspawn & airfield probe
- GUER VBIED detonate action
- Resource income-tick engine
- AI commander treasury accessors
- PVF send-helper contracts
- AICOM logging & AICOMSTAT telemetry
- AICOMSTAT v2 event census
- WASPSCALE v2 telemetry
- WASPSCALE v2-ext coverage audit
- Telemetry families reference
- Group lifecycle & entity reaping
- Batch AI spawner orchestrator
- Client funds/income HUD readout
- Server group GC & cap warning
- Town runtime tuning constants
- Client input/hotkey handler
- WASP base-repair system
- WASP DropRPG launcher/ordnance
- CoIn construction-interface client engine
- Town-capture garrison & airfield rebuild
- Map-control & minimap templates
- Client FPS & state telemetry
- Client service-proximity getters
- Airfield-exclusive roster & unit hints
- Unit-camera spectator system
- Town-garrison patrol/defense worker
- RequestTeamUpdate squad-discipline
- Arma2Warfare GPT assistant
- LoadoutManager build configs & defines
- GLOBALGAMESTATS extension logging
- Discord bot instrumented logging
- Eden/Everon & Taviana map content
- Cruise missile strike asset
- AI / HC
- AI headless and performance
- AI mods and pathfinding reference
- Headless client scaling and topology
- AI runtime/HC loop map
- Headless client init and stat loop
- HC delegation target selection
- Player AI caps and role balance
- Old WarfareBE FPS comparison
- AI commander autonomy audit
- Upstream BE 2073 AICOM delta
- Parent 2.073 divergence audit
- AI commander capture & fun plan
- AI commander B69 improvement roadmap
- AI commander B69 implementation sketches
- AICOM V2 cutover status
- Headless delegation and failover
- Commander reassignment call shape
- GUER Director living-resistance pitch
- Quality and operations
- Foundation perf findings & Tier-3 dead-ends
- Dead/stale code register
- Commander vote/reassignment
- Attack-wave authority
- Server runtime and operations
- Server ops runbook
- JIP enrollment & client data delivery (b74.2 lessons)
- Server gameplay runtime atlas
- PerformanceAuditAnalyzer
- Performance opportunity sweep
- Documentation plan
- Knowledge platform roadmap
- Wiki quality audit
- Wiki pruning and relevance ledger
- Audit findings queue (2026-06-03)
- Deep review findings
- Client UI / server-loop perf findings
- Performance gain simulation
- Self-host testing field notes
- Cleanup and work lanes
- Hardening and authority
- UI / player workflows
- Client UI, HUD and menus
- UI HUD and dialogs
- Player UI workflow map
- Client UI systems atlas
- UI IDD collision repair
- UI control class library reference
- UI theme palette and style macros
- UI design inspiration 2026-07
- Available-actions client gate FSM
- Gear/loadout/EASA atlas
- Gear template profile filter
- Vehicle cargo equip loop bounds
- Factory and purchase systems atlas
- Service menu affordability guards
- WASP overlay
- Class-skill system reference
- Skin selector and class swap
- Earplugs audio toggle
- Mission audio catalog
- HQ radio knowledge-base catalog
- QoL trio player hints
- Player vehicle/travel actions
- Tooling / release / integrations
- Tools and build workflow
- Warfare web tools
- Ecosystem & companion repos
- Zargabad tooling parity
- July 2026 release readiness
- Operator monitor and CPU affinity tools
- Tooling release readiness audit
- Source fix propagation queue
- Agent release readiness ledger
- Release source intake map
- Testing/debugging/release workflow
- Current RPT release gate
- RPT telemetry consumer port map
- External integrations
- Integration trust boundary audit
- AntiStack database extension audit
- Community & Dev
- Community & Dev
- Miksuu upstream wiki import / archive index
- Upstream changelog feature leads
- Developer history and upstream lessons
- Upstream Miksuu commit intel
- Upstream mining ledger
- Archive script mining v2
- Upstream BE 2073 AICOM delta
- Parent 2.073 divergence audit
- PR8 and Drone upstream lesson match
- Development lessons learned
- External research reports
- Audit archive 2026-07
- Briefing reference
- Utes invasion concept
- Miksuu archive: Home
- Miksuu archive: Welcome
- Miksuu archive: Big announcements
- Miksuu archive: Changelog
- Miksuu archive: Development process
- Miksuu archive: Discord bot
- Miksuu archive: Gameplay videos
- Miksuu archive: LoadoutManager
- Miksuu archive: Chernarus script architecture
- Base-game visual catalogs
- Compatibility and references
- HC upstream history and lessons
- Player stats branch audit
- BuyMenu EASA QoL branch audit
- Perf quick wins branch audit
- Commander positions branch audit
- Zargabad branch audit
- Quad AI Commander concept
- Arma 2 OA external reference guide
- Base-game config & image reference
- Arma 2 OA compatibility audit
- Arma 2 OA agent traps reference
- Arma 2 OA command versions
- Wiki source consistency
- External Arma 2 OA reference index