Skip to content

Testing Debugging And Release Workflow

rayswaynl edited this page Jun 3, 2026 · 218 revisions

Testing Debugging And Release Workflow

Practical validation model for ongoing Arma 2 Operation Arrowhead 1.64 mission development.

This repo cannot lean on a modern SQF unit-test suite. The safe workflow is a mix of source checks, local tooling checks, RPT-driven smoke tests and careful release gates. Every future change should record what was actually verified, not just what was source-reviewed.

Scope: gameplay edits start in Missions/[55-2hc]warfarev2_073v48co.chernarus; generated mission behavior is handled through Tools/LoadoutManager unless a skip-list file needs hand mirroring.

Machine schema for test evidence: agent-test-plan.schema.json.

Test Levels

Level Use when Evidence to record
source-only Static defects: missing files, commented compiles, compile registries, PV channel maps, IDD conflicts, generated drift. Exact paths, line refs, search command or script, and whether the issue is confirmed or only a lead.
local-tool LoadoutManager generation, PerformanceAuditAnalyzer parsing, DiscordBot/Extension build or config shape. Command, cwd, exit code, generated files or expected non-blocking failure such as missing 7za.
hosted-smoke Locality-sensitive behavior where hosted server also runs client code. Scenario, mission params, RPT snippets, observed player/server behavior.
dedicated-smoke Server-authority, PV/PVF, economy, town AI, cleanup loops, BattlEye-sensitive behavior. Dedicated server RPT, client RPT if available, result and regressions checked.
jip-smoke Any state that late joiners must see: towns, markers, HQ, commander, supply cooldowns, MASH, endgame. Join timing, expected replicated variables/events, client observations after join.
hc-smoke AI delegation, town AI, static defenses and HC registration. HC connection timing, connected-hc handling, delegated units, server FPS/load effect.
live-server-sensitive BattlEye, AntiStack DB, public server economy authority, Discord token/data paths, extensions. Owner approval, backup/rollback path, exact server config, and redacted logs only.

System Test Matrix

