-
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 153a513fb6 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 153a513fb6 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. 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. A 2026-06-03 marker scan also found unresolved merge-conflict markers in 18 files across these forks. |
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 conflict-marker cleanup. |
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. - PR #125 identity guardrail: current checked command-center release head is
codex/release-command-center-20260630@153a513fb6511a4154f2ed825ba9ff2578c070e7. The current package proof is_MISSIONS.7zSHA256CEAFADFE1661D814B521DD7A29B24C351D2CF1451C74749DFCF446B0EBAD25B4,1,877entries,7,133,822bytes, with release handoff statusready_for_runtime_collection. The latest package refresh excludes the uncompiled HCTopUp draft worker and inert HC top-up/merge wiring from both maintained outputs; the earlier deleted-proposal comment cleanup remains historical context, and no runtime proof or deploy approval is implied. Older package proof for88368a9723,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
153a513fb6,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-01 local manifest for153a513fb6recorded 1,877 entries, 7,133,822 bytes, SHA256CEAFADFE1661D814B521DD7A29B24C351D2CF1451C74749DFCF446B0EBAD25B4, 1,715 tracked mission files matched toHEAD, 1,717 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 now 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 CEAFADFE1661D814B521DD7A29B24C351D2CF1451C74749DFCF446B0EBAD25B4 -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 153a513fb6 -ExpectedArchiveSha256 CEAFADFE1661D814B521DD7A29B24C351D2CF1451C74749DFCF446B0EBAD25B4 -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