Capture current mission, AI, map and administration development

Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
This commit is contained in:
2026-10-13 22:52:53 +02:00
parent a951a96edc
commit 6a667d8deb
8104 changed files with 2124945 additions and 2061 deletions
+35
View File
@@ -1,5 +1,12 @@
# Player lifecycle and pending admission
New free-spawn characters are damage-protected while their admission ticket waits
for the owner's scene, inventory and native asset preload. Protection ends when
the verified spawn is finalized; failed/cancelled tickets restore their prior
damage state and clean up the unassigned body. This is tied to the actual body and
ticket, not a connection-ID timer. Existing reserved-body reconnects retain their
native handoff and vulnerability policy.
Admitted prisoners now survive lethal damage as treatable unconscious casualties.
If everyone is unconscious and neither treatment nor recovery progresses for 30
seconds, the round ends in defeat. See [recovery rules](recovery.md) for medical
@@ -55,3 +62,31 @@ The native lifecycle fixture in [050403](evidence/native-2026-09-19-050403/repor
`tests/test_spawn_retry_budget.py` executes the actual `DoSpawn_S` method with native controller, respawn, geometry and scheduler adapters. It covers persistent blocked positions, missing prerequisites, thirty-attempt exhaustion, temporary recovery, request rejection, preparation waiting, spent/late life refusal and unchanged pending requests. The counter change has source-local regression evidence only until the next native integration run; this does not qualify slow remote clients or real multiplayer admission.
The combined unconscious-camera/weapon revision passed eighteen native Workbench assertions on 24 September 2026: real player incapacitation, current manual camera activation, unchanged possession/living body, no-target fallback, physical-target tracking and movement, native FullHeal recovery, restoration of the player camera, repeated knockout, default-enabled retention of the exact rifle, the same rifle equipped after revival, and normal ground drop with retention disabled. There were no script/runtime failures, and runner cleanup and unchanged-source verification succeeded. Existing RHS/WCS and vanilla resource errors remain in the log, so this is not an error-free engine log. A WORKBENCH-only target stand-in exercises camera tracking because this runner has one real player; it does not establish remote multiplayer streaming. The actual server selection/client policy regressions cover self-exclusion, conscious teammates, canonical identity, target loss, recovery, inactive rounds and delayed unconscious metadata. Arrow input edge/hold/menu behavior and firearm categories have source-policy tests; the new menu controls have structural and command-route checks. The complete repository checks passed. Evidence is in `.local/analysis/unconscious-weapon-2026-09-24`.
## Delayed native preload completion (1 October 2026)
The server's scene deadline now reaches the existing owned-ticket rejection even while a remote native preload completion is delayed. Rejection cannot assign a character, consume a life, or revive a stale ticket after a late acknowledgement. The ordinary verified admission path remains intact. Actual-method red/green regressions pass; the normal generated route independently verifies ordinary native admission. Remote timeout timing remains a multiplayer test requirement. [Evidence and scope](mission-hq-fixes-2026-10-01.md).
## Exhausted rounds on an empty server (5 October 2026)
An active round that has already admitted players now evaluates its no-survivor
end condition even when no clients are connected. Previously the empty-server
return reset that timer every tick. Once the last reconnect reservation expired
and its body was removed, the old round could remain open indefinitely. Returning
players still had a spent life, saw the spectator camera, and had to wait for the
30-second defeat grace and the next round's generation.
The existing grace now advances while the server is empty. Living reserved bodies
still prevent defeat, including the existing 15-minute reconnect window. A fresh
round with no admitted players waits normally and does not repeatedly restart.
No life is refunded, no new body is substituted during a round, and connected
players retain the existing defeat and admission behavior. Reservation expiry,
start of the no-survivor grace, and exhausted-round termination now produce
explicit log messages.
`test_initial_admission_exhaustion.py` reproduces the old failure using the actual
`ServerTick` body and covers reservation retention, expiry, grace cancellation,
and a fresh idle round. Reconnect, admission and native-end policy checks also
pass. The observed live server generated its next round and successfully spawned
the returning player; that recovery preceded deployment of this source fix.