P04-01: 同時発生の更新規約
This commit is contained in:
+259
@@ -0,0 +1,259 @@
|
||||
[
|
||||
{
|
||||
"name": "checker_negative_fixtures",
|
||||
"exit_code": 0,
|
||||
"result": {
|
||||
"scope": "Synthetic checker checks only; no engine evidence or formal acceptance",
|
||||
"py_compile": true,
|
||||
"results": [
|
||||
{
|
||||
"fixture": "synthetic_scalar_only_rejected",
|
||||
"exit_code": 1,
|
||||
"result": {
|
||||
"error": "native bundle required; self-reported scalar evidence is insufficient"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixture": "forged_registered_pin",
|
||||
"exit_code": 1,
|
||||
"result": {
|
||||
"error": "registered pin declaration"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixture": "false_delta",
|
||||
"exit_code": 1,
|
||||
"result": {
|
||||
"error": "git diff/applicability_delta mismatch"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixture": "wrong_reach_anchor",
|
||||
"exit_code": 1,
|
||||
"result": {
|
||||
"error": "unknown reachability anchor"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixture": "missing_index",
|
||||
"exit_code": 1,
|
||||
"result": {
|
||||
"error": "missing/outside file: index.json"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixture": "duplicate_key",
|
||||
"exit_code": 1,
|
||||
"result": {
|
||||
"error": "duplicate JSON key: schema_version"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixture": "symlink",
|
||||
"exit_code": 1,
|
||||
"result": {
|
||||
"error": "symlink: stdout.json"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixture": "hash_mismatch",
|
||||
"exit_code": 1,
|
||||
"result": {
|
||||
"error": "artifact hash: stdout"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixture": "stale_pin",
|
||||
"exit_code": 1,
|
||||
"result": {
|
||||
"error": "tested game differs from Git: autoload/simulation_runtime.gd"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixture": "unexecuted_receipt",
|
||||
"exit_code": 1,
|
||||
"result": {
|
||||
"error": "unexecuted/incomplete receipt"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixture": "pending_authority",
|
||||
"exit_code": 1,
|
||||
"result": {
|
||||
"error": "pending/missing authority"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixture": "missing_condition",
|
||||
"exit_code": 1,
|
||||
"result": {
|
||||
"error": "mandatory conditions missing: paused_midnight; unknown: "
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixture": "unsupported_reach_false",
|
||||
"exit_code": 1,
|
||||
"result": {
|
||||
"error": "unsupported reach=false: transport"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixture": "owner_hash_mismatch",
|
||||
"exit_code": 1,
|
||||
"result": {
|
||||
"error": "owner approval hash mismatch: D05-P04-SHIFT-1800"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "checker_join_fixtures",
|
||||
"exit_code": 0,
|
||||
"result": {
|
||||
"scope": "semantic controls only; no new native execution",
|
||||
"results": [
|
||||
{
|
||||
"case": "B1_cannot_supply_power_stop",
|
||||
"result": "rejected",
|
||||
"error": "power_stop requires S4; B1 is dependency/closure diagnostic only"
|
||||
},
|
||||
{
|
||||
"case": "B1_real_despawn_positive",
|
||||
"result": "accepted"
|
||||
},
|
||||
{
|
||||
"case": "dependency_reason_relabelled_as_NO_POWER",
|
||||
"result": "rejected",
|
||||
"error": "B1 power Runtime facility/service join"
|
||||
},
|
||||
{
|
||||
"case": "B1_missing_at_closure",
|
||||
"result": "rejected",
|
||||
"error": "B1 real B before/at closure"
|
||||
},
|
||||
{
|
||||
"case": "B1_synthetic_later_guest",
|
||||
"result": "rejected",
|
||||
"error": "B1 normal despawn after departure"
|
||||
},
|
||||
{
|
||||
"case": "B1_wrong_release_minute",
|
||||
"result": "rejected",
|
||||
"error": "B1 immutable reservation join"
|
||||
},
|
||||
{
|
||||
"case": "B1_changed_wallet",
|
||||
"result": "rejected",
|
||||
"error": "B1 B wallet/no economy charge"
|
||||
},
|
||||
{
|
||||
"case": "B1_missing_departure_history",
|
||||
"result": "rejected",
|
||||
"error": "B1 persisted departure join"
|
||||
},
|
||||
{
|
||||
"case": "R2_real_first_1080_positive",
|
||||
"result": "accepted"
|
||||
},
|
||||
{
|
||||
"case": "R2_paid_midnight_substitution",
|
||||
"result": "rejected",
|
||||
"error": "shift raw service join"
|
||||
},
|
||||
{
|
||||
"case": "R2_wrong_transaction",
|
||||
"result": "rejected",
|
||||
"error": "native receipt transaction"
|
||||
},
|
||||
{
|
||||
"case": "R2_missing_DAY2",
|
||||
"result": "rejected",
|
||||
"error": "shift DAY2 before/after handover"
|
||||
},
|
||||
{
|
||||
"case": "R2_after_staff_still_present",
|
||||
"result": "rejected",
|
||||
"error": "shift DAY2 before/after handover"
|
||||
},
|
||||
{
|
||||
"case": "R2_next_extra_receipt",
|
||||
"result": "rejected",
|
||||
"error": "native duplicate/empty receipt"
|
||||
},
|
||||
{
|
||||
"case": "R2_dynamic_PID_and_transaction_positive",
|
||||
"result": "accepted"
|
||||
},
|
||||
{
|
||||
"case": "R2_wrong_PID_join",
|
||||
"result": "rejected",
|
||||
"error": "native PID chain"
|
||||
},
|
||||
{
|
||||
"case": "S1_pre_travel_mismatch",
|
||||
"result": "rejected",
|
||||
"error": "S1 pre-travel staff cell/task/raw reservation join"
|
||||
},
|
||||
{
|
||||
"case": "S1_no_actual_outage",
|
||||
"result": "rejected",
|
||||
"error": "S1 actual reserve exhaustion/tick"
|
||||
},
|
||||
{
|
||||
"case": "historical_receipt_checked_against_current_wrapper",
|
||||
"result": "rejected",
|
||||
"error": "S4 historical pin in fresh receipt"
|
||||
},
|
||||
{
|
||||
"case": "current_wrapper_used_as_historical_receipt",
|
||||
"result": "rejected",
|
||||
"error": "S4 historical receipt wrapper pin"
|
||||
},
|
||||
{
|
||||
"case": "fresh_receipt_carrying_historical_pin",
|
||||
"result": "rejected",
|
||||
"error": "S4 historical pin in fresh receipt"
|
||||
},
|
||||
{
|
||||
"case": "tampered_historical_pinned_copy",
|
||||
"result": "rejected",
|
||||
"error": "S4 tampered historical wrapper pin"
|
||||
},
|
||||
{
|
||||
"case": "S4_real_NO_POWER_positive",
|
||||
"result": "accepted"
|
||||
},
|
||||
{
|
||||
"case": "S4_related_facility_operating_false",
|
||||
"result": "rejected",
|
||||
"error": "S4 related facility must remain operating/powered"
|
||||
},
|
||||
{
|
||||
"case": "S4_kitchen_unpowered",
|
||||
"result": "rejected",
|
||||
"error": "S4 related facility must remain operating/powered"
|
||||
},
|
||||
{
|
||||
"case": "S4_closure_confound",
|
||||
"result": "rejected",
|
||||
"error": "S4 closure/damage/shift confound"
|
||||
},
|
||||
{
|
||||
"case": "S4_no_actual_outage",
|
||||
"result": "rejected",
|
||||
"error": "S4 actual NO_POWER path, not relabelled dependency"
|
||||
},
|
||||
{
|
||||
"case": "S4_wrong_transaction_join",
|
||||
"result": "rejected",
|
||||
"error": "S4 transaction/service join"
|
||||
},
|
||||
{
|
||||
"case": "S4_dynamic_service_and_sale_positive",
|
||||
"result": "accepted"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"M": "c0ea009b28a7649aca6a433a1a24dc0be5e7ab81",
|
||||
"sources": {
|
||||
"scripts/core/command_queue.gd": {
|
||||
"sha256": "09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895",
|
||||
"functions": {
|
||||
"enqueue": {
|
||||
"line": 15,
|
||||
"body_sha256": "56a1fe8a5dfd00ad81f9844bc8e6f4a6ce9009dadbc9cd2b7ff07d14bff1938c",
|
||||
"full_body": "func enqueue(command: SimulationCommand) -> CommandResult:\n\tif command == null:\n\t\treturn CommandResult.failed(\n\t\t\tCommandResult.Code.INVALID_COMMAND,\n\t\t\t0,\n\t\t\t\"Command is null.\"\n\t\t)\n\n\tvar validation_error := command.validation_error()\n\tif not validation_error.is_empty():\n\t\treturn CommandResult.failed(\n\t\t\tCommandResult.Code.INVALID_COMMAND,\n\t\t\tcommand.command_id,\n\t\t\tvalidation_error\n\t\t)\n\n\tif _known_command_ids.has(command.command_id):\n\t\treturn CommandResult.failed(\n\t\t\tCommandResult.Code.DUPLICATE_COMMAND_ID,\n\t\t\tcommand.command_id,\n\t\t\t\"command_id has already been accepted.\",\n\t\t\t{\"original_command_id\": command.command_id}\n\t\t)\n\n\tif not command.idempotency_key.is_empty():\n\t\tvar key := command.idempotency_key\n\t\tif _idempotency_to_command_id.has(key):\n\t\t\tvar original_id: int = _idempotency_to_command_id[key]\n\t\t\tvar duplicate_details := {\n\t\t\t\t\"idempotency_key\": String(key),\n\t\t\t\t\"original_command_id\": original_id,\n\t\t\t\t\"processed\": _processed_results.has(original_id),\n\t\t\t}\n\t\t\tif _processed_results.has(original_id):\n\t\t\t\tvar prior: CommandResult = _processed_results[original_id]\n\t\t\t\tduplicate_details[\"original_result\"] = prior.to_dictionary()\n\t\t\treturn CommandResult.failed(\n\t\t\t\tCommandResult.Code.DUPLICATE_IDEMPOTENCY_KEY,\n\t\t\t\tcommand.command_id,\n\t\t\t\t\"idempotency_key has already been accepted.\",\n\t\t\t\tduplicate_details\n\t\t\t)\n\n\tvar queued_command := command.copy()\n\t_pending.append(queued_command)\n\t_known_command_ids[queued_command.command_id] = true\n\t_accepted_metadata[queued_command.command_id] = {\n\t\t\"command_id\": queued_command.command_id,\n\t\t\"idempotency_key\": String(queued_command.idempotency_key),\n\t}\n\tif not queued_command.idempotency_key.is_empty():\n\t\t_idempotency_to_command_id[queued_command.idempotency_key] = queued_command.command_id\n\t_pending.sort_custom(_comes_before)\n\treturn CommandResult.succeeded(queued_command.command_id)\n\n\n"
|
||||
},
|
||||
"execute_ready": {
|
||||
"line": 83,
|
||||
"body_sha256": "d8c534217e704cd892401904768a883c9a3ec2f3852ae7c0438f2eb854b4f7aa",
|
||||
"full_body": "func execute_ready(current_tick: int, executor: Callable) -> Array[CommandResult]:\n\tvar results: Array[CommandResult] = []\n\tfor command in drain_ready(current_tick):\n\t\tvar accepted_command_id := command.command_id\n\t\tvar result: CommandResult\n\t\tif not executor.is_valid():\n\t\t\tresult = CommandResult.failed(\n\t\t\t\tCommandResult.Code.EXECUTOR_FAILED,\n\t\t\t\tcommand.command_id,\n\t\t\t\t\"Executor is not callable.\"\n\t\t\t)\n\t\telse:\n\t\t\tvar returned: Variant = executor.call(command)\n\t\t\tif returned is CommandResult:\n\t\t\t\tresult = returned\n\t\t\telif returned is bool and returned:\n\t\t\t\tresult = CommandResult.succeeded(command.command_id)\n\t\t\telse:\n\t\t\t\tresult = CommandResult.failed(\n\t\t\t\t\tCommandResult.Code.EXECUTOR_FAILED,\n\t\t\t\t\tcommand.command_id,\n\t\t\t\t\t\"Executor did not return a successful CommandResult.\"\n\t\t\t\t)\n\n\t\tvar completed_result := complete(accepted_command_id, result)\n\t\tresults.append(completed_result)\n\treturn results\n\n\n"
|
||||
},
|
||||
"complete": {
|
||||
"line": 112,
|
||||
"body_sha256": "4290ebfe68d9245b4e8ebb6d8a09ba6172f16bcacb6e4294299ad6dc06c56ed7",
|
||||
"full_body": "func complete(command_id: int, result: CommandResult) -> CommandResult:\n\tif not _in_flight.has(command_id):\n\t\treturn CommandResult.failed(\n\t\t\tCommandResult.Code.NOT_FOUND,\n\t\t\tcommand_id,\n\t\t\t\"Command is not in flight.\"\n\t\t)\n\tif result == null:\n\t\treturn CommandResult.failed(\n\t\t\tCommandResult.Code.INVALID_COMMAND,\n\t\t\tcommand_id,\n\t\t\t\"Result is null.\"\n\t\t)\n\n\tvar stored_result := result.copy()\n\tstored_result.command_id = command_id\n\t_processed_results[command_id] = stored_result\n\t_in_flight.erase(command_id)\n\treturn stored_result.copy()\n\n\n"
|
||||
},
|
||||
"get_accepted_command_metadata": {
|
||||
"line": 174,
|
||||
"body_sha256": "60841dbff80282e95460e8dfeaeb6ae37a0cc05f2c7654130e8b8c51729e5b39",
|
||||
"full_body": "func get_accepted_command_metadata() -> Array[Dictionary]:\n\tvar result: Array[Dictionary] = []\n\tvar command_ids: Array = _accepted_metadata.keys()\n\tcommand_ids.sort()\n\tfor command_id: Variant in command_ids:\n\t\tresult.append((_accepted_metadata[command_id] as Dictionary).duplicate(true))\n\treturn result\n\n\n"
|
||||
},
|
||||
"create_snapshot": {
|
||||
"line": 189,
|
||||
"body_sha256": "15737e59018ae93092c1aca3ce268d2bc354c28a8261d4ffada4aba63af3d241",
|
||||
"full_body": "func create_snapshot() -> Dictionary:\n\tvar pending_data: Array[Dictionary] = []\n\tfor command in _pending:\n\t\tpending_data.append(command.to_dictionary())\n\tvar in_flight_ids: Array = _in_flight.keys()\n\tin_flight_ids.sort()\n\tvar in_flight_data: Array[Dictionary] = []\n\tfor command_id: Variant in in_flight_ids:\n\t\tvar command: SimulationCommand = _in_flight[command_id]\n\t\tin_flight_data.append(command.to_dictionary())\n\tvar processed_ids: Array = _processed_results.keys()\n\tprocessed_ids.sort()\n\tvar processed_data: Array[Dictionary] = []\n\tfor command_id: Variant in processed_ids:\n\t\tvar result: CommandResult = _processed_results[command_id]\n\t\tprocessed_data.append(result.to_dictionary())\n\tvar idempotency_data := {}\n\tvar idempotency_keys: Array = _idempotency_to_command_id.keys()\n\tidempotency_keys.sort_custom(func(a: Variant, b: Variant) -> bool: return String(a) < String(b))\n\tfor key: Variant in idempotency_keys:\n\t\tidempotency_data[String(key)] = int(_idempotency_to_command_id[key])\n\treturn {\n\t\t\"version\": SNAPSHOT_VERSION,\n\t\t\"pending\": pending_data,\n\t\t\"in_flight\": in_flight_data,\n\t\t\"processed\": processed_data,\n\t\t\"idempotency\": idempotency_data,\n\t\t\"accepted\": get_accepted_command_metadata(),\n\t}\n\n\n"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scripts/core/stable_id_generator.gd": {
|
||||
"sha256": "78e0dd691ba18d1f159d9d7abba5894d2e10d36885aa6dc5be02a27f9edd5013",
|
||||
"functions": {
|
||||
"next_id": {
|
||||
"line": 9,
|
||||
"body_sha256": "cf1cf036adab2eb36acab25a069b5dfc42e7aa281c491bd89ade6d91f6eb2c1d",
|
||||
"full_body": "func next_id(prefix: StringName) -> StringName:\n\tif not _is_valid_prefix(String(prefix)):\n\t\tpush_error(\"Stable ID prefix must be lowercase ASCII snake_case\")\n\t\treturn &\"\"\n\tvar next_value := int(_counters.get(prefix, 0)) + 1\n\tif next_value > MAX_COUNTER:\n\t\tpush_error(\"Stable ID counter exhausted for '%s'\" % prefix)\n\t\treturn &\"\"\n\t_counters[prefix] = next_value\n\treturn StringName(\"%s.%012d\" % [prefix, next_value])\n\n"
|
||||
},
|
||||
"create_snapshot": {
|
||||
"line": 23,
|
||||
"body_sha256": "cab243cf59d5d56ff03beb305070f83b66d7a55cce7f3f2f889c0d9a5303e76a",
|
||||
"full_body": "func create_snapshot() -> Dictionary:\n\tvar counters := {}\n\tvar prefixes: Array = _counters.keys()\n\tprefixes.sort()\n\tfor prefix: Variant in prefixes:\n\t\tcounters[String(prefix)] = int(_counters[prefix])\n\treturn {\n\t\t\"version\": SNAPSHOT_VERSION,\n\t\t\"counters\": counters,\n\t}\n\n"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scripts/core/domain_event_stream.gd": {
|
||||
"sha256": "f9b57a4b4b53cf7d67132a159ea90378c633b4f19d8de28dbe7a33ebce8e3d79",
|
||||
"functions": {
|
||||
"publish_batch": {
|
||||
"line": 40,
|
||||
"body_sha256": "275be0d68c99217732ea3dc2821cf7dcec24a695035e455af7f716d901147167",
|
||||
"full_body": "func publish_batch(events: Array) -> bool:\n\tif events.size() > MAX_BATCH_SIZE:\n\t\treturn false\n\tvar committed: Array[SimulationDomainEvent] = []\n\tvar batch_ids: Dictionary = {}\n\tfor event_value: Variant in events:\n\t\tif not event_value is SimulationDomainEvent:\n\t\t\treturn false\n\t\tvar event: SimulationDomainEvent = event_value\n\t\tif event == null or not event.is_valid() \\\n\t\tor _published_ids.has(event.event_id) or batch_ids.has(event.event_id):\n\t\t\treturn false\n\t\tbatch_ids[event.event_id] = true\n\t\tcommitted.append(event.copy())\n\tif not committed.is_empty():\n\t\t_snapshot_ids_dirty = true\n\tfor event: SimulationDomainEvent in committed:\n\t\t_published_ids[event.event_id] = true\n\t\t_recent_events.append(event.copy())\n\t\tif _recent_events.size() > RECENT_EVENT_LIMIT:\n\t\t\t_recent_events.pop_front()\n\t\t_pending_deliveries.append(event.copy())\n\t_drain_deliveries()\n\treturn true\n\n\n"
|
||||
},
|
||||
"create_snapshot": {
|
||||
"line": 96,
|
||||
"body_sha256": "94fc2dd3ef1a953ba7d9b3d3728c0d158bf0f69935874f48722a3c6025447dbf",
|
||||
"full_body": "func create_snapshot() -> Dictionary:\n\tif _snapshot_ids_dirty:\n\t\t_snapshot_ids.clear()\n\t\tfor event_id: Variant in _published_ids:\n\t\t\t_snapshot_ids.append(String(event_id))\n\t\t_snapshot_ids.sort()\n\t\t_snapshot_ids_dirty = false\n\tvar saved_ids: Array[String] = _snapshot_ids.duplicate()\n\tvar saved_recent: Array[Dictionary] = []\n\tfor event in _recent_events:\n\t\tsaved_recent.append(event.to_dictionary())\n\treturn {\n\t\t\"version\": SNAPSHOT_VERSION,\n\t\t\"published_ids\": saved_ids,\n\t\t\"recent_events\": saved_recent,\n\t}\n\n"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+162
@@ -0,0 +1,162 @@
|
||||
{
|
||||
"repair": 43,
|
||||
"scope": "Static worker checks only",
|
||||
"python": [
|
||||
{
|
||||
"path": "tools/check_p04_order_evidence.py",
|
||||
"sha256": "5c8dd212fde1104f4090d7747fbaf6a5df4afcc69592be341965464b9a89262b",
|
||||
"AST": "PASS",
|
||||
"py_compile": "PASS"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p04-01/p04_native_series.py",
|
||||
"sha256": "256c8978c879bd953733e0ca3dc807ae0edfc2f77e6c3e7eae4a93dc43e7dc1f",
|
||||
"AST": "PASS",
|
||||
"py_compile": "PASS"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p04-01/s5/s5_order_adapter.py",
|
||||
"sha256": "f1404045b57c0d5cf37eef04f6adc16d5f7840c06410c014775bcee0ace7dab8",
|
||||
"AST": "PASS",
|
||||
"py_compile": "PASS"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p04-01/s5/s5_order_adapter_controls.py",
|
||||
"sha256": "2771627b674f9b31c888559e1e04623a944a4bdb01c390278838197ca78fd8d3",
|
||||
"AST": "PASS",
|
||||
"py_compile": "PASS"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p04-01/s5/s5_guard_oracle.py",
|
||||
"sha256": "b58ee46f5c8a82de796bffd88ff8cab89f1f9e7e5c9417414310a1b649dc6c1c",
|
||||
"AST": "PASS",
|
||||
"py_compile": "PASS"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p04-01/s5/s5_power_adapter.py",
|
||||
"sha256": "ba89ad5c07718fd0976712d6a0605aa72d64ac7276e9e7d350476203542c0b86",
|
||||
"AST": "PASS",
|
||||
"py_compile": "PASS"
|
||||
}
|
||||
],
|
||||
"gdscript": {
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p04-01/s5/p04_s5_power_probe.gd",
|
||||
"sha256": "593de4376659873c0ef58c42dda0a77eedd1195e296cbf403b7289710896e7cf",
|
||||
"probe_guard_regexes": [
|
||||
"\\bvar\\s+\\w+\\s*=",
|
||||
"\\bfor\\s+\\w+\\s+in\\b",
|
||||
"\\.(?:patience_remaining|elapsed_minutes|power_available|capacity|hold_until)\\s*=(?!=)"
|
||||
],
|
||||
"result": "PASS",
|
||||
"regex_negative_self_check": "PASS",
|
||||
"case_table_static_dispatch": "PASS",
|
||||
"cases": 9,
|
||||
"slots": 21
|
||||
},
|
||||
"formal_acceptance": false,
|
||||
"pure_controls": [
|
||||
{
|
||||
"name": "negative",
|
||||
"exit_code": 0
|
||||
},
|
||||
{
|
||||
"name": "join",
|
||||
"exit_code": 0
|
||||
},
|
||||
{
|
||||
"name": "encoder",
|
||||
"exit_code": 0
|
||||
},
|
||||
{
|
||||
"name": "approval",
|
||||
"exit_code": 0
|
||||
},
|
||||
{
|
||||
"name": "candidate",
|
||||
"exit_code": 0
|
||||
},
|
||||
{
|
||||
"name": "series",
|
||||
"exit_code": 0
|
||||
},
|
||||
{
|
||||
"name": "wrapper",
|
||||
"exit_code": 0
|
||||
},
|
||||
{
|
||||
"name": "full-suite-negatives",
|
||||
"exit_code": 0
|
||||
},
|
||||
{
|
||||
"name": "guard-mutations",
|
||||
"exit_code": 0
|
||||
},
|
||||
{
|
||||
"name": "UID",
|
||||
"exit_code": 1
|
||||
},
|
||||
{
|
||||
"name": "power-adapter",
|
||||
"exit_code": 0
|
||||
},
|
||||
{
|
||||
"name": "UID-M-source-subset",
|
||||
"exit_code": 0
|
||||
},
|
||||
{
|
||||
"name": "guard-mutations-final",
|
||||
"exit_code": 0
|
||||
}
|
||||
],
|
||||
"pure_results": {
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p04-01/REPAIR43_PURE_RESULTS.json",
|
||||
"sha256": "4fb424248b987e333f7fe0edf5621929338baa4547432f41c6cd06f5822e468b"
|
||||
},
|
||||
"spec_protocol_controls": [
|
||||
{
|
||||
"case": "canonical_without_LF",
|
||||
"accepted": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"case": "tracked_single_LF",
|
||||
"accepted": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"case": "double_final_LF",
|
||||
"accepted": false,
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"case": "CRLF_final",
|
||||
"accepted": false,
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"case": "BOM",
|
||||
"accepted": false,
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"case": "interior_mutation",
|
||||
"accepted": false,
|
||||
"expected": false
|
||||
}
|
||||
],
|
||||
"step0_raw_hash_comparisons": {
|
||||
"entries": 118,
|
||||
"result": "PASS",
|
||||
"report": "docs/plans/original-completion-2026-10-02/execution/p04-01/REPAIR43_PRECHECK.json",
|
||||
"sha256": "e092c7aa702dfdbaf66ef70b9f50afc5088dfb5e25f491c4332c242113e80bba"
|
||||
},
|
||||
"UID_input_resolution": "Initial base-checkout missing helper; exact M source-subset retry passed all 14 pure helper controls. No Q/native applicability claim.",
|
||||
"Root_pending": [
|
||||
"Fresh S1-S5 check-only plans, capacity, native/Reader/order raw positives and raw-dependent mutations",
|
||||
"Fresh collect, full suite, index, verify-only, registered validation, independent whole-unit review, normal integration"
|
||||
],
|
||||
"source_facts": {
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p04-01/REPAIR43_SOURCE_FACTS.json",
|
||||
"sha256": "fcf2c795d239f9c11e8d3f54ba9f57c7f895f08af43788d8814e0ab455ffb49d"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,336 @@
|
||||
# REPAIR41 history and REPAIR42/43 status
|
||||
|
||||
## REPAIR42/43 implementation submission
|
||||
|
||||
REPAIR43 supplies the coherent remaining QA batch for the same original unit.
|
||||
Native applicability and acceptance are **not established**. Formal 16/88,
|
||||
original 30/88 and P04 credit 0 are unchanged. r35, r36 and R40 native remain
|
||||
FAILED; Q37 remains PASS only for its own version. D05 x6 and A01 stay approved.
|
||||
The product, Clock, API, values, product tests, contract and 15+EV criteria are
|
||||
unchanged. No Git write, engine, Runner, full regression or agent launch occurred.
|
||||
|
||||
R42 superseded the closed journal-field list and the literal QA file freeze.
|
||||
The R41 mandatory-membership diagnostic and historical/fresh S4 pin separation
|
||||
remain in place. Their 14 negative and 29 join controls passed again. The
|
||||
118-entry Step 0 table below is retained unchanged; all 118 raw hashes were
|
||||
recomputed and matched in this turn. The R42 directions were both read in full.
|
||||
|
||||
### Oracle and source bindings
|
||||
|
||||
`REPAIR43_SOURCE_FACTS.json` stores full function bodies read with `git show`
|
||||
at M `c0ea009b28a7649aca6a433a1a24dc0be5e7ab81`, not signatures or excerpts.
|
||||
The boundary is the declaration through the bytes before the next function,
|
||||
including intervening blank lines, matching the R41 source-fact convention.
|
||||
|
||||
| Function | M line | Full-body SHA-256 |
|
||||
| --- | --- | --- |
|
||||
| CommandQueue.restore_snapshot | 220 | 60e76b45be29068cff5ba29d2006642ed447eea6daf832c75757103a0c70cfe3 |
|
||||
| StableIdGenerator.restore_snapshot | 34 | 3142b592d4a54b4455949a69b775e280a2fe72b6592fc646644ec7c443b8718b |
|
||||
| DomainEventStream.restore_snapshot | 113 | 934648473a09fd4276187ced78d51d551a4047d884bbe279722d798f1b94ef96 |
|
||||
| Runtime.submit_command | 473 | 85e8d94bd933c11d1b7b2e88344b7f8839069d1b96930aa4ad4c76c7356a2e68 |
|
||||
| Runtime._process_commands | 5737 | 6e2b20f73eeaa73882081526f8be566a484f11e1aa9fbfd697df22b4fc034aca |
|
||||
| Runtime._publish_domain_event | 2389 | 6253ddb30d5470673285aef922a7caaff7611adaa855bb068e1d52e89b0761a1 |
|
||||
| Runtime._execute_create_service_request | 7413 | 084a741b5590c691aafde9b8cf978674428cb21d4deb930a783a5039106da6fa |
|
||||
| Runtime._execute_register_defense_asset | 7229 | 4834ecafd948ad0db04ef0230b4ecff733f3008679c903363ae577dd43e95a95 |
|
||||
|
||||
The private `_guard_failure` helper captures a deep typed BEFORE with the
|
||||
public Clock paused. Public submit_command executes these guards immediately;
|
||||
they are not tick-only commands, so a twin tick is unnecessary. Operations are
|
||||
disabled and pending/in-flight queues are empty. Detached public restores feed
|
||||
enqueue -> execute_ready -> complete. The independently constructed failed
|
||||
result uses each exact M message, an empty target, fixed command payload, and
|
||||
G1's independently known raid_id details. The M failed-result site publishes
|
||||
exactly one COMMAND_FAILED through the shadow event stream and ID generator.
|
||||
It increments Runtime.next_command_id once. Normal accepted/processed/
|
||||
idempotency, sorting, ID counters, ring-buffer and drained delivery behavior
|
||||
come from those public objects. No journal fields are masked or discarded.
|
||||
|
||||
EXPECTED is serialized before the actual command is submitted. Whole typed
|
||||
Runtime bytes must then match, including all business domains. Consequently
|
||||
there can be no new reservation/request, charge, wallet change or orphan.
|
||||
G2's existing active service/reservation remains unchanged. An expected-failure
|
||||
callback checks the exact failed result once; every other command still must
|
||||
succeed. `s5_guard_oracle.py` independently derives the serializer output from
|
||||
BEFORE and the fixed command for the pure adapter. It accepts no AFTER input.
|
||||
The adapter binds G1 to the non-terminal raid asset and G2 to an actual active
|
||||
service in BEFORE. Copied AFTER/EXPECTED corruptions fail the independent
|
||||
derivation. Synthetic serializer controls exercise 968 typed mutations across
|
||||
G1/G2; the same traversal is also applied to fresh native guard raw by Root.
|
||||
|
||||
### S5D reachability and coverage
|
||||
|
||||
A lawful in-flight path exists. Runtime `_validate_event_action` L9991
|
||||
(`83e0cce3b59244440b11acdee6f87dd521859701769b1689ff2775db5c92c5f5`)
|
||||
accepts SET_FACILITY_STATE conditions for an existing non-Defense-owned facility;
|
||||
it does not reject active_services. `_execute_event_action_boundary` L9957
|
||||
(`c53cf8153418237ebd0c45ba6eb4672a925fd06998c3cff8392657a5e3e019e0`)
|
||||
validates and dispatches `_apply_event_action` L10040
|
||||
(`d79e7aca02eed06f500ffc632c6160cd80d76c3d7c5c90dc097f71b60380d365`).
|
||||
That calls FacilityService.set_operational_status L132
|
||||
(`10275169f4a71ad490c432443c34068d1951f099e11132b3c18b48647e7845c8`),
|
||||
which publicly accepts durability 0 and suspension_reason DESTROYED.
|
||||
FacilityInstance.set_operational_conditions L165
|
||||
(`8574adb2957c69e76219c8d34838cacc4df4ff660d5ccd649bbb577b6d60feea`)
|
||||
evaluates the BROKEN state without completing/failing active services there.
|
||||
EventService.start_next_event L273 and Runtime._advance_relationship_events
|
||||
L8637 execute automatic actions in INCIDENTS_AND_EVENTS, after completion.
|
||||
Their full bodies and hashes are in the source-facts file.
|
||||
|
||||
`S5D_IN_FLIGHT` schedules public enqueue_event for N, with natural completion
|
||||
due at N+1. It requires active service at N after destruction, N+1 BROKEN
|
||||
failure, one reservation release, zero charge, and formal snapshot replay.
|
||||
FacilityService._prepare_service_for_tick L853
|
||||
(`b35c2c0fb23a04258b71995dd7c3b6dfacbbcdf36106e2e3348acef0e18d21cc`)
|
||||
defines that next-tick failure. This is a new S5 observation, not S3 B4 reuse.
|
||||
|
||||
`S5D_DESTRUCTION_RAID` retains its name/slots for a separate idle OBJECTIVE.
|
||||
Public get_due_rounds L114
|
||||
(`c8b469d4bd304e8325b60c17a63de07146a0040f9a1b5dde7f2aae60104bf34f`)
|
||||
must report earliest_minute exactly N. Runtime._advance_defense L8599
|
||||
(`db38b51531276d2620999d57eed7a6219b73f8b8d9ff3706cf569f4797918527`)
|
||||
performs the automatic breach. The adapter requires G1, G2 and the idle breach
|
||||
together, plus the independent in-flight case. All destruction_stop derivations
|
||||
remain charges 0. No unreachable criterion or fabricated native PASS is claimed.
|
||||
|
||||
### Other cases and private abstractions
|
||||
|
||||
- S5G_SHIFT_1080 retains the six historical first-18:00 observation labels on
|
||||
the current typed phase points. The receipt captures actual DAY staff before
|
||||
handover; the adapter joins its shift ending at 1080 and subsequent OFF_DUTY
|
||||
state. Exactly one snapshot-priced sale/payment ID and no extra 1081
|
||||
completion/charge are required. M ShiftInstance.create_standard L71 and
|
||||
StaffService._update_shift_states L1398 are included in source facts.
|
||||
- S5H_PAUSED_MIDNIGHT depletes mana before the last pre-midnight MANA evaluation,
|
||||
retaining the S5B RELATED_FACILITY_INACTIVE pattern. It checks elapsed,
|
||||
reservation IDs and request preservation through DAILY_CLOSE, no paused
|
||||
sale, one joined upkeep/payroll settlement, and one new-day recovered sale
|
||||
with CONSUMED reservations. The boundary slot is formally restored/replayed.
|
||||
- S5E Writer and restored Reader call the public coordinator advance_to at the
|
||||
paid boundary minute and record is_replay plus entire typed BEFORE/AFTER.
|
||||
This supplies same_minute_replay only after actual raw equality; rejected
|
||||
enqueue is not used as that proof.
|
||||
- The literal CASE_TABLE continues to define wrapper CASES/LABELS/SLOTS. The
|
||||
shared Writer/Reader formal-slot machinery is reused for all nine cases.
|
||||
Fresh verification and combination call the adapters again over fresh raw.
|
||||
paused_midnight leaves the adapter's pending list only when derivation
|
||||
succeeds; patience_release still requires fresh S3 evidence.
|
||||
|
||||
`REPAIR43_PURE_RESULTS.json` contains actual command outputs. UID controls first
|
||||
failed because this base checkout lacks the M helper. The retry used a temporary
|
||||
QA-only copy of exact `git show M` helper bytes, independently matching the
|
||||
supplied raw pins; all 14 helper controls passed. That is pure-helper evidence,
|
||||
not final-Q/native applicability. No product or tool file was added to the
|
||||
checkout. `REPAIR41_STATIC_CHECKS.json` records only checks actually executed.
|
||||
Fresh order positives and mutations requiring future Writer/Reader raw remain
|
||||
Root-only; no such positive has been claimed here.
|
||||
|
||||
## REPAIR43 spec identity precheck
|
||||
|
||||
The complete recorded REPAIR42 and RUN42 files were read and their exact raw
|
||||
SHA-256 values match the supplied pins. The R42 raw-only spec stop is withdrawn.
|
||||
The existing `tools/check_p04_order_evidence.py::verify` condition accepts the
|
||||
spec: raw SHA-256 is
|
||||
`d28aadb044633f7d804de5a92c8d4c4a7438dfbf44c3243dca978951f4def25f`;
|
||||
removing its single final LF gives the registered
|
||||
`9ec722e7dfb0bee178d291624a026420c08412574e238bba1fde012c7a6f7881`.
|
||||
This protocol applies only to the spec. All other material pins remain exact
|
||||
raw comparisons. Root's protocol and six controls are recorded in
|
||||
`build/owner-handoff/p04-after-p26-closure-r01/q43-spec-pin-protocol/ROOT_SPEC_PIN_EOF_PROTOCOL.json`.
|
||||
The former closed journal-field restriction below is superseded by R42/R43;
|
||||
allowed QA files may be extended while preserving existing behavior.
|
||||
|
||||
Historical REPAIR41 batch status: **BLOCKED**, partial independent fixes only. No native result,
|
||||
worker-success claim, new counted unit or completion claim. Formal 16/88,
|
||||
original 30/88 and P04 credit 0 remain unchanged. r35, r36 and R40 remain FAILED;
|
||||
Q37 remains a local PASS for its own version only. D05 x6 and A01 remain approved.
|
||||
|
||||
## Historical source/immutable-oracle conflict (superseded by R42/R43 above)
|
||||
|
||||
The clarified G1/G2 oracle permits only the processed-result and idempotency
|
||||
entries within `command_queue`. M also necessarily adds an `accepted` row.
|
||||
`CommandQueue.enqueue` records `{ "command_id": command.command_id,
|
||||
"idempotency_key": String(command.idempotency_key) }` before execution.
|
||||
`complete` retains this metadata even for a failed result. `create_snapshot`
|
||||
serializes it as the separate `accepted` array. Consequently an EXPECTED tree
|
||||
restricted to the enumerated deltas cannot equal AFTER for either guard.
|
||||
This is a deterministic source-contract conflict, not a routine refactor or a
|
||||
product defect. No field has been masked and no product change is proposed.
|
||||
|
||||
Required clarification: explicitly include the single source-defined `accepted`
|
||||
metadata row in delta (ii), with exact typed fields derived from the submitted
|
||||
command, preserving sorted command IDs and every prior row. The row is fully
|
||||
computable; the blocker is permission to include this additional serialized
|
||||
delta under the instruction “only these ... deltas.” It is not a missing-file
|
||||
or hash failure, nor a claim that the serializer is unknowable. The worker has
|
||||
not silently broadened that oracle.
|
||||
|
||||
`REPAIR41_QUEUE_SOURCE_FACTS.json` preserves the full bodies obtained using
|
||||
read-only `git show` at M `c0ea009b28a7649aca6a433a1a24dc0be5e7ab81`:
|
||||
|
||||
| Source function | M line | Full-body SHA-256 |
|
||||
| --- | --- | --- |
|
||||
| command_queue.gd enqueue | 15 | 56a1fe8a5dfd00ad81f9844bc8e6f4a6ce9009dadbc9cd2b7ff07d14bff1938c |
|
||||
| command_queue.gd execute_ready | 83 | d8c534217e704cd892401904768a883c9a3ec2f3852ae7c0438f2eb854b4f7aa |
|
||||
| command_queue.gd complete | 112 | 4290ebfe68d9245b4e8ebb6d8a09ba6172f16bcacb6e4294299ad6dc06c56ed7 |
|
||||
| command_queue.gd get_accepted_command_metadata | 174 | 60841dbff80282e95460e8dfeaeb6ae37a0cc05f2c7654130e8b8c51729e5b39 |
|
||||
| command_queue.gd create_snapshot | 189 | 15737e59018ae93092c1aca3ce268d2bc354c28a8261d4ffada4aba63af3d241 |
|
||||
| stable_id_generator.gd next_id | 9 | cf1cf036adab2eb36acab25a069b5dfc42e7aa281c491bd89ade6d91f6eb2c1d |
|
||||
| stable_id_generator.gd create_snapshot | 23 | cab243cf59d5d56ff03beb305070f83b66d7a55cce7f3f2f889c0d9a5303e76a |
|
||||
| domain_event_stream.gd publish_batch | 40 | 275be0d68c99217732ea3dc2821cf7dcec24a695035e455af7f716d901147167 |
|
||||
| domain_event_stream.gd create_snapshot | 96 | 94fc2dd3ef1a953ba7d9b3d3728c0d158bf0f69935874f48722a3c6025447dbf |
|
||||
|
||||
## Independent repairs implemented
|
||||
|
||||
- Mandatory membership is checked before applicability can dereference a missing
|
||||
condition; the diagnostic names `paused_midnight`. REQUIRED is unchanged.
|
||||
- Historical S4 receipt verification reads only
|
||||
`s4/historical/run_s4_native_r28.py.reference`. Provenance:
|
||||
`befa0ef1f634e734ee156347e8fd02e82eddea49:docs/plans/original-completion-2026-10-02/execution/p04-01/s4/run_s4_native.py`.
|
||||
The unchanged copy hashes to
|
||||
`2d3be39d2b310abac058e27336ac816c234043a0a1dd7b2c52d84994907dd31b`.
|
||||
Fresh S4 verification binds the current wrapper and rejects the historical pin.
|
||||
- Private helpers centralize mandatory membership and choose historical/current
|
||||
wrapper verification explicitly. They preserve the required membership and all
|
||||
existing join negatives; four additional version/pin negatives were added.
|
||||
- Negative fixtures (14) and join fixtures (29) passed. These are pure controls,
|
||||
not current native evidence. Full results: `REPAIR41_PURE_RESULTS.json`.
|
||||
Touched Python AST/py_compile and the unchanged GDScript probe regex check passed.
|
||||
|
||||
## Historical REPAIR41 unimplemented work / source search status
|
||||
|
||||
S5D re-scope, G1/G2, automatic breach revisions, S5G, S5H, same-minute replay,
|
||||
adapter derivations/mutations and fresh-condition wiring remain unimplemented.
|
||||
The initial M runtime search found `EventAction.Type.SET_FACILITY_STATE` handling
|
||||
in `_validate_event_action` around line 10012; this is a candidate requiring
|
||||
public/natural triggering and phase-alignment analysis. No conclusion that an
|
||||
in-flight destruction path exists or is absent is claimed. G1/G2 coverage cannot
|
||||
be claimed before the exact permitted journal envelope is resolved and checked.
|
||||
No adapter positive raw or future final-Q helper was invented. The full worker
|
||||
check set has not passed. No engine, Runner, Git mutation or agent launch occurred.
|
||||
|
||||
## Step 0
|
||||
|
||||
Step 0 precheck: PASS.
|
||||
|
||||
q40/q41 INDEX digests are observed baselines; no independent expected digest was supplied for those indexes. Child expected digests come from their indexes.
|
||||
|
||||
| Absolute path | Expected SHA-256 | Observed SHA-256 |
|
||||
| --- | --- | --- |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_ABSOLUTE_CONTEXT_INDEX.json | 6f0ee990b95a5a897511425cd86ae57ba0364c5b326afdeb9f556fabfea6915c | 6f0ee990b95a5a897511425cd86ae57ba0364c5b326afdeb9f556fabfea6915c |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ACTUAL_OPUS_NEXT_P04_PLAN.json | 217d9bf4ef593fb95a5e726fee0e4497863a0b06663d27ba20e742d81bb9c049 | 217d9bf4ef593fb95a5e726fee0e4497863a0b06663d27ba20e742d81bb9c049 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ACTUAL_OPUS_REPAIR30_DIRECT_CHECKER_PLAN.json | 77801cc6db2a4deb9f76118a746b32eb5e629b2d6980850b8813a12b45016806 | 77801cc6db2a4deb9f76118a746b32eb5e629b2d6980850b8813a12b45016806 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ACTUAL_OPUS_REPAIR30_RUN_DECISION.json | be7be3bfaa5a5ab412db8aecd1d951c213894e485b7869fcc12ab1c75b037c7f | be7be3bfaa5a5ab412db8aecd1d951c213894e485b7869fcc12ab1c75b037c7f |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ACTUAL_OPUS_REPAIR31_CONCRETE_PLAN.json | 857e1acaed2093de56afdd851e69b3129bf9edce72b5da3cdd160ce4b7bfc18a | 857e1acaed2093de56afdd851e69b3129bf9edce72b5da3cdd160ce4b7bfc18a |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ACTUAL_OPUS_REPAIR32_CONCRETE_PLAN.json | 5b69f850f835bd7af37e9c728c484c236c28efb0bd32113bb53bcbaf7d252c0a | 5b69f850f835bd7af37e9c728c484c236c28efb0bd32113bb53bcbaf7d252c0a |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/CURRENT_ROOT_P04_RESUME_FACTS.json | c826726368844a823c54c1df1cdaff43fde5a94a17e638bfc60d8fb2559f8d85 | c826726368844a823c54c1df1cdaff43fde5a94a17e638bfc60d8fb2559f8d85 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/D05_ACTUAL_HUMAN_APPROVAL.json | cd365ded1b777a0327d090709f0a4161f5005562819183455d9f2e106fba3e96 | cd365ded1b777a0327d090709f0a4161f5005562819183455d9f2e106fba3e96 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_FRESH_Q_INPUT_APPROACH_AFTER34.json | 7a7b91cbf04bb84cdef8e7a99ca2140a9eac2ac6a385570b4f0aa0d474e7da92 | 7a7b91cbf04bb84cdef8e7a99ca2140a9eac2ac6a385570b4f0aa0d474e7da92 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_P04_PRESERVED_TO_CURRENT_SOURCE_AUDIT.json | 6bb86959b06acb62d5cd3c5fd00bb6802a80b66184e69abca3f75c46ddeb7a12 | 6bb86959b06acb62d5cd3c5fd00bb6802a80b66184e69abca3f75c46ddeb7a12 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_PLAN_VERSION_NOTES.json | b4336f900a87f9bf0daa1e86728c3a913aed7c09425569e104cc01290be1c62f | b4336f900a87f9bf0daa1e86728c3a913aed7c09425569e104cc01290be1c62f |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/INDEX.json | b2ad602b7bd22dbc4778b60b4a015b1d2f8f06b71278959fb52910f2ee1af57a | b2ad602b7bd22dbc4778b60b4a015b1d2f8f06b71278959fb52910f2ee1af57a |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_CHECK_ONLY.json | aab7dcbfcc934f3bda7d937feb4e7638109ddf645da6ebd57f6190588b55287c | aab7dcbfcc934f3bda7d937feb4e7638109ddf645da6ebd57f6190588b55287c |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_NEGATIVE_GIT.json | e63b1b27244cd042f522a63b4392dea8c7211ce5ca5a927e91856115dfaa9f56 | e63b1b27244cd042f522a63b4392dea8c7211ce5ca5a927e91856115dfaa9f56 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_NEGATIVE_dirty.log | 3ad8ef5d71175bc265f93395fe64a39b05ab65252ad509abc108de15a2b9ab53 | 3ad8ef5d71175bc265f93395fe64a39b05ab65252ad509abc108de15a2b9ab53 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_NEGATIVE_untracked.log | 3ad8ef5d71175bc265f93395fe64a39b05ab65252ad509abc108de15a2b9ab53 | 3ad8ef5d71175bc265f93395fe64a39b05ab65252ad509abc108de15a2b9ab53 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_NEGATIVE_wrong-main.log | 006b9e83c3e106bada560371dda1fb9b4326e3f31fa48fa0c46e7d4903a91e55 | 006b9e83c3e106bada560371dda1fb9b4326e3f31fa48fa0c46e7d4903a91e55 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_NEGATIVE_wrong-submission.log | 6fefa0256b2dbc1596043fbff65fbaf87279baaa770a04d65a5fe70a6476671d | 6fefa0256b2dbc1596043fbff65fbaf87279baaa770a04d65a5fe70a6476671d |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_NEGATIVE_wrong-tree.log | 7fb7a1e4f00f201b7008b6d72957b3d4db450be156a1174b26a22c36d48b5e8f | 7fb7a1e4f00f201b7008b6d72957b3d4db450be156a1174b26a22c36d48b5e8f |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_RESOURCE_ADMISSION.json | 18ef80f33f36cdd6ab664c862a9ae651a649a532bd32c4c35a81640cb4f078a0 | 18ef80f33f36cdd6ab664c862a9ae651a649a532bd32c4c35a81640cb4f078a0 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_STAGE.json | f143045846cf06d79b81a0e52035300251fa576cde9a2d5eeda97d6610fd8591 | f143045846cf06d79b81a0e52035300251fa576cde9a2d5eeda97d6610fd8591 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_check-only.log | 4418f4b6bbe3d88cbf7f0b988084e05b5f0f52c15fe0f466ba82e584408427ce | 4418f4b6bbe3d88cbf7f0b988084e05b5f0f52c15fe0f466ba82e584408427ce |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_pure.log | f77640e0629497389baefc6424cf164d164fb96bbbd48cee6c4d83ed96c253c1 | f77640e0629497389baefc6424cf164d164fb96bbbd48cee6c4d83ed96c253c1 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_REPAIR30_EXECUTION_ORDER_FACTS.json | e18b031e790622929ec2c80ab9a6d5c3d883a364d625b58372fe33fd280ca93f | e18b031e790622929ec2c80ab9a6d5c3d883a364d625b58372fe33fd280ca93f |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_REPAIR31_ACTUAL_FACTS.json | 0ea352b442e88263b899d28d58422afed39855393233c35ed3a962fcab67e136 | 0ea352b442e88263b899d28d58422afed39855393233c35ed3a962fcab67e136 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/INDEX.json | ff43786d898ef3475c267cf22758074a001b3d46dbc2bea52782a3782dd5571e | ff43786d898ef3475c267cf22758074a001b3d46dbc2bea52782a3782dd5571e |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/autoload/simulation_runtime.gd | 45514aea9367ff678f4dc05166bb9b58121f240d4b5565edeb7ab258e3ded8e0 | 45514aea9367ff678f4dc05166bb9b58121f240d4b5565edeb7ab258e3ded8e0 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/scenes/main/main.gd | 92677e4ac57ed8d418a4a716bf0874cbbaea79cff893e5163c82ad1f75e7140a | 92677e4ac57ed8d418a4a716bf0874cbbaea79cff893e5163c82ad1f75e7140a |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/scenes/main/world_preview.gd | 4bc49a19a38b9c3b4d6bfc243ddf46f1f25469a8273adb5e812911ef9424a1f2 | 4bc49a19a38b9c3b4d6bfc243ddf46f1f25469a8273adb5e812911ef9424a1f2 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/scripts/core/save_service.gd | f4c270632225dd046bbff92f9472761d64d63740e93f274828c92dcf912db6a9 | f4c270632225dd046bbff92f9472761d64d63740e93f274828c92dcf912db6a9 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/scripts/relationship/relationship_service.gd | d2f6304aa643b98914c5d65bf3eb673ca8cc427476187f43e76b4b941410b1d3 | d2f6304aa643b98914c5d65bf3eb673ca8cc427476187f43e76b4b941410b1d3 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/scripts/ui/guest_observation_panel.gd | f5de1004fce5445bbfd3ee8d6ec37b325e7a9813d47c19beaeeeb411f27a50a5 | f5de1004fce5445bbfd3ee8d6ec37b325e7a9813d47c19beaeeeb411f27a50a5 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/scripts/ui/room_presentation.gd | 2eda851534777575298ea005e2e6d0ee90785a81357d5b9c34cfb95f615a8181 | 2eda851534777575298ea005e2e6d0ee90785a81357d5b9c34cfb95f615a8181 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/tests/business/test_required_kitchen.gd | 3a9c92f80c24064ef0858fba10bd7caab63203932942837f7e142349578f6b2f | 3a9c92f80c24064ef0858fba10bd7caab63203932942837f7e142349578f6b2f |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/tools/regression/suite-policy.json | 7eb085d7e7a383785b4faedb503d0f6002bcad431e3188785aef901ce123769f | 7eb085d7e7a383785b4faedb503d0f6002bcad431e3188785aef901ce123769f |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/full-standard-schema-example/INDEX.json | a7a3299c4d70ea033368a707882856fd5c7f7f4d5a0d5f86bf2fb9b2fe2e53d1 | a7a3299c4d70ea033368a707882856fd5c7f7f4d5a0d5f86bf2fb9b2fe2e53d1 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/full-standard-schema-example/controller-input.json | 24d10b3a91553df54b3b2fd4b1a57dce683cc72a55576e0c73c9e142b335ad40 | 24d10b3a91553df54b3b2fd4b1a57dce683cc72a55576e0c73c9e142b335ad40 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/full-standard-schema-example/controller.py | 9e03ecba1819c449c83a9dfba0f60c0e01f94aad728c46f60dd1db179224a89b | 9e03ecba1819c449c83a9dfba0f60c0e01f94aad728c46f60dd1db179224a89b |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/full-standard-schema-example/run/003-receipt.json | 4ce015c160859612c89e215517826aa1da3582534d27c4688af6a44e37f1b641 | 4ce015c160859612c89e215517826aa1da3582534d27c4688af6a44e37f1b641 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/full-standard-schema-example/run/parse-receipt.json | 1ad82022669a3f197f53ed1e23f23aadc927220f0ba1f857c41f80721bafa443 | 1ad82022669a3f197f53ed1e23f23aadc927220f0ba1f857c41f80721bafa443 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/full-standard-schema-example/run/runner-ended.json | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/full-standard-schema-example/run/runner-input.json | 2a76506e923a3a95288ce826b81ed9eab49d4ecee613a2c82ae35e970c68f961 | 2a76506e923a3a95288ce826b81ed9eab49d4ecee613a2c82ae35e970c68f961 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/normal-candidate-example/INDEX.json | 942181cc3efc8207e728233f89626b66eb0c34b582e5c9b0fae294dcf1600c00 | 942181cc3efc8207e728233f89626b66eb0c34b582e5c9b0fae294dcf1600c00 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/normal-candidate-example/ROOT_EXACT_NORMAL_CANDIDATE_72A50A4A.json | 5614c9b1c9eb222dbbcfd9ae1c3b438cc4129c779deba2841d660a8c96b6cfe6 | 5614c9b1c9eb222dbbcfd9ae1c3b438cc4129c779deba2841d660a8c96b6cfe6 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/normal-candidate-example/ROOT_NORMAL_FINAL_72A50A4A.json | b41069126e029c30ab644a62a54cb45ca2e0e504add150020500acba4e249469 | b41069126e029c30ab644a62a54cb45ca2e0e504add150020500acba4e249469 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/normal-candidate-example/ROOT_NORMAL_INTEGRATION_72A50A4A.json | 2f47d39d3f05b3735f0fb3e01adaabf1c66c6a784d60af247063bd90e5ec0d5c | 2f47d39d3f05b3735f0fb3e01adaabf1c66c6a784d60af247063bd90e5ec0d5c |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/owner-normal-gates-reference/INDEX.json | a23f17336a5e701100c224ebcb69f37a8de95aca82658675b692d503798a5232 | a23f17336a5e701100c224ebcb69f37a8de95aca82658675b692d503798a5232 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/owner-normal-gates-reference/OWNER_CLI_REFERENCE.json | 1e360ad1d8057ef649fabe97ac3e98263d2f8c1c4d976d8b6e0a907a49e9158e | 1e360ad1d8057ef649fabe97ac3e98263d2f8c1c4d976d8b6e0a907a49e9158e |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/owner-normal-gates-reference/ROOT_SOURCE_REVIEW_REJECTION_20D0AE5.json | d028dd3862ae663586d49b5843e88d9da82ad7985fa082551438e4a81311073e | d028dd3862ae663586d49b5843e88d9da82ad7985fa082551438e4a81311073e |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/owner-normal-gates-reference/SOURCE_REWORK_ADAPTER_LOCAL_CHECKS.json | 580f2f19d680a23ee4efe6beab68a1aad69e067bc551f623cc7531c6915d7a78 | 580f2f19d680a23ee4efe6beab68a1aad69e067bc551f623cc7531c6915d7a78 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/owner-normal-gates-reference/SOURCE_REWORK_CURRENT_REFERENCE_INDEX.json | b0ecce7ae523527fdc6272e9784eba6109d67c0cd3745a8aaab64d913ca8adbd | b0ecce7ae523527fdc6272e9784eba6109d67c0cd3745a8aaab64d913ca8adbd |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/owner-normal-gates-reference/core.py.reference | 4c6067bbd57034764873a468ff161a6882d232503043d5640fc83dea0b455856 | 4c6067bbd57034764873a468ff161a6882d232503043d5640fc83dea0b455856 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/owner-normal-gates-reference/current-owner-cli.py.reference | 0cfd9634e4a59755b89d2927d60b6092368529f2ca7188d949da7f88080359aa | 0cfd9634e4a59755b89d2927d60b6092368529f2ca7188d949da7f88080359aa |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/owner-normal-gates-reference/owner-cli.py.reference | 52c327e624334b51612ea3cb1653aeff4a7a192502d1ba9407ce874af1d92410 | 52c327e624334b51612ea3cb1653aeff4a7a192502d1ba9407ce874af1d92410 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/owner-normal-gates-reference/owner-source-rework-20d0ae5.py.reference | 9ecf7bebf666a67a8f13357d66e9c1d8d76940ef8212f0055537b728c75e0cbc | 9ecf7bebf666a67a8f13357d66e9c1d8d76940ef8212f0055537b728c75e0cbc |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/FAILED_EXECUTION.json | 6e48da89ce852dacdbff2d0f93a8903583dccd9e05f5e34bb68be0d63f540332 | 6e48da89ce852dacdbff2d0f93a8903583dccd9e05f5e34bb68be0d63f540332 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/FAILED_IMPORT_COMBINED.log | cd39b1711f530454b0ec263ab2d076d714f674d5a36e26f9ef16788799b76764 | cd39b1711f530454b0ec263ab2d076d714f674d5a36e26f9ef16788799b76764 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/FAILED_OUTER_OWNED_FINALLY.json | ee14a347724aedb2ae8afecc0775250b1e014c17e726210e2535d6108e57edc0 | ee14a347724aedb2ae8afecc0775250b1e014c17e726210e2535d6108e57edc0 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/INDEX.json | 0e4334442ce89b0388e10a4b62b5e00acbce2013e3ef1967508a3c48d72dc9c1 | 0e4334442ce89b0388e10a4b62b5e00acbce2013e3ef1967508a3c48d72dc9c1 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/P13_CONTROLLER_REFERENCE_INDEX.json | 48434362232d6b58cca720868c6d87f2af48675f365855b8a4a97eb5071dfee3 | 48434362232d6b58cca720868c6d87f2af48675f365855b8a4a97eb5071dfee3 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/P13_FULL_CONTROLLER_PATTERN.py.reference | 9e03ecba1819c449c83a9dfba0f60c0e01f94aad728c46f60dd1db179224a89b | 9e03ecba1819c449c83a9dfba0f60c0e01f94aad728c46f60dd1db179224a89b |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/ROOT_Q35_DIAGNOSTIC_IMPORT_SOURCE_DELTA.json | 1994e59a498f3dbca1fd589b16b5bc6305d2786c0fa730ac489590469f08b05d | 1994e59a498f3dbca1fd589b16b5bc6305d2786c0fa730ac489590469f08b05d |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/ROOT_Q35_FAILED_IMPORT_UID_CLASSIFICATION.json | bc0a863e52db4f98b4b2ee4bc0b513c73f841726789a2ca99521c1b8618dc6c3 | bc0a863e52db4f98b4b2ee4bc0b513c73f841726789a2ca99521c1b8618dc6c3 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/run_all_tests.py.reference | 320ca668732b4ff72fc4449998af2327d4e5c527b06896740806aaf0487282b4 | 320ca668732b4ff72fc4449998af2327d4e5c527b06896740806aaf0487282b4 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/run_p13_reference_tests.py.reference | 9adc8aa2a7662df8dd70386ddb0bff34574e44d7411de3b6128ddd15eb24675c | 9adc8aa2a7662df8dd70386ddb0bff34574e44d7411de3b6128ddd15eb24675c |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/INDEX.json | cef78b200268e27a6e73ccd926ac95d0b2b6e30b9338a8412da9ab48b68ca82a | cef78b200268e27a6e73ccd926ac95d0b2b6e30b9338a8412da9ab48b68ca82a |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/SAFETY_REAUDIT.json | 8edf11fe7893ced7c6450feb1ee3db45ab0a145db572254d2102ee70e26ac26e | 8edf11fe7893ced7c6450feb1ee3db45ab0a145db572254d2102ee70e26ac26e |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/TYPED_AUDIT.json | e1800e1679b570ecdd9d7537e87e0730c089fa3b4c6197d3e279e60959aad016 | e1800e1679b570ecdd9d7537e87e0730c089fa3b4c6197d3e279e60959aad016 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/command_queue.gd.reference | 09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895 | 09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/facility_instance.gd.reference | 0c6aa493f3299611e05dd26aa429dda8cf7b5c479e4d09632036fb862f79a324 | 0c6aa493f3299611e05dd26aa429dda8cf7b5c479e4d09632036fb862f79a324 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/writer-S5A_PURE-before.json | af7b1f0099b37298b1bf0d683f98c0ec84fae96b74f16c33af310cab2efa955b | af7b1f0099b37298b1bf0d683f98c0ec84fae96b74f16c33af310cab2efa955b |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/writer-S5A_PURE-before.var | 61f749b6a10ddc8e70f6e5b1d6378fcf1c0ae5127161a10c9704d76bcf64813a | 61f749b6a10ddc8e70f6e5b1d6378fcf1c0ae5127161a10c9704d76bcf64813a |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/writer-S5A_PURE-resource-replay.json | 56a7fc36e0972eb64abb19189f1664b87d6a058511bbec0ef7e1497abd2c511e | 56a7fc36e0972eb64abb19189f1664b87d6a058511bbec0ef7e1497abd2c511e |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/writer-S5A_PURE-resource-replay.var | 92aa8694939e2b8b678b556227cce1cf4cda661b6fb1f5a478ac37deba1a072e | 92aa8694939e2b8b678b556227cce1cf4cda661b6fb1f5a478ac37deba1a072e |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/writer-S5B_DEPENDENCY-before.json | 0f821748eb7f12a8ac196c61bca34a7fe55af6adb3ab43d1acf8748fd2be8652 | 0f821748eb7f12a8ac196c61bca34a7fe55af6adb3ab43d1acf8748fd2be8652 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/writer-S5B_DEPENDENCY-before.var | 06b03c6a50a8832a9cab621b908332199e9ab4d10d4e547111a8860c70535bd2 | 06b03c6a50a8832a9cab621b908332199e9ab4d10d4e547111a8860c70535bd2 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/writer-S5B_DEPENDENCY-resource-replay.json | 49fb4df6bdaadd9c5146f716a108902c533b137427e2f90f86116393f12c6ea0 | 49fb4df6bdaadd9c5146f716a108902c533b137427e2f90f86116393f12c6ea0 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/writer-S5B_DEPENDENCY-resource-replay.var | 464b589fa206427a1becd6dd484fc9be05da1b619ffb26ca559dde83e7b09309 | 464b589fa206427a1becd6dd484fc9be05da1b619ffb26ca559dde83e7b09309 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-power-result/INDEX.json | a8f44235dc8a74e67c3463698619611131224de5048868259a729791614cf9a9 | a8f44235dc8a74e67c3463698619611131224de5048868259a729791614cf9a9 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-power-result/ROOT_Q36_REJECTED_ENQUEUE_STATIC_PATH.json | e8adc79d506491973289084c5ade7c3affe9e3e517896ef191f01cad6dcaed92 | e8adc79d506491973289084c5ade7c3affe9e3e517896ef191f01cad6dcaed92 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-power-result/ROOT_Q37_DIAGNOSTIC_SAFETY_REAUDIT.json | 4d4b059576b3b6d28f71d054eeaf367ead54a74bb499d64bf450d625a137cfa5 | 4d4b059576b3b6d28f71d054eeaf367ead54a74bb499d64bf450d625a137cfa5 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-power-result/ROOT_Q37_POWER_ADAPTER_RESULT.json | cce1132503457675b50d566ad1afc3f67e902a28135550a8e72b647dacd7d70d | cce1132503457675b50d566ad1afc3f67e902a28135550a8e72b647dacd7d70d |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-power-result/ROOT_Q37_PREFLIGHT.json | 3554d8f246c0d117c774ecfabcd9eb48eed311155e3a5a3b15413f3e663b6fd7 | 3554d8f246c0d117c774ecfabcd9eb48eed311155e3a5a3b15413f3e663b6fd7 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-power-result/ROOT_R37_ADAPTER_CONTROLS.json | f62fc981f3935bd969ea5c6fafa5d44a111b1264ad0d04fdb08b07fe4f27429e | f62fc981f3935bd969ea5c6fafa5d44a111b1264ad0d04fdb08b07fe4f27429e |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/ROOT_MANA_ADOPTION_CURRENT_APPLICABILITY_C0.json | 57ba42e1c92db194a5ddcb8dc80c8e0249bbab817e35a3ae00bd12b0f4c57731 | 57ba42e1c92db194a5ddcb8dc80c8e0249bbab817e35a3ae00bd12b0f4c57731 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/ROOT_Q37_FULL_ROSTER_PREPARE_ONLY.json | c547dcff95184d04bf7089e7c9f6a2cda800a91359c9ec318f48ad4ecf2887c0 | c547dcff95184d04bf7089e7c9f6a2cda800a91359c9ec318f48ad4ecf2887c0 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/SOURCE_MAP.json | d1333fc891342be5cc16795973fa71e7910a8c8af06ef4a3e51662537fed63c3 | d1333fc891342be5cc16795973fa71e7910a8c8af06ef4a3e51662537fed63c3 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/core/simulation_kernel.gd | 341c0c878c4894adbac628d0db6362ff69fc3347bdd9e61e50936e15dc2d1edb | 341c0c878c4894adbac628d0db6362ff69fc3347bdd9e61e50936e15dc2d1edb |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/economy/economy_service.gd | 95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e | 95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/facility/facility_service.gd | ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77 | ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/guest/guest_service.gd | 56880410e9a00816f9a95d30821982955532de8dd976980934e12016a9f2b21e | 56880410e9a00816f9a95d30821982955532de8dd976980934e12016a9f2b21e |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/operations/operations_coordinator.gd | 871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90 | 871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/tests/s5/test_runtime_defense_autonomy.gd | 28ca81ddde4da49442b427ed4c55ddcf213ecb389712db585b64cd416636c403 | 28ca81ddde4da49442b427ed4c55ddcf213ecb389712db585b64cd416636c403 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/tests/s5/test_runtime_defense_cycle.gd | a909e2af73aae43590cdd91d07ed2548f4fd2f675d26fa63aa74f6a5cda34357 | a909e2af73aae43590cdd91d07ed2548f4fd2f675d26fa63aa74f6a5cda34357 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/tools/run_all_tests.py | 320ca668732b4ff72fc4449998af2327d4e5c527b06896740806aaf0487282b4 | 320ca668732b4ff72fc4449998af2327d4e5c527b06896740806aaf0487282b4 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/core/simulation_kernel.gd | 341c0c878c4894adbac628d0db6362ff69fc3347bdd9e61e50936e15dc2d1edb | 341c0c878c4894adbac628d0db6362ff69fc3347bdd9e61e50936e15dc2d1edb |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/autoload/simulation_runtime.gd | 45514aea9367ff678f4dc05166bb9b58121f240d4b5565edeb7ab258e3ded8e0 | 45514aea9367ff678f4dc05166bb9b58121f240d4b5565edeb7ab258e3ded8e0 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/facility/facility_service.gd | ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77 | ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/economy/economy_service.gd | 95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e | 95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/operations/operations_coordinator.gd | 871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90 | 871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/guest/guest_service.gd | 56880410e9a00816f9a95d30821982955532de8dd976980934e12016a9f2b21e | 56880410e9a00816f9a95d30821982955532de8dd976980934e12016a9f2b21e |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/tests/s5/test_runtime_defense_autonomy.gd | 28ca81ddde4da49442b427ed4c55ddcf213ecb389712db585b64cd416636c403 | 28ca81ddde4da49442b427ed4c55ddcf213ecb389712db585b64cd416636c403 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/run_all_tests.py.reference | 320ca668732b4ff72fc4449998af2327d4e5c527b06896740806aaf0487282b4 | 320ca668732b4ff72fc4449998af2327d4e5c527b06896740806aaf0487282b4 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/tests/s5/test_runtime_defense_cycle.gd | a909e2af73aae43590cdd91d07ed2548f4fd2f675d26fa63aa74f6a5cda34357 | a909e2af73aae43590cdd91d07ed2548f4fd2f675d26fa63aa74f6a5cda34357 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/run_p13_reference_tests.py.reference | 9adc8aa2a7662df8dd70386ddb0bff34574e44d7411de3b6128ddd15eb24675c | 9adc8aa2a7662df8dd70386ddb0bff34574e44d7411de3b6128ddd15eb24675c |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/INDEX.json | 1e72f10784d639ff509e8175f73c46e8e2479dda8263365f51dd9f67c753709e | 1e72f10784d639ff509e8175f73c46e8e2479dda8263365f51dd9f67c753709e |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/ROOT_Q40_NATIVE_FAILURE_AUDIT.json | 622edabc16a3e9ef6528b4009d44d8307f998bf9aa0c441b4b223bf5a40efeb5 | 622edabc16a3e9ef6528b4009d44d8307f998bf9aa0c441b4b223bf5a40efeb5 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/ROOT_R40_CURRENT_SOURCE_GAPS.json | 306195acb5661f9c4c087428ba16f0a46fe54cf1f8b2dea9933c035b90ad7511 | 306195acb5661f9c4c087428ba16f0a46fe54cf1f8b2dea9933c035b90ad7511 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/ROOT_R40_AFFECTED_PURE_CONTROLS.json | 736860fe730d7b7fa744783f74a0de875afe8ba3ff65e74598bd4c07e29d955a | 736860fe730d7b7fa744783f74a0de875afe8ba3ff65e74598bd4c07e29d955a |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/ROOT_R40_ALL_CHECK_ONLY.json | ffec08fd3ed45d346ae27de4c502fbc7768fc51ccadce433ca30805faf127a68 | ffec08fd3ed45d346ae27de4c502fbc7768fc51ccadce433ca30805faf127a68 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/writer-stderr.log | 75ddd2af006162c702751853f9f3931086bded7544a8addd0d65383c47a59a67 | 75ddd2af006162c702751853f9f3931086bded7544a8addd0d65383c47a59a67 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/writer-stdout.log | eebf10b3f84916338ab651af117852cbe852bef28f79032472fdb01342ac0608 | eebf10b3f84916338ab651af117852cbe852bef28f79032472fdb01342ac0608 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/writer.json | ceb971f39afe131fbeccb0fbe06be37ada0d31ef3ee86f216701a1618abe444a | ceb971f39afe131fbeccb0fbe06be37ada0d31ef3ee86f216701a1618abe444a |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/writer-S5D_DESTRUCTION_RAID-commands.json | 19be61a849204ce72731d586f9685ad129231a55fca57a006ddbc723d52d9879 | 19be61a849204ce72731d586f9685ad129231a55fca57a006ddbc723d52d9879 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/execution.json | 7c00af3acee008927faf7f1b99b6a7407671674668674f30acc3504ea6ee21d9 | 7c00af3acee008927faf7f1b99b6a7407671674668674f30acc3504ea6ee21d9 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q41-oracle-source-facts/INDEX.json | 903601cfec6be397f99c30aeba9301f2312c1f659a73f30d5d8a04e1f07ef468 | 903601cfec6be397f99c30aeba9301f2312c1f659a73f30d5d8a04e1f07ef468 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q41-oracle-source-facts/ACTUAL_FAILED_COMMAND_JOURNAL_SOURCE.json | 27d39ab2b01e1e73d4bd38e335a87fe26ddbea3e748fc9c95d82c886dfd14187 | 27d39ab2b01e1e73d4bd38e335a87fe26ddbea3e748fc9c95d82c886dfd14187 |
|
||||
| /Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q41-oracle-source-facts/HISTORICAL_S4_WRAPPER_R28.py.reference | 2d3be39d2b310abac058e27336ac816c234043a0a1dd7b2c52d84994907dd31b | 2d3be39d2b310abac058e27336ac816c234043a0a1dd7b2c52d84994907dd31b |
|
||||
@@ -0,0 +1,631 @@
|
||||
{
|
||||
"spec": {
|
||||
"raw_sha256": "d28aadb044633f7d804de5a92c8d4c4a7438dfbf44c3243dca978951f4def25f",
|
||||
"one_LF_stripped_sha256": "9ec722e7dfb0bee178d291624a026420c08412574e238bba1fde012c7a6f7881",
|
||||
"accepted": true,
|
||||
"controls": [
|
||||
{
|
||||
"case": "canonical_without_LF",
|
||||
"accepted": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"case": "tracked_single_LF",
|
||||
"accepted": true,
|
||||
"expected": true
|
||||
},
|
||||
{
|
||||
"case": "double_final_LF",
|
||||
"accepted": false,
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"case": "CRLF_final",
|
||||
"accepted": false,
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"case": "BOM",
|
||||
"accepted": false,
|
||||
"expected": false
|
||||
},
|
||||
{
|
||||
"case": "interior_mutation",
|
||||
"accepted": false,
|
||||
"expected": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"step0": [
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_ABSOLUTE_CONTEXT_INDEX.json",
|
||||
"expected": "6f0ee990b95a5a897511425cd86ae57ba0364c5b326afdeb9f556fabfea6915c",
|
||||
"observed": "6f0ee990b95a5a897511425cd86ae57ba0364c5b326afdeb9f556fabfea6915c"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ACTUAL_OPUS_NEXT_P04_PLAN.json",
|
||||
"expected": "217d9bf4ef593fb95a5e726fee0e4497863a0b06663d27ba20e742d81bb9c049",
|
||||
"observed": "217d9bf4ef593fb95a5e726fee0e4497863a0b06663d27ba20e742d81bb9c049"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ACTUAL_OPUS_REPAIR30_DIRECT_CHECKER_PLAN.json",
|
||||
"expected": "77801cc6db2a4deb9f76118a746b32eb5e629b2d6980850b8813a12b45016806",
|
||||
"observed": "77801cc6db2a4deb9f76118a746b32eb5e629b2d6980850b8813a12b45016806"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ACTUAL_OPUS_REPAIR30_RUN_DECISION.json",
|
||||
"expected": "be7be3bfaa5a5ab412db8aecd1d951c213894e485b7869fcc12ab1c75b037c7f",
|
||||
"observed": "be7be3bfaa5a5ab412db8aecd1d951c213894e485b7869fcc12ab1c75b037c7f"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ACTUAL_OPUS_REPAIR31_CONCRETE_PLAN.json",
|
||||
"expected": "857e1acaed2093de56afdd851e69b3129bf9edce72b5da3cdd160ce4b7bfc18a",
|
||||
"observed": "857e1acaed2093de56afdd851e69b3129bf9edce72b5da3cdd160ce4b7bfc18a"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ACTUAL_OPUS_REPAIR32_CONCRETE_PLAN.json",
|
||||
"expected": "5b69f850f835bd7af37e9c728c484c236c28efb0bd32113bb53bcbaf7d252c0a",
|
||||
"observed": "5b69f850f835bd7af37e9c728c484c236c28efb0bd32113bb53bcbaf7d252c0a"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/CURRENT_ROOT_P04_RESUME_FACTS.json",
|
||||
"expected": "c826726368844a823c54c1df1cdaff43fde5a94a17e638bfc60d8fb2559f8d85",
|
||||
"observed": "c826726368844a823c54c1df1cdaff43fde5a94a17e638bfc60d8fb2559f8d85"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/D05_ACTUAL_HUMAN_APPROVAL.json",
|
||||
"expected": "cd365ded1b777a0327d090709f0a4161f5005562819183455d9f2e106fba3e96",
|
||||
"observed": "cd365ded1b777a0327d090709f0a4161f5005562819183455d9f2e106fba3e96"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_FRESH_Q_INPUT_APPROACH_AFTER34.json",
|
||||
"expected": "7a7b91cbf04bb84cdef8e7a99ca2140a9eac2ac6a385570b4f0aa0d474e7da92",
|
||||
"observed": "7a7b91cbf04bb84cdef8e7a99ca2140a9eac2ac6a385570b4f0aa0d474e7da92"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_P04_PRESERVED_TO_CURRENT_SOURCE_AUDIT.json",
|
||||
"expected": "6bb86959b06acb62d5cd3c5fd00bb6802a80b66184e69abca3f75c46ddeb7a12",
|
||||
"observed": "6bb86959b06acb62d5cd3c5fd00bb6802a80b66184e69abca3f75c46ddeb7a12"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_PLAN_VERSION_NOTES.json",
|
||||
"expected": "b4336f900a87f9bf0daa1e86728c3a913aed7c09425569e104cc01290be1c62f",
|
||||
"observed": "b4336f900a87f9bf0daa1e86728c3a913aed7c09425569e104cc01290be1c62f"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/INDEX.json",
|
||||
"expected": "b2ad602b7bd22dbc4778b60b4a015b1d2f8f06b71278959fb52910f2ee1af57a",
|
||||
"observed": "b2ad602b7bd22dbc4778b60b4a015b1d2f8f06b71278959fb52910f2ee1af57a"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_CHECK_ONLY.json",
|
||||
"expected": "aab7dcbfcc934f3bda7d937feb4e7638109ddf645da6ebd57f6190588b55287c",
|
||||
"observed": "aab7dcbfcc934f3bda7d937feb4e7638109ddf645da6ebd57f6190588b55287c"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_NEGATIVE_GIT.json",
|
||||
"expected": "e63b1b27244cd042f522a63b4392dea8c7211ce5ca5a927e91856115dfaa9f56",
|
||||
"observed": "e63b1b27244cd042f522a63b4392dea8c7211ce5ca5a927e91856115dfaa9f56"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_NEGATIVE_dirty.log",
|
||||
"expected": "3ad8ef5d71175bc265f93395fe64a39b05ab65252ad509abc108de15a2b9ab53",
|
||||
"observed": "3ad8ef5d71175bc265f93395fe64a39b05ab65252ad509abc108de15a2b9ab53"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_NEGATIVE_untracked.log",
|
||||
"expected": "3ad8ef5d71175bc265f93395fe64a39b05ab65252ad509abc108de15a2b9ab53",
|
||||
"observed": "3ad8ef5d71175bc265f93395fe64a39b05ab65252ad509abc108de15a2b9ab53"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_NEGATIVE_wrong-main.log",
|
||||
"expected": "006b9e83c3e106bada560371dda1fb9b4326e3f31fa48fa0c46e7d4903a91e55",
|
||||
"observed": "006b9e83c3e106bada560371dda1fb9b4326e3f31fa48fa0c46e7d4903a91e55"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_NEGATIVE_wrong-submission.log",
|
||||
"expected": "6fefa0256b2dbc1596043fbff65fbaf87279baaa770a04d65a5fe70a6476671d",
|
||||
"observed": "6fefa0256b2dbc1596043fbff65fbaf87279baaa770a04d65a5fe70a6476671d"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_NEGATIVE_wrong-tree.log",
|
||||
"expected": "7fb7a1e4f00f201b7008b6d72957b3d4db450be156a1174b26a22c36d48b5e8f",
|
||||
"observed": "7fb7a1e4f00f201b7008b6d72957b3d4db450be156a1174b26a22c36d48b5e8f"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_RESOURCE_ADMISSION.json",
|
||||
"expected": "18ef80f33f36cdd6ab664c862a9ae651a649a532bd32c4c35a81640cb4f078a0",
|
||||
"observed": "18ef80f33f36cdd6ab664c862a9ae651a649a532bd32c4c35a81640cb4f078a0"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_STAGE.json",
|
||||
"expected": "f143045846cf06d79b81a0e52035300251fa576cde9a2d5eeda97d6610fd8591",
|
||||
"observed": "f143045846cf06d79b81a0e52035300251fa576cde9a2d5eeda97d6610fd8591"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_check-only.log",
|
||||
"expected": "4418f4b6bbe3d88cbf7f0b988084e05b5f0f52c15fe0f466ba82e584408427ce",
|
||||
"observed": "4418f4b6bbe3d88cbf7f0b988084e05b5f0f52c15fe0f466ba82e584408427ce"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_Q35_LOCAL_DIAGNOSTIC_INPUTS/ROOT_Q35_pure.log",
|
||||
"expected": "f77640e0629497389baefc6424cf164d164fb96bbbd48cee6c4d83ed96c253c1",
|
||||
"observed": "f77640e0629497389baefc6424cf164d164fb96bbbd48cee6c4d83ed96c253c1"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_REPAIR30_EXECUTION_ORDER_FACTS.json",
|
||||
"expected": "e18b031e790622929ec2c80ab9a6d5c3d883a364d625b58372fe33fd280ca93f",
|
||||
"observed": "e18b031e790622929ec2c80ab9a6d5c3d883a364d625b58372fe33fd280ca93f"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/ROOT_REPAIR31_ACTUAL_FACTS.json",
|
||||
"expected": "0ea352b442e88263b899d28d58422afed39855393233c35ed3a962fcab67e136",
|
||||
"observed": "0ea352b442e88263b899d28d58422afed39855393233c35ed3a962fcab67e136"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/INDEX.json",
|
||||
"expected": "ff43786d898ef3475c267cf22758074a001b3d46dbc2bea52782a3782dd5571e",
|
||||
"observed": "ff43786d898ef3475c267cf22758074a001b3d46dbc2bea52782a3782dd5571e"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/autoload/simulation_runtime.gd",
|
||||
"expected": "45514aea9367ff678f4dc05166bb9b58121f240d4b5565edeb7ab258e3ded8e0",
|
||||
"observed": "45514aea9367ff678f4dc05166bb9b58121f240d4b5565edeb7ab258e3ded8e0"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/scenes/main/main.gd",
|
||||
"expected": "92677e4ac57ed8d418a4a716bf0874cbbaea79cff893e5163c82ad1f75e7140a",
|
||||
"observed": "92677e4ac57ed8d418a4a716bf0874cbbaea79cff893e5163c82ad1f75e7140a"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/scenes/main/world_preview.gd",
|
||||
"expected": "4bc49a19a38b9c3b4d6bfc243ddf46f1f25469a8273adb5e812911ef9424a1f2",
|
||||
"observed": "4bc49a19a38b9c3b4d6bfc243ddf46f1f25469a8273adb5e812911ef9424a1f2"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/scripts/core/save_service.gd",
|
||||
"expected": "f4c270632225dd046bbff92f9472761d64d63740e93f274828c92dcf912db6a9",
|
||||
"observed": "f4c270632225dd046bbff92f9472761d64d63740e93f274828c92dcf912db6a9"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/scripts/relationship/relationship_service.gd",
|
||||
"expected": "d2f6304aa643b98914c5d65bf3eb673ca8cc427476187f43e76b4b941410b1d3",
|
||||
"observed": "d2f6304aa643b98914c5d65bf3eb673ca8cc427476187f43e76b4b941410b1d3"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/scripts/ui/guest_observation_panel.gd",
|
||||
"expected": "f5de1004fce5445bbfd3ee8d6ec37b325e7a9813d47c19beaeeeb411f27a50a5",
|
||||
"observed": "f5de1004fce5445bbfd3ee8d6ec37b325e7a9813d47c19beaeeeb411f27a50a5"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/scripts/ui/room_presentation.gd",
|
||||
"expected": "2eda851534777575298ea005e2e6d0ee90785a81357d5b9c34cfb95f615a8181",
|
||||
"observed": "2eda851534777575298ea005e2e6d0ee90785a81357d5b9c34cfb95f615a8181"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/tests/business/test_required_kitchen.gd",
|
||||
"expected": "3a9c92f80c24064ef0858fba10bd7caab63203932942837f7e142349578f6b2f",
|
||||
"observed": "3a9c92f80c24064ef0858fba10bd7caab63203932942837f7e142349578f6b2f"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/tools/regression/suite-policy.json",
|
||||
"expected": "7eb085d7e7a383785b4faedb503d0f6002bcad431e3188785aef901ce123769f",
|
||||
"observed": "7eb085d7e7a383785b4faedb503d0f6002bcad431e3188785aef901ce123769f"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/full-standard-schema-example/INDEX.json",
|
||||
"expected": "a7a3299c4d70ea033368a707882856fd5c7f7f4d5a0d5f86bf2fb9b2fe2e53d1",
|
||||
"observed": "a7a3299c4d70ea033368a707882856fd5c7f7f4d5a0d5f86bf2fb9b2fe2e53d1"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/full-standard-schema-example/controller-input.json",
|
||||
"expected": "24d10b3a91553df54b3b2fd4b1a57dce683cc72a55576e0c73c9e142b335ad40",
|
||||
"observed": "24d10b3a91553df54b3b2fd4b1a57dce683cc72a55576e0c73c9e142b335ad40"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/full-standard-schema-example/controller.py",
|
||||
"expected": "9e03ecba1819c449c83a9dfba0f60c0e01f94aad728c46f60dd1db179224a89b",
|
||||
"observed": "9e03ecba1819c449c83a9dfba0f60c0e01f94aad728c46f60dd1db179224a89b"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/full-standard-schema-example/run/003-receipt.json",
|
||||
"expected": "4ce015c160859612c89e215517826aa1da3582534d27c4688af6a44e37f1b641",
|
||||
"observed": "4ce015c160859612c89e215517826aa1da3582534d27c4688af6a44e37f1b641"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/full-standard-schema-example/run/parse-receipt.json",
|
||||
"expected": "1ad82022669a3f197f53ed1e23f23aadc927220f0ba1f857c41f80721bafa443",
|
||||
"observed": "1ad82022669a3f197f53ed1e23f23aadc927220f0ba1f857c41f80721bafa443"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/full-standard-schema-example/run/runner-ended.json",
|
||||
"expected": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"observed": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/full-standard-schema-example/run/runner-input.json",
|
||||
"expected": "2a76506e923a3a95288ce826b81ed9eab49d4ecee613a2c82ae35e970c68f961",
|
||||
"observed": "2a76506e923a3a95288ce826b81ed9eab49d4ecee613a2c82ae35e970c68f961"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/normal-candidate-example/INDEX.json",
|
||||
"expected": "942181cc3efc8207e728233f89626b66eb0c34b582e5c9b0fae294dcf1600c00",
|
||||
"observed": "942181cc3efc8207e728233f89626b66eb0c34b582e5c9b0fae294dcf1600c00"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/normal-candidate-example/ROOT_EXACT_NORMAL_CANDIDATE_72A50A4A.json",
|
||||
"expected": "5614c9b1c9eb222dbbcfd9ae1c3b438cc4129c779deba2841d660a8c96b6cfe6",
|
||||
"observed": "5614c9b1c9eb222dbbcfd9ae1c3b438cc4129c779deba2841d660a8c96b6cfe6"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/normal-candidate-example/ROOT_NORMAL_FINAL_72A50A4A.json",
|
||||
"expected": "b41069126e029c30ab644a62a54cb45ca2e0e504add150020500acba4e249469",
|
||||
"observed": "b41069126e029c30ab644a62a54cb45ca2e0e504add150020500acba4e249469"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/normal-candidate-example/ROOT_NORMAL_INTEGRATION_72A50A4A.json",
|
||||
"expected": "2f47d39d3f05b3735f0fb3e01adaabf1c66c6a784d60af247063bd90e5ec0d5c",
|
||||
"observed": "2f47d39d3f05b3735f0fb3e01adaabf1c66c6a784d60af247063bd90e5ec0d5c"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/owner-normal-gates-reference/INDEX.json",
|
||||
"expected": "a23f17336a5e701100c224ebcb69f37a8de95aca82658675b692d503798a5232",
|
||||
"observed": "a23f17336a5e701100c224ebcb69f37a8de95aca82658675b692d503798a5232"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/owner-normal-gates-reference/OWNER_CLI_REFERENCE.json",
|
||||
"expected": "1e360ad1d8057ef649fabe97ac3e98263d2f8c1c4d976d8b6e0a907a49e9158e",
|
||||
"observed": "1e360ad1d8057ef649fabe97ac3e98263d2f8c1c4d976d8b6e0a907a49e9158e"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/owner-normal-gates-reference/ROOT_SOURCE_REVIEW_REJECTION_20D0AE5.json",
|
||||
"expected": "d028dd3862ae663586d49b5843e88d9da82ad7985fa082551438e4a81311073e",
|
||||
"observed": "d028dd3862ae663586d49b5843e88d9da82ad7985fa082551438e4a81311073e"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/owner-normal-gates-reference/SOURCE_REWORK_ADAPTER_LOCAL_CHECKS.json",
|
||||
"expected": "580f2f19d680a23ee4efe6beab68a1aad69e067bc551f623cc7531c6915d7a78",
|
||||
"observed": "580f2f19d680a23ee4efe6beab68a1aad69e067bc551f623cc7531c6915d7a78"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/owner-normal-gates-reference/SOURCE_REWORK_CURRENT_REFERENCE_INDEX.json",
|
||||
"expected": "b0ecce7ae523527fdc6272e9784eba6109d67c0cd3745a8aaab64d913ca8adbd",
|
||||
"observed": "b0ecce7ae523527fdc6272e9784eba6109d67c0cd3745a8aaab64d913ca8adbd"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/owner-normal-gates-reference/core.py.reference",
|
||||
"expected": "4c6067bbd57034764873a468ff161a6882d232503043d5640fc83dea0b455856",
|
||||
"observed": "4c6067bbd57034764873a468ff161a6882d232503043d5640fc83dea0b455856"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/owner-normal-gates-reference/current-owner-cli.py.reference",
|
||||
"expected": "0cfd9634e4a59755b89d2927d60b6092368529f2ca7188d949da7f88080359aa",
|
||||
"observed": "0cfd9634e4a59755b89d2927d60b6092368529f2ca7188d949da7f88080359aa"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/owner-normal-gates-reference/owner-cli.py.reference",
|
||||
"expected": "52c327e624334b51612ea3cb1653aeff4a7a192502d1ba9407ce874af1d92410",
|
||||
"observed": "52c327e624334b51612ea3cb1653aeff4a7a192502d1ba9407ce874af1d92410"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/owner-normal-gates-reference/owner-source-rework-20d0ae5.py.reference",
|
||||
"expected": "9ecf7bebf666a67a8f13357d66e9c1d8d76940ef8212f0055537b728c75e0cbc",
|
||||
"observed": "9ecf7bebf666a67a8f13357d66e9c1d8d76940ef8212f0055537b728c75e0cbc"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/FAILED_EXECUTION.json",
|
||||
"expected": "6e48da89ce852dacdbff2d0f93a8903583dccd9e05f5e34bb68be0d63f540332",
|
||||
"observed": "6e48da89ce852dacdbff2d0f93a8903583dccd9e05f5e34bb68be0d63f540332"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/FAILED_IMPORT_COMBINED.log",
|
||||
"expected": "cd39b1711f530454b0ec263ab2d076d714f674d5a36e26f9ef16788799b76764",
|
||||
"observed": "cd39b1711f530454b0ec263ab2d076d714f674d5a36e26f9ef16788799b76764"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/FAILED_OUTER_OWNED_FINALLY.json",
|
||||
"expected": "ee14a347724aedb2ae8afecc0775250b1e014c17e726210e2535d6108e57edc0",
|
||||
"observed": "ee14a347724aedb2ae8afecc0775250b1e014c17e726210e2535d6108e57edc0"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/INDEX.json",
|
||||
"expected": "0e4334442ce89b0388e10a4b62b5e00acbce2013e3ef1967508a3c48d72dc9c1",
|
||||
"observed": "0e4334442ce89b0388e10a4b62b5e00acbce2013e3ef1967508a3c48d72dc9c1"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/P13_CONTROLLER_REFERENCE_INDEX.json",
|
||||
"expected": "48434362232d6b58cca720868c6d87f2af48675f365855b8a4a97eb5071dfee3",
|
||||
"observed": "48434362232d6b58cca720868c6d87f2af48675f365855b8a4a97eb5071dfee3"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/P13_FULL_CONTROLLER_PATTERN.py.reference",
|
||||
"expected": "9e03ecba1819c449c83a9dfba0f60c0e01f94aad728c46f60dd1db179224a89b",
|
||||
"observed": "9e03ecba1819c449c83a9dfba0f60c0e01f94aad728c46f60dd1db179224a89b"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/ROOT_Q35_DIAGNOSTIC_IMPORT_SOURCE_DELTA.json",
|
||||
"expected": "1994e59a498f3dbca1fd589b16b5bc6305d2786c0fa730ac489590469f08b05d",
|
||||
"observed": "1994e59a498f3dbca1fd589b16b5bc6305d2786c0fa730ac489590469f08b05d"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/ROOT_Q35_FAILED_IMPORT_UID_CLASSIFICATION.json",
|
||||
"expected": "bc0a863e52db4f98b4b2ee4bc0b513c73f841726789a2ca99521c1b8618dc6c3",
|
||||
"observed": "bc0a863e52db4f98b4b2ee4bc0b513c73f841726789a2ca99521c1b8618dc6c3"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/run_all_tests.py.reference",
|
||||
"expected": "320ca668732b4ff72fc4449998af2327d4e5c527b06896740806aaf0487282b4",
|
||||
"observed": "320ca668732b4ff72fc4449998af2327d4e5c527b06896740806aaf0487282b4"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/run_p13_reference_tests.py.reference",
|
||||
"expected": "9adc8aa2a7662df8dd70386ddb0bff34574e44d7411de3b6128ddd15eb24675c",
|
||||
"observed": "9adc8aa2a7662df8dd70386ddb0bff34574e44d7411de3b6128ddd15eb24675c"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/INDEX.json",
|
||||
"expected": "cef78b200268e27a6e73ccd926ac95d0b2b6e30b9338a8412da9ab48b68ca82a",
|
||||
"observed": "cef78b200268e27a6e73ccd926ac95d0b2b6e30b9338a8412da9ab48b68ca82a"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/SAFETY_REAUDIT.json",
|
||||
"expected": "8edf11fe7893ced7c6450feb1ee3db45ab0a145db572254d2102ee70e26ac26e",
|
||||
"observed": "8edf11fe7893ced7c6450feb1ee3db45ab0a145db572254d2102ee70e26ac26e"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/TYPED_AUDIT.json",
|
||||
"expected": "e1800e1679b570ecdd9d7537e87e0730c089fa3b4c6197d3e279e60959aad016",
|
||||
"observed": "e1800e1679b570ecdd9d7537e87e0730c089fa3b4c6197d3e279e60959aad016"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/command_queue.gd.reference",
|
||||
"expected": "09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895",
|
||||
"observed": "09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/facility_instance.gd.reference",
|
||||
"expected": "0c6aa493f3299611e05dd26aa429dda8cf7b5c479e4d09632036fb862f79a324",
|
||||
"observed": "0c6aa493f3299611e05dd26aa429dda8cf7b5c479e4d09632036fb862f79a324"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/writer-S5A_PURE-before.json",
|
||||
"expected": "af7b1f0099b37298b1bf0d683f98c0ec84fae96b74f16c33af310cab2efa955b",
|
||||
"observed": "af7b1f0099b37298b1bf0d683f98c0ec84fae96b74f16c33af310cab2efa955b"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/writer-S5A_PURE-before.var",
|
||||
"expected": "61f749b6a10ddc8e70f6e5b1d6378fcf1c0ae5127161a10c9704d76bcf64813a",
|
||||
"observed": "61f749b6a10ddc8e70f6e5b1d6378fcf1c0ae5127161a10c9704d76bcf64813a"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/writer-S5A_PURE-resource-replay.json",
|
||||
"expected": "56a7fc36e0972eb64abb19189f1664b87d6a058511bbec0ef7e1497abd2c511e",
|
||||
"observed": "56a7fc36e0972eb64abb19189f1664b87d6a058511bbec0ef7e1497abd2c511e"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/writer-S5A_PURE-resource-replay.var",
|
||||
"expected": "92aa8694939e2b8b678b556227cce1cf4cda661b6fb1f5a478ac37deba1a072e",
|
||||
"observed": "92aa8694939e2b8b678b556227cce1cf4cda661b6fb1f5a478ac37deba1a072e"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/writer-S5B_DEPENDENCY-before.json",
|
||||
"expected": "0f821748eb7f12a8ac196c61bca34a7fe55af6adb3ab43d1acf8748fd2be8652",
|
||||
"observed": "0f821748eb7f12a8ac196c61bca34a7fe55af6adb3ab43d1acf8748fd2be8652"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/writer-S5B_DEPENDENCY-before.var",
|
||||
"expected": "06b03c6a50a8832a9cab621b908332199e9ab4d10d4e547111a8860c70535bd2",
|
||||
"observed": "06b03c6a50a8832a9cab621b908332199e9ab4d10d4e547111a8860c70535bd2"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/writer-S5B_DEPENDENCY-resource-replay.json",
|
||||
"expected": "49fb4df6bdaadd9c5146f716a108902c533b137427e2f90f86116393f12c6ea0",
|
||||
"observed": "49fb4df6bdaadd9c5146f716a108902c533b137427e2f90f86116393f12c6ea0"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q36-writer-contract/writer-S5B_DEPENDENCY-resource-replay.var",
|
||||
"expected": "464b589fa206427a1becd6dd484fc9be05da1b619ffb26ca559dde83e7b09309",
|
||||
"observed": "464b589fa206427a1becd6dd484fc9be05da1b619ffb26ca559dde83e7b09309"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-power-result/INDEX.json",
|
||||
"expected": "a8f44235dc8a74e67c3463698619611131224de5048868259a729791614cf9a9",
|
||||
"observed": "a8f44235dc8a74e67c3463698619611131224de5048868259a729791614cf9a9"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-power-result/ROOT_Q36_REJECTED_ENQUEUE_STATIC_PATH.json",
|
||||
"expected": "e8adc79d506491973289084c5ade7c3affe9e3e517896ef191f01cad6dcaed92",
|
||||
"observed": "e8adc79d506491973289084c5ade7c3affe9e3e517896ef191f01cad6dcaed92"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-power-result/ROOT_Q37_DIAGNOSTIC_SAFETY_REAUDIT.json",
|
||||
"expected": "4d4b059576b3b6d28f71d054eeaf367ead54a74bb499d64bf450d625a137cfa5",
|
||||
"observed": "4d4b059576b3b6d28f71d054eeaf367ead54a74bb499d64bf450d625a137cfa5"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-power-result/ROOT_Q37_POWER_ADAPTER_RESULT.json",
|
||||
"expected": "cce1132503457675b50d566ad1afc3f67e902a28135550a8e72b647dacd7d70d",
|
||||
"observed": "cce1132503457675b50d566ad1afc3f67e902a28135550a8e72b647dacd7d70d"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-power-result/ROOT_Q37_PREFLIGHT.json",
|
||||
"expected": "3554d8f246c0d117c774ecfabcd9eb48eed311155e3a5a3b15413f3e663b6fd7",
|
||||
"observed": "3554d8f246c0d117c774ecfabcd9eb48eed311155e3a5a3b15413f3e663b6fd7"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-power-result/ROOT_R37_ADAPTER_CONTROLS.json",
|
||||
"expected": "f62fc981f3935bd969ea5c6fafa5d44a111b1264ad0d04fdb08b07fe4f27429e",
|
||||
"observed": "f62fc981f3935bd969ea5c6fafa5d44a111b1264ad0d04fdb08b07fe4f27429e"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/ROOT_MANA_ADOPTION_CURRENT_APPLICABILITY_C0.json",
|
||||
"expected": "57ba42e1c92db194a5ddcb8dc80c8e0249bbab817e35a3ae00bd12b0f4c57731",
|
||||
"observed": "57ba42e1c92db194a5ddcb8dc80c8e0249bbab817e35a3ae00bd12b0f4c57731"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/ROOT_Q37_FULL_ROSTER_PREPARE_ONLY.json",
|
||||
"expected": "c547dcff95184d04bf7089e7c9f6a2cda800a91359c9ec318f48ad4ecf2887c0",
|
||||
"observed": "c547dcff95184d04bf7089e7c9f6a2cda800a91359c9ec318f48ad4ecf2887c0"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/SOURCE_MAP.json",
|
||||
"expected": "d1333fc891342be5cc16795973fa71e7910a8c8af06ef4a3e51662537fed63c3",
|
||||
"observed": "d1333fc891342be5cc16795973fa71e7910a8c8af06ef4a3e51662537fed63c3"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/core/simulation_kernel.gd",
|
||||
"expected": "341c0c878c4894adbac628d0db6362ff69fc3347bdd9e61e50936e15dc2d1edb",
|
||||
"observed": "341c0c878c4894adbac628d0db6362ff69fc3347bdd9e61e50936e15dc2d1edb"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/economy/economy_service.gd",
|
||||
"expected": "95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e",
|
||||
"observed": "95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/facility/facility_service.gd",
|
||||
"expected": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77",
|
||||
"observed": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/guest/guest_service.gd",
|
||||
"expected": "56880410e9a00816f9a95d30821982955532de8dd976980934e12016a9f2b21e",
|
||||
"observed": "56880410e9a00816f9a95d30821982955532de8dd976980934e12016a9f2b21e"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/operations/operations_coordinator.gd",
|
||||
"expected": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90",
|
||||
"observed": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/tests/s5/test_runtime_defense_autonomy.gd",
|
||||
"expected": "28ca81ddde4da49442b427ed4c55ddcf213ecb389712db585b64cd416636c403",
|
||||
"observed": "28ca81ddde4da49442b427ed4c55ddcf213ecb389712db585b64cd416636c403"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/tests/s5/test_runtime_defense_cycle.gd",
|
||||
"expected": "a909e2af73aae43590cdd91d07ed2548f4fd2f675d26fa63aa74f6a5cda34357",
|
||||
"observed": "a909e2af73aae43590cdd91d07ed2548f4fd2f675d26fa63aa74f6a5cda34357"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/tools/run_all_tests.py",
|
||||
"expected": "320ca668732b4ff72fc4449998af2327d4e5c527b06896740806aaf0487282b4",
|
||||
"observed": "320ca668732b4ff72fc4449998af2327d4e5c527b06896740806aaf0487282b4"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/core/simulation_kernel.gd",
|
||||
"expected": "341c0c878c4894adbac628d0db6362ff69fc3347bdd9e61e50936e15dc2d1edb",
|
||||
"observed": "341c0c878c4894adbac628d0db6362ff69fc3347bdd9e61e50936e15dc2d1edb"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/current-main-source/autoload/simulation_runtime.gd",
|
||||
"expected": "45514aea9367ff678f4dc05166bb9b58121f240d4b5565edeb7ab258e3ded8e0",
|
||||
"observed": "45514aea9367ff678f4dc05166bb9b58121f240d4b5565edeb7ab258e3ded8e0"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/facility/facility_service.gd",
|
||||
"expected": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77",
|
||||
"observed": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/economy/economy_service.gd",
|
||||
"expected": "95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e",
|
||||
"observed": "95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/operations/operations_coordinator.gd",
|
||||
"expected": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90",
|
||||
"observed": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/scripts/guest/guest_service.gd",
|
||||
"expected": "56880410e9a00816f9a95d30821982955532de8dd976980934e12016a9f2b21e",
|
||||
"observed": "56880410e9a00816f9a95d30821982955532de8dd976980934e12016a9f2b21e"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/tests/s5/test_runtime_defense_autonomy.gd",
|
||||
"expected": "28ca81ddde4da49442b427ed4c55ddcf213ecb389712db585b64cd416636c403",
|
||||
"observed": "28ca81ddde4da49442b427ed4c55ddcf213ecb389712db585b64cd416636c403"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/run_all_tests.py.reference",
|
||||
"expected": "320ca668732b4ff72fc4449998af2327d4e5c527b06896740806aaf0487282b4",
|
||||
"observed": "320ca668732b4ff72fc4449998af2327d4e5c527b06896740806aaf0487282b4"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q37-remaining-source-map/source/tests/s5/test_runtime_defense_cycle.gd",
|
||||
"expected": "a909e2af73aae43590cdd91d07ed2548f4fd2f675d26fa63aa74f6a5cda34357",
|
||||
"observed": "a909e2af73aae43590cdd91d07ed2548f4fd2f675d26fa63aa74f6a5cda34357"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/owner-handoff/p04-after-p26-closure-r01/q35-uid-diagnostic/run_p13_reference_tests.py.reference",
|
||||
"expected": "9adc8aa2a7662df8dd70386ddb0bff34574e44d7411de3b6128ddd15eb24675c",
|
||||
"observed": "9adc8aa2a7662df8dd70386ddb0bff34574e44d7411de3b6128ddd15eb24675c"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/INDEX.json",
|
||||
"expected": "1e72f10784d639ff509e8175f73c46e8e2479dda8263365f51dd9f67c753709e",
|
||||
"observed": "1e72f10784d639ff509e8175f73c46e8e2479dda8263365f51dd9f67c753709e"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/ROOT_Q40_NATIVE_FAILURE_AUDIT.json",
|
||||
"expected": "622edabc16a3e9ef6528b4009d44d8307f998bf9aa0c441b4b223bf5a40efeb5",
|
||||
"observed": "622edabc16a3e9ef6528b4009d44d8307f998bf9aa0c441b4b223bf5a40efeb5"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/ROOT_R40_CURRENT_SOURCE_GAPS.json",
|
||||
"expected": "306195acb5661f9c4c087428ba16f0a46fe54cf1f8b2dea9933c035b90ad7511",
|
||||
"observed": "306195acb5661f9c4c087428ba16f0a46fe54cf1f8b2dea9933c035b90ad7511"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/ROOT_R40_AFFECTED_PURE_CONTROLS.json",
|
||||
"expected": "736860fe730d7b7fa744783f74a0de875afe8ba3ff65e74598bd4c07e29d955a",
|
||||
"observed": "736860fe730d7b7fa744783f74a0de875afe8ba3ff65e74598bd4c07e29d955a"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/ROOT_R40_ALL_CHECK_ONLY.json",
|
||||
"expected": "ffec08fd3ed45d346ae27de4c502fbc7768fc51ccadce433ca30805faf127a68",
|
||||
"observed": "ffec08fd3ed45d346ae27de4c502fbc7768fc51ccadce433ca30805faf127a68"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/writer-stderr.log",
|
||||
"expected": "75ddd2af006162c702751853f9f3931086bded7544a8addd0d65383c47a59a67",
|
||||
"observed": "75ddd2af006162c702751853f9f3931086bded7544a8addd0d65383c47a59a67"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/writer-stdout.log",
|
||||
"expected": "eebf10b3f84916338ab651af117852cbe852bef28f79032472fdb01342ac0608",
|
||||
"observed": "eebf10b3f84916338ab651af117852cbe852bef28f79032472fdb01342ac0608"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/writer.json",
|
||||
"expected": "ceb971f39afe131fbeccb0fbe06be37ada0d31ef3ee86f216701a1618abe444a",
|
||||
"observed": "ceb971f39afe131fbeccb0fbe06be37ada0d31ef3ee86f216701a1618abe444a"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/writer-S5D_DESTRUCTION_RAID-commands.json",
|
||||
"expected": "19be61a849204ce72731d586f9685ad129231a55fca57a006ddbc723d52d9879",
|
||||
"observed": "19be61a849204ce72731d586f9685ad129231a55fca57a006ddbc723d52d9879"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q40-source-and-native-findings/execution.json",
|
||||
"expected": "7c00af3acee008927faf7f1b99b6a7407671674668674f30acc3504ea6ee21d9",
|
||||
"observed": "7c00af3acee008927faf7f1b99b6a7407671674668674f30acc3504ea6ee21d9"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q41-oracle-source-facts/INDEX.json",
|
||||
"expected": "903601cfec6be397f99c30aeba9301f2312c1f659a73f30d5d8a04e1f07ef468",
|
||||
"observed": "903601cfec6be397f99c30aeba9301f2312c1f659a73f30d5d8a04e1f07ef468"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q41-oracle-source-facts/ACTUAL_FAILED_COMMAND_JOURNAL_SOURCE.json",
|
||||
"expected": "27d39ab2b01e1e73d4bd38e335a87fe26ddbea3e748fc9c95d82c886dfd14187",
|
||||
"observed": "27d39ab2b01e1e73d4bd38e335a87fe26ddbea3e748fc9c95d82c886dfd14187"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/q41-oracle-source-facts/HISTORICAL_S4_WRAPPER_R28.py.reference",
|
||||
"expected": "2d3be39d2b310abac058e27336ac816c234043a0a1dd7b2c52d84994907dd31b",
|
||||
"observed": "2d3be39d2b310abac058e27336ac816c234043a0a1dd7b2c52d84994907dd31b"
|
||||
}
|
||||
]
|
||||
}
|
||||
+1167
File diff suppressed because one or more lines are too long
+300
File diff suppressed because one or more lines are too long
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -108,6 +108,25 @@ def run(build):
|
||||
# S4 is deliberately unavailable until the single Root collection exists.
|
||||
# Never substitute B1 or manufacture a positive raw fixture for it.
|
||||
s4 = series.S4Series(build)
|
||||
current_wrapper = series.digest((series.HERE / 's4/run_s4_native.py').read_bytes())
|
||||
historical_wrapper = series.S4_HISTORICAL_WRAPPER_SHA256
|
||||
series.verify_s4_wrapper(historical_wrapper, historical=True)
|
||||
series.verify_s4_wrapper(current_wrapper, historical=False)
|
||||
reject('historical_receipt_checked_against_current_wrapper',
|
||||
lambda: series.verify_s4_wrapper(historical_wrapper, historical=False))
|
||||
reject('current_wrapper_used_as_historical_receipt',
|
||||
lambda: series.verify_s4_wrapper(current_wrapper, historical=True))
|
||||
reject('fresh_receipt_carrying_historical_pin',
|
||||
lambda: series.verify_s4_wrapper(historical_wrapper, historical=False))
|
||||
original_read_bytes = Path.read_bytes
|
||||
|
||||
def tampered_pin(path):
|
||||
data = original_read_bytes(path)
|
||||
return data + b'\n' if path == series.S4_HISTORICAL_WRAPPER else data
|
||||
|
||||
with patch.object(Path, 'read_bytes', tampered_pin):
|
||||
reject('tampered_historical_pinned_copy',
|
||||
lambda: series.verify_s4_wrapper(historical_wrapper, historical=True))
|
||||
series.power_stop(s4)
|
||||
results.append({'case': 'S4_real_NO_POWER_positive', 'result': 'accepted'})
|
||||
s4_value = s4.value
|
||||
|
||||
@@ -997,6 +997,23 @@ def verify_s4_engine(pin, identity):
|
||||
all(value == pin for value in identity['during']), 'S4 before/during/after engine identity')
|
||||
|
||||
|
||||
S4_HISTORICAL_WRAPPER_SHA256 = '2d3be39d2b310abac058e27336ac816c234043a0a1dd7b2c52d84994907dd31b'
|
||||
S4_HISTORICAL_WRAPPER = HERE / 's4/historical/run_s4_native_r28.py.reference'
|
||||
|
||||
|
||||
def verify_s4_wrapper(receipt_sha256, *, historical):
|
||||
if historical:
|
||||
# befa0ef1f634e734ee156347e8fd02e82eddea49:s4/run_s4_native.py
|
||||
# Never read the mutable current wrapper in this branch.
|
||||
expected = digest(S4_HISTORICAL_WRAPPER.read_bytes())
|
||||
require(expected == S4_HISTORICAL_WRAPPER_SHA256, 'S4 tampered historical wrapper pin')
|
||||
require(receipt_sha256 == expected, 'S4 historical receipt wrapper pin')
|
||||
else:
|
||||
require(receipt_sha256 != S4_HISTORICAL_WRAPPER_SHA256, 'S4 historical pin in fresh receipt')
|
||||
require(receipt_sha256 == digest((HERE / 's4/run_s4_native.py').read_bytes()),
|
||||
'S4 current receipt wrapper pin')
|
||||
|
||||
|
||||
class S4Series(Series):
|
||||
"""Fresh S4: own-B materials and exact installed engine; profiles are provenance."""
|
||||
def __init__(self, build):
|
||||
@@ -1016,8 +1033,8 @@ class S4Series(Series):
|
||||
require(all(pin[k] == product[name][k] for k in ('bytes', 'sha256')), 'S4 product pin')
|
||||
self.resolver.read(product[name]['path'], product[name])
|
||||
qa = HERE / 's4/p04_s4_power_probe.gd'
|
||||
require(inputs['QA']['sha256'] == digest(qa.read_bytes()) and
|
||||
inputs['wrapper_sha256'] == digest((HERE / 's4/run_s4_native.py').read_bytes()), 'S4 exact QA/wrapper version')
|
||||
require(inputs['QA']['sha256'] == digest(qa.read_bytes()), 'S4 exact QA version')
|
||||
verify_s4_wrapper(inputs['wrapper_sha256'], historical=True)
|
||||
selected = {k: v['sha256'] for k, v in source.items()}
|
||||
require(inputs['QA_overrides'] == ['tests/s3/test_runtime_staff_assignment.gd'], 'S4 sole QA override')
|
||||
selected[inputs['QA_overrides'][0]] = digest(qa.read_bytes())
|
||||
@@ -1264,6 +1281,8 @@ class FreshSeries(Series):
|
||||
self.inputs = loads(self.read('runner-input.json', binding['runner_input']))
|
||||
self.execution = loads(self.read('runner-ended.json', binding['runner_ended']))
|
||||
require(self.inputs['mode'] == 'fresh-q' and not self.inputs['historical_r17'], 'fresh input only')
|
||||
if name == 's4':
|
||||
verify_s4_wrapper(self.inputs['wrapper_sha256'], historical=False)
|
||||
provenance = self.inputs['provenance']
|
||||
require(all(provenance[k] == bindings[k] for k in ('M', 'S', 'Q_tree')), 'same fresh Q across all runs')
|
||||
self.source = loads(self.read('source_before.json'))
|
||||
@@ -1410,7 +1429,15 @@ def verify_fresh_s5(build):
|
||||
power = adapter.power.derive(*arguments)
|
||||
order = adapter.derive(*arguments)
|
||||
conditions = ['power_stop', 'dependency_stop', 'recovery_completion', 'destruction_stop', 'exit_release',
|
||||
'midnight_settlement', 'midnight_replay', 'save_restore']
|
||||
'midnight_settlement', 'midnight_replay', 'save_restore', 'shift_completion',
|
||||
'paused_midnight', 'same_minute_replay']
|
||||
require(order['cases']['S5D_DESTRUCTION_RAID']['G1'] is True
|
||||
and order['cases']['S5D_IN_FLIGHT']['G2'] is True
|
||||
and order['cases']['S5D_DESTRUCTION_RAID']['idle_objective_breach'] is True,
|
||||
'fresh destruction requires both guards and exact-N idle breach')
|
||||
for case, key in [('S5G_SHIFT_1080', 'shift_completion'), ('S5H_PAUSED_MIDNIGHT', 'paused_midnight'),
|
||||
('S5E_MIDNIGHT', 'same_minute_replay')]:
|
||||
require(type(order['cases'][case][key]) is dict, 'fresh typed adapter derivation: ' + key)
|
||||
return s.result(conditions, {'power': power, 'order': order})
|
||||
|
||||
|
||||
|
||||
+405
@@ -0,0 +1,405 @@
|
||||
#!/usr/bin/env python3
|
||||
"""S4-only native entry. --check-only never loads ownership helpers or starts Godot."""
|
||||
from pathlib import Path
|
||||
import argparse
|
||||
import copy
|
||||
import hashlib
|
||||
import importlib.util
|
||||
import json
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
import stat
|
||||
import sys
|
||||
sys.dont_write_bytecode = True
|
||||
|
||||
HERE = Path(__file__).resolve().parent
|
||||
BUILD = Path("/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build")
|
||||
PRODUCT = BUILD / "audit-support/p04-r17-full-inputs-r01/product"
|
||||
CACHE_RUN = BUILD / "p04-final-product-full-r01"
|
||||
TEST = "tests/s3/test_runtime_staff_assignment.gd"
|
||||
QA = HERE / "p04_s4_power_probe.gd"
|
||||
ENGINE = Path("/Applications/Godot.app/Contents/MacOS/Godot")
|
||||
ENGINE_SHA256 = "c7cccbf8fb143e34e02fd6521e09be2c2b974f0d5db080b19071c9c570718ccf"
|
||||
MANIFEST = BUILD / "audit-support/p04-r17-full-inputs-r01/MANIFEST.json"
|
||||
MANIFEST_SHA = "a15f29fa12537f6d8aaf7cabea390922a9f16e3eb9c10981e5742aafc8c4c8a8"
|
||||
CONTRACTS = BUILD / "audit-support/p04-r17-full-inputs-r01/fixed/6ce6b28c5985e8a4f13b78bfeb1f1e09f6216d874fb01e0656ec1633bfa01cd7/completion_marker_contracts.json"
|
||||
CASES = ["S4"]
|
||||
LABELS = {"S4": ["boundary", "held", "recovered"]}
|
||||
SLOTS = ["S4-" + label for label in sorted(LABELS["S4"])]
|
||||
MATERIALS = [MANIFEST, BUILD / "audit-support/p04-review-repair22-r01/ACTUAL_CURRENT_PUBLIC_POWER_FUNCTIONS.json"]
|
||||
|
||||
def template_guard(root):
|
||||
if root != PRODUCT.resolve() or not HERE.is_relative_to(BUILD.resolve()):
|
||||
raise ValueError("Root must stage this exact QA/wrapper/plan inside own B")
|
||||
if pin(MANIFEST)["sha256"] != MANIFEST_SHA:
|
||||
raise ValueError("immutable full R17 relocation manifest")
|
||||
manifest = json.loads(MANIFEST.read_text())
|
||||
for name, source in manifest["product_source"].items():
|
||||
# Old absolute paths are lookup keys only. Never open them.
|
||||
row = manifest["original_to_relocated"][source["path"]]
|
||||
actual = pin(root / name)
|
||||
if Path(row["relocated"]).resolve() != root / name or any(
|
||||
actual[k] != source[k] or actual[k] != row[k] for k in ("bytes", "sha256")):
|
||||
raise ValueError("relocated product differs: " + name)
|
||||
probe = QA.read_text()
|
||||
import re
|
||||
if ":=" in probe or re.search(r"\bvar\s+\w+\s*=", probe) or re.search(r"\bfor\s+\w+\s+in\b", probe):
|
||||
raise ValueError("explicit typed declarations/loops required")
|
||||
if re.search(r"\.(?:patience_remaining|elapsed_minutes|power_available|capacity|hold_until)\s*=(?!=)", probe):
|
||||
raise ValueError("forbidden direct state mutation")
|
||||
for forbidden in ["evaluate_now(", "configure_operations(", "._update_shift_states(", ".record_duty_minute("]:
|
||||
if forbidden in probe:
|
||||
raise ValueError("forbidden bypass: " + forbidden)
|
||||
# Constants and public bodies are read from the actual selected source, not a memo.
|
||||
mana = (root / "scripts/mana/mana_network_service.gd").read_text()
|
||||
for key in ("EVALUATION_INTERVAL_MINUTES", "MINIMUM_OFF_HOLD_MINUTES"):
|
||||
if not re.search(r"const " + key + r" := 10\b", mana):
|
||||
raise ValueError("source timing changed: " + key)
|
||||
|
||||
|
||||
def module(name, path):
|
||||
spec = importlib.util.spec_from_file_location(name, path)
|
||||
value = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(value)
|
||||
return value
|
||||
|
||||
def pin(path):
|
||||
path = Path(path)
|
||||
if path.is_symlink() or not path.is_file():
|
||||
raise ValueError("missing exact input: " + str(path))
|
||||
data = path.read_bytes()
|
||||
return dict(path=str(path), bytes=len(data), sha256=hashlib.sha256(data).hexdigest())
|
||||
|
||||
def engine_pin(path, expected=None):
|
||||
path = Path(path)
|
||||
if path != ENGINE or any(p.is_symlink() for p in (path, *path.parents)):
|
||||
raise ValueError("exact installed engine required; no symlink or relocated input")
|
||||
if path.resolve(strict=True) != ENGINE:
|
||||
raise ValueError("installed engine resolved path changed")
|
||||
before = path.stat()
|
||||
if not stat.S_ISREG(before.st_mode):
|
||||
raise ValueError("installed engine must be regular")
|
||||
digest = hashlib.sha256(path.read_bytes()).hexdigest()
|
||||
after = path.stat()
|
||||
fields = ("st_dev", "st_ino", "st_size", "st_mtime_ns", "st_ctime_ns", "st_mode")
|
||||
if any(getattr(before, k) != getattr(after, k) for k in fields):
|
||||
raise ValueError("engine changed while hashing")
|
||||
if any(p.is_symlink() for p in (path, *path.parents)) or path.resolve(strict=True) != ENGINE:
|
||||
raise ValueError("engine path changed while hashing")
|
||||
value = dict(path=str(path), resolved_path=str(path.resolve(strict=True)),
|
||||
bytes=after.st_size, mtime_ns=after.st_mtime_ns, mode=after.st_mode,
|
||||
device=after.st_dev, inode=after.st_ino, ctime_ns=after.st_ctime_ns, sha256=digest)
|
||||
if digest != ENGINE_SHA256:
|
||||
raise ValueError("engine differs from installed engine constant")
|
||||
if expected is not None and value != expected:
|
||||
raise ValueError("engine identity changed")
|
||||
return value
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--project-root", type=Path, default=PRODUCT)
|
||||
parser.add_argument("--output", type=Path, default=BUILD / "p04-s4-native-r28")
|
||||
parser.add_argument("--plan", type=Path, default=BUILD / "p04-s4-plan-r28.json")
|
||||
parser.add_argument("--cache-run", type=Path, default=None,
|
||||
help="optional passed registered cache; default is fresh, without cache access")
|
||||
parser.add_argument("--godot", type=Path, default=ENGINE)
|
||||
parser.add_argument("--check-only", action="store_true")
|
||||
args = parser.parse_args()
|
||||
engine_descriptor = engine_pin(args.godot)
|
||||
if args.cache_run is not None and args.cache_run.resolve() != CACHE_RUN.resolve():
|
||||
raise ValueError("only registered own-B full-run cache")
|
||||
root = args.project_root.resolve()
|
||||
out = args.output.resolve()
|
||||
if not out.is_relative_to(BUILD.resolve()) or not args.plan.resolve().is_relative_to(BUILD.resolve()):
|
||||
raise ValueError("plan/output must stay in task build")
|
||||
if out.exists() or out.is_symlink():
|
||||
raise ValueError("fresh output required")
|
||||
if args.check_only and (args.plan.exists() or args.plan.is_symlink()):
|
||||
raise ValueError("fresh plan required")
|
||||
r = module("s4_standard_runner", root / "tools/run_all_tests.py")
|
||||
# Preserve the reviewed source_refs -> exactly one QA override order.
|
||||
source_before = r.source_refs(root)
|
||||
refs = dict(source_before)
|
||||
refs[TEST] = pin(QA)
|
||||
template_guard(root)
|
||||
expected = {n: dict(bytes=p["bytes"], sha256=p["sha256"]) for n, p in refs.items()}
|
||||
fixed = [pin(p) for p in MATERIALS + [
|
||||
QA, Path(__file__), HERE / "S4_ROOT_RUN.md",
|
||||
root / "tests/transport/test_runtime_transport.gd",
|
||||
root / "tests/staff/test_rescue_elevator.gd",
|
||||
CONTRACTS,
|
||||
]]
|
||||
selected = dict(root_before=source_before, map={n: p["sha256"] for n, p in refs.items()}, timeout=1200)
|
||||
cache_note = None
|
||||
cache_receipts = []
|
||||
if args.cache_run is not None:
|
||||
# Reject failed caches before reading their inputs or cache contents.
|
||||
r.require(r.read(args.cache_run / "runner-ended.json")["passed"] is True,
|
||||
"failed cache is ineligible")
|
||||
for leaf in (["runner-ended.json", "runner-input.json"] if args.cache_run is not None else []):
|
||||
path = args.cache_run / leaf
|
||||
try:
|
||||
cache_receipts.append(pin(path))
|
||||
except OSError as caught:
|
||||
cache_note = dict(path=str(path), error=type(caught).__name__ + ": " + str(caught),
|
||||
required_before_native=True)
|
||||
break
|
||||
plan = dict(protocol="p04-s4-preparation-v1", project_root=str(root), output=str(out), engine_path=str(args.godot.resolve()),
|
||||
source_before=source_before, selected_source_map=selected["map"],
|
||||
QA_overrides=[TEST], fixed_input_pins=fixed,
|
||||
cache_run=str(args.cache_run) if args.cache_run is not None else None,
|
||||
import_mode="cache" if args.cache_run is not None else "fresh",
|
||||
engine_sha256=ENGINE_SHA256, engine=engine_descriptor,
|
||||
cache_receipts=cache_receipts, cache_access=cache_note,
|
||||
phases=["import", "parse", "writer", "reader"],
|
||||
native_engine_launches=0, whole_goal_accepted=False, unit_accepted=False)
|
||||
# Check-only only reads source/materials and writes the plan in task build.
|
||||
# Reads engine identity; never launches Godot or inspects players/processes.
|
||||
if args.check_only:
|
||||
args.plan.parent.mkdir(parents=True, exist_ok=True)
|
||||
r.write(args.plan, plan)
|
||||
print(json.dumps(dict(check_only=True, engines=0, source_files=len(source_before),
|
||||
QA_overrides=[TEST], fixed_pins=len(fixed), plan=str(args.plan),
|
||||
plan_sha256=r.sha(args.plan), cache_access=cache_note), ensure_ascii=False))
|
||||
return 0
|
||||
r.require(root == PRODUCT.resolve() and len(source_before) == 1338, "Root native requires product 1338; worker plan is not native evidence")
|
||||
r.require(args.plan.is_file() and r.read(args.plan) == plan, "run exact check-only plan first")
|
||||
engine_observations = []
|
||||
engine_identity = dict(before=engine_descriptor, during=[], after=None)
|
||||
def repin(label):
|
||||
try:
|
||||
value = engine_pin(args.godot, engine_descriptor)
|
||||
engine_observations.append(dict(stage=label, descriptor=value))
|
||||
if label == "after-cleanup":
|
||||
engine_identity["after"] = value
|
||||
else:
|
||||
engine_identity["during"].append(value)
|
||||
except BaseException as caught:
|
||||
engine_observations.append(dict(stage=label, error=str(caught)))
|
||||
raise
|
||||
def fixed_guard():
|
||||
repin("cleanup-fixed-guard")
|
||||
template_guard(root)
|
||||
for value in fixed + cache_receipts:
|
||||
r.require(pin(value["path"]) == value, "fixed input changed: " + value["path"])
|
||||
fixed_guard()
|
||||
old = args.cache_run
|
||||
if old is not None:
|
||||
# Native cache admission remains Root-only and fails closed.
|
||||
r.require(cache_note is None, "Root must read exact cache receipts: " + str(cache_note))
|
||||
r.require(r.read(old / "runner-ended.json")["passed"], "ended cache run must have passed")
|
||||
cache_input = r.read(old / "runner-input.json")
|
||||
r.require(cache_input["engine_sha256"] == ENGINE_SHA256, "cache engine identity")
|
||||
old_map = cache_input["selected_source_map"]
|
||||
current_map = {n: p["sha256"] for n, p in source_before.items()}
|
||||
r.require({k: v for k, v in old_map.items() if k != "tools/check_p04_order_evidence.py"} == current_map and len(old_map) == 1339, "immutable full cache: all 1338 product inputs equal; checker is not parsed/executed by product suites")
|
||||
protected = r.default_player(root)
|
||||
outer = module("s4_owned_outer", r.SUPPORT / "owned_outer.py")
|
||||
r.require(not outer.native.helper["live_engines"](), "another Godot owns CPU")
|
||||
engine = ENGINE
|
||||
repin("native-admission")
|
||||
r.require(shutil.disk_usage(out.parent).free >= 1024**3 + engine.stat().st_size + 136*1024**2,
|
||||
"reviewed native disk admission")
|
||||
r.require(not out.exists(), "fresh output required; preserve previous attempts")
|
||||
out.mkdir()
|
||||
stage = out / "stage"
|
||||
stage.mkdir()
|
||||
(out / "starters").mkdir()
|
||||
(out / "bootstrap").mkdir()
|
||||
phases = []
|
||||
previous = {}
|
||||
error = None
|
||||
guards = []
|
||||
cleanup = []
|
||||
cleanup_errors = []
|
||||
cache_before = None
|
||||
formal_before = None
|
||||
formal_after = None
|
||||
original_phase = outer.run_phase
|
||||
def run_phase(argv, folder, timeout, env, **kwargs):
|
||||
env = dict(env)
|
||||
if folder.name in ["writer", "reader"]:
|
||||
env.update(THE_TREE_S4_EVIDENCE=str(out / "raw"), THE_TREE_S4_MODE=folder.name)
|
||||
return original_phase(argv, folder, timeout, env, **kwargs)
|
||||
outer.run_phase = run_phase
|
||||
try:
|
||||
r.write(out / "runner-started.json", dict(started=r.now(), owner_runner_pid=os.getpid(),
|
||||
plan=pin(args.plan), engines_launched=0))
|
||||
r.write(out / "source_before.json", source_before)
|
||||
r.write(out / "selected-source-map.json", refs)
|
||||
# Private source stage first, then literal reviewed bootstrap.
|
||||
for name, value in refs.items():
|
||||
target = stage / name
|
||||
target.parent.mkdir(parents=True, exist_ok=True)
|
||||
r.copy_source(Path(value["path"]), target)
|
||||
r.require(r.inventory(stage, stage=True) == expected, "whole private source")
|
||||
for name, value in r.read(r.SUPPORT / "bootstrap-scripts.json").items():
|
||||
data = value["text"].encode()
|
||||
r.require(hashlib.sha256(data).hexdigest() == value["sha256"], "bootstrap pin")
|
||||
(out / "bootstrap" / name).write_bytes(data)
|
||||
if old is not None:
|
||||
cache = old / "stage/.godot"
|
||||
cache_before = r.inventory(cache)
|
||||
r.require(bool(cache_before), "nonempty ended cache")
|
||||
for name in cache_before:
|
||||
src = cache / name
|
||||
dst = stage / ".godot" / name
|
||||
dst.parent.mkdir(parents=True, exist_ok=True)
|
||||
subprocess.run(["/bin/cp", "-c", str(src), str(dst)], check=True)
|
||||
r.require((src.stat().st_dev, src.stat().st_ino) != (dst.stat().st_dev, dst.stat().st_ino),
|
||||
"cache clone is a separate inode")
|
||||
r.require(r.inventory(stage / ".godot") == cache_before, "whole cache clone hashes")
|
||||
r.write(out / "cache-reuse.json", dict(ended_run=str(old), receipts=cache_receipts,
|
||||
whole_cache=cache_before, independent_inode=True,
|
||||
ordinary_import_required=True, ordinary_parse_required=True))
|
||||
paths = ["res://" + n for n in sorted(refs) if n.endswith(".gd")]
|
||||
r.require(len(paths) == 316, "complete 316-script parse roster")
|
||||
r.write(out / "parse-paths.json", paths)
|
||||
markers = module("s4_markers", root / "tools/strict_test_markers.py")
|
||||
contracts = markers.load_contracts(CONTRACTS)
|
||||
contracts[TEST] = dict(test=TEST, template="S4 power: <checks> checks, <failures> failures", required=True)
|
||||
policy = r.read(r.SUPPORT / "suite-policy.json")
|
||||
r.require(TEST not in policy["suite_policies"], "no normal suite watchdog/policy override")
|
||||
r.write(out / "contracts.json", contracts)
|
||||
r.write(out / "runner-input.json", dict(plan, owner_runner_pid=os.getpid(),
|
||||
wrapper_sha256=r.sha(__file__), QA=pin(QA), engine=engine_descriptor,
|
||||
engine_identity_before=engine_descriptor, engine_identity_initial=copy.deepcopy(engine_identity),
|
||||
runner_sha256=r.sha(root / "tools/run_all_tests.py"),
|
||||
default_player_before=protected, fixed_input_pins=fixed,
|
||||
functional_watchdog_seconds=1200, source_adoption=False))
|
||||
diagnostics = module("s4_diagnostics", r.SUPPORT / "diagnostic_gate.py")
|
||||
owners = module("s4_owners", r.SUPPORT / "ordinary_proof_gate.py")
|
||||
audio = module("s4_audio", r.SUPPORT / "audio_evidence_gate.py")
|
||||
public = (stage / "project.godot").read_bytes()
|
||||
for phase, test in [("import", None), ("parse", None), ("writer", TEST), ("reader", TEST)]:
|
||||
if phase == "reader":
|
||||
writer = r.read(out / "raw/writer.json")
|
||||
formal_before = {n: r.inventory(Path(p)) for n, p in writer["slots"].items()}
|
||||
r.require(sorted(formal_before) == SLOTS, "exact three formal points for isolated power case")
|
||||
if phase == "import" and old is None:
|
||||
r.require(not (stage / ".godot").exists() and not (stage / ".godot").is_symlink(),
|
||||
"fresh private .godot absent at actual import")
|
||||
repin("before-" + phase)
|
||||
r.write(out / ("engine-identity-before-" + phase + ".json"),
|
||||
dict(engine_observations[-1], observation_index=len(engine_observations)-1))
|
||||
row = r.execute_phase(str(engine), stage, out, phase, test, selected, expected,
|
||||
previous, policy, contracts, paths, public, protected, root,
|
||||
outer, markers, diagnostics, owners, audio)
|
||||
phases.append(row)
|
||||
# execute_phase writer/reader share out/<test>.log via write_text.
|
||||
# Keep binary per-phase copies under these existing unique names.
|
||||
# The shared runner log is not write-once; see S4_ROOT_RUN.md.
|
||||
if test and row.get("log"):
|
||||
(out / (phase + "-combined-raw.log")).write_bytes((out / row["log"]).read_bytes())
|
||||
row["strict_runner_log_path"] = row["log"]
|
||||
row["log"] = phase + "-combined-raw.log"
|
||||
r.write(out / (phase + "-actual-phase.json"), row)
|
||||
print(json.dumps(dict(phase=phase, passed=row["passed"], error=row.get("validation_error"))), flush=True)
|
||||
r.require(row["passed"], "first strict phase failure: " + phase)
|
||||
if phase in ["writer", "reader"]:
|
||||
receipt = r.read(out / ("raw/" + phase + ".json"))
|
||||
r.require(receipt["checks"] > 0 and receipt["failures"] == 0,
|
||||
"S4 actual outcome receipt")
|
||||
r.require(sorted(receipt["branches"]) == CASES,
|
||||
"exact one independent Writer/Reader case")
|
||||
r.require(sorted(receipt["slots"]) == SLOTS, "all formal point slots")
|
||||
r.require(receipt["pid"] == row["actual_pid"], "actual native PID/receipt")
|
||||
repin("after-collection")
|
||||
writer = r.read(out / "raw/writer.json")
|
||||
reader = r.read(out / "raw/reader.json")
|
||||
r.require(writer["pid"] != reader["pid"] and writer["profile"] != reader["profile"], "distinct formal processes")
|
||||
formal_after = {n: r.inventory(Path(p)) for n, p in writer["slots"].items()}
|
||||
r.require(formal_before == formal_after, "Reader leaves Writer packages unchanged")
|
||||
except BaseException as caught:
|
||||
error = type(caught).__name__ + ": " + str(caught)
|
||||
finally:
|
||||
try:
|
||||
cleanup, cleanup_errors = outer.finish_captured(outer.OWNED)
|
||||
except BaseException as caught:
|
||||
cleanup_errors.append(str(caught))
|
||||
try:
|
||||
r.write(out / "outer-owned-finally.json", dict(cleanup=cleanup, errors=cleanup_errors))
|
||||
except BaseException as caught:
|
||||
guards.append("finally receipt: " + type(caught).__name__ + ": " + str(caught))
|
||||
# Explicit re-pin after cleanup is independent of other fixed-input guards.
|
||||
try:
|
||||
repin("after-cleanup")
|
||||
except BaseException as caught:
|
||||
guards.append(type(caught).__name__ + ": " + str(caught))
|
||||
# Fixed guard always follows ownership cleanup, even if setup or an engine failed.
|
||||
try:
|
||||
fixed_guard()
|
||||
after = r.source_refs(root)
|
||||
r.write(out / "source_after.json", after)
|
||||
r.require(after == source_before, "whole product source unchanged")
|
||||
r.require(r.default_player(root) == protected, "default player unchanged")
|
||||
if (stage / "project.godot").exists():
|
||||
r.require(r.inventory(stage, stage=True) == dict(expected, **previous), "whole private source unchanged")
|
||||
if cache_before is not None:
|
||||
r.require(r.inventory(old / "stage/.godot") == cache_before, "original cache unchanged")
|
||||
if formal_before is not None:
|
||||
writer = r.read(out / "raw/writer.json")
|
||||
formal_after = {n: r.inventory(Path(p)) for n, p in writer["slots"].items()}
|
||||
r.require(formal_before == formal_after, "Writer formal packages unchanged after Reader, including failure")
|
||||
except BaseException as caught:
|
||||
guards.append(type(caught).__name__ + ": " + str(caught))
|
||||
pids = [p.pid for p in outer.OWNED]
|
||||
passed = (error is None and not guards and not cleanup_errors and len(phases) == 4
|
||||
and all(p["passed"] for p in phases) and len(pids) == len(set(pids)) == 4
|
||||
and all(p["engine_ended"] for p in cleanup))
|
||||
execution = dict(passed=passed, error=error, guard_errors=guards, phases=phases,
|
||||
actual_captured_PIDs=pids, cleanup=cleanup, cleanup_errors=cleanup_errors,
|
||||
formal_before=formal_before, formal_after=formal_after,
|
||||
whole_goal_accepted=False, unit_accepted=False)
|
||||
# IO1 has already copied all four members into a separate Reader profile.
|
||||
# Mirror those exact complete directories to own B for read-only R verification.
|
||||
# Original profile paths are provenance after this step, never verifier inputs.
|
||||
try:
|
||||
if passed:
|
||||
relocated = {}
|
||||
for role in ("writer", "reader"):
|
||||
receipt = r.read(out / ("raw/" + role + ".json"))
|
||||
relocated[role] = {}
|
||||
for slot, original in receipt["slots"].items():
|
||||
target = out / "formal" / role / slot
|
||||
target.mkdir(parents=True)
|
||||
members = r.inventory(Path(original))
|
||||
r.require(set(members) == {"journal.log", "manifest.json", "thumbnail.png", "world.bin"}, "all formal members")
|
||||
for member in members:
|
||||
shutil.copyfile(Path(original) / member, target / member)
|
||||
r.require(r.inventory(target) == members == formal_before[slot], "whole formal mirror")
|
||||
relocated[role][slot] = dict(provenance=original, relative=str(target.relative_to(out)), members=members)
|
||||
r.write(out / "formal-relocation.json", relocated)
|
||||
r.write(out / "raw-inventory.json", r.inventory(out / "raw"))
|
||||
r.write(out / "PID-set.json", dict(owner_runner_pid=os.getpid(), engine_PIDs=pids))
|
||||
except BaseException as caught:
|
||||
guards.append("output collection: " + type(caught).__name__ + ": " + str(caught))
|
||||
passed = False
|
||||
execution["passed"] = False
|
||||
try:
|
||||
repin("after-output-collection")
|
||||
except BaseException as caught:
|
||||
guards.append(str(caught))
|
||||
passed = False
|
||||
execution["passed"] = False
|
||||
try:
|
||||
r.write(out / "engine-identity.json",
|
||||
dict(observations=engine_observations, identity=engine_identity))
|
||||
except BaseException as caught:
|
||||
guards.append("engine identity receipt: " + type(caught).__name__ + ": " + str(caught))
|
||||
passed = False
|
||||
execution["passed"] = False
|
||||
execution["engine_observations"] = engine_observations
|
||||
execution["engine_identity"] = engine_identity
|
||||
r.write(out / "execution.json", execution)
|
||||
r.write(out / "runner-ended.json", dict(execution, ended=r.now()))
|
||||
print(json.dumps(dict(passed=passed, error=error, guard_errors=guards, output=str(out))))
|
||||
return 0 if passed else 1
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
raise SystemExit(main())
|
||||
except Exception as caught:
|
||||
print(type(caught).__name__ + ": " + str(caught), file=sys.stderr)
|
||||
raise SystemExit(2)
|
||||
@@ -1,4 +1,39 @@
|
||||
# REPAIR40 implementation supersession; native evidence remains pending
|
||||
# REPAIR43 — native evidence and formal acceptance pending
|
||||
|
||||
The R42/R43 implementation batch now includes the public-restored G1/G2
|
||||
journal shadows, independent typed adapter oracle, exact-N idle OBJECTIVE
|
||||
breach, S5D_IN_FLIGHT event destruction, S5G_SHIFT_1080, S5H_PAUSED_MIDNIGHT,
|
||||
and S5E public same-minute advance_to after formal restore. See
|
||||
`../REPAIR41_STATUS.md` and `../REPAIR43_SOURCE_FACTS.json` for source bodies,
|
||||
lines, hashes and the spec EOF protocol. The closed-field/file-freeze blockers
|
||||
are superseded. The spec passes its existing checker protocol without edits.
|
||||
|
||||
Implementation is not native proof. Root must run the fresh nine-case S5
|
||||
Writer/Reader and adapters alongside fresh S1–S4 in the prescribed single
|
||||
batch. The new shift/paused/replay keys are emitted only after fresh typed raw
|
||||
derivation; paused_midnight is then removed from the adapter pending list.
|
||||
patience_release remains pending unless fresh S3 independently supplies it.
|
||||
Future-raw positives and mutations are Root-only. No historical run supplies
|
||||
these new keys. All 15+EV requirements and thresholds remain mandatory.
|
||||
|
||||
Pure results are in `../REPAIR43_PURE_RESULTS.json`; static results are in
|
||||
`../REPAIR41_STATIC_CHECKS.json`. r35/r36/R40 native remain FAILED, Q37 is only
|
||||
its own-version local PASS, and P04 credit remains 0. Registered validation
|
||||
precedes formal independent whole-unit review. No native/full run was performed
|
||||
by this worker; no completion claim or new counted unit is made.
|
||||
|
||||
## Historical REPAIR41 partial repair (superseded implementation status)
|
||||
|
||||
See `../REPAIR41_STATUS.md`: M serializes an additional `command_queue.accepted`
|
||||
metadata row for both guard failures, outside the explicitly enumerated G1/G2
|
||||
queue deltas. Its inclusion needs clarification before claiming exact equality.
|
||||
Only the mandatory-condition diagnostic and historical/fresh S4 wrapper
|
||||
separation are implemented and supersede their earlier repair-pending entries.
|
||||
S5D re-scope/G1/G2/breach, S5G/S5H, same-minute replay, adapter derivations and
|
||||
fresh-condition wiring remain pending. R40 native S5D remains FAILED; its prior
|
||||
source implementation below is not an accepted fixture. No P04 credit is earned.
|
||||
|
||||
## Historical REPAIR40 implementation supersession
|
||||
|
||||
The implementation-pending statements below are superseded only for S5A/S5B
|
||||
power, S5C command destruction, S5D automatic raid destruction, S5E paid midnight
|
||||
|
||||
@@ -1,3 +1,76 @@
|
||||
# REPAIR43 submission — Root verification required
|
||||
|
||||
The R41 closed journal-field restriction and R42 raw-only spec stop are
|
||||
superseded. The spec passes the existing one-final-LF checker condition.
|
||||
`../REPAIR41_STATUS.md` describes the complete R42/R43 implementation and
|
||||
`../REPAIR43_SOURCE_FACTS.json` contains full current-M source bodies/hashes.
|
||||
This is a QA submission, not admission, native PASS or formal completion.
|
||||
|
||||
The case table now includes S5A/B/C, S5D_DESTRUCTION_RAID (idle OBJECTIVE plus
|
||||
G1), S5D_IN_FLIGHT (event path plus G2), S5E/F, S5G_SHIFT_1080 and
|
||||
S5H_PAUSED_MIDNIGHT. The wrapper already derives CASES/LABELS/SLOTS from this
|
||||
table. Preserve the table-driven full roster. G1/G2 use public paused immediate
|
||||
submission with detached public-restored shadows; business state is identical
|
||||
and the whole typed journal is independently recomputed by the adapter.
|
||||
|
||||
Stage the entire QA hierarchy, including new `s5_guard_oracle.py`, with the
|
||||
selected exact Q. Worker static/pure outputs do not establish Q applicability.
|
||||
Run `s5_order_adapter_controls.py --pure-only` among affected pure controls.
|
||||
After fresh Reader raw exists, run its ordinary explicit
|
||||
`--raw-root/--writer-sha256/--reader-sha256/--scratch` mode as well; this executes
|
||||
the actual-data derivations and all typed order/guard mutations. Preserve the
|
||||
failed R40 native result and never reuse its missing Reader as a positive.
|
||||
|
||||
Authoritative corrected Root order:
|
||||
|
||||
1. Affected pure controls.
|
||||
2. Check-only S1–S5 plans.
|
||||
3. Capacity check under existing permissions, with no unapproved deletion.
|
||||
4. One heavy lease for fresh native S1–S5 including S5D/G/H, PID/cleanup checks
|
||||
and complete restore manifests.
|
||||
5. Reader and adapter on actual raw, including the fresh-raw mutation controls.
|
||||
6. Fresh collect.
|
||||
7. Full suite once, after source and controls are ready.
|
||||
8. Index.
|
||||
9. --verify-only.
|
||||
10. Registered validation.
|
||||
11. Formal independent whole-unit Opus review.
|
||||
12. Prepare / exact-C standing authorization / integration / final / DB join /
|
||||
ledger / push under the existing Root workflow.
|
||||
|
||||
No heavy tests while the worker is active. A second batch is only for defects
|
||||
revealed by observed native raw. The obsolete 500000-byte review-material cap
|
||||
does not apply; do not omit source/evidence or compress merely to meet it.
|
||||
|
||||
## Historical REPAIR41 direction (superseded by the order above)
|
||||
|
||||
The exact G1/G2 oracle has a source-contract conflict documented in
|
||||
`../REPAIR41_STATUS.md`. M also serializes one new `command_queue.accepted` row.
|
||||
Only the mandatory-condition diagnostic and historical/fresh S4 wrapper pin
|
||||
separation are repaired. S5D/G/H and adapter/fresh wiring remain unimplemented.
|
||||
Do not treat the partial pure-check results as worker success or native evidence.
|
||||
|
||||
After a complete submission, the recorded Root order remains:
|
||||
1. Affected pure controls.
|
||||
2. Check-only S1–S5 plan.
|
||||
3. Capacity check before the single heavy lease (about 3 GB free; OS swap is
|
||||
separate from evidence); only verified compression or approved cold-drive
|
||||
offload if needed, with no unapproved deletion.
|
||||
4. One heavy lease for fresh native S1–S5 including S5D/G/H, PID/cleanup checks,
|
||||
complete Git restore manifest and reuse of the ended Q.
|
||||
5. Reader and S5 order adapter on actual raw.
|
||||
6. Fresh collect.
|
||||
7. Full suite 184/329 once on final Q.
|
||||
8. Index.
|
||||
9. --verify-only.
|
||||
10. Independent Opus review of the whole unit.
|
||||
11. Registered validation.
|
||||
12. Normal prepare/final, exact-C approval, integration, Root DB join, ledger
|
||||
and main push.
|
||||
|
||||
This list preserves the latest recorded order over the earlier condensed list
|
||||
below. A second batch is only for defects revealed by observed native raw.
|
||||
|
||||
# REPAIR40 A–F source batch — Root verification required
|
||||
|
||||
This section supersedes earlier implementation-pending directions below only
|
||||
|
||||
+147
-9
@@ -4,11 +4,14 @@ const CASE_TABLE: Dictionary = {
|
||||
"S5A_PURE": {"expected_reserved_ids": 0, "labels": ["boundary", "held", "recovered", "duplicate_guard"], "prepare": "_prepare", "advance": "_advance", "stop": "_assert_stopped", "assert": "_assert_outcome"},
|
||||
"S5B_DEPENDENCY": {"expected_reserved_ids": 1, "labels": ["boundary", "held", "recovered", "duplicate_guard"], "prepare": "_prepare", "advance": "_advance", "stop": "_assert_stopped", "assert": "_assert_outcome"},
|
||||
"S5C_DESTRUCTION_COMMAND": {"expected_reserved_ids": 1, "labels": ["boundary", "held"], "prepare": "_prepare_order", "advance": "_advance_order", "stop": "_assert_order_stop", "assert": "_assert_order"},
|
||||
"S5D_DESTRUCTION_RAID": {"expected_reserved_ids": 1, "labels": ["boundary", "held"], "prepare": "_prepare_order", "advance": "_advance_order", "stop": "_assert_order_stop", "assert": "_assert_order"},
|
||||
"S5D_DESTRUCTION_RAID": {"expected_reserved_ids": 0, "labels": ["boundary", "held"], "prepare": "_prepare_idle_breach", "advance": "_advance_order", "stop": "_assert_idle_breach", "assert": "_assert_idle_order"},
|
||||
"S5D_IN_FLIGHT": {"expected_reserved_ids": 1, "labels": ["boundary", "held"], "prepare": "_prepare_order", "advance": "_advance_order", "stop": "_assert_in_flight", "assert": "_assert_in_flight_order"},
|
||||
"S5G_SHIFT_1080": {"expected_reserved_ids": 1, "labels": ["boundary", "held"], "prepare": "_prepare_order", "advance": "_advance_order", "stop": "_assert_order_stop", "assert": "_assert_order"},
|
||||
"S5H_PAUSED_MIDNIGHT": {"expected_reserved_ids": 1, "labels": ["boundary", "held", "recovered"], "prepare": "_prepare_order", "advance": "_advance_paused_midnight", "stop": "_assert_paused_midnight", "assert": "_assert_paused_midnight_order"},
|
||||
"S5E_MIDNIGHT": {"expected_reserved_ids": 1, "labels": ["boundary", "recalled"], "prepare": "_prepare_order", "advance": "_advance_order", "stop": "_assert_order_stop", "assert": "_assert_order"},
|
||||
"S5F_EXIT": {"expected_reserved_ids": 1, "labels": ["boundary", "held"], "prepare": "_prepare_order", "advance": "_advance_order", "stop": "_assert_order_stop", "assert": "_assert_order"}
|
||||
}
|
||||
const SEEDS: Dictionary = {"S5A_PURE": 420550, "S5B_DEPENDENCY": 420551, "S5C_DESTRUCTION_COMMAND": 420552, "S5D_DESTRUCTION_RAID": 420553, "S5E_MIDNIGHT": 424242, "S5F_EXIT": 420555}
|
||||
const SEEDS: Dictionary = {"S5A_PURE": 420550, "S5B_DEPENDENCY": 420551, "S5C_DESTRUCTION_COMMAND": 420552, "S5D_DESTRUCTION_RAID": 420553, "S5D_IN_FLIGHT": 420553, "S5E_MIDNIGHT": 424242, "S5F_EXIT": 420555, "S5G_SHIFT_1080": 420556, "S5H_PAUSED_MIDNIGHT": 424242}
|
||||
const GUEST: StringName = &"p04.s5.guest.a"
|
||||
const REQUEST: StringName = &"p04.s5.request.a"
|
||||
const QUEUED_GUEST: StringName = &"p04.s5.guest.b"
|
||||
@@ -36,6 +39,9 @@ var _points: Dictionary = {}
|
||||
var _branches: Dictionary = {}
|
||||
var _slots: Dictionary = {}
|
||||
var _replay_reference: Dictionary = {}
|
||||
var _guard_references: Dictionary = {}
|
||||
var _expected_failure: Dictionary = {}
|
||||
var _observed_phase: String = ""
|
||||
|
||||
func _run() -> void:
|
||||
_evidence_dir = OS.get_environment("THE_TREE_S5_EVIDENCE")
|
||||
@@ -69,6 +75,9 @@ func _fresh() -> void:
|
||||
_resource_command = {}
|
||||
_recovery = {}
|
||||
_replay_reference = {}
|
||||
_guard_references = {}
|
||||
_expected_failure = {}
|
||||
_observed_phase = ""
|
||||
_commands = []
|
||||
_results = []
|
||||
_receipts = []
|
||||
@@ -78,7 +87,10 @@ func _fresh() -> void:
|
||||
_runtime.configure_save_policy({&"enabled": false, &"daily_checkpoint_enabled": false})
|
||||
_runtime.command_completed.connect(func(result: CommandResult) -> void:
|
||||
_results.append({&"minute": _clock.absolute_minute, &"result": result.to_dictionary()})
|
||||
_expect(result.is_success(), "actual public command completion " + str(result.command_id))
|
||||
if not _expected_failure.is_empty() and result.command_id == _expected_failure["command_id"]:
|
||||
_expect(var_to_bytes(result.to_dictionary()) == var_to_bytes(_expected_failure), "independently bound expected guard failure")
|
||||
else:
|
||||
_expect(result.is_success(), "actual public command completion " + str(result.command_id))
|
||||
)
|
||||
|
||||
func _cmd(kind: StringName, payload: Dictionary, at: int = -1) -> CommandResult:
|
||||
@@ -157,7 +169,8 @@ func _prepare() -> bool:
|
||||
|
||||
func _prepare_order() -> bool:
|
||||
_fresh()
|
||||
var midnight: bool = _case == "S5E_MIDNIGHT"
|
||||
var midnight: bool = _case in ["S5E_MIDNIGHT", "S5H_PAUSED_MIDNIGHT"]
|
||||
if _case == "S5G_SHIFT_1080": _boundary = 1080
|
||||
if midnight:
|
||||
_boundary = 1440
|
||||
var enabled: Dictionary = _runtime.enable_production_operations()
|
||||
@@ -180,6 +193,7 @@ func _prepare_order() -> bool:
|
||||
_cmd(&"register_staff", {&"staff_id": id, &"role_id": &"server", &"options": {&"state": StaffRuntime.State.OFF_DUTY, &"current_cell": Vector3i.ZERO}})
|
||||
_cmd(&"set_staff_work_assignment", {&"staff_id": id, &"template_id": &"NIGHT" if midnight else &"DAY", &"facility_id": _facility_id})
|
||||
var queue_at: int = _boundary - _duration - 1
|
||||
if _case == "S5D_IN_FLIGHT": queue_at += 1
|
||||
_expect(_price > 0 and _duration > 1 and queue_at > _clock.absolute_minute, "natural paid service before boundary")
|
||||
if queue_at <= _clock.absolute_minute or _duration <= 1: return false
|
||||
if _case == "S5D_DESTRUCTION_RAID":
|
||||
@@ -196,17 +210,28 @@ func _prepare_order() -> bool:
|
||||
if active.size() != 1: return false
|
||||
var service: ServiceInstance = active[0]
|
||||
_service_id = service.service_id
|
||||
_expect(service.started_at + _duration == _boundary, "natural N completion")
|
||||
_expect(service.started_at + _duration == _boundary + (1 if _case == "S5D_IN_FLIGHT" else 0), "natural completion from snapshot duration")
|
||||
_price = service.price_snapshot
|
||||
_duration = service.duration_minutes
|
||||
if _case == "S5D_DESTRUCTION_RAID":
|
||||
_clock.advance_minutes(_boundary - 5 - _clock.absolute_minute)
|
||||
_prepare_breach()
|
||||
_clock.advance_minutes(_boundary - 2 - _clock.absolute_minute)
|
||||
_queue(QUEUED_GUEST, QUEUED_REQUEST, _boundary + _duration + 1)
|
||||
if _case == "S5H_PAUSED_MIDNIGHT":
|
||||
_expect(_duration > 11, "pause begins before last pre-midnight MANA evaluation")
|
||||
_clock.advance_minutes(_boundary - 11 - _clock.absolute_minute)
|
||||
_reserve = _state.get_resource(&"mana")
|
||||
_cmd(&"spend_resources", {&"cost": {&"mana": _reserve}})
|
||||
_clock.advance_minutes(_boundary - 1 - _clock.absolute_minute)
|
||||
if _case == "S5F_EXIT": _queue(QUEUED_GUEST, QUEUED_REQUEST, _boundary + _duration + 1)
|
||||
_reserve = _state.get_resource(&"mana")
|
||||
if _case != "S5H_PAUSED_MIDNIGHT": _reserve = _state.get_resource(&"mana")
|
||||
_recovery = {&"staff_ids": staff_ids, &"resume_minute": _boundary}
|
||||
_expect(service.elapsed_minutes == _duration - 1, "duration minus one at N-1")
|
||||
if _case == "S5D_IN_FLIGHT":
|
||||
_guard_failure("G2", &"register_defense_asset", {&"raid_id": &"p04.s5.guard.raid", &"asset_id": _facility_id, &"kind": &"OBJECTIVE", &"max_integrity": 10000}, "A busy Facility cannot become a Defense asset.", {})
|
||||
_cmd(&"register_event_definition", {&"definition": {&"event_id": &"p04.s5.break", &"category": &"FLAVOR", &"priority": 100, &"foreground": false, &"transaction_policy": &"ROLLBACK_ALL", &"automatic_actions": [{&"action_id": &"break", &"type": &"SET_FACILITY_STATE", &"payload": {&"facility_id": _facility_id, &"conditions": {&"durability": 0, &"suspension_reason": &"DESTROYED"}}}]}})
|
||||
if _case not in ["S5D_IN_FLIGHT", "S5H_PAUSED_MIDNIGHT"]:
|
||||
_expect(service.elapsed_minutes == _duration - 1, "duration minus one at N-1")
|
||||
return _clock.absolute_minute == _boundary - 1
|
||||
|
||||
func _prepare_paid_reception() -> void:
|
||||
@@ -240,9 +265,112 @@ func _prepare_breach() -> void:
|
||||
_cmd(&"start_defense_raid", {&"raid_id": &"p04.s5.raid"})
|
||||
var due: Array[Dictionary] = _runtime.defense_service.get_due_rounds(_boundary)
|
||||
_expect(due.size() == 1 and due[0][&"earliest_minute"] == _boundary and due[0][&"raid_id"] == &"p04.s5.raid", "automatic breach due at exactly N; no substitute")
|
||||
_recovery[&"due_rounds"] = due.duplicate(true)
|
||||
|
||||
func _guard_failure(label: String, kind: StringName, payload: Dictionary, message: String, details: Dictionary) -> void:
|
||||
# Paused immediate public execution: no tick/business transition is permitted.
|
||||
_clock.set_paused(true)
|
||||
var before: Dictionary = _runtime.create_snapshot().duplicate(true)
|
||||
var expected: Dictionary = before.duplicate(true)
|
||||
var journal: Dictionary = expected[&"systems"][&"runtime"]
|
||||
_expect(journal[&"command_queue"]["pending"].is_empty() and journal[&"command_queue"]["in_flight"].is_empty(), "isolated guard command")
|
||||
_expect(not journal[&"operations"][&"enabled"], "guard has no population synchronization")
|
||||
var queue: CommandQueue = CommandQueue.new()
|
||||
var ids: StableIdGenerator = StableIdGenerator.new()
|
||||
var events: DomainEventStream = DomainEventStream.new()
|
||||
_expect(queue.restore_snapshot(journal[&"command_queue"]), "shadow queue public restore")
|
||||
_expect(ids.restore_snapshot(journal[&"id_generator"]), "shadow ID public restore")
|
||||
_expect(events.restore_snapshot(journal[&"domain_events"]), "shadow stream public restore")
|
||||
_serial += 1
|
||||
var key: StringName = StringName("p04.s5.%s.command.%d" % [_case, _serial])
|
||||
var command: SimulationCommand = SimulationCommand.new(journal[&"next_command_id"], _clock.absolute_minute, _clock.absolute_minute, 10, kind, &"player", &"", payload, key)
|
||||
var failure: CommandResult = CommandResult.failed(CommandResult.Code.VALIDATION_FAILED, command.command_id, message, details)
|
||||
_expected_failure = failure.to_dictionary()
|
||||
_expect(queue.enqueue(command).is_success(), "shadow enqueue")
|
||||
var completed: Array[CommandResult] = queue.execute_ready(_clock.absolute_minute, func(_command: SimulationCommand) -> CommandResult: return failure.copy())
|
||||
_expect(completed.size() == 1, "one shadow failure")
|
||||
var entities: Array[StringName] = []
|
||||
var event: SimulationDomainEvent = SimulationDomainEvent.new(ids.next_id(&"domain_event"), &"COMMAND_FAILED", _clock.absolute_minute, &"simulation_runtime", entities, failure.to_dictionary(), command.command_id)
|
||||
_expect(events.publish(event), "exact M failed-result event")
|
||||
journal[&"next_command_id"] += 1
|
||||
journal[&"command_queue"] = queue.create_snapshot()
|
||||
journal[&"id_generator"] = ids.create_snapshot()
|
||||
journal[&"domain_events"] = events.create_snapshot()
|
||||
# EXPECTED is complete before submit, never read back from AFTER.
|
||||
var expected_bytes: PackedByteArray = var_to_bytes(expected)
|
||||
var actual: CommandResult = _runtime.submit_command(kind, payload, &"player", &"", 10, -1, key)
|
||||
var after: Dictionary = _runtime.create_snapshot()
|
||||
_expect(var_to_bytes(actual.to_dictionary()) == var_to_bytes(failure.to_dictionary()), "guard exact failed result")
|
||||
_expect(expected_bytes == var_to_bytes(after), "whole typed guard equality with no masks")
|
||||
var callbacks: int = 0
|
||||
for row: Dictionary in _results:
|
||||
if row[&"result"]["command_id"] == command.command_id: callbacks += 1
|
||||
_expect(callbacks == 1, "one failed command_completed callback")
|
||||
_guard_references[label] = _write(label, {&"before": before, &"expected": expected, &"after": after, &"command": command.to_dictionary(), &"result": actual.to_dictionary(), &"guard": label})
|
||||
_expected_failure = {}
|
||||
|
||||
func _prepare_idle_breach() -> bool:
|
||||
_fresh()
|
||||
var facility: FacilityInstance = _build_cafeteria(true)
|
||||
if facility == null: return false
|
||||
_facility_id = facility.instance_id
|
||||
_recovery = {&"staff_ids": [], &"resume_minute": _boundary}
|
||||
_clock.advance_minutes(_boundary - 5 - _clock.absolute_minute)
|
||||
_prepare_breach()
|
||||
_guard_failure("G1", &"create_service_request", {&"facility_id": _facility_id, &"request_id": REQUEST, &"guest_ids": [GUEST]}, "A Facility assigned to a non-terminal Defense Raid cannot accept service requests.", {&"raid_id": &"p04.s5.raid"})
|
||||
_clock.advance_minutes(_boundary - 1 - _clock.absolute_minute)
|
||||
return _clock.absolute_minute == _boundary - 1
|
||||
|
||||
func _assert_idle_breach(point: Dictionary) -> void:
|
||||
_expect(point[&"facility"][&"durability"] == 0 and point[&"facility"][&"state"] == "BROKEN" and point[&"facility"][&"suspension_reason"] == "DESTROYED", "idle OBJECTIVE automatically destroyed")
|
||||
_expect(point[&"active_services"] == 0 and point[&"service"].is_empty() and point[&"reservations"].is_empty(), "idle breach has no services or reservations")
|
||||
for request: Dictionary in point[&"requests"].values(): _expect(request.is_empty(), "idle breach no request/orphan")
|
||||
for entry: Dictionary in point[&"ledger"]: _expect(entry[&"category"] != "SERVICE_SALE", "idle breach no sale")
|
||||
|
||||
func _assert_idle_order(_before: Dictionary, point: Dictionary) -> void:
|
||||
_assert_idle_breach(point)
|
||||
|
||||
func _assert_in_flight(point: Dictionary) -> void:
|
||||
_expect(point[&"facility"][&"durability"] == 0 and point[&"facility"][&"state"] == "BROKEN", "event destroys active facility")
|
||||
_expect(point[&"service"][&"state"] == ("ACTIVE" if point[&"minute"] == _boundary else "FAILED"), "N active then N+1 failure")
|
||||
|
||||
func _assert_in_flight_order(before: Dictionary, point: Dictionary) -> void:
|
||||
_assert_in_flight(point)
|
||||
_expect(point[&"wallets"] == before[&"wallets"], "in-flight destruction zero charge")
|
||||
if point[&"minute"] > _boundary: _assert_reservation(before, point, REQUEST, "RELEASED", _boundary + 1)
|
||||
else: _assert_reservation(before, point, REQUEST, "ACTIVE", -1)
|
||||
|
||||
func _advance_paused_midnight(label: String) -> void:
|
||||
if label != "recovered":
|
||||
_clock.advance_one_minute()
|
||||
return
|
||||
_cmd(&"change_resources", {&"deltas": {&"mana": _reserve}})
|
||||
_recovery[&"resume_minute"] = -1
|
||||
while _clock.absolute_minute < _boundary + _duration + 20:
|
||||
_clock.advance_one_minute()
|
||||
if _runtime.facility_service.get_service(_service_id).state == ServiceInstance.State.COMPLETED:
|
||||
_recovery[&"resume_minute"] = _clock.absolute_minute
|
||||
break
|
||||
_expect(_recovery[&"resume_minute"] > _boundary, "bounded new-day completion")
|
||||
|
||||
func _assert_paused_midnight(point: Dictionary) -> void:
|
||||
_expect(point[&"service"][&"state"] == "PAUSED" and point[&"service"][&"interruption_reason"] == "RELATED_FACILITY_INACTIVE", "legitimate dependency pause across DAILY_CLOSE")
|
||||
_expect(point[&"operations_enabled"] and not point[&"actual_coordinator_absent"], "real DAILY_CLOSE coordinator")
|
||||
|
||||
func _assert_paused_midnight_order(before: Dictionary, point: Dictionary) -> void:
|
||||
if point[&"minute"] <= _boundary + 1:
|
||||
_assert_paused_midnight(point)
|
||||
_expect(point[&"service"][&"elapsed_minutes"] == before[&"service"][&"elapsed_minutes"], "paused elapsed unchanged")
|
||||
_expect(point[&"wallets"] == before[&"wallets"], "no paused payment")
|
||||
_assert_reservation(before, point, REQUEST, "ACTIVE", -1)
|
||||
else:
|
||||
_expect(point[&"service"][&"state"] == "COMPLETED", "new-day recovered completion")
|
||||
_expect(point[&"wallets"][String(GUEST)] == before[&"wallets"][String(GUEST)] - _price, "one recovered price snapshot debit")
|
||||
_assert_reservation(before, point, REQUEST, "CONSUMED", point[&"minute"])
|
||||
|
||||
func _advance_order(label: String) -> void:
|
||||
if label == "boundary":
|
||||
if _case == "S5D_IN_FLIGHT": _cmd(&"enqueue_event", {&"event_id": &"p04.s5.break", &"actor_ids": [&"player"]}, _boundary)
|
||||
if _case == "S5C_DESTRUCTION_COMMAND": _cmd(&"set_facility_conditions", {&"facility_id": _facility_id, &"conditions": {&"durability": 0}}, _boundary)
|
||||
if _case == "S5F_EXIT": _cmd(&"leave_facility_queue", {&"facility_id": _facility_id, &"request_id": QUEUED_REQUEST}, _boundary)
|
||||
if label == "recalled":
|
||||
@@ -251,6 +379,7 @@ func _advance_order(label: String) -> void:
|
||||
_expect(replay.is_success() and replay.is_replay, "same midnight is a replay")
|
||||
_expect(var_to_bytes(before) == var_to_bytes(_runtime.create_snapshot()), "same-minute replay changes no typed state")
|
||||
_recovery[&"midnight_replay"] = replay.to_dictionary()
|
||||
_replay_reference = _write("same-minute-replay", {&"before": before, &"after": _runtime.create_snapshot(), &"result": replay.to_dictionary(), &"minute": _boundary})
|
||||
else:
|
||||
_clock.advance_one_minute()
|
||||
|
||||
@@ -281,12 +410,19 @@ func _connect_observations() -> void:
|
||||
_runtime.economy_service.transaction_posted.connect(func(id: StringName, entries: Array) -> void:
|
||||
var rows: Array = []
|
||||
for entry: LedgerEntry in entries: rows.append(entry.to_dictionary())
|
||||
_receipts.append({&"id": id, &"minute": _clock.absolute_minute, &"entries": rows})
|
||||
var staff_at_receipt: Array = []
|
||||
for staff_id: StringName in _recovery.get(&"staff_ids", []):
|
||||
staff_at_receipt.append(_runtime.staff_service.get_staff(staff_id).create_snapshot())
|
||||
_receipts.append({&"id": id, &"minute": _clock.absolute_minute, &"phase": _observed_phase, &"entries": rows, &"staff_at_receipt": staff_at_receipt})
|
||||
)
|
||||
_clock.tick_phase_started.connect(func(phase: int, minute: int) -> void:
|
||||
_observed_phase = SimulationKernel.TickPhase.keys()[phase]
|
||||
var label: String = "phase-%d-%s" % [minute, SimulationKernel.TickPhase.keys()[phase]]
|
||||
var row: Dictionary = _capture()
|
||||
row[&"phase"] = SimulationKernel.TickPhase.keys()[phase]
|
||||
if _case == "S5G_SHIFT_1080" and minute == 1080:
|
||||
var historical: Dictionary = {SimulationKernel.TickPhase.FACILITY_COMPLETION: "first-18-00-before-facility", SimulationKernel.TickPhase.VITALS_AND_ENVIRONMENT: "first-18-00-after-facility", SimulationKernel.TickPhase.PUBLISH_SNAPSHOT: "first-18-00-after-staff"}
|
||||
row[&"order_label"] = historical.get(phase, "")
|
||||
_assert_phase(row)
|
||||
_phases.append(_write(label, row))
|
||||
)
|
||||
@@ -316,6 +452,7 @@ func _capture() -> Dictionary:
|
||||
var ledger: Array = []
|
||||
for entry: LedgerEntry in _runtime.economy_service.get_entries(): ledger.append(entry.to_dictionary())
|
||||
return {&"snapshot": snapshot, &"minute": _clock.absolute_minute,
|
||||
&"order_label": ({1079: "first-before-17-59", 1080: "first-18-00-tick-complete", 1081: "first-18-01-tick-complete"}.get(_clock.absolute_minute, "") if _case == "S5G_SHIFT_1080" else ""),
|
||||
&"inputs": {&"case": _case, &"seed": SEEDS[_case], &"serial": _serial, &"facility_id": _facility_id, &"service_id": _service_id,
|
||||
&"boundary": _boundary, &"price": _price, &"duration": _duration, &"patience": _patience, &"reserve": _reserve, &"recovery": _recovery.duplicate(true),
|
||||
&"kitchen_premise": "ActorHardening physical FLEX fixture; not natural hire/unlock"},
|
||||
@@ -397,7 +534,7 @@ func _writer_case() -> void:
|
||||
var guard: Dictionary = _capture()
|
||||
_assert_outcome(before, guard)
|
||||
_points["duplicate_guard"] = _write("duplicate_guard", guard)
|
||||
_branches[_case] = _write("case", {&"resource_replay": _replay_reference, &"points": _points.duplicate(true), &"phases": _phases.duplicate(true),
|
||||
_branches[_case] = _write("case", {&"resource_replay": _replay_reference, &"guards": _guard_references, &"points": _points.duplicate(true), &"phases": _phases.duplicate(true),
|
||||
&"commands": _write("commands", {&"submitted": _commands, &"completed_including_fixture": _results})})
|
||||
|
||||
func _assert_before(point: Dictionary) -> void:
|
||||
@@ -554,6 +691,7 @@ func _assert_expected_phase_roster(references: Array) -> void:
|
||||
var expected_pairs: Array = []
|
||||
var end: int = int(_recovery[&"resume_minute"]) + 1
|
||||
if _case == "S5E_MIDNIGHT": end = _boundary
|
||||
if _case == "S5H_PAUSED_MIDNIGHT": end = int(_recovery[&"resume_minute"])
|
||||
for minute: int in range(_boundary, end):
|
||||
for phase: int in range(SimulationKernel.TickPhase.size()):
|
||||
expected_pairs.append([minute if phase == SimulationKernel.TickPhase.APPLY_COMMANDS else minute + 1, SimulationKernel.TickPhase.keys()[phase]])
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
"""Engine-free mirror of M journal serialization; EXPECTED never accepts AFTER.
|
||||
|
||||
The native probe uses detached public restores. This independent derivation
|
||||
binds that recorded EXPECTED to BEFORE and the fixed guard command, so copying
|
||||
AFTER into EXPECTED cannot turn a mutation into evidence.
|
||||
"""
|
||||
import struct
|
||||
|
||||
MESSAGES = {
|
||||
'G1': 'A Facility assigned to a non-terminal Defense Raid cannot accept service requests.',
|
||||
'G2': 'A busy Facility cannot become a Defense asset.',
|
||||
}
|
||||
|
||||
|
||||
def atom(kind, value):
|
||||
if kind in (4, 21):
|
||||
data = value.encode()
|
||||
return struct.pack('<II', kind, len(data)) + data + b'\0' * (-len(data) % 4)
|
||||
if kind == 2 and not -(2**31) <= value < 2**31:
|
||||
return struct.pack('<Iq', kind | 65536, value)
|
||||
return struct.pack('<Ii', kind, value)
|
||||
|
||||
|
||||
def dictionary(pairs):
|
||||
return struct.pack('<II', 27, len(pairs)) + b''.join(k + v for k, v in pairs)
|
||||
|
||||
|
||||
def strings_dict(pairs):
|
||||
return dictionary([(atom(4, k), v) for k, v in pairs])
|
||||
|
||||
|
||||
def array(rows, element=None):
|
||||
header = struct.pack('<II', 28, len(rows)) if element is None else struct.pack('<III', 65564, element, len(rows))
|
||||
return header + b''.join(rows)
|
||||
|
||||
|
||||
def update(node, changes):
|
||||
"""Retain all untouched typed keys, values and order, with no field masks."""
|
||||
if node.kind != 27 or set(changes) - {k.value for k, _ in node.value}:
|
||||
raise ValueError('journal dictionary keys')
|
||||
return dictionary([(k.raw, changes.get(k.value, v.raw)) for k, v in node.value])
|
||||
|
||||
|
||||
def expected(before, command, guard, parse, require):
|
||||
require(guard in MESSAGES, 'fixed guard')
|
||||
rt = before.at('systems').at('runtime')
|
||||
q = rt.at('command_queue')
|
||||
require(q.at('version').kind == 2 and q.at('version').value == 2, 'M queue version')
|
||||
require(rt.at('next_command_id').kind == 2, 'typed next_command_id')
|
||||
for name in ('pending', 'in_flight', 'processed', 'accepted'):
|
||||
require(q.at(name).raw[:8] == struct.pack('<II', 65564, 27), 'M typed queue array: ' + name)
|
||||
prior_ids = {}
|
||||
for name in ('accepted', 'processed'):
|
||||
members = q.at(name).value
|
||||
require(all(r.at('command_id').kind == 2 for r in members), 'typed prior command IDs')
|
||||
numbers = [r.at('command_id').value for r in members]
|
||||
require(numbers == sorted(set(numbers)) and all(i > 0 for i in numbers), 'sorted unique ' + name)
|
||||
prior_ids[name] = numbers
|
||||
require(prior_ids['accepted'] == prior_ids['processed'], 'complete isolated prior journal')
|
||||
mapping = q.at('idempotency')
|
||||
require(all(k.kind == 4 and v.kind == 2 for k, v in mapping.value), 'typed idempotency mapping')
|
||||
require([k.value for k, _ in mapping.value] == sorted(k.value for k, _ in mapping.value), 'sorted idempotency')
|
||||
require(not q.at('pending').value and not q.at('in_flight').value, 'isolated guard queue')
|
||||
require(rt.at('operations').at('enabled').value is False, 'guard operations disabled')
|
||||
ident = rt.at('next_command_id').value
|
||||
minute = command.at('issued_tick').value
|
||||
key = command.at('idempotency_key').value
|
||||
kind = 'create_service_request' if guard == 'G1' else 'register_defense_asset'
|
||||
require(command.at('command_id').kind == 2 and command.at('command_id').value == ident
|
||||
and command.at('execute_tick').value == minute
|
||||
and command.at('priority').value == 10 and command.at('command_type').value == kind
|
||||
and command.at('actor_id').value == 'player' and command.at('target_id').value == ''
|
||||
and key.startswith('p04.s5.') and key not in q.at('idempotency').plain(), 'fixed guard command binding')
|
||||
payload = command.at('payload').plain()
|
||||
if guard == 'G1':
|
||||
require(set(payload) == {'facility_id', 'request_id', 'guest_ids'}
|
||||
and payload['request_id'] == 'p04.s5.request.a'
|
||||
and payload['guest_ids'] == ['p04.s5.guest.a'], 'G1 payload')
|
||||
else:
|
||||
require(set(payload) == {'raid_id', 'asset_id', 'kind', 'max_integrity'}
|
||||
and payload['raid_id'] == 'p04.s5.guard.raid' and payload['kind'] == 'OBJECTIVE'
|
||||
and payload['max_integrity'] == 10000, 'G2 payload')
|
||||
details = dictionary([(atom(21, 'raid_id'), atom(21, 'p04.s5.raid'))]) if guard == 'G1' else dictionary([])
|
||||
result = strings_dict([
|
||||
('code', atom(4, 'VALIDATION_FAILED')), ('command_id', atom(2, ident)),
|
||||
('target_id', atom(4, '')), ('message', atom(4, MESSAGES[guard])),
|
||||
('resolution_hints', array([], 4)), ('details', details), ('is_replay', atom(1, 0))])
|
||||
accepted = q.at('accepted').value
|
||||
processed = q.at('processed').value
|
||||
for row in accepted:
|
||||
old_key = row.at('idempotency_key')
|
||||
require(old_key.kind == 4, 'accepted String key')
|
||||
if old_key.value:
|
||||
require(mapping.at(old_key.value).value == row.at('command_id').value, 'prior accepted/idempotency join')
|
||||
require(all(r.at('command_id').value < ident for r in accepted + processed), 'prior journal IDs')
|
||||
metadata = strings_dict([('command_id', atom(2, ident)), ('idempotency_key', atom(4, key))])
|
||||
idem = [(k.value, v.raw) for k, v in q.at('idempotency').value] + [(key, atom(2, ident))]
|
||||
queue = update(q, {'accepted': array([r.raw for r in accepted] + [metadata], 27),
|
||||
'processed': array([r.raw for r in processed] + [result], 27),
|
||||
'idempotency': strings_dict(sorted(idem))})
|
||||
generator = rt.at('id_generator')
|
||||
counters = generator.at('counters').plain()
|
||||
require(all(k.kind == 4 and v.kind == 2 for k, v in generator.at('counters').value), 'typed counters')
|
||||
counters['domain_event'] = counters.get('domain_event', 0) + 1
|
||||
eid = 'domain_event.%012d' % counters['domain_event']
|
||||
ids = update(generator, {'counters': strings_dict([(k, atom(2, v)) for k, v in sorted(counters.items())])})
|
||||
event = strings_dict([('event_id', atom(4, eid)), ('event_type', atom(4, 'COMMAND_FAILED')),
|
||||
('absolute_minute', atom(2, minute)), ('source_service', atom(4, 'simulation_runtime')),
|
||||
('entity_ids', array([], 4)), ('payload', result), ('causation_command_id', atom(2, ident))])
|
||||
stream = rt.at('domain_events')
|
||||
published = stream.at('published_ids').plain()
|
||||
require(eid not in published, 'new event ID')
|
||||
events = update(stream, {'published_ids': array([atom(4, k) for k in sorted(published + [eid])], 4),
|
||||
'recent_events': array(([r.raw for r in stream.at('recent_events').value] + [event])[-256:], 27)})
|
||||
runtime = update(rt, {'next_command_id': atom(2, ident + 1), 'command_queue': queue,
|
||||
'id_generator': ids, 'domain_events': events})
|
||||
envelope = update(before, {'systems': update(before.at('systems'), {'runtime': runtime})})
|
||||
return parse(envelope), parse(result)
|
||||
|
||||
|
||||
def verify(record, parse, require):
|
||||
before, command = record.at('before'), record.at('command')
|
||||
tree, result = expected(before, command, record.at('guard').value, parse, require)
|
||||
require(record.at('expected').raw == tree.raw, 'EXPECTED must independently derive from BEFORE; AFTER-copy forbidden')
|
||||
require(record.at('after').raw == tree.raw, 'whole typed guard Runtime; no business or journal masks')
|
||||
require(record.at('result').raw == result.raw, 'independent exact failed result')
|
||||
return True
|
||||
@@ -19,6 +19,9 @@ Raw, staff_check, duplicate_check = power.Raw, power.staff_check, power.duplicat
|
||||
series, require = power.series, power.require
|
||||
DEPENDENCIES = {str(p): hashlib.sha256(p.read_bytes()).hexdigest()
|
||||
for p in (POWER_PATH, power.SERIES_PATH)}
|
||||
GUARD_PATH = Path(__file__).with_name('s5_guard_oracle.py')
|
||||
guard_oracle = module('s5_guard_oracle', GUARD_PATH)
|
||||
DEPENDENCIES[str(GUARD_PATH)] = hashlib.sha256(GUARD_PATH.read_bytes()).hexdigest()
|
||||
GUEST, REQUEST = power.GUEST, power.REQUEST
|
||||
SECOND, SECOND_REQUEST = 'p04.s5.guest.b', 'p04.s5.request.b'
|
||||
|
||||
@@ -73,6 +76,9 @@ def payment(before, after, minute):
|
||||
sale = sales(after)
|
||||
require(not sales(before) and len(sale) == 1, 'exactly one new sale')
|
||||
price = scalar(before, 'inputs', 'price')
|
||||
require(price == scalar(before, 'service', 'price_snapshot')
|
||||
and scalar(before, 'inputs', 'duration') == scalar(before, 'service', 'duration_minutes'),
|
||||
'values derived from service snapshot')
|
||||
require(price > 0 and scalar(sale[0], 'amount') == price
|
||||
and scalar(sale[0], 'absolute_minute') == minute
|
||||
and scalar(sale[0], 'source_entity_id') == scalar(after, 'inputs', 'facility_id'),
|
||||
@@ -82,6 +88,11 @@ def payment(before, after, minute):
|
||||
require(scalar(after, 'service', 'state') == 'COMPLETED'
|
||||
and scalar(after, 'service', 'completed_at') == minute, 'completed before payment')
|
||||
runtime = field(after, 'snapshot', 'systems', 'runtime')
|
||||
history = [r for r in rows(runtime, 'facilities', 'service_history')
|
||||
if scalar(r, 'service_id') == scalar(after, 'service', 'service_id')]
|
||||
require(len(history) == 1 and history[0].raw == field(after, 'service').raw, 'completed service joins typed Runtime')
|
||||
require(sum(r.raw == sale[0].raw for r in rows(runtime, 'economy', 'entries')) == 1,
|
||||
'sale joins typed Runtime ledger once')
|
||||
key = 'service.payment.' + scalar(after, 'service', 'service_id')
|
||||
idem = [r for r in rows(runtime, 'economy', 'idempotency') if scalar(r, 'key') == key]
|
||||
require(len(idem) == 1 and scalar(idem[0], 'transaction_id') == scalar(sale[0], 'transaction_id'),
|
||||
@@ -106,7 +117,7 @@ def destruction_command(points, phases):
|
||||
return {'destruction_stop': {'charges': 0}, 'command_destruction_before_completion': True}
|
||||
|
||||
|
||||
def destruction_raid(points, phases):
|
||||
def destruction_raid_r40(points, phases):
|
||||
before, end = points['before'], points['held']
|
||||
n = scalar(before, 'inputs', 'boundary')
|
||||
pre = phase(phases, 'INCIDENTS_AND_EVENTS', n)
|
||||
@@ -127,6 +138,138 @@ def destruction_raid(points, phases):
|
||||
return {'raid_sale_before_destruction': True, 'raid_unfinished_release': True}
|
||||
|
||||
|
||||
def destruction_raid(points, phases):
|
||||
before = points['before']
|
||||
n = scalar(before, 'inputs', 'boundary')
|
||||
due = rows(before, 'inputs', 'recovery', 'due_rounds')
|
||||
require(len(due) == 1 and scalar(due[0], 'earliest_minute') == n
|
||||
and scalar(due[0], 'raid_id') == 'p04.s5.raid', 'idle OBJECTIVE due exactly N')
|
||||
pre = phase(phases, 'INCIDENTS_AND_EVENTS', n)
|
||||
require(scalar(pre, 'facility', 'durability') > 0, 'idle breach not before incidents')
|
||||
for point in (phase(phases, 'FACILITY_QUEUES', n), points['boundary'], points['held']):
|
||||
require(scalar(point, 'facility', 'durability') == 0 and scalar(point, 'facility', 'state') == 'BROKEN'
|
||||
and scalar(point, 'facility', 'suspension_reason') == 'DESTROYED', 'automatic idle destruction in INCIDENTS_AND_EVENTS')
|
||||
require(not rows(point, 'reservations') and field(point, 'service').plain() == {}
|
||||
and scalar(point, 'active_services') == 0
|
||||
and not rows(point, 'snapshot', 'systems', 'runtime', 'facilities', 'requests')
|
||||
and all(v.plain() == {} for _, v in field(point, 'requests').value), 'idle no requests/reservations/orphans')
|
||||
require(not any(scalar(r, 'category') == 'SERVICE_SALE' for r in rows(point, 'ledger')),
|
||||
'idle raid zero SERVICE_SALE')
|
||||
return {'idle_objective_breach': True, 'destruction_stop': {'charges': 0}}
|
||||
|
||||
|
||||
def destruction_in_flight(points, phases):
|
||||
before, boundary, end = points['before'], points['boundary'], points['held']
|
||||
n = scalar(before, 'inputs', 'boundary')
|
||||
pre = phase(phases, 'INCIDENTS_AND_EVENTS', n)
|
||||
post = phase(phases, 'FACILITY_QUEUES', n)
|
||||
require(scalar(pre, 'facility', 'durability') > 0 and scalar(pre, 'service', 'state') == 'ACTIVE'
|
||||
and scalar(pre, 'service', 'elapsed_minutes') < scalar(pre, 'service', 'duration_minutes'),
|
||||
'in-flight completion phase precedes destruction')
|
||||
require(scalar(post, 'facility', 'durability') == 0 and scalar(post, 'facility', 'state') == 'BROKEN'
|
||||
and scalar(boundary, 'service', 'state') == 'ACTIVE', 'event breaks active service at N')
|
||||
require(scalar(end, 'minute') == n + 1 and scalar(end, 'service', 'state') == 'FAILED'
|
||||
and scalar(end, 'service', 'failure_reason') == 'BROKEN', 'N+1 in-flight failure')
|
||||
for p in (boundary, end):
|
||||
require(not sales(p) and field(p, 'wallets').raw == field(before, 'wallets').raw, 'in-flight zero charge')
|
||||
release(before, end, REQUEST, n + 1)
|
||||
return {'in_flight_destruction': True, 'destruction_stop': {'charges': 0}}
|
||||
|
||||
|
||||
def shift_completion(points, phases):
|
||||
before, end, held = points['before'], points['boundary'], points['held']
|
||||
require(scalar(before, 'inputs', 'boundary') == 1080, 'DAY end exactly 1080')
|
||||
require(scalar(before, 'minute') == 1079 and scalar(before, 'service', 'state') == 'ACTIVE'
|
||||
and scalar(before, 'service', 'started_at') + scalar(before, 'service', 'duration_minutes') == 1080
|
||||
and scalar(before, 'service', 'elapsed_minutes') == scalar(before, 'service', 'duration_minutes') - 1,
|
||||
'natural snapshot duration aligns completion to 1080')
|
||||
for point, label in [(before, 'first-before-17-59'), (end, 'first-18-00-tick-complete'),
|
||||
(held, 'first-18-01-tick-complete'),
|
||||
(phase(phases, 'FACILITY_COMPLETION', 1080), 'first-18-00-before-facility'),
|
||||
(phase(phases, 'VITALS_AND_ENVIRONMENT', 1080), 'first-18-00-after-facility'),
|
||||
(phase(phases, 'PUBLISH_SNAPSHOT', 1080), 'first-18-00-after-staff')]:
|
||||
require(scalar(point, 'order_label') == label, 'historical shift observation label: ' + label)
|
||||
require(not sales(phase(phases, 'FACILITY_COMPLETION', 1080)), 'not charged before FACILITY_COMPLETION')
|
||||
sale = payment(before, phase(phases, 'VITALS_AND_ENVIRONMENT', 1080), 1080)
|
||||
payment(before, end, 1080)
|
||||
payment(before, held, 1080)
|
||||
require(scalar(held, 'minute') == 1081 and field(end, 'service').raw == field(held, 'service').raw,
|
||||
'1081 no second completion')
|
||||
receipts = [r for r in rows(end, 'receipts') if scalar(r, 'id') == scalar(sale, 'transaction_id')]
|
||||
require(len(receipts) == 1 and scalar(receipts[0], 'phase') == 'FACILITY_COMPLETION', 'sale before handover')
|
||||
staff = rows(receipts[0], 'staff_at_receipt')
|
||||
ids = field(before, 'service', 'staff_ids').plain()
|
||||
require(ids and [scalar(r, 'staff_id') for r in staff] == ids, 'DAY staff captured at receipt')
|
||||
shifts = rows(before, 'snapshot', 'systems', 'runtime', 'staff', 'shifts')
|
||||
final_shifts = rows(end, 'snapshot', 'systems', 'runtime', 'staff', 'shifts')
|
||||
final_staff = rows(end, 'snapshot', 'systems', 'runtime', 'staff', 'staff')
|
||||
for worker in staff:
|
||||
ident = scalar(worker, 'staff_id')
|
||||
shift = [s for s in shifts if scalar(s, 'shift_instance_id') == scalar(worker, 'shift_id')]
|
||||
require(len(shift) == 1 and scalar(shift[0], 'end_at') == 1080 and scalar(shift[0], 'template_id') == 'DAY'
|
||||
and scalar(worker, 'state') != 'OFF_DUTY', 'DAY not NIGHT staff before handover')
|
||||
after = [s for s in final_shifts if scalar(s, 'shift_instance_id') == scalar(worker, 'shift_id')]
|
||||
require(len(after) == 1 and scalar(after[0], 'actual_ended_at') == scalar(after[0], 'end_at') == 1080,
|
||||
'DAY shift ended after receipt')
|
||||
workers = [s for s in final_staff if scalar(s, 'staff_id') == ident]
|
||||
require(len(workers) == 1 and scalar(workers[0], 'state') == 'OFF_DUTY', 'DAY now OFF_DUTY')
|
||||
return {'shift_completion': {'minute': 1080, 'completions': 1, 'charges': 1, 'completion_before_shift': True}}
|
||||
|
||||
|
||||
def paused_midnight(points, phases):
|
||||
before, end = points['before'], points['recovered']
|
||||
n = scalar(before, 'inputs', 'boundary')
|
||||
require(n > 0 and n % 1440 == 0, 'paused midnight multiple')
|
||||
for p in (before, phase(phases, 'TIME_BOUNDARIES', n), phase(phases, 'MANA', n), points['boundary'], points['held']):
|
||||
require(scalar(p, 'service', 'state') == 'PAUSED'
|
||||
and scalar(p, 'service', 'interruption_reason') == 'RELATED_FACILITY_INACTIVE'
|
||||
and scalar(p, 'service', 'elapsed_minutes') == scalar(before, 'service', 'elapsed_minutes'),
|
||||
'legitimate pause unchanged through DAILY_CLOSE')
|
||||
require(field(p, 'reservations').raw == field(before, 'reservations').raw
|
||||
and field(p, 'requests', REQUEST).raw == field(before, 'requests', REQUEST).raw,
|
||||
'identical active reservations and preserved request')
|
||||
require(not sales(p) and field(p, 'wallets').raw == field(before, 'wallets').raw, 'no paused sale')
|
||||
active = rows(before, 'reservations')
|
||||
require(len(active) == 1 and scalar(active[0], 'state') == 'ACTIVE', 'one active meal reservation')
|
||||
post = phase(phases, 'MANA', n)
|
||||
summaries = rows(post, 'snapshot', 'systems', 'runtime', 'operations', 'coordinator', 'day_summaries')
|
||||
summaries = [s for s in summaries if scalar(s, 'closed_at') == n]
|
||||
require(len(summaries) == 1, 'one DAILY_CLOSE during TIME_BOUNDARIES')
|
||||
settlement_rows = [r for r in rows(post, 'ledger') if scalar(r, 'absolute_minute') == n]
|
||||
upkeep = [r for r in settlement_rows if scalar(r, 'category') == 'MAINTENANCE_PAYMENT']
|
||||
require(upkeep and len({scalar(r, 'transaction_id') for r in upkeep}) == 1, 'one paused upkeep settlement')
|
||||
require(len({scalar(r, 'source_entity_id') for r in upkeep}) == len(upkeep), 'one upkeep row per owned facility')
|
||||
for row in upkeep:
|
||||
accrual = [r for r in rows(post, 'ledger') if scalar(r, 'category') == 'MAINTENANCE_ACCRUAL'
|
||||
and scalar(r, 'transaction_id') == scalar(row, 'transaction_id')
|
||||
and scalar(r, 'source_entity_id') == scalar(row, 'source_entity_id')
|
||||
and scalar(r, 'amount') == scalar(row, 'amount') and scalar(r, 'absolute_minute') == n - 1]
|
||||
require(len(accrual) == 1, 'paused upkeep accrual joined once')
|
||||
wages = [r for r in settlement_rows if scalar(r, 'category') == 'WAGE']
|
||||
require(len(wages) == 1, 'one paused payroll transaction')
|
||||
payroll = [r for r in rows(post, 'snapshot', 'systems', 'runtime', 'staff', 'payroll_settlements')
|
||||
if scalar(r, 'settlement_id') == scalar(wages[0], 'source_entity_id')]
|
||||
require(len(payroll) == 1 and scalar(payroll[0], 'day') == n // 1440, 'paused payroll day/ledger join')
|
||||
paid = [r for r in rows(payroll[0], 'rows') if scalar(r, 'payment') > 0]
|
||||
require(paid and len({scalar(r, 'staff_id') for r in paid}) == len(paid)
|
||||
and sum(scalar(r, 'payment') for r in paid) == scalar(wages[0], 'amount'), 'paused payroll paid once')
|
||||
for p in (points['boundary'], points['held'], end):
|
||||
require([r.raw for r in rows(p, 'ledger') if scalar(r, 'absolute_minute') == n] == [r.raw for r in settlement_rows],
|
||||
'no double settlement or midnight sale')
|
||||
current = [s for s in rows(p, 'snapshot', 'systems', 'runtime', 'operations', 'coordinator', 'day_summaries')
|
||||
if scalar(s, 'closed_at') == n]
|
||||
require([s.raw for s in current] == [s.raw for s in summaries], 'settlement summary posted once')
|
||||
completion = scalar(end, 'service', 'completed_at')
|
||||
require(n < completion < n + 1440, 'recovery in new day')
|
||||
payment(before, end, completion)
|
||||
consumed = rows(end, 'reservations')
|
||||
require(len(consumed) == 1 and scalar(consumed[0], 'reservation_id') == scalar(active[0], 'reservation_id')
|
||||
and scalar(consumed[0], 'state') == 'CONSUMED' and field(end, 'requests', REQUEST).plain() == {},
|
||||
'consumed original reservation no orphan')
|
||||
return {'paused_midnight': {'orphan_reservations': 0, 'crossed_midnight_while_paused': True,
|
||||
'stopped_charges': 0, 'completions': 1, 'charges': 1}}
|
||||
|
||||
|
||||
def midnight_day(points, phases):
|
||||
before, end, replay = points['before'], points['boundary'], points['recalled']
|
||||
n = scalar(before, 'inputs', 'boundary')
|
||||
@@ -190,7 +333,8 @@ def exit_order(points, phases):
|
||||
|
||||
|
||||
DERIVERS = {'S5C_DESTRUCTION_COMMAND': destruction_command, 'S5D_DESTRUCTION_RAID': destruction_raid,
|
||||
'S5E_MIDNIGHT': midnight_day, 'S5F_EXIT': exit_order}
|
||||
'S5D_IN_FLIGHT': destruction_in_flight, 'S5G_SHIFT_1080': shift_completion,
|
||||
'S5H_PAUSED_MIDNIGHT': paused_midnight, 'S5E_MIDNIGHT': midnight_day, 'S5F_EXIT': exit_order}
|
||||
|
||||
|
||||
def derive(root, writer_sha, reader_sha):
|
||||
@@ -209,8 +353,31 @@ def derive(root, writer_sha, reader_sha):
|
||||
phases = [raw.typed(r) for r in branch['phases']]
|
||||
raw.typed(branch['commands'])
|
||||
for p in points.values():
|
||||
staff_check(p, field(p, 'inputs', 'recovery'))
|
||||
if case not in ('S5D_DESTRUCTION_RAID', 'S5G_SHIFT_1080'):
|
||||
staff_check(p, field(p, 'inputs', 'recovery'))
|
||||
if case == 'S5G_SHIFT_1080':
|
||||
staff_check(points['before'], field(points['before'], 'inputs', 'recovery'))
|
||||
result[case] = function(points, phases)
|
||||
expected_guards = {'G1'} if case == 'S5D_DESTRUCTION_RAID' else {'G2'} if case == 'S5D_IN_FLIGHT' else set()
|
||||
require(set(branch['guards']) == expected_guards, 'complete fixed guard roster')
|
||||
for label, ref in branch['guards'].items():
|
||||
guard = raw.typed(ref)
|
||||
require(scalar(guard, 'guard') == label, 'guard label binding')
|
||||
facility_id = scalar(points['before'], 'inputs', 'facility_id')
|
||||
payload_field = 'facility_id' if label == 'G1' else 'asset_id'
|
||||
require(scalar(guard, 'command', 'payload', payload_field) == facility_id, 'guard binds case facility')
|
||||
facilities = rows(guard, 'before', 'systems', 'runtime', 'facilities', 'instances')
|
||||
facility = [f for f in facilities if scalar(f, 'instance_id') == facility_id]
|
||||
require(len(facility) == 1, 'guard facility exists in BEFORE')
|
||||
if label == 'G2':
|
||||
require(rows(facility[0], 'active_services'), 'G2 independently busy BEFORE')
|
||||
else:
|
||||
raids = rows(guard, 'before', 'systems', 'runtime', 'defense', 'raids')
|
||||
raid = [r for r in raids if scalar(r, 'raid_id') == 'p04.s5.raid']
|
||||
require(len(raid) == 1 and scalar(raid[0], 'state') in ('PREPARING', 'ACTIVE', 'BETWEEN_WAVES')
|
||||
and any(scalar(asset, 'asset_id') == facility_id for asset in rows(raid[0], 'assets')),
|
||||
'G1 independently non-terminal Defense ownership')
|
||||
result[case][label] = guard_oracle.verify(guard, series.variant, require)
|
||||
for label, ref in replay['restored'].items():
|
||||
require(field(raw.typed(ref), 'snapshot').raw == field(points[label], 'snapshot').raw,
|
||||
'whole typed formal restore')
|
||||
@@ -224,6 +391,12 @@ def derive(root, writer_sha, reader_sha):
|
||||
require([raw.typed(r).raw for r in replay['phases']] == expected_phases, 'complete phase replay')
|
||||
result[case]['formal_restore_verified'] = True
|
||||
if case == 'S5E_MIDNIGHT':
|
||||
for reference in (branch['resource_replay'], replay['resource_replay']):
|
||||
record = raw.typed(reference)
|
||||
require(field(record, 'before').raw == field(record, 'after').raw == field(points['boundary'], 'snapshot').raw
|
||||
and scalar(record, 'result', 'is_replay') is True and scalar(record, 'result', 'code') == 'OK'
|
||||
and scalar(record, 'minute') == n, 'public advance_to after formal boundary restore')
|
||||
result[case]['same_minute_replay'] = {'completions': 1, 'charges': 1, 'duplicate_generations': 0, 'same_minute_replayed': True}
|
||||
result[case]['save_restore'] = {'settlements': 1, 'duplicate_payments': 0, 'formal_save_restored': True}
|
||||
return {'cases': result, 'dependency_sha256': DEPENDENCIES, 'raw_sha256': raw.hashes,
|
||||
'pending': ['patience_release', 'paused_midnight'], 'formal_acceptance': False}
|
||||
'pending': ['patience_release'], 'formal_acceptance': False}
|
||||
|
||||
+137
-5
@@ -13,13 +13,110 @@ mutation = a.module('order_typed_mutation', Path(__file__).with_name('s5_power_a
|
||||
BUILD = Path('/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build')
|
||||
|
||||
|
||||
def guard_mutations(record):
|
||||
"""All typed AFTER nodes are tested, including every changed journal field.
|
||||
|
||||
Also copy each corrupted AFTER into EXPECTED: the independent derivation
|
||||
must still reject it. No native evidence is produced by these controls.
|
||||
"""
|
||||
oracle = a.guard_oracle
|
||||
a.require(oracle.verify(record, a.series.variant, a.require), 'guard control prerequisite')
|
||||
checks = []
|
||||
after = record.at('after')
|
||||
|
||||
def visit(node, path):
|
||||
replacements = []
|
||||
if node.kind in (4, 21):
|
||||
replacements = [('value', oracle.atom(node.kind, node.value + '.mutated')),
|
||||
('string-type', oracle.atom(21 if node.kind == 4 else 4, node.value))]
|
||||
elif node.kind == 2:
|
||||
replacements = [('value', oracle.atom(2, node.value + 1)),
|
||||
('int-float', struct.pack('<If', 3, float(node.value)))]
|
||||
elif node.kind == 1:
|
||||
replacements = [('bool', oracle.atom(1, not node.value))]
|
||||
elif node.kind == 28:
|
||||
start = 12 if node.raw[:4] == struct.pack('<I', 65564) else 8
|
||||
if node.value:
|
||||
replacements.append(('extra-row', node.raw[:start-4] + struct.pack('<I', len(node.value)+1)
|
||||
+ node.raw[start:] + node.value[-1].raw))
|
||||
if len(node.value) > 1:
|
||||
replacements.append(('unsorted', node.raw[:start] + b''.join(r.raw for r in reversed(node.value))))
|
||||
for i, child in enumerate(node.value):
|
||||
visit(child, path + '/' + str(i))
|
||||
elif node.kind == 27:
|
||||
if len(node.value) > 1:
|
||||
replacements.append(('unsorted', oracle.dictionary([(k.raw, v.raw) for k, v in reversed(node.value)])))
|
||||
for key, child in node.value:
|
||||
visit(key, path + '/key:' + str(key.value))
|
||||
visit(child, path + '/' + str(key.value))
|
||||
for label, encoded in replacements:
|
||||
changed_after = mutation.replace(after, node, encoded)
|
||||
for copied in (False, True):
|
||||
changed_record = mutation.replace(record, after, changed_after)
|
||||
try:
|
||||
changed = a.series.variant(changed_record)
|
||||
if copied:
|
||||
changed_record = mutation.replace(changed, changed.at('expected'), changed_after)
|
||||
oracle.verify(a.series.variant(changed_record), a.series.variant, a.require)
|
||||
except ValueError:
|
||||
checks.append(path + ':' + label + (':AFTER-copy' if copied else ''))
|
||||
continue
|
||||
raise ValueError('guard mutation accepted: ' + path + ':' + label)
|
||||
visit(after, 'after')
|
||||
return checks
|
||||
|
||||
|
||||
def pure_controls():
|
||||
"""Source-shaped synthetic serializer units, never Writer/Reader positives."""
|
||||
o = a.guard_oracle
|
||||
atom, d, arr = o.atom, o.strings_dict, o.array
|
||||
prior = lambda ident: d([('code', atom(4, 'OK')), ('command_id', atom(2, ident)),
|
||||
('target_id', atom(4, '')), ('message', atom(4, '')),
|
||||
('resolution_hints', arr([], 4)), ('details', d([])), ('is_replay', atom(1, 0))])
|
||||
q = d([('version', atom(2, 2)), ('pending', arr([], 27)), ('in_flight', arr([], 27)),
|
||||
('processed', arr([prior(1), prior(2)], 27)),
|
||||
('idempotency', d([('a', atom(2, 1)), ('b', atom(2, 2))])),
|
||||
('accepted', arr([d([('command_id', atom(2, i)), ('idempotency_key', atom(4, k))])
|
||||
for i, k in [(1, 'a'), (2, 'b')]], 27))])
|
||||
runtime = d([('next_command_id', atom(2, 3)), ('command_queue', q),
|
||||
('id_generator', d([('version', atom(2, 1)), ('counters', d([('domain_event', atom(2, 2))]))])),
|
||||
('domain_events', d([('version', atom(2, 1)), ('published_ids', arr([atom(4, 'domain_event.000000000001'), atom(4, 'domain_event.000000000002')], 4)), ('recent_events', arr([], 27))])),
|
||||
('operations', d([('enabled', atom(1, 0))])),
|
||||
('business', d([('wallet', atom(2, 100)), ('reservations', arr([], 27))]))])
|
||||
before = a.series.variant(d([('systems', d([('runtime', runtime)]))]))
|
||||
results = {}
|
||||
for guard in ('G1', 'G2'):
|
||||
payload = (o.dictionary([(atom(21, 'facility_id'), atom(21, 'facility.1')),
|
||||
(atom(21, 'request_id'), atom(21, a.REQUEST)),
|
||||
(atom(21, 'guest_ids'), arr([atom(21, a.GUEST)]))]) if guard == 'G1' else
|
||||
o.dictionary([(atom(21, 'raid_id'), atom(21, 'p04.s5.guard.raid')),
|
||||
(atom(21, 'asset_id'), atom(21, 'facility.1')),
|
||||
(atom(21, 'kind'), atom(21, 'OBJECTIVE')),
|
||||
(atom(21, 'max_integrity'), atom(2, 10000))]))
|
||||
command = a.series.variant(d([('command_id', atom(2, 3)), ('issued_tick', atom(2, 959)),
|
||||
('execute_tick', atom(2, 959)), ('priority', atom(2, 10)),
|
||||
('command_type', atom(4, 'create_service_request' if guard == 'G1' else 'register_defense_asset')),
|
||||
('actor_id', atom(4, 'player')), ('target_id', atom(4, '')),
|
||||
('payload', payload), ('idempotency_key', atom(4, 'p04.s5.unit.3'))]))
|
||||
expected, result = o.expected(before, command, guard, a.series.variant, a.require)
|
||||
record = a.series.variant(d([('before', before.raw), ('command', command.raw), ('guard', atom(4, guard)),
|
||||
('expected', expected.raw), ('after', expected.raw), ('result', result.raw)]))
|
||||
results[guard] = guard_mutations(record)
|
||||
return {'synthetic_serializer_controls_only': True, 'negative_controls': results, 'formal_acceptance': False}
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument('--raw-root', type=Path, required=True)
|
||||
parser.add_argument('--writer-sha256', required=True)
|
||||
parser.add_argument('--reader-sha256', required=True)
|
||||
parser.add_argument('--scratch', type=Path, required=True)
|
||||
parser.add_argument('--pure-only', action='store_true')
|
||||
parser.add_argument('--raw-root', type=Path)
|
||||
parser.add_argument('--writer-sha256')
|
||||
parser.add_argument('--reader-sha256')
|
||||
parser.add_argument('--scratch', type=Path)
|
||||
args = parser.parse_args()
|
||||
if args.pure_only:
|
||||
print(json.dumps(pure_controls(), sort_keys=True))
|
||||
return
|
||||
a.require(all((args.raw_root, args.writer_sha256, args.reader_sha256, args.scratch)), 'explicit fresh raw arguments')
|
||||
scratch = args.scratch
|
||||
a.require(scratch.is_absolute() and not scratch.exists() and not scratch.is_symlink(), 'explicit absent scratch')
|
||||
a.require(scratch.parent.resolve(strict=True).is_relative_to(BUILD.resolve(strict=True)), 'scratch inside BUILD')
|
||||
@@ -66,7 +163,11 @@ def main():
|
||||
raid = 'S5D_DESTRUCTION_RAID'
|
||||
points, phases = cases[raid]
|
||||
pre = a.phase(phases, 'INCIDENTS_AND_EVENTS', a.scalar(points['before'], 'inputs', 'boundary'))
|
||||
negative('raid-sale-missing', raid, pre, a.field(a.sales(pre)[0], 'category'), mutation.scalar(4, 'REMOVED_SALE'))
|
||||
negative('idle-breach-too-early', raid, pre, a.field(pre, 'facility', 'durability'), mutation.scalar(2, 0))
|
||||
for case in ('S5D_DESTRUCTION_RAID', 'S5D_IN_FLIGHT'):
|
||||
branch = raw.reference(writer['branches'][case])
|
||||
for label, reference in branch['guards'].items():
|
||||
checks.extend(label + ':' + name for name in guard_mutations(raw.typed(reference)))
|
||||
command = 'S5C_DESTRUCTION_COMMAND'
|
||||
points, phases = cases[command]
|
||||
end = points['held']
|
||||
@@ -83,6 +184,37 @@ def main():
|
||||
pre = a.phase(phases, 'FACILITY_COMPLETION', n)
|
||||
reservation = next(r for r in a.rows(pre, 'reservations') if a.scalar(r, 'requester_id') == a.SECOND_REQUEST)
|
||||
negative('command-exit-after-start', exit_case, pre, a.field(reservation, 'terminal_at'), mutation.scalar(2, n + 1))
|
||||
shift = 'S5G_SHIFT_1080'
|
||||
points, phases = cases[shift]
|
||||
end = points['boundary']
|
||||
receipt = next(r for r in a.rows(end, 'receipts') if a.scalar(r, 'id') == a.scalar(a.sales(end)[0], 'transaction_id'))
|
||||
negative('sale-after-handover', shift, end, a.field(receipt, 'phase'), mutation.scalar(4, 'AI_DECISIONS'))
|
||||
staff = a.field(receipt, 'staff_at_receipt')
|
||||
negative('empty-staff-at-receipt', shift, end, staff, a.guard_oracle.array([]))
|
||||
negative('night-staff-at-receipt', shift, end, a.field(staff.value[0], 'shift_id'), mutation.scalar(4, 'NIGHT'))
|
||||
paused = 'S5H_PAUSED_MIDNIGHT'
|
||||
points, phases = cases[paused]
|
||||
end = points['boundary']
|
||||
reservation = a.rows(end, 'reservations')[0]
|
||||
negative('reservation-released-at-midnight', paused, end, a.field(reservation, 'state'), mutation.scalar(4, 'RELEASED'))
|
||||
negative('reservation-changed-at-midnight', paused, end, a.field(reservation, 'quantity'), mutation.scalar(2, a.scalar(reservation, 'quantity') + 1))
|
||||
negative('paused-elapsed-typed-different', paused, end, a.field(end, 'service', 'elapsed_minutes'), struct.pack('<If', 3, float(a.scalar(end, 'service', 'elapsed_minutes'))))
|
||||
ledger = a.field(end, 'ledger')
|
||||
sale = a.sales(points['recovered'])[0]
|
||||
start = 12 if ledger.raw[:4] == struct.pack('<I', 65564) else 8
|
||||
def appended(row):
|
||||
return ledger.raw[:start-4] + struct.pack('<I', len(ledger.value)+1) + ledger.raw[start:] + row.raw
|
||||
negative('sale-while-paused', paused, end, ledger, appended(sale))
|
||||
settlement = next(r for r in ledger.value if a.scalar(r, 'absolute_minute') == a.scalar(end, 'inputs', 'boundary'))
|
||||
negative('double-paused-settlement', paused, end, ledger, appended(settlement))
|
||||
points, phases = cases[midnight]
|
||||
replay = points['recalled']
|
||||
counter = a.field(replay, 'snapshot', 'systems', 'runtime', 'next_command_id')
|
||||
negative('replay-extra-id', midnight, replay, counter, mutation.scalar(2, counter.value + 1))
|
||||
negative('replay-json-equal-type-difference', midnight, replay, counter, struct.pack('<If', 3, float(counter.value)))
|
||||
ledger = a.field(replay, 'snapshot', 'systems', 'runtime', 'economy', 'entries')
|
||||
start = 12 if ledger.raw[:4] == struct.pack('<I', 65564) else 8
|
||||
negative('replay-extra-row', midnight, replay, ledger, ledger.raw[:start-4] + struct.pack('<I', len(ledger.value)+1) + ledger.raw[start:] + ledger.value[-1].raw)
|
||||
print(json.dumps({'positive_cases': list(positive['cases']), 'negative_controls': checks,
|
||||
'formal_acceptance': False}, sort_keys=True))
|
||||
|
||||
|
||||
@@ -100,9 +100,10 @@ def derive(root, writer_sha, reader_sha):
|
||||
writer = json.loads(raw.pin(root / "writer.json", writer_sha), object_pairs_hook=unique)
|
||||
reader = json.loads(raw.pin(root / "reader.json", reader_sha), object_pairs_hook=unique)
|
||||
require(writer["pid"] != reader["pid"] and writer["profile"] != reader["profile"], "independent reader required")
|
||||
expected = set(CASES) | {"S5C_DESTRUCTION_COMMAND", "S5D_DESTRUCTION_RAID", "S5E_MIDNIGHT", "S5F_EXIT"}
|
||||
expected = set(CASES) | {"S5C_DESTRUCTION_COMMAND", "S5D_DESTRUCTION_RAID", "S5D_IN_FLIGHT", "S5E_MIDNIGHT", "S5F_EXIT", "S5G_SHIFT_1080", "S5H_PAUSED_MIDNIGHT"}
|
||||
historical_roster = set(CASES) | {"S5C_DESTRUCTION_COMMAND", "S5D_DESTRUCTION_RAID", "S5E_MIDNIGHT", "S5F_EXIT"}
|
||||
require(set(writer["branches"]) == set(reader["branches"]) and
|
||||
set(writer["branches"]) in (set(CASES), expected), "exact pair or full case table roster")
|
||||
set(writer["branches"]) in (set(CASES), historical_roster, expected), "exact pair or full case table roster")
|
||||
output = {}
|
||||
for case in CASES:
|
||||
branch = raw.reference(writer["branches"][case])
|
||||
|
||||
@@ -511,7 +511,18 @@ def boundary_conditions(path, function):
|
||||
return set(REQUIRED) | {'EV'}
|
||||
|
||||
|
||||
def mandatory_conditions(index):
|
||||
conditions = index.get('conditions')
|
||||
require(isinstance(conditions, dict), 'mandatory conditions must be a dictionary')
|
||||
missing = sorted(set(REQUIRED) - set(conditions))
|
||||
unknown = sorted(set(conditions) - set(REQUIRED))
|
||||
require(not missing and not unknown,
|
||||
'mandatory conditions missing: ' + ', '.join(missing) + '; unknown: ' + ', '.join(unknown))
|
||||
return conditions
|
||||
|
||||
|
||||
def applicability(index, spec, source, head):
|
||||
mandatory_conditions(index)
|
||||
tested = index.get('versions', {}).get('tested')
|
||||
require(isinstance(tested, str) and tree_entries(tested) and
|
||||
product_manifest(tree_entries(tested)) == product_manifest(tree_entries(head)),
|
||||
@@ -575,8 +586,7 @@ def coverage(index, raw, source, product_tree):
|
||||
'docs/DESIGN_DECISIONS.md' if ref == 'D-034' else
|
||||
'docs/plans/original-completion-2026-10-02/execution/p04-01-input-r01/ORDER_CONTRACT_DRAFT.md')
|
||||
require(sha(raw[aid]) == sha(safe(ROOT, path)), 'authority document mismatch: ' + ref)
|
||||
conditions = index.get('conditions')
|
||||
require(isinstance(conditions, dict) and set(conditions) == set(REQUIRED), 'mandatory conditions missing/unknown')
|
||||
conditions = mandatory_conditions(index)
|
||||
for cid, (domain_name, refs, expected) in REQUIRED.items():
|
||||
condition = conditions[cid]
|
||||
require(condition.get('authority_refs') == list(refs), 'condition authority: ' + cid)
|
||||
@@ -1145,14 +1155,18 @@ def combine_native_series(directory, native):
|
||||
order = results['s5']['facts']['order']['cases']
|
||||
gates = {
|
||||
'D05-P04-DESTRUCTION': [('S5C_DESTRUCTION_COMMAND', 'command_destruction_before_completion'),
|
||||
('S5D_DESTRUCTION_RAID', 'raid_sale_before_destruction'),
|
||||
('S5D_DESTRUCTION_RAID', 'raid_unfinished_release')],
|
||||
('S5D_DESTRUCTION_RAID', 'G1'), ('S5D_IN_FLIGHT', 'G2'),
|
||||
('S5D_DESTRUCTION_RAID', 'idle_objective_breach'),
|
||||
('S5D_IN_FLIGHT', 'in_flight_destruction')],
|
||||
'D05-P04-MIDNIGHT-DAY': [('S5E_MIDNIGHT', 'midnight_close_upkeep_before_sale'),
|
||||
('S5E_MIDNIGHT', 'midnight_new_day_sale')],
|
||||
'D05-P04-EXIT': [('S5F_EXIT', 'command_exit_before_start'), ('S5F_EXIT', 'planned_exit_after_completion')],
|
||||
}
|
||||
for ref, pairs in gates.items():
|
||||
require(all(order[case][key] is True for case, key in pairs), 'S5 order gate: ' + ref)
|
||||
for case, key in [('S5G_SHIFT_1080', 'shift_completion'), ('S5H_PAUSED_MIDNIGHT', 'paused_midnight'),
|
||||
('S5E_MIDNIGHT', 'same_minute_replay')]:
|
||||
require(order[case][key] == REQUIRED[key][2], 'fresh S5 threshold: ' + key)
|
||||
power = results['s5']['facts']['power']['cases']
|
||||
require(power['S5A_PURE']['measurements']['power_stop'] == REQUIRED['power_stop'][2]
|
||||
and power['S5B_DEPENDENCY']['measurements']['dependency_stop'] == REQUIRED['dependency_stop'][2],
|
||||
|
||||
Reference in New Issue
Block a user