Skip to content

Developer History And Upstream Lessons

rayswaynl edited this page Jun 4, 2026 · 10 revisions

Developer History And Upstream Lessons

This page turns upstream development history from Miksuu/a2waspwarfare into practical guidance for future Wasp Warfare developers and AI agents.

Evidence sources used for this pass: upstream master through 8bcc42b1 (2026-06-02), GitHub PRs #1-#12, branch list from the upstream repository, merge/revert commits, commit messages, and file-level deltas. Treat this as developer-intent evidence, not a substitute for current-source inspection before code changes.

High-Signal Patterns

Pattern Evidence Developer lesson Confidence
Supply missions attract exploit fixes, UX follow-ups and JIP regressions. PR #10 Supply run remote activation glitch fix / merge 97dfff26, commit 65fa3332 "Fix remote supply truck glitch", PR #11 / 8164cc33, PR #12 body: prevents the extra too-far notification during JIP. Do supply changes as a server-owned state machine: validate requester, source town, vehicle range, cooldown and reward on the server, then test normal start, remote start, JIP join, reused vehicle and Takistan propagation. confirmed
JIP bugs repeatedly appear after client-facing features. PR #12, commits b02782f1 "Move main logic of heavy attack mode to server to avoid JIP issues", a9044821 "Refactor logic of JIP during heavy attack feature", 6eb09dc3 "Make JIP players spawn at HQ or factories only". Any UI/action/state feature needs a JIP plan before merge: decide whether it is replayed state, pull-response, or event-only; add a late-join smoke path to the validation checklist. confirmed
Debug logging is useful during archaeology but must not become shipped noise. Attack-wave cluster on 2026-03-13 includes multiple "Add debug logging" commits followed by 32895cae "Remove debug logging"; 891a70ea later says "Remove all the logging"; supply and marker clusters also remove unnecessary logs. Use WF_Debug-gated diagnostics and remove temporary broad logs before publish. If logs explain a fragile edge, preserve the lesson in docs instead of leaving unconditional runtime spam. confirmed
Mission-copy divergence is a standing maintenance cost. Many upstream commits are explicit Takistan copies: 994150da "Add supply run upgrade to Takistan", ba25ada0 "Add extra score bug fix to Takistan", 101e3452 "Remove unnecessary debug logging from Takistan too", repeated "update taki" commits during May/June 2026. Patch source Chernarus first, then propagate generated Vanilla/Takistan deliberately. Review generated diffs; do not assume a feature is fixed everywhere because Chernarus changed. confirmed
Performance work succeeded after instrumentation, not blind simplification. 88e0749a "Performance audit instrumentation for FPS diagnostics", ff1ea838 "Extend performance audit logs with environment state", 62becdda "performance audit analyzer and session-aware reports", then optimizations like 4aaa814a, 6e5b3c50, 6189f3c5. Measure first, then reduce scans/marker churn. Keep audit toggles cheap and optional; preserve counters that show whether an optimization starves gameplay. confirmed
Town defense activation is fragile because performance and gameplay correctness compete. 4aaa814a reduced town/camp loops and AI activation spikes; a20a5a0f restored reliable activation from capture scans; 84b1b684 restored pre-capture town defense activation; ea0bff2e prevented defenders from activating enemy towns; 913ecdf6 added diagnostics. Do not optimize town AI wakeups solely by reducing scans. Preserve capture-driven wake signals, defender-origin tagging, and diagnostics for false negatives/false positives. confirmed
Client marker/UI loops are locality-sensitive and easy to over-optimize. Marker cluster includes 9a550b7a reverting "Do group leaders need actually global marker vars? Only few know.", 9c72a281 fixing marker tracking after cache optimization, 951e72cb fixing stale squad markers after disconnect, 332874fd fixing town SV visibility leaking to both teams. Treat marker variables as client-local unless source proves a shared-state need. Validate disconnect, side visibility, cache invalidation and player-led AI labels after marker performance edits. confirmed
Reverts mark negative knowledge: some plausible improvements were too risky or incomplete. 97da2aeb and 993e8ed5 reverted configurable accelerated day/night cycle; 9424f0c8 reverted Marty_repair_camp_menu; PR #9 "Add endgame music" was closed unmerged; PR #1/#2 merge-separated-codebase attempts were closed. Before reviving reverted/closed work, inspect why it failed in current source and stage it as a small feature branch with smoke evidence. Do not resurrect old branch code wholesale. confirmed
Branch names expose abandoned or risky experiments. Upstream branches include A3_*, Arma2Warfare_GPT, oldMasterBranch, 0=1_*, remove_wasp_change_wheel_car_simulator, AntistackJustMonitoring, AntiStackV6, many dated dev_*/v* branches. Use branches as search leads only. Treat A3/dev/old branches as non-authoritative unless current master or a merged PR confirms behavior. likely
Shared helper fixes often affect AI, players, HC/delegation and generated missions together. 782c9b8a fixed town vehicle crews by changing Common_CreateTeam.sqf in both Chernarus and Vanilla; ea0bff2e marked resistance town defenders across common creation, client delegation, server delegation and town-defense operation files. When touching shared creation/delegation helpers, audit all call families: server-created town AI, client-delegated AI, static defenses, generated mission copies and player purchase analogues. confirmed
LoadoutManager history is release process, not convenience tooling. 7ca05e3e family, zipping/deploy branches, 2a13ce36 7za env-var requirement and d3a2d78d stray .7z cleanup all show release artifacts evolving through fixes. Treat generator output, packaging logs, rollback archives, generated version.sqf and maintained Vanilla propagation as release gates, not optional cleanup after code is "done." confirmed
Map layout fixes often belong in mission.sqm, outside generated-copy comfort. d0a5f642 fixed Rogovo/Bor depot positions in mission.sqm, and map-copy history repeatedly left terrain-specific data outside ordinary source propagation. For map/object/depot/HQ-position defects, inspect mission.sqm and terrain assets directly. LoadoutManager will not safely infer or propagate all editor layout fixes. confirmed

