{ "kind": "PLAN ONLY: fresh unqualified development handoff; no commands executed", "cwd": "/home/jakub/devel/escapistsrereintroduced", "parameters": { "TAG": "choose a new unique tag after guide fix and source freeze, e.g. 20261002-ground-depot-guide", "PACKAGE_SESSION": "/tmp/erri-package-${TAG}", "PACKED_SESSION": "/tmp/erri-packed-chat-${TAG}", "BUILD": "/home/jakub/devel/escapistsrereintroduced/.build/playtest-${TAG}", "PACKAGE_EVIDENCE": "/home/jakub/devel/escapistsrereintroduced/docs/evidence/package-${TAG}", "PACKED_EVIDENCE": "/home/jakub/devel/escapistsrereintroduced/docs/evidence/packed-${TAG}", "SOURCE_ZIP": "/tmp/erri-source-${TAG}.zip", "ROUTE_EVIDENCE": "fresh matching frozen-source native normal route evidence directory", "CHECK_LOG": "completed full regression log for the exact final source freeze", "COMPAT": "/tmp/erri-headless-compat", "EXTERNAL": "/home/jakub/.local/share/Steam/steamapps/compatdata/1874880/pfx/drive_c/users/steamuser/Documents/My Games/ArmaReforger/addons" }, "commands": [ { "stage": "process preflight", "argv": [ "python3", "tools/headless_game.py", "--compat", "${COMPAT}", "--inspect-processes" ], "rule": "Read-only. Tool still repeats its strict guards under owned prefix lock." }, { "stage": "development source archive after source freeze", "argv": [ "python3", "tools/source_bundle.py", "--mode", "development", "--output", "${SOURCE_ZIP}" ], "rule": "New zip outside checkout, no existing/symlink destination; /tmp quota must permit this. Do not weaken canonical packaging session guards." }, { "stage": "native single combined-addon packaging", "argv": [ "python3", "tools/native_package.py", "--project", "core", "--session", "${PACKAGE_SESSION}", "--compat", "${COMPAT}", "--external-addons", "${EXTERNAL}", "--timeout", "300" ], "rule": "Root serializes hidden/muted launch. Capture stdout/stderr and exact exit code. Nonzero result is retained; never make candidate_created true after cleanup." }, { "stage": "ordinary packed-only startup after verified handoff assembly", "argv": [ "python3", "tools/headless_game.py", "--project", "chat", "--packed-addons", "${BUILD}/packages", "--packed-session", "${PACKED_SESSION}", "--external-addons", "${EXTERNAL}", "--compat", "${COMPAT}", "--timeout", "180", "--settle", "15", "--failure-grace", "120" ], "rule": "Omit --profile: schema4 requires default CLI profile and creates its own session profile. No input/smoke/observer flags. failure-grace extends diagnostic collection only inside timeout and never changes failed verdict." } ], "assembly_between_package_and_startup": { "existing_helper": "docs/evidence/package-2026-10-01-convoy-stock/assemble-handoff.py", "adapt_only_parameters": [ "package", "build", "e", "route", "zip_path", "runner-output source path", "startup evidence destination" ], "mandatory_checks": [ "authored-before.json == current source_bundle.inventory(root) == matching route source-sha256.json; never reuse old route after guide source change", "one core project, copied authors/profile/external unchanged, native child exit0, cleanup confirmed; record strict candidate result unchanged", "pak_inventory unique entry path->sha256 exactly equals authored core payload excluding meta and addon.gproj; package addon.gproj matches exact authored digest", "source ZIP has canonical duplicate-free case-insensitive unique names, exact manifest membership and every member digest; addon subset equals authored freeze", "route completion and no script/runtime failures; runner cleanup/unchanged source and console hash; preserve resource errors", "create BUILD and PACKAGE_EVIDENCE with exist_ok=False; copy only mission packages and source, never external RHS/WCS/BMP content", "verify extracted source byte membership and runtime inventory after copy" ], "metadata_corrections": [ "Set original_packaging_failure_retained to not attempt.candidate_created; old helper hardcodes false despite archived failure. This is description only, never upgrade package verdict.", "Label UNQUALIFIED DEVELOPMENT CANDIDATE, release_qualified=false,published=false, startup pending until independent proof." ] }, "archive_and_finalize": { "existing_schema4_helper": "docs/evidence/packed-2026-10-01-convoy-stock/verify-and-finish.py", "do_not_use": "tools/archive_packed.py currently accepts schemas1/2, not combined external schema4", "adapt_only_parameters": [ "build", "startup", "pe", "se", "runner-output source path", "CHECK_LOG and matching freeze evidence" ], "mandatory_checks": [ "schema4 kind/project/addon_order exactly packed-chat-external-runtime-input/chat/core", "runner cleanup/input/external unchanged; no input_error/runner_error; manifest hash+launchUUID+timestamps bind exact run", "native log/session under exact fresh startup session; console hash and native/root JSON copies identical", "recompute packed_external.evidence from raw console with manifest input/external aliases and exact profile; each recomputed field must equal report", "ordinary normal modules, no WORKBENCH, no smoke, correct complete loaded/mount/database paths, mission ready and local participant, zero script/runtime failures and input violations", "compare normalized resource error set with prior retained packed report; any new error is a new limitation, not silently accepted or rewritten", "runtime inventory BUILD/packages == startup/input/addons == manifest artifacts == handoff runtime_files", "archive raw native logs, reports, provenance and dependency descriptors; no dependency assets", "bind successful full-suite log to exact final freeze; compute current test count, do not reuse historical source-equality assertion", "keep strict_packed_consumption_verified equal actual strict report; failed resource gate remains false even if readiness proved", "write archive hashes and reverify all archived bytes; update both handoff copies consistently; prior candidate remains untouched" ] }, "previous_helpers_sha256": { "docs/evidence/package-2026-10-01-convoy-stock/assemble-handoff.py": "2c7597f228cdd2b7aecc7fa3e6247b4fbd6b882afb1d7a29b18e63f2b882f1c8", "docs/evidence/packed-2026-10-01-convoy-stock/verify-and-finish.py": "f293ef29aa905e326fa42d1d8255ff1ad25106922c04e48abcab6982c97eb3be" }, "nonclaims": [ "No release qualification", "No native physical depot loading qualification", "No human/MP escape or measured FPS qualification", "No clean packaging claim from payload hashes or cleanup" ] }