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:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user