Lesson Records

Supply Run Remote Activation Became A Three-Step Fix

  • Source evidence: PR #10 body says the exploit allowed a player to keep a supply truck next to a remote command center and activate the mission remotely; merge 97dfff26, commits 65fa3332 and 0542edf8, file Client/Module/supplyMission/supplyMissionStart.sqf.
  • Affected subsystem: supply missions, economy, command-center proximity, client action gating.
  • What happened: the first fix blocked the remote activation exploit, then detection reliability was improved, then PR #11 added player feedback when the supply truck was too far away.
  • Why it matters: local action checks were being used as gameplay authority for an economy reward path.
  • Do differently: future supply work should make the server accept/reject mission start from trusted state and keep client checks as UX only.
  • Confidence: confirmed.
  • Follow-up: current wiki already tracks server-owned loaded/tracking state in Supply mission authority cleanup.

JIP Must Be A First-Class Validation Gate

  • Source evidence: PR #12 body says the too-far notification fired when a player spawned in-game; commit b76f9645 changed the same supply start file in Chernarus and Vanilla. Heavy attack mode later moved main logic server-side in b02782f1 explicitly "to avoid JIP issues".
  • Affected subsystem: supply missions, attack wave/heavy attack, client init/update loops.
  • What happened: features that looked correct for already-connected players needed follow-up patches for join-in-progress.
  • Why it matters: OA mission state is a mix of PVEH events, missionNamespace state, local UI loops and server callbacks. New clients do not automatically replay intent.
  • Do differently: every new public variable or action-driven feature should document JIP semantics and include a late-join test.
  • Confidence: confirmed.
  • Follow-up: add explicit JIP smoke rows to feature playbooks when implementation work starts.

Performance Optimizations Need Diagnostics And Gameplay Counters

  • Source evidence: 88e0749a, ff1ea838, 62becdda, 49aa1e53 created/expanded performance audit tooling; 4aaa814a and 6189f3c5 optimized town/camp loops and scan budgeting while adding counters like scanned/skipped towns.
  • Affected subsystem: server town loop, town AI activation, client markers/RHUD.
  • What happened: upstream built measurement tools, then reduced scans, marker churn and activation spikes.
  • Why it matters: blindly slowing loops can break capture responsiveness, town defense activation or markers.
  • Do differently: keep an audit counter for any loop you throttle, and test quiet-map FPS plus active-town behavior.
  • Confidence: confirmed.
  • Follow-up: preserve performance audit parameter documentation and analyzer workflow in the runtime/performance pages.

Town Defense Wakeups Are Not Just Proximity Scans

  • Source evidence: a20a5a0f restored activation from capture scans; 84b1b684 restored pre-capture town defense activation; ea0bff2e ignored units/vehicles/groups marked as resistance town defenders so they do not wake enemy towns.
  • Affected subsystem: town AI, static defenses, capture FSM, delegation.
  • What happened: earlier scan-budget changes needed follow-up fixes so attacked towns still woke reliably and defender units did not create false activations.
  • Why it matters: the town AI activation path balances CPU cost against visible fairness in PvE/TvT capture fights.
  • Do differently: when optimizing town AI, keep separate tests for remote player-led attacks, pre-capture defenders, occupied-town vehicles, and defender bleed into nearby towns.
  • Confidence: confirmed.
  • Follow-up: add town-defense diagnostics to any future town AI smoke plan.