System Source paths Minimum validation Notes
Boot/lifecycle description.ext, initJIPCompatible.sqf, Common/Init/*, Server/Init/Init_Server.sqf, Client/Init/Init_Client.sqf, Headless/Init/Init_HC.sqf, mission.sqm source-only, then hosted or dedicated boot smoke for reordered init. Check version.sqf, WFBE_Parameters_Ready, commonInitComplete, townInit, serverInitFull, clientInitComplete. mission.sqm town object init is part of runtime.
PV/PVF networking Common/Init/Init_PublicVariables.sqf, Server/Functions/Server_HandlePVF.sqf, Client/Functions/Client_HandlePVF.sqf, Server/PVFunctions/*, Client/PVFunctions/* source-only for registry, dedicated smoke for changed handlers, JIP smoke for stateful effects. PVF dispatch hardening must test one server-bound and one client-bound message. Direct PV channels are outside the PVF list.
Economy authority Client/GUI/GUI_Menu_BuyUnits.sqf, Client/Functions/Client_BuildUnit.sqf, Server/PVFunctions/RequestStructure.sqf, Server/Functions/Server_ProcessUpgrade.sqf, Server/PVFunctions/RequestUpgrade.sqf, gear/EASA GUI files source-only, then dedicated smoke for each migrated spend path. Record whether the server or client owns final funds/effect. Client menu checks are not authority.
Towns and town AI mission.sqm, Common/Init/Init_Town*.sqf, Server/FSM/server_town.sqf, Server/FSM/server_town_camp.sqf, Server/FSM/server_town_ai.sqf, Common/Functions/Common_CreateTownUnits.sqf Dedicated smoke; JIP smoke for town state; HC smoke when delegation is enabled. Use Towns/camps/capture atlas. For Town AI vehicle safety, test occupied and empty vehicle despawn cases.
Commander and HQ lifecycle Commander/HQ lifecycle, Server_VoteForCommander.sqf, RequestNewCommander.sqf, Construction_HQSite.sqf, Server_OnHQKilled.sqf, Server_MHQRepair.sqf, Client/FSM/updateclient.sqf Dedicated plus JIP smoke for commander handoff, deploy/mobilize, HQ death, wreck marker visibility and repair. Include hosted/locality smoke for mobile-HQ killed EH forwarding and one-message commander reassignment after DR-15 repair.
Construction and CoIn Client/Module/CoIn/coin_interface.sqf, Server/PVFunctions/RequestStructure.sqf, Server/PVFunctions/RequestDefense.sqf, Server/Functions/Server_Build* Dedicated smoke for accepted/rejected builds. Validate commander/repair authority, funds, base area, dead HQ and side ownership server-side after hardening.
Factories and purchases Client/GUI/GUI_Menu_BuyUnits.sqf, Client/Functions/Client_BuildUnit.sqf, Server/Functions/Server_BuyUnit.sqf Hosted and dedicated smoke for spawn markers, queues and empty-vehicle cases. DR-33 queue leak needs repeated empty-vehicle buy attempts to prove decrement behavior.
Upgrades Live path: WFBE_UpgradeMenu / Client/GUI/GUI_UpgradeMenu.sqf; stale path: RscMenu_Upgrade / missing Client/GUI/GUI_Menu_Upgrade.sqf; server path: Server/PVFunctions/RequestUpgrade.sqf, Server/Functions/Server_ProcessUpgrade.sqf Dedicated smoke for valid upgrade, invalid id, insufficient funds, wrong-side/role. Server must recompute level, dependency and cost after hardening. Do not revive the stale dialog class without replacing its missing onLoad target.
Supply missions Client/Module/supplyMission/*, Server/Module/supplyMission/*, Server/Init/Init_Server.sqf, Server/Functions/Server_OnPlayerDisconnected.sqf Dedicated smoke, JIP cooldown smoke, reconnect/disconnect player-list smoke, PR #1 vehicle reuse/destruction smoke when relevant. Keep the pull-based cooldown model; fix dead twin/casing/player-list/trust issues before expanding heli behavior.
Respawn and MASH Respawn/death lifecycle, Client/GUI/GUI_RespawnMenu.sqf, Client/Functions/*Respawn*, Server/AI/AI_*Respawn*.sqf, Server/Module/MASH/*, Client/Init/Init_Client.sqf Player death/menu/gear smoke, branch-specific AI respawn smoke, source-only for dead marker path; JIP smoke if markers are revived. AI respawn has a vanilla polling branch and a non-vanilla MPRespawn branch; smoke both when respawn/orders change. Current MASH marker chain is dead/orphaned; local MASH respawn and mode-5 custom-gear penalty need separate smoke.
Supports and specials Client/Module/Nuke/*, Server/Functions/Server_HandleSpecial.sqf, Server/Support/*, attack-wave files Dedicated smoke for authority-sensitive actions; live-server-sensitive for ICBM and BattlEye. ICBM and attack waves are high-risk because forged PV payloads can create server-side effects.
Tactical modules Common/Module/*, Client/Module/*, Server/Module/*, Client/Functions/Client_BuildUnit.sqf, Client/Init/Init_Client.sqf, Common/Init/Init_Common.sqf Match the smoke to the runtime edge: boot init, respawn reapply, unit creation attach, PV/PVF event or server loop. IRS/CM/Engines attach to vehicles as they are built, Skill reapplies after player setup/respawn, ICBM/IRS/CIPHER initialize from Common init, and some stale modules have no live edge.
AI and HC delegation Headless/Init/Init_HC.sqf, Client/Functions/Client_Delegate*.sqf, Common/Functions/Common_Delegate*.sqf, Server/Functions/Server_OnPlayerDisconnected.sqf HC smoke for delegation and reconnect/disconnect behavior. Init_HC.sqf uses sleep 20, not waitUntil {serverInitFull}.
UI/HUD/dialogs Rsc/*.hpp, Client/GUI/*, Client/Init/Init_Client.sqf, Client/Module/RHUD/* Source-only for IDD/resource conflicts; hosted smoke for display open/close and long text. Duplicate IDDs exist; use display handles and avoid assuming IDD uniqueness.
WASP overlay WASP/*, Client/Init/Init_Client.sqf, initJIPCompatible.sqf commented WASP block Hosted/JIP smoke for per-client actions; source-only for dead old init path. Live WASP features are wired from client init, not the old commented WASP/Init_Client.sqf block.
Tooling and generated missions Tools/LoadoutManager/*, Tools/PerformanceAuditAnalyzer/*, Missions_Vanilla/*, Modded_Missions/* local-tool, source-only drift checks. Run LoadoutManager from an ancestor folder named a2waspwarfare or any repo root containing Missions, Missions_Vanilla and Tools/LoadoutManager/LoadoutManager.csproj. Use A2WASP_SKIP_ZIP=1 for propagation-only runs; 7za is only required for deployment packaging.
Integrations Extension/*, DiscordBot/*, BattlEyeFilter/*, Server/Module/AntiStack/* source-only, local build/config checks, live-server-sensitive for production. Do not expose secrets. Distinguish in-repo GLOBALGAMESTATS extension from out-of-repo AntiStack DB DLL.

Static Analysis Checklist

Run these before any major gameplay patch and after large generated changes:

Check What it catches
Compile/preprocess registry scan Commented or missing functions in Init_Common.sqf, Init_Server.sqf, Init_Client.sqf, Init_PublicVariables.sqf.
Missing file scan Dead execVM, preprocessFile, #include and dialog onLoad references.
PV channel inventory New direct publicVariable, publicVariableServer, addPublicVariableEventHandler channels not covered by PVF docs.
Client-authority scan New client-side createVehicle, createUnit, setDammage, ChangePlayerFunds, side supply or upgrade mutations.
JIP replay scan New transient PV events that should have replicated object variables or pull-based state requests.
IDD/resource scan Duplicate display/title IDDs and missing Rsc class references.
Generated drift scan Chernarus versus Takistan outside the LoadoutManager skip-list; modded missions are separate forks/stubs.
Extension trust scan callExtension return handling, call compile, serialization settings and missing DLL/config assumptions; route through Integration trust boundary audit and AntiStack database extension audit for AntiStack-specific DB wrappers.

RPT Logging Conventions

Use the existing logging helper instead of ad hoc hint debugging:

Log type Use
WFBE_CO_FNC_LogContent with INFORMATION Successful state transitions testers need to confirm in RPT, such as accepted high-value server transactions.
WFBE_CO_FNC_LogContent with WARNING Rejected malformed/unauthorized network payloads, missing generated files or degraded but recoverable state.
WF_Debug-gated detail logs Noisy values: prices, side IDs, object refs, queue ids, player occupancy decisions, PV payload summaries.
Performance audit records Long-running loops or known hot paths such as town AI, supply mission tracking and UI/map loops.

Do not add constant always-on logs inside hot loops. For tester-visible changes, one small always-on line at the transition point is better than frame-by-frame tracing.

Minimal Smoke Packs

Pack Steps
Boot and JIP Start hosted or dedicated mission, verify no init hang, join a second client after time > 30, confirm town markers, HQ state, commander/vote state and spawn location.
Commander/HQ Vote or assign commander, deploy HQ, mobilize HQ, destroy deployed HQ, destroy mobile HQ, join late as allied/enemy client, repair MHQ, confirm build action, lock actions, local allied wreck marker and no enemy wreck marker.
PVF dispatcher hardening Trigger one server request such as RequestJoin or RequestVehicleLock; trigger one client message such as LocalizeMessage; confirm rejected bogus handler logs once and does not execute.
Town AI vehicle despawn Wake a town, board a town-AI vehicle as passenger/gunner, force inactivity or lower WFBE_C_TOWNS_UNITS_INACTIVE, confirm occupied vehicle survives and empty AI-only vehicles despawn.
Factory queue Buy repeated empty/crewless vehicles from the relevant factory, confirm local queue count decrements and future buys are not soft-locked.
AI respawn branch split Run one vanilla profile where WF_A2_Vanilla compiles AISquadRespawn and one non-vanilla/OA profile where AIAdvancedRespawn is attached through AI_AddMultiplayerRespawnEH.sqf. In both runs, kill a non-player team leader, wait WFBE_C_RESPAWN_DELAY, and confirm loadout reapply, camp/mobile/base fallback, forced-respawn reset and non-autonomous move-mode reset. Source refs: Server/Init/Init_Server.sqf:10-12; Server/AI/AI_AddMultiplayerRespawnEH.sqf:1; Server/AI/AI_AdvancedRespawn.sqf:55-125; Server/AI/AI_SquadRespawn.sqf:14-21,53-110; Client/GUI/GUI_Menu_Command.sqf:356,439-442.
Supply mission Start a truck mission, complete it once, repeat after cooldown, JIP during cooldown query, disconnect/reconnect same UID and verify WFBE_SE_PLAYERLIST replacement/no stale completion, tamper or stale SupplyFromTown / SupplyAmount and confirm server validation after hardening, destroy tracked vehicle once if PR #1 interdiction logic is in scope.
Victory/endgame Use Victory/endgame atlas. Simulate HQ/factory elimination and all-town capture paths, confirm one winner, one endgame broadcast and one stats log.
LoadoutManager From the repo root or Tools/LoadoutManager, optionally set A2WASP_SKIP_ZIP=1, then run dotnet run; inspect generated EASA/balance outputs, Takistan copy, version.sqf, and whether packaging was skipped or failed only because 7za is missing.

Propagated Fix Smoke Pack

These checks cover the 2026-06-02 source fixes that have been propagated from Chernarus source to maintained Vanilla Takistan. They are planned gates, not completed runtime evidence, until an Arma 2 OA hosted/dedicated run records RPT snippets and observations.

Fix Coverage Setup Steps Expected evidence Failure signals
Paratrooper marker revival dedicated-smoke, client PVF Dedicated or hosted run with a commander/player able to trigger tactical paratroopers. Trigger paratrooper support from a client, observe the requesting client during drop creation and after units eject. Client receives HandleParatrooperMarkerCreation, marker appears for the requesting player flow, and RPT has no missing/unregistered WFBE_PVF_HandleParatrooperMarkerCreation error. Source refs: Common/Init/Init_PublicVariables.sqf, Server/Support/Support_Paratroopers.sqf. Drop works but marker never appears; undefined variable/function or rejected PVF handler in client RPT.
Client skill init idempotency hosted-smoke, respawn smoke Hosted or dedicated with one Soldier-class player and one non-Soldier class if available. Join, inspect AI/team cap behavior, respawn, and confirm skill effects still apply after respawn. Skill_Init.sqf effects are initialized once before WFBE_SK_FNC_Apply; Soldier cap is not boosted twice, non-Soldier keeps configured cap, respawn still reapplies skill effects. Source refs: Client/Init/Init_Client.sqf, Client/Module/Skill/Skill_Init.sqf, Client/Module/Skill/Skill_Apply.sqf. Repeated cap inflation, lost skill action after respawn, or undefined skill globals after client init.
Hosted server FPS loop sleep dedicated-smoke, hosted-smoke One dedicated run and one hosted/listen run with RPT/perf observation. On dedicated, wait at least two publish intervals; on hosted/listen, confirm server FPS scripts exit rather than running forever. Dedicated still publishes SERVER_FPS_GUI / WFBE_VAR_SERVER_FPS roughly every 8 seconds; hosted/listen run has no busy FPS publisher loop. Source refs: Server/GUI/serverFpsGUI.sqf, Server/Module/serverFPS/monitorServerFPS.sqf. Dedicated no longer publishes FPS; hosted/listen RPT or profiler shows repeated FPS loop work.
Supply mission scan narrowing dedicated-smoke, optional PR #1 heli smoke Dedicated run with a supply truck, real command center terminal and unrelated nearby objects. Start supply mission, drive loaded vehicle to command center, repeat near unrelated objects inside 80m, and recheck cooldown after completion. Delivery completes near a real Base_WarfareBUAVterminal command center, does not complete near unrelated objects, and pull-based cooldown behavior is unchanged. Source refs: Server/Module/supplyMission/supplyMissionStarted.sqf, Common/Config/*/Config_Structures.sqf. No completion at command center; completion near unrelated objects; new cooldown/JIP regression.
Supply player-object list indexing dedicated-smoke, jip-smoke, reconnect smoke Dedicated run with at least one reconnecting player/client UID and an active supply completion. Join, start or observe supply flow, disconnect/reconnect the same UID, complete supply near the vehicle/player, inspect server behavior. Reconnecting UID replaces its own WFBE_SE_PLAYERLIST row rather than row 0; supply completion resolves the correct nearby real player object. Source refs: Server/Module/supplyMission/playerObjectsList.sqf, Server/Module/supplyMission/supplyMissionStarted.sqf. Row 0 overwrite symptoms, stale player object used for reward/completion, or reconnect prevents nearby player detection. Disconnect pruning is still a separate open cleanup.

