Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e7f2271164 | ||
|
|
1820eed0ff | ||
|
|
eb94e1d7db |
@@ -0,0 +1,2 @@
|
||||
__pycache__/
|
||||
*.pyc
|
||||
+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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+463
@@ -0,0 +1,463 @@
|
||||
{
|
||||
"repair": 45,
|
||||
"status": "ready",
|
||||
"scope": "Worker implementation ready for submission only; whole unit incomplete",
|
||||
"repair44_attempt": {
|
||||
"repair": 44,
|
||||
"status": "blocked",
|
||||
"scope": "Actual worker checks only; no native or formal acceptance",
|
||||
"blocker": {
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-root-q-r43-eb94e1d7/tools/run_all_tests.py",
|
||||
"operation": "UID pure control module read",
|
||||
"error": "PermissionError: [Errno 1] Operation not permitted",
|
||||
"stop_authority": "REPAIR44: stop for an actually unreadable file"
|
||||
},
|
||||
"approval_sha256": {
|
||||
"expected": "cd365ded1b777a0327d090709f0a4161f5005562819183455d9f2e106fba3e96",
|
||||
"actual": "cd365ded1b777a0327d090709f0a4161f5005562819183455d9f2e106fba3e96",
|
||||
"result": "PASS"
|
||||
},
|
||||
"spec": {
|
||||
"raw_bytes": 7000,
|
||||
"raw_sha256": "d28aadb044633f7d804de5a92c8d4c4a7438dfbf44c3243dca978951f4def25f",
|
||||
"one_final_LF_removed_sha256": "9ec722e7dfb0bee178d291624a026420c08412574e238bba1fde012c7a6f7881",
|
||||
"existing_protocol": "PASS"
|
||||
},
|
||||
"q43_handoff_INDEX": {
|
||||
"entries": 14,
|
||||
"exact_raw_bytes_and_sha256": "PASS"
|
||||
},
|
||||
"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": "repair44",
|
||||
"exit_code": 0
|
||||
}
|
||||
],
|
||||
"pure_results": {
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p04-01/REPAIR44_PURE_RESULTS.json",
|
||||
"sha256": "4a702903f9d3189af50b68383cc5bc7829a7480b3a0199459e5b9b3ed710733e"
|
||||
},
|
||||
"new_controls": {
|
||||
"source": "s5/repair44_controls.py",
|
||||
"synthetic_only": true,
|
||||
"paid_mutations_rejected": 17,
|
||||
"roster_name_sync_probe_regex_self_check": "PASS",
|
||||
"no_pyc": "PASS"
|
||||
},
|
||||
"not_run": [
|
||||
"AST and explicit build-cfile py_compile on every touched Python file (stopped before this stage)",
|
||||
"Check-only S1-S5 plan (stopped before this stage)",
|
||||
"Fresh native S1-S5 and independent Reader",
|
||||
"Fresh collect, full184, index, verify-only, registered validation, independent whole-unit review and integration"
|
||||
],
|
||||
"formal_acceptance": false
|
||||
},
|
||||
"compile_checks": [
|
||||
{
|
||||
"file": "docs/plans/original-completion-2026-10-02/execution/p04-01/checker_negative_fixtures.py",
|
||||
"AST_exit_code": 0,
|
||||
"py_compile_exit_code": 0,
|
||||
"cfile": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/11.pyc"
|
||||
},
|
||||
{
|
||||
"file": "docs/plans/original-completion-2026-10-02/execution/p04-01/p04_native_series.py",
|
||||
"AST_exit_code": 0,
|
||||
"py_compile_exit_code": 0,
|
||||
"cfile": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/12.pyc"
|
||||
},
|
||||
{
|
||||
"file": "docs/plans/original-completion-2026-10-02/execution/p04-01/s5/repair44_controls.py",
|
||||
"AST_exit_code": 0,
|
||||
"py_compile_exit_code": 0,
|
||||
"cfile": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/16.pyc"
|
||||
},
|
||||
{
|
||||
"file": "docs/plans/original-completion-2026-10-02/execution/p04-01/s5/run_s5_native.py",
|
||||
"AST_exit_code": 0,
|
||||
"py_compile_exit_code": 0,
|
||||
"cfile": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/17.pyc"
|
||||
},
|
||||
{
|
||||
"file": "docs/plans/original-completion-2026-10-02/execution/p04-01/s5/s5_order_adapter.py",
|
||||
"AST_exit_code": 0,
|
||||
"py_compile_exit_code": 0,
|
||||
"cfile": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/18.pyc"
|
||||
},
|
||||
{
|
||||
"file": "docs/plans/original-completion-2026-10-02/execution/p04-01/s5/s5_order_adapter_controls.py",
|
||||
"AST_exit_code": 0,
|
||||
"py_compile_exit_code": 0,
|
||||
"cfile": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/19.pyc"
|
||||
},
|
||||
{
|
||||
"file": "docs/plans/original-completion-2026-10-02/execution/p04-01/s5/s5_power_adapter.py",
|
||||
"AST_exit_code": 0,
|
||||
"py_compile_exit_code": 0,
|
||||
"cfile": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/20.pyc"
|
||||
},
|
||||
{
|
||||
"file": "tools/check_p04_order_evidence.py",
|
||||
"AST_exit_code": 0,
|
||||
"py_compile_exit_code": 0,
|
||||
"cfile": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/21.pyc"
|
||||
}
|
||||
],
|
||||
"uid": {
|
||||
"name": "UID-repair45",
|
||||
"argv": [
|
||||
"python3",
|
||||
"-B",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/s5/s5_uid_controls.py",
|
||||
"--project-root",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/build/owner-handoff/p04-after-p26-closure-r01/verified-m-engine-free-r45",
|
||||
"--scratch",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/uid"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"stdout": "{\"accepted\": false, \"Root-only\": true, \"controls\": [\"positive\", \"extra\", \"original\", \"owner\", \"existing-collision\", \"generated-collision\", \"no-newline\", \"crlf\", \"uppercase\", \"too-long\", \"hardlink\", \"symlink\", \"missing\", \"post-seal-reports\"], \"uid_helper\": {\"helper_path\": \"tools/run_p13_reference_tests.py\", \"helper_sha256\": \"9adc8aa2a7662df8dd70386ddb0bff34574e44d7411de3b6128ddd15eb24675c\", \"helper_bytes\": 13957, \"functions\": {\"uid_plan\": \"c9b094e12e3ace11b4c81365d134f7a218dd73ca8e6501f5f860acd2af0e980d\", \"uid_snapshot\": \"2987194db9bcfaf781e25808c755a9d8c8b87cb7f57f92a8f8e4292c2823c4e9\"}, \"shared_module\": \"tools/run_all_tests.py\", \"shared_sha256\": \"320ca668732b4ff72fc4449998af2327d4e5c527b06896740806aaf0487282b4\"}, \"scratch\": \"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/uid\"}\n",
|
||||
"stderr": ""
|
||||
},
|
||||
"no_pyc": {
|
||||
"exit_code": 0,
|
||||
"files": [],
|
||||
"scope": "execution/p04-01/**/*.pyc and tools/check_p04_order_evidence.py source only"
|
||||
},
|
||||
"check_only_initial_argument_refusals": [
|
||||
{
|
||||
"series": "s1",
|
||||
"argv": [
|
||||
"python3",
|
||||
"-B",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/s1/run_s1_native.py",
|
||||
"--project-root",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement",
|
||||
"--main",
|
||||
"c0ea009b28a7649aca6a433a1a24dc0be5e7ab81",
|
||||
"--submission",
|
||||
"eb94e1d7dbae3b0be84171b4ef0024b4f6b0ae97",
|
||||
"--check-only",
|
||||
"--plan",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s1-plan.json",
|
||||
"--output",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s1-native"
|
||||
],
|
||||
"exit_code": 2,
|
||||
"stdout": "",
|
||||
"stderr": "ValueError: fresh-q requires a full HEX40 triple without --historical-r17\n"
|
||||
},
|
||||
{
|
||||
"series": "s2a",
|
||||
"argv": [
|
||||
"python3",
|
||||
"-B",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/s2/run_s2a_native.py",
|
||||
"--project-root",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement",
|
||||
"--main",
|
||||
"c0ea009b28a7649aca6a433a1a24dc0be5e7ab81",
|
||||
"--submission",
|
||||
"eb94e1d7dbae3b0be84171b4ef0024b4f6b0ae97",
|
||||
"--check-only",
|
||||
"--plan",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s2a-plan.json",
|
||||
"--output",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s2a-native"
|
||||
],
|
||||
"exit_code": 2,
|
||||
"stdout": "",
|
||||
"stderr": "ValueError: fresh-q requires a full HEX40 triple without --historical-r17\n"
|
||||
},
|
||||
{
|
||||
"series": "s2b",
|
||||
"argv": [
|
||||
"python3",
|
||||
"-B",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/s2b/run_s2b_native.py",
|
||||
"--project-root",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement",
|
||||
"--main",
|
||||
"c0ea009b28a7649aca6a433a1a24dc0be5e7ab81",
|
||||
"--submission",
|
||||
"eb94e1d7dbae3b0be84171b4ef0024b4f6b0ae97",
|
||||
"--check-only",
|
||||
"--plan",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s2b-plan.json",
|
||||
"--output",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s2b-native"
|
||||
],
|
||||
"exit_code": 2,
|
||||
"stdout": "",
|
||||
"stderr": "ValueError: fresh-q requires a full HEX40 triple without --historical-r17\n"
|
||||
},
|
||||
{
|
||||
"series": "s3",
|
||||
"argv": [
|
||||
"python3",
|
||||
"-B",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/s3/run_s3_native.py",
|
||||
"--project-root",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement",
|
||||
"--main",
|
||||
"c0ea009b28a7649aca6a433a1a24dc0be5e7ab81",
|
||||
"--submission",
|
||||
"eb94e1d7dbae3b0be84171b4ef0024b4f6b0ae97",
|
||||
"--check-only",
|
||||
"--plan",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s3-plan.json",
|
||||
"--output",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s3-native"
|
||||
],
|
||||
"exit_code": 2,
|
||||
"stdout": "",
|
||||
"stderr": "ValueError: fresh-q requires a full HEX40 triple without --historical-r17\n"
|
||||
},
|
||||
{
|
||||
"series": "s4",
|
||||
"argv": [
|
||||
"python3",
|
||||
"-B",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/s4/run_s4_native.py",
|
||||
"--project-root",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement",
|
||||
"--main",
|
||||
"c0ea009b28a7649aca6a433a1a24dc0be5e7ab81",
|
||||
"--submission",
|
||||
"eb94e1d7dbae3b0be84171b4ef0024b4f6b0ae97",
|
||||
"--check-only",
|
||||
"--plan",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s4-plan.json",
|
||||
"--output",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s4-native"
|
||||
],
|
||||
"exit_code": 2,
|
||||
"stdout": "",
|
||||
"stderr": "ValueError: fresh-q requires a full HEX40 triple without --historical-r17\n"
|
||||
},
|
||||
{
|
||||
"series": "s5",
|
||||
"argv": [
|
||||
"python3",
|
||||
"-B",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/s5/run_s5_native.py",
|
||||
"--project-root",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement",
|
||||
"--main",
|
||||
"c0ea009b28a7649aca6a433a1a24dc0be5e7ab81",
|
||||
"--submission",
|
||||
"eb94e1d7dbae3b0be84171b4ef0024b4f6b0ae97",
|
||||
"--check-only",
|
||||
"--plan",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s5-plan.json",
|
||||
"--output",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s5-native"
|
||||
],
|
||||
"exit_code": 2,
|
||||
"stdout": "",
|
||||
"stderr": "ValueError: fresh-q requires a full HEX40 triple without --historical-r17\n"
|
||||
}
|
||||
],
|
||||
"check_only": {
|
||||
"tree_argument_scope": "Actual HEAD tree only; W is dirty, not a final Q or C claim",
|
||||
"results": [
|
||||
{
|
||||
"series": "s1",
|
||||
"argv": [
|
||||
"python3",
|
||||
"-B",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/s1/run_s1_native.py",
|
||||
"--project-root",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement",
|
||||
"--main",
|
||||
"c0ea009b28a7649aca6a433a1a24dc0be5e7ab81",
|
||||
"--submission",
|
||||
"eb94e1d7dbae3b0be84171b4ef0024b4f6b0ae97",
|
||||
"--check-only",
|
||||
"--plan",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s1-plan.json",
|
||||
"--output",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s1-native",
|
||||
"--tested-tree",
|
||||
"af5256155815214dc73620d5a2ad04cbcd139274"
|
||||
],
|
||||
"exit_code": 2,
|
||||
"stdout": "",
|
||||
"stderr": "ValueError: checkout is not clean\n"
|
||||
},
|
||||
{
|
||||
"series": "s2a",
|
||||
"argv": [
|
||||
"python3",
|
||||
"-B",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/s2/run_s2a_native.py",
|
||||
"--project-root",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement",
|
||||
"--main",
|
||||
"c0ea009b28a7649aca6a433a1a24dc0be5e7ab81",
|
||||
"--submission",
|
||||
"eb94e1d7dbae3b0be84171b4ef0024b4f6b0ae97",
|
||||
"--check-only",
|
||||
"--plan",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s2a-plan.json",
|
||||
"--output",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s2a-native",
|
||||
"--tested-tree",
|
||||
"af5256155815214dc73620d5a2ad04cbcd139274"
|
||||
],
|
||||
"exit_code": 2,
|
||||
"stdout": "",
|
||||
"stderr": "ValueError: checkout is not clean\n"
|
||||
},
|
||||
{
|
||||
"series": "s2b",
|
||||
"argv": [
|
||||
"python3",
|
||||
"-B",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/s2b/run_s2b_native.py",
|
||||
"--project-root",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement",
|
||||
"--main",
|
||||
"c0ea009b28a7649aca6a433a1a24dc0be5e7ab81",
|
||||
"--submission",
|
||||
"eb94e1d7dbae3b0be84171b4ef0024b4f6b0ae97",
|
||||
"--check-only",
|
||||
"--plan",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s2b-plan.json",
|
||||
"--output",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s2b-native",
|
||||
"--tested-tree",
|
||||
"af5256155815214dc73620d5a2ad04cbcd139274"
|
||||
],
|
||||
"exit_code": 2,
|
||||
"stdout": "",
|
||||
"stderr": "ValueError: checkout is not clean\n"
|
||||
},
|
||||
{
|
||||
"series": "s3",
|
||||
"argv": [
|
||||
"python3",
|
||||
"-B",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/s3/run_s3_native.py",
|
||||
"--project-root",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement",
|
||||
"--main",
|
||||
"c0ea009b28a7649aca6a433a1a24dc0be5e7ab81",
|
||||
"--submission",
|
||||
"eb94e1d7dbae3b0be84171b4ef0024b4f6b0ae97",
|
||||
"--check-only",
|
||||
"--plan",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s3-plan.json",
|
||||
"--output",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s3-native",
|
||||
"--tested-tree",
|
||||
"af5256155815214dc73620d5a2ad04cbcd139274"
|
||||
],
|
||||
"exit_code": 2,
|
||||
"stdout": "",
|
||||
"stderr": "ValueError: checkout is not clean\n"
|
||||
},
|
||||
{
|
||||
"series": "s4",
|
||||
"argv": [
|
||||
"python3",
|
||||
"-B",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/s4/run_s4_native.py",
|
||||
"--project-root",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement",
|
||||
"--main",
|
||||
"c0ea009b28a7649aca6a433a1a24dc0be5e7ab81",
|
||||
"--submission",
|
||||
"eb94e1d7dbae3b0be84171b4ef0024b4f6b0ae97",
|
||||
"--check-only",
|
||||
"--plan",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s4-plan.json",
|
||||
"--output",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s4-native",
|
||||
"--tested-tree",
|
||||
"af5256155815214dc73620d5a2ad04cbcd139274"
|
||||
],
|
||||
"exit_code": 2,
|
||||
"stdout": "",
|
||||
"stderr": "ValueError: checkout is not clean\n"
|
||||
},
|
||||
{
|
||||
"series": "s5",
|
||||
"argv": [
|
||||
"python3",
|
||||
"-B",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/s5/run_s5_native.py",
|
||||
"--project-root",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement",
|
||||
"--main",
|
||||
"c0ea009b28a7649aca6a433a1a24dc0be5e7ab81",
|
||||
"--submission",
|
||||
"eb94e1d7dbae3b0be84171b4ef0024b4f6b0ae97",
|
||||
"--check-only",
|
||||
"--plan",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s5-plan.json",
|
||||
"--output",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/repair45-1792309312161922000/s5-native",
|
||||
"--tested-tree",
|
||||
"af5256155815214dc73620d5a2ad04cbcd139274"
|
||||
],
|
||||
"exit_code": 2,
|
||||
"stdout": "",
|
||||
"stderr": "ValueError: checkout is not clean\n"
|
||||
}
|
||||
]
|
||||
},
|
||||
"retained_passes": "REPAIR44 roster positives/negatives, all-consumer name-sync, probe_guard regex self-check, 17 paid-before-incident mutations; no source changed in REPAIR45",
|
||||
"pure_results": {
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/REPAIR44_PURE_RESULTS.json",
|
||||
"sha256": "569063467403bd004ff5b342486a822bba430f6e81a3e8081ed44cb50d23e5dd"
|
||||
},
|
||||
"formal_acceptance": false,
|
||||
"not_run": [
|
||||
"Clean exact-Q check-only after automatic submission (Root)",
|
||||
"Fresh native S1-S4 and ten S5 cases; independent Reader and fresh order positives",
|
||||
"Fresh adapters/collect/full184/index/verify-only/registered validation/independent whole-unit review/integration"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,468 @@
|
||||
# REPAIR41 history and REPAIR45 status
|
||||
|
||||
## REPAIR45 — implementation ready for submission
|
||||
|
||||
The supplied byte-verified M engine-free context resolved the REPAIR44 UID dependency.
|
||||
UID controls: all 14 PASS, exit 0. Both supplied helper SHA-256 pins match exactly.
|
||||
AST and explicit fresh BUILD-cfile py_compile passed for all eight touched Python
|
||||
files, with python3 -B and PYTHONDONTWRITEBYTECODE=1. No source was changed in
|
||||
REPAIR45; retained passing controls were not rerun. The no-pyc static check
|
||||
passed again (exit 0); generated compile files exist only under allocated BUILD.
|
||||
The prior UID failure remains recorded as failed, not replaced with a PASS.
|
||||
|
||||
Sequential check-only S1, S2a, S2b, S3, S4 and S5 each returned exit 2:
|
||||
`ValueError: checkout is not clean`
|
||||
The initial missing-tested-tree argument refusals are also retained. The later
|
||||
attempt used the actual HEAD tree solely as a guard input, not a claim of final
|
||||
Q, clean source or C. No engine started. Root executes clean exact-Q check-only
|
||||
after automatic submission. Full argv/stdout/stderr and compile paths are in
|
||||
REPAIR41_STATIC_CHECKS.json. No Git writes, Runner or native run were performed.
|
||||
|
||||
Implementation is ready; the whole original unit remains incomplete and P04
|
||||
credit remains 0. Deferred Root conditions, in order: freeze final Q; affected
|
||||
pure controls; clean exact-Q check-only; capacity check; one heavy lease with
|
||||
fresh native S1–S4 and all ten S5 cases; independent Reader and adapters on actual
|
||||
raw (including fresh Reader order positives); fresh collect; full 184 suite once;
|
||||
index; --verify-only; registered validation before review; independent whole-unit
|
||||
Opus review; normal prepare / exact C / integration / final / Root DB join /
|
||||
ledger / main push. Native Reader and acceptance remain pending.
|
||||
patience_release stays pending unless fresh S3 raw shows it. Product freeze,
|
||||
M, allowed paths, REQUIRED membership/thresholds, all seven domains, G1/G2,
|
||||
R40–R44 and the existing one-trailing-LF spec protocol remain unchanged.
|
||||
|
||||
|
||||
## REPAIR44
|
||||
|
||||
**Worker stopped: unreadable required check dependency.** The UID pure control
|
||||
cannot read `/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-root-q-r43-eb94e1d7/tools/run_all_tests.py`:
|
||||
`PermissionError: [Errno 1] Operation not permitted`. REPAIR44 explicitly requires
|
||||
stopping for an actually unreadable file. No permission bypass or alternate
|
||||
positive is claimed. REPAIR44_PURE_RESULTS.json retains the failed invocation.
|
||||
Eleven other pure programs completed successfully (including the new 17 paid
|
||||
mutation negatives and roster/name-sync/regex/no-pyc controls). The already
|
||||
launched sequential batch finished power-adapter and repair44 controls after
|
||||
the UID failure; these results are recorded within their limited scope.
|
||||
AST/build-cfile compilation of all touched Python files and check-only S1–S5
|
||||
were not reached. The implementation below is work in progress, not a completed
|
||||
REPAIR44 submission. Resume requires a readable verified check dependency.
|
||||
|
||||
Same original unit, W and submitted S=eb94e1d7dbae3b0be84171b4ef0024b4f6b0ae97;
|
||||
M=c0ea009b28a7649aca6a433a1a24dc0be5e7ab81. No reset or new counted work.
|
||||
Original whole unit remains incomplete, formal 16/88, P04 credit 0.
|
||||
R43 import/parse/Writer passed (2749/0), then run_s5_native.py:525 compared
|
||||
sorted receipt branches to insertion-order CASES. G/H preceded E/F; all nine
|
||||
cases were present but Reader never started. R43 native remains FAILED,
|
||||
alongside r35/r36/R40 native. Q37 remains its own-version local PASS only.
|
||||
Seven Writer-only typed derivers/G1/G2 and twelve pure/six check-only passes
|
||||
are not independent Reader, replay or acceptance.
|
||||
|
||||
The canonical wrapper roster is now sorted(CASE_TABLE). LABELS, SLOTS and
|
||||
receipt comparisons derive from it, with exact lengths, uniqueness and set
|
||||
membership. Reader independently enumerates CASE_TABLE. The new pure controls
|
||||
reproduce the old failure, accept insertion/reverse order and reject missing,
|
||||
duplicate or unknown cases and missing/extra/duplicate slots. The ten cases are
|
||||
`S5A_PURE`, `S5B_DEPENDENCY`, `S5C_DESTRUCTION_COMMAND`, `S5D_DESTRUCTION_RAID`,
|
||||
`S5D_IN_FLIGHT`, `S5D_PAID_BEFORE_INCIDENT`, `S5E_MIDNIGHT`, `S5F_EXIT`,
|
||||
`S5G_SHIFT_1080`, `S5H_PAUSED_MIDNIGHT`.
|
||||
|
||||
New fixture: primary queues at N-duration-1, starts at N-duration and completes
|
||||
at N. Secondary queues at N-2 and starts at N-1, holding its own reservation;
|
||||
two meals are stocked through _stock. Cafeteria definition capacity=12 (line22),
|
||||
staff_min=2 (line18), base_service_minutes=45 (line24), base_price=25 (line26),
|
||||
inventory_inputs=one meal (line27), exact file sha256
|
||||
86d540fe2d78b9dcdbe5a0af6e4a001f4cec54934636ed01deb25a943c79128a.
|
||||
Staff setup derives staff_min; prices/duration subsequently bind to the primary
|
||||
service snapshot. Capacity permits the concurrent secondary; no product value
|
||||
is changed. Seed 420558 is a distinct deterministic fixture seed following the
|
||||
existing 42055x private-QA family, not a product RNG policy change.
|
||||
|
||||
M source proof (full bodies, file hashes and line ranges in
|
||||
REPAIR44_SOURCE_FACTS.json): simulation_kernel.advance_one_minute line122,
|
||||
body sha b9587ef722d8c8640248025462819374ae5eca1c3d8bbe600b6bc9c328567777,
|
||||
runs FACILITY_COMPLETION, VITALS_AND_ENVIRONMENT, INCIDENTS_AND_EVENTS,
|
||||
FACILITY_QUEUES in that order. _run_phase line236, body sha
|
||||
52461eeb288892a4bb4b6a99570185af08a30758ef88b0046a911baaa6f318e1,
|
||||
emits phase-start observations before handlers; therefore completion is
|
||||
observed as ACTIVE at FACILITY_COMPLETION start and COMPLETED with one receipt
|
||||
at VITALS_AND_ENVIRONMENT start. Receipt phase is FACILITY_COMPLETION.
|
||||
Runtime registers the handlers at lines400–428. _advance_relationship_events
|
||||
line8637, body sha 20ca7abfdcbbc914f91545c3eded46e3e87035ff4153541ffcbf92471b02b03f,
|
||||
starts the queued automatic event in INCIDENTS_AND_EVENTS. Public registration
|
||||
and enqueue functions are at lines6878/6887 (full hashes in the source facts).
|
||||
_validate_event_action line9991, body sha
|
||||
83e0cce3b59244440b11acdee6f87dd521859701769b1689ff2775db5c92c5f5,
|
||||
allows SET_FACILITY_STATE for this non-Defense-owned facility. _apply_event_action
|
||||
line10040, body sha d79e7aca02eed06f500ffc632c6160cd80d76c3d7c5c90dc097f71b60380d365,
|
||||
calls set_operational_status with durability=0 and suspension_reason=DESTROYED.
|
||||
The fixture never registers the busy facility as a Defense asset and expects no
|
||||
guard. FacilityService.start_next_service line449 (body sha
|
||||
2eb1cf1226fb1496b6b96c39184ad6a767b4fde747923df599097372435ffa4c) checks the
|
||||
actual instance capacity and starts secondary work with ordinary active staff.
|
||||
ServiceInstance.mark_failed line128 stores completed_at for failure timing,
|
||||
body sha 178c6879e64385f0e3ff99fa98ae6ceb4dc67f6c2c981b0effb229f5d4d647fa.
|
||||
|
||||
The independent adapter retains payment/release/sales/phase helpers. It proves
|
||||
the pre-completion state, single typed receipt/Runtime-ledger/idempotency joins,
|
||||
surviving identical boundary/held sale, one primary wallet debit, financial day
|
||||
from ledger absolute_minute, positive pre-event durability and BROKEN/DESTROYED
|
||||
afterward. Secondary stays active/reserved through N and fails/releases once at
|
||||
N+1 with unchanged wallet, no remaining request/reservation or generated service.
|
||||
The checker adds this raw-recomputed sub-gate inside D05-P04-DESTRUCTION.
|
||||
All previous gates and REQUIRED names/thresholds stay intact. Pure mutations
|
||||
cover every requested failure, including AFTER-copy; they are serializer units,
|
||||
not substitutes for fresh native Writer/Reader raw.
|
||||
|
||||
The six explicitly named __pycache__/*.repair43.pyc were read, byte sizes,
|
||||
headers and SHA-256 inspected, then deleted; no source/evidence was deleted.
|
||||
Execution-scope .gitignore now excludes __pycache__/ and *.pyc. Python checks
|
||||
use -B and explicit py_compile cfile under allocated build. The static control
|
||||
rejects any remaining *.pyc in the allowed execution tree.
|
||||
|
||||
All existing R40–R43 cases, G1/G2 shadow oracle and negatives, R41 diagnostic,
|
||||
historical/fresh S4 pin separation, 43+ controls and the Step 0 table below are
|
||||
preserved. Product source/values/guards, permissions, billing, all seven domains
|
||||
and 15+EV thresholds are unchanged. Approval raw SHA-256 exactly matches
|
||||
cd365ded1b777a0327d090709f0a4161f5005562819183455d9f2e106fba3e96.
|
||||
The spec raw is 7000 bytes, sha
|
||||
d28aadb044633f7d804de5a92c8d4c4a7438dfbf44c3243dca978951f4def25f;
|
||||
stripping exactly its one final LF gives the registered
|
||||
9ec722e7dfb0bee178d291624a026420c08412574e238bba1fde012c7a6f7881.
|
||||
This is the existing spec-only EOF protocol; all other hashes compare raw bytes.
|
||||
REPAIR41_STATIC_CHECKS.json records actual worker checks only. Native Reader,
|
||||
formal acceptance and patience_release remain pending (the last needs fresh S3).
|
||||
Root freezes final Q and follows the twelve steps in s5/S5_ROOT_RUN.md.
|
||||
|
||||
## 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
+169
File diff suppressed because one or more lines are too long
+131
@@ -0,0 +1,131 @@
|
||||
{
|
||||
"M": "c0ea009b28a7649aca6a433a1a24dc0be5e7ab81",
|
||||
"files": {
|
||||
"scripts/core/simulation_kernel.gd": {
|
||||
"sha256": "341c0c878c4894adbac628d0db6362ff69fc3347bdd9e61e50936e15dc2d1edb",
|
||||
"bytes": 7602,
|
||||
"functions": {
|
||||
"advance_one_minute": {
|
||||
"line": 122,
|
||||
"end_line": 158,
|
||||
"sha256": "b9587ef722d8c8640248025462819374ae5eca1c3d8bbe600b6bc9c328567777",
|
||||
"body": "func advance_one_minute() -> void:\n\t_abort_current_tick_requested = false\n\t_last_tick_advanced = false\n\ttick_started.emit(absolute_minute)\n\t_run_phase(TickPhase.APPLY_COMMANDS)\n\t# A Runtime gate can reject the tick before the Clock changes. This is\n\t# distinct from an ordinary pause raised by a command that already committed\n\t# for the upcoming minute.\n\tif _abort_current_tick_requested:\n\t\t_abort_current_tick_requested = false\n\t\treturn\n\n\tvar previous_absolute_minute := absolute_minute\n\tabsolute_minute += 1\n\t_sync_calendar_fields()\n\t_handle_time_boundaries(previous_absolute_minute)\n\t_run_phase(TickPhase.TIME_BOUNDARIES)\n\n\tfor phase in [\n\t\tTickPhase.MANA,\n\t\tTickPhase.CONSTRUCTION,\n\t\tTickPhase.LOGISTICS,\n\t\tTickPhase.FACILITY_COMPLETION,\n\t\tTickPhase.VITALS_AND_ENVIRONMENT,\n\t\tTickPhase.INCIDENTS_AND_EVENTS,\n\t\tTickPhase.FACILITY_QUEUES,\n\t\tTickPhase.AI_DECISIONS,\n\t\tTickPhase.PUBLISH_SNAPSHOT,\n\t]:\n\t\t_run_phase(phase)\n\n\tsnapshot_version += 1\n\ttick_completed.emit(absolute_minute)\n\t_emit_current_time()\n\t_abort_current_tick_requested = false\n\t_last_tick_advanced = true\n\n"
|
||||
},
|
||||
"_run_phase": {
|
||||
"line": 236,
|
||||
"end_line": 249,
|
||||
"sha256": "52461eeb288892a4bb4b6a99570185af08a30758ef88b0046a911baaa6f318e1",
|
||||
"body": "func _run_phase(phase: TickPhase) -> void:\n\ttick_phase_started.emit(phase, absolute_minute)\n\tif not _phase_handlers.has(phase):\n\t\treturn\n\tvar handlers: Dictionary = _phase_handlers[phase]\n\tvar handler_ids: Array = handlers.keys()\n\thandler_ids.sort_custom(func(left: Variant, right: Variant) -> bool:\n\t\treturn String(left) < String(right)\n\t)\n\tfor handler_id: Variant in handler_ids:\n\t\tvar callback: Callable = handlers[handler_id]\n\t\tif callback.is_valid():\n\t\t\tcallback.call(absolute_minute)\n\n"
|
||||
}
|
||||
}
|
||||
},
|
||||
"autoload/simulation_runtime.gd": {
|
||||
"sha256": "45514aea9367ff678f4dc05166bb9b58121f240d4b5565edeb7ab258e3ded8e0",
|
||||
"bytes": 616434,
|
||||
"functions": {
|
||||
"_execute_register_event_definition": {
|
||||
"line": 6878,
|
||||
"end_line": 6886,
|
||||
"sha256": "6c271786ca52115a233f9c3ad2d19f93ef101f2da533672118165757aac3347d",
|
||||
"body": "func _execute_register_event_definition(command: SimulationCommand) -> CommandResult:\n\tvar raw_definition: Variant = command.payload.get(&\"definition\", command.payload.get(\"definition\", null))\n\tvar definition := EventDefinition.from_variant(raw_definition)\n\tif definition == null:\n\t\treturn CommandResult.failed(CommandResult.Code.INVALID_PAYLOAD, command.command_id, \"Event definition is malformed.\")\n\tvar result := event_service.register_definition(definition)\n\tresult.command_id = command.command_id\n\treturn result\n\n"
|
||||
},
|
||||
"_execute_enqueue_event": {
|
||||
"line": 6887,
|
||||
"end_line": 6895,
|
||||
"sha256": "5e5d5fb5e225dbcb09aeb2addb92c0011965c7e8f6b12cda91ca05d98e240c08",
|
||||
"body": "func _execute_enqueue_event(command: SimulationCommand) -> CommandResult:\n\tvar event_id := StringName(command.payload.get(&\"event_id\", command.payload.get(\"event_id\", \"\")))\n\tvar actor_ids := _name_array(command.payload.get(&\"actor_ids\", command.payload.get(\"actor_ids\", [])))\n\tvar raw_options: Variant = command.payload.get(&\"options\", command.payload.get(\"options\", {}))\n\tvar options: Dictionary = raw_options.duplicate(true) if raw_options is Dictionary else {}\n\tvar result := event_service.enqueue_candidate(event_id, actor_ids, _runtime_event_minute(), options)\n\tresult.command_id = command.command_id\n\treturn result\n\n"
|
||||
},
|
||||
"_advance_relationship_events": {
|
||||
"line": 8637,
|
||||
"end_line": 8655,
|
||||
"sha256": "20ca7abfdcbbc914f91545c3eded46e3e87035ff4153541ffcbf92471b02b03f",
|
||||
"body": "func _advance_relationship_events(absolute_minute: int) -> void:\n\tif _operations_tick_blocked:\n\t\treturn\n\tif _operations_morning_already_processed(absolute_minute):\n\t\treturn\n\tevent_service.process_expired(absolute_minute)\n\tevent_service.audit_actor_availability(absolute_minute)\n\t_enqueue_pending_relationship_candidates()\n\tif event_service.get_foreground_instance() == null:\n\t\tvar started := event_service.start_next_event(\n\t\t\tabsolute_minute,\n\t\t\t_build_event_context(absolute_minute)\n\t\t)\n\t\tif started.is_success() and bool(started.details.get(&\"waiting_for_choice\", false)):\n\t\t\t_clock.set_paused(true)\n\tif event_service.pause_requested:\n\t\t_clock.set_paused(true)\n\n\n"
|
||||
},
|
||||
"_validate_event_action": {
|
||||
"line": 9991,
|
||||
"end_line": 10039,
|
||||
"sha256": "83e0cce3b59244440b11acdee6f87dd521859701769b1689ff2775db5c92c5f5",
|
||||
"body": "func _validate_event_action(action: EventAction) -> Dictionary:\n\tmatch action.type:\n\t\tEventAction.Type.ADD_LEDGER_ENTRY:\n\t\t\tvar from_account := StringName(action.payload.get(&\"from_account\", action.payload.get(\"from_account\", PLAYER_CASH_ACCOUNT)))\n\t\t\tvar to_account := StringName(action.payload.get(&\"to_account\", action.payload.get(\"to_account\", OPERATING_EXPENSE_ACCOUNT)))\n\t\t\tvar amount := int(action.payload.get(&\"amount\", action.payload.get(\"amount\", 0)))\n\t\t\tif amount <= 0 or not economy_service.has_account(from_account) or not economy_service.has_account(to_account):\n\t\t\t\treturn {&\"ok\": false, &\"error\": \"Ledger Action has invalid accounts or amount.\"}\n\t\t\tif not economy_service.account_allows_negative(from_account) and economy_service.get_balance(from_account) < amount:\n\t\t\t\treturn {&\"ok\": false, &\"error\": \"Ledger Action source cannot fund the amount.\"}\n\t\tEventAction.Type.ADD_OR_REMOVE_ITEM:\n\t\t\tvar inventory_id := StringName(action.payload.get(&\"inventory_id\", action.payload.get(\"inventory_id\", \"\")))\n\t\t\tvar item_id := StringName(action.payload.get(&\"item_id\", action.payload.get(\"item_id\", \"\")))\n\t\t\tvar delta := int(action.payload.get(&\"quantity_delta\", action.payload.get(\"quantity_delta\", 0)))\n\t\t\tif inventory_id.is_empty() or item_id.is_empty() or delta == 0:\n\t\t\t\treturn {&\"ok\": false, &\"error\": \"Inventory Action requires inventory, item and non-zero delta.\"}\n\t\t\tif delta < 0 and inventory_service.available_quantity(inventory_id, item_id) < -delta:\n\t\t\t\treturn {&\"ok\": false, &\"error\": \"Inventory Action stock is unavailable.\"}\n\t\tEventAction.Type.CREATE_TASK:\n\t\t\tif StringName(action.payload.get(&\"task_type\", action.payload.get(\"task_type\", \"\"))).is_empty():\n\t\t\t\treturn {&\"ok\": false, &\"error\": \"CREATE_TASK requires task_type.\"}\n\t\tEventAction.Type.SET_FACILITY_STATE:\n\t\t\tvar facility_id := StringName(action.payload.get(&\"facility_id\", action.payload.get(\"facility_id\", \"\")))\n\t\t\tvar conditions_value: Variant = action.payload.get(&\"conditions\", action.payload.get(\"conditions\", null))\n\t\t\tif not facility_service.has_instance(facility_id) or not conditions_value is Dictionary:\n\t\t\t\treturn {&\"ok\": false, &\"error\": \"Facility Action target or conditions are invalid.\"}\n\t\t\tvar defense_owner: StringName = _defense_lock_owner(facility_id, &\"ASSET\")\n\t\t\tif not defense_owner.is_empty() \\\n\t\t\t\t\tand (conditions_value.has(&\"durability\") or conditions_value.has(\"durability\")):\n\t\t\t\treturn {&\"ok\": false, &\"error\": \"Event Action cannot mutate Defense-owned Facility durability.\"}\n\t\tEventAction.Type.TELEPORT_ENTITY_FOR_RECOVERY:\n\t\t\tvar entity_id := StringName(action.payload.get(&\"entity_id\", action.payload.get(\"entity_id\", \"\")))\n\t\t\tvar cell_value: Variant = _parse_world_cell(\n\t\t\t\taction.payload.get(&\"cell\", action.payload.get(\"cell\", null))\n\t\t\t)\n\t\t\tif not _event_actor_exists(entity_id) or cell_value == null:\n\t\t\t\treturn {&\"ok\": false, &\"error\": \"Recovery teleport target is invalid.\"}\n\t\t\tvar target_cell: Vector3i = cell_value\n\t\t\tvar traffic := path_service.get_cell_traffic(target_cell)\n\t\t\tvar actor_id := (\n\t\t\t\t_guest_path_actor_id(entity_id)\n\t\t\t\tif guest_service.has_guest(entity_id)\n\t\t\t\telse _staff_path_actor_id(entity_id)\n\t\t\t)\n\t\t\tif traffic.is_empty() or bool(traffic.get(&\"temporary_block\", false)) \\\n\t\t\t\t\tor not path_service.has_actor_projection(actor_id):\n\t\t\t\treturn {&\"ok\": false, &\"error\": \"Recovery teleport requires a projected actor and an unblocked walkable target.\"}\n\treturn {&\"ok\": true}\n\n"
|
||||
},
|
||||
"_apply_event_action": {
|
||||
"line": 10040,
|
||||
"end_line": 10123,
|
||||
"sha256": "d79e7aca02eed06f500ffc632c6160cd80d76c3d7c5c90dc097f71b60380d365",
|
||||
"body": "func _apply_event_action(action: EventAction, context: Dictionary) -> Dictionary:\n\tvar instance_id := StringName(context.get(&\"event_instance_id\", \"\"))\n\tmatch action.type:\n\t\tEventAction.Type.CREATE_DEFENSE_RAID:\n\t\t\treturn _apply_event_defense_raid(action, context)\n\t\tEventAction.Type.ADD_LEDGER_ENTRY:\n\t\t\tvar from_account := StringName(action.payload.get(&\"from_account\", action.payload.get(\"from_account\", PLAYER_CASH_ACCOUNT)))\n\t\t\tvar to_account := StringName(action.payload.get(&\"to_account\", action.payload.get(\"to_account\", OPERATING_EXPENSE_ACCOUNT)))\n\t\t\tvar amount := int(action.payload.get(&\"amount\", action.payload.get(\"amount\", 0)))\n\t\t\tvar result := economy_service.transfer(\n\t\t\t\tfrom_account, to_account, amount, _runtime_event_minute(),\n\t\t\t\t&\"EVENT_ACTION\", instance_id,\n\t\t\t\tStringName(\"event.action.%s.%s\" % [instance_id, action.action_id])\n\t\t\t)\n\t\t\treturn {&\"ok\": result.is_success(), &\"error\": result.message}\n\t\tEventAction.Type.ADD_OR_REMOVE_ITEM:\n\t\t\tvar inventory_id := StringName(action.payload.get(&\"inventory_id\", action.payload.get(\"inventory_id\", \"\")))\n\t\t\tvar item_id := StringName(action.payload.get(&\"item_id\", action.payload.get(\"item_id\", \"\")))\n\t\t\tvar delta := int(action.payload.get(&\"quantity_delta\", action.payload.get(\"quantity_delta\", 0)))\n\t\t\tif delta > 0:\n\t\t\t\tvar added := inventory_service.add_stack(inventory_id, item_id, delta, 100, -1, _runtime_event_minute())\n\t\t\t\treturn {&\"ok\": bool(added.get(&\"ok\", false)), &\"error\": added.get(&\"message\", \"\")}\n\t\t\tvar reserved := inventory_service.reserve_item(\n\t\t\t\tinventory_id, item_id, -delta, instance_id, &\"event_action\",\n\t\t\t\t_runtime_event_minute(), _runtime_event_minute() + 1,\n\t\t\t\tStringName(\"event.item.reserve.%s.%s\" % [instance_id, action.action_id])\n\t\t\t)\n\t\t\tif not bool(reserved.get(&\"ok\", false)):\n\t\t\t\treturn {&\"ok\": false, &\"error\": reserved.get(&\"message\", \"Item reservation failed.\")}\n\t\t\tvar consumed := inventory_service.consume_reservations(\n\t\t\t\t_name_array(reserved.get(&\"reservation_ids\", [])),\n\t\t\t\tStringName(\"event.item.consume.%s.%s\" % [instance_id, action.action_id]),\n\t\t\t\t_runtime_event_minute()\n\t\t\t)\n\t\t\treturn {&\"ok\": bool(consumed.get(&\"ok\", false)), &\"error\": consumed.get(&\"message\", \"\")}\n\t\tEventAction.Type.CREATE_TASK:\n\t\t\tvar raw_options: Variant = action.payload.get(&\"options\", action.payload.get(\"options\", {}))\n\t\t\tvar options: Dictionary = raw_options.duplicate(true) if raw_options is Dictionary else {}\n\t\t\tvar created := staff_service.create_task(\n\t\t\t\tStringName(action.payload.get(&\"task_type\", action.payload.get(\"task_type\", \"\"))),\n\t\t\t\tint(action.payload.get(&\"priority\", action.payload.get(\"priority\", 50))),\n\t\t\t\t_runtime_event_minute(),\n\t\t\t\toptions,\n\t\t\t\tStringName(action.payload.get(&\"task_id\", action.payload.get(\"task_id\", \"\")))\n\t\t\t)\n\t\t\treturn {&\"ok\": created.is_success(), &\"error\": created.message}\n\t\tEventAction.Type.SET_FACILITY_STATE:\n\t\t\tvar updated := facility_service.set_operational_status(\n\t\t\t\tStringName(action.payload.get(&\"facility_id\", action.payload.get(\"facility_id\", \"\"))),\n\t\t\t\taction.payload.get(&\"conditions\", action.payload.get(\"conditions\", {})),\n\t\t\t\t_runtime_event_minute()\n\t\t\t)\n\t\t\treturn {&\"ok\": updated.is_success(), &\"error\": updated.message}\n\t\tEventAction.Type.TELEPORT_ENTITY_FOR_RECOVERY:\n\t\t\tvar entity_id := StringName(action.payload.get(&\"entity_id\", action.payload.get(\"entity_id\", \"\")))\n\t\t\tvar cell: Vector3i = _parse_world_cell(action.payload.get(&\"cell\", action.payload.get(\"cell\", null)))\n\t\t\tvar guest := guest_service.get_guest(entity_id)\n\t\t\tvar actor_id: StringName\n\t\t\tvar moved := false\n\t\t\tif guest != null:\n\t\t\t\tactor_id = _guest_path_actor_id(entity_id)\n\t\t\t\tmoved = guest_service.record_path_success(\n\t\t\t\t\tentity_id, cell, _runtime_event_minute()\n\t\t\t\t)\n\t\t\telse:\n\t\t\t\tvar staff := staff_service.get_staff(entity_id)\n\t\t\t\tactor_id = _staff_path_actor_id(entity_id)\n\t\t\t\tstaff.current_cell = cell\n\t\t\t\tmoved = true\n\t\t\tif not moved or not path_service.project_actor_position(\n\t\t\t\tactor_id, cell, _runtime_event_minute()\n\t\t\t):\n\t\t\t\treturn {&\"ok\": false, &\"error\": \"Recovery teleport could not commit its Path projection.\"}\n\t\t\t_movement_credits[actor_id] = {\n\t\t\t\t&\"credit\": 0,\n\t\t\t\t&\"updated_at\": _runtime_event_minute(),\n\t\t\t}\n\t\t\t_publish_actor_event(&\"ENTITY_RECOVERY_TELEPORTED\", &\"event_service\", [entity_id, actor_id], {\n\t\t\t\t&\"cell\": cell,\n\t\t\t\t&\"path_actor_id\": actor_id,\n\t\t\t})\n\t\t\treturn {&\"ok\": true}\n\treturn {&\"ok\": false, &\"error\": \"Unsupported Event Action.\"}\n\n"
|
||||
},
|
||||
"_advance_facilities": {
|
||||
"line": 8504,
|
||||
"end_line": 8509,
|
||||
"sha256": "f1efd0c23bdd60d1ef19a21879640b53b8b4d88844c0c881fe7cd724387ec274",
|
||||
"body": "func _advance_facilities(absolute_minute: int) -> void:\n\tif _operations_tick_blocked:\n\t\treturn\n\tfacility_service.advance_one_minute(absolute_minute)\n\tkitchen_production.advance_one_minute(absolute_minute)\n\n"
|
||||
},
|
||||
"_process_tick_commands": {
|
||||
"line": 5765,
|
||||
"end_line": 5775,
|
||||
"sha256": "9de66a4bb84b12304300d49085f44546412319bd4aee91e67b61becf97e50294",
|
||||
"body": "func _process_tick_commands(current_absolute_minute: int) -> void:\n\tif _operations_enabled:\n\t\t_operations_tick_blocked = _operations_should_block_tick()\n\t\tif _operations_tick_blocked:\n\t\t\t_clock.set_paused(true)\n\t\t\t_clock.request_current_tick_abort()\n\t\t\treturn\n\t_process_commands(current_absolute_minute + 1)\n\t_synchronize_operations_population()\n\n\n"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scripts/facility/facility_service.gd": {
|
||||
"sha256": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77",
|
||||
"bytes": 44951,
|
||||
"functions": {
|
||||
"start_next_service": {
|
||||
"line": 449,
|
||||
"end_line": 524,
|
||||
"sha256": "2eb1cf1226fb1496b6b96c39184ad6a767b4fde747923df599097372435ffa4c",
|
||||
"body": "func start_next_service(\n\tinstance_id: StringName,\n\tabsolute_minute: int = -1,\n\tvalidator: Callable = Callable()\n) -> CommandResult:\n\tvar instance := get_instance(instance_id)\n\tif instance == null:\n\t\treturn _not_found(\"Facility instance\", instance_id)\n\tvar minute := _resolve_minute(absolute_minute)\n\t_resolve_operating_dependency(instance_id, minute, {}, {})\n\tinstance.apply_pending_policy(minute)\n\tvar old_state := instance.state\n\tinstance.evaluate_state(minute)\n\t_emit_state_change(instance, old_state)\n\tif not instance.can_start_service(minute):\n\t\treturn _invalid(\n\t\t\t\"Facility cannot start a service in its current state.\",\n\t\t\t{\n\t\t\t\t&\"instance_id\": instance_id,\n\t\t\t\t&\"state\": FacilityInstanceType.State.keys()[instance.state],\n\t\t\t\t&\"reasons\": instance.state_reasons.duplicate(),\n\t\t\t}\n\t\t)\n\t_cleanup_missing_queue_requests(instance)\n\tif instance.queue_entries.is_empty():\n\t\treturn _not_found(\"Queued service request\", &\"\")\n\tvar request := get_request(instance.queue_entries[0])\n\tif request == null:\n\t\treturn _invalid(\"The next queue entry is corrupt.\")\n\tif not instance.can_accept_customers(request.guest_ids):\n\t\treturn _invalid(\"Simultaneous customer limit reached.\", {&\"reason\": &\"CUSTOMER_CAPACITY\"})\n\tvar effective_validator := validator if validator.is_valid() else _start_validator\n\tvar callback_failure := _run_boundary_callback(\n\t\teffective_validator,\n\t\t[request, instance, minute],\n\t\t\"Service start validation failed.\",\n\t\tCommandResultType.Code.VALIDATION_FAILED\n\t)\n\tif callback_failure != null:\n\t\tcallback_failure.details[&\"request_id\"] = request.request_id\n\t\tcallback_failure.details[&\"instance_id\"] = instance_id\n\t\treturn callback_failure\n\n\tvar service_id := _next_service_id()\n\tvar service := ServiceInstanceType.new().configure(\n\t\tservice_id,\n\t\trequest.request_id,\n\t\tinstance_id,\n\t\tminute,\n\t\trequest.service_minutes if request.service_minutes > 0 else instance.base_service_minutes,\n\t\trequest.guest_ids,\n\t\tinstance.active_staff_ids,\n\t\t{\n\t\t\t&\"quality_snapshot\": request.expected_quality,\n\t\t\t&\"price_snapshot\": request.quoted_price,\n\t\t\t&\"policy_snapshot\": request.policy_snapshot,\n\t\t\t&\"inventory_reservations\": request.reserved_inventory_ids,\n\t\t}\n\t)\n\tinstance.queue_entries.remove_at(0)\n\t# Report this start's service index, independent of customer headcount and callbacks.\n\tvar slot := instance.active_services.size()\n\tinstance.active_services[service_id] = service\n\t_known_service_ids[service_id] = true\n\t_increment_stat(instance.statistics_today, &\"services_started\")\n\t_increment_stat(instance.lifetime_statistics, &\"services_started\")\n\tservice_started.emit(service)\n\tlast_error = \"\"\n\treturn _success({\n\t\t&\"instance_id\": instance_id,\n\t\t&\"request_id\": request.request_id,\n\t\t&\"service_id\": service_id,\n\t\t&\"slot\": slot,\n\t})\n\n\n"
|
||||
},
|
||||
"_fail_service": {
|
||||
"line": 933,
|
||||
"end_line": 947,
|
||||
"sha256": "56f61b255217bddb4c8a6ad3af6ed1f9edc3b6a6e928dacf2105be6698936de5",
|
||||
"body": "func _fail_service(\n\tinstance: FacilityInstance,\n\tservice: ServiceInstance,\n\treason: StringName,\n\tabsolute_minute: int\n) -> void:\n\tservice.mark_failed(reason, absolute_minute)\n\tinstance.active_services.erase(service.service_id)\n\t_requests.erase(service.request_id)\n\t_service_history[service.service_id] = service\n\t_increment_stat(instance.statistics_today, &\"services_failed\")\n\t_increment_stat(instance.lifetime_statistics, &\"services_failed\")\n\tservice_failed.emit(service, reason)\n\n\n"
|
||||
},
|
||||
"set_operational_status": {
|
||||
"line": 132,
|
||||
"end_line": 177,
|
||||
"sha256": "10275169f4a71ad490c432443c34068d1951f099e11132b3c18b48647e7845c8",
|
||||
"body": "func set_operational_status(\n\tinstance_id: StringName,\n\tconditions: Dictionary,\n\tabsolute_minute: int = -1\n) -> CommandResult:\n\tvar instance := get_instance(instance_id)\n\tif instance == null:\n\t\treturn _not_found(\"Facility instance\", instance_id)\n\tvar old_state := instance.state\n\tif _has_value(conditions, &\"related_facility_id\"):\n\t\tvar raw_related: Variant = _value(conditions, &\"related_facility_id\", null)\n\t\tif typeof(raw_related) not in [TYPE_STRING, TYPE_STRING_NAME]:\n\t\t\treturn _invalid(\"Related facility must be one facility ID.\")\n\t\tvar related := StringName(raw_related)\n\t\tif related == instance_id or (not related.is_empty() and not has_instance(related)):\n\t\t\treturn _invalid(\"Related facility is missing or refers to itself.\")\n\t\tif instance.requires_operating_kitchen() and not related.is_empty():\n\t\t\tvar kitchen := get_instance(related)\n\t\t\tif kitchen.definition_id != &\"kitchen\" or kitchen.origin.z != WorldService.LAYER_BACK:\n\t\t\t\treturn _invalid(\"Dining facilities require one existing BACK kitchen.\", {&\"reason\": &\"INVALID_RELATED_KITCHEN\"})\n\t\t\tif not _required_related_placement_matches(instance, kitchen):\n\t\t\t\treturn _invalid(\"The BACK kitchen must lie inside this FRONT dining facility's XY footprint.\", {&\"reason\": &\"INVALID_RELATED_KITCHEN_PLACEMENT\"})\n\t\tvar seen := {instance_id: true}\n\t\tvar cursor := related\n\t\twhile not cursor.is_empty() and has_instance(cursor):\n\t\t\tif seen.has(cursor):\n\t\t\t\treturn _invalid(\"Related facilities cannot form a cycle.\")\n\t\t\tseen[cursor] = true\n\t\t\tcursor = get_instance(cursor).related_facility_id\n\tif _has_value(conditions, &\"related_facility_operating\") or _has_value(conditions, &\"operation_state\"):\n\t\treturn _invalid(\"Operating flags are computed from actual facility conditions.\")\n\tif _has_value(conditions, &\"suspension_reason\") and (typeof(_value(conditions, &\"suspension_reason\", null)) not in [TYPE_STRING, TYPE_STRING_NAME] or StringName(_value(conditions, &\"suspension_reason\", &\"\")) not in [&\"DESTROYED\", &\"RAIDED\"]):\n\t\treturn _invalid(\"Suspension recovery is not specified.\")\n\tvar minute := _resolve_minute(absolute_minute)\n\tinstance.set_operational_conditions(conditions, minute)\n\tif old_state != instance.state or _has_value(conditions, &\"related_facility_id\"):\n\t\trefresh_operating_dependencies(minute)\n\t_emit_state_change(instance, old_state)\n\tlast_error = \"\"\n\treturn _success({\n\t\t&\"instance_id\": instance_id,\n\t\t&\"state\": FacilityInstanceType.State.keys()[instance.state],\n\t\t&\"state_reasons\": instance.state_reasons.duplicate(),\n\t})\n\n\n"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scripts/facility/facility_instance.gd": {
|
||||
"sha256": "0c6aa493f3299611e05dd26aa429dda8cf7b5c479e4d09632036fb862f79a324",
|
||||
"bytes": 22815,
|
||||
"functions": {
|
||||
"can_start_service": {
|
||||
"line": 243,
|
||||
"end_line": 247,
|
||||
"sha256": "39ab5458947ddce7d26129d0174f82dfcec0e87358c058220f61c483f43a9cd5",
|
||||
"body": "func can_start_service(absolute_minute: int) -> bool:\n\tevaluate_state(absolute_minute)\n\treturn state in [State.OPEN, State.DEGRADED] and available_slots() > 0\n\n\n"
|
||||
},
|
||||
"can_accept_customers": {
|
||||
"line": 267,
|
||||
"end_line": 278,
|
||||
"sha256": "3d0984f009ca82b40057c57e0a10a1b68200026843b55a9e63d821064292046f",
|
||||
"body": "func can_accept_customers(guest_ids: Array[StringName]) -> bool:\n\tif customer_capacity < 0:\n\t\treturn true\n\tvar customers: Dictionary = {}\n\tfor service: ServiceInstance in active_services.values():\n\t\tfor guest_id: StringName in service.guest_ids:\n\t\t\tcustomers[guest_id] = true\n\tfor guest_id: StringName in guest_ids:\n\t\tcustomers[guest_id] = true\n\treturn customers.size() <= customer_capacity\n\n\n"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scripts/facility/service_instance.gd": {
|
||||
"sha256": "629a142f80cbc31b97b6d08483d94e029e448969bb6d39fdc8dd39931654dd35",
|
||||
"bytes": 7320,
|
||||
"functions": {
|
||||
"mark_failed": {
|
||||
"line": 128,
|
||||
"end_line": 134,
|
||||
"sha256": "178c6879e64385f0e3ff99fa98ae6ceb4dc67f6c2c981b0effb229f5d4d647fa",
|
||||
"body": "func mark_failed(reason: StringName, absolute_minute: int) -> void:\n\tstate = State.FAILED\n\tfailure_reason = reason\n\tcompleted_at = absolute_minute\n\tstaff_grace_deadline = NO_DEADLINE\n\n\n"
|
||||
}
|
||||
}
|
||||
},
|
||||
"data/facilities/cafeteria.tres": {
|
||||
"sha256": "86d540fe2d78b9dcdbe5a0af6e4a001f4cec54934636ed01deb25a943c79128a",
|
||||
"bytes": 867,
|
||||
"functions": {},
|
||||
"source": "[gd_resource type=\"Resource\" script_class=\"FacilityDefinition\" load_steps=2 format=3]\n\n[ext_resource type=\"Script\" path=\"res://scripts/data/facility_definition.gd\" id=\"1\"]\n\n[resource]\nscript = ExtResource(\"1\")\nid = &\"cafeteria\"\ndisplay_name = \"大衆食堂\"\ndescription = \"低価格で多くの客の食欲を満たす。裏層の厨房から料理を受け取る。\"\nzone = 0\nlayer = 0\nfootprint = Vector2i(4, 2)\nconstruction_cost = {&\"gold\": 800, &\"materials\": 12}\nbuild_minutes = 180\nweight_per_cell = 2\nmaintenance_gold = 4\nmaintenance_mana = 2\nstaff_min = 2\nstaff_max = 4\nrequired_roles = Array[StringName]([&\"cook\", &\"server\", &\"attendant\"])\nprimary_skill = &\"cooking\"\ncapacity = 12\nqueue_capacity = 24\nbase_service_minutes = 45\nbase_quality = 55\nbase_price = 25\ninventory_inputs = {&\"ingredient/basic_meal\": 1}\ntags = Array[StringName]([&\"dining\", &\"social\"])\n"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
+5
-3
@@ -5,6 +5,7 @@ import hashlib
|
||||
import importlib.util
|
||||
import json
|
||||
import os
|
||||
import py_compile
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
import sys
|
||||
@@ -23,9 +24,10 @@ def run():
|
||||
results = []
|
||||
with tempfile.TemporaryDirectory(prefix='.checker-fixtures-', dir=Path(__file__).parent) as temp:
|
||||
base = Path(temp)
|
||||
# Keep py_compile output inside allowed_paths; delete with the fixture.
|
||||
env = dict(os.environ, PYTHONPYCACHEPREFIX=str(base / 'pycache'))
|
||||
subprocess.run(['python3', '-m', 'py_compile', str(CHECKER)], env=env, check=True)
|
||||
# Generated bytecode belongs in allocated build, never tracked docs.
|
||||
build = Path(os.environ['BUILD_OUTPUT_DIR']).resolve(strict=True)
|
||||
with tempfile.TemporaryDirectory(prefix='p04-compile-', dir=build) as compiled:
|
||||
py_compile.compile(str(CHECKER), cfile=str(Path(compiled) / 'checker.pyc'), doraise=True)
|
||||
evidence = base / 'p04-evidence'
|
||||
evidence.mkdir()
|
||||
artifacts = {}
|
||||
|
||||
@@ -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'))
|
||||
@@ -1409,8 +1428,19 @@ def verify_fresh_s5(build):
|
||||
arguments = (s.base / 'raw', s.inventory['writer.json']['sha256'], s.inventory['reader.json']['sha256'])
|
||||
power = adapter.power.derive(*arguments)
|
||||
order = adapter.derive(*arguments)
|
||||
require(set(order['cases']) == set(adapter.DERIVERS)
|
||||
and set(power['cases']) == set(adapter.power.CASES), 'complete fresh adapter case sets')
|
||||
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
|
||||
and order['cases']['S5D_PAID_BEFORE_INCIDENT']['paid_before_incident'] 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,102 @@
|
||||
# REPAIR40 implementation supersession; native evidence remains pending
|
||||
# REPAIR45 — whole unit remains incomplete
|
||||
|
||||
## REPAIR45 — implementation ready for submission
|
||||
|
||||
The supplied byte-verified M engine-free context resolved the REPAIR44 UID dependency.
|
||||
UID controls: all 14 PASS, exit 0. Both supplied helper SHA-256 pins match exactly.
|
||||
AST and explicit fresh BUILD-cfile py_compile passed for all eight touched Python
|
||||
files, with python3 -B and PYTHONDONTWRITEBYTECODE=1. No source was changed in
|
||||
REPAIR45; retained passing controls were not rerun. The no-pyc static check
|
||||
passed again (exit 0); generated compile files exist only under allocated BUILD.
|
||||
The prior UID failure remains recorded as failed, not replaced with a PASS.
|
||||
|
||||
Sequential check-only S1, S2a, S2b, S3, S4 and S5 each returned exit 2:
|
||||
`ValueError: checkout is not clean`
|
||||
The initial missing-tested-tree argument refusals are also retained. The later
|
||||
attempt used the actual HEAD tree solely as a guard input, not a claim of final
|
||||
Q, clean source or C. No engine started. Root executes clean exact-Q check-only
|
||||
after automatic submission. Full argv/stdout/stderr and compile paths are in
|
||||
REPAIR41_STATIC_CHECKS.json. No Git writes, Runner or native run were performed.
|
||||
|
||||
Implementation is ready; the whole original unit remains incomplete and P04
|
||||
credit remains 0. Deferred Root conditions, in order: freeze final Q; affected
|
||||
pure controls; clean exact-Q check-only; capacity check; one heavy lease with
|
||||
fresh native S1–S4 and all ten S5 cases; independent Reader and adapters on actual
|
||||
raw (including fresh Reader order positives); fresh collect; full 184 suite once;
|
||||
index; --verify-only; registered validation before review; independent whole-unit
|
||||
Opus review; normal prepare / exact C / integration / final / Root DB join /
|
||||
ledger / main push. Native Reader and acceptance remain pending.
|
||||
patience_release stays pending unless fresh S3 raw shows it. Product freeze,
|
||||
M, allowed paths, REQUIRED membership/thresholds, all seven domains, G1/G2,
|
||||
R40–R44 and the existing one-trailing-LF spec protocol remain unchanged.
|
||||
|
||||
# REPAIR44 — original whole unit incomplete
|
||||
|
||||
Worker status is **blocked**, not ready for Root native execution. UID pure
|
||||
control could not read the supplied Q checkout's tools/run_all_tests.py
|
||||
(PermissionError). See ../REPAIR41_STATUS.md and ../REPAIR41_STATIC_CHECKS.json.
|
||||
AST/build compilation for every touched Python file and check-only S1–S5
|
||||
remain unexecuted; resume worker verification before freezing a final Q.
|
||||
|
||||
Native Reader and acceptance remain pending. The current ten-case roster is
|
||||
`S5A_PURE`, `S5B_DEPENDENCY`, `S5C_DESTRUCTION_COMMAND`, `S5D_DESTRUCTION_RAID`,
|
||||
`S5D_IN_FLIGHT`, `S5D_PAID_BEFORE_INCIDENT`, `S5E_MIDNIGHT`, `S5F_EXIT`,
|
||||
`S5G_SHIFT_1080`, `S5H_PAUSED_MIDNIGHT`.
|
||||
|
||||
The new case supplies a typed raw derivation for N completion/payment, public
|
||||
event destruction after payment, and N+1 failure/release of the secondary.
|
||||
It does not supply executed native evidence. The D05 destruction gate requires
|
||||
it in addition to every existing command/guard/idle/in-flight gate.
|
||||
patience_release stays pending unless fresh S3 raw proves it.
|
||||
|
||||
r35, r36, R40 native and R43 native remain FAILED. Q37 is a local PASS for its
|
||||
own version only. R43 Writer 2749/0, seven Writer-only derivers plus G1/G2, twelve
|
||||
pure controls and six check-only steps retain their limited historical scope;
|
||||
none is independent Reader proof. Original credit 30/88, formal credit 16/88,
|
||||
P04 credit 0; no new task/unit/worker or completion claim.
|
||||
|
||||
REPAIR41_STATIC_CHECKS.json records only worker checks actually executed.
|
||||
Root must freeze final Q, then follow S5_ROOT_RUN.md, including fresh S1–S5,
|
||||
Reader/adapters, collect, full 184 suite once, index, verify-only, registered
|
||||
validation, independent review and normal integration. Historical text below
|
||||
does not replace this order or the current ten-case roster.
|
||||
|
||||
# Historical 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,147 @@
|
||||
# REPAIR45 handoff
|
||||
|
||||
## REPAIR45 — implementation ready for submission
|
||||
|
||||
The supplied byte-verified M engine-free context resolved the REPAIR44 UID dependency.
|
||||
UID controls: all 14 PASS, exit 0. Both supplied helper SHA-256 pins match exactly.
|
||||
AST and explicit fresh BUILD-cfile py_compile passed for all eight touched Python
|
||||
files, with python3 -B and PYTHONDONTWRITEBYTECODE=1. No source was changed in
|
||||
REPAIR45; retained passing controls were not rerun. The no-pyc static check
|
||||
passed again (exit 0); generated compile files exist only under allocated BUILD.
|
||||
The prior UID failure remains recorded as failed, not replaced with a PASS.
|
||||
|
||||
Sequential check-only S1, S2a, S2b, S3, S4 and S5 each returned exit 2:
|
||||
`ValueError: checkout is not clean`
|
||||
The initial missing-tested-tree argument refusals are also retained. The later
|
||||
attempt used the actual HEAD tree solely as a guard input, not a claim of final
|
||||
Q, clean source or C. No engine started. Root executes clean exact-Q check-only
|
||||
after automatic submission. Full argv/stdout/stderr and compile paths are in
|
||||
REPAIR41_STATIC_CHECKS.json. No Git writes, Runner or native run were performed.
|
||||
|
||||
Implementation is ready; the whole original unit remains incomplete and P04
|
||||
credit remains 0. Deferred Root conditions, in order: freeze final Q; affected
|
||||
pure controls; clean exact-Q check-only; capacity check; one heavy lease with
|
||||
fresh native S1–S4 and all ten S5 cases; independent Reader and adapters on actual
|
||||
raw (including fresh Reader order positives); fresh collect; full 184 suite once;
|
||||
index; --verify-only; registered validation before review; independent whole-unit
|
||||
Opus review; normal prepare / exact C / integration / final / Root DB join /
|
||||
ledger / main push. Native Reader and acceptance remain pending.
|
||||
patience_release stays pending unless fresh S3 raw shows it. Product freeze,
|
||||
M, allowed paths, REQUIRED membership/thresholds, all seven domains, G1/G2,
|
||||
R40–R44 and the existing one-trailing-LF spec protocol remain unchanged.
|
||||
|
||||
# REPAIR44 — ten cases, final Q must be frozen by Root
|
||||
|
||||
**Worker blocked on an unreadable UID-check dependency; do not start native
|
||||
execution from this partial repair.** See ../REPAIR41_STATUS.md. Remaining
|
||||
worker AST/compile and check-only checks must finish before this Root order.
|
||||
|
||||
The complete roster is `S5A_PURE`, `S5B_DEPENDENCY`, `S5C_DESTRUCTION_COMMAND`,
|
||||
`S5D_DESTRUCTION_RAID`, `S5D_IN_FLIGHT`, `S5D_PAID_BEFORE_INCIDENT`,
|
||||
`S5E_MIDNIGHT`, `S5F_EXIT`, `S5G_SHIFT_1080`, `S5H_PAUSED_MIDNIGHT`.
|
||||
CASES is sorted from CASE_TABLE; LABELS and all 23 slots derive from it.
|
||||
Receipt membership is order-independent and rejects missing/duplicate/extra
|
||||
cases or slots. Reader independently enumerates CASE_TABLE.
|
||||
|
||||
The new case completes and pays the primary at N, destroys through the public
|
||||
automatic event in INCIDENTS_AND_EVENTS at N, and fails/releases the unfinished
|
||||
secondary at N+1. See ../REPAIR44_SOURCE_FACTS.json and the REPAIR44 section in
|
||||
../REPAIR41_STATUS.md. No Defense asset registration or guard bypass is used.
|
||||
Run repair44_controls.py in addition to every existing pure control. Synthetic
|
||||
typed controls are not native evidence. R43 Writer 2749/0 and Writer-only typed
|
||||
analysis did not run the Reader; R43 native remains FAILED.
|
||||
|
||||
Authoritative Root order, after freezing the final Q:
|
||||
|
||||
1. Affected pure controls, including repair44_controls.py.
|
||||
2. Check-only S1–S5 plan (after controls finish writing temporary fixtures).
|
||||
3. Capacity check.
|
||||
4. One heavy lease: fresh native S1–S5, all ten S5 cases.
|
||||
5. Independent Reader and adapters on actual raw.
|
||||
6. Fresh collect, recomputing the new D05 sub-gate from raw.
|
||||
7. Full 184 exact-Q regression once.
|
||||
8. Index.
|
||||
9. --verify-only.
|
||||
10. Registered validation.
|
||||
11. Independent whole-unit Opus review.
|
||||
12. Normal prepare / exact C / integration / final / Root DB join / ledger / main push.
|
||||
|
||||
No worker engine/native/full regression or Git write is authorized. Whole-unit
|
||||
acceptance and patience_release remain pending. Local checks earn no credit.
|
||||
|
||||
# Historical REPAIR43 submission — superseded current roster
|
||||
|
||||
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
|
||||
|
||||
+178
-10
@@ -4,11 +4,15 @@ 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"},
|
||||
"S5D_PAID_BEFORE_INCIDENT": {"expected_reserved_ids": 1, "labels": ["boundary", "held"], "prepare": "_prepare_order", "advance": "_advance_order", "stop": "_assert_paid_incident", "assert": "_assert_paid_incident_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, "S5D_PAID_BEFORE_INCIDENT": 420558, "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 +40,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 +76,9 @@ func _fresh() -> void:
|
||||
_resource_command = {}
|
||||
_recovery = {}
|
||||
_replay_reference = {}
|
||||
_guard_references = {}
|
||||
_expected_failure = {}
|
||||
_observed_phase = ""
|
||||
_commands = []
|
||||
_results = []
|
||||
_receipts = []
|
||||
@@ -78,7 +88,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 +170,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 +194,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":
|
||||
@@ -187,7 +202,7 @@ func _prepare_order() -> bool:
|
||||
if _duration <= 5: return false
|
||||
_clock.advance_minutes(queue_at - _clock.absolute_minute)
|
||||
_expect(facility.active_staff_ids == staff_ids, "ordinary physical attendance")
|
||||
var second: bool = _case in ["S5D_DESTRUCTION_RAID", "S5F_EXIT"]
|
||||
var second: bool = _case in ["S5D_DESTRUCTION_RAID", "S5F_EXIT", "S5D_PAID_BEFORE_INCIDENT"]
|
||||
_expect(_stock(facility.local_inventory_id, &"ingredient/basic_meal", 2 if second else 1, &"p04.s5.order.stock"), "actual reservable meals")
|
||||
_queue(GUEST, REQUEST, _boundary if _case == "S5F_EXIT" else _boundary + _duration + 1)
|
||||
_clock.advance_one_minute()
|
||||
@@ -196,17 +211,34 @@ 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_PAID_BEFORE_INCIDENT":
|
||||
_expect(definition.capacity >= 2 and facility.active_staff_ids.size() >= definition.staff_min, "definition supports concurrent services with ordinary staff")
|
||||
if definition.capacity < 2: return false
|
||||
_clock.advance_minutes(_boundary - 2 - _clock.absolute_minute)
|
||||
_queue(QUEUED_GUEST, QUEUED_REQUEST, _boundary + _duration + 1)
|
||||
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.", {})
|
||||
if _case in ["S5D_IN_FLIGHT", "S5D_PAID_BEFORE_INCIDENT"]:
|
||||
_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 +272,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 in ["S5D_IN_FLIGHT", "S5D_PAID_BEFORE_INCIDENT"]: _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,9 +386,33 @@ 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()
|
||||
|
||||
func _assert_paid_incident(point: Dictionary) -> void:
|
||||
_expect(point[&"service"][&"state"] == "COMPLETED" and point[&"service"][&"completed_at"] == _boundary, "primary paid at N")
|
||||
_expect(point[&"facility"][&"durability"] == 0 and point[&"facility"][&"state"] == "BROKEN" and point[&"facility"][&"suspension_reason"] == "DESTROYED", "public event destruction after completion")
|
||||
var secondary: Array = []
|
||||
var facilities: Dictionary = point[&"snapshot"][&"systems"][&"runtime"][&"facilities"]
|
||||
for instance: Dictionary in facilities[&"instances"]:
|
||||
for service: Dictionary in instance[&"active_services"]:
|
||||
if service[&"request_id"] == QUEUED_REQUEST: secondary.append(service)
|
||||
for service: Dictionary in facilities[&"service_history"]:
|
||||
if service[&"request_id"] == QUEUED_REQUEST: secondary.append(service)
|
||||
_expect(secondary.size() == 1, "one secondary service without duplicate generation")
|
||||
if secondary.size() != 1: return
|
||||
_expect(secondary[0][&"state"] == ("ACTIVE" if point[&"minute"] == _boundary else "FAILED"), "secondary unfinished at N and failed at N+1")
|
||||
if point[&"minute"] > _boundary:
|
||||
_expect(secondary[0][&"failure_reason"] == "BROKEN" and secondary[0][&"completed_at"] == _boundary + 1, "secondary broken failure timestamp")
|
||||
|
||||
func _assert_paid_incident_order(before: Dictionary, point: Dictionary) -> void:
|
||||
_assert_paid_incident(point)
|
||||
_expect(point[&"wallets"][String(GUEST)] == before[&"wallets"][String(GUEST)] - _price, "one primary snapshot price debit")
|
||||
_expect(point[&"wallets"][String(QUEUED_GUEST)] == before[&"wallets"][String(QUEUED_GUEST)], "secondary uncharged")
|
||||
_assert_reservation(before, point, REQUEST, "CONSUMED", _boundary)
|
||||
_assert_reservation(before, point, QUEUED_REQUEST, "ACTIVE" if point[&"minute"] == _boundary else "RELEASED", -1 if point[&"minute"] == _boundary else _boundary + 1)
|
||||
|
||||
func _assert_order_stop(point: Dictionary) -> void:
|
||||
if _case == "S5C_DESTRUCTION_COMMAND":
|
||||
_expect(point[&"service"][&"state"] == "FAILED" and point[&"service"][&"failure_reason"] == String(FacilityService.INTERRUPTION_BROKEN), "command destruction interrupts before payment")
|
||||
@@ -281,12 +440,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 +482,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 +564,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 +721,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,171 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Engine-free REPAIR44 units. Synthetic typed inputs are never native evidence."""
|
||||
import copy
|
||||
import json
|
||||
from pathlib import Path
|
||||
import sys
|
||||
|
||||
sys.dont_write_bytecode = True
|
||||
import s5_order_adapter as a
|
||||
import run_s5_native as wrapper
|
||||
|
||||
|
||||
def typed(value):
|
||||
o = a.guard_oracle
|
||||
def encode(v):
|
||||
if isinstance(v, bool):
|
||||
return o.atom(1, v)
|
||||
if isinstance(v, int):
|
||||
return o.atom(2, v)
|
||||
if isinstance(v, str):
|
||||
return o.atom(4, v)
|
||||
if isinstance(v, list):
|
||||
return o.array([encode(x) for x in v])
|
||||
return o.strings_dict([(k, encode(v)) for k, v in v.items()])
|
||||
return a.series.variant(encode(value))
|
||||
|
||||
|
||||
def fixture():
|
||||
"""Small source-shaped serializer unit for the deriver, not a game replay."""
|
||||
n, price = 960, 25
|
||||
primary = dict(service_id='primary', request_id=a.REQUEST, price_snapshot=price,
|
||||
duration_minutes=45, started_at=n-45, elapsed_minutes=44,
|
||||
state='ACTIVE', completed_at=-1, failure_reason='')
|
||||
secondary = dict(service_id='secondary', request_id=a.SECOND_REQUEST, price_snapshot=price,
|
||||
duration_minutes=45, started_at=n-1, elapsed_minutes=0,
|
||||
state='ACTIVE', completed_at=-1, failure_reason='')
|
||||
sale = dict(transaction_id='sale', category='SERVICE_SALE', amount=price,
|
||||
absolute_minute=n, source_entity_id='facility', credit_account='GUEST_WALLET:'+a.GUEST)
|
||||
reservation = dict(reservation_id='reservation.b', requester_id=a.SECOND_REQUEST, state='ACTIVE', terminal_at=-1)
|
||||
def point(minute, completed=False, broken=False, failed=False):
|
||||
s, second, r = copy.deepcopy((primary, secondary, reservation))
|
||||
history = []
|
||||
active = [s, second]
|
||||
if completed:
|
||||
s.update(state='COMPLETED', completed_at=n, elapsed_minutes=45)
|
||||
history.append(s)
|
||||
active.remove(s)
|
||||
if failed:
|
||||
second.update(state='FAILED', failure_reason='BROKEN', completed_at=n+1)
|
||||
history.append(second)
|
||||
active.remove(second)
|
||||
r.update(state='RELEASED', terminal_at=n+1)
|
||||
ledger = [copy.deepcopy(sale)] if completed else []
|
||||
requests = [] if failed else [dict(request_id=a.SECOND_REQUEST)]
|
||||
return dict(minute=minute, inputs=dict(boundary=n, price=price, duration=45, facility_id='facility'),
|
||||
service=s, facility=dict(durability=0 if broken else 100, state='BROKEN' if broken else 'OPERATING',
|
||||
suspension_reason='DESTROYED' if broken else ''),
|
||||
ledger=ledger, wallets={a.GUEST: 50-price if completed else 50, a.SECOND: 50},
|
||||
receipts=[dict(id='sale', minute=n, phase='FACILITY_COMPLETION', entries=copy.deepcopy(ledger))] if completed else [],
|
||||
reservations=[r], requests={a.SECOND_REQUEST: {} if failed else dict(request_id=a.SECOND_REQUEST)},
|
||||
active_services=len(active), snapshot=dict(systems=dict(runtime=dict(
|
||||
facilities=dict(service_history=history, instances=[dict(active_services=active)], requests=requests,
|
||||
known_service_ids=['primary', 'secondary'], known_request_ids=[a.REQUEST, a.SECOND_REQUEST],
|
||||
next_service_sequence=3),
|
||||
economy=dict(entries=copy.deepcopy(ledger), idempotency=[dict(key='service.payment.primary', transaction_id='sale')] if completed else []),
|
||||
inventory=dict(idempotency_results=[dict(action='release', result=dict(reservation_id='reservation.b', ok=True))] if failed else [])))))
|
||||
phases = []
|
||||
for name, completed, broken in [('FACILITY_COMPLETION', False, False),
|
||||
('VITALS_AND_ENVIRONMENT', True, False),
|
||||
('INCIDENTS_AND_EVENTS', True, False), ('FACILITY_QUEUES', True, True)]:
|
||||
p = point(n, completed, broken)
|
||||
p['phase'] = name
|
||||
phases.append(p)
|
||||
return dict(before=point(n-1), boundary=point(n, True, True), held=point(n+1, True, True, True)), phases
|
||||
|
||||
|
||||
def paid_controls():
|
||||
original = fixture()
|
||||
def derive(data):
|
||||
points, phases = data
|
||||
return a.paid_before_incident({k: typed(v) for k, v in points.items()}, [typed(v) for v in phases])
|
||||
assert derive(original) == {'paid_before_incident': True, 'duplicate_generations': 0}
|
||||
checks = []
|
||||
def negative(name, change):
|
||||
data = copy.deepcopy(original)
|
||||
change(*data)
|
||||
try:
|
||||
derive(data)
|
||||
except (ValueError, KeyError):
|
||||
checks.append(name)
|
||||
return
|
||||
raise AssertionError('accepted mutation: ' + name)
|
||||
runtime = lambda p: p['snapshot']['systems']['runtime']
|
||||
second = lambda p: next(s for s in runtime(p)['facilities']['service_history'] if s['request_id'] == a.SECOND_REQUEST)
|
||||
negative('sale-removed', lambda p, h: p['boundary']['ledger'].clear())
|
||||
negative('sale-duplicated', lambda p, h: p['held']['ledger'].append(copy.deepcopy(p['held']['ledger'][0])))
|
||||
negative('sale-after-incidents', lambda p, h: p['boundary']['receipts'][0].update(phase='FACILITY_QUEUES'))
|
||||
negative('destruction-before-completion', lambda p, h: h[0]['facility'].update(durability=0))
|
||||
negative('primary-not-completed', lambda p, h: p['boundary']['service'].update(state='ACTIVE'))
|
||||
negative('secondary-charged', lambda p, h: p['held']['wallets'].update({a.SECOND: 25}))
|
||||
negative('secondary-not-failed', lambda p, h: second(p['held']).update(state='ACTIVE'))
|
||||
negative('secondary-failed-at-N', lambda p, h: second(p['held']).update(completed_at=960))
|
||||
negative('reservation-not-released', lambda p, h: p['held']['reservations'][0].update(state='ACTIVE'))
|
||||
negative('reservation-released-twice', lambda p, h: runtime(p['held'])['inventory']['idempotency_results'].append(copy.deepcopy(runtime(p['held'])['inventory']['idempotency_results'][0])))
|
||||
negative('idempotency-missing', lambda p, h: runtime(p['held'])['economy']['idempotency'].clear())
|
||||
negative('idempotency-duplicated', lambda p, h: runtime(p['held'])['economy']['idempotency'].append(copy.deepcopy(runtime(p['held'])['economy']['idempotency'][0])))
|
||||
negative('wrong-financial-day', lambda p, h: p['held']['ledger'][0].update(absolute_minute=2400))
|
||||
negative('AFTER-copy-tautology', lambda p, h: p.update(before=copy.deepcopy(p['held'])))
|
||||
negative('phase-order-reversed', lambda p, h: h.reverse())
|
||||
negative('duplicate-generation', lambda p, h: runtime(p['held'])['facilities']['service_history'].append(copy.deepcopy(second(p['held']))))
|
||||
negative('hidden-generation-counter', lambda p, h: runtime(p['held'])['facilities'].update(next_service_sequence=4))
|
||||
return checks
|
||||
|
||||
|
||||
def roster_controls():
|
||||
cases, slots = list(wrapper.CASE_TABLE), wrapper.SLOTS
|
||||
old = [c for c in cases if c != 'S5D_PAID_BEFORE_INCIDENT']
|
||||
assert sorted(old) != old, 'old R43 comparison must fail on actual insertion order'
|
||||
assert wrapper.exact_roster(cases, slots)
|
||||
assert wrapper.exact_roster(cases[::-1], slots[::-1])
|
||||
assert not wrapper.exact_roster(cases[:-1], slots)
|
||||
assert not wrapper.exact_roster(cases + [cases[0]], slots)
|
||||
assert not wrapper.exact_roster(cases + ['UNKNOWN'], slots)
|
||||
assert not wrapper.exact_roster(cases, slots[:-1])
|
||||
assert not wrapper.exact_roster(cases, slots + ['UNKNOWN-slot'])
|
||||
assert not wrapper.exact_roster(cases, slots + [slots[0]])
|
||||
assert set(cases) == set(a.DERIVERS) | set(a.power.CASES)
|
||||
import re
|
||||
probe = wrapper.QA.read_text()
|
||||
seeds = json.loads(re.search(r'^const SEEDS: Dictionary = (.*)$', probe, re.M)[1])
|
||||
assert set(seeds) == set(cases)
|
||||
for row in wrapper.CASE_TABLE.values():
|
||||
for key in ('prepare', 'advance', 'stop', 'assert'):
|
||||
assert 'func ' + row[key] + '(' in probe
|
||||
# Reader obtains its own branches directly from CASE_TABLE (never Writer's list).
|
||||
reader = probe.split('func _reader()', 1)[1]
|
||||
assert 'for branch: String in CASE_TABLE:' in reader
|
||||
expected_line = next(l for l in a.POWER_PATH.read_text().splitlines() if 'expected = set(CASES)' in l)
|
||||
assert set(re.findall(r'"(S5[^"]+)"', expected_line)) | set(a.power.CASES) == set(cases)
|
||||
root = Path(__file__).resolve().parents[1]
|
||||
project = next(p for p in root.parents if (p / 'tools/check_p04_order_evidence.py').is_file())
|
||||
checker = (project / 'tools/check_p04_order_evidence.py').read_text()
|
||||
assert set(re.findall(r"['\"](S5[A-Z][A-Z0-9_]*)['\"]", checker)) == set(cases)
|
||||
collector = (root / 'p04_native_series.py').read_text()
|
||||
assert "set(order['cases']) == set(adapter.DERIVERS)" in collector
|
||||
assert "set(power['cases']) == set(adapter.power.CASES)" in collector
|
||||
assert 'order = adapter.derive(*arguments)' in collector
|
||||
for name in ('S5_ROOT_RUN.md', 'PENDING.md'):
|
||||
assert set(re.findall(r'`(S5[A-Z][A-Z0-9_]*)`', (root / 's5' / name).read_text())) == set(cases)
|
||||
status = (root / 'REPAIR41_STATUS.md').read_text().split('## REPAIR44', 1)[1]
|
||||
assert set(re.findall(r'`(S5[A-Z][A-Z0-9_]*)`', status.split('## ', 1)[0])) == set(cases)
|
||||
wrapper.probe_guard(project)
|
||||
patterns = [r'\bvar\s+\w+\s*=', r'\bfor\s+\w+\s+in\b',
|
||||
r'\.(?:patience_remaining|elapsed_minutes|power_available|capacity|hold_until)\s*=(?!=)']
|
||||
for regex, bad in zip(patterns, ['var x = 1', 'for x in values:', 'f.capacity = 2']):
|
||||
assert not re.search(regex, probe) and re.search(regex, bad)
|
||||
return ['R43-old-comparison-reproduced', 'insertion-order', 'reverse-order',
|
||||
'missing-case', 'duplicate-case', 'unknown-case', 'missing-slot', 'extra-slot',
|
||||
'duplicate-slot', 'probe-seeds-wrapper-reader-adapter-collector-checker-docs-name-sync',
|
||||
'probe-guard-regex-self-check']
|
||||
|
||||
|
||||
def main():
|
||||
root = Path(__file__).resolve().parents[1]
|
||||
assert not list(root.rglob('*.pyc')), 'no generated bytecode under allowed execution paths'
|
||||
print(json.dumps(dict(synthetic_units_only=True, formal_acceptance=False,
|
||||
paid_mutations=paid_controls(), roster=roster_controls(), no_pyc=True), indent=2))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -43,10 +43,17 @@ def case_table(path):
|
||||
|
||||
|
||||
CASE_TABLE = case_table(QA)
|
||||
CASES = list(CASE_TABLE)
|
||||
LABELS = {case: [label for label in row["labels"] if label != "duplicate_guard"]
|
||||
for case, row in CASE_TABLE.items()}
|
||||
CASES = sorted(CASE_TABLE)
|
||||
LABELS = {case: [label for label in CASE_TABLE[case]["labels"] if label != "duplicate_guard"]
|
||||
for case in CASES}
|
||||
SLOTS = sorted(case + "-" + label for case in CASES for label in LABELS[case])
|
||||
|
||||
def exact_roster(branches, slots):
|
||||
return (len(branches) == len(set(branches)) == len(CASES)
|
||||
and sorted(branches) == CASES
|
||||
and len(slots) == len(set(slots)) == len(SLOTS)
|
||||
and sorted(slots) == SLOTS)
|
||||
|
||||
MATERIALS = [MANIFEST, BUILD / "audit-support/p04-review-repair22-r01/ACTUAL_CURRENT_PUBLIC_POWER_FUNCTIONS.json"]
|
||||
|
||||
def r17_relocation_guard(root):
|
||||
@@ -66,6 +73,13 @@ def r17_relocation_guard(root):
|
||||
def probe_guard(root):
|
||||
probe = QA.read_text()
|
||||
import re
|
||||
seeds = re.findall(r"^const SEEDS: Dictionary = (.*)$", probe, re.M)
|
||||
if len(seeds) != 1 or sorted(json.loads(seeds[0])) != CASES or sorted(case_table(QA)) != CASES:
|
||||
raise ValueError("probe/seed canonical roster mismatch")
|
||||
for case in CASES:
|
||||
for key in ("prepare", "advance", "stop", "assert"):
|
||||
if "func " + CASE_TABLE[case][key] + "(" not in probe:
|
||||
raise ValueError("missing case dispatch function")
|
||||
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):
|
||||
@@ -522,7 +536,7 @@ def main():
|
||||
receipt = r.read(out / ("raw/" + phase + ".json"))
|
||||
r.require(receipt["checks"] > 0 and receipt["failures"] == 0,
|
||||
"S5 actual outcome receipt")
|
||||
r.require(sorted(receipt["branches"]) == CASES,
|
||||
r.require(exact_roster(receipt["branches"], receipt["slots"]),
|
||||
"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")
|
||||
|
||||
@@ -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,214 @@ def destruction_raid(points, phases):
|
||||
return {'raid_sale_before_destruction': True, 'raid_unfinished_release': True}
|
||||
|
||||
|
||||
def paid_before_incident(points, phases):
|
||||
"""Phase-start snapshots bracket completion and the public automatic event."""
|
||||
before, boundary, end = (points[k] for k in ('before', 'boundary', 'held'))
|
||||
n = scalar(before, 'inputs', 'boundary')
|
||||
completion = phase(phases, 'FACILITY_COMPLETION', n)
|
||||
completed = phase(phases, 'VITALS_AND_ENVIRONMENT', n)
|
||||
incident = phase(phases, 'INCIDENTS_AND_EVENTS', n)
|
||||
queues = phase(phases, 'FACILITY_QUEUES', n)
|
||||
require([phases.index(p) for p in (completion, completed, incident, queues)] ==
|
||||
sorted(phases.index(p) for p in (completion, completed, incident, queues)),
|
||||
'completion/event/queue phase order')
|
||||
require(scalar(before, 'minute') == n - 1 and scalar(boundary, 'minute') == n
|
||||
and scalar(end, 'minute') == n + 1, 'exact boundary points')
|
||||
for p in (before, completion):
|
||||
require(scalar(p, 'service', 'state') == 'ACTIVE' and not sales(p)
|
||||
and scalar(p, 'service', 'started_at') + scalar(p, 'service', 'duration_minutes') == n
|
||||
and scalar(p, 'service', 'elapsed_minutes') == scalar(p, 'service', 'duration_minutes') - 1
|
||||
and scalar(p, 'facility', 'durability') > 0, 'independent pre-completion state')
|
||||
sale = payment(before, completed, n)
|
||||
for p in (completed, incident, queues, boundary, end):
|
||||
require(payment(before, p, n).raw == sale.raw, 'identical surviving sale')
|
||||
require([r.raw for r in rows(p, 'ledger') if scalar(r, 'category') == 'SERVICE_SALE'] == [sale.raw],
|
||||
'one total sale; secondary never charged')
|
||||
require(scalar(p, 'wallets', SECOND) == scalar(before, 'wallets', SECOND), 'unchanged second wallet')
|
||||
receipts = [r for r in rows(p, 'receipts') if scalar(r, 'id') == scalar(sale, 'transaction_id')]
|
||||
require(len(receipts) == 1 and scalar(receipts[0], 'phase') == 'FACILITY_COMPLETION'
|
||||
and scalar(receipts[0], 'minute') == n, 'payment emitted in completion phase')
|
||||
require(scalar(sale, 'absolute_minute') // 1440 + 1 == n // 1440 + 1,
|
||||
'financial day derived from ledger absolute_minute')
|
||||
require(scalar(completed, 'facility', 'durability') > 0
|
||||
and scalar(incident, 'facility', 'durability') > 0, 'destruction not before incidents')
|
||||
for p in (queues, boundary, end):
|
||||
require(scalar(p, 'facility', 'durability') == 0 and scalar(p, 'facility', 'state') == 'BROKEN'
|
||||
and scalar(p, 'facility', 'suspension_reason') == 'DESTROYED', 'event destruction at N')
|
||||
|
||||
def services(p):
|
||||
facilities = field(p, 'snapshot', 'systems', 'runtime', 'facilities')
|
||||
return (rows(facilities, 'service_history') +
|
||||
[s for f in rows(facilities, 'instances') for s in rows(f, 'active_services')])
|
||||
|
||||
baseline = services(before)
|
||||
ids = [scalar(s, 'service_id') for s in baseline]
|
||||
require(len(ids) == len(set(ids)) == 2, 'exactly two independent original service IDs')
|
||||
second_id = None
|
||||
for p in (before, completion, completed, incident, queues, boundary, end):
|
||||
current = services(p)
|
||||
require(sorted(scalar(s, 'service_id') for s in current) == sorted(ids), 'zero duplicate generations')
|
||||
for key in ('known_service_ids', 'known_request_ids', 'next_service_sequence'):
|
||||
require(field(p, 'snapshot', 'systems', 'runtime', 'facilities', key).raw ==
|
||||
field(before, 'snapshot', 'systems', 'runtime', 'facilities', key).raw,
|
||||
'stable service/request generation bookkeeping: ' + key)
|
||||
secondary = [s for s in current if scalar(s, 'request_id') == SECOND_REQUEST]
|
||||
require(len(secondary) == 1, 'one secondary request/service join')
|
||||
s = secondary[0]
|
||||
if second_id is None:
|
||||
second_id = scalar(s, 'service_id')
|
||||
require(scalar(s, 'service_id') == second_id, 'secondary identity unchanged')
|
||||
if p is end:
|
||||
require(scalar(s, 'state') == 'FAILED' and scalar(s, 'failure_reason') == 'BROKEN'
|
||||
and scalar(s, 'completed_at') == n + 1, 'secondary failed once at N+1')
|
||||
else:
|
||||
require(scalar(s, 'state') == 'ACTIVE' and scalar(s, 'elapsed_minutes') < scalar(s, 'duration_minutes')
|
||||
and scalar(s, 'started_at') == n - 1, 'secondary unfinished through N')
|
||||
reservation = [r for r in rows(p, 'reservations') if scalar(r, 'requester_id') == SECOND_REQUEST]
|
||||
require(len(reservation) == 1 and scalar(reservation[0], 'state') == 'ACTIVE', 'secondary reservation held through N')
|
||||
require(not [r for r in rows(p, 'snapshot', 'systems', 'runtime', 'inventory', 'idempotency_results')
|
||||
if scalar(r, 'action') == 'release'
|
||||
and scalar(r, 'result', 'reservation_id') == scalar(reservation[0], 'reservation_id')],
|
||||
'no early secondary release')
|
||||
release(before, end, SECOND_REQUEST, n + 1)
|
||||
require(not rows(end, 'snapshot', 'systems', 'runtime', 'facilities', 'requests')
|
||||
and all(scalar(r, 'state') != 'ACTIVE' for r in rows(end, 'reservations'))
|
||||
and scalar(end, 'active_services') == 0, 'no reservation or orphan request remains')
|
||||
return {'paid_before_incident': True, 'duplicate_generations': 0}
|
||||
|
||||
|
||||
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 +409,9 @@ 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, 'S5D_PAID_BEFORE_INCIDENT': paid_before_incident,
|
||||
'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 +430,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 +468,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}
|
||||
|
||||
+172
-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')
|
||||
@@ -51,6 +148,41 @@ def main():
|
||||
return
|
||||
raise ValueError('mutation accepted: ' + label)
|
||||
|
||||
paid = 'S5D_PAID_BEFORE_INCIDENT'
|
||||
points, phases = cases[paid]
|
||||
end, boundary = points['held'], points['boundary']
|
||||
n = a.scalar(points['before'], 'inputs', 'boundary')
|
||||
def changed_array(node, members):
|
||||
start = 12 if node.raw[:4] == struct.pack('<I', 65564) else 8
|
||||
return node.raw[:start-4] + struct.pack('<I', len(members)) + b''.join(r.raw for r in members)
|
||||
sale = a.sales(end)[0]
|
||||
ledger = a.field(end, 'ledger')
|
||||
negative('paid-sale-removed', paid, end, ledger, changed_array(ledger, [r for r in ledger.value if r is not sale]))
|
||||
negative('paid-sale-duplicated', paid, end, ledger, changed_array(ledger, ledger.value + [sale]))
|
||||
receipt = next(r for r in a.rows(end, 'receipts') if a.scalar(r, 'id') == a.scalar(sale, 'transaction_id'))
|
||||
negative('paid-sale-after-incidents', paid, end, a.field(receipt, 'phase'), mutation.scalar(4, 'FACILITY_QUEUES'))
|
||||
pre = a.phase(phases, 'FACILITY_COMPLETION', n)
|
||||
negative('paid-destruction-before-completion', paid, pre, a.field(pre, 'facility', 'durability'), mutation.scalar(2, 0))
|
||||
negative('paid-primary-not-completed', paid, end, a.field(end, 'service', 'state'), mutation.scalar(4, 'ACTIVE'))
|
||||
negative('paid-secondary-charged', paid, end, a.field(end, 'wallets', a.SECOND), mutation.scalar(2, a.scalar(end, 'wallets', a.SECOND)-1))
|
||||
secondary = next(r for r in a.rows(end, 'snapshot', 'systems', 'runtime', 'facilities', 'service_history')
|
||||
if a.scalar(r, 'request_id') == a.SECOND_REQUEST)
|
||||
negative('paid-secondary-not-failed', paid, end, a.field(secondary, 'state'), mutation.scalar(4, 'ACTIVE'))
|
||||
negative('paid-secondary-failed-at-N', paid, end, a.field(secondary, 'completed_at'), mutation.scalar(2, n))
|
||||
reservation = next(r for r in a.rows(end, 'reservations') if a.scalar(r, 'requester_id') == a.SECOND_REQUEST)
|
||||
negative('paid-reservation-held', paid, end, a.field(reservation, 'state'), mutation.scalar(4, 'ACTIVE'))
|
||||
operations = a.field(end, 'snapshot', 'systems', 'runtime', 'inventory', 'idempotency_results')
|
||||
released = next(r for r in operations.value if a.scalar(r, 'action') == 'release'
|
||||
and a.scalar(r, 'result', 'reservation_id') == a.scalar(reservation, 'reservation_id'))
|
||||
negative('paid-double-release', paid, end, operations, changed_array(operations, operations.value + [released]))
|
||||
idem = a.field(end, 'snapshot', 'systems', 'runtime', 'economy', 'idempotency')
|
||||
key = 'service.payment.' + a.scalar(end, 'service', 'service_id')
|
||||
payment = next(r for r in idem.value if a.scalar(r, 'key') == key)
|
||||
negative('paid-idempotency-missing', paid, end, idem, changed_array(idem, [r for r in idem.value if r is not payment]))
|
||||
negative('paid-idempotency-duplicate', paid, end, idem, changed_array(idem, idem.value + [payment]))
|
||||
negative('paid-wrong-day', paid, end, a.field(sale, 'absolute_minute'), mutation.scalar(2, n+1440))
|
||||
negative('paid-AFTER-copy', paid, points['before'], points['before'], end.raw)
|
||||
|
||||
midnight = 'S5E_MIDNIGHT'
|
||||
points, phases = cases[midnight]
|
||||
n = a.scalar(points['before'], 'inputs', 'boundary')
|
||||
@@ -66,7 +198,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 +219,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", "S5D_PAID_BEFORE_INCIDENT", "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,19 @@ 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'),
|
||||
('S5D_PAID_BEFORE_INCIDENT', 'paid_before_incident')],
|
||||
'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