Marker Visibility And Locality Are Easy To Break

  • Source evidence: 9a550b7a reverted an experiment about global group-leader marker vars; 9c72a281 fixed marker tracking after marker cache optimization; 951e72cb fixed stale markers after disconnect; 332874fd fixed town SV marker visibility leaking to both teams.
  • Affected subsystem: client map markers, player/unit labels, town supply-value marker visibility.
  • What happened: marker work went through repeated attempts around scope, cache, side visibility and disconnect cleanup.
  • Why it matters: marker bugs can leak side information or leave stale UI state without obvious server errors.
  • Do differently: marker changes need side-specific visibility checks and reconnect/disconnect cleanup tests, not just FPS or UI appearance tests.
  • Confidence: confirmed.
  • Follow-up: keep marker loop changes routed through Client UI/HUD/menus and Public variable channel index where networked.

Reverted Or Closed Work Is A Warning Label

  • Source evidence: 97da2aeb and 993e8ed5 reverted configurable accelerated day/night cycle; 9424f0c8 reverted Marty_repair_camp_menu; PR #9 "Add endgame music" closed unmerged; PR #1/#2 codebase-merge attempts closed unmerged.
  • Affected subsystem: day/night runtime, repair camp actions, endgame media, repository merge strategy.
  • What happened: some apparently useful features were backed out or abandoned.
  • Why it matters: reverts often indicate runtime, UX, merge-shape or deployment problems not visible from current files alone.
  • Do differently: if reviving reverted work, treat the old branch as a design sketch. Rebuild from current source with a small diff and include the missing validation that the original lacked.
  • Confidence: confirmed for reverts/closures; speculative for exact failure cause when no PR comment explains it.
  • Follow-up: inspect RPT/server notes or owner memory before reviving repair-camp or accelerated day/night variants.

Old Branches Are Leads, Not Authority

  • Source evidence: upstream branch list contains A3 branches (A3_v20240123, A3_0=1_new), experimental branches (Arma2Warfare_GPT, AntistackJustMonitoring, AntiStackV6), and many dated dev_*/v* snapshots.
  • Affected subsystem: repository archaeology, mission-copy divergence, Arma 2 OA compatibility.
  • What happened: upstream preserved many experiments and snapshots that are not merged into current protected master.
  • Why it matters: an AI agent can easily cite or copy stale branch code that conflicts with OA 1.64 or current mission structure.
  • Do differently: prefer current upstream master, merged PRs, and current rayswaynl source. Use unmerged branches only to generate questions or locate abandoned ideas.
  • Confidence: likely.
  • Follow-up: if a branch becomes implementation-relevant, compare it to current master with file-level diffs and note whether it is A3-only, old folder layout, or current OA-compatible SQF.

Practical Rules For Future AI Agents

  1. Start every upstream-history claim with evidence: PR number, commit hash, branch name, file path or a short quoted PR/commit phrase.
  2. Separate confirmed from likely: commit messages and PR bodies prove developer intent; branch names only suggest it.
  3. For supply/economy work, assume client-side action checks are UX until the server recomputes the final effect.
  4. For JIP-sensitive work, write the late-join behavior before proposing code.
  5. For town AI/performance work, preserve gameplay wakeup signals and diagnostics while reducing scan cost.
  6. For marker/UI work, test side leakage, stale markers and disconnect/reconnect behavior.
  7. For generated missions, document Chernarus and Vanilla/Takistan evidence separately.
  8. For reverted or closed work, do not copy it forward without a fresh current-source design and smoke plan.

Deep History Addendum: 2018-2024

This second pass goes further back than the first snapshot. It shows that several "modern" risks are old recurring maintenance patterns, not new accidents.

