Separate radio defence and harden player and objective lifecycles

This commit is contained in:
2026-09-19 05:33:36 +02:00
parent e5857b6ddf
commit 16f397e581
237 changed files with 29087 additions and 202 deletions
+51 -5
View File
@@ -4,7 +4,7 @@
## Repository checks
`python3 tools/check.py` passes: five-addon isolation, acyclic dependencies, twenty source resource identities, exact successor/vanilla GUID references, production mission-rule boundaries, physical radio paths and failure handling, settings conversion, helicopter availability policy and mortar salvo policy. The latter two are helper tests, not operational support-controller evidence.
`python3 tools/check.py` passes: five-addon isolation, acyclic dependencies, twenty-two source resource identities, exact successor/vanilla GUID references, production mission-rule boundaries, physical radio paths and failure handling, settings conversion, helicopter availability policy and mortar salvo policy. The latter two are helper tests, not operational support-controller evidence.
The reference guard verified all 533 original workspace source/resource files against the pre-test snapshot. Existing missions were not edited or saved. Native tests use a separate profile and only the successor projects plus vanilla dependencies. Earlier successful visible runs were measured on the right display. A later launch restored an oversized main Workbench window despite placement rules; those tests were stopped. Automated tests now run on an isolated headless display and create no physical-desktop windows.
@@ -22,8 +22,8 @@ The original prison prototype had an unsuitable slope and a gate-opening mismatc
The run is not a clean runtime pass. The report preserves errors rather than suppressing them:
- During restart, vanilla US and USSR medical-kit catalog objects at world origin are destroyed without an initialized entity-catalog reference. Their inherited `SCR_BaseItemSupportStationComponent.OnDelete` path logs two catalog-manager errors. The diagnostic identifies the objects; it does not alter vanilla cleanup behavior.
- Vanilla vehicle resources emit unsupported fields: Mi8 `SlidingTrackMaterial`, and catalog-loaded BRDM2/BTR70 `Parent` entries. Validate the installed game/Tools resource compatibility before release.
- Some restarts emit two catalog-manager errors associated with vanilla US and USSR medical-kit catalog objects. Read-only source inspection identified an inherited `SCR_BaseItemSupportStationComponent.OnDelete` validation path; the opt-in diagnostic now records the actual owner and manager state. The missing-manager teardown cause remains an inference until reproduced with that diagnostic.
- Vanilla vehicle resources emit unsupported fields: M151A2 `SlidingTrackMaterial`, and catalog-loaded BRDM2/BTR70 `Parent` entries. Validate the installed game/Tools resource compatibility before release.
- Vanilla UI slot/button warnings occur during end-screen setup, and inherited Everon initialization reports a radio-manager ordering warning. The successor creates its radio manager, but these warnings still need evaluation.
The shared-map destruction exception and unsupported runtime destructible-wall errors from earlier prototypes no longer occur in the archived repeated-round run.
@@ -44,7 +44,7 @@ Four catalog-manager errors were recorded across the two restarts, alongside the
## Player death, identity roster and spectator restart
[native-2026-09-19-011025](evidence/native-2026-09-19-011025/report.json) contains two completed death rounds with 20 passing assertions and no script/runtime exceptions. The fixture exercises native character death, transition into the local spectator camera, the all-dead grace interval, defeat and automatic restart. An isolated roster with a real living actor checks spent-life retention, disconnected survivor retention, duplicate identity rejection and reused connection IDs. It does not simulate an actual remote disconnect/reconnect. Seven inherited helicopter schema errors still fail the overall native report.
[native-2026-09-19-011025](evidence/native-2026-09-19-011025/report.json) contains two completed death rounds with 20 passing assertions and no script/runtime exceptions. The fixture exercises native character death, transition into the local spectator camera, the all-dead grace interval, defeat and automatic restart. An isolated roster with a real living actor checks spent-life retention, disconnected survivor retention, duplicate identity rejection and reused connection IDs. It does not simulate an actual remote disconnect/reconnect. Seven inherited vehicle schema errors still fail the overall native report.
This test ran on headless Gamescope at 1280×720/30Hz using a cloned disposable Proton prefix. The physical desktop contained only the user's pre-existing editor. `tools/headless_workbench.py` provides a bounded version of this runner, stopping on failure, timeout or the requested number of completions and preserving engine errors in its exit status.
@@ -119,7 +119,7 @@ The first expanded-route native compile failed on Enforce's unsupported compound
[034556](evidence/native-2026-09-19-034556/report.json) completed the expanded guard-radio regression and death/defeat sequence with 37 passing assertions and no script/VM exceptions. All six physical six-person squads had manpacks; the selected production uplink/downlink delivered and deleting the receiver's actual radio interrupted an in-flight HQ order. The fixture also checked native death, local spectator activation and all-dead defeat. This does not prove every multi-hop route. Seven inherited vehicle schema errors remain.
The final three archives (033719, 034344 and 034556) match all 99 current addon source/resource files. All test processes were stopped. Source/resource checks pass for five isolated addons and 22 unique resources; the 533-file original-workspace reference guard remains unchanged. Manual gameplay, medical treatment, multiplayer, performance and clean-runtime release gates remain open.
The three archives (033719, 034344 and 034556) match the 99 addon source/resource files at that historical checkpoint. All test processes were stopped. Source/resource checks pass for five isolated addons and 22 unique resources; the 533-file original-workspace reference guard remains unchanged. Manual gameplay, medical treatment, multiplayer, performance and clean-runtime release gates remain open.
## Independent extraction and mission clock
@@ -138,3 +138,49 @@ These hidden, muted local tests establish the exercised service and native-objec
[042046](evidence/native-2026-09-19-042046/report.json) completed one companion-loaded escape with 48 assertions and no script/VM exceptions. Core, HQ, Intel, Chat and Map compile together; existing command aliases, physical documents, interrupted defence, extraction and the personal winner title still work. Seven inherited vehicle schema errors remain.
Archives 040928, 041233, 041445 and 042046 match all 105 addon source/resource files at this checkpoint. Tests ran on the private hidden display with muted test audio and were stopped afterward. The original workspace's 533 tracked reference source/resource files remain unchanged. Repository policy/resource checks pass; clean-runtime, manual-play, multiplayer and performance release requirements remain open.
## Base radio separation, native objective details and ground transport
[042945](evidence/native-2026-09-19-042945-ui-refresh-failure/report.json) retained a real presentation failure: the native task description changed after radio discovery, while its already-open details widget remained stale. The list/details initialized correctly and showed no hidden task position. The successor now subscribes only its own open objective details to native display-data changes, with removal on task switch/detach. The later 044330 and 044608 runs pass the already-open detail update after discovery; their separate new radio fixture fails before completing the round, so whole-loop validation remains separate.
[043410](evidence/native-2026-09-19-043410-parking-failure/report.json) rejected the first ground-transport parking position at 5960/7232 due to a native geometry obstruction. Preparation rolled back; the error was not suppressed. [043631](evidence/native-2026-09-19-043631-parking-survey/report.json) then surveyed 120 nearby positions with the transport temporarily omitted only in its fixture definition, finding 43 clear candidates without removing scenery. The selected southern position, 5960/7212, has a 0.625 m sampled terrain range over its six-metre square. This is placement evidence, not driving or navigation acceptance.
[043806](evidence/native-2026-09-19-043806-transport-readiness-failure/report.json) retained a subsequent readiness failure after the parking point itself passed. The bounded diagnostic in [044028](evidence/native-2026-09-19-044028-transport-bounds-failure/report.json) showed native vehicle bounds extending 3.25 m from the surveyed center, exceeding the original 2.5 m allowance; actual origin displacement was only about 0.06 m. The configuration now requires an eight-metre cleared square and retains a 0.5 m margin around full native bounds.
[044205](evidence/native-2026-09-19-044205/report.json) passes 23 native transport checks with no script/VM exceptions. Parking, five native driver/passenger positions, actual two-character occupancy, ordinary engine startup and finite fuel work. Native fuel starts at 58.5 L with 78 L capacity. Depleting fuel and deleting transport do not refill or recreate it, including repeated preparation/initialization queries. The fixture stops its site service and explicitly requests test reset. Seven inherited vehicle schema errors remain; this is not manual driving, road access or multiplayer acceptance.
[044330](evidence/native-2026-09-19-044330-radio-fixture-failure/report.json) and [044608](evidence/native-2026-09-19-044608-radio-position-fixture-failure/report.json) preserve failures in a new radio-service fixture that immediately checked distance after moving its character. Switching to the native character teleport API alone did not resolve the check; the fixture is being made asynchronous so it observes applied native state before asserting it. These runs do not count as completed Core regressions.
[044924](evidence/native-2026-09-19-044924/report.json) independently completes the established companion-loaded escape with 48 passing assertions and no script/VM exceptions. The production radio service accepts the identified nearby player, resets on departure, completes real-time continuous occupancy and advances to physical helicopter extraction. Existing command aliases, document recovery and personal results still work. Seven inherited vehicle schema errors remain.
The offline performance comparator passes fifteen synthetic regressions and does not produce real benchmark evidence. Release qualification passes 46 validation regressions and correctly refuses the current ledger: all first-release cases remain pending and clean native runtime remains failed. Neither tool changes acceptance or publishes a package.
[045450](evidence/native-2026-09-19-045450-radio-recovery-fixture-failure/report.json) confirms that deferred native movement resolves the distance assertions: the measured out-of-range position is 6.005 m from the radio and unconscious tuning is rejected. The next assertion fails during recovery. The test is being corrected to separate its overlapping characters and await native consciousness; no production authorization rule was weakened.
[050158](evidence/native-2026-09-19-050158-lifecycle-compile-failure/report.json) preserves a compiler rejection of two ticket member names that collide with native type names. The members were renamed before further testing.
[050240](evidence/native-2026-09-19-050240-lifecycle-reflection-failure/report.json) preserves the next integration failure: the WORKBENCH-only spawn-logic override needed to repeat its native container metadata. The corrected reflected class loads and starts an ordinary prisoner in [050403](evidence/native-2026-09-19-050403/report.json), which completes 54 lifecycle assertions without script/VM exceptions. Native geometry leaves 20 clear prison positions around the real prisoner; reserved slots remain distinct and inside the enclosure. A physical unowned body blocks its slot. Native finalization rejects spent-life and wrong-data requests, deletes only the owned unpossessed actor, preserves the actual prisoner, and rejects vertical displacement. The fixture explicitly ends its test; real remote preload, disconnect/reconnect and 12-client acceptance remain pending. Seven inherited vehicle schema errors remain.
[050515](evidence/native-2026-09-19-050515/report.json) completes two Core escape/restart rounds with 340 assertions, no script/VM exceptions and seven inherited vehicle schema errors. The independent radio edge fixture now waits for real native recovery and passes physical defender handover, empty samples, hostile/unknown/dead actors, interrupted occupancy, live duration changes, cancellation and one-time completion. The ordinary real-time escape then succeeds twice through the new player-admission gate. Native task details update after discovery, advancing progress and interruption. Separate objective-close cleanup review follows; remote UI remains unverified.
The opt-in station diagnostic identifies US/USSR medical-kit prefabs during `OnDelete/InitValidSetup` at restart. Both cached and global catalog references remain available in this run despite no current game mode, so the intermittent missing-manager error is not reproduced or declared fixed.
Future native runs now snapshot addon files before process launch, compare sources after shutdown and seal the raw console log. Archival and release checks reject source/log mismatches. Older archives retain their original historical evidence; they cannot satisfy the new launch-provenance release requirement.
[051249](evidence/native-2026-09-19-051249-companion-fixture-name-failure/report.json) preserves a companion compile failure from two WORKBENCH test helpers sharing a member name on the same extended game mode. The Core helper was renamed to avoid the pre-existing Chat radio-network probe. This is the first archive with mechanically verified pre-launch source, stopped source and raw-log hashes; the failed result remains failed.
[051452](evidence/native-2026-09-19-051452/report.json) completes two Core escape/restart rounds with 374 assertions, no script/VM errors and seven inherited resource errors. Native objective close/rebind/reopen checks pass, including no retained task events or delayed overflow calls to the closed panel. The runner verifies identical pre-launch and stopped addon sources and seals the raw log. A subsequent ownership-flag change covers task deletion before panel closure and is checked separately by the short `objective-ui` fixture.
[052140](evidence/native-2026-09-19-052140-deleted-task-callback-failure/report.json) preserves a remaining teardown failure: deleting an isolated native task clears its weak references and the panel detaches, but a delayed callback still reaches the retained test handler. The assertion remains failed while callback identity and queue state are investigated.
[052352](evidence/native-2026-09-19-052352/report.json) completes the full companion escape with 48 assertions, no script/VM errors and verified launch/stopped-source/log hashes. The helper-name collision is fixed. Core admission, radio, physical intel, preserved admin aliases and extraction work with all companions. Seven inherited resource errors remain; the isolated task-deletion UI failure is separate and still open at this snapshot.
[052621](evidence/native-2026-09-19-052621-deleted-task-callback-diagnostic/report.json) identifies the surviving callback as `UpdateAssignees`, invoked immediately when the real objective assignment is restored. Installed vanilla source declares all five task-event getters static; guarding their removal by a live task left the closed panel subscribed after task deletion. Cleanup now removes the static invoker subscriptions using retained successor-binding ownership. The unchanged delayed callback assertion is rerun rather than weakened.
[052811](evidence/native-2026-09-19-052811/report.json) reaches all 30 UI assertions and completion after the static-event fix, but remains a failed runtime result: the added name-based queue diagnostic tries to inspect protected `CheckOverflow` and emits three VM exceptions. The normal function-based cancellation does not emit them. The invalid diagnostic is removed before final UI validation; its exceptions are retained in this archive and the preceding diagnostic run.
[052932](evidence/native-2026-09-19-052932/report.json) completes the companion-loaded death/spectator/defeat fixture with 32 assertions, no script/VM exceptions and verified source/log provenance. Native damage kills the actual prisoner, activates the spectator camera and retains the spent life through the revised delayed observer callback. Seven inherited resource errors remain; remote reconnect and spectator streaming are still unverified.
[053124](evidence/native-2026-09-19-053124/report.json) completes all 30 isolated UI assertions with no script/VM exceptions after removing the temporary name-based diagnostic. Real close/rebind/reopen, native weak-reference clearing after isolated task deletion, global event unsubscribe, delayed callback cancellation and restoration of the actual objective assignment all pass. Seven inherited resource errors remain. Its pre-launch/stopped source manifests match all 116 final addon files, and the stopped raw-log hash verifies.
At this checkpoint, repository policy/resource checks, 15 synthetic performance-tool regressions and 46 release/provenance regressions pass. The actual release checker still refuses all 17 pending first-release cases plus failed clean native runtime. All private test runners are stopped. Manual equipment/medical/casualty gameplay, real multiplayer/preload/reconnect testing, operational support/logistics, equivalent-workload FPS measurements and release packaging remain unfinished. Historical archives describe their own source snapshots; they are not relabelled as final-source tests.