Skip to content

Testing Debugging And Release Workflow

rayswaynl edited this page Jun 23, 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, Server/FSM/server_side_patrols.sqf, Common/Functions/Common_RunSidePatrol.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. Also smoke 3D flag texture separately from marker color, Patrols v2 spawn/marker/HC/slot-release behavior, and zero-camp helper behavior in respawn/buy/capture gates.
Commander and HQ lifecycle Commander/HQ lifecycle, Commander vote/reassignment, 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, vote semantics, deploy/mobilize, HQ death, wreck marker visibility and repair. Include player-majority, no-commander-majority, equal-vote, player-candidate tie, vote restart, duplicate-name reassignment UI 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}. Current release head a96fdda2 keeps delegated town-AI group registration and server update-back in both maintained roots (Client_DelegateTownAI.sqf:29-44; Server_HandleSpecial.sqf:86-115), while static-defense HC update-back remains commented (Client_DelegateAIStaticDefence.sqf:27-30). Smoke town AI and static-defense delegation before calling that branch safe.
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 the marker-root shape for the target branch: docs/source accepts Missions, Missions_Vanilla and Tools/LoadoutManager/LoadoutManager.csproj, while current stable/B69/B74/release-shaped refs accept Missions/[55-2hc]warfarev2_073v48co.chernarus, Tools/LoadoutManager and AGENTS.md. Current Miksuu/perf and local feat/supply-helicopter@558fba343 still need the named ancestor. Use A2WASP_SKIP_ZIP=1 for propagation-only runs only on branches that implement it; on local feat/supply-helicopter, missing 7za still throws because zip runs unconditionally.
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.
PR8 static smoke script Historical PR8 helper from release commit 3282ff3f: Tools\SmokeTests\Test-PR8StaticSmoke.ps1 caught A3-only command names, HQ shield template/deploy/cleanup shape, core PR8 PVF registration and Buy Units image-tab text writes. Current release head a96fdda2 no longer contains that helper because d482c742 removed it from the release payload; recover it from git history or an external/local copy if that static preflight is still wanted. This remains Chernarus/static-only preflight, not Arma runtime proof or Vanilla parity proof.
Conflict-marker scan `rg -l "<<<<<<<
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.

Fixup Commit Policy

Adopted 2026-06-12 after a live regression entered through a fixup (night-retro work order, claude-inbox#2 item 6).

Fixup commits get the FULL review treatment, not a lighter one. A "small fixup" on top of a reviewed branch is exactly where reduced scrutiny lets bugs in — the worst bug of the 2026-06-11 night session arrived via a fixup commit.

Rules:

  1. Mandatory Lint-A2Compat on every fixup — run the harness A2-compat lint (Lint-A2Compat, ReusableHarness) over the touched files before pushing, even for one-line changes. A3-only idioms (private _x =, params, apply, pushBack, code-block select) are the single most common fixup regression class; one such fixup killed Common_CreateVehicle (no MHQ, AI commanders stopped) on 2026-06-11.
  2. Full review scope — the reviewer reads the fixup diff with the same checklist as a feature commit: A2 syntax, authority model, nil/null paths, both-variant parity (Chernarus + regenerated Takistan).
  3. No review-exempt fixups — "it only touches a comment/log line" still goes through the diff check; misclassification is cheap to catch and expensive to miss.
  4. Evidence row — record the lint run (command + exit code) in the test-evidence record like any other local-tool check.

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.

Telemetry Collection Checklist

Use this when validating server ops, performance, Discord status or public-server health:

Signal Collect What it proves
Server RPT Dedicated/listen server ArmA2OA.RPT. Server-scope [Performance Audit] rows, server FPS publishers, extension errors, AntiStack wrapper errors and missing-file warnings.
Client RPTs Each tested player's local RPT. Client-scope audit rows such as client_rhud, UI/display errors, JIP marker failures and local script errors.
PerformanceAuditAnalyzer output Run Tools/PerformanceAuditAnalyzer/Analyze-PerformanceAudit.ps1 over the RPT file or folder; see PerformanceAuditAnalyzer. Session-separated CSV/HTML/Markdown reports for hot loops, spikes, FPS context and player/map/session grouping.
database.json The configured DiscordBot data source, usually C:\a2waspwarfare\Data\database.json. GlobalGameStats extension writes current score/map/uptime/player-count data.
DiscordBot logs/status Bot process output plus channel/status update. Bot token/config are present, JSON can be read and the 60-second status update path works.

For player-count validation, run no-HC and multi-HC cases before trusting public Discord counts: GlobalGameStats.sqf subtracts the live headless client count from the WFBE_HEADLESSCLIENTS_ID registry (not a hardcoded 1), flooring at 0 to prevent a negative count when HC connections are transient.

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, include the Commander vote/reassignment smoke matrix, 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.
Commander-built artillery ownership As commander with grouped base areas enabled, build a manned artillery-class defense inside the HQ/base circle from the defense menu, then open Tactical and request a fire mission. Confirm the gun is discovered, ammo loading still targets that gun, direct-fire still works, non-artillery statics remain on the base-area DefenseTeam, unmanned artillery stays unmanned when the CoIn manning toggle is off, and HC-enabled static-defense delegation does not break commander discoverability. For docs/source HEAD@f5bcaf91, the expected shape is a commander-team gunner handoff (Construction_StationaryDefense.sqf:91-94) plus group-based Tactical discovery (Common_GetTeamArtillery.sqf:10-30) and RequestFireMission at GUI_Menu_Tactical.sqf:547. For current stable/B74.1 origin/master@f8a76de34, B69 origin/claude/b69@8d465fce, B74 origin/claude/b74-aicom-spend@b23f557f and historical release a96fdda2 / 7ff18c49, the expected shape is WFBE_CommanderArtillery* marking on non-repair-truck artillery defenses (Construction_StationaryDefense.sqf:166-168 on current stable/B74.1/B69/B74, :133-135 on historical release) plus a commander-team marked-vehicle scan inside HQ/base-area radius (Common_GetTeamArtillery.sqf:46-78); also confirm repair-truck-built artillery is intentionally excluded from that marker path. Repeat the core discovery/fire case on maintained Vanilla Takistan before a release claim.
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/camp lifecycle Capture an independent camp, repair a camp whose bunker is dead, and compare replicated sideID, local camp marker color/text and the 3D flag texture. Capture a town from one side to another while town occupation AI is active and confirm old wfbe_town_teams / wfbe_active_vehicles state does not block the new side from spawning occupation teams; if importing upstream e4be1958, confirm capture_before / capture_cleanup diagnostics and occupied-vehicle safety. For current cf2a6d6a, research Patrols levels 1/2/3, confirm a side patrol spawns, shows friendly-only markers, delegates to HC when available, dies, releases wfbe_side_patrols / WFBE_ACTIVE_PATROLS, and can respawn after cooldown. Test a zero-camp town against capture-mode, threeway defender respawn and depot infantry gating before changing camp-count helpers. Source refs: server_town.sqf:226-257 on the upstream candidate; server_town_camp.sqf:122-138; Server_HandleSpecial.sqf:147-168,215-242; server_side_patrols.sqf:24-58; Common_RunSidePatrol.sqf:53-83; Client/FSM/updatepatrolmarkers.sqf:18-58; Common_GetTotalCamps.sqf:9-12; Common_GetTotalCampsOnSide.sqf:15-22.
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, first verify whether the target branch implements A2WASP_SKIP_ZIP; set it only when supported, 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.
Full-server FPS comparison Use Old WarfareBE performance comparison. Run current Wasp default, current Wasp cap 10, role-aware cap, HC present/absent, matched view-distance and old BE baseline if runnable. Record commit/PBO hash, server.cfg/basic.cfg/profile values, server FPS, three client FPS samples, active towns, total AI split by player followers / AI teams / town groups / static gunners / supports, vehicle counts, HC ownership evidence, RPT errors and PerformanceAudit rows.

Full-Server FPS Opportunity Pack

Use this pack when testing the old-BE/current-Wasp FPS debate or any AI-cap proposal. It is based on C:\Users\Steff\Documents\Codex\2026-06-05\wasp-old-vs-current-fps-investigation\outputs\Old-BE-vs-Current-Wasp-FPS-Opportunity-Audit.md and the final report-only scout at C:\Users\Steff\Documents\Codex\2026-06-05\wasp-old-mission-fps-opportunity-window\outputs\Old-BE-vs-Current-Wasp-FPS-Opportunity-Scout.md.

Record for every run:

  • mission commit or PBO hash, server hardware, Arma 2 OA version, mods, weather/time and route;
  • server.cfg, basic.cfg, profile, launch args, lobby parameters, PBO rollback path and RPT locations;
  • HC present/absent, HC slot/command used, HC owner/delegation evidence, fallback count and whether static-defense HC units report back or remain one-way delegated;
  • view distance, active towns, static gunners, AI teams, player followers, support units, vehicles and empty/stale vehicles;
  • server FPS, at least three client FPS samples, RPT errors, PerformanceAudit rows and the Tools/PerformanceAuditAnalyzer command/result if used.

Old BE is Takistan Lite OA evidence in the cloned reference repo. Use it as a conservative baseline, but keep island, view distance, server config and player-count differences explicit before drawing conclusions.

Scenario matrix:

Player count Current default, no HC Current default, HC Cap pilot, no HC Cap pilot, HC Old BE baseline Purpose
10 Cap 15 Cap 15 + HC proof Normal 12 or 10, Soldier 18/16 Same + HC Old BE default cap 12; optional cap 10 Low-pop feel and classic CTI identity.
15 Cap 15 Cap 15 + HC Normal 10, Soldier 16, commander +5 Same + HC Old BE default/cap 10 First public pilot size.
20 Cap 15 Cap 15 + HC Normal 9/10, Soldier 15/16, commander +5 Same + HC Old BE cap matched where possible Separate player followers from town AI.
25 Cap 15 Cap 15 + HC Normal 8, Soldier 14, commander +4 Same + HC Optional staged old baseline Full-server pressure and town fight load.
30 Cap 15 Cap 15 + HC Normal 7, Soldier 12, commander +3 Same + HC Optional synthetic/staged load Full-server protection proof.

Required variants:

Variant What changes What it proves
AI-source scoreboard Count player followers, AI teams, town occupation, town defenders, static gunners, supports, vehicles and empty/stale vehicles separately. Whether the cap pilot actually reduces the dominant AI bucket or only moves attention away from town/static/server AI.
Matched view distance Current at 1000, 3500 and 6000; old near 1000/4000 where possible. Client render and AI-knowledge sensitivity versus mission entity load.
Low-SV town group branch Current group tables versus old-like low-SV group counts. Whether towns are the next biggest load bucket after player AI.
Static defense stress Activate, capture and deactivate defense-heavy towns, with and without HC. Whether static gunners/statics leak, spike or fail deletion/accounting; specifically check the commented static update-back against town-AI update-back behavior.
Long-session cleanup 60-120 minutes with combat and vehicle churn. Whether cleaners/restorers cost more than they save.
Network/config capture Keep network config fixed and logged. Separates bandwidth/desync claims from simulation-FPS claims.

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: docs/source Common/Init/Init_PublicVariables.sqf:39, current stable/B74.1/B69/B74 :38, Server/Support/Support_Paratroopers.sqf:117, Client/PVFunctions/HandleParatrooperMarkerCreation.sqf:45. 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: docs/source Chernarus/Vanilla Client/Init/Init_Client.sqf:547,571; current stable/B74.1 origin/master@f8a76de34 plus B69/B74 :805,828; live client-fps Chernarus :613,636 and Vanilla :583,606; skill cap mutation Client/Module/Skill/Skill_Init.sqf:49; respawn apply Client/Functions/Client_PreRespawnHandler.sqf:5. 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 roughly every 8 seconds; hosted/listen run has no busy FPS publisher loop. Source refs: Server/GUI/serverFpsGUI.sqf. (Server/Module/serverFPS/monitorServerFPS.sqf was deleted in release fix #7; WFBE_VAR_SERVER_FPS has no publisher or reader on master.) 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.

July Update Candidate Smoke Route

These gates are for the two current July dev-branch candidates listed on the Progress dashboard. They are not completed runtime evidence until a future code owner records RPT snippets, branch head, mission/PBO hash and observed results.

Candidate branch Coverage Setup Steps Expected evidence Failure signals
planned dev/july-update-hosted-server-fps-loop-fix dedicated-smoke, hosted-smoke, vanilla-parity-smoke Create or restore the branch first; no current remote origin/dev/july-update-hosted-server-fps-loop-fix head was found on 2026-06-22. From current stable, verify the existing single guarded SERVER_FPS_GUI publisher. From docs/source or another old-shape ref, apply or verify the DR-19 early non-dedicated exit in both FPS publisher scripts, then propagate or explicitly compare maintained Vanilla Takistan. Dedicated: wait at least two 8-second publish intervals and inspect RHUD/server FPS state. Hosted/listen: run long enough to prove the active publisher scripts exit before their while loops. Vanilla: verify the same publisher shape or record Chernarus-only scope. Target-branch-specific: current-stable-shaped branch still publishes SERVER_FPS_GUI and has no monitor loop; docs/source-shaped branch still publishes SERVER_FPS_GUI plus WFBE_VAR_SERVER_FPS. Hosted/listen has no repeated FPS-publisher work; Chernarus and maintained Vanilla parity are named before release wording. Dedicated FPS HUD breaks, hosted/listen still spins, the target branch silently loses an expected publisher, or Vanilla scope is implied without evidence.
origin/dev/july-2026-update@e3f530ed planning route; no current origin/dev/july-takistan-airfield-fpv-drone head found on 2026-06-22 takistan-hosted-smoke, dedicated-smoke, jip-smoke, economy-smoke, authority-negative-tests Current evidence is closed draft PR #21 and docs/july-2026-update.md roadmap scaffold only. Create or restore a Takistan implementation branch first; use owner decisions in Takistan airfield FPV drone design; keep normal aircraft hangar use ungated. Boot Takistan, capture/lose the airfield and bunker, buy each allowed drone tier after UAV/EASA gates, try wrong-side/no-funds/no-upgrade/repeated requests, JIP during ownership changes and active drones, cross the center boundary and test base-protection plus AA/radar counterplay. Server accepts or rejects purchases after recomputing side, owner, funds, upgrades, active caps, airfield/bunker state, range and protection zones; funds debit once; one active drone per player and side-wide cap hold; JIP clients see correct availability/markers/state; drones cannot base-snipe. Client can self-spawn or self-debit, invalid upgrades/funds/side pass, caps stick or leak, loss of airfield deletes or enables the wrong state, JIP sees stale availability, drones damage protected bases, or normal hangar aircraft use is accidentally gated.

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/claude/trello-upgrade-hqcost-info head 34fd202c8865 / draft PR #75 client-ui-smoke, upgrade-smoke, economy-ui-smoke, vanilla-parity-smoke, branch-base-review Branch merge-base is current stable origin/master@f8a76de34; payload is six maintained-root files / +96 across source Chernarus plus maintained Vanilla Client_FNC_Special.sqf, GUI_TransferMenu.sqf and stringtable.xml, and git diff --check f8a76de34..34fd202c8865 is clean. Treat as branch-only info text, not current stable behavior. Current stable has the relevant constants/arrays but no branch value-message or New HQ cost strings. In source Chernarus and maintained Vanilla, complete Artillery Timeout and Respawn Range upgrades at more than one level and inspect the extra command-chat scalar line. Complete at least one other upgrade type to confirm it still emits only the generic completion message. Open Transfer Menu with different funds/commander-share states and with the HQ deploy-cost parameter/default visible, then exercise at least one normal funds transfer as a regression control. Generic upgrade-complete chat still appears once; branch value lines show the expected artillery reload seconds and respawn range meters from WFBE_C_ARTILLERY_INTERVALS / WFBE_C_RESPAWN_RANGES; other upgrades do not emit misleading scalar values. Transfer Menu footer shows the New HQ cost from WFBE_C_STRUCTURES_HQ_COST_DEPLOY without clipping/overlap and transfers still work. Source refs: branch Client_FNC_Special.sqf:204,212-223, GUI_TransferMenu.sqf:124-129, stringtable.xml:459-473,1055-1061; current stable constant refs Chernarus Init_CommonConstants.sqf:44,47,435,438,678,684, Vanilla :44,47,257,260,480,486. Wrong upgrade level/index value, nil array/constant errors, value line appears for unrelated upgrades, missing localized string, transfer footer clipping/overlap, HQ cost ignores the mission parameter/default, transfer/donation behavior regresses, or Vanilla parity is claimed without mirrored branch files and smoke.
origin/claude/trello-base-integrity-fixes head 66d80160 client-vehicle-smoke, construction-smoke, icbm-smoke, vanilla-parity-smoke, branch-base-review Branch is two commits on current stable merge-base origin/master@f8a76de34; payload is six maintained-root files / +70 / -10 across source Chernarus plus maintained Vanilla ZetaCargo hook/unhook and Nuke damage files, and git diff --check f8a76de34..66d80160 is clean. Treat as branch-only integrity work, not current stable behavior and not ICBM authority closure. Source Chernarus current stable already passes [_vehicle] to Zeta manual detach; maintained Vanilla still does not, including on the branch. In source Chernarus and maintained Vanilla, lift a nearby non-HQ vehicle with the friendly HQ also nearby, attempt own-HQ lift, manually detach from a normal helicopter and C-130, damage/remove the lifter to trigger auto-detach, and repeat after adding the missing Vanilla detach argument if parity is part of the claim. For Nuke, start one SmallSite and one MediumSite build inside blast radius, keep one completed structure as control, launch/trigger the nuke path, and inspect RPT plus world state. Friendly HQ is not chosen as cargo; nearby valid non-HQ cargo still attaches; manual detach has a valid lifted-vehicle argument in every claimed root; drops land at ground level behind the lifter and offset further from friendly HQ when needed; auto-detach still restores the lift action when the lifter survives. In-progress construction logics with WFBE_B_Type are deleted and do not spawn final structures, while completed structures still take blast damage. Source refs: branch Zeta_Hook.sqf:17-19, Zeta_Unhook.sqf:12-29, damage.sqf:33-42; stable construction Construction_SmallSite.sqf:34,47,67,75,95,104; Construction_MediumSite.sqf:34,47,67,75,90,110,119. Own HQ can still be selected, non-HQ cargo is wrongly filtered, Vanilla manual detach still errors from missing action args after parity is claimed, drops stay on top of the lifter/HQ or under terrain, auto-detach regresses, unfinished builds survive the blast and complete later, completed structures are accidentally spared, or docs imply ICBM RequestSpecial authority is fixed.
origin/claude/trello-arty-cooldown-hud head 471fc0580fd6 client-ui-smoke, hud-smoke, vanilla-parity-smoke, branch-base-review Branch merge-base is current stable origin/master@f8a76de34; payload is four maintained-root files / +134 / -8 and git diff --check clean. Current stable keeps Tactical-menu cooldown text at GUI_Menu_Tactical.sqf:546-558 and fireMissionTime = -1000 at Init_Client.sqf:422, but has no RHUD artillery row. In source Chernarus and maintained Vanilla, enable artillery, open/keep RHUD visible, fire a mission, watch the RHUD Arty: row during countdown and after availability, then repeat with artillery disabled or unavailable. Toggle map/RHUD/FPS HUD around the update. RHUD controls RUBHUD_Arty / RUBHUD_Arty_Value render without overlapping existing rows; countdown uses the same upgrade-scaled interval as Tactical; available state returns after cooldown; disabled artillery hides the row; title/display ownership does not regress. Source refs: branch Client_UpdateRHUD.sqf:27,259-288,452; Rsc/Titles.hpp:177,478-490. RHUD row overlaps/clips, countdown disagrees with Tactical, nil fireMissionTime/interval errors appear, row remains visible when artillery is disabled, title handle/RHUD recreation regresses, or Vanilla parity is claimed without the same controls.
origin/claude/trello-arty-to-gunner head 2dc3e7403399 client-ui-smoke, artillery-smoke, locality-smoke, vanilla-parity-smoke, branch-base-review Branch merge-base is current stable origin/master@f8a76de34; payload is six maintained-root files / +217 / -8 and git diff --check clean. Current stable has existing artillery classname data and player-buy moveInGunner behavior, but no Tactical crew-all action or strings. In source Chernarus and maintained Vanilla, buy or own artillery pieces with empty driver/gunner seats, keep dismounted group AI available, press Crew All Artillery, then repeat with no artillery, no available AI, full seats, dead/mounted AI, and multiple artillery families. Test the subsequent fire-mission path. Button idc 17040 appears without support-section overlap; only existing alive dismounted non-player group AI are seated; driver then gunner seats fill as intended; no units are spawned; no-artillery/no-AI hints are correct; seated artillery remains usable for fire missions. Source refs: branch GUI_Menu_Tactical.sqf:571-626; Rsc/Dialogs.hpp:2364-2371; stringtable.xml:3192-3213. Action seats the player or wrong-side/non-group AI, fails under locality, leaves available AI in inconsistent state, hides or overlaps support controls, breaks fire-mission listing, or Vanilla scope is claimed without mirrored behavior.
origin/claude/trello-audio-cues head a0e4fb458 client-audio-smoke, paratrooper-smoke, irsmoke-smoke, vanilla-parity-smoke, branch-base-review Branch is one commit on current stable merge-base origin/master@f8a76de34; payload is four maintained-root files / +74 / -2 across paratrooper marker creation and IRS incoming-missile handlers, and git diff --check f8a76de34..a0e4fb458 is clean. It reuses existing commanderNotification and ARTY_cooldown_over sound classes; no new sound media payload exists. In source Chernarus and maintained Vanilla, trigger a paratrooper drop for the local side with several units, observe sound count and local marker behavior, then observe a non-matching-side client if practical. For IR smoke, crew a vehicle with IRS flares, trigger missile response, wait WFBE_IRS_FLARE_DELAY, then repeat after leaving crew, destroying the vehicle, exhausting flares and toggling wfbe_irs_disabled if PR #61 is present. One commanderNotification plays per throttle window, the paraDZ_<time> Paradrop marker is local/friendly and deletes after 30 seconds, no enemy-side cue leaks, ARTY_cooldown_over plays only for surviving crewed vehicles with remaining flares, level-2 continuous missile warning remains sane and maintained Vanilla matches source Chernarus. Source refs: branch HandleParatrooperMarkerCreation.sqf:17-18,42-61; IRS_OnIncomingMissile.sqf:51-61; sound classes Sounds/description.ext:18-20,84-86. Sound spam per paratrooper, marker leaks to enemies or stays after 30 seconds, hardcoded marker text is treated as localized, ready cue plays after crew leaves/death/no flares/toggle-off, level-2 warning overlap becomes unusable, missing sound-class RPT errors appear, or Vanilla scope is claimed without matching files.
origin/claude/upstream-hq-repair-price head 440be3da0bda client-ui-smoke, economy-smoke, vanilla-parity-smoke, branch-base-review Branch is one payload commit on merge-base be2bbd084, an ancestor of current stable origin/master@f8a76de34; port/rebase without reverting the B74.1 player-stats constants at Init_CommonConstants.sqf:914-920. Payload is Chernarus + maintained Vanilla Action_RepairMHQ.sqf, Init_Unit.sqf and stringtable.xml; git diff --check be2bbd084..440be3da0bda is clean. This is not a server-authority fix: no Server/, RequestMHQRepair.sqf or Init_PublicVariables.sqf payload exists. In source Chernarus and maintained Vanilla, destroy an HQ, use a repair truck under both side-supply and player-funds economy modes if practical, observe the repair action label at truck spawn, repair once and twice, try the next attempt that reaches the cap, and repeat insufficient-funds and already-repairing cases. Repair action labels and post-repair hints show the intended next-price text in all touched languages; repair price/count behavior matches owner policy; insufficient-funds and already-repairing messages still work; normal repair still reaches the server once for accepted cases; current stable/B74.1 stats constants remain enabled after any port. Source refs: current stable plain action Init_Unit.sqf:67 and hint Action_RepairMHQ.sqf:42; branch formatted action Init_Unit.sqf:71-78, hint Action_RepairMHQ.sqf:43-55, strings stringtable.xml:940-945 plus Chernarus :4592-4597 / Vanilla :4591-4596. Direct merge rolls back WFBE_C_STATS_ENABLED = true, action label is stale/missing after repair-count changes, post-repair hint advertises an unreachable third repair without owner acceptance, insufficient-funds formatting breaks, server-side MHQ authority is incorrectly claimed closed, Vanilla scope is claimed without parity, or repeated/concurrent repair requests still produce ambiguous behavior while release wording implies authority hardening.
origin/claude/upstream-an2-climb-boost head 63e6b4142 client-vehicle-smoke, vanilla-parity-smoke, branch-base-review Branch is one payload commit on merge-base be2bbd084, an ancestor of current stable origin/master@f8a76de34; port/rebase without reverting the B74.1 player-stats constants at Init_CommonConstants.sqf:914-920. Payload is Chernarus + maintained Vanilla Func_Client_LowGear.sqf and Init_Unit.sqf; git diff --check be2bbd084..63e6b4142 is clean. In source Chernarus and maintained Vanilla, spawn/enter An2_TK_EP1, confirm Low Gear on/off actions appear only to the driver, test low-gear off/on during heavy takeoff, steep climb, near-stall regime and normal cruise, then confirm tanks/cars still keep existing low-gear and flip behavior. AN-2 boost is available only when intended, helps slow takeoff/climb below the branch Air target without pushing normal cruise/top speed, and does not add the car/tank Flip action to the plane. Source refs: branch Init_Unit.sqf:87-90; Func_Client_LowGear.sqf:68-75; current stable lacks both. Direct merge rolls back WFBE_C_STATS_ENABLED = true, AN-2 action missing or visible to non-drivers, boost affects normal cruise/AA-evasion speed, tanks/cars regress, Vanilla scope is implied without branch files, or no in-game climb evidence is recorded.
origin/claude/upstream-blinking-mapicons head 6e31f7fd5 client-ui-smoke, map-marker-smoke, vanilla-parity-smoke, branch-base-review Branch is one payload commit on merge-base be2bbd084, an ancestor of current stable origin/master@f8a76de34; port/rebase without reverting the B74.1 player-stats constants at Init_CommonConstants.sqf:914-920. Payload is Chernarus + maintained Vanilla Client_BookkeepBlinkingIcons.sqf; git diff --check be2bbd084..6e31f7fd5 is clean. Enable WFBE_C_MAP_ICON_BLINKING_ENABLED = 1. With map/GPS closed and open, put a player in gunner and commander seats of an active blinking vehicle, trigger/clear LFTB, dismount, kill/delete the vehicle, and repeat for both WEST and EAST arrays. The active vehicle marker blinks as before, and the mounted player's own soldier marker is also pushed into BLINKING_UNITS_* while mounted as gunner/commander, then removed when inactive/null. Source refs: current stable vehicle-only push Client_BookkeepBlinkingIcons.sqf:82-94; branch player-marker push :96-110. Direct merge rolls back WFBE_C_STATS_ENABLED = true, mounted player marker does not blink, duplicates or stale nulls accumulate, dismounted/dead players keep blinking, WEST/EAST arrays cross-contaminate, map-open cadence regresses, or Vanilla scope is claimed without parity.
origin/claude/upstream-barracks-4th-level head e83de9c4 upgrade-smoke, factory-purchase-smoke, vanilla-parity-smoke, branch-base-review Branch is one payload commit on merge-base be2bbd084, an ancestor of current stable origin/master@f8a76de34; port/rebase without reverting the B74.1 player-stats constants at Init_CommonConstants.sqf:914-920. Payload is Chernarus + maintained Vanilla Core infantry configs, Core_Upgrades/Upgrades_*.sqf and Common_CreateUnit.sqf; git diff --check be2bbd084..e83de9c4 is clean. In source Chernarus and maintained Vanilla, run Barracks upgrades from 0 through 4, open Buy Units at each level, verify representative WEST/EAST infantry lock/unlock rows, buy AT/HAT/AA/MG/marksman/SL units at boundary levels, and spawn US_Soldier_AT_EP1 through the normal path. Barracks exposes four coherent levels and dependencies, unit filtering follows the branch QUERYUNITUPGRADE rows, denied units stay unavailable until their required level, and US_Soldier_AT_EP1 receives R_MEEWS_HEAT instead of R_MEEWS_HEDP. Source refs: branch Upgrades_CO_US.sqf:33,61,89,125,185; Core_US.sqf:21,24,27,33,48,81; Core_RU.sqf:18,21,24,30,45,60; Common_CreateUnit.sqf:101. Direct merge rolls back WFBE_C_STATS_ENABLED = true, Barracks max level/times/costs mismatch, AI commander upgrade order skips the new level, buy-menu filtering differs from Common_CreateUnit rejection, AT magazine loadout stays HEDP, Vanilla scope is claimed without mirrored files, or no in-game level-0-to-4 evidence is recorded.
origin/feat/ai-commander head c20ce153 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, lazy-condition cleanup commits b4b0333f..c20ce153. 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/guer-insurgents-faction head 41550bd33 dedicated-smoke, jip-smoke, vanilla-parity-decision, optional hc-smoke Dedicated branch run with WFBE_C_GUER_PLAYERSIDE = 0, then another with it enabled. Repeat maintained Vanilla only if the owner decides the playable-GUER feature should propagate beyond Chernarus. Static preflight must clean current git diff --check blank-EOF/trailing-whitespace failures. Disabled pass: boot, join WEST/EAST and confirm baseline hostility/economy/runtime are unchanged. Enabled pass: join GUER slot, JIP after towns initialize, respawn from friendly towns/camps, open depot/buy menu without a base, wait for stipend/tier changes, kill WEST/EAST units, capture/harass towns, and observe WEST/EAST AI return fire. Disabled mode has no visible GUER economy/runtime side effects; enabled mode registers resistance team state, publishes WFBE_GUER_VEHICLE_TIER, rebuilds WFBE_GUERDEPOTUNITS, pays stipend/kill funds once per intended event, preserves JIP-visible state and makes WEST/EAST AI hostile to GUER. Source refs: Rsc/Parameters.hpp:587, mission.sqm:25,27,4938+, Init_Server.sqf:7-13,584-611, Root_GUE.sqf:129-130, Root_GUE_PlayerOverlay.sqf:13,34-51, Server_GuerStipend.sqf:14,41-43,56, RequestOnUnitKilled.sqf:82-93. GUER behavior leaks when disabled, Vanilla scope is implied without code, WEST/EAST AI ignore GUER after setFriend change, stipend/tier state is not JIP-safe, buy menu has missing classes/no-base dead ends, kill funds duplicate or pay wrong side, town capture breaks resistance/camp ownership, or branch whitespace remains unresolved.
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 e9294ede hosted-smoke, dedicated-smoke, jip-smoke, hc-smoke, screenshot-evidence Treat as a terrain release candidate plus a low-pop balance profile. Static validation with branch-local Tools\Validate-ZargabadMission.ps1 passed locally in a detached worktree at e9294ede, but that tool is not present on the current docs branch and git diff --check reports 3542 generated whitespace findings. Runtime evidence should follow Guides/Zargabad-Completion-Gates.md and the refreshed Guides/Zargabad-Claude-Runtime-Handoff.md screenshot packet. Boot Zargabad hosted and dedicated from the feature branch, 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. Explicitly verify low-pop defaults in RPT/report evidence: AI max 6, player AI max 8, Soldier cap 3, team supply cap 30000, UAV 650, missile/bomb ranges 1500, town mortar/patrol 420/300, countermeasures 12/18, ICBM off and price multipliers 0.95/1.15/1.4/1.75/2.0/1.0. Validate the runtime report packet with the branch-local validator 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; tuned range/economy defaults match the branch validators; 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, bad low-pop economy/air-price feel, JIP/HC failure, current-branch validator mismatch, 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