Lesson Older evidence Affected subsystem What happened Future rule Confidence
Early imports are balance/config baselines, not design proof. 558537c3 initial commit, bb9cd85e import Chernarus, f7bc288c import rest of maps, then 2018 balance edits such as 6e120ebf ICBM enabled on all maps and b66d2681 max supply limit. repository baseline, map copies, balance constants The earliest history is an import plus immediate balance/config changes by mixed authors. Treat 2018 commits as provenance and baseline only; do not infer current intent without later current-source evidence. confirmed
AntiStack/RequestJoin has been brittle since the 2022 rewrite. 09131233 "Fix HORRIBLE typo in command", 841d16af changed CONNECTED_AT_LAUNCH from bool to player side, 88a2ef49 "Fix RequestJoin logic/semantics", 8bf294ac teamswap special-case variable fix. AntiStack, join flow, teamswap Join eligibility and launch-state variables needed repeated semantic fixes immediately after introduction. Before touching AntiStack, map the exact variable type and lifecycle; add join-at-launch, late-join, teamswap and disabled-AntiStack tests. confirmed
Database-backed skill/team logic needs type and load-shedding guards. a103b538 async queries, 448b1d85 string-to-integer database crash, 25cec171 limited retry attempts, 4f9c21d7 fixed double team-score requests taking a toll on the DB, b32babc7 reverted AntistackV6. AntiStack DB, Discord/status integration, player skill Async DB and score logic repeatedly hit type, polling, retry and rollback issues. Treat DB/extension responses as untrusted strings; clamp retries, parse types explicitly, and keep monitoring-only rollout paths. confirmed
Public-variable payload shape mistakes are old and recurring. 680f4191/8036db59 moved side-supply updates server-side, then 33143928 found publicVariable wrapping sent var into an array, 591a217f fixed wrong PVEH array indices, 17b5fb6e fixed flawed client PVEH logic. side supply, PVEH/PVF, economy Server migration was directionally right but still needed several payload-shape fixes. Any server-authority migration must document exact PV/PVEH payload shape and test both sender and receiver parameter arrays. confirmed
Arma 2 OA compatibility failures predate the current docs push. 2a62eaa0 fixed A3 createGroup syntax, c7b17c70 says "Replace name with typeOf (Arma 2 syntax :D)", later commits repeatedly fix isNil, syntax and missing semicolons. SQF compatibility, construction, generated files A3 syntax and modern assumptions have already broken mission scripts. Keep OA 1.64 command/version checks in the review path; never copy A3 branch snippets without compatibility proof. confirmed
Task system removal was intentional and propagated across terrains. b8c66b41/a3e56ca9 removed Warfare task system in 2023; f61f7222 removed task system entirely in 2024; 4881e0d5 removed it from all terrains. task UI, town-capture notifications, generated missions The task system was not merely forgotten; it was removed repeatedly across mission copies. Do not revive tasks as a small UI toggle. Rebuild as a fresh JIP-safe feature or keep it removed. confirmed
Copy/paste and generated-map workflows repeatedly caused boot or syntax failures. 62279d8e ignored version.sqf; 081c1dc4 added copypasted untested modded terrain files; c312b0ec added missions with "copypaste method without running the python script"; 812e9596 removed Tasmania because it was bugged and broke clean-repo loads due to ignored version.sqf. LoadoutManager, version.sqf, modded maps Manual copy workflows and ignored generated files caused clean checkout and map-load failures. Prefer LoadoutManager/generator paths; for every manual map copy, test a clean checkout and generated version.sqf presence. confirmed
LLM/GPT output was useful but produced guesswork and syntax debt. da2fc886 "Add first iteration by GPT prompt", e699cf30 "Add merged Skill_Init arrays with GPT (untested)", a0b891f4 adds Arma2Warfare_GPT system prompt, 24bddb66 fixes "prompting failures/guess work by the LLM". docs, generated guides, code snippets Upstream used GPT for scaffolding, comments, prompts and guides, then had to fix guessed levels/syntax. Use LLM output as a draft only; require source verification for levels, class names, syntax and mission semantics. confirmed
Construction refactors can reintroduce duplication for safety. 1ea99ebb moved HandleSpecial away from construction-site execVM thread; b6a12aec refactored duplicate code away from small/medium construction scripts; 77a07bc0 reverted that duplicate-code refactor. construction, RequestStructure, server threading A neat dedupe was reverted, likely because construction-side effects needed local script context or timing. Do not remove duplication in construction paths unless RequestStructure, small-site and medium-site execution context are all tested. confirmed
Removed/bugged maps are negative knowledge. Tasmania branch history includes boundary disable/fix attempts (fb04d70a, 3104a07f, 72a86849), skip-update commit 50443d75, and final removal 812e9596. modded maps, terrain generation Tasmania was tried, patched, skipped, then removed. Treat removed map folders as hostile evidence, not dormant targets. Re-adding a map requires terrain-specific position/version generation and clean-load smoke. confirmed
Map/UI helper messages need channel discipline. 95a12305 used Marty's marker function to fix UAV marker messages appearing in global chat; cbea9f36, 358e9e6b, d71a9d5d moved teamstack messages through group/command/cutText variants. UAV markers, AntiStack messaging, chat/UI Older history repeatedly adjusted who saw messages and where they appeared. For any notification, specify channel, audience, locality and JIP behavior before implementation. confirmed
FPS/view-distance helpers can fight map-open UI state. a388f073 added automatic view-distance by FPS target; 7e3b9f4c fixed the script starting while the map was open, causing very low view distance and high FPS after closing map; 6eb1cbfa fixed tooltip range values. client FPS optimizer, map UI, view distance A performance helper accidentally reacted to map-open state and left bad runtime settings. FPS optimizer logic must ignore map/menu contexts or restore state after UI transitions. confirmed
AntiStack is a generation of experiments, not one stable module. Branches/commits include upstream/DisableAntiStackByNumbers, upstream/AntistackV6, upstream/AntistackJustMonitoring, 6f1d7af5 monitoring-only, 45cb5192 "Revert all the antistack stuff", 8e2d585b "All the antistack remains gone, forever", and later a201f58b reintroduction. AntiStack, RequestJoin, DB score balancing Enforcement, monitoring, removal and reintroduction all happened in history. Document AntiStack by generation and rollout mode; keep teamswap/session validation separate from skill balancing. confirmed
Disabling AntiStack must not disable teamswap protection. 2624e943 added an AntiStack disable mission parameter, then 6b34b46d fixed teamswap protection when AntiStack was disabled. lobby parameters, RequestJoin, teamswap A broad disable switch bypassed more join validation than intended. Name toggles narrowly and test disabled-AntiStack with teamswap, launch join and late join. confirmed
Score persistence is part of AntiStack correctness. fc55456c saved player score on disconnect; b69b901e set disconnected side to NONE; 8b1e220b fixed disconnect-side logic; 8b8ea8e7 stopped score DB update loops when match ends; b31539b4 and c9a93263 moved score logic server-side. score, DB persistence, AntiStack team totals Stale side values, duplicate update loops and score authority all feed team-balance inputs. Treat score mutation and disconnect cleanup as AntiStack dependencies, not separate chores. confirmed
Client init flags are lifecycle contracts. 3ff02aea on 0=1_InitClientFix moved clientInitComplete = true to the true end of Client/Init/Init_Client.sqf after a merge lost the fix. JIP, client init, PV/UI setup The flag could be set before the client had finished registering state. Place init-complete flags after PV registration, UI release, player variables and town/map setup; diff generated maps for placement. confirmed
UI globals and nil/null mistakes were recurring client bugs. c6d2539e replaced global MenuAction with private _menuAction; 5b056013 added gear-template isNil guards; 5de4d1a2 changed CoIn preview checks from isNull to isNil. buy units, gear templates, CoIn construction UI Long-running UI loops reused global state and confused undefined variables with null objects. Keep dialog action state private; validate list row data before namespace lookups; use isNil only for maybe-uninitialized values. confirmed
Marker optimizations must not freeze or leak marker state. 9795f317/a074319b added marker helpers; b7bdb70b commented HQ wreck markers as heavily bugged; 6e5b3c50 marker caching was followed by 9c72a281 restoring marker movement; 95a12305 fixed UAV marker global-chat leakage. markers, side visibility, AAR/team/HQ/UAV UI Marker creation, side audience, moving-object updates and cache keys repeatedly regressed. Centralize marker APIs; cache text/type separately from position; test JIP, side visibility, moved objects and disconnect. confirmed
Branch names can be tombstones, not revival invitations. upstream/oldMasterBranch tip 3a7972a2 says "Remove files from the master branch (use the Main branch)"; upstream/RevertedTo2018Version tip 44abda43 is only a test commit; A3 branches were later purged by 83298186. branch archaeology, release baselines Some old refs are deleted snapshots, experiments or foreign-port imports. Mine old branches for intent only; never treat tombstone/A3/debug branches as current source without revalidation. confirmed
Merged work can still be negative knowledge. PR #3 "Add increasing cost of repairing HQ" merged then 346e3be8 reverted it; PR #9 "Add endgame music" closed unmerged; f10d5bd9 and 8d74c332 reverted bomb restriction/debug work; 31d8a06d reverted cheaper nukes test pricing. HQ repair, audio/endgame, bomb logic, nuke economy Merge status alone did not mean a design survived. Check later reverts and branch names like Test, Debug, RevertLater before reviving an idea. confirmed
Removing a structure or system reaches AI/FSM/delegation code. 16856ae7, 8b7fab95, 4e45acad removed guerilla barracks across init, resistance FSM, HC delegation and buy-unit code; f61f7222/4881e0d5 removed task code across terrains but later e9685b04/1d017dec still cleaned residue. guerilla barracks, task system, HC AI, camera/spectator Removals required follow-up outside the obvious init file. Grep client, server, camera, FSM, HC delegation and generated map copies before declaring a feature removed. confirmed
Supply performance fixes can accidentally switch authority context. 7bc4b7ac was reverted by 3c2efb8a; 008ac5aa was reverted by 33fb2676; history notes server-side supply logic checking getPos player instead of the truck position. supply missions, runtime performance, locality Optimization attempts moved checks but used the wrong implicit object context. Optimize around authoritative mission objects, not globals like player; dedicated-server and JIP tests are mandatory. confirmed

