Integrate physical radio calls and finite vehicle maintenance

This commit is contained in:
2026-09-20 06:37:17 +02:00
parent 963cab50c0
commit 915476f709
152 changed files with 26426 additions and 28 deletions
+20 -1
View File
@@ -99,6 +99,9 @@ def packed_directories(packed):
def packed_request(a):
if getattr(a, 'external_addons', None) is not None:
from packed_external import request
return request(a, ROOT)
candidate, session = getattr(a, 'packed_core', None), getattr(a, 'packed_session', None)
addons = getattr(a, 'packed_addons', None)
if candidate is None and addons is None and session is None:
@@ -126,6 +129,9 @@ def packed_request(a):
def prepare_packed(packed):
"""Called only while holding the ordinary runner's existing prefix lock."""
if packed.get('schema_version') == 3:
from packed_external import prepare
return prepare(packed)
packed['session'].mkdir(exist_ok=False)
target = packed['input']
target.mkdir(parents=True, exist_ok=False)
@@ -142,6 +148,9 @@ def prepare_packed(packed):
def packed_snapshot(packed, command, profile):
if packed.get('schema_version') == 3:
from packed_external import snapshot
return snapshot(packed, command, profile)
project = packed.get('project', 'core')
manifest = packed_payload_inventory(packed['input'], project)
if manifest != packed['manifest'] or packed_payload_inventory(packed['candidate'], project) != manifest:
@@ -160,6 +169,9 @@ def packed_snapshot(packed, command, profile):
def packed_seal(packed, raw, session):
"""Fail closed on changed/deleted inputs, retaining a useful failure record."""
if packed.get('schema_version') == 3:
from packed_external import seal
return seal(packed, raw, session)
metadata = json.loads(raw)
unchanged, error = False, None
try:
@@ -189,6 +201,9 @@ def native_path(value, game_root):
def packed_evidence(content, packed, steam, profile):
if packed.get('schema_version') == 3:
from packed_external import evidence
return evidence(content, packed, steam, profile, sys.modules[__name__])
project = packed.get('project', 'core')
report = game_evidence(content, project)
directories = packed_directories(packed)
@@ -1282,7 +1297,10 @@ def run_locked(a, steam, compat, profile, packed=None):
link = addons/'ArmaReforger'
if not link.exists() and not link.is_symlink():
link.symlink_to(vanilla, target_is_directory=True)
if link.resolve() != vanilla.resolve() or any(x.name not in {'ArmaReforger', 'saves'} for x in addons.iterdir()) or any((addons/'saves').rglob('*.gproj')):
if packed and packed.get('schema_version') == 3:
from packed_external import prepare_profile
prepare_profile(packed, steam, profile)
elif link.resolve() != vanilla.resolve() or any(x.name not in {'ArmaReforger', 'saves'} for x in addons.iterdir()) or any((addons/'saves').rglob('*.gproj')):
refuse('Private profile addons must contain only the installed vanilla link')
run_id = uuid.uuid4().hex
observation_nonce = run_id if getattr(a, 'observe_player_input', False) else None
@@ -1452,6 +1470,7 @@ def main():
packed_options = parser.add_mutually_exclusive_group()
packed_options.add_argument('--packed-core', type=Path, help='Unqualified Core candidate directory containing exactly addon.gproj, data.pak and resourceDatabase.rdb')
packed_options.add_argument('--packed-addons', type=Path, help='Unqualified complete core/ai/intel/map/chat packed directories; requires --project chat')
parser.add_argument('--external-addons', type=Path, help='Explicit DEVELOPMENT packed Chat v3 only: audited installed RHS/WCS/BMP root; six private links, no broad workshop mount')
parser.add_argument('--packed-session', type=Path, help='New /tmp/erri-packed-core-<name> or erri-packed-chat-<name> session; owns a fresh input copy and profile')
parser.add_argument('--inspect-processes', action='store_true', help='Read-only process preflight report; never launch, lock, write a profile or configure audio')
parser.add_argument('--inspect-headless-display', action='store_true', help='Read-only ownership inspection within the hidden display; no input sent, loose Core/Chat only')