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.
105 lines
9.1 KiB
Markdown
105 lines
9.1 KiB
Markdown
# External dependency development packages
|
|
|
|
**Current layout:** all owned modules now live in `addons/core/addon.gproj`.
|
|
Use [single-mod setup and commands](single-mod.md) 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 latest handoff is [road interception](../.build/playtest-2026-09-20-road-interception/README.md), with [exact build records](evidence/package-2026-09-20-road-interception/handoff.json). Five PAKs/222 payload entries match261 authored files and the editable ZIP. Core packed startup passes; the full external diagnostic now reaches ordinary local prisoner admission but retains its failed localization-error verdict. Packaging remains unqualified. Earlier radio/maintenance records below remain historical.
|
|
|
|
Current AI/Chat requires the six installed dependencies in `external-addons.json`. Historical vanilla-only Core v1/Chat v2 packed contracts and evidence remain unchanged. Build only owned successor files; dependencies stay in their installed locations and are never bundled or published.
|
|
|
|
Freeze addon sources and serialize this command with other private native runs. The session must be new:
|
|
|
|
```sh
|
|
python3 tools/native_package.py --project chat \
|
|
--session /tmp/erri-radio-maintenance-packages \
|
|
--compat /tmp/erri-headless-compat --timeout 300 \
|
|
--external-addons '/home/jakub/.local/share/Steam/steamapps/compatdata/1874880/pfx/drive_c/users/steamuser/Documents/My Games/ArmaReforger/addons' \
|
|
--silent-workbench --continue-on-failure
|
|
```
|
|
|
|
This uses the established hidden display, muted audio and owned cleanup. Native shutdown failures and the four installed external localization errors remain failures. Diagnostic continuation cannot waive unsafe cleanup or changed inputs. With explicit `--continue-on-failure`, a naturally completed native exit 0 followed by verified owned helper cleanup may now permit the next addon job after another idle/process and source check. The failed per-addon verdict and nonzero overall exit remain unchanged; a separate `diagnostic_continuations` receipt records this decision. Timeout, interruption, unknown/nonzero native exit, failed cleanup or changed inputs still stop the batch. This replaces the ad hoc remaining-addon scripts used by earlier handoffs. Inspect produced files before testing ordinary consumption; a PAK emitted during a failed build is only an unqualified development artifact.
|
|
|
|
## Explicit packed Chat v3
|
|
|
|
Implementation:
|
|
|
|
- `tools/headless_game.py`: lazy v3 dispatch and private profile hook/CLI flag.
|
|
- new `tools/packed_external.py`: exact v3 inventory, profile, provenance, evidence.
|
|
- new `tests/test_packed_external_game.py`.
|
|
|
|
Existing Core v1 and vanilla-only Chat v2 are unchanged by default, continue to
|
|
reject expanded AI dependencies, and retain their old schemas. The new contract
|
|
is selected only by **--project chat --packed-addons plus --external-addons**.
|
|
It does not enable externals for loose source, Core, control or old packed inputs.
|
|
|
|
After native output content inspection:
|
|
|
|
```sh
|
|
python3 tools/headless_game.py --project core \
|
|
--packed-core /tmp/erri-radio-maintenance-packages/packages/core \
|
|
--packed-session /tmp/erri-packed-core-radio-maintenance \
|
|
--compat /tmp/erri-headless-compat --timeout 180
|
|
|
|
python3 tools/headless_game.py --project chat \
|
|
--packed-addons /tmp/erri-radio-maintenance-packages/packages \
|
|
--packed-session /tmp/erri-packed-chat-radio-maintenance \
|
|
--external-addons '/home/jakub/.local/share/Steam/steamapps/compatdata/1874880/pfx/drive_c/users/steamuser/Documents/My Games/ArmaReforger/addons' \
|
|
--compat /tmp/erri-headless-compat --timeout 180 --failure-grace 120
|
|
```
|
|
|
|
Default canonical 15-second readiness settling is mandatory. Optional 30-second
|
|
failure grace above retains later diagnostic output; it cannot turn an observed
|
|
native error into success or extend the original timeout. The runtime remains
|
|
hidden/muted and uses the existing exact prefix/process ownership and cleanup.
|
|
No broad installed workshop directory is given to -addonsDir: only the private
|
|
copied five successor packages, plus six allowlisted dependency links in profile.
|
|
|
|
Schema3 is `packed-chat-external-runtime-input`. It records all 15 runtime files,
|
|
exact external policy/hash, six installed addon file fingerprints/project names,
|
|
private paths, command and launch identity. Candidate and private copy bytes,
|
|
external inputs, policy/cache, exact dependency links, private profile containment
|
|
and provenance copies are reverified after cleanup. Failed verification prevents
|
|
packed-consumption success. Metadata/media are hashed along with executable PAK/
|
|
resource inputs; extra loose source or retargeted links are refused.
|
|
|
|
Runtime evidence must show all 13 exact engine/vanilla/successor/external addon
|
|
identities, packed mounts, actual external PAK counts and resource databases,
|
|
ordinary Game/GameLib flags, expected addon search directories and native ordinary
|
|
header/participant readiness. Loose successor/external mounts, missing or extra
|
|
addons/databases, whole-workshop searches and native errors fail. Only the captured
|
|
canonical external folder and its exact private alias are accepted for each addon.
|
|
No generic symlink/path resolution of logged paths admits arbitrary locations.
|
|
|
|
Retain complete new sessions as raw evidence. Existing archive_packed.py v2 archive
|
|
contract has not been broadened: do not archive/qualify new v3 as historical v2.
|
|
Report v3 results directly from the new session's packed-runner.json,
|
|
packed-startup-report.json, packed-input-provenance.json, external snapshot files
|
|
and native console. All outcomes remain build_qualified=false/release_qualified=false.
|
|
|
|
Offline validation: 18 new cases pass (closure/CLI, copies, exact private links,
|
|
source/runtime/policy/cache/profile/provenance mutation, CRLF descriptors, multi-PAK
|
|
external mounts, full logged closure, redirects/extra/loose/missing inputs and
|
|
native error rejection). Existing unchanged packed Core's 21 and Chat's 9 tests
|
|
pass against the integrated runner. These tests are synthetic; no native launch.
|
|
|
|
|
|
## Radio/maintenance source checkpoint
|
|
|
|
The editable `/tmp/escapistsrereintroduced-radio-maintenance-source.zip` contains 253 payload files (251 authored addon files), 1,622,377 bytes, SHA-256 `b12d16fc4cf331462002e79a58841e40c956a371ef66988fe03b06db6e26f336`. Every authored file matches the frozen source used by `/tmp/erri-radio-maintenance-packages`. No installed dependency assets are included.
|
|
|
|
The first packaging attempt emitted Core's three runtime files but stopped with `native-or-launcher-exited-prefix-active`, native exit 0 and the existing Workbench shutdown resource errors. Owned cleanup and unchanged source/external inputs were confirmed. That failed report remains intact. A separately reviewed remaining-addon helper requires verified native exit, exact inputs/profile and an independently idle prefix before each further job; it does not promote any failed build verdict.
|
|
|
|
Core's PAK contains exactly 132 expected authored non-metadata files with matching hashes and no extra paths. Its [ordinary packed startup](evidence/packed-core-2026-09-20-radio-maintenance/report.json) passes with no captured errors, unchanged exact input bytes, normal Game/GameLib modules and a verified prisoner participant/header. Cleanup is confirmed. This is startup evidence; it is not a clean native build, normal held-interaction/full escape or multiplayer qualification.
|
|
|
|
All four separate remaining jobs completed with native exit 0, confirmed cleanup and unchanged source/external inputs. Their failed candidate verdicts remain in [the raw build record](evidence/package-2026-09-20-radio-maintenance/README.md). Exact payload comparison verifies Core 132, AI 58, Intel 4, Map 6 and Chat 12 paths/hashes: 212 total, with exactly fifteen runtime files. The matching development handoff is `.build/playtest-2026-09-20-radio-maintenance`; older playtests are unchanged.
|
|
|
|
The [explicit v3 packed Chat diagnostic](evidence/raw-packed-chat-external-2026-09-20-radio-maintenance/README.md) verifies all thirteen exact addon paths/mounts/databases and normal modules, with no input violations or script/runtime failures. Four installed localization errors appear twice; the run remains failed. Its bounded failure grace ended after site/prison preparation, before local participant readiness. Sources/packages/external inputs remained unchanged and cleanup was confirmed. No full ordinary-startup or release qualification is claimed; the raw v3 evidence was not relabeled as a legacy v2 archive.
|
|
|
|
### Bounded external startup diagnostics
|
|
|
|
`--failure-grace` defaults to zero and now accepts up to 120 seconds, still capped by the original run deadline. This allows the full scenario to finish initialization after known installed localization errors for diagnosis. Repeated errors or later readiness never extend the lease or change a failed run into success. Raw participant/mission markers can be inspected separately; they are not clean packed-startup qualification. The historical thirty-second run and its failed verdict remain intact.
|