-
Notifications
You must be signed in to change notification settings - Fork 0
Tools And Build Workflow
For the release-readiness and integration risk audit that sits on top of this workflow, see Tooling release readiness audit.
Page ownership: this page owns the operational LoadoutManager rules, skip-list and generated-mission status table. Source fix propagation queue owns the current source/Vanilla propagation and smoke-gate ledger. Full drift evidence and file-count analysis live in Deep-review findings DR-4 and DR-32; keep only the actionable build/propagation rules here.
Tools/LoadoutManager is a .NET 8 executable. Program.cs calls SqfFileGenerator.GenerateCommonBalanceInitAndTheEasaFileForEachTerrain().
Responsibilities:
- generate common balance/EASA SQF files for terrains;
- copy source mission files from Chernarus to maintained vanilla target missions;
- adjust terrain-specific map parameters such as Takistan
SET_MAP; - optionally package missions with 7-Zip.
Generated files vs copied files — edit the generator, not the output. LoadoutManager both generates SQF from C# and copies the source mission, and the two cases have opposite editing rules:
-
Generated files —
Client/Module/EASA/EASA_Init.sqf,Common/Functions/Common_BalanceInit.sqf,Common/Common_ReturnAircraftNameFromItsType.sqf, the marker block inCommon/Functions/Common_ModifyAirVehicle.sqf, and per-terrainversion.sqf(full set in Gear, loadout and EASA atlas). Fix these in the generator source underTools/LoadoutManager/(theData/**classes and theSqfFileGenerator/Generate*builders), never by hand in the.sqf. A hand-edit to a generated.sqfis overwritten on the nextdotnet run, including the Chernarus source copy, so it silently reverts. Concrete case: a turret-MG classname corrected directly in a generated loadout SQF kept reappearing every run because the generator still emitted the old class, until the builder itself was changed. -
Copied files — the rest of the mission tree: edit the Chernarus source, then
dotnet runpropagates to Takistan, except the skip-list in the Propagation rules & the skip-list trap section below, which must be hand-mirrored.
The generated aircraft loadout and balance pipeline is mapped in Gear, loadout and EASA atlas. In short: change aircraft loadouts in Tools/LoadoutManager/Data/Vehicles/Aircrafts/**, then inspect generated Client/Module/EASA/EASA_Init.sqf and Common/Functions/Common_BalanceInit.sqf.
Build configurations:
DEBUGSERVER_DEBUGRELEASEAIRWAR_DEBUGAIRWAR_SERVER_DEBUGAIRWAR_RELEASE
Repo instruction: after mission edits, run from Tools/LoadoutManager with dotnet run, or from the repo root with dotnet run --project Tools\LoadoutManager\LoadoutManager.csproj. If .NET SDK is missing, stop and tell the user. On branches where the tooling source implements it, A2WASP_SKIP_ZIP=1 can make propagation-only runs skip _MISSIONS.7z packaging; verify the target branch's Tools/LoadoutManager source before relying on that shortcut.
Upstream history warning: the second-wave Developer history and upstream lessons pass found concrete tooling hazards: current packaging is source Chernarus plus generated Vanilla/Takistan only, Modded_Missions packaging/generation is commented out, ZipManager depends on env var 7za, version.sqf load order was reverted once, Takistan DB map ID needed generator-side post-copy repair, and sound generation assumes ClassName-volume.ogg filenames. Treat LoadoutManager console output plus git diff --stat as the release check, not a blind "DONE" signal.
Local workspace note: root discovery is branch-sensitive. Current docs/source HEAD@101930f47 is unchanged from 7b1187d32 for checked tooling paths: FileManager.FindA2WaspWarfareDirectory supports both an ancestor folder literally named a2waspwarfare and a normal repo root containing Missions, Missions_Vanilla and Tools\LoadoutManager\LoadoutManager.csproj (FileManager.cs:153,158,166,176,186-188). Current master after PR #87/B750, origin/master@c4c9a6479 (same checked LoadoutManager tooling shape as PR #85/PR #86/PR #87), has the merged B745/LoadoutManager sibling marker check: named-root still passes, otherwise the root must contain Missions\[55-2hc]warfarev2_073v48co.chernarus, Tools\LoadoutManager and AGENTS.md (FileManager.cs:165-176; AGENTS.md check at :172). Current B74.2 origin/claude/b74.2-aicom@21b62b04, B69/B74 and historical a96fdda2 use the same stable-shaped helper. Current master also keeps the Takistan-only directory blacklist conditional (FileManager.cs:37), adds/keeps the generated EASA category compile (SqfFileGenerator.cs:30), runs Chernarus and Takistan generation before packaging (SqfFileGenerator.cs:121,140) and has no checked A2WASP_SKIP_ZIP support. Current Miksuu and perf/quick-wins still require an ancestor named a2waspwarfare.
Current local feat/supply-helicopter checkout caveat: LoadoutManager is still old tooling shape at HEAD@558fba343. A2WASP_SKIP_ZIP is not referenced under Tools/LoadoutManager; SqfFileGenerator.cs:135 calls ZipManager.DoZipOperations() unconditionally, ZipManager.cs:38 calls Create7zFromDirectory(...), and ZipManager.cs:73-76 requires env var 7za and throws if it is missing. Root discovery is also named-root-only in this checkout (FileManager.cs:145-152). Treat skip-zip support and marker-root discovery as branch-specific claims.
Before running tooling or deployment-adjacent pieces, check these first:
| Item | Why it matters |
|---|---|
| Checkout path resolves to the repo root. | On docs/source HEAD@101930f47, LoadoutManager accepts either an ancestor named a2waspwarfare or root markers Missions, Missions_Vanilla and Tools/LoadoutManager/LoadoutManager.csproj. On current stable origin/master@c4c9a6479, current B74.2/B69/B74 and historical a96fdda2, the marker set is Missions/[55-2hc]warfarev2_073v48co.chernarus, Tools/LoadoutManager and AGENTS.md; current-stable line refs are FileManager.cs:165-176. On current Miksuu/perf-shaped refs, keep the checkout under an ancestor named a2waspwarfare. |
A2WASP_SKIP_ZIP=1 is verified before propagation-only runs. |
Docs/source HEAD@101930f47 implements it in ZipManager.cs:11,96, and release command-center 177ef1385f keeps skip-zip plus the current 7-Zip auto-detection/temp-archive path. Current stable origin/master@c4c9a6479, current B74.2/B69/B74, historical a96fdda2, current Miksuu/perf and the local feat/supply-helicopter checkout do not have checked support, so missing 7za will still throw after generation/copy on those refs. |
7za is configured and available if packaging is required. |
Required only when producing _MISSIONS.7z release archives. |
Existing _MISSIONS.7z replacement behavior is known for the target branch. |
Release command-center 177ef1385f writes _MISSIONS.7z.tmp, gates on the 7-Zip exit code, and only replaces the existing archive after the temp archive succeeds. Older refs such as docs/source HEAD@101930f47 and current stable-shaped refs may delete first and lack the exit-code gate. Keep a rollback copy before server deployment either way. |
version.sqf exists for every claimed target root. |
It is generated and git-ignored, but included by description.ext and initJIPCompatible.sqf; Rsc/Header.hpp consumes its WF_RESPAWNDELAY, WF_MISSIONNAME and WF_MAXPLAYERS defines. Missing version.sqf blocks pack/test/release claims for that root. |
| Generated aircraft damage insertion markers still exist. |
BaseTerrain.cs:84-86 writes Common_ModifyAirVehicle.sqf through marker replacement, and FileManager.cs:224-247 only logs missing marker content. A marker drift can produce a soft generator warning instead of a clear release failure. |
Missions_Vanilla is not confused with the VANILLA macro. |
The folder name is a generated target label; the #ifndef VANILLA preprocessor gate in description.ext / Rsc/Header.hpp controls OA/CO config behavior inside mission headers. |
stringtable.xml and loadScreen.jpg exist for the mission being packed/tested. |
They are ordinary runtime assets for playable mission roots; modded forks may lack them even when their description.ext includes generated/sound/music dependencies. |
Generated version.sqf has the intended release flags. |
Prepared/generated files can contain debug/log-enabled values; inspect WF_DEBUG and WF_LOG_CONTENT before packaging a public release. |
DiscordBot has real preferences.json and token.txt outside git. |
Missing token/config is expected in repo and is not a mission-code failure. Current bot startup touches preferences.json through GameData.LoadFromFile() before the clean missing-token exit, so provide preferences before debugging token-only failures. |
AntiStack has the separate A2WaspDatabase DLL if enabled. |
The in-repo Extension project is a2waspwarfare_Extension / GLOBALGAMESTATS, not the AntiStack database extension. |
| Deployment inventory records actual server artifacts and config paths. | Track a2waspwarfare_Extension, separate A2WaspDatabase, token.txt, preferences.json, production BEpath, and any external server.cfg/basic.cfg before calling a host reproducible. |
The in-repo Extension is built with legacy MSBuild tooling. |
It targets .NET Framework 4.8 x86 with RGiesecke.DllExport/UnmanagedExports packages under ../packages; do not treat it as a normal SDK-style dotnet build project. |
| Do not expect server/deploy wrapper scripts in the scoped release folders. | A scoped scout found no .cmd, .ps1, .bat or .sh files under Tools/LoadoutManager, DiscordBot, Extension or BattlEyeFilter; use the documented dotnet/MSBuild/manual deployment flow unless new scripts are added later. Tools/PerformanceAuditAnalyzer is the exception: it has local analyzer launchers, not server deployment wrappers. |
"Edit Chernarus, then run dotnet run" is correct for most files but silently incomplete for a fixed skip-list. LoadoutManager copies Chernarus → Takistan via FileManagement/FileManager.cs, which never overwrites certain files and never copies certain directories. A change made in Chernarus to any of these does not reach Takistan and must be hand-mirrored in both missions:
| Not propagated (Chernarus → Takistan) | Mechanism | Why |
|---|---|---|
mission.sqm |
ShouldSkipFile |
Map-specific editor data. |
version.sqf |
ShouldSkipFile + git-ignored |
Generated per-terrain. |
Client/GUI/GUI_Menu_Help.sqf |
skip + post-copy name patch | Mission name differs per terrain. |
WASP/unsort/StartVeh.sqf |
ShouldSkipFile |
Per-map starting vehicles. |
texHeaders.bin, loadScreen.jpg
|
ShouldSkipFile |
Binary/terrain assets. |
Common/Config/Core_Artillery/* |
directory blacklist (co.takistan) |
Takistan keeps its own artillery configs. |
Server/Config/* |
directory blacklist | Map-specific server config. |
Textures/* |
directory blacklist | Per-terrain textures. |
Server/Init/Init_Server.sqf |
copied then patched |
SET_MAP 1 → 2 rewrite post-copy. |
A recursive diff in Deep-review findings DR-4 confirmed vanilla Takistan has no accidental drift outside this skip-list/blacklist and the SET_MAP rewrite. If you edit a skip-listed gameplay file, especially mission.sqm or WASP/unsort/StartVeh.sqf, hand-mirror it instead of assuming dotnet run will propagate it.
Takistan blacklist caveat: FileManager.cs:22-37 applies the directory blacklist when the destination path contains co.takistan. If future generated target names change away from that substring, re-test the blacklist before trusting artillery/config/texture propagation behavior.
Sync blast radius: LoadoutManager also deletes destination files and directories that do not exist in the source copy (FileManager.cs:116-119,123-136). Treat generated mission trees as disposable outputs. Manual edits or extra assets placed only in Missions_Vanilla/* can be removed by a later propagation run unless the generator/source tree owns them.
Soft-copy failure caveat: FileManager.cs:72-83 catches IOException during individual file copies, prints Error copying file: ..., and then continues the run. A LoadoutManager run can therefore finish with partial copy failures in console output. For release or propagation claims, inspect the console log and git diff --stat; do not rely only on process completion.
Generated root gate: for any release, smoke or pack claim, verify the root-specific version.sqf file exists and matches the target terrain before moving on. At minimum, source Chernarus should carry WF_MAXPLAYERS 55, WF_MISSIONNAME "[55] Warfare V48 Chernarus" and its intended Chernarus/naval flags; maintained Vanilla Takistan should carry WF_MAXPLAYERS 61, WF_MISSIONNAME "[61] Warfare V48 Takistan" and the intended non-Chernarus/non-naval flag shape. git status --ignored --short -- "Missions/[55-2hc]warfarev2_073v48co.chernarus/version.sqf" "Missions_Vanilla/[61-2hc]warfarev2_073v48co.takistan/version.sqf" should show ignored-present files in a prepared local checkout. The 2026-06-23 docs/source check at HEAD@101930f47 found both live files absent in a clean checkout; current master origin/master@c4c9a6479 tracks version.sqf.template in both maintained roots, but still does not track live version.sqf, so LoadoutManager generation is still required first. Companion PR #126 adds Tools/Ops/Test-WaspVersionTemplates.ps1 to guard the tracked fallback templates against exact-package markers and terrain identity drift before that lane is promoted. The machine-readable gate is agent-release-readiness.json versionSqfGeneratedInput.
Modded missions are not maintained by the current dotnet run path. The modded-terrain propagation call is commented out at SqfFileGenerators/SqfFileGenerator.cs:132 on docs/source/Miksuu/perf/a96fdda2 and :135 on current stable/B74.1/B74.2/B69/B74; packaging includes only Missions plus Missions_Vanilla at ZipManager.cs:16 on docs/source and :10 on stable-shaped/Miksuu/perf/a96fdda2 refs. Treat Modded_Missions/* as non-authoritative until the owner chooses regenerate-from-source or maintained-fork policy; see DR-32 for the full tier analysis.
This is the operational summary of DR-32's three maintenance tiers. Use it before assuming a fix in Chernarus reaches every mission folder.
| Target | Current status | Development consequence |
|---|---|---|
Missions/[55-2hc]warfarev2_073v48co.chernarus |
Source of truth. | Apply gameplay and documentation evidence here first. |
Missions_Vanilla/[61-2hc]warfarev2_073v48co.takistan |
Faithful generated/copy target. Current drift is map-config and terrain assets only; logic files are byte-identical to Chernarus outside the documented skip-list and SET_MAP patch. |
Source fixes should propagate through LoadoutManager, except skip-listed files that need hand-mirroring. All DR findings in Chernarus apply to vanilla Takistan unless the changed file is map-specific. |
Modded_Missions/napf, Modded_Missions/eden, Modded_Missions/lingor
|
Divergent hand-edited partial forks with 100+ logic-file differences, including security-sensitive runtime/PVF/victory/upgrade/HQ paths. Wave S confirmed they are not drop-in runnable from the checkout, and the 2026-06-04 modded scout tightened this to boot-incomplete: eden lacks tracked version.sqf, stringtable.xml, loadScreen.jpg, sound and music descriptions; Napf lacks tracked mission.sqm, version.sqf, stringtable.xml, loadScreen.jpg, sound and music descriptions; lingor lacks tracked mission.sqm, description.ext, initJIPCompatible.sqf, version.sqf, stringtable.xml, loadScreen.jpg, sound/music descriptions and textures. All three still compile missing Common/Functions/Common_GetTotalCamps.sqf from Common/Init/Init_Common.sqf:52-53,127-128. PR #125 177ef1385f clears the previously committed conflict-marker tokens, but does not make these forks runnable. |
Source fixes do not automatically reach these missions. Pick a maintenance model before shipping them: regenerate from hardened source or maintain as explicit forks with separate audits, generated/runtime inputs and terrain-specific package proof. |
Modded_Missions/sahrani, Modded_Missions/dingor, Modded_Missions/tavi, Modded_Missions/isladuala
|
Abandoned/non-runnable stubs with only a small fraction of the real mission tree; dingor also has a description.ext that includes missing version.sqf. |
Complete or delete before presenting them as supported missions. |
| Project | Runtime | Entry point | Inputs | Outputs / side effects | Notes |
|---|---|---|---|---|---|
Tools/LoadoutManager |
.NET 8 executable |
Program.cs -> SqfFileGenerator.GenerateCommonBalanceInitAndTheEasaFileForEachTerrain()
|
Terrain/loadout data classes, source Chernarus mission, terrain skip lists. | Generated EASA_Init.sqf, Common_BalanceInit.sqf, aircraft-name helper, per-terrain version.sqf, copied Takistan mission and optional _MISSIONS.7z. |
Root discovery, generated EASA category compile and skip-zip behavior are branch-sensitive; current master 6a34799b4 has marker-root discovery plus WFBE_EASA_FNC_LoadoutCat generation but no checked A2WASP_SKIP_ZIP. |
Tools/PerformanceAuditAnalyzer |
PowerShell |
Analyze-PerformanceAudit.ps1, GUI launcher |
Existing Arma RPT/log files containing [Performance Audit]. |
CSV, Markdown, HTML and Word-friendly performance reports. | Safe read-only analyzer for logs; no shipped live tailer service was found in the tree. See PerformanceAuditAnalyzer. |
Tools/Ops/Set-MissionTemplate.ps1 |
PowerShell | Current master script plus Set-MissionTemplate.Tests.ps1; present after PR #85 and unchanged in PR #86 / current origin/master@c4c9a6479
|
Server cfg-style files containing mission template lines matching the script regex. | Repoints mission template values idempotently, with separate no-match, already-correct and write paths at Set-MissionTemplate.ps1:86-107. |
Current-master tooling source, but still production-config-sensitive. Run the dependency-free tests before using it, and use a throwaway config or reviewed diff before touching production server cfg files. |
Tools/RptTownDefenseAnalyzer |
PowerShell | Current master Analyze-TownDefenseRpt.ps1 and launcher scripts; present after PR #85 and unchanged in PR #86 / current origin/master@c4c9a6479
|
Arma RPT/log files with town-defense diagnostics and createGroup failure lines. | HTML/console report sections, including createGroup failure parsing at Analyze-TownDefenseRpt.ps1:149-153 and reporting at :386,:524. |
Current-master read-only analyzer source. Treat output as triage evidence until paired with the exact RPT, mission branch/hash and runtime context. |
DiscordBot |
.NET 9 executable |
DiscordBot/src/Program.cs -> ProgramRuntime.ProgramRuntimeTask()
|
preferences.json, token.txt, extension database.json. |
Discord channel name, bot presence and status embed updates every 60 seconds. | Missing token/preferences are expected in repo; active status reads Preferences.Instance.DataSourcePath or the default data path, while FileConfiguration.cs is secondary until config ownership is cleaned up. |
Extension |
.NET Framework 4.8 x86 Arma extension |
_RVExtension@12 export |
Arma callExtension arguments from mission scripts. |
Writes C:\a2waspwarfare\Data\database.json for DiscordBot. |
Legacy Visual Studio/MSBuild target using RGiesecke.DllExport/UnmanagedExports from ../packages; preserve x86. |
Mods/mkswf_sidewinder_reload_time_fix |
Arma addon config | CfgWeapons.hpp |
Sidewinder launcher class config. | Sets magazineReloadTime = 1 for Sidewinder launchers. |
External addon fragment, not mission SQF. |
| Project | Local result | Notes |
|---|---|---|
Tools/LoadoutManager/LoadoutManager.csproj |
dotnet build -v minimal succeeded with 86 nullable warnings and 0 errors. |
Warnings are mostly non-nullable initialization / possible null-reference warnings in data classes and zip helper paths. Build success does not run mission generation or packaging. |
DiscordBot/DiscordBot.csproj |
dotnet build -v minimal succeeded with 0 warnings and 0 errors. |
Runtime still requires ignored token.txt and preferences.json plus a valid database.json source. |
Extension/Extension.csproj |
dotnet build -v minimal failed locally with MSB3644: .NET Framework 4.8 reference assemblies were not found. |
Treat as local toolchain missing targeting pack, not proof the legacy extension source is broken. Use Visual Studio/MSBuild with the .NET Framework 4.8 developer pack and x86/package layout before release claims. |
Dedicated page: PerformanceAuditAnalyzer.
Tools/PerformanceAuditAnalyzer parses existing Arma 2 RPT/log files containing [Performance Audit] and exports CSV/Markdown/HTML/Word-friendly reports. It has a GUI picker plus command-line script, but the current tree does not ship a live RPT tailer, background telemetry service or server restart/deploy helper.
Operational caveats from the 2026-06-04 tooling scout:
-
Analyze-PerformanceAudit.ps1:1224-1228creates the output directory before it confirms any input files, so failed/no-input runs can still leave output folders behind. -
Analyze-PerformanceAudit.ps1:1248reads each input withGet-Content | ForEach-Object; useful for normal RPTs, but very large logs should be treated as memory/latency-sensitive until streaming behavior is improved and tested. -
Start-PerformanceAuditAnalyzer.ps1:11-12,119-120loadsSystem.Windows.Formsand opens the picker dialog, so the launcher is desktop/interactive only. UseAnalyze-PerformanceAudit.ps1directly for automation, CI or headless server log processing.
Important outputs include:
performance_raw.csvperformance_pivot_ready.csvperformance_extra_fields.csvperformance_timeline.csvperformance_by_script.csvperformance_spikes.csvperformance_fps_context.csvperformance_by_player.csvperformance_by_map.csvperformance_by_session.csvperformance_report.mdperformance_report.htmlperformance_interpretation.htmlperformance_report_word.doc
Use it after performance-sensitive mission changes or live-server audits.
-
7zaenvironment variable points to7za.exe. -
ZipManagerpackages mission directories after copy/generation and currently zips onlyMissionsplusMissions_Vanilla, notModded_Missions(ZipManager.cs:16on docs/source,:10on stable-shaped/Miksuu/perf/a96fdda2refs). - Missing
7zacauses the final packaging step to throw unless the target branch implements and honorsA2WASP_SKIP_ZIP=1or the release command-center unset-7zaskip. Current stableorigin/master@c4c9a6479, B74.2/B69/B74, historicala96fdda2, current Miksuu/perf and the localfeat/supply-helicoptercheckout do not in the checked refs. Inspect generated/copied files before assuming the whole run did nothing.
Historical snapshot (superseded). The PR #125 identity guardrail below was written against the 2026-06-30/07-02 release-command-center packaging state; the live build has moved on (see Current live state — Build 89 line, cmdcon44 chain, 2026-07-06). The PR base branch claude/build84-cmdcon36 remains the active base; branch@commit snapshots below are point-in-time evidence, not the live state. Re-verify before acting.
- PR #125 identity guardrail: current checked command-center release head is
codex/release-command-center-20260630@177ef1385f22aefb466368ef9c381d64a57801c0. The current package proof is_MISSIONS.7zSHA2565910819DF9840B06146A5C237691AD159B507162399AF596050822EB86F2E5F2,1,885entries,7,167,459bytes, with release handoff statusready_for_runtime_collection. The latest package refresh keeps Build83/cmdcon35 reconciliation and the cmdcon35 placement-preview private declaration fix, while adding the AICOM order-sequence, capture-stall guardrails and movement-root/arrival-radius follow-up in both maintained terrains: AllCamps camp MOVE/SAD is oneWaypointsAddchain, same-target stall age is checked independently of the older far-from-target stuck branch, and relaid waypoint batches now callsetCurrentWaypointon their first new node, and arrival now latches fromWFBE_C_AICOM_ASSAULT_ARRIVE_RADIUSwhile the capture phase keeps the tighter SAD/depot behavior. It preserves PVF dispatcher shape guards, AICOM requester validation, AICOM lifecycle/refund authority guards including corrupted active marker-list reset, AICOM/group-funds default reads, AICOM artillery interval/range-array guards, feed-request replay validation/throttling, shared factory queue empty-head guards, Attack Wave PV/activation authority guards, ICBMRequestSpecialrequester/team/commander/funds/structure/unlock/duplicate validation, supply mission start/completion/cooldown-query payload guards with server-stamped expected cargo/side and friendly Command Center completion validation, SCUD requester/team/action-grant/pad-proximity server revalidation, GUER mortar player/vehicle/range/funds server validation plus client result payload unwrapping, player support/UAV requester/team/destination/upgrade/cooldown/funds binding, RespawnST and aicom-focus requester tuple alignment, safe side-supply no-commander logging, upgrade artillery side ownership, missing AI commander funds defaults, HCTopUp draft exclusion and deleted-proposal cleanup; no runtime proof or deploy approval is implied. Older package proof forcf75f9e0e,88368a9723,84b0b79aband any intermediate journal package proof is historical only. Do not collect or score runtime RPTs against a stale package identity. - Packaging success is not a strong release proof by itself. On release command-center
177ef1385f,ZipManagergates on 7-Zip exit code and uses_MISSIONS.7z.tmpbefore replacing the archive; thenTools/PrTestHarness/Package/Test-WaspReleasePackage.ps1verifies the archive roots, required Chernarus/Takistan boot files, release markers, per-required-file hashes and the complete git-tracked mission payload againstHEADwhile allowing only the two generated ignoredversion.sqffiles outside git. The 2026-07-02 local manifest for177ef1385frecorded 1,885 entries, 7,167,459 bytes, SHA2565910819DF9840B06146A5C237691AD159B507162399AF596050822EB86F2E5F2, 1,723 tracked mission files matched toHEAD, 1,725 archive mission files, zero missing tracked files, zero unexpected mission files and zero hash mismatches.Tools/PrTestHarness/Package/Test-WaspReleasePackage.SelfTest.ps1proves the gate rejects both stray untracked mission files and stale tracked content injected into copied archives.Tools/PrTestHarness/Release/New-WaspReleaseHandoff.ps1can turn that manifest into a local operator handoff packet, copyrelease-package-manifest.jsonplus siblingrelease-package-manifest.mdinto the same folder, re-hash the local archive before handoff readiness, and includesruntime-approval/runtime-evidence/deployment-approvalpending gates,runtime-rpt-source-map.template.json, theNew-WaspRuntimeRptPacket.ps1builder command,runtime-rpt-packet-manifest.jsonas the publishable packet inventory,runtime-run-ledger.template.json, theTest-WaspRuntimeRptPacket.ps1 -ExpectedArchiveSha256 5910819DF9840B06146A5C237691AD159B507162399AF596050822EB86F2E5F2 -RunLedgerPath "<release-candidate-rpts>\release-run-ledger.json" -RequireSourceRptExistsgate, and the summary command with-RuntimePacketManifestPath "<release-candidate-rpts>\runtime-rpt-packet-manifest.json" -ExpectedCandidate release-command-center-20260630 -ExpectedGit 177ef1385f -ExpectedArchiveSha256 5910819DF9840B06146A5C237691AD159B507162399AF596050822EB86F2E5F2 -RequireRuntimePacketManifestbefore release wording. The handoff contract has a local self-test, the runtime packet builder rejects private source-map release identity drift instead of letting stale source-map values override explicit expected values, and the runtime packet checker requires the run ledger to contain non-empty matchingrelease.candidate,release.gitandrelease.archiveSha256when expected values are supplied. The runtime packet checker also rejects duplicate RPT content, role-identity mismatches and HC/player-client per-role proof mismatches while validating exactroleProofand clientjoinPhase; the scorer then requires startup banners, CIV HC registry proof, stronger no-human AICOM telemetry (AICOMSTATevent,TEAM_FOUNDED,CMDRSTATplus autonomous action/progress), the dedicatedtakistan-west-aicom-infantry-fallbackscorer gate for the Takistan WESTAICOMGATE|WEST|infFallbackproof token, and per-terrain runtime evidence for both Chernarus and Takistan. The summary stays red unless the packet manifest matches the expected candidate/git/archive SHA, has schemaa2waspwarfare-runtime-rpt-packet-builder-v1,validation.requested=true,validation.overall=pass, all required packet-validator gates withstatus=pass, a matchingrptRootHash, matching copied filecopiedPathHash/copiedRptSha256values and exactly ten copied RPT files. Outputs stay path-hashed, but runtime launch, deployment and fresh dual-terrain RPT evidence still require separate approval/proof. Older refs may still delete an existing_MISSIONS.7zbefore proving a new archive and may not gate on the process exit code. Confirm package provenance before calling a release archive complete. - File replacement warnings can still hard-fail later:
BaseTerrain.cs:275-301logs "File not found!" for a missing expected file and then still callsFile.ReadAllTexton the same path. Treat missing replacement targets as real generator failures, not harmless warnings. - Generated aircraft damage insertion is marker-based:
BaseTerrain.cs:84-86wiresCommon_ModifyAirVehicle.sqf, andFileManager.cs:224-247prints missing-content warnings without failing the run. Keep a marker-contract check in release validation before changing generated aircraft damage logic. - The source Chernarus mission is copied to target terrain folders, and extra destination-only files/directories can be deleted during sync (
FileManager.cs:116-119,123-136). Avoid manual changes in generated targets unless the generator is being updated; snapshot generated mission trees before risky propagation runs. -
The specified content was not found in the file.during the current run comes from the terrain help-menu title replacement path and did not stop Chernarus/Takistan generation/copy. - For the exact
version.sqf->description.ext/Rsc/Header.hpp/initJIPCompatible.sqfcontract, use Mission config/version include graph.
cd Tools\LoadoutManager
dotnet run
dotnet run -c SERVER_DEBUG$env:A2WASP_SKIP_ZIP = "1"
dotnet run --project Tools\LoadoutManager\LoadoutManager.csprojUse the skip-zip command only after confirming the target branch references A2WASP_SKIP_ZIP in Tools/LoadoutManager; otherwise configure 7za or expect the packaging step to throw after generation/copy.
powershell -ExecutionPolicy Bypass -File .\Tools\PerformanceAuditAnalyzer\Analyze-PerformanceAudit.ps1 -InputPath ".\logs\arma2oa.rpt" -OutputPath ".\PerformanceAuditResults"Previous: Client UI systems atlas | Next: External integrations
Main map: Home | Fast path: Quickstart | Agent file: agent-context.json
Home | Agent Guide | Current live state | Release 1.2.2 (B91) | Quickstart | Progress | Lifecycle wait-chain | Join/disconnect | Parameters/build | Assets/config | SQF atlas | PV index | Modules | Support/specials | Commander/HQ | Commander vote/reassign | Construction/CoIn | Construction cleanup | WDDM compositions | Factory/purchase | Upgrades/research | Towns/camps/capture | Victory/endgame | Markers/cleanup | Server runtime | AI runtime/HC | AI commander audit | HC delegation | Town AI safety | Commander reassignment | Resistance supply | Player UI workflow | UI atlas | Respawn/death | Gear template filter | Vehicle cargo loop | Service guards | UI IDD repair | UI design inspiration | WASP overlay | Feature status | Source propagation | release readiness | Tooling readiness | Integration trust | AntiStack DB | Owner decisions | Shelved registry | Abandoned feature revival | Hardening roadmap | PVF dispatch | Server authority | ICBM authority | Attack-wave authority | Telemetry families | AICOM V2 cutover | Consumer port map | Testing workflow | Server ops | Web tools | Ecosystem repos | Arma 2 OA refs | A2 traps | OA compatibility audit | Coverage ledger | Navigation inventory | Pruning ledger | Knowledge roadmap | Agent context | Collab protocol | Worklog | Audit archive 2026-07 | Briefing reference | Utes invasion concept
- Shelved AICOM concepts - revivable someday ideas (owner-shelved 2026-07-03)
Docs rule: source-backed claims only; Arma 2 OA scripting docs only; gameplay edits start in Missions/[55-2hc]warfarev2_073v48co.chernarus.
- Getting started
- Status and coordination
- Agent context
- Agent collaboration protocol
- Agent worklog
- Agent worklog archive
- Progress dashboard
- PR cleanup and integration lab
- Shelved PR #169: gear price double-count
- Shelved PR #194: Chernarus no-trees
- Coordination board
- Codebase coverage ledger
- Bottleneck removal queue
- Current source status
- Wiki mirror reconciliation
- Navigation inventory
- Registers
- Agent orchestration
- Architecture
- Architecture overview
- Mission entrypoints and lifecycle
- Lifecycle wait chain
- Player join/disconnect and AntiStack lifecycle
- Mission parameters/localization/build inputs
- Stringtable localization key-family catalog
- Source inventory
- Content structure and maps
- Assets/config/localization/parameters
- Mission start parameters index
- Code and networking
- Gameplay systems
- Core systems index
- Gameplay systems atlas
- Commander/HQ lifecycle atlas
- Economy, towns and supply
- Economy system reference
- Balance asymmetries
- Anti-stack skill-balance mechanic
- Empty-side supply income stagnation
- Towns, camps and capture atlas
- Victory and endgame atlas
- Victory conditions reference
- Territorial victory reference
- Marker cleanup and restoration
- Marker loop engine and registries
- Map marker families content catalog
- Marker subsystem function reference
- Client marker FSM updater map
- Support specials and tactical modules
- SCUD TEL tactical munitions
- Naval HVT objectives (carriers/SCUD)
- SCUD saturation strike mechanic
- Takistan airfield FPV drone design
- Construction and CoIn systems
- Structure damage reduction & friendly-fire
- Construction logic list cleanup
- Flak tower & WDDM anchor compositions
- Resistance supply scaffold
- GUER Insurgents faction overview
- GUER Insurgents branch audit
- GUER insurgent player economy
- GUER Commissar Panel
- GUER air-defense loop (Ka-137/Mi-24)
- Upgrades and research atlas
- Supply mission architecture
- Supply mission authority cleanup
- Current supply helicopters PR1
- Respawn and death-loop lifecycle
- Vehicle theft economy pitch
- GUER tunnel network pitch
- Content, reference and catalogs
- Faction unit/vehicle roster catalog
- Auxiliary/SF/civilian unit catalog
- Gear store loadout route catalog
- Upgrade research (cross-faction)
- Gear store price and upgrade catalog
- Gear store catalog (complete, per faction)
- Defense structures catalog
- Artillery reference per faction
- AI squad team templates catalog
- Town AI lifecycle reference
- Town AI group composition catalog
- Class-skill system reference
- Player skill abilities reference
- Default gear template content catalog
- Chernarus map content reference
- Takistan map content reference
- Takistan features
- Takistan parity reference
- Takistan oilfields objective reference
- IRS IR-smoke countermeasure
- Arty module special munitions
- Zeta cargo sling-load reference
- Spawn primitive function reference
- Kill and score pipeline
- Waypoint helper function reference
- Position and proximity function reference
- Side/team state function reference
- Player AI watchdog and recovery
- AICOM stuck-recovery v2
- LoadoutManager data-model contributor guide
- Discord status bot setup and reference
- GLOBALGAMESTATS extension reference
- New player quickstart (player guide)
- Optional client mods (player guide)
- Earning funds and score (player guide)
- Vehicle service and logistics (player guide)
- Commander's handbook (player guide)
- Tactical support menu
- Paradrop player experience
- Supply missions (player guide)
- In-game briefing & Diary field manual
- Playable maps catalog
- Faction root variables reference
- Faction base structures catalog
- Counter-battery radar system
- Bank, Reserve and Artillery Radar structures
- Map ruleset model and object config
- Countermeasures module reference
- Vehicle countermeasure (flares/spoofing)
- UAV terminal and spotter system
- Artillery firing function reference
- Service Point pricing model
- Medic redeployment truck (forward spawn)
- Side-patrol runtime and convoy mechanics
- Day/night cycle and weather system
- Config lookup helper reference
- CIPHER sort utilities reference
- Modded maps status and content
- BattlEye filter setup and OA taxonomy
- Player squad/group join protocol
- AutoFlip vehicle recovery
- Engine stealth fuel toggle
- Valhalla vehicle climbing-assist
- Missile and ordnance Fired-EH reference
- Vehicle equip and rearm reference
- Array and collection utilities
- Server composition spawner reference
- Upgrade queue server loop
- Map boundaries and off-map enforcement
- Namespace/profile/diagnostic utilities
- Group bool getVariable A2-OA trap
- Vehicle weapon balance init
- View distance auto-throttle
- Camp & respawn-camp getters
- Performance audit writer
- Site clearance (bulldozer)
- Factory queue cancel & refund
- AI commander tunable constants
- Experimental feature-flag constants
- Flag system quick reference
- Mission tunable constants catalog
- Gear parsing & cargo capacity
- Structure dressing function
- Paradrop delivery functions
- ICBM nuke client VFX & radiation
- Server HandleSpecial router
- LocalizeMessage chat router
- Gear buy-menu render & price functions
- Server broadcast & telemetry loops
- Per-unit client init pipeline
- Vehicle marking & texture pipeline
- Defense category & budget
- Legacy AI order primitives
- Commander-team driver
- AICOM command verbs
- AICOM behavior fix taxonomy
- AI commander wildcard deck reference
- AICOM aircraft and airfield system
- Static-defense manning
- End-of-game stats screen
- AI commander execution loop
- Deployable bipod / weapon resting
- Town-economy getters
- Server-init deadspawn & airfield probe
- GUER VBIED detonate action
- Resource income-tick engine
- AI commander treasury accessors
- PVF send-helper contracts
- AICOM logging & AICOMSTAT telemetry
- AICOMSTAT v2 event census
- WASPSCALE v2 telemetry
- WASPSCALE v2-ext coverage audit
- Telemetry families reference
- Group lifecycle & entity reaping
- Batch AI spawner orchestrator
- Client funds/income HUD readout
- Server group GC & cap warning
- Town runtime tuning constants
- Client input/hotkey handler
- WASP base-repair system
- WASP DropRPG launcher/ordnance
- CoIn construction-interface client engine
- Town-capture garrison & airfield rebuild
- Map-control & minimap templates
- Client FPS & state telemetry
- Client service-proximity getters
- Airfield-exclusive roster & unit hints
- Unit-camera spectator system
- Town-garrison patrol/defense worker
- RequestTeamUpdate squad-discipline
- Arma2Warfare GPT assistant
- LoadoutManager build configs & defines
- GLOBALGAMESTATS extension logging
- Discord bot instrumented logging
- Eden/Everon & Taviana map content
- Cruise missile strike asset
- AI / HC
- AI headless and performance
- AI mods and pathfinding reference
- Headless client scaling and topology
- AI runtime/HC loop map
- Headless client init and stat loop
- HC delegation target selection
- Player AI caps and role balance
- Old WarfareBE FPS comparison
- AI commander autonomy audit
- Upstream BE 2073 AICOM delta
- Parent 2.073 divergence audit
- AI commander capture & fun plan
- AI commander B69 improvement roadmap
- AI commander B69 implementation sketches
- AICOM V2 cutover status
- Headless delegation and failover
- Commander reassignment call shape
- GUER Director living-resistance pitch
- Quality and operations
- Foundation perf findings & Tier-3 dead-ends
- Dead/stale code register
- Commander vote/reassignment
- Attack-wave authority
- Server runtime and operations
- Server ops runbook
- JIP enrollment & client data delivery (b74.2 lessons)
- Server gameplay runtime atlas
- PerformanceAuditAnalyzer
- Performance opportunity sweep
- Documentation plan
- Knowledge platform roadmap
- Wiki quality audit
- Wiki pruning and relevance ledger
- Audit findings queue (2026-06-03)
- Deep review findings
- Client UI / server-loop perf findings
- Performance gain simulation
- Self-host testing field notes
- Cleanup and work lanes
- Hardening and authority
- UI / player workflows
- Client UI, HUD and menus
- UI HUD and dialogs
- Player UI workflow map
- Client UI systems atlas
- UI IDD collision repair
- UI control class library reference
- UI theme palette and style macros
- UI design inspiration 2026-07
- Available-actions client gate FSM
- Gear/loadout/EASA atlas
- Gear template profile filter
- Vehicle cargo equip loop bounds
- Factory and purchase systems atlas
- Service menu affordability guards
- WASP overlay
- Class-skill system reference
- Skin selector and class swap
- Earplugs audio toggle
- Mission audio catalog
- HQ radio knowledge-base catalog
- QoL trio player hints
- Player vehicle/travel actions
- Tooling / release / integrations
- Tools and build workflow
- Warfare web tools
- Ecosystem & companion repos
- Zargabad tooling parity
- July 2026 release readiness
- Operator monitor and CPU affinity tools
- Tooling release readiness audit
- Source fix propagation queue
- Agent release readiness ledger
- Release source intake map
- Testing/debugging/release workflow
- Current RPT release gate
- RPT telemetry consumer port map
- External integrations
- Integration trust boundary audit
- AntiStack database extension audit
- Community & Dev
- Community & Dev
- Miksuu upstream wiki import / archive index
- Upstream changelog feature leads
- Developer history and upstream lessons
- Upstream Miksuu commit intel
- Upstream mining ledger
- Archive script mining v2
- Upstream BE 2073 AICOM delta
- Parent 2.073 divergence audit
- PR8 and Drone upstream lesson match
- Development lessons learned
- External research reports
- Audit archive 2026-07
- Briefing reference
- Utes invasion concept
- Miksuu archive: Home
- Miksuu archive: Welcome
- Miksuu archive: Big announcements
- Miksuu archive: Changelog
- Miksuu archive: Development process
- Miksuu archive: Discord bot
- Miksuu archive: Gameplay videos
- Miksuu archive: LoadoutManager
- Miksuu archive: Chernarus script architecture
- Base-game visual catalogs
- Compatibility and references
- HC upstream history and lessons
- Player stats branch audit
- BuyMenu EASA QoL branch audit
- Perf quick wins branch audit
- Commander positions branch audit
- Zargabad branch audit
- Quad AI Commander concept
- Arma 2 OA external reference guide
- Base-game config & image reference
- Arma 2 OA compatibility audit
- Arma 2 OA agent traps reference
- Arma 2 OA command versions
- Wiki source consistency
- External Arma 2 OA reference index