Branch-Only Feature Smoke Pack

These are planned gates for branch features, not completed test evidence. Use them after choosing a target branch and before describing a branch-only feature as stable, merged or release-ready. Machine-readable promotion gates live in agent-release-readiness.json under branchOnlyFeaturePromotionGates.

Branch feature Coverage Setup Steps Expected evidence Failure signals
origin/feat/ai-commander head 4dba060e dedicated-smoke, jip-smoke, optional hc-smoke Dedicated run from the branch with WFBE_C_AI_COMMANDER_ENABLED = 1; run once with no human commander and once after a human commander takes/leaves command. If promotion target includes Vanilla, repeat in maintained Vanilla after propagation. Start both sides if possible; observe supervisor logs, town assignment, team type assignment, production, upgrades, explicit order execution, human-commander assist/no-spend behavior, commander handoff/revote, HQ death stop state and a late-joining client. RPT shows AI commander full/assist/stopped transitions from AI_Commander.sqf; no-human mode spends only AI commander funds/supply and produces within cap; human assist executes explicit orders without economy spend; maintained Vanilla has equivalent compile/start wiring if claimed. Source refs: Rsc/Parameters.hpp:96, Server/Init/Init_Server.sqf:49-54,387-389,630-631, Server/AI/Commander/AI_Commander.sqf:29-81. Default-on surprises admins, production exceeds cap, AI spends under a human commander, explicit orders do not execute, commander handoff leaves stale orders/running flag, HQ death keeps commander loops active, JIP sees inconsistent commander/team state, or Vanilla lacks branch files.
origin/feat/drone-saturation-strike head 8ca4be90 dedicated-smoke, jip-smoke, live-server-sensitive if public Dedicated run from the branch with drone support enabled, commander/funds/upgrade states set to accepted and rejected cases, and one late-joining client during cooldown. Trigger valid DroneStrike, insufficient-funds/wrong-upgrade/wrong-role attempts after authority hardening, rapid repeated calls, target over water and non-water, AA shootdown, no-target timeout and JIP during cooldown. Server owns acceptance, debit, cooldown, upgrade, caller/team/side and map validation before spawning; active cap increments/decrements once; funds debit only after server accept; cooldown/JIP state is visible; cleanup leaves no leaked drone groups/vehicles; generated Vanilla scope is explicit. Source refs: Common/Init/Init_CommonConstants.sqf:243-263, Server/Support/Support_DroneStrike.sqf:1-14,16-18,46-52, Tactical menu DroneStrike / ChangePlayerFunds / RequestSpecial. Client can self-debit then get server-rejected, forged request bypasses funds/upgrade/role/side, active cap sticks, repeated calls spawn extra packages, drones reveal/score wrong side, cooldown missing for JIP, cleanup leaks groups/vehicles, or Vanilla misses support registration/assets.
origin/feat/recon-uav head 563418ea dedicated-smoke, jip-smoke Dedicated run from the branch; run once with old UAV expectations disabled/removed and once with one active recon UAV per side. Include HQ loss and recall/destruction paths. Open Tactical menu, deploy ReconUAV, verify old Client/Module/UAV/uav*.sqf UI paths are not still callable, observe AI orbit/reveal, recall it, destroy it, lose HQ while active, and JIP while it is orbiting. ReconUAV/ReconUAVRecall route through Server_HandleSpecial.sqf; one server AI-flown drone per side is tracked; reveal audience stays friendly-side only; recall/destruction frees the active slot and clears WFBE_RECON_UAV_<side>; old UAV module removal does not leave broken menu actions; generated Vanilla scope is explicit. Source refs: Server/Functions/Server_HandleSpecial.sqf:63-82, Server/Support/Support_ReconUAV.sqf:1-22,83-102,119-132,140-151, deleted old Client/Module/UAV/uav*.sqf and Server/Support/Support_UAV.sqf. Old UAV menu/action still points to deleted scripts, reveal leaks to wrong side/enemies, recall deletes without freeing cap, destroyed UAV leaves active slot stuck, JIP clients see stale/no state, HQ-loss cleanup fails, or branch is merged without reconciling latest DroneStrike tuning from 8ca4be90.
origin/feat/wf-menu-ops-console head 0767c0b5 client-visual-smoke, packed-mission-smoke, vanilla-parity-smoke Client run from the branch in Chernarus and maintained Vanilla. Use packed mission/PBO if possible because the branch adds a new texture path. Static preflight should include git diff --check origin/master..origin/feat/wf-menu-ops-console and cleanup of the current trailing-whitespace hits in docs/superpowers/plans/2026-06-03-wf-menu-ops-console.md:78,179. Open WF_Menu, Buy Units, Buy Gear, Upgrade, Tactical, Help, RHUD and FPS HUD. Toggle HUD/FPS HUD, inspect the chevron/footer, hover/focus buttons, listbox selection, structured-text panels and small numeric readouts. Repeat enough in Vanilla to prove mirrored resources load. brand_chevron.jpg renders from Client\images\brand_chevron.jpg; PuristaBold and EtelkaMonospacePro resolve or acceptable fallbacks are chosen; orange/bone/gunmetal contrast is readable; no missing texture/font RPT errors; no dialog overlap/regression in menu routing; Chernarus and Vanilla carry the same intended theme. Source refs: Rsc/Styles.hpp:10-40, Rsc/Ressources.hpp:117-131,274-277, Rsc/Dialogs.hpp:1057-1064,1173-1179,1240-1249, Rsc/Titles.hpp:178-179. Missing texture due path/case/PBO issue, unavailable font, unreadable contrast, clipped WF_Menu title/footer/chevron, broken hover/focus state, RHUD numeric regression, stale blue/orange mix in structured text, or Chernarus/Vanilla divergence.
origin/feat/buymenu-easa-qol head a66d4691 client-ui-smoke, optional vanilla-parity-smoke Client run from the branch in Chernarus; repeat in maintained Vanilla only if the branch is propagated. Static preflight: git diff --check origin/master..origin/feat/buymenu-easa-qol is clean. Open Buy Units with low funds, exact funds and normal funds; inspect infantry, crewless vehicle and full-crew vehicle rows; toggle crew slots/lock state; watch factory tabs while queue counts change; then open EASA on an aircraft with a known visible loadout, a filtered current loadout and no saved setup. Unaffordable displayed base prices tint red without confusing final full/crew cost; idc 12034 ends with the expected final price after the later write; factory-tab queue labels update without per-tick flicker or label loss; EASA current loadout is green/selected when visible and falls back cleanly when hidden/unset. Source refs and caveats: BuyMenu EASA QoL branch audit. Wrong affordability color, price/crew confusion, stale queue count, UI churn/flicker, final price overwritten unexpectedly, EASA selects the wrong loadout, or Vanilla misses the branch behavior after propagation is claimed.
origin/feat/player-stats head e01e47e1 integration-smoke, discordbot-test, privacy-review Build/run DiscordBot tests from the branch, configure a throwaway RPT path and run with WFBE_C_STATS_ENABLED both false and true. Do not enable on a public server until UID/privacy and log volume decisions are explicit. With stats disabled, generate kills and confirm no stat emission. With stats enabled, generate kill/PvP events, flush through RPT, let DiscordBot tail/parse and inspect stats.json. Restart and confirm tail state prevents duplicate accumulation; rotate/replace the RPT and confirm only new-session lines are read. Disabled mode is silent; enabled mode writes predictable stat deltas; StatsService tails RPT into lifetime totals; stats.json writes are stable across restarts; tests covering parser/accumulator/document/pipeline pass. Static branch validation: dotnet test DiscordBot.Tests\DiscordBot.Tests.csproj passed 13/13 locally. Source refs and gate details: Player stats branch audit. Stats emitted while disabled, duplicate accumulation after restart, malformed RPT parsing, unsafe file overwrite, excessive log spam, UID/privacy surprises, silent data loss on corrupt stats.json, or DiscordBot can no longer start without stats config.
origin/perf/quick-wins head 0076040f dedicated-smoke, regression-smoke, vanilla-parity-smoke Source-check each fix against the documented DR/playbook it claims to close, then either cherry-pick or merge intentionally. Run LoadoutManager/hand propagation before any Vanilla claim. Static preflight: git diff --check origin/master..origin/perf/quick-wins is clean, but branch grep shows no maintained Vanilla propagation. Exercise side-supply positive and negative changes, buy crewless and crewed units until queue limits would be hit, trigger paratrooper support marker creation, let mines/dead-object/resource loops run under RPT watch, repair/destroy camp bunkers, check kill-assist bounty, and touch WASP HQ repair/base view/RPG base-protection actions. Debits never become credits; crewless purchases decrement unitQueu / WFBE_C_QUEUE_*; paratrooper marker PV is registered; mine pairs are actually removed; wfbe_trashed objects do not spawn duplicate trash handlers; resource income keeps intended cadence under low FPS; camp-bunker death has no nil-code EH; Vanilla carries the intended same fixes if claimed. Source refs and full branch table: Perf quick wins branch audit. Economy inversion persists, factory soft-locks after crewless buys, paratrooper marker still missing, cleaner/camp/resource loops emit new errors, WASP action paths regress, or branch conflicts with existing docs/source fix propagation.
origin/feat/commander-positions head 560db61c construction-smoke, client-ui-smoke, vanilla-parity-smoke Broad branch from merge base f5985b77; review unrelated Valhalla/UI/HC/perf deltas before treating it as a construction branch. Static preflight must clean current trailing-whitespace hits reported by git diff --check. The new WDDM runtime is source-Chernarus only on branch grep; maintained Vanilla propagation is a decision/gate, not proven behavior. As commander, place each new position/wall anchor at several headings and slopes, undeploy/redeploy HQ, inspect CoIn cleanup, test static manning/artillery registration, and then either propagate and repeat in maintained Vanilla or explicitly record Chernarus-only scope. Composition builds at clicked placement point, not map corner; walls/gates are usable and do not block all pathing; build cost/authority follows accepted construction rules; HQ undeploy cleanup does not leave display/event-handler residue; Vanilla scope matches the owner decision. Source refs and branch caveats: Commander positions branch audit. Composition spawns at [0,0]/map corner, CoIn/HQ cleanup leaves stale handlers, client can forge free positions through DR-6 path, wall pieces trap vehicles/AI, branch whitespace persists, branch baggage regresses UI/Valhalla/HC behavior, or docs claim Vanilla propagation without actual Server_ConstructPosition/template-map code.
origin/feature/zargabad-map head 1fdcb37a hosted-smoke, dedicated-smoke, jip-smoke, hc-smoke, screenshot-evidence Treat as a terrain release candidate. Static validation with Tools\Validate-ZargabadMission.ps1 passed locally in a detached worktree, but git diff --check reports 3542 generated whitespace findings. Runtime evidence should follow Guides/Zargabad-Completion-Gates.md. Boot Zargabad hosted and dedicated, capture RPT and screenshots for bases, town/camp placement, defenses, central wall/rim tests, economy/factory lists, edge-guard behavior, black-market feature and JIP/HC behavior. Validate the runtime report packet if using branch tools. Mission loads as [31-2hc] Zargabad; terrain integration resolves; Init_Zargabad.sqf gates only Zargabad and logs expected anchors; bases/towns/camps/defenses are playable for low-pop; screenshot/RPT evidence proves the completion gates. Source refs and static result: Zargabad branch audit. Missing class/texture/script errors, generated mission drift, unsafe base-to-base suppression, bad camp/town placement, edge/rim false positives, central wall pathing failure, black-market imbalance, JIP/HC failure, or branch judged complete with only static proof.
origin/feat/supply-helicopter head 262dc431 supply-smoke, economy-smoke, vanilla-parity-smoke Current PR #1 page has been refreshed against this head. Static preflight must account for merge base f5985b77, non-supply branch baggage, current whitespace hits and absent maintained Vanilla heli symbols. With supply heli enabled and disabled, test truck supply as control, heli load at Air upgrade 2/3, unload at command center, hover/load/unload timer interruption, Air upgrade 4 cash run, pilot reward, commander tithe, interdiction destruction, same-vehicle reload after completion and JIP during active mission. Trucks still work; heli load is denied before Air 3 and allowed at Air 3; cash run starts at Air 4; timers are cancellable/understandable; SupplyAmount and SupplyFromTown clear on completion; retained SupplyByHeli is either fixed or accepted as harmless; commander/pilot payout matches design; no maintained Vanilla claim unless symbols propagate. Source refs: Rsc/Parameters.hpp:4-10, Init_CommonConstants.sqf:168-180, Skill_Apply.sqf:62-72, supplyMissionStart.sqf:21-29,54, supplyMissionStarted.sqf:7-30,42-60, supplyMissionCompleted.sqf:24-41. Heli works while disabled or before Air 3, timers can be abused, repeated missions stack handlers/state, retained SupplyByHeli corrupts later runs, cash-run mints unintended supply/funds, no-commander case surprises players, Vanilla lacks heli support after release claim, or non-supply branch baggage regresses unrelated systems.

