Skip to content

Arma 2 OA Compatibility Audit

rayswaynl edited this page Jul 3, 2026 · 8 revisions

Arma 2 OA Compatibility Audit

This page records a documentation audit for accidental Arma 3 assumptions. It exists so future humans, Codex, Claude and other LLM agents can distinguish intentional "do not use Arma 3 here" guardrails from unsafe advice.

Re-run cadence: run the Follow-Up Check searches after every merge that touches mission source, client HUD/overlay code, or tooling. A clean historical result does not cover code added in later branches. The 2026-06-05 scan is a point-in-time snapshot — PR#122 later shipped getPosVisual (A3-only) LIVE and was only caught in cmdcon30. Re-scan after every merge.

Audit date: 2026-06-02

Latest refresh: 2026-06-05T12:25:00+02:00

Scope:

  • docs/wiki/*.md
  • docs/wiki/*.json
  • docs/wiki/*.jsonl
  • docs/wiki/*.txt
  • Mission, tooling, integration and BattlEye text files through docs/analysis/dead-code-oa-compatibility-scan.ps1

Search Patterns

These searches were run against the repo docs mirror:

rg -n -i "\bArma ?3\b|\bA3\b|Arma3|remoteExec(Call)?|BIS_fnc_MP|addMissionEventHandler|isRemoteExecuted|remoteExecutedOwner|CfgFunctions|CBA|ACE|Eden Editor" docs\wiki --glob '*.md' # guardrail scan
rg -n -i "remoteExec|remoteExecCall|BIS_fnc_MP|addMissionEventHandler|isRemoteExecuted|remoteExecutedOwner|CfgFunctions|Eden Editor|parseSimpleArray|RVExtensionArgs" docs\wiki --glob '*.{md,json,jsonl,txt}' # guardrail scan
rg -n -i "\bCBA\b|\bACE\b|Eden" docs\wiki --glob '*.{md,json,jsonl,txt}'

Broad searches for params and A3 are intentionally avoided as primary tests because this mission legitimately uses Arma 2 mission Params / paramsArray, and short tokens produce false positives inside unrelated words or identifiers.

Classification

Term or pattern Result Action
Arma 3 / Arma3 Present as compatibility warnings and agent guardrails. Keep. These references warn agents away from Arma 3 assumptions.
remoteExec / remoteExecCall Present as invalid drop-in examples. Keep as warnings only. The live mission uses OA-era public variables, PVEHs and wrapper functions.
BIS_fnc_MP Present only in future-agent checklist text as an Arma 3/modernization hazard. Keep as warning text; do not use it as implementation guidance.
remoteExecutedOwner Present in deep-review evidence to contrast Arma 2 OA PVEHs with Arma 3 ownership APIs. Keep. It explains why sender authority must be reconstructed from payload/server state.
parseSimpleArray Present as an explicit non-option for Arma 2 OA extension hardening. Keep. The docs correctly say defensive validation is the A2-correct path.
RVExtensionArgs Present as an A3 extension ABI that does not exist here. Keep as caveat in extension review evidence.
CfgFunctions Present as a "do not assume CfgFunctions auto-init" warning. Keep. Lifecycle-Wait-Chain.md documents the mission's hand-rolled init barriers.
CBA / ACE Only appears in a checklist warning not to introduce CBA helpers. Keep as a dependency guardrail.
Eden / eden Present as a modded terrain/folder name, not Eden Editor workflow advice. Keep. Do not reinterpret the mission folder as an Arma 3 editor assumption.
getPosVisual Arma-3-only. Undefined / silently fails in A2-OA 1.64. Shipped LIVE by mistake in the PR#122 name-tag overlay and only caught in cmdcon30 (2026-06-30). Replace with visiblePosition (the A2-OA render-interpolated position equivalent). Fixed at Client/Init/Init_Client.sqf:288. Never reintroduce getPosVisual in this OA codebase.
setGroupOwner Arma-3-only. Does not exist in OA 1.64. Do not use. Group locality is not transferable via this command on OA.
groupOwner Arma-3-only. Does not exist in OA 1.64. Do not use. Owner queries on groups are not supported in OA.
joinGroup Arma-3-only. Throws Missing ; on A2 OA 1.64 (RPT-confirmed at SkinSelector_Apply.sqf:183, cmdcon42). Replace with [unit] join grp (array LHS), the OA-era group-join idiom used throughout the mission.

Current Result

No incorrect Arma 3 implementation advice was found in the current docs mirror. The explicit Arma 3 references are guardrails, contrast notes or compatibility warnings.

The 2026-06-05 repo-wide scan found no live code-risk implementation hits for the risky A3-style API set across mission roots, tools, DiscordBot, Extension and BattlEye at that snapshot. That result is point-in-time only. PR#122 later shipped getPosVisual (A3-only) LIVE in the name-tag overlay — it was not in scope for the 2026-06-05 scan and was only caught in cmdcon30, where it was fixed to visiblePosition (Client/Init/Init_Client.sqf:288). Re-run the Follow-Up Check after every merge. The scan did find many OA-safe inverse-trap commands, which must be preserved unless an OA-compatible replacement is designed and smoked.

Point-in-time caveat (cmdcon30, 2026-06-30): the "0 live code-risk implementation hits" / "current source code is not using ... unsupported modernization patterns" result above is a snapshot of the 2026-06-05 scan, not a permanent guarantee. A later branch reintroduced an A3-only command: PR#122 (the name-tag overlay) shipped getPosVisual LIVE, which is Arma-3-only and silently undefined / fails in A2-OA 1.64. It was not caught by the 2026-06-05 scan (predates the branch) and only surfaced in cmdcon30, where it was fixed to visiblePosition (Client/Init/Init_Client.sqf:288). The file's own "A2-safe ... no A3 commands" comment was FALSE at the time. Re-run the repo-wide scan after every merge — a clean historical result does not cover code added later. See the new getPosVisual -> visiblePosition row in Inverse-Trap Commands below (A3-only command, OA equivalent is visiblePosition).

Claude's command-version cross-check added the opposite hazard too: some commands are valid and load-bearing in OA even though Arma 3-trained agents may mistrust them. These are now part of this audit so future agents do not "modernize" working OA code into a regression.

The former apply snippet in Deep-review findings has also been rewritten as OA-safe forEach SQF. The docs now route agents to this audit before accepting or adding engine-version-sensitive claims. Future changes should update this page if an Arma 3-style term is added intentionally.

Inverse-Trap Commands

The main audit catches Arma 3 features that must not be imported into OA. The inverse trap catches OA-safe commands that might look suspicious to agents trained on newer Arma 3 patterns.

Note on setGroupOwner / groupOwner / joinGroup: these are NOT OA-safe inverse traps. They are A3-only banned commands (see Classification table above and Agent Guide). They appear in the Follow-Up Check guardrail scan, not the inverse-trap scan.

Class Commands Status Action
OA-safe but mis-assumed A3-only diag_tickTime, uiSleep Verified by the command version reference. diag_tickTime is the PerformanceAudit stopwatch; uiSleep appears in AntiStack/restorer loops. Keep when source context fits. Do not replace merely because the command looks modern.
OA-safe but removed in Arma 3 setVehicleInit, processInitCommands Verified by the command version reference. The repo uses hardcoded literal init strings, not client-derived strings. Keep as an OA-era pattern unless a source-backed replacement is designed and smoked. Do not call it an A3 security ban in this OA codebase.

This does not weaken the PVF dispatch finding. setVehicleInit with hardcoded literals is a separate surface from DR-1's sender-chosen Call Compile dispatcher.

Safe Wording For Future Agents

Prefer:

  • "Use Bohemia Interactive Arma 2 OA / Combined Operations command support as the baseline."
  • "This is an OA-era publicVariable/PVEH flow, not a remoteExec flow."
  • "Validate the command against OA 1.64 support before proposing it."
  • "Do not add CBA/ACE helpers unless the mission owner accepts a new dependency."
  • "Params / paramsArray are the mission parameter system here; do not confuse them with newer SQF params command style."
  • "Modded_Missions/eden is a terrain/fork folder name, not evidence of an Eden Editor workflow."
  • "diag_tickTime, uiSleep, setVehicleInit and processInitCommands are documented OA-safe inverse traps; check the command-version reference before removing them."

Avoid:

  • Do not write "Use remoteExec for this RPC."
  • "Move this into CfgFunctions preInit/postInit" without an explicit OA-compatible migration plan.
  • Do not write "Use parseSimpleArray to harden extension output."
  • Do not write "Use getPosVisual for smooth on-screen positioning." It is Arma-3-only and undefined in A2-OA 1.64; use visiblePosition (cmdcon30 fix, Client/Init/Init_Client.sqf:288).
  • "Use Arma 3 BattlEye examples as proof that this repo ships those filters."
  • "Remove setVehicleInit / processInitCommands because Arma 3 disabled them" without an OA-compatible replacement plan and runtime smoke.

Follow-Up Check

Run this lightweight audit after future documentation passes:

rg -n -i "\bArma ?3\b|Arma3|remoteExec(Call)?|BIS_fnc_MP|remoteExecutedOwner|parseSimpleArray|RVExtensionArgs|CfgFunctions|Eden Editor|\bCBA\b|\bACE\b|setGroupOwner|groupOwner|joinGroup" docs\wiki --glob '*.{md,json,jsonl,txt}' # guardrail scan (A3-only / banned)
rg -n -i "\bapply\b|diag_tickTime|uiSleep|setVehicleInit|processInitCommands" docs\wiki --glob '*.{md,json,jsonl,txt}' # OA-safe inverse-trap scan (do not remove)

Re-run against SOURCE after every merge, not just docs (cmdcon30, 2026-06-30). The doc-mirror scans above did not catch getPosVisual shipping LIVE in PR#122's name-tag overlay, because it was added to mission source after the 2026-06-05 snapshot. Add getPosVisual (and any other A3-only command from the command version reference) to the source-tree scan, and run it against the mission roots on every merge — a clean historical result does not cover later branches.

Current Scan Snapshot

This refresh includes the newer AntiStack, integration-trust, release-readiness, source-propagation, command-version-reference and dead-code register pages, plus a repo-wide implementation scan.

Repo-wide scan artifact:

Item Value
Script docs/analysis/dead-code-oa-compatibility-scan.ps1
Output docs/analysis/dead-code-oa-compatibility-scan.json
Roots Missions, Missions_Vanilla, Modded_Missions, Tools, DiscordBot, Extension, BattlEyeFilter, docs/wiki
Text files scanned 3199
Risk patterns checked 22
Code-risk implementation hits 0
Docs/reference hits 355
OA-safe inverse-trap hits 1132

Pattern snapshot from the repo-wide scan:

Pattern Hit count Current classification
remoteExec / remoteExecCall 49 Docs/reference warnings only; 0 source implementation hits outside docs.
BIS_fnc_MP 19 Docs/reference modernization guardrail only; 0 source implementation hits.
addMissionEventHandler 8 Docs/reference warning only; 0 source implementation hits.
remoteExecutedOwner / isRemoteExecuted 35 Docs/reference evidence contrast only; 0 source implementation hits.
parseSimpleArray 29 Explicit guardrail non-option for AntiStack/extension hardening in OA; 0 source implementation hits.
RVExtensionArgs 13 Explicit non-option for the in-repo extension ABI; 0 source implementation hits.
CfgFunctions 16 Warning against assuming automatic preInit/postInit lifecycle; 0 source implementation hits.
CBA / ACE 25 Dependency guardrail in docs; 0 source implementation hits.
Eden Editor 14 Folder-name caveat and audit text; not editor workflow advice.
isEqualTo, SQF params, apply, pushBack, allPlayers, A3 loadout/object/locality APIs 49 combined Docs/reference warnings only; 0 source implementation hits in mission/tool/integration roots.
diag_tickTime 610 total / 589 source-tool inverse-trap hits OA-safe inverse trap; used by PerformanceAudit instrumentation and generated SQF text.
uiSleep 43 total / 20 source inverse-trap hits OA-safe inverse trap; used in server timing loops.
setVehicleInit / processInitCommands 557 total / 523 source inverse-trap hits OA-safe inverse trap removed in A3; keep hardcoded-literal usage unless an OA replacement is designed.

Representative pages intentionally containing risky terms:

Each hit should be one of:

  • intentional guardrail
  • explicit non-option
  • evidence quote / deep-review caveat
  • terrain or folder name
  • item requiring correction

Agent Decision Procedure

When a future prompt, report or patch proposes a risky term:

  1. Check whether the term is already classified in agent-compatibility-audit.json.
  2. If the term is only a warning, leave it as warning text and do not turn it into an implementation step.
  3. If the term is an inverse-trap command, check Arma 2 OA command version reference before removing or rewriting it.
  4. If the term is proposed as implementation advice, require a Bohemia Interactive Arma 2 OA / Combined Operations source proving support.
  5. If OA support is not proven, replace the advice with the existing mission pattern: public variables/PVEHs, hand-rolled init barriers, defensive call compile shape validation or local helper functions.
  6. If the term is added intentionally, update this page and the JSON audit with its classification and representative pages.

Corrections Needed Now

No incorrect Arma 3 implementation advice was found in the docs mirror during the 2026-06-05 refresh, and no live source implementation hits were found for the risky A3-style API set at that snapshot.

That clean result did not hold (cmdcon30, 2026-06-30). PR#122 later shipped getPosVisual (Arma-3-only) LIVE in the name-tag overlay, fixed to visiblePosition in cmdcon30 (Client/Init/Init_Client.sqf:288). The lesson: the audit must be re-run against mission source on every merge, and "0 source hits" is only ever a point-in-time claim. The main maintenance need is not deletion; it is keeping warnings clearly marked as warnings, inverse traps clearly marked as OA-safe, and re-scanning new branches. The highest-risk places are future AntiStack hardening, PVF/server-authority work, lifecycle refactors and client-side HUD/overlay work (where A3-only positioning/UI commands like getPosVisual look tempting but are undefined in OA unless independently proven).

Continue Reading

Previous: Arma 2 OA external reference guide | Next: AI assistant developer guide

Main map: Home | LLM entry: LLM agent entry pack | Agent file: agent-context.json

Sidebar

Clone this wiki locally