{"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-ai-respawn-branches-2026-06-03","topic":"ai-respawn-orders","summary":"AI respawn has separate vanilla and non-vanilla implementations; feature work must source-check and smoke both branches or explicitly scope one out.","sourceRefs":["Server/Init/Init_Server.sqf:10-12","Server/AI/AI_AddMultiplayerRespawnEH.sqf:1","Server/AI/AI_AdvancedRespawn.sqf:55-125","Server/AI/AI_SquadRespawn.sqf:14-21,53-110","Client/GUI/GUI_Menu_Command.sqf:356,439-442"],"wikiTargets":["Respawn-And-Death-Lifecycle-Atlas","AI-Headless-And-Performance","Testing-Debugging-And-Release-Workflow"],"status":"accepted-smoke-plan-published","confidence":"high","nextAction":"Run vanilla and non-vanilla Arma 2 OA AI leader death/respawn smoke before claiming runtime proof."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-team-order-public-vars-2026-06-03","topic":"ai-orders-authority","summary":"Commander map-order UI writes replicated group variables through common setters, but static source search found no general server executor that consumes wfbe_teammode/wfbe_teamgoto into the AI waypoint helpers; team property updates are a separate live PVF and SetTask sends are dormant.","sourceRefs":["Client/GUI/GUI_Menu_Command.sqf:252-306","Client/GUI/GUI_Menu_Command.sqf:335-337,343","Client/GUI/GUI_Menu_Command.sqf:425-428","Common/Functions/Common_SetTeamMoveMode.sqf:8","Common/Functions/Common_SetTeamMovePos.sqf:8","Server/Init/Init_Server.sqf:13-18","Server/Support/Support_Paratroopers.sqf:92,122","Server/Support/Support_ParaAmmo.sqf:38,96","Server/Support/Support_ParaVehicles.sqf:39,78","Server/AI/AI_Resistance.sqf:14-16","Server/AI/AI_SquadRespawn.sqf:105-109","Server/AI/AI_AdvancedRespawn.sqf:120-124"],"wikiTargets":["AI-Headless-And-Performance","AI-Commander-Autonomy-Audit","Feature-Status-Register","Player-UI-Workflow-Map","Development-Lessons-Learned"],"status":"accepted-executor-not-proven-source","confidence":"high","nextAction":"Run Arma 2 OA commander Move/Patrol/Defense/Take Towns smoke before treating map-order variables as working executor state or hardening them as an authority path."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-cleanup-client-fed-server-queues-2026-06-03","topic":"cleanup-empty-vehicles","summary":"Some server cleanup loops drain replicated variables written by clients; queue fixes must be idempotent under repeated publication and hosted/dedicated locality.","sourceRefs":["Server/Init/Init_Server.sqf:521-560","Server/FSM/emptyvehiclescollector.sqf:4-30","Client/Functions/Client_BuildUnit.sqf:252-253","Server/Functions/Server_HandleEmptyVehicle.sqf:33"],"wikiTargets":["Marker-Cleanup-Restoration-Systems-Atlas","Testing-Debugging-And-Release-Workflow"],"status":"accepted-cadence-checklist-published","confidence":"high","nextAction":"Before cleanup queue patches, smoke repeated client publication and hosted/dedicated locality; use emptyvehiclescollector RPT rows to confirm queue size/handled count."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-cleanup-array-shapes-2026-06-03","topic":"cleanup-garbage-mines","summary":"Cleanup patches must cite producer and consumer array shapes; current mine cleanup removes nested pairs with a flat subtraction shape and garbage flags use different variable names.","sourceRefs":["Server/FSM/server_collector_garbage.sqf:17","Server/PVFunctions/RequestOnUnitKilled.sqf:50-54","Server/FSM/cleaners/mines_cleaner.sqf:3-32","WASP/rpg_dropping/DropRPG.sqf:65-68","Server/Construction/Construction_StationaryDefense.sqf:31-55"],"wikiTargets":["Marker-Cleanup-Restoration-Systems-Atlas","Feature-Status-Register","Development-Lessons-Learned"],"status":"accepted-atlas-patch-ready-published","confidence":"high","nextAction":"Patch garbage flag alignment and mine pair removal as correctness work; collect cleaner_mines/server_garbage_collector RPT rows before any cadence tuning."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-config-derived-tables-2026-06-03","topic":"config-data-model","summary":"Config edits propagate through root faction files, gear registries, loadout templates, side/factory unit arrays, AI squads/loadouts, upgrade levels, derived prices and generated missions.","sourceRefs":["Common/Config/readme.txt:7-65","Common/Init/Init_Common.sqf:263-308","Common/Init/Init_Common.sqf:325-367","Common/Config/Config_Weapons.sqf:12-44","Common/Config/Config_Magazines.sqf:11-34","Common/Config/Config_Backpack.sqf:11-65,70-82","Common/Config/Config_SetTemplates.sqf:33-123","Common/Config/Core_Root/Root_US.sqf:13-17,69-117,128-137","Common/Config/Core_Structures/Structures_CO_US.sqf:10,20,103-113"],"wikiTargets":["Assets-Config-Localization-And-Parameters-Atlas","Tools-And-Build-Workflow","Testing-Debugging-And-Release-Workflow"],"status":"accepted-checklist-published","confidence":"high","nextAction":"Use the config data-model checklist before content edits; run runtime smoke and LoadoutManager propagation for actual class/asset changes."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-module-runtime-edge-2026-06-03","topic":"module-wiring","summary":"Module patches must identify whether the runtime edge is boot init, respawn reapply, unit creation attach, PV/PVF event or server loop; smoke that edge rather than only the edited module file.","sourceRefs":["Client/Init/Init_Client.sqf:127-135","Client/Init/Init_Client.sqf:570-589","Common/Init/Init_Common.sqf:319-323","Client/Functions/Client_BuildUnit.sqf:275-283","Client/Functions/Client_BuildUnit.sqf:336-356"],"wikiTargets":["Modules-Atlas","Testing-Debugging-And-Release-Workflow","Development-Lessons-Learned"],"status":"accepted-runtime-edge-checklist-published","confidence":"high","nextAction":"For future module edits, cite the owning runtime edge and smoke that edge; do not reopen this generic proposed lesson unless a new module family lacks routing."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-direct-pv-economy-helper-2026-06-03","topic":"economy-authority","summary":"Shared economy mutation helpers can publish direct publicVariable payloads; side-supply fixes must clamp arithmetic, validate channel/side/shape and then move spend authority server-side instead of treating signed amount checks as sufficient.","sourceRefs":["Common/Functions/Common_ChangeSideSupply.sqf:24-30","Server/Functions/Server_ChangeSideSupply.sqf:4-13","Server/Functions/Server_ChangeSideSupply.sqf:28-37","Server/Functions/Server_PV_RequestSupplyValue.sqf:1-8"],"wikiTargets":["Economy-Authority-First-Cut","Server-Authority-Migration-Map","Public-Variable-Channel-Index","Development-Lessons-Learned"],"status":"accepted","confidence":"high","nextAction":"When side-supply code is patched, smoke normal positive rewards, normal negative spend, overspend floor-to-zero and west/east channel mismatch rejection."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-wait-gates-producer-timeout-evidence-2026-06-03","topic":"lifecycle-bootstrap","summary":"Lifecycle waitUntil gates must be documented with both consumer and producer refs; retrying 30-second join handshakes are different from raw replicated-variable waits with no timeout/log fallback.","sourceRefs":["Client/Init/Init_Client.sqf:367-371","Client/Init/Init_Client.sqf:416-456","Client/Init/Init_Client.sqf:461-490","Client/Init/Init_Client.sqf:595","Client/Init/Init_Client.sqf:787-789","Server/Init/Init_Server.sqf:356-413","Common/Init/Init_Towns.sqf:13"],"wikiTargets":["Lifecycle-Wait-Chain","Development-Lessons-Learned"],"status":"accepted","confidence":"high","nextAction":"Before changing lifecycle waits, update Lifecycle-Wait-Chain with consumer, producer, timeout/retry behavior and failure signal, then smoke normal join and JIP paths."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-nav-agent-context-integrated-2026-06-03","topic":"agent-documentation-navigation","summary":"Development-Lessons-Learned.md and agent-development-lessons.jsonl are already exposed through Home, _Sidebar, Agent-Context and agent-context.json; future agents should add new implementation lessons instead of reopening the integration task.","sourceRefs":["docs/wiki/Home.md:10,33,76,100,102","docs/wiki/_Sidebar.md:10,12,119,121","docs/wiki/Agent-Context.md:3,11,13,75","docs/wiki/agent-context.json:69,87,141,163-185,479-480,1205"],"wikiTargets":["Development-Lessons-Learned","Home","Agent-Context","agent-context.json"],"status":"accepted-navigation-integrated","confidence":"high","nextAction":"Keep new durable implementation lessons mirrored between Development-Lessons-Learned.md and agent-development-lessons.jsonl; run link and JSON validation after edits."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-machine-ledgers-need-branch-scope-2026-06-03","topic":"agent-ledger-branch-scope","summary":"Machine ledgers must name the branch/commit and Chernarus/Vanilla coverage for patched, propagated or release-ready wording. The 2026-06-03 matrix showed docs/source carries four propagated fixes, stable master carries none of them, and release a9219d88 is only partial for FPS/supply while lacking Skill_Init/paratrooper registration.","sourceRefs":["Current-Source-Status-Snapshot.md#2026-06-03-branch-matrix","agent-release-readiness.json#branchScope","Feature-Status-Register.md","Source-Fix-Propagation-Queue.md"],"wikiTargets":["Development-Lessons-Learned","agent-release-readiness.json","agent-feature-status.jsonl","agent-hardening-backlog.jsonl","agent-context.json","agent-entrypoint.json"],"status":"accepted-branch-scope-guardrail-published","confidence":"high","nextAction":"Before future source-status or release-readiness claims, cite target branch/commit plus Chernarus and maintained Vanilla line-shape proof; otherwise mark the record as branch-unverified."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-revival-branches-need-default-propagation-smoke-labels-2026-06-03","topic":"branch-revival-status","summary":"Dormant-feature revival branches can be high-value without being stable truth. feat/ai-commander head c20ce153 adds supervisor/workers/order execution and default-on AI commander behavior, and the latest cleanup series rewrites lazy condition blocks across the five AI commander scripts. It remains source-Chernarus-only and only guards the old supply-truck nil spawn.","sourceRefs":["origin/feat/ai-commander@c20ce153","origin/master@2cdf5fb8","origin/master..origin/feat/ai-commander: 9 files +416/-5","lazy-condition cleanup series b4b0333f..c20ce153","Rsc/Parameters.hpp:96","Server/Init/Init_Server.sqf:49-54,630-631","Server/AI/Commander/AI_Commander.sqf:42-78","Server/AI/Commander/AI_Commander_Produce.sqf:77-90","Server/Init/Init_Server.sqf:387-389"],"wikiTargets":["Development-Lessons-Learned","AI-Commander-Autonomy-Audit","Feature-Status-Register","Developer-History-And-Upstream-Lessons"],"status":"accepted-branch-revival-guardrail-published","confidence":"high","nextAction":"Before calling AI commander revived, prove default behavior choice, Chernarus plus Vanilla propagation and smoke for full command, assist mode, order execution, production cap, upgrade costs, commander handoff, HQ death and JIP.","updated":"2026-06-04T16:05:00+02:00"} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-smoke-plans-are-not-runtime-proof-2026-06-04","topic":"release-readiness-evidence","summary":"A planned smoke pack is a checklist, not evidence. Branch-only feature gates for AI commander, DroneStrike and ReconUAV must remain planned-not-run until a tester records target branch/commit, mission variant, server mode, params, RPT/manual evidence and failure-signal review.","sourceRefs":["Testing-Debugging-And-Release-Workflow.md#branch-only-feature-smoke-pack","agent-release-readiness.json#branchOnlyFeaturePromotionGates","agent-test-plan.schema.json"],"wikiTargets":["Development-Lessons-Learned","Testing-Debugging-And-Release-Workflow","agent-release-readiness.json"],"status":"accepted-planned-smoke-guardrail-published","confidence":"high","nextAction":"When runtime testing happens, add agent-test-plan records or equivalent evidence before changing any planned smoke gate to passed, failed, blocked or release-ready."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-dark-launched-integration-ops-gates-2026-06-03","topic":"integration-release-readiness","summary":"Dark-launched integration branches need two labels: safe when disabled and safe to enable. feat/player-stats is off by default and DiscordBot tests pass 13/13, but public enablement still needs Arma RPT smoke, privacy/UID policy, file/state ownership, corrupt stats.json recovery, log-volume review and Vanilla/Chernarus scope decisions.","sourceRefs":["origin/feat/player-stats@e01e47e1","Init_CommonConstants.sqf:443-459 on feat/player-stats","RecordStat.sqf:9-10,31-32 on feat/player-stats","StatsFlush.sqf:6-7,48 on feat/player-stats","Preferences.cs:16-20 on feat/player-stats","StatsService.cs:17-23 on feat/player-stats","RptTailer.cs:24-45,57-71 on feat/player-stats","StatsDocument.cs:22-40 on feat/player-stats","local dotnet test DiscordBot.Tests/DiscordBot.Tests.csproj passed 13/13 on .NET 9.0.314"],"wikiTargets":["Development-Lessons-Learned","Player-Stats-Branch-Audit","Feature-Status-Register","agent-release-readiness.json"],"status":"accepted-branch-integration-guardrail-published","confidence":"high","nextAction":"Before enabling branch-only stats, record disabled/enabled Arma smoke, bot restart/tail-state smoke, RPT rotation smoke, privacy policy and Chernarus/Vanilla propagation decision."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-broad-feature-branches-payload-baggage-propagation-2026-06-04","topic":"branch-review-discipline","summary":"Broad feature branches need three separate labels before merge/release claims: feature payload, branch baggage and propagation scope. origin/feat/commander-positions head 560db61c has source-Chernarus WDDM commander-position construction, but the branch is 83 files with unrelated Valhalla/UI/AFK/HC/perf deltas and no maintained Vanilla Server_ConstructPosition or WFBE_POSITION_TEMPLATE_MAP hits.","sourceRefs":["origin/feat/commander-positions@560db61c","merge-base f5985b77 versus origin/master@2cdf5fb8","origin/master..origin/feat/commander-positions: 83 files +524/-2025","Missions/[55-2hc]warfarev2_073v48co.chernarus/Common/Config/Core_Structures/Structures_CO_US.sqf:168-174 on feat/commander-positions","Missions/[55-2hc]warfarev2_073v48co.chernarus/Common/Config/Core_Structures/Structures_CO_RU.sqf:166-172 on feat/commander-positions","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Init/Init_Defenses.sqf:93-183 on feat/commander-positions","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Functions/Server_ConstructPosition.sqf:1-66 on feat/commander-positions","git grep no Server_ConstructPosition or WFBE_POSITION_TEMPLATE_MAP under Missions_Vanilla/[61-2hc] on feat/commander-positions","git diff --check origin/master..origin/feat/commander-positions reports source trailing whitespace"],"wikiTargets":["Development-Lessons-Learned","Commander-Positions-Branch-Audit","Feature-Status-Register","Pending-Owner-Decisions","agent-release-readiness.json"],"status":"accepted-branch-review-guardrail-published","confidence":"high","nextAction":"Before merging broad feature branches, extract or audit unrelated deltas, clean static-check failures, name Chernarus/Vanilla/generated propagation explicitly and smoke the owning runtime path."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-head-drift-notes-need-current-tables-2026-06-04","topic":"branch-review-discipline","summary":"When a branch page says older line refs are superseded by a newer head, refresh the canonical table and adjacent status/machine rows. The PR #1 supply-heli page needed current-head rows for 262dc431, which also surfaced retained SupplyByHeli state after completion.","sourceRefs":["origin/feat/supply-helicopter@262dc431","Rsc/Parameters.hpp:4-10 on feat/supply-helicopter","Init_CommonConstants.sqf:168-180 on feat/supply-helicopter","Skill_Apply.sqf:62-72 on feat/supply-helicopter","supplyMissionStart.sqf:16-60 on feat/supply-helicopter","supplyMissionStarted.sqf:7-30,42-60,93-95 on feat/supply-helicopter","supplyMissionCompleted.sqf:24-41 on feat/supply-helicopter","No SupplyByHeli/WFBE_C_SUPPLY_HELI/wfbe_supply_killed_eh_set hits under maintained Vanilla on feat/supply-helicopter"],"wikiTargets":["Development-Lessons-Learned","Current-Work-Supply-Helicopters-PR1","Supply-Mission-Architecture","Feature-Status-Register","agent-release-readiness.json"],"status":"accepted-current-head-table-refresh-published","confidence":"high","nextAction":"For future branch head drift, replace old line tables with current-head evidence before using a page for merge/release gates."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-map-branches-need-static-and-runtime-done-states-2026-06-03","topic":"map-release-readiness","summary":"Terrain/map branches need separate static-validation, runtime-playability and balance-policy states. origin/feature/zargabad-map head e9294ede passes Tools\\Validate-ZargabadMission.ps1 with layout/object/sync/count/value invariants and also carries tuned low-pop defaults, but Guides/Zargabad-Completion-Gates.md still requires hosted/dedicated/JIP/HC Arma 2 OA evidence, screenshots and runtime report validation before playable/maintained claims.","sourceRefs":["origin/feature/zargabad-map@e9294ede","Tools/Validate-ZargabadMission.ps1 passed locally in detached worktree at e9294ede","Common/Init/Init_CommonConstants.sqf:422,426,428-430,436-439 on feature/zargabad-map","Missions_Vanilla/[31-2hc]warfarev2_073v48co.zargabad/Rsc/Parameters.hpp:56,62,164,176,230,284-296,314,363,369,387 on feature/zargabad-map","Guides/Zargabad-Completion-Gates.md:8-20 on feature/zargabad-map","Tools/Validate-ZargabadRuntimeReport.ps1:285,332,346-363 on feature/zargabad-map"],"wikiTargets":["Development-Lessons-Learned","Zargabad-Branch-Audit","Feature-Status-Register","agent-release-readiness.json"],"status":"accepted-map-release-guardrail-published","confidence":"high","nextAction":"For future terrain branches, record static validation, runtime evidence and balance default ownership separately; avoid release-ready wording until static, runtime and owner policy are all proven."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-small-fix-branches-need-payload-tables-2026-06-03","topic":"branch-review-discipline","summary":"Small fix branches need payload tables too. origin/perf/quick-wins head 0076040f is only 18 files and git diff --check clean, but it crosses economy, factory, networking, server-loop, camp, bounty and WASP action ownership while remaining source-Chernarus-only. Future agents should not treat a branch named perf/quick-wins as just performance work.","sourceRefs":["origin/perf/quick-wins@0076040f","origin/master..origin/perf/quick-wins: 18 files +27/-27","git diff --check origin/master..origin/perf/quick-wins clean","git diff --name-only origin/master..origin/perf/quick-wins -- Missions_Vanilla returns no changed files","Common_ChangeSideSupply.sqf:25 on perf/quick-wins","Server_ChangeSideSupply.sqf:12,36 on perf/quick-wins","Client_BuildUnit.sqf:366-368 on perf/quick-wins","Init_PublicVariables.sqf:40 on perf/quick-wins","updateresources.sqf:74 on perf/quick-wins","Server_HandleSpecial.sqf:235-236 on perf/quick-wins","RequestOnUnitKilled.sqf:92 on perf/quick-wins"],"wikiTargets":["Development-Lessons-Learned","Perf-Quick-Wins-Branch-Audit","Feature-Status-Register","agent-release-readiness.json"],"status":"accepted-branch-review-guardrail-published","confidence":"high","nextAction":"Before merging compact fix branches, classify every hunk by subsystem and propagation scope, then smoke each runtime edge instead of trusting the branch name or static diff size."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-ui-qol-branches-need-final-control-smoke-2026-06-03","topic":"ui-branch-review","summary":"UI QoL branches need final-control smoke. origin/feat/buymenu-easa-qol head a66d4691 changes only three UI files, but visible behavior depends on list-fill timing, later idc 12034 writes, crew toggles, row filtering and live missionNamespace queue variables. Static hunk review is useful but not enough to claim UX behavior works.","sourceRefs":["origin/feat/buymenu-easa-qol@a66d4691","Client_UIFillListBuyUnits.sqf:1,61-62,104 on feat/buymenu-easa-qol","GUI_Menu_BuyUnits.sqf:201-210,280,335,388,444,487 on feat/buymenu-easa-qol","GUI_Menu_EASA.sqf:29-40 on feat/buymenu-easa-qol","git diff --name-only origin/master..origin/feat/buymenu-easa-qol -- Missions_Vanilla returns no changed files"],"wikiTargets":["Development-Lessons-Learned","BuyMenu-EASA-QoL-Branch-Audit","Client-UI-Systems-Atlas","agent-release-readiness.json"],"status":"accepted-ui-branch-review-guardrail-published","confidence":"high","nextAction":"Before merging UI QoL branches, smoke final rendered controls across funds, queue, filters, tab switching and propagation scope rather than relying on changed hunk intent."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-valid-stringtable-keys-can-be-stale-design-truth-2026-06-04","topic":"localization-economy-drift","summary":"Valid stringtable keys can still describe stale mechanics. STR_Supplies_2 says supply truck delivery pays 4 x actual value, but current source computes SupplyAmount as town supply value * WFBE_C_ECONOMY_SUPPLY_MISSION_MULTIPLIER * supply upgrade modifier and grants raw SupplyAmount as player cash. The old delivery funds coefficient remains defined but unused in the live flow.","sourceRefs":["Missions/[55-2hc]warfarev2_073v48co.chernarus/stringtable.xml:188-193","Missions/[55-2hc]warfarev2_073v48co.chernarus/Common/Init/Init_CommonConstants.sqf:167","Missions/[55-2hc]warfarev2_073v48co.chernarus/Common/Init/Init_CommonConstants.sqf:268","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/Module/supplyMission/supplyMissionStart.sqf:22-34","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Module/supplyMission/supplyMissionCompleted.sqf:24-28","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/Module/supplyMission/supplyMissionCompletedMessage.sqf:8,13-14"],"wikiTargets":["Development-Lessons-Learned","Economy-Towns-And-Supply","Supply-Mission-Architecture","Mission-Parameters-Localization-And-Generated-Build-Inputs","Feature-Status-Register"],"status":"accepted-player-facing-copy-drift-published","confidence":"high","nextAction":"When balancing or hardening supply rewards, update stringtable/help text and runtime formula together; do not use resolving localization keys as proof of current design truth."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-server-side-spend-paths-can-have-currency-semantics-bugs-2026-06-04","topic":"economy-authority-currency-semantics","summary":"Server-side spend paths can still have tuple-order bugs. The player upgrade menu treats upgrade costs as [supply,funds] and deducts funds then supply, while Server_AI_Com_Upgrade validates that same order but deducts cost[0] from AI commander funds and cost[1] from side supply.","sourceRefs":["Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/GUI/GUI_UpgradeMenu.sqf:96-99","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/GUI/GUI_UpgradeMenu.sqf:139-159","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Functions/Server_AI_Com_Upgrade.sqf:32-36","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Functions/Server_AI_Com_Upgrade.sqf:47-50"],"wikiTargets":["Development-Lessons-Learned","Economy-Authority-First-Cut","Economy-Towns-And-Supply","Feature-Status-Register"],"status":"accepted-authority-currency-guardrail-published","confidence":"high","nextAction":"Before patching AI commander upgrades, confirm intended [supply,funds] tuple ordering, fix deductions, propagate to maintained missions and smoke AI commander upgrade purchase in money+supply and money-only modes."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-income-display-is-not-payout-proof-2026-06-04","topic":"economy-display-runtime-drift","summary":"Income display is not payout proof. Server/FSM/updateresources.sqf owns actual side supply and team funds mutation, while Client_GetIncome.sqf recomputes a player-facing estimate; income-system 4 already shows formula drift between server payout and client estimate.","sourceRefs":["Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/FSM/updateresources.sqf:29-70","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/FSM/updateresources.sqf:41-44","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/Functions/Client_GetIncome.sqf:3-31","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/Functions/Client_GetIncome.sqf:20-29"],"wikiTargets":["Development-Lessons-Learned","Economy-Towns-And-Supply","Economy-Authority-First-Cut","Feature-Status-Register"],"status":"accepted-economy-display-runtime-guardrail-published","confidence":"high","nextAction":"When changing income balance or UI, verify server payout and client prediction together for each WFBE_C_ECONOMY_INCOME_SYSTEM mode."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-visible-ui-affordances-can-be-partial-stale-2026-06-04","topic":"ui-workflow-stale-affordances","summary":"Visible UI affordances can be partial or stale. Commander task UI builds task payloads and radio speech while its SetTask sends are commented; the receiver still exists. Vote menus use inclusive team-count loops, Help onLoad/onUnload uses different execution shapes, and WASP marker capture temporarily disables user input while waiting for display 54.","sourceRefs":["Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/GUI/GUI_Menu_Command.sqf:315-344","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/PVFunctions/SetTask.sqf:8-14","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/Init/Init_Client.sqf:273","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/GUI/GUI_Commander_VoteMenu.sqf:58-66","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/GUI/GUI_VoteMenu.sqf:29,61-66","Missions/[55-2hc]warfarev2_073v48co.chernarus/Rsc/Dialogs.hpp:3446-3447","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/GUI/GUI_Menu_Help.sqf:5-10","Missions/[55-2hc]warfarev2_073v48co.chernarus/WASP/global_marking_monitor.sqf:57-73"],"wikiTargets":["Development-Lessons-Learned","Client-UI-Systems-Atlas","Player-UI-Workflow-Map","Commander-HQ-Lifecycle-Atlas","Feature-Status-Register"],"status":"accepted-ui-final-control-guardrail-published","confidence":"high","nextAction":"For UI fixes, smoke the visible control, final send path, receiver and cleanup path; do not treat a receiver file as proof the user-facing action works."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-hc-means-headless-and-high-command-separate-them-2026-06-04","topic":"headless-high-command-terminology","summary":"HC means multiple things in this mission. The Arma High Command UI HCSetGroup add path is gated by _hc_enabled=false while cleanup still removes HC groups; headless-client registration uses connected-hc and owner id checks; client-FPS delegation is a separate UID/FPS trust path used by delegation selection.","sourceRefs":["Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/FSM/updateavailableactions.fsm:47","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/FSM/updateavailableactions.fsm:115-117","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/FSM/updateclient.sqf:204,228","Missions/[55-2hc]warfarev2_073v48co.chernarus/Headless/Init/Init_HC.sqf:11-15","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Functions/Server_HandleSpecial.sqf:75-83","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Functions/Server_HandleSpecial.sqf:117-130","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Functions/Server_FNC_Delegation.sqf:153-158"],"wikiTargets":["Development-Lessons-Learned","AI-Headless-And-Performance","Headless-Delegation-And-Failover-Playbook","Feature-Status-Register"],"status":"accepted-hc-terminology-guardrail-published","confidence":"high","nextAction":"When filing or patching HC issues, classify the path as Arma High Command UI, headless registration, headless delegation or client-FPS delegation before changing code or docs."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-spark-scouts-need-file-family-scope-2026-06-04","topic":"agent-orchestration-code-discovery","summary":"Spark scouts need file-family scope and hard output caps on this repo. Broad whole-subsystem scouts repeatedly overflowed during remote compacting, while narrower prompts over supports/services, respawn/MASH/gear, AI commander upgrade-only, construction and town capture returned harvestable source-evidence reports.","sourceRefs":["Agent-Worklog.md#2026-06-04t0240310200---codex---spark-scout-wave-servereconomyuipvai-launch","Agent-Worklog.md#2026-06-04t0247270200---codex---spark-micro-scout-wave-relaunch","Agent-Worklog.md#2026-06-04t0257310200---codex---spark-micro-scout-wave-harvest","Agent-Worklog.md#2026-06-04t0309450200---codex---spark-scout-wave-respawntownsaiconstructionsupportsruntime-launch","Progress-Dashboard.md#latest-batch"],"wikiTargets":["Development-Lessons-Learned","Progress-Dashboard","Agent-Worklog","agent-collaboration.json","agent-status.json"],"status":"accepted-agent-orchestration-guardrail-published","confidence":"high","nextAction":"For future scout waves, name exact file families/search terms, cap output to roughly 800-1200 words, forbid edits, and relaunch any bounced scout as a smaller file-family prompt instead of retrying the broad scope."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-pvf-dispatch-hardening-is-not-handler-authority-2026-06-04","topic":"network-authority-pvf","summary":"PVF dispatcher hardening validates handler names only; it does not make legitimate server-bound handlers authoritative. Current source still has active callers that send payload score, vehicle, team, side, upgrade and UID/FPS data into thin handlers such as RequestVehicleLock, RequestTeamUpdate, RequestUpgrade, RequestAutoWallConstructinChange, RequestChangeScore and RequestSpecial update-clientfps.","sourceRefs":["Missions/[55-2hc]warfarev2_073v48co.chernarus/Common/Init/Init_PublicVariables.sqf:9-21,49-52","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/Action/Action_ToggleMHQLock.sqf:15","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/Module/Skill/Skill_SpecOps.sqf:52","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/GUI/GUI_Menu_Command.sqf:428","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/GUI/GUI_UpgradeMenu.sqf:161","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/Module/CoIn/coin_interface.sqf:217","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/PVFunctions/TownCaptured.sqf:71,79","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/PVFunctions/CampCaptured.sqf:38","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/Module/supplyMission/supplyMissionCompletedMessage.sqf:22","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/FSM/updateavailableactions.fsm:121-125","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/PVFunctions/RequestChangeScore.sqf:3-13","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/PVFunctions/RequestVehicleLock.sqf:3-8","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/PVFunctions/RequestTeamUpdate.sqf:3-26","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/PVFunctions/RequestUpgrade.sqf:5","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/PVFunctions/RequestAutoWallConstructinChange.sqf:3-7","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Functions/Server_HandleSpecial.sqf:75-83"],"wikiTargets":["Development-Lessons-Learned","Server-Authority-Migration-Map","Hardening-Implementation-Roadmap","agent-hardening-backlog.jsonl"],"status":"accepted-post-dispatch-authority-guardrail-published","confidence":"high","nextAction":"After PVF dispatcher lookup is patched, run a second handler/effect validation pass before claiming network authority complete; validate requester/side/object/role/range/funds/idempotency per handler."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-tool-commands-are-branch-scoped-evidence-2026-06-04","topic":"tooling-validation-branch-scope","summary":"Tool commands are branch-scoped evidence. Current docs branch has docs/validate-wiki.ps1 but not old Tools/ValidateWiki.ps1 or Tools/TestWikiParity.ps1 helpers; origin/feature/zargabad-map has branch-local Zargabad validators that are not present in the current docs checkout.","sourceRefs":["docs/validate-wiki.ps1:1","AI-Assistant-Guide.md:30","Wiki-Mirror-Reconciliation-Plan.md:9-10,94-96","git ls-tree -r --name-only origin/feature/zargabad-map | rg \"Validate-Zargabad\"","Zargabad-Branch-Audit.md:13,33,51,58,103,107"],"wikiTargets":["Development-Lessons-Learned","AI-Assistant-Guide","Wiki-Mirror-Reconciliation-Plan","Testing-Debugging-And-Release-Workflow","Zargabad-Branch-Audit"],"status":"accepted-tooling-branch-scope-guardrail-published","confidence":"high","nextAction":"Before telling users or agents to run a script, verify it exists on the branch/worktree used for the claim; label branch-local validators as branch evidence."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-lobby-parameters-not-runtime-truth-2026-06-04","topic":"mission-parameters-runtime-drift","summary":"Lobby parameters are not runtime truth by themselves. The importer exports class names, but current source has parameter/runtime name drift for IR smoke, a hidden upgrade-clearance switch still consumed by server upgrade init, and volumetric weather exposed while forced to 0 in constants and client init.","sourceRefs":["Missions/[55-2hc]warfarev2_073v48co.chernarus/Common/Init/Init_Parameters.sqf:5-10","Missions/[55-2hc]warfarev2_073v48co.chernarus/Rsc/Parameters.hpp:210-214","Missions/[55-2hc]warfarev2_073v48co.chernarus/Rsc/Parameters.hpp:351-356","Missions/[55-2hc]warfarev2_073v48co.chernarus/Rsc/Parameters.hpp:381-385","Missions/[55-2hc]warfarev2_073v48co.chernarus/Rsc/Parameters.hpp:393-397","Missions/[55-2hc]warfarev2_073v48co.chernarus/Common/Init/Init_CommonConstants.sqf:212,225,238","Missions/[55-2hc]warfarev2_073v48co.chernarus/Common/Init/Init_Common.sqf:320","Missions/[55-2hc]warfarev2_073v48co.chernarus/Common/Config/Core_Upgrades/Upgrades_CO_US.sqf:24-25","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Init/Init_Server.sqf:333-349","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/Init/Init_Client.sqf:218","Missions/[55-2hc]warfarev2_073v48co.chernarus/initJIPCompatible.sqf:148,152"],"wikiTargets":["Development-Lessons-Learned","Mission-Parameters-Localization-And-Generated-Build-Inputs","Assets-Config-Localization-And-Parameters-Atlas","Feature-Status-Register"],"status":"accepted-parameter-runtime-drift-guardrail-published","confidence":"high","nextAction":"For every parameter claim, cite the lobby class, constants fallback and live consumer/forced assignment before documenting operator behavior or changing balance."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-ui-preview-not-server-resolution-2026-06-04","topic":"ui-server-resolution-drift","summary":"UI prediction is not server resolution. Commander voting shows the pattern: the server vote worker counts AI/no-commander votes but its final condition selects any non-tied player candidate, while the client preview can display AI/no commander for the same distribution.","sourceRefs":["Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Functions/Server_VoteForCommander.sqf:24-29","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Functions/Server_VoteForCommander.sqf:43","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/GUI/GUI_VoteMenu.sqf:87-89"],"wikiTargets":["Development-Lessons-Learned","Commander-HQ-Lifecycle-Atlas","Pending-Owner-Decisions","Hardening-Implementation-Roadmap"],"status":"accepted-ui-server-resolution-guardrail-published","confidence":"high","nextAction":"When a dialog previews a winner, price, reward, permission or cooldown, inspect the server resolver before documenting behavior or patching semantics."} {"schema":"a2waspwarfare-development-lesson-v1","timestamp":"2026-06-04T07:05:00+02:00","id":"feature-sounding-names-need-consumer-trace","lesson":"Do not infer feature completeness from variable or channel names. Trace writers and consumers first: wfbe_autonomous is currently a respawn/order-reset state flag, while WFBE_Server_PV_SupplyMissionCompletedMessage is reward-affecting despite sounding cosmetic.","evidence":["Common_SetTeamAutonomous.sqf:8","Client/FSM/updateclient.sqf:191-205","GUI_Menu_Command.sqf:364-389","AI_SquadRespawn.sqf:102-109","AI_AdvancedRespawn.sqf:117-125","Client/Module/supplyMission/supplyMissionCompletedMessage.sqf:11-23"],"wiki":["Development-Lessons-Learned","AI-Commander-Autonomy-Audit","Supply-Mission-Architecture"]} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-execvm-launch-is-not-feature-effect-2026-06-04","topic":"runtime-wiring-feature-completeness","summary":"An execVM launch proves a file runs, not that the feature has an effect. AntiStack starts monitorTeamToJoin.sqf from Init_Server.sqf, but the script only computes monitored side skill totals and assigns a local _side; it has no loop, no publicVariable, no setVariable, no return consumer and no RequestJoin effect.","sourceRefs":["Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Init/Init_Server.sqf:606-608","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Module/AntiStack/monitorTeamToJoin.sqf:1-15","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/PVFunctions/RequestJoin.sqf:49-89"],"wikiTargets":["Development-Lessons-Learned","AntiStack-Database-Extension-Audit","Feature-Status-Register"],"status":"accepted-runtime-wiring-guardrail-published","confidence":"high","nextAction":"For any launched script or compiled function, trace durable outputs and consumers before documenting the feature as working."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-config-grep-needs-line-shape-checks-2026-06-04","topic":"config-content-integrity","summary":"Config greps need executable line-shape checks. Root_RU.sqf contains the intended WFBE_%1PARAAMMO text, but it sits after a same-line // comment and is not executed; Support_ParaAmmo.sqf later exits because the variable is not an ARRAY. Peer roots put the assignment on its own executable line.","sourceRefs":["Missions/[55-2hc]warfarev2_073v48co.chernarus/Common/Config/Core_Root/Root_RU.sqf:36","Missions/[55-2hc]warfarev2_073v48co.chernarus/Common/Config/Core_Root/Root_US.sqf:39-40","Missions/[55-2hc]warfarev2_073v48co.chernarus/Common/Config/Core_Root/Root_TKA.sqf:37-38","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Support/Support_ParaAmmo.sqf:59-60"],"wikiTargets":["Development-Lessons-Learned","Support-Specials-And-Tactical-Modules-Atlas","Feature-Status-Register"],"status":"accepted-config-integrity-guardrail-published","confidence":"high","nextAction":"For content/config changes, inspect comments, merge markers and generated/skip-listed files across peer faction roots before documenting a feature as configured."} {"ts":"2026-06-04T07:34:37+02:00","summary":"Do not treat commented HC send-backs as complete fixes. Verify helper return shape and server receiver/accounting context before reviving a path.","refs":["Development-Lessons-Learned#lesson-22-hc-means-two-different-things-in-this-mission","Headless-Delegation-And-Failover-Playbook#static-defense-through-hc"],"lesson":"commented-hc-revival-hooks-need-payload-shape-review"} {"ts":"2026-06-04T07:41:54+02:00","agent":"Codex","lesson":"Scout harvests should distinguish new deltas from confirmation of canonical pages.","appliesTo":["sub-agent orchestration","documentation finisher loop","feature status register"],"evidence":"UI and supply/economy scouts mostly reconfirmed existing pages, while static-defense HC payload shape and ATTACK_WAVE_DETAILS transport wording produced new source-backed docs changes."} {"ts":"2026-06-04T08:05:00+02:00","agent":"Codex","lesson":"Fix evidence must be branch-scoped before docs say shipped/current/propagated.","appliesTo":["release branch claims","feature branch audits","supply mission authority cleanup","future patch playbooks"],"evidence":"Superseded 2026-06-06 for supply scan: current source/Vanilla, origin/master 2cdf5fb8, Miksuu 89ae9dad and perf/quick-wins 0076040f still use broad nearestObjects [] at supplyMissionStarted.sqf:28 plus Base_WarfareBUAVterminal post-filter at :25; release 7ff18c49 has the heli-aware typed scan at :52,58 in both maintained release roots. Branch-scope proof still governs shipped/current/propagated wording."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-message-helper-paths-are-not-interchangeable-2026-06-04","topic":"runtime-message-pipeline-shape","summary":"SideMessage and LocalizeMessage are separate runtime paths. SideMessage is a server-owned HQ-radio/kbTell wrapper with shape-sensitive town, strongpoint, base/construction and no-parameter topic payloads; LocalizeMessage is a client PVF/chat handler and some tags mutate local funds. Do not merge or refactor them as generic text helpers without tracing the payload family and side effects.","sourceRefs":["Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Init/Init_Server.sqf:32","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Functions/Server_SideMessage.sqf:3-64","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/FSM/server_town.sqf:199,230,233","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/FSM/server_town_camp.sqf:127,130","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Functions/Server_BuildingDamaged.sqf:13","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Functions/Server_BuildingKilled.sqf:92","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Functions/Server_ProcessUpgrade.sqf:85","Missions/[55-2hc]warfarev2_073v48co.chernarus/Common/Init/Init_PublicVariables.sqf:32","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/PVFunctions/LocalizeMessage.sqf:49,53,57-68"],"wikiTargets":["Server-Gameplay-Runtime-Atlas","Feature-Status-Register","Development-Lessons-Learned"],"status":"accepted-message-pipeline-guardrail-published","confidence":"high","nextAction":"When editing radio, dubbing, chat or reward messages, smoke the relevant SideMessage payload family and separately audit LocalizeMessage tags that may carry chat or local economy effects."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-replicated-state-world-visuals-and-latches-need-separate-proof-2026-06-04","topic":"town-camp-lifecycle-state-proof","summary":"Replicated state, world visuals and lifecycle latches need separate proof. Camp capture can update sideID while setting the 3D flag texture from the old side; camp repair can change sideID without refreshing the flag object; resistance patrols can stay active-latched after death; and camp-count helpers return 1 for zero-camp towns, which is only safe for denominator math, not real-count callers.","sourceRefs":["Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/FSM/server_town_camp.sqf:122-138","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Functions/Server_HandleSpecial.sqf:147-168","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/FSM/server_town_ai.sqf:226-230","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/FSM/server_patrols.sqf:26,71-72","Missions/[55-2hc]warfarev2_073v48co.chernarus/Common/Functions/Common_GetTotalCamps.sqf:9-12","Missions/[55-2hc]warfarev2_073v48co.chernarus/Common/Functions/Common_GetTotalCampsOnSide.sqf:15-22","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/FSM/server_town.sqf:179-189","Missions/[55-2hc]warfarev2_073v48co.chernarus/Common/Functions/Common_GetRespawnThreeway.sqf:6-8","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/GUI/GUI_Menu_BuyUnits.sqf:109-114"],"wikiTargets":["Development-Lessons-Learned","Testing-Debugging-And-Release-Workflow","Towns-Camps-And-Capture-Atlas","Feature-Status-Register"],"status":"accepted-town-lifecycle-guardrail-published","confidence":"high","nextAction":"For town/camp patches, smoke replicated object variables, marker/UI feedback and 3D object visuals separately; prove latch reset paths; split safe-denominator helpers from real-count helpers where callers differ."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-profile-namespace-keys-are-ui-contracts-2026-06-04","topic":"ui-profile-state","summary":"profileNamespace key spelling/casing is persistent UI state. Buy Units initializes and toggles uppercase WFBE_C_DRIVER_ENABLED_BY_DEFAULT, but cost preview, group-cap crew counting, BuildUnit params and refresh/reset paths mostly read/write lowercase wfbe_c_driver_enabled_by_default. A UI preference patch needs read/write grep, migration/alias policy and final effect smoke, not just visible checkbox testing.","sourceRefs":["Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/GUI/GUI_Menu_BuyUnits.sqf:39-42","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/GUI/GUI_Menu_BuyUnits.sqf:95,136,154,173,284,308,328-341,366,373,385"],"wikiTargets":["Development-Lessons-Learned","Factory-And-Purchase-Systems-Atlas","Client-UI-Systems-Atlas","Feature-Status-Register"],"status":"accepted-source-checked","confidence":"high","nextAction":"Normalize one profileNamespace key before buy-menu crew UX polish; smoke checkbox state, previewed crew cost, AI cap check, spawned crew and max-out/reset behavior."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-static-reference-hits-need-executable-line-checks-2026-06-04","topic":"static-reference-triage","summary":"Static missing-reference scans are leads, not runtime proof. The current source has absent targets such as scripts/unitCaching/description.ext, Server/FSM/respatrol.fsm and WASP/KeyDown.sqf, but their source references are commented; car_wheel_new.sqf calls WASP_procInitComm, but both the action caller and procInitComm bootstrap are commented. Promote only executable live missing paths to release gates; route commented/dead chains to abandoned-feature cleanup.","sourceRefs":["Missions/[55-2hc]warfarev2_073v48co.chernarus/description.ext:37","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Init/Init_Towns.sqf:168,174","Missions/[55-2hc]warfarev2_073v48co.chernarus/WASP/Init_Client.sqf:12","Missions/[55-2hc]warfarev2_073v48co.chernarus/WASP/actions/AddActions.sqf:4,6","Missions/[55-2hc]warfarev2_073v48co.chernarus/WASP/actions/car_wheel_new.sqf:29-36","Missions/[55-2hc]warfarev2_073v48co.chernarus/initJIPCompatible.sqf:243"],"wikiTargets":["Source-Inventory","Development-Lessons-Learned","WASP-Overlay","Abandoned-Feature-Revival-Review"],"status":"accepted-source-checked","confidence":"high","nextAction":"For future missing-reference sweeps, record whether each hit is live executable code, commented scaffold, branch-only evidence or dead archaeology before assigning severity."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-reused-ui-variables-need-all-assignment-paths-2026-06-04","topic":"ui-economy-formula-parity","summary":"Reused UI variables need all assignment paths traced before declaring formula parity. Buy Units list rows and the purchase/check/charge path include UNIT_COST_MODIFIER, but the later selected-detail refresh reassigns _currentCost without the modifier and displays that value.","sourceRefs":["Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/Functions/Client_UIFillListBuyUnits.sqf:60","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/GUI/GUI_Menu_BuyUnits.sqf:90","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/GUI/GUI_Menu_BuyUnits.sqf:155-156","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/GUI/GUI_Menu_BuyUnits.sqf:261","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/GUI/GUI_Menu_BuyUnits.sqf:465"],"wikiTargets":["Development-Lessons-Learned","Factory-And-Purchase-Systems-Atlas","Feature-Status-Register"],"status":"accepted-source-checked","confidence":"high","nextAction":"For UI pricing fixes, smoke list row, selected-detail display, affordability guard and charged funds together; use one helper for list/detail/funds/charge formulas."} {"schema":"a2waspwarfare-development-lesson-v1","id":"lesson-group-ownership-can-be-feature-boundary-2026-06-04","topic":"ownership-and-ui-discovery","summary":"Group ownership can be the real feature boundary. Commander-built ARTY can be same-side, crewed, equipped and direct-fire capable, but Tactical fire missions discover artillery by group player, so base DefenseTeam crews are invisible to commander fire-mission control.","sourceRefs":["Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Construction/Construction_StationaryDefense.sqf:12-15,91-94","Missions/[55-2hc]warfarev2_073v48co.chernarus/Server/Functions/Server_HandleDefense.sqf:23-31","Missions/[55-2hc]warfarev2_073v48co.chernarus/Client/GUI/GUI_Menu_Tactical.sqf:544,565,594","Missions/[55-2hc]warfarev2_073v48co.chernarus/Common/Functions/Common_GetTeamArtillery.sqf:10-30"],"wikiTargets":["Development-Lessons-Learned","Construction-And-CoIn-Systems-Atlas","Support-Specials-And-Tactical-Modules-Atlas","Feature-Status-Register"],"status":"accepted-source-patched-smoke-pending","confidence":"high","nextAction":"For ownership-sensitive features, identify whether the code uses side, player, group, commander team, object var or network owner id; smoke discovery, action execution and delegation fallback together."}