P04-01: 同時発生の更新規約

This commit is contained in:
Agent Control Runner
2026-10-16 03:20:25 +09:00
parent 64617018ed
commit dd20d5b96c
3 changed files with 87 additions and 5 deletions
@@ -3,6 +3,8 @@
S1コード準備完了・未実測・原P04 whole未達。D05 pending、A未検証。
engine起動・全回帰・コミットはworkerでは実施しない。
assertは各caseの停止中の課金行0、予約の孤立0、到着1回だけ。
予約snapshotのstateは文字列名として検査し、未知の名前は孤立checkを失敗にする。
ACTIVEのstaff_task予約とtask.reservation_idsを双方向照合する。非ACTIVEの履歴もrawには保持する。
費用帰属、金額、EV停止規則を決めない。remaining_minutes保持は生観測として保存する。
## Rootが実行するコマンド
@@ -13,8 +15,8 @@ Rootは先に空き容量・他のengine・終了済cacheへのアクセスを
```sh
export PYTHONPYCACHEPREFIX='/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/s1-python-cache'
python3 '/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/s1/run_s1_native.py' --check-only --plan '/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/p04-s1-root-plan-r01.json' --output '/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/p04-s1-native-r01'
python3 '/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/s1/run_s1_native.py' --plan '/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/p04-s1-root-plan-r01.json' --output '/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/p04-s1-native-r01'
python3 '/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/s1/run_s1_native.py' --check-only --plan '/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/p04-s1-root-plan-r02.json' --output '/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/p04-s1-native-r02'
python3 '/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/s1/run_s1_native.py' --plan '/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/p04-s1-root-plan-r02.json' --output '/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/p04-s1-native-r02'
```
既定の製品sourceは
@@ -48,7 +50,7 @@ strict phase失敗またはguard失敗は1、native開始前の入力・資源
## 出力とraw一覧
出力root:
`/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/p04-s1-native-r01/`
`/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/p04-s1-native-r02/`
- source_before.json、source_after.json、selected-source-map.json、runner-input.json
- runner-started.json、runner-ended.json、execution.json、PID-set.json、outer-owned-finally.json、raw-inventory.json
@@ -141,13 +141,18 @@ func safety(row: Dictionary) -> void:
var charge_rows: int = row[&"held_after"][&"ledger"].size() - row[&"reserve_exhausted_before_tick"][&"ledger"].size()
outcome(charge_rows == 0, "停止中の課金行0")
var orphans := 0
var states_known := true
# Check each observed boundary, both directions, using actual task ownership.
for point_name: StringName in [&"boarded", &"stopped", &"held_after", &"final"]:
var point: Dictionary = row[point_name]
var tasks: Array = point[&"snapshot"][&"systems"][&"runtime"][&"staff"][&"tasks"]
var active: Dictionary = {}
for reservation: Dictionary in point[&"reservations"]:
if int(reservation[&"state"]) != InventoryReservation.State.ACTIVE: continue
var state_name := String(reservation[&"state"])
if InventoryReservation.State.keys().find(state_name) < 0:
states_known = false
continue
if state_name != InventoryReservation.State.keys()[InventoryReservation.State.ACTIVE]: continue
if String(reservation[&"purpose"]) != "staff_task": continue
active[String(reservation[&"reservation_id"])] = reservation
var linked := false
@@ -157,7 +162,7 @@ func safety(row: Dictionary) -> void:
for task: Dictionary in tasks:
for id: Variant in task[&"reservation_ids"]:
if not active.has(String(id)): orphans += 1
outcome(orphans == 0, "予約の孤立0")
outcome(orphans == 0 and states_known, "予約の孤立0" if states_known else "予約の不明状態")
var counts := {&"staff:medic": 0, &"staff:patient": 0}
var stops: Array = row[&"boarded"][&"elevator_report"][&"shafts"][0][&"stops"]
var requests: Dictionary = {}