P04-01: 同時発生の更新規約
This commit is contained in:
@@ -50,7 +50,9 @@ Readerは別PID/profileで各slotのjournal.log/manifest.json/thumbnail.png/worl
|
|||||||
Readerはさらに各1079 slotをfresh loadして通常clockの2tickを再現し、1080/1081全Runtimeと勤務差分、
|
Readerはさらに各1079 slotをfresh loadして通常clockの2tickを再現し、1080/1081全Runtimeと勤務差分、
|
||||||
同分guardを検査する。FACILITY_COMPLETION前後とAI_DECISIONS後のphase順と全snapshotもWriterに一致させる。
|
同分guardを検査する。FACILITY_COMPLETION前後とAI_DECISIONS後のphase順と全snapshotもWriterに一致させる。
|
||||||
overtimeはunblock後のCOMPLETED/OFF_DUTYまで全Runtime一致を追加確認する。
|
overtimeはunblock後のCOMPLETED/OFF_DUTYまで全Runtime一致を追加確認する。
|
||||||
raw Dictionary getterと保存用canonical Operationsは別々に保存する。getter joinだけStringName/Stringとkey順差を明示し、
|
実coordinatorの有効性/実nullと、Runtime保存Operationsのenabled/coordinator値を別々に記録する。
|
||||||
|
実coordinator不在時はgetter適用外・raw getter未呼出しを明示し、架空のday summaryや診断結果を記録しない。
|
||||||
|
実coordinatorが存在する場合だけraw Dictionary getterと保存用canonical Operationsを別々に保存する。getter joinだけStringName/Stringとkey順差を明示し、
|
||||||
型・値・欠落・配列順を検査する。全Runtime typed条件は緩和しない。
|
型・値・欠落・配列順を検査する。全Runtime typed条件は緩和しない。
|
||||||
|
|
||||||
## Rootの正式実行
|
## Rootの正式実行
|
||||||
@@ -96,3 +98,13 @@ worker実施記録: Python py_compile成功。GD grepは `:=` と禁止された
|
|||||||
private/default profileの読取りは0。製品1338のcheck-only成功・native成功を主張しない。
|
private/default profileの読取りは0。製品1338のcheck-only成功・native成功を主張しない。
|
||||||
最初のworker planは `build/p04-s2b-worker-check-r01.json`。その後の本書/GD調整を含む最終pin確認には
|
最初のworker planは `build/p04-s2b-worker-check-r01.json`。その後の本書/GD調整を含む最終pin確認には
|
||||||
fresh `build/p04-s2b-worker-check-r02.json` を使用し、r01を上書きしない。
|
fresh `build/p04-s2b-worker-check-r02.json` を使用し、r01を上書きしない。
|
||||||
|
|
||||||
|
## repair15 nullable診断修正
|
||||||
|
|
||||||
|
`_capture`でOperationsCoordinatorをis_instance_validで分岐し、実nullと正式保存値`coordinator: {}`を区別する。
|
||||||
|
全Runtime snapshotは無加工で保持する。fixtureでOperationsをenableせず、既存の境界・保存・replay判定を維持する。
|
||||||
|
同GD全体を静的確認し、OperationsCoordinatorの直接呼出しはこの分岐内の2件のみ。
|
||||||
|
reservation/request/task/shift、FileAccess、DirAccessには既存のnullガードがある。
|
||||||
|
facility/definition/service/guest/worker、_inventory/_request/_worker/_taskの直接参照は既存fixtureの生成・取得成立が前提である。
|
||||||
|
これらの前提が崩れた場合のnullリスクは残るが、任意機能Operationsの無効化による同種の無条件アクセスは他にない。
|
||||||
|
本修正版のRoot fresh r02 nativeは未実測。workerはcode-ready提出のみで受入・readinessを確定しない。
|
||||||
|
|||||||
+29
-13
@@ -221,16 +221,33 @@ func _writer_branch(branch: String) -> void:
|
|||||||
|
|
||||||
func _capture() -> Dictionary:
|
func _capture() -> Dictionary:
|
||||||
var snapshot: Dictionary = _runtime.create_snapshot()
|
var snapshot: Dictionary = _runtime.create_snapshot()
|
||||||
var raw_day: Dictionary = _runtime.operations_coordinator.get_day_summary(1)
|
var saved_operations: Dictionary = snapshot[&"systems"][&"runtime"][&"operations"]
|
||||||
var canonical_operations: Dictionary = _runtime.operations_coordinator.create_snapshot()
|
var coordinator: OperationsCoordinator = _runtime.operations_coordinator
|
||||||
var canonical_day: Dictionary = {}
|
var coordinator_present: bool = is_instance_valid(coordinator)
|
||||||
var day_count: int = 0
|
var getter_diagnostics: Dictionary = {
|
||||||
for day: Dictionary in canonical_operations["day_summaries"]:
|
&"operations_enabled": saved_operations[&"enabled"],
|
||||||
if int(day["day"]) == 1:
|
&"saved_coordinator": saved_operations[&"coordinator"],
|
||||||
canonical_day = day
|
&"actual_coordinator_present": coordinator_present,
|
||||||
day_count += 1
|
&"actual_coordinator_is_null": coordinator == null,
|
||||||
var getter_differences: Array = []
|
&"getter_applicable": coordinator_present,
|
||||||
_expect(_getter_join(raw_day, canonical_day, "$", getter_differences) and day_count == (0 if raw_day.is_empty() else 1), "raw getter joins canonical save contract without relaxing Runtime equality")
|
&"raw_getter_called": false,
|
||||||
|
&"getter_status": "not_applicable: actual coordinator absent; raw getter not called",
|
||||||
|
}
|
||||||
|
if coordinator_present:
|
||||||
|
var raw_day: Dictionary = coordinator.get_day_summary(1)
|
||||||
|
var canonical_operations: Dictionary = coordinator.create_snapshot()
|
||||||
|
var canonical_day: Dictionary = {}
|
||||||
|
var day_count: int = 0
|
||||||
|
for day: Dictionary in canonical_operations["day_summaries"]:
|
||||||
|
if int(day["day"]) == 1:
|
||||||
|
canonical_day = day
|
||||||
|
day_count += 1
|
||||||
|
var getter_differences: Array = []
|
||||||
|
_expect(_getter_join(raw_day, canonical_day, "$", getter_differences) and day_count == (0 if raw_day.is_empty() else 1), "raw getter joins canonical save contract without relaxing Runtime equality")
|
||||||
|
getter_diagnostics.merge({&"raw_getter_called": true, &"getter_status": "executed",
|
||||||
|
&"raw_day_getter": raw_day, &"canonical_operations": canonical_operations,
|
||||||
|
&"canonical_day1": canonical_day, &"getter_differences": getter_differences,
|
||||||
|
&"getter_bytes_equal": var_to_bytes(raw_day) == var_to_bytes(canonical_day)}, true)
|
||||||
var ledger: Array = []
|
var ledger: Array = []
|
||||||
for entry: LedgerEntry in _runtime.economy_service.get_entries(): ledger.append(entry.to_dictionary())
|
for entry: LedgerEntry in _runtime.economy_service.get_entries(): ledger.append(entry.to_dictionary())
|
||||||
var row: Dictionary = {&"seed": _seed, &"minute": _clock.absolute_minute, &"snapshot": snapshot,
|
var row: Dictionary = {&"seed": _seed, &"minute": _clock.absolute_minute, &"snapshot": snapshot,
|
||||||
@@ -238,10 +255,9 @@ func _capture() -> Dictionary:
|
|||||||
&"source": _source, &"destination": _destination, &"task_id": _task_id, &"shift_id": _shift_id,
|
&"source": _source, &"destination": _destination, &"task_id": _task_id, &"shift_id": _shift_id,
|
||||||
&"target": _target, &"request_id": _request_id, &"guest_id": _guest_id,
|
&"target": _target, &"request_id": _request_id, &"guest_id": _guest_id,
|
||||||
&"boundary": ShiftInstance.DAY_END},
|
&"boundary": ShiftInstance.DAY_END},
|
||||||
&"ledger": ledger, &"raw_day_getter": raw_day,
|
&"ledger": ledger,
|
||||||
&"canonical_operations": canonical_operations, &"canonical_day1": canonical_day,
|
|
||||||
&"getter_differences": getter_differences, &"getter_bytes_equal": var_to_bytes(raw_day) == var_to_bytes(canonical_day),
|
|
||||||
&"commands": _commands.duplicate(true), &"command_results": _command_results.duplicate(true)}
|
&"commands": _commands.duplicate(true), &"command_results": _command_results.duplicate(true)}
|
||||||
|
row.merge(getter_diagnostics)
|
||||||
# Raw getters retain their actual StringName keys and insertion order. They
|
# Raw getters retain their actual StringName keys and insertion order. They
|
||||||
# are diagnostics, never substituted for the entire canonical Runtime save.
|
# are diagnostics, never substituted for the entire canonical Runtime save.
|
||||||
if _case == "night_absent":
|
if _case == "night_absent":
|
||||||
|
|||||||
Reference in New Issue
Block a user