5.8 KiB
Archived coarse approach: selection refused safely
Read-only audit of docs/evidence/game-2026-09-19-205021-coarse-selection-refusal, nonce ce06dd0073694c469d53956617d51bdf. diagnostic.json records archive hashes, exact matching helper/module hashes, raw validator outcomes and reproducible timing calculations. analyze.py reparses preserved console bytes; its small offline parser benchmark is explicitly separate from native runtime timing. No source, input or runtime changes were made.
The independent raw look, approach and facing validators pass. Selection does not pass: no wheel event occurred. The native startup report has no script/runtime or engine errors, while the outer runner correctly records input-exercise-failed and confirmed containment cleanup. The helper's worker-failure/supervision record is retained; successful approach/facing do not make the requested selection trial successful.
Measured cost and refusal
| Interval or observation | Archived measurement |
|---|---|
| Look calibration | 2.559s |
| Coarse approach | 25.605s; 7 mouse requests, 15 W pairs |
| First approach turn through first W | 5.956s |
| Physical path / final target error | 4.574m / 0.676m |
| W holds min / median / max | 190.548 / 195.407 / 207.480ms |
| Sum of W holds / their release guards | 2.945522s / 2.944871s |
| Largest complete physical stop | 0.4383m |
| Facing prerequisite before module entry | 0.1575s |
| Facing module | 5.8243s; 4 mouse requests |
| Remaining shared lease at facing completion | 2.0182s |
| Facing completion through selection module entry | 0.2754s |
| Selection initial guarded read | 0.2856s |
| Remaining lease at wheel admission check | 1.45716s |
| Shortfall against unchanged 1.5s admission | 42.84ms |
The fifteen release guards account for all but0.651ms of aggregate actual W-held duration. This run therefore does not support shortening a wait or removing a release ownership check. All W pairs were released; there is no held key/button uncertainty, paired-release error, wheel input, F input or gate operation.
The bottleneck is the separate frozen 8-second facing→selection lease, not the45-second native observation clock. That stage expires at host820550.866666. The conservative original observation deadline is820556.429862, but using its additional5.563s would renew the forbidden stage lease. At facing's last native sample323, real67285ms, the raw QUEUED30453ms+45000ms lifetime had8.168s left. None of this authorizes a longer selection attempt or a held-F attempt.
Narrow candidate: do not drain an already accepted facing pair twice
tools/prison_alignment_proof.py, _perform_alignment completion branch around lines171–181, first finds a valid stable pair, then unconditionally calls read() again and recomputes that pair. Every read() already performs the full live ownership guard, idle check, ordered complete-history consumption, stationary/geometry/action checks, sample freshness and immutable deadline checks. On this run the last turn was acknowledged at sample320; 319/320 already meet the native facing condition: consecutive100ms, identical yaw161.9807°, original context and lock permission true, and original disabled door selected. Their handle-bearing errors were0.5392°/0.2516°. The next drain advanced to321–323, which remained equally valid. Sample320's receipt through final completion consumed0.3471s; that span includes processing and the redundant final guarded read, so it is not an exact guard-only measurement.
A bounded future change could let facing-only return the already accepted pair after require_idle() and explicit final freshness/deadline checks. Strict alignment's default path can remain unchanged. This is not an input operation and need not authorize anything new: retain the subsequent independent raw facing validation, selection's full guarded initial read, and every live guard/pointer/idle check immediately before wheel-down/up. Selection must still consume all intervening samples starting at the earlier facing-final index, preserving original receipts and refusing body movement, changed identity/context/permission, pressed/progress input, stale evidence or lost focus before any wheel event. Do not discard or relabel any later raw records.
The expected saving is one existing observation guard plus one complete-history parse, plausibly a few tenths of a second here; 43ms is only the admission deficit, not a promised execution margin. Native timing could vary, and wheel delivery/confirmation/acknowledgement must still finish within the same old deadline. No lease,1.5s admission, pointer bound, turn bound or input capability should change. A regression should prove an already fresh pair returns without an extra observation drain, while stale/expired/non-idle pairs refuse and a changed next selection sample blocks input. Re-run the full independent raw chain. A future native run must retain refusal if this is still insufficient.
An alternative is parse-result reuse keyed to exact immutable console content within one observer call. The current Observer.approach_data() separately runs join_choice_snapshots and validate_gate_geometry (which reparses); validate_facing_evidence also independently revalidates the prior route. Seven offline replays measured medians40.5ms/37.8ms for the first two functions and181.0ms for complete facing validation. Those numbers are diagnostic CPU measurements on current hardware, not attribution of the historical runtime. Broad caching would require careful immutable-prefix/receipt/source binding and is a larger change than removing the redundant no-input completion drain. Do not remove independent validation or any input guard to recover time.
This report establishes a concrete source-supported optimization candidate only. It does not qualify lock selection, F hold, opening, passage through the gate, multiplayer or FPS.