Add typed field-flight prototype and preserve native qualification failures

This commit is contained in:
2026-09-19 21:01:20 +02:00
parent 83ea247e62
commit 61e165ef5b
91 changed files with 40570 additions and 85 deletions
@@ -0,0 +1,42 @@
from pathlib import Path
import sys,json,hashlib,statistics,time,re,math
root=Path('/home/jakub/devel/escapistsrereintroduced'); archive=root/'docs/evidence/game-2026-09-19-205021-coarse-selection-refusal';out=Path('/tmp/erri-coarse-selection-audit')
sys.path.insert(0,str(root/'tools'))
from ordinary_gate_choices import join_choice_snapshots
from ordinary_look_evidence import validate_look_evidence
from prison_approach_evidence import validate_approach_evidence
from prison_alignment_evidence import validate_facing_evidence
from prison_action_selection_evidence import validate_selection_evidence
from ordinary_gate_evidence import validate_gate_geometry
h=json.loads((archive/'input-proof.json.txt').read_text()); text=(archive/'console.log.txt').read_text();r=json.loads((archive/'runner.json.txt').read_text());nonce=h['nonce'];a=h['approach_proof'];f=h['facing_proof'];s=h['action_selection_proof'];l=h['look_proof'];data=join_choice_snapshots(text,nonce);frames=data['snapshots']
def digest(p):return hashlib.sha256(p.read_bytes()).hexdigest()
def stats(v):return {'count':len(v),'minimum':min(v),'median':statistics.median(v),'maximum':max(v),'sum':sum(v)}
sourcehash={k:v for group in ('approach_module_sha256','alignment_module_sha256','selection_module_sha256') for k,v in h[group].items()};sourcehash['headless_input_proof.py']=h['helper_sha256'];sourcehash['headless_display_probe.py']=h['ownership_helper_sha256']
bindings={k:{'recorded_sha256':v,'actual_sha256':digest(root/'tools'/k),'matches':digest(root/'tools'/k)==v} for k,v in sourcehash.items()}
assert all(v['matches'] for v in bindings.values()),bindings
validations={
'look':validate_look_evidence(text,nonce,l,a['events'][:2]),
'approach':validate_approach_evidence(text,nonce,l,a),
'facing':validate_facing_evidence(text,nonce,l,a,f),
'selection':validate_selection_evidence(text,nonce,l,a,f,s)}
queued=int(re.findall(r'ERR INPUT OBSERVE: run='+nonce+r' sample=0 real=(\d+) world=[^ ]+ QUEUED',text)[0]); ready=data['ready']['real_ms'];ready_host=a['deadline_monotonic']-35
original_end=ready_host+(45000-(ready-queued))/1000-.5
motions=[]
for name,proof in [('approach',a),('facing',f)]:
receipts={x['sample']:x['received_monotonic'] for x in proof['samples']}
for m in proof['motions']:
before=frames[m['after_sample']];after=frames[m['response_sample']];yaw=lambda x:math.degrees(math.atan2(x[0],x[2]));turn=(yaw(after['look']['direction'])-yaw(before['look']['direction'])+180)%360-180
motions.append({'stage':name,**m,'native_turn_degrees':turn,'before_receipt_to_dispatch_s':m['monotonic']-receipts[m['after_sample']],'dispatch_to_response_receipt_s':receipts[m['response_sample']]-m['monotonic'],'native_span_ms':after['real_ms']-before['real_ms']})
events=h['events'];holds=[events[i+1]['monotonic']-events[i]['monotonic'] for i in range(0,len(events),2)];releaseguards=[g['returned_monotonic']-g['entered_monotonic'] for t in a['release_timings'] for g in t['guards']]
metrics={'queued_real_ms':queued,'ready_real_ms':ready,'ready_host':ready_host,'raw_original_end_ms':queued+45000,'conservative_original_end_host':original_end,'look_duration_s':l['finished_monotonic']-l['started_monotonic'],'approach_duration_s':a['finished_monotonic']-a['started_monotonic'],'approach_first_turn_through_first_W_s':events[0]['monotonic']-a['motions'][0]['monotonic'],'approach_final_distance_m':validations['approach']['final_distance_metres'],'approach_path_m':validations['approach']['path_metres'],'approach_pulses':len(holds),'approach_yaw_requests':len(a['motions']),'holds_s':stats(holds),'release_guards_s':stats(releaseguards),'total_release_guard_s':sum(releaseguards),'actual_release_over_guard_s':sum(holds)-sum(releaseguards),'largest_stop_m':max(t['distance'] for t in a['stops']),'facing_wrapper_started_host':f['deadline_monotonic']-8,'facing_prerequisite_before_module_s':f['started_monotonic']-(f['deadline_monotonic']-8),'facing_duration_s':f['finished_monotonic']-f['started_monotonic'],'facing_yaw_requests':len(f['motions']),'facing_finish_to_selection_start_s':s['started_monotonic']-f['finished_monotonic'],'selection_initial_read_s':s['finished_monotonic']-s['started_monotonic'],'shared_deadline_host':f['deadline_monotonic'],'remaining_at_facing_end_s':f['deadline_monotonic']-f['finished_monotonic'],'remaining_at_selection_entry_s':f['deadline_monotonic']-s['started_monotonic'],'remaining_at_refusal_s':f['deadline_monotonic']-s['finished_monotonic'],'shortfall_to_1_5_admission_s':1.5-(f['deadline_monotonic']-s['finished_monotonic']),'unused_original_time_beyond_stage_s':original_end-f['deadline_monotonic'],'raw_original_ms_remaining_at_facing_last_sample':queued+45000-frames[f['final_sample']]['real_ms'],'facing_final_pair':f['facing_samples'],'facing_last_response_sample':f['motions'][-1]['response_sample'],'facing_last_response_receipt_to_finish_s':f['finished_monotonic']-next(x['received_monotonic'] for x in f['samples'] if x['sample']==f['motions'][-1]['response_sample'])}
# Timing here is a separate offline replay, not the archived runtime latency.
functions={'join_choice_snapshots':lambda:join_choice_snapshots(text,nonce),'validate_gate_geometry':lambda:validate_gate_geometry(text,nonce,data['ready']['sample'],max(frames)),'validate_approach_evidence':lambda:validate_approach_evidence(text,nonce,l,a),'validate_facing_evidence':lambda:validate_facing_evidence(text,nonce,l,a,f)}
bench={}
for name,fn in functions.items():
times=[]
for _ in range(7):
start=time.perf_counter();fn();times.append(time.perf_counter()-start)
bench[name]=stats(times)
result={'scope':'Read-only diagnosis of archived local coarse approach/facing refusal; no input/runtime/source changes, no selection or held-action qualification','archive':str(archive),'nonce':nonce,'artifact_hashes':{p.name:digest(p) for p in archive.iterdir() if p.is_file() and p.suffix!='.bmp'},'tool_source_bindings':bindings,'independent_raw_validation':validations,'metrics':metrics,'motions':motions,'offline_replay_seconds_not_native_timings':bench,'input_end':{'keys':[e['key'] for e in events],'wheel_events':h['wheel_events'],'paired_release_errors':h['paired_release_errors'],'wheel_release_errors':h['wheel_release_errors'],'held_key':h['unconfirmed_held_key'],'held_button':h['unconfirmed_held_button'],'all_attempted_presses_released':h['all_attempted_presses_released'],'runner_result':r['result'],'runner_cleanup_confirmed':r['cleanup_confirmed'],'helper_supervision_error':h.get('supervision_error')}}
(out/'diagnostic.json').write_text(json.dumps(result,indent=2)+'\n')
print(json.dumps({'metrics':metrics,'validation':{k:v.get('verified') for k,v in validations.items()},'offline_benchmark':bench,'source_bindings_match':all(x['matches'] for x in bindings.values())},indent=2))
@@ -0,0 +1,435 @@
{
"scope": "Read-only diagnosis of archived local coarse approach/facing refusal; no input/runtime/source changes, no selection or held-action qualification",
"archive": "/home/jakub/devel/escapistsrereintroduced/docs/evidence/game-2026-09-19-205021-coarse-selection-refusal",
"nonce": "ce06dd0073694c469d53956617d51bdf",
"artifact_hashes": {
"console.log.txt": "19f664515ff2ad37fd31faf7f71d319672809e9f21900a223dfa55b416e9c9cf",
"script.log.txt": "cc0436cd1f083c3ef05dca13f1ed4f020944e1dc17a2de55153e728dc9efd69c",
"error.log.txt": "4f6c4fa0f54fa4e46af4c1380bd184d74f707a7c6efbfd76f66fb80742df1dc7",
"rereintroduced-hq.log.txt": "8db452edc8255b731774e105ba7ebbe4d6e9965ca2ee497051a9c7953bc82c66",
"headless-launch.log.txt": "82b9b6c857b929110f34f0db1927587784def0d6d026e1745f5c5f04057802f0",
"runner.json.txt": "b198bd8329760be145fb34ef472f5ac8dc7be4f0588263dd6c3235362fc6970f",
"game-startup-report.json.txt": "d427c1cbbc33b900d52091bd80ebc7b354061922fc7a6e8d2dade7317432895c",
"display-ownership.json.txt": "ca694fe7db29ea5e96a541c9e5b708c3f4a05ff434eb3e52a051042775077f77",
"input-proof.json.txt": "23a1ed5fad7b15408ff37dc0dd0b8713be7825a096e3449f05b80c338b77cd62",
"source-sha256.json": "9d8168a101d52df79a76b53dce0829cff501a0fb7478b88a3652d7fe34364715",
"source-provenance.json": "c1f270c1969af10bbfb78e1d661ce66873eb4c96f321df980a722a80c71c05f1",
"launch-source-sha256.json": "9d8168a101d52df79a76b53dce0829cff501a0fb7478b88a3652d7fe34364715",
"launch-source.json": "a4d5aa3fcbcdcc47f6f46626b468535cc24867f888a50e8bb12385fcec4428ce",
"report.json": "14115e1fca0855bf31e20e65ee2130b71a9e2aa3f9daf6ec6f703b718f2ab180"
},
"tool_source_bindings": {
"prison_approach_proof.py": {
"recorded_sha256": "fcd2936fa5a67ba6a970c56e8e4d04cc76bff6ffc6087ac95085716fb5fa673f",
"actual_sha256": "fcd2936fa5a67ba6a970c56e8e4d04cc76bff6ffc6087ac95085716fb5fa673f",
"matches": true
},
"ordinary_gate_evidence.py": {
"recorded_sha256": "5f02596c92b945b28081d861e466f01897875489e673bf0feafa6e4ebdae1708",
"actual_sha256": "5f02596c92b945b28081d861e466f01897875489e673bf0feafa6e4ebdae1708",
"matches": true
},
"ordinary_look_evidence.py": {
"recorded_sha256": "3b6a0415352295e15e988ff78659e81981001e1ee03430a5b4c2df1518dd9a31",
"actual_sha256": "3b6a0415352295e15e988ff78659e81981001e1ee03430a5b4c2df1518dd9a31",
"matches": true
},
"prison_approach_evidence.py": {
"recorded_sha256": "12f1618b16f845d987ba928c8d95f2d448bc6a600fb76f8870b2ae8fd4a660cb",
"actual_sha256": "12f1618b16f845d987ba928c8d95f2d448bc6a600fb76f8870b2ae8fd4a660cb",
"matches": true
},
"prison_alignment_proof.py": {
"recorded_sha256": "605cb374d42dec637934188b8f69492e924787c309139ee3dd6233ae073e4063",
"actual_sha256": "605cb374d42dec637934188b8f69492e924787c309139ee3dd6233ae073e4063",
"matches": true
},
"prison_alignment_evidence.py": {
"recorded_sha256": "e6c3bdae65a216ae5db7b2a18f7b2f5e347b0998ec55845d7c263d2909dc64f7",
"actual_sha256": "e6c3bdae65a216ae5db7b2a18f7b2f5e347b0998ec55845d7c263d2909dc64f7",
"matches": true
},
"ordinary_gate_choices.py": {
"recorded_sha256": "59a0055d44f2f5b27c530406e5cbd46847357285d2d260d08e5c34cc53b7a795",
"actual_sha256": "59a0055d44f2f5b27c530406e5cbd46847357285d2d260d08e5c34cc53b7a795",
"matches": true
},
"prison_action_selection_proof.py": {
"recorded_sha256": "00d397bf9b13405a2612678ec866f09d452acb4079f2072eb97c79a7fdf650da",
"actual_sha256": "00d397bf9b13405a2612678ec866f09d452acb4079f2072eb97c79a7fdf650da",
"matches": true
},
"prison_action_selection_evidence.py": {
"recorded_sha256": "bd38768efb724076444a88406cddceade4cb3492b1c88fe17e4feca3684529f5",
"actual_sha256": "bd38768efb724076444a88406cddceade4cb3492b1c88fe17e4feca3684529f5",
"matches": true
},
"headless_input_proof.py": {
"recorded_sha256": "8530fc61dac15fe09e558f9866d33b512d0357d5369f8ec652be0e5582ea3b8f",
"actual_sha256": "8530fc61dac15fe09e558f9866d33b512d0357d5369f8ec652be0e5582ea3b8f",
"matches": true
},
"headless_display_probe.py": {
"recorded_sha256": "4ec3851835474eb4d8b84fc74c20d08567d92906ce832643d911f1d062abf0bd",
"actual_sha256": "4ec3851835474eb4d8b84fc74c20d08567d92906ce832643d911f1d062abf0bd",
"matches": true
}
},
"independent_raw_validation": {
"look": {
"verified": true,
"errors": [],
"scope": "two fixed relative mouse requests with native camera yaw response and return; stationary body; no visual, aiming, multiplayer or general input qualification",
"baseline_samples": [
25,
26
],
"response_sample": 35,
"return_sample": 43,
"baseline_yaw_delta_degrees": 0.0,
"response_yaw_degrees": 1.7573359632885115,
"return_yaw_degrees": -0.026015146900135733,
"native_duration_ms": 2031,
"motion_count": 2,
"keyboard_order_verified": true
},
"approach": {
"verified": true,
"errors": [],
"scope": "one private ordinary-input approach to the interior prison gate waypoint; no unlock, escape, visual, multiplayer or FPS qualification",
"held_action_verified": false,
"escape_verified": false,
"profile": "coarse",
"first_sample": 47,
"last_sample": 272,
"native_duration_ms": 25467,
"path_metres": 4.5739295536078455,
"target": [
6092.77,
211.444,
7155.5
],
"final_distance_metres": 0.676239602508427,
"pulse_count": 15,
"turn_count": 7,
"geometry": {
"verified": true,
"errors": [],
"scope": "same-session native gate/input/camera telemetry and stable prison/lock geometry only; no approach, held-action completion, visual or multiplayer qualification",
"approach_verified": false,
"held_action_verified": false,
"start_sample": 47,
"end_sample": 272,
"native_duration_ms": 25467,
"snapshot_count": 226,
"geometry_max_drift_metres": 0.0,
"prison": [
6090.0,
211.444,
7160.0
],
"gate": [
6090.0,
211.344,
7154.0
],
"context": [
6092.77,
213.226,
7154.0
],
"radius": 2.0,
"gate_forward": [
0.0,
0.0,
1.0
],
"initial_context_distance_metres": 6.469450981343299,
"final_context_distance_metres": 2.7679205190902723
}
},
"facing": {
"verified": true,
"errors": [],
"scope": "stationary yaw facing the original gate with exact disabled door and available lock diagnostics; lock selection, held action and escape remain unverified",
"held_action_verified": false,
"escape_verified": false,
"lock_selection_verified": false,
"first_sample": 272,
"last_sample": 323,
"turn_count": 4,
"native_duration_ms": 6000,
"final_yaw_error_degrees": 0.6123750700397466,
"facing_samples": [
322,
323
]
},
"selection": {
"verified": false,
"errors": [
"selection did not complete under exact nonce without extra input"
],
"scope": "one guarded private wheel pair and native selection of the original prison lock after verified approach/facing; no F hold, unlock, exit or multiplayer qualification",
"held_action_verified": false,
"escape_verified": false
}
},
"metrics": {
"queued_real_ms": 30453,
"ready_real_ms": 32719,
"ready_host": 820514.195862484,
"raw_original_end_ms": 75453,
"conservative_original_end_host": 820556.4298624841,
"look_duration_s": 2.559277907013893,
"approach_duration_s": 25.60461599996779,
"approach_first_turn_through_first_W_s": 5.956018910976127,
"approach_final_distance_m": 0.676239602508427,
"approach_path_m": 4.5739295536078455,
"approach_pulses": 15,
"approach_yaw_requests": 7,
"holds_s": {
"count": 15,
"minimum": 0.19054808898363262,
"median": 0.1954068309860304,
"maximum": 0.2074798799585551,
"sum": 2.945522066554986
},
"release_guards_s": {
"count": 15,
"minimum": 0.19048968993593007,
"median": 0.19536762195639312,
"maximum": 0.20743700093589723,
"sum": 2.944871062063612
},
"total_release_guard_s": 2.944871062063612,
"actual_release_over_guard_s": 0.0006510044913738966,
"largest_stop_m": 0.43829214001670064,
"facing_wrapper_started_host": 820542.866666449,
"facing_prerequisite_before_module_s": 0.15752315195277333,
"facing_duration_s": 5.824266928015277,
"facing_yaw_requests": 4,
"facing_finish_to_selection_start_s": 0.27541963499970734,
"selection_initial_read_s": 0.2856277449754998,
"shared_deadline_host": 820550.866666449,
"remaining_at_facing_end_s": 2.01820992003195,
"remaining_at_selection_entry_s": 1.7427902850322425,
"remaining_at_refusal_s": 1.4571625400567427,
"shortfall_to_1_5_admission_s": 0.04283745994325727,
"unused_original_time_beyond_stage_s": 5.56319603510201,
"raw_original_ms_remaining_at_facing_last_sample": 8168,
"facing_final_pair": [
322,
323
],
"facing_last_response_sample": 320,
"facing_last_response_receipt_to_finish_s": 0.34708530991338193
},
"motions": [
{
"stage": "approach",
"dx": 341,
"dy": 0,
"monotonic": 820518.497399937,
"after_sample": 54,
"response_sample": 60,
"native_turn_degrees": 25.643902930191132,
"before_receipt_to_dispatch_s": 0.39629169506952167,
"dispatch_to_response_receipt_s": 0.4164421010063961,
"native_span_ms": 700
},
{
"stage": "approach",
"dx": 341,
"dy": 0,
"monotonic": 820519.522170431,
"after_sample": 62,
"response_sample": 70,
"native_turn_degrees": 26.4583592407501,
"before_receipt_to_dispatch_s": 0.39604878902900964,
"dispatch_to_response_receipt_s": 0.4280811380594969,
"native_span_ms": 900
},
{
"stage": "approach",
"dx": 341,
"dy": 0,
"monotonic": 820520.572737873,
"after_sample": 72,
"response_sample": 78,
"native_turn_degrees": 26.700881879664365,
"before_receipt_to_dispatch_s": 0.4093965779757127,
"dispatch_to_response_receipt_s": 0.42311287007760257,
"native_span_ms": 733
},
{
"stage": "approach",
"dx": 341,
"dy": 0,
"monotonic": 820521.615695336,
"after_sample": 80,
"response_sample": 88,
"native_turn_degrees": 26.824306620040772,
"before_receipt_to_dispatch_s": 0.407363394042477,
"dispatch_to_response_receipt_s": 0.43050858203787357,
"native_span_ms": 867
},
{
"stage": "approach",
"dx": 200,
"dy": 0,
"monotonic": 820522.650648577,
"after_sample": 89,
"response_sample": 97,
"native_turn_degrees": 15.108903862000403,
"before_receipt_to_dispatch_s": 0.39425166801083833,
"dispatch_to_response_receipt_s": 0.4525398960104212,
"native_span_ms": 898
},
{
"stage": "approach",
"dx": 45,
"dy": 0,
"monotonic": 820523.740309086,
"after_sample": 99,
"response_sample": 107,
"native_turn_degrees": 3.4696216165246483,
"before_receipt_to_dispatch_s": 0.4120595670538023,
"dispatch_to_response_receipt_s": 0.46701870998367667,
"native_span_ms": 866
},
{
"stage": "approach",
"dx": 33,
"dy": 0,
"monotonic": 820537.319254032,
"after_sample": 219,
"response_sample": 227,
"native_turn_degrees": 2.7455479541940804,
"before_receipt_to_dispatch_s": 0.42555468797218055,
"dispatch_to_response_receipt_s": 0.47311301599256694,
"native_span_ms": 867
},
{
"stage": "facing",
"dx": 128,
"dy": 0,
"monotonic": 820543.973141197,
"after_sample": 278,
"response_sample": 284,
"native_turn_degrees": 10.260641687863767,
"before_receipt_to_dispatch_s": 0.4740198829676956,
"dispatch_to_response_receipt_s": 0.202212834963575,
"native_span_ms": 667
},
{
"stage": "facing",
"dx": 128,
"dy": 0,
"monotonic": 820544.91196243,
"after_sample": 286,
"response_sample": 294,
"native_turn_degrees": 10.703148333470523,
"before_receipt_to_dispatch_s": 0.469738899031654,
"dispatch_to_response_receipt_s": 0.5037237229989842,
"native_span_ms": 1000
},
{
"stage": "facing",
"dx": 128,
"dy": 0,
"monotonic": 820546.163581055,
"after_sample": 296,
"response_sample": 310,
"native_turn_degrees": 10.010158948301068,
"before_receipt_to_dispatch_s": 0.47138093097601086,
"dispatch_to_response_receipt_s": 1.0812573919538409,
"native_span_ms": 1567
},
{
"stage": "facing",
"dx": 51,
"dy": 0,
"monotonic": 820547.994536107,
"after_sample": 312,
"response_sample": 320,
"native_turn_degrees": 4.081253970741187,
"before_receipt_to_dispatch_s": 0.4826455160509795,
"dispatch_to_response_receipt_s": 0.5068351119989529,
"native_span_ms": 967
}
],
"offline_replay_seconds_not_native_timings": {
"join_choice_snapshots": {
"count": 7,
"minimum": 0.03783283696975559,
"median": 0.04051079694181681,
"maximum": 0.0408189290901646,
"sum": 0.27835581090766937
},
"validate_gate_geometry": {
"count": 7,
"minimum": 0.036523447022773325,
"median": 0.037821937003172934,
"maximum": 0.03948510903865099,
"sum": 0.26564939005766064
},
"validate_approach_evidence": {
"count": 7,
"minimum": 0.08901217998936772,
"median": 0.09373382106423378,
"maximum": 0.10571677796542645,
"sum": 0.6610238321591169
},
"validate_facing_evidence": {
"count": 7,
"minimum": 0.1799939649645239,
"median": 0.18100794102065265,
"maximum": 0.2001678440719843,
"sum": 1.2925933171063662
}
},
"input_end": {
"keys": [
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W",
"W"
],
"wheel_events": [],
"paired_release_errors": [],
"wheel_release_errors": [],
"held_key": null,
"held_button": null,
"all_attempted_presses_released": true,
"runner_result": "input-exercise-failed",
"runner_cleanup_confirmed": true,
"helper_supervision_error": "Private input worker exited unsuccessfully"
}
}
@@ -0,0 +1,40 @@
# 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.
@@ -0,0 +1,14 @@
{
"analyze.py": {
"bytes": 6791,
"sha256": "c1b31a1dca3d69d3858673483af7795da4037d668db53765acf2ccf1dfb516e8"
},
"diagnostic.json": {
"bytes": 15118,
"sha256": "abb486a28b93cc5ad0912ca117d2a7dcf94cfb5fe8f043b17a4c9ac766c4c572"
},
"review.md": {
"bytes": 5966,
"sha256": "676228c77fe715715aa2bb3f7196f0b3758aa968627ccf1219178a4401448a6f"
}
}