Release Checklist

Gate Requirement
Source state Gameplay edits are in Chernarus source mission; generated targets are propagated or skip-listed files are hand-mirrored deliberately.
Documentation Feature status, hardening roadmap, relevant atlas page and Agent worklog updated.
Machine evidence A test record matching agent-test-plan.schema.json is added or linked from agent files.
Runtime smoke Required hosted/dedicated/JIP/HC smoke packs completed for the changed subsystem.
RPT review No new scheduler, undefined variable, missing file or extension errors in relevant RPT logs.
Tooling LoadoutManager run or explicitly not required; missing 7za handled according to deployment need.
BattlEye/server config Public-server release has reviewed publicvariable.txt, scripts.txt, server config and any production-only filters. Current repo does not ship a complete BE hardening set.
Integrations DiscordBot tokens/configs and extension DLLs are present only in deployment, never committed; DiscordBot JSON intake, in-repo extension writes, AntiStack DB and BattlEye claims are checked against Integration trust boundary audit, with AntiStack runtime/DB validation in AntiStack database extension audit.
Rollback Previous mission PBO/package and server config can be restored.

Agent Test Record Schema

Use agent-test-plan.schema.json for future machine-readable test evidence. The important distinction is coverageLevel: a finding marked source-only is useful, but it is not proof of in-game behavior.

Minimal record example:

{
  "schema": "a2waspwarfare-agent-test-plan-v1",
  "id": "town-ai-vehicle-despawn-smoke-2026-06-02",
  "status": "planned",
  "coverageLevel": ["dedicated-smoke"],
  "subsystems": ["town-ai", "vehicle-cleanup"],
  "sourceRefs": [
    "Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/FSM/server_town_ai.sqf:211-216"
  ],
  "steps": [
    "Wake town AI with a vehicle template.",
    "Put player in cargo or turret.",
    "Force inactivity despawn.",
    "Confirm occupied vehicle survives and empty AI-only vehicles despawn."
  ],
  "evidence": [],
  "result": "not-run"
}

Continue Reading

Previous: Attack-wave authority playbook | Next: Deep-review findings

Main map: Home | Fast path: Quickstart | Agent file: agent-context.json

Sidebar

Clone this wiki locally