Deep-History Follow-Ups

  • Add AntiStack-specific smoke cases to future DB or team-balance PRs: launch join, late join, disabled AntiStack, teamswap, DB unavailable and double-request prevention.
  • Treat version.sqf and generated mission files as a release gate, because older clean-repo failures were tied to ignored/generated mission metadata.
  • Keep the Task System listed as intentionally removed unless a new owner writes a JIP-safe replacement design.
  • When reviving old branch ideas, check whether they came from A3_*, GPT/LLM, copied terrain or reverted construction/map branches before trusting the snippet.
  • Add clean-checkout bootstrap and generated-output validation to release notes before map or LoadoutManager changes.
  • Treat marker, UI and client-init fixes as lifecycle/API contracts: do not optimize them without preserving audience, object position, JIP and init-complete semantics.
  • For old branches, capture the branch family first (A3_*, AntiStack*, Debug, Test, oldMasterBranch, RevertedTo2018Version) before interpreting any commit as reusable.

Second-Wave Deep Dive: PR Afterlife And Dormant Branches

This pass used five read-only specialist agents to go below the first commit-history layer: PR bodies/titles, branch-only commits, tooling/deployment history, economy/ordnance reversions, and AI/HC/performance experiments. Branch-only evidence is useful negative knowledge, but it is not current-source authority unless noted.

Highest-Value Dormant Branch Leads

Branch Evidence Why it matters Future rule
upstream/commonbalanceinit_Old, upstream/AirReworkTestBranch tips 37e08f33, 9973ef27; branch-only histories around AV8B pylons, Hellfire validation, A-10C generated loadouts Aircraft/loadout generator rules were discovered through many fixes, not one stable design. Keep tool data, EASA rows, labels/prices and Common_BalanceInit.sqf in one generated-change unit.
upstream/AutomationSystems 25f2b5ab; restart work moved from direct RESTARTSERVER callExtension toward backend/pipe process, absolute paths, delays and priority timing Long-running ops work inside the game extension path was brittle. callExtension should hand off long-running restart/deploy work to an external process and log aggressively.
upstream/HeadlessClientMultithreading a241ac75, 6760f1a3, bb01ebfc, 1d79ba2a, 6b90c872, f5e8fa47 plus HC upstream history Multi-HC work needed role-specific slots, typed HC pools, side-less client-call filtering, generated mission slot propagation and static-defense routing. Treat HC work as a routing protocol change, not a simple AI offload.
upstream/Tournament_SideSpeakerWIP tip 8ddeb502 says civilian side speaker "currently broadcasts to all players...?" Spectator/tournament UX can leak to the wrong audience. Side/channel/audience must be part of spectator feature design.
upstream/MgNestRestriction branch-only fixes moved logic from the wrong if block and changed class checks to isKindOf Static-defense restrictions were easy to place in the wrong class path. Prove Chernarus/Takistan logic before map-wide propagation.
upstream/BlinkingDone, upstream/WorkingBlinking, upstream/BlinkingMapIconsV2 Dec 2025 marker-blinking chain includes 2f6ff43d, 9a550b7a, 9c1fe110 and many debug/fix commits Blinking touched event handlers, local/global vars, vehicle firing and color restoration. Keep blinking off by default unless lifecycle cleanup is proven.

Added Lessons

Lesson Evidence Affected subsystem What happened Future rule Confidence
PR comments were empty, so PR bodies/titles and afterlife commits carry the evidence. GitHub PR #1-#12 had no issue/review comments; useful evidence came from PR titles/bodies and afterlife commits. upstream archaeology The PR surface is sparse; the history is in merge/revert commits and file diffs. Do not claim comment-based intent unless comments exist; cite PR title/body plus commit afterlife instead. confirmed
Closed PRs can still leave landed commits. PR #1 body says "huge merge between separated codebases"; PR #2 says "correct folder structure"; related commits include 96809ac3, 7a38af51, 01ea8db4. repo topology, DiscordBot submodule, merge strategy Closed broad-merge PRs were not complete non-events; pieces persisted elsewhere. Check git branch --contains for individual commits before calling closed PR work abandoned. confirmed
PR #4 latest-factory spawn needed type filtering later. PR #4 / 38b662aa; later 6eb09dc3 scanned backward for Barracks/Light/Heavy/Aircraft. JIP spawn, structures "Latest structure" was too broad for player spawn routing. Spawn logic must filter by wfbe_structure_type; array order is not a contract. confirmed
PR #5 supply runs needed lobby and init follow-through. PR #5 / d086863c says class descriptions were still missing; follow-up e3ec8a17; current duplicate Skill_Init.sqf calls noted in Init_Client.sqf. supply mission, mission.sqm, client init Feature code landed before all role metadata and init-idempotence concerns were settled. Role-gated features must update mission.sqm, stringtable.xml, generated missions and init duplication checks together. confirmed/likely
Profile-backed UI toggles outlive the match. PR #6 / 670ecb6c stored buy-units driver preference in profileNamespace. Buy Units UI, player preferences A purchase/menu behavior became persistent local state. Profile-backed toggles need explicit defaults, visible refresh and cost/crew-count validation. likely
HQ repair price escalation was reverted until server-owned. PR #3 / 7cd0e18d, revert 346e3be8, merge 59a995e8, a855081d; current Action_RepairMHQ.sqf still mutates client-side repair count/price. MHQ repair economy Increasing HQ repair prices touched client action scripts and was flattened back to 25k. Move repair count, affordability, debit and acceptance server-side before adding repair economics. confirmed
75k nukes are live-test data, not balance truth. 5db438ca changed ICBM fee to 75k "for testing ... on the live server"; 31d8a06d reverted it. ICBM economy A broad test discount was propagated then backed out. Never revive 75k ICBM price from history without explicit owner live-test approval. confirmed
Nuke pricing churn did not fix ICBM authority. Current nukeincoming.sqf sends RequestSpecial and tactical debits still run through client GUI paths; DR-27 records server validation gap. ICBM authority Price/radius/effect history did not move authority to server. Server must validate commander/team, side, funds, upgrade, cooldown and debit before spawning ICBM effects. confirmed
Maverick/Spike and bomb branches are ordnance experiments, not current truth. 67886498 used extreme Maverick parameters; 4720880a mass-replaced Mavericks with Spikes in generated output; 0c14f001, 82fbab1f, bc5f23d5, 7fddb251 show bomb workaround churn. aircraft ordnance, EASA, bomb limits Branch names suggest clean policy, but current master and history show partial experiments and reversions. Inspect current EASA/handler values and runtime-test GBU/unguided/lock-on behavior before changing ordnance. confirmed
Score and bounty changes feed AntiStack, not just the scoreboard. f17445c1, b31539b4, cc127ef4, 415615c9; current score changes route through server/PVF paths and DB skill uses score. score, bounty, AntiStack skill, economy Score authority and bounty edge cases were fixed while score also became a skill/team-balance input. Review every score award as economy plus AntiStack input; handle score <= 0, teamkills, self-kills and building kills explicitly. confirmed
Skill-diff compensation rides on a still-risky supply channel. upstream/SkillDiffCompensation adds DB skill polling and ChangeSideSupply; current Common_ChangeSideSupply.sqf still publishes wfbe_supply_temp_<side>. AntiStack compensation, side supply Team skill now affects side supply while side-supply mutation remains a known direct-PV risk. Do not expand compensation until side supply is server-authoritative or direct-PV mutation is hardened. confirmed
Current packaging is Chernarus plus generated Vanilla/Takistan, not modded maps. ZipManager.cs packages Missions and Missions_Vanilla; Modded_Missions is commented out; earlier 0ffc3cb8 still had all three. release packaging, generated maps Modded generation/packaging was disabled or left TODO after earlier inclusion. State packaging scope explicitly; do not promise modded map release artifacts without re-enabling and testing propagation. confirmed
LoadoutManager packaging has Windows/env/file-lock traps. 2a13ce36 requires env var 7za; 3458e714 replaced overwrite copy with stream copy plus IOException logging; 0ffc3cb8 moved temp zip dir under repo root; d3a2d78d removed stray .7z; current ZipManager.cs deletes existing _MISSIONS.7z before it proves the new archive. tooling, release zipping, Windows paths Generation and packaging can partially succeed while file copies or archive writes fail, and a failed package run can remove the previous archive. Inspect tool output and git diff --stat; keep rollback copies; missing or failing 7za is packaging failure, not necessarily generation failure. confirmed
version.sqf load order is a config contract. .gitignore ignores version.sqf; generator writes it; 6d380c22 moved parameters before it, then 0fd730b0 reverted; 24f4656f added admin override for IS_AIR_WAR_EVENT. mission config, generated defines Generated defines and mission parameters had real ordering conflicts. Change generator inputs, not ignored version.sqf; smoke description.ext include order after config changes. confirmed
Takistan map identity needed generator-side post-copy repair. aa3f0451 added Takistan DB map ID; f095e461 added EnsureTakistanInitServerUsesCorrectMapId() because copy generation overwrote it. generated maps, DB map ID Terrain-specific server init values were stomped by source-map copy. Put terrain-specific literals into generator post-copy logic, not manual generated-folder edits. confirmed
PersistanceDB removal does not mean extension risk is gone. 0d0ac310 removed Server/Module/PersistanceDB/* for callExtension errors; current AntiStack and GlobalGameStats still use callExtension families. persistence, AntiStack DB, global stats One persistence module is a tombstone, but extension-backed systems remain live. Distinguish removed PersistanceDB from current A2WaspDatabase and a2waspwarfare_Extension deployment needs. confirmed
Sound config generation has a filename contract. a31cfdb4 added automated sound config; current generator splits .ogg names on -; e2d23d00 removed merged sounds after LoadoutManager processing issues. sound assets, description.ext, LoadoutManager Audio files became generator inputs with strict naming assumptions. New sounds need ClassName-volume.ogg naming and generated Sounds/description.ext inspection. confirmed
Town activation must happen before capture pressure. a20a5a0f moved activation to capture detection; 84b1b684 restored pre-capture scans; ea0bff2e tags town defender AI. town AI, resistance defenders Capture-scan wakeups were too late and defender AI needed exclusion tags. Preserve pre-capture activation and tag defender units/crews/vehicles/groups across server and HC paths. confirmed
HC work needs update-back accounting, not only delegation. HeadlessClientMultithreading branch commits a241ac75, 6760f1a3, bb01ebfc, 1d79ba2a, 6b90c872, f5e8fa47; current DR-42 notes static-defense update-back gaps. See HC upstream history. headless client, static defenses Branch work solved routing pieces but accounting/update-back remains a known smell; map-copy commits also show scripts can propagate before mission.sqm slots are complete. Every HC delegation path needs typed routing, fallback, side-less HC tests, server update-back and generated mission slot verification. confirmed/likely
Marker blinking is intentionally default-off negative knowledge. Dec 2025 chain includes 2f6ff43d, 9a550b7a; 9c1fe110 adds mission-wide default WFBE_C_MAP_ICON_BLINKING_ENABLED = 0 and rejects per-player toggles due EH cleanup complexity. marker blinking, event handlers, performance Many attempts fought color restoration, global/local vars and vehicle firing edge cases. Do not add per-player blinking toggles without a full EH ownership and teardown registry. confirmed
Cleanup/despawn bugs are array-shape and ownership bugs. 95481b37 fixed mines = mines - _x to mines - [_x] and added wfbe_trashed; DR-45 flags town-AI vehicle despawn occupancy risk. cleanup, despawn, low-FPS cadence Cleanup could leak stale pairs, duplicate coroutines or delete player-occupied AI vehicles. Validate array shape, idempotency marker, full crew/player occupancy and low-FPS cadence behavior. confirmed
AI commander revival remains branch evidence until merged and smoked. Local feat/ai-commander head 4dba060e builds on 585c3519, 1a3e3def and 4c2abced: default-on parameter, server-side supervisor, assign-types/assign-towns/produce workers, upgrade-cost indexing fix and explicit order executor. AI commander Branch work may revive latent AI commander, but it is Chernarus-only branch evidence and not stable-master truth. Keep docs split between current-source status and branch experiment until merged, propagated and tested; smoke no-human full command, human-commander assist, order execution, production cap, upgrade funds/supply and commander handoff. confirmed branch-only

Second-Wave Follow-Ups

  • Build compact branch-only appendices for AutomationSystems, AirReworkTestBranch, marker blinking and HQ repair afterlife before reviving those systems; the HeadlessClientMultithreading appendix now lives at HC upstream history and lessons.
  • Add release-tooling checks for 7za, _MISSIONS.7z overwrite behavior, version.sqf generation, Takistan map ID and sound filename contracts.
  • Treat score, bounty, ICBM, HQ repair and skill-diff compensation as one economy/AntiStack risk surface until server authority boundaries are hardened.
  • Add town-defense smoke cases for remote attack, pre-capture approach, capture-in-progress, defender bleed-over and aircraft fly-by before changing town scans.
  • Keep feat/ai-commander and other local branch work documented as branch-only until it appears in upstream/current source and passes generated-mission smoke.

Continue Reading

Evidence index: Upstream Miksuu commit intel | HC appendix: HC upstream history | Risks: Feature status register | Runtime: Server gameplay runtime atlas | Supply: Supply mission authority cleanup

Sidebar

Clone this wiki locally