Merge owned systems into one addon while preserving resource identities. Gate player admission on the replicated prison scene, restore the original framed door, and hold enemy AI until escape. Correct scenario branding and author metadata, include publishing assets, and retain regression and native verification evidence.
5.7 KiB
Authorized AI dependencies
Current layout: all owned modules now live in addons/core/addon.gproj.
Use single-mod setup and commands for current builds. Both
Workbench fixture selectors (core and chat) load that same project and require
the external dependencies. Five-addon and vanilla-only build instructions/results
below describe the historical layout.
The user authorized RHS, WCS and BMP integration on 2026-09-20. AI declares RHS Status Quo (595F2BF2F44836FB), WCS Armaments (629B2BA37EFFD577) and WCS BMP-1 (5E524E4FEECCA92B). The reviewed transitive closure adds RHS Content Pack01 (1337C0DE5DABBEEF), RHS Content Pack02 (BADC0DEDABBEDA5E) and WCS SpaceCore (5E389BB9F58B79A6). Exact locally inspected manifest hashes, versions and resource ownership are in external-addons.json.
62E71B6F101EB30D is Escapists Enhanced, not WCS. It and original Escapists, ScrtCore and ScrtSharedContent are excluded. Neither the unrelated Patch addon nor Parachute Framework is admitted by this policy. Original workspaces and installed third-party assets remain unchanged; no third-party asset bytes are included in successor source bundles.
Core-only tests retain their existing vanilla profile. Full Chat uses a different private profile, exposes six explicit dependency links rather than the workshop tree, verifies the exact manifest graph and allowed resource GUID/path records, and accepts the installed flat packed layout and fingerprints every exposed file, including manifests, resource databases, PAKs and permitted workshop metadata/media. Loose source/resource directories, unknown file forms and input symlinks are refused. Fingerprints are cached against file identity, size and nanosecond modification/change timestamps. Native evidence records those inputs in external-addons-inputs.json and verifies unchanged inputs and exact private dependency link targets after cleanup. This proves which installed bytes were used; it does not independently prove their content quality or compatibility.
For a hidden and muted full integration run, from this repository:
python3 tools/headless_workbench.py \
--compat /tmp/erri-headless-compat \
--profile /tmp/erri-workbench-external-profile \
--external-addons '/home/jakub/.local/share/Steam/steamapps/compatdata/1874880/pfx/drive_c/users/steamuser/Documents/My Games/ArmaReforger/addons' \
--project chat --smoke patrol-hq --rounds 1 --timeout 600
The disposable compat prefix must already exist and be idle. Expanded-source local Workbench runs now compile and complete the HQ memory/response fixtures: 56 and 35 total assertions, respectively, with zero script/runtime failures. Both retain four external string-table GUID/name errors, so neither passes the strict native qualifier. These are captured scripted local runs, not multiplayer, FPS or packaged-build qualification.
To attempt native packaging in a fresh private session:
python3 tools/native_package.py \
--project chat \
--session /tmp/erri-package-external-example \
--compat /tmp/erri-headless-compat \
--external-addons '/home/jakub/.local/share/Steam/steamapps/compatdata/1874880/pfx/drive_c/users/steamuser/Documents/My Games/ArmaReforger/addons' \
--continue-on-failure
The session path must not already exist. --external-addons is required for AI/Chat targets and rejected for Core/Intel/Map targets. A full Chat build exposes the six audited links only in its private AI and Chat profiles; Core, Intel and Map keep vanilla-only profiles. Each project still searches the copied successor source directory, never the whole workshop tree. Session/per-project evidence retains external input fingerprints before and after the attempt, the policy hash and profile-link checks. Changed or unverifiable inputs stop the build, including diagnostic continuation.
--continue-on-failure only permits later addons after a failed candidate that completed naturally, preserved its inputs and cleaned up safely. It never upgrades a failed candidate: native errors and missing direct native exit status remain disqualifying. Timeout, unconfirmed cleanup, runner errors or changed inputs stop continuation. Contents inspection and packed-only consumption remain separate requirements, and every package report remains release-unqualified. The later radio/maintenance development build produces and verifies all five current PAKs, retaining native shutdown failures. Its explicit packed-v3 path verifies the exact thirteen-addon closure and ordinary modules but remains failed on the installed localization errors; participant readiness was not established before the bounded diagnostic ended. Existing vanilla-only artifacts retain their original identities and evidence, and the frozen packed-v2 validator still rejects an expanded dependency closure. Do not qualify a new package using older vanilla-only results.
Validation: tests/test_native_package_external.py adds 17 offline packaging cases, and all 44 existing packaging cases pass. These tests launch no native executable. tests/test_external_addons.py exercises exact closure, resource ownership, missing/duplicate IDs, changed manifests and resource databases, profile contamination, wrong links, symlinked input refusal and post-capture PAK mutation. tests/test_external_profile_review.py covers post-capture link removal/retargeting, loose source/resource additions, allowed media mutations and the packaging verifier. tools/check.py rejects external Core dependencies/resources and nonallowlisted addon identities. Source bundles include the policy JSON, never installed external assets. The feature-by-feature owned-source audit is ai-feature-migration.md.