Files
TheTree_mock/docs/plans/original-completion-2026-10-02/execution/p04-01-input-r01/historical-audit.json
T

1233 lines
77 KiB
JSON

{
"plan_id": "P04-01",
"audit_started_at_jst": "2026-10-10T10:53:18.681171+09:00",
"original_unit": {
"id": "P04-01",
"title": "同時発生の更新規約",
"work": "閉店、停電、破壊、退出、課金、シフト交代、00:00決算の順序を明記する。",
"acceptance": "順序境界で停止中課金、二重決算、予約の孤立がない。",
"state": "planned",
"evidence": []
},
"original_package": {
"work": "一分更新、00:00決算、時間帯・天候更新、施設稼働判定、客選択の適用順を仕様化。新機能は分離サービスで実装しRuntimeから接続。全体の一括書換えはしない。",
"acceptance": "同一Tickでの閉店/停電/退出/課金順が決定的。コマンド再送で二重課金・二重生成しない。",
"depends_on": [
"P03"
],
"decisions": [
"D05"
]
},
"source_map": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-source-adoption-r01/source-after.json",
"bytes": 152598,
"sha256": "ad5cd250b337e87f24f9d10269ab66d36c511328b93c56ac654cb96e20e9a0bc"
},
"source_refs": 1299,
"whole_current_source_matches": true,
"full": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/runner-ended.json",
"bytes": 3729855,
"sha256": "76a3feb6a5c2b539c2c1f20f429b4e9afeb40079ed5dc7c79deb38da53eebf52"
},
"previous_accepted_full_raw_review": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full-root-review-r01/review.json",
"bytes": 264831,
"sha256": "cffa1d883d0f60e43e8d7c1638f4746d616b1314f9cc75cc1675b63a5e23df66"
},
"related_phases": [
{
"test": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/tests/business/test_business_closure.gd",
"bytes": 10795,
"sha256": "de9a36cea18a450bed920ded051d2edd4fa2babedac881be85e2cf2d8ad82363"
},
"functions": [
"_initialize",
"_run",
"_test_last_patience_minute",
"_test_group_preflight_and_retry",
"_test_scheduled_closure_restore",
"_test_outside_opening_hours_rejects_new_request",
"_fixture",
"_queue",
"_spawn",
"_closure_events",
"_has_abandonment",
"_available_meals",
"_policy",
"_cmd",
"_expect",
"_clear_fixture"
],
"phase": "001",
"pid": 78317,
"wall_seconds": 2.221705041,
"passed": true,
"raw": [
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/001/stdout.log",
"bytes": 8234,
"sha256": "66d02b501fe7d95cf5930f2d7aa2df205e6704f36c0ff2233112d3ca0cfe86a4"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/001/stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/001/engine-native.log",
"bytes": 8084,
"sha256": "08bb86c6d56347c4b064b66ad3b3028e660b714b9ac586969720b088b0085cfd"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/001/started.json",
"bytes": 2453,
"sha256": "0d4fe6ffdf14d5e298eec6fa6e1d194dfc55f910c6e69d17f7e5b44104ef8429"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/001/ended.json",
"bytes": 1813,
"sha256": "336d104671788c0127663db4cc42c53d58fed9652787dbe5954cf8e2e1ed9576"
}
]
},
{
"test": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/tests/business/test_business_operations.gd",
"bytes": 11383,
"sha256": "5dfd8f256a191835fd88af1e4dd6151dbfc87b767b443023a04f415eecce0adc"
},
"functions": [
"_initialize",
"_run",
"_catalog_and_report",
"_immutable_sale",
"_closed_queue",
"_save_and_candidates",
"_policy",
"_cmd",
"_expect",
"_finish"
],
"phase": "002",
"pid": 78345,
"wall_seconds": 1.7922645000000017,
"passed": true,
"raw": [
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/002/stdout.log",
"bytes": 8164,
"sha256": "e61bfc1a43a8188a010194190ff20f10ca0a1673cc90ac26e13a42c9a618bf2a"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/002/stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/002/engine-native.log",
"bytes": 8014,
"sha256": "1f122fb64008d6fc040d7a186ea5e92111881a19270376a8a9cbb00cb5426820"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/002/started.json",
"bytes": 2453,
"sha256": "6504be1bd5432f2858c6814ddd21e6cea77955902d049d9c16aff17162ebb170"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/002/ended.json",
"bytes": 1813,
"sha256": "59073b33282bb09e189c125f01ebbafaac2aa2ca19a6bd082694b5dd1a6fadb4"
}
]
},
{
"test": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/tests/business/test_required_kitchen.gd",
"bytes": 31533,
"sha256": "5dcc86d66bdc47003472d6c30d6889eb514e016003265965bdd8496d123d5ca5"
},
"functions": [
"_initialize",
"expect",
"_guard",
"_proof",
"_read",
"_setup",
"_listen",
"_capture_event",
"_command",
"_prepare",
"_ui",
"_select",
"_paused",
"_fixture_source",
"_fixture_package",
"_package",
"_copy_fixture_file",
"_io_valid",
"_compare_loaded",
"_new_saved_boundary",
"_reject_remote_kitchen",
"_rebuild_behind_kitchen",
"_legacy_saved_boundary",
"run",
"_cleanup",
"finish"
],
"phase": "003",
"pid": 78362,
"wall_seconds": 2.284876167,
"passed": true,
"raw": [
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/003/stdout.log",
"bytes": 17364,
"sha256": "9161df97d9e69e13c831452039f24afdd99fab2197ead680f51ee668b41d8712"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/003/stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/003/engine-native.log",
"bytes": 17214,
"sha256": "7f944358461353554d5f40b4511ca3f72bf30914d2a7aca16edac30107c279be"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/003/started.json",
"bytes": 2453,
"sha256": "bebfb76cf35381e64e00e08e543850308972f6d9bb4a59670448c3cd7923abd4"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/003/ended.json",
"bytes": 1813,
"sha256": "7bd5ad4043d6890e482df9457acaaf9bdb0d82583da88f81c06f39eda0407846"
}
]
},
{
"test": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/tests/s2/test_runtime_operations_cycle.gd",
"bytes": 14104,
"sha256": "9ec6fb682e258460b3e91870fe4690f780e1053b7fa2dcf753d31bbc8107ce35"
},
"functions": [
"_initialize",
"_run",
"_reset_runtime",
"_cleanup",
"_build_operational_cafeteria",
"_deliver_inputs_through_logistics",
"_advance_delivery",
"_run_service_sale_with_round_trip",
"_test_power_projection",
"_expect"
],
"phase": "078",
"pid": 82902,
"wall_seconds": 1.686568374999979,
"passed": true,
"raw": [
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/078/stdout.log",
"bytes": 11361,
"sha256": "6b578356af78498dffc86c46f16cc938070c6b136c33e0643773ee402d2d2026"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/078/stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/078/engine-native.log",
"bytes": 11211,
"sha256": "0540dffd0856e12089f7dbb9684159fd38edfa749302db0aa7339ae778443fe0"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/078/started.json",
"bytes": 2454,
"sha256": "9b3b3e07f368ef549c80c37a7ee02808dca498febb05a79d1396c4597dc6e6be"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/078/ended.json",
"bytes": 1814,
"sha256": "7cbcc10a3ec995d6cc9acf5997f813ea74669975621becfb34ab96278aa23d83"
}
]
},
{
"test": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/tests/s2/test_facility_service.gd",
"bytes": 17403,
"sha256": "4b834f1d9d9ab2ad00cb4a56f5202b70468bfe5f71318dbf816da1e29cc32690"
},
"functions": [
"_initialize",
"_run",
"_test_state_priority_and_opening_hours",
"_test_policy_revision_and_request_snapshot",
"_test_deterministic_queue_and_departure",
"_test_capacity_progress_and_boundaries",
"_test_interruption_and_recovery",
"_test_determinism",
"_test_snapshot_round_trip_is_atomic",
"_deterministic_run",
"_facility",
"_request",
"_queue_ids",
"_expect",
"_test_deferred_queue_clock_contract"
],
"phase": "068",
"pid": 82699,
"wall_seconds": 1.194396916999949,
"passed": true,
"raw": [
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/068/stdout.log",
"bytes": 11273,
"sha256": "75040dc91db0c69d37d6de860ad20aa8b69356f3998273e76c0e5b065655d092"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/068/stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/068/engine-native.log",
"bytes": 11123,
"sha256": "ecc2eaf71eca4d048e5a9e6ec53b82758ac28087a2d28a0569537a457c2ce16d"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/068/started.json",
"bytes": 2454,
"sha256": "536071d5e3c3049839e68376fbd560a56eb8fce5a653410d6df3a04e8cfd33a5"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/068/ended.json",
"bytes": 1814,
"sha256": "909d9db2af4e7f493821632b21fee6ea5b99a81c00376cbf06921942d50e0337"
}
]
},
{
"test": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/tests/s3/test_runtime_actor_hardening.gd",
"bytes": 19229,
"sha256": "0deb2df7be31d90a7fe70b98fe420eb748e19ab19c1cc37140f74cf0acd3fa95"
},
"functions": [
"_initialize",
"_run",
"_reset_runtime",
"_cleanup",
"_test_service_affordability_is_atomic",
"_test_guest_moves_one_cell_per_minute",
"_test_unreachable_staff_task_is_not_assigned",
"_test_shift_end_interrupts_and_fails_service",
"_test_corrupt_cross_domain_snapshots_are_atomic",
"_build_cafeteria",
"_stock",
"_register_wallet",
"_cell_distance",
"_expect"
],
"phase": "083",
"pid": 83052,
"wall_seconds": 2.3064641250000477,
"passed": true,
"raw": [
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/083/stdout.log",
"bytes": 12397,
"sha256": "07480910c4bee2b69f38a135cf7da2e37189e4e95a869a1e810fae3a2e84de3f"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/083/stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/083/engine-native.log",
"bytes": 12247,
"sha256": "d67518ff7e678c128cf68c6b306e4fb6c4411123bf6a966db355275b6b951105"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/083/started.json",
"bytes": 2454,
"sha256": "316ea79789fe0d7652bfdeee6a11064a928701db136f9fd002c1859336590a49"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/083/ended.json",
"bytes": 1814,
"sha256": "2e16c457ca9c94130ea06cd5ae047657dce8a8923a05b8f26a235a594ea83c20"
}
]
},
{
"test": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/tests/s3/test_runtime_actor_cycle.gd",
"bytes": 11320,
"sha256": "955cca90ee1be985e37ef166eaedb5c49f7001993afa38011fe3bf20ddb4a9b3"
},
"functions": [
"_initialize",
"_run",
"_reset_runtime",
"_cleanup",
"_build_cafeteria",
"_register_staff_and_run_task",
"_run_autonomous_guest_service_with_replay",
"_run_long_horizon_replay",
"_expect"
],
"phase": "082",
"pid": 83000,
"wall_seconds": 5.277048874999991,
"passed": true,
"raw": [
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/082/stdout.log",
"bytes": 10573,
"sha256": "c1d4bb8dc26cbb06136175ec7fa012fe15824392ef2920ac88e61645acf5cdc3"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/082/stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/082/engine-native.log",
"bytes": 10423,
"sha256": "0ac160bc7be65d982503af8ac3ff06bf9807a57d10bfa0e96051d832b5ddcd0a"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/082/started.json",
"bytes": 2454,
"sha256": "35f053a4d3db5a7890fd0f3fc7af7a18938a7d87eb8a2d5b651a6a0dd68587e4"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/082/ended.json",
"bytes": 1814,
"sha256": "00a58308901b1c4b664f56f3bdbf255371176152f2d335ef8eb37599f80adfbe"
}
]
},
{
"test": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/tests/s3/test_guest_service.gd",
"bytes": 38371,
"sha256": "0d10b68512685d2ed7d5c0c858952009333e0e47f348ace4b4ccdd0b21d23647"
},
"functions": [
"_initialize",
"_run",
"_test_definition_and_runtime_contract",
"_test_need_updates_and_single_clamp",
"_test_need_context_and_adult_gate",
"_test_batched_need_updates_match_individual_api",
"_test_shared_need_context_fast_paths",
"_test_candidate_filtering",
"_test_integer_utility_and_stable_tie_break",
"_test_state_machine_and_loop_guard",
"_test_atomic_queue_abandonment",
"_test_service_interruption_is_idempotent",
"_test_service_need_effect_schema",
"_test_path_failure_safe_recovery",
"_test_exit_persistence_boundary",
"_test_snapshot_round_trip_and_atomic_rejection",
"_test_v1_need_migration_and_schema_rejection",
"_test_deterministic_decision_snapshot",
"_deterministic_run",
"_service_with_definitions",
"_moving_guest",
"_candidate",
"_candidate_ids",
"_rejection_map",
"_expect",
"_test_primary_need_priority"
],
"phase": "081",
"pid": 82972,
"wall_seconds": 1.188093624999965,
"passed": true,
"raw": [
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/081/stdout.log",
"bytes": 15661,
"sha256": "5a27dd2cc73a1a4073d7574c54bc5b179ce478383dd42c1c94df28b00ec525bd"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/081/stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/081/engine-native.log",
"bytes": 15511,
"sha256": "416f1e5c658f7b585e8c0d13f08340fb306a74e6863f7832d34b9c7abbde0f7b"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/081/started.json",
"bytes": 2454,
"sha256": "d773adf5e4acd16824f2c21e467a34f311778cb3ca7a33c60a33f85042e070ee"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/081/ended.json",
"bytes": 1814,
"sha256": "79c32405d1d59640ae88d7c26f17786ee88921706b313f40f98410b650a00386"
}
]
},
{
"test": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/tests/s1/test_runtime_infrastructure_integration.gd",
"bytes": 50948,
"sha256": "aaca043097fb31a79e77c77cce1d12e34e5d8630e0ad7337af0d6860f4d45473"
},
"functions": [
"_initialize",
"_run",
"_finish",
"_test_composed_infrastructure_validation",
"_test_exact_cell_sets",
"_new_fixture",
"_free_fixture",
"_test_runtime_surface",
"_test_completion_capture_fast_path",
"_test_rank_and_operations_gates",
"_test_excavation_tick_pause_resume_and_completion",
"_test_completed_proxy_projection",
"_test_proxy_completion_raw_signal_commit_order",
"_test_proxy_completion_projection_failure_is_atomic",
"_test_completed_elevator_topology",
"_test_demolition_projection_atomicity",
"_test_current_snapshot_strictness",
"_test_v5_proxy_migration_determinism",
"_test_rank_expansion_preserves_route_union",
"_promote_rank_two",
"_complete_excavation",
"_complete_proxy",
"_register_legacy_operational_proxy",
"_strip_v6_infrastructure_domain_history",
"_legacy_v5_infrastructure_shape_is_clean",
"_construction_job_snapshot",
"_infrastructure_state",
"_completion_boundary_state",
"_assert_runtime_restore_rejected",
"_saw_domain_event",
"_domain_event_count",
"_ledger_category_count",
"_runtime_failure_diagnostic",
"_submit",
"_object_has_property",
"_same_cells",
"_expect"
],
"phase": "061",
"pid": 82558,
"wall_seconds": 2.388117125000008,
"passed": true,
"raw": [
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/061/stdout.log",
"bytes": 18665,
"sha256": "63734fc91ac61684d53abb599f5233a27747a211d731d8d2260d448942f76533"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/061/stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/061/engine-native.log",
"bytes": 18515,
"sha256": "9080fcd1a061a2a38ffeeba87c30e3ed154cd349780c48de6d236edc01cdd70f"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/061/started.json",
"bytes": 2454,
"sha256": "142590f81c31549ed8daf834daf8df347de0ba7383ad9569787cfe6d96e352b9"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/061/ended.json",
"bytes": 1814,
"sha256": "e8740980fc4d6590c534a96da1a048fff7952640f1b743eb28f685641eb4372f"
}
]
},
{
"test": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/tests/s5/test_runtime_defense_cycle.gd",
"bytes": 44418,
"sha256": "a909e2af73aae43590cdd91d07ed2548f4fd2f675d26fa63aa74f6a5cda34357"
},
"functions": [
"_initialize",
"_run",
"_reset_runtime",
"_cleanup",
"_test_all_commands_multiwave_and_terminal_replay",
"_test_manual_retreat_cancel_and_long_horizon",
"_test_scheduled_command_time_alignment",
"_test_rng_skill_and_outcome_atomicity",
"_test_cross_raid_locks",
"_test_snapshot_replay_corruption_and_legacy_migration",
"_create_staff_and_facility",
"_prepare_started_raid",
"_register_defender",
"_register_objective",
"_raid_definition",
"_wave",
"_submit",
"_submit_with_key",
"_advance",
"_count_domain_events",
"_defense_terminal_event_order",
"_expect",
"_submit_round_at_due",
"_capture_defense_views"
],
"phase": "095",
"pid": 83330,
"wall_seconds": 3.5860561249999137,
"passed": true,
"raw": [
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/095/stdout.log",
"bytes": 18719,
"sha256": "7fd80426bd123a208d01a0bcbb6de910ea412cc4252e2d1ab9d516eb10d228a7"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/095/stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/095/engine-native.log",
"bytes": 18569,
"sha256": "771adcbf7e10bfbd23bf754cbd8afd6d903b55c1b61fa77a47156584371afcec"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/095/started.json",
"bytes": 2454,
"sha256": "afa12ab7e6ee2fdf28432f935ded3fd6448d8acfefb9397f96cfa357b61fee29"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/095/ended.json",
"bytes": 1814,
"sha256": "36b417809b6c94fb07866df1d9c72db719b8b51915b962ecb156f17434520038"
}
]
},
{
"test": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/tests/s5/test_runtime_defense_autonomy.gd",
"bytes": 27641,
"sha256": "28ca81ddde4da49442b427ed4c55ddcf213ecb389712db585b64cd416636c403"
},
"functions": [
"_run",
"_test_ordinary_due_pause_two_waves_and_terminal",
"_test_multiple_raids_stable_order",
"_test_automatic_failure_pause_retry_and_atomicity",
"_test_manual_failure_is_not_hidden_by_same_tick_auto",
"_test_restart_mid_interval_and_speed_equivalence",
"_test_history_replay_does_not_skip_due_automatic_round",
"_test_history_replay_preserves_prior_manual_failure_guard",
"_test_resolution_history_is_scoped_per_raid",
"_test_generated_ids_skip_existing_saved_history",
"_test_exhausted_generated_ids_fail_atomically",
"_test_auto_breach_projects_facility_suspension"
],
"phase": "094",
"pid": 83316,
"wall_seconds": 1.683205791999967,
"passed": true,
"raw": [
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/094/stdout.log",
"bytes": 20329,
"sha256": "f68d77e79a472c0bd767ebb29108fb45bacb5676b4f328eb6215df3199522319"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/094/stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/094/engine-native.log",
"bytes": 20179,
"sha256": "d77ab797fed1182c495a6f9fa2e04849b0d36b14ab0b0ff905cddaa03b4ced5b"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/094/started.json",
"bytes": 2454,
"sha256": "c5b3a7f613e6e9bedf75742a903255bc63a6b72c56d11148d2c11b607006f85d"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/094/ended.json",
"bytes": 1814,
"sha256": "94fd4709e37c8c7bb5e13083e94afc0d4a7f6641d2e9cd434cea81dfef6f2cb2"
}
]
},
{
"test": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/tests/staff/test_shift_rush.gd",
"bytes": 3668,
"sha256": "af3d47d848c1220741992612e57736df4af05969d424b79829d9977c774e8149"
},
"functions": [
"_initialize",
"expect",
"run"
],
"phase": "106",
"pid": 83806,
"wall_seconds": 2.6739929579999853,
"passed": true,
"raw": [
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/106/stdout.log",
"bytes": 9499,
"sha256": "88ce5bf86c98ada699640c7945918be24eaff18240c85fe5d87b9f0ed196940d"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/106/stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/106/engine-native.log",
"bytes": 9349,
"sha256": "9cf5d650001de0416277379c44d18da35432d6805f4334da266d2456212e424d"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/106/started.json",
"bytes": 2454,
"sha256": "26693fd3eae0d8429711efac022c2eb8671ec1e80f15153f56e32dfaeab3386d"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/106/ended.json",
"bytes": 1814,
"sha256": "9a800630c785cc30f2126037d4630b47d0c8452d17417634468b37ce99ed6b23"
}
]
},
{
"test": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/tests/staff/test_dormitory_shift_cycle.gd",
"bytes": 3857,
"sha256": "ada3c0177f00648137d02450fce5f33da0a644dae9ec861ac51648770dafebda"
},
"functions": [
"_initialize",
"expect",
"command",
"run",
"finish"
],
"phase": "104",
"pid": 83625,
"wall_seconds": 21.03801062499997,
"passed": true,
"raw": [
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/104/stdout.log",
"bytes": 7904,
"sha256": "2fda9874a597ede6395054bf62f947b9a3d5c3eeec59f8b31a5165ce60cb17fb"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/104/stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/104/engine-native.log",
"bytes": 7754,
"sha256": "d52c1c110449acbde254bee3c6e872e36099002696fbac4e4c5aae900d4ba048"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/104/started.json",
"bytes": 2454,
"sha256": "7e141a72896df939e7e19a973a7b94df65f3f8bab579b4fd7432bb96fd0e8617"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/104/ended.json",
"bytes": 1814,
"sha256": "76a6af76616bb0ca2f4aaf7683fec1dba8ca808540ff4fa271b4d3744dab0d5e"
}
]
},
{
"test": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/tests/mvp/test_original_midnight_settlement.gd",
"bytes": 22752,
"sha256": "2e6d7e907156db36a44b2e3b124b2311ddc79fe45250b8dc312b0a3f543bb7d1"
},
"functions": [
"_initialize",
"_run",
"_test_legacy",
"_bind",
"_expect",
"_test_principal_financing",
"_test_principal_repayment",
"_test_principal_command",
"_test_principal_profit_marker"
],
"phase": "018",
"pid": 80026,
"wall_seconds": 1.7019535829999768,
"passed": true,
"raw": [
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/018/stdout.log",
"bytes": 7876,
"sha256": "ae66c169cc8d27660c1b6ac38d2d1106b93ab9e876556a9b04e4a228f040afaf"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/018/stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/018/engine-native.log",
"bytes": 7726,
"sha256": "4bb6898abf559763d08dd8e5c461598b0c9aee6ee81845d7f2d2b3a2d4ebe784"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/018/started.json",
"bytes": 2454,
"sha256": "03564b3584582ab1f633594e52d9b5bb6ab456f214eedb6da99a1accf86ff4cc"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/018/ended.json",
"bytes": 1814,
"sha256": "e1caab0705c02151f68e900f4b5c5afb29283c42d950c87a9f6c02d68e1b31c3"
}
]
},
{
"test": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/tests/mvp/test_runtime_operations_acceptance.gd",
"bytes": 19115,
"sha256": "a802afdc5786b6690a2c8b81f39eefda9c04624826d5cb90c587cf84190feea3"
},
"functions": [
"_initialize",
"_run",
"_new_fixture",
"_free_fixture",
"_advance_operations_boundary_slice",
"_align_operations_fixture_clocks",
"_operations_slice_is_healthy",
"_test_waiting_choice_and_command_exactly_once",
"_test_twenty_four_hour_actual_tick_smoke",
"_test_full_partial_payroll_bankruptcy_and_v9_tamper",
"_assert_v9_tamper_rejected",
"_test_fourteen_day_boundary_snapshot_determinism",
"_expect"
],
"phase": "026",
"pid": 80344,
"wall_seconds": 45.46433608299998,
"passed": true,
"raw": [
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/026/stdout.log",
"bytes": 10760,
"sha256": "dad327d6287f0fbff92793a02f63d2f9060f248bb4091e1f3fb0ca4564ad9477"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/026/stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/026/engine-native.log",
"bytes": 10610,
"sha256": "d80f32470dfff8deb3e5129cfc10a34a3eecc881e26417820baa3165772f1985"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/026/started.json",
"bytes": 2454,
"sha256": "6237367a2e07b2fe910d84513e429dac72bdbbea9e07cdd76a9f95decaf2a7a4"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/026/ended.json",
"bytes": 1814,
"sha256": "a41a9e8656688811f5a3b23ce944b839bc772b7a26111d36ad4b0ba985fa3a6d"
}
]
},
{
"test": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/tests/mvp/test_runtime_mana_depletion.gd",
"bytes": 5343,
"sha256": "8d94fd8e28b0fc22a699c630b5d68e7afd476a1305c86ecf57858b2f1d49b8ae"
},
"functions": [
"_initialize",
"expect",
"_run"
],
"phase": "025",
"pid": 80326,
"wall_seconds": 1.8033619999999928,
"passed": true,
"raw": [
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/025/stdout.log",
"bytes": 7875,
"sha256": "14825b636af4b1ec829bccba61c85aac40538b15bd8c5b69106c3e1e89f04697"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/025/stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/025/engine-native.log",
"bytes": 7725,
"sha256": "f34478fce5d6bc0619d02a01c95dba8b703fb3f83f2401c7e2643ba43e76c7f8"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/025/started.json",
"bytes": 2454,
"sha256": "fe85d47114b7193f066fa6d4950fa9c466c707b05899af6b5b0fa0e1dee99d98"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/025/ended.json",
"bytes": 1814,
"sha256": "030cd91bd38a4327feec7b5af6130ac80e15cc688e3561b3627c411ec7b69bb4"
}
]
},
{
"test": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/tests/mvp/test_runtime_upkeep.gd",
"bytes": 7337,
"sha256": "eae48823d58d78c419d29728e33a5559fbe5131b49e33d04ca4e6fa3a721c29b"
},
"functions": [
"_initialize",
"expect",
"_run"
],
"phase": "028",
"pid": 81170,
"wall_seconds": 23.856997417000002,
"passed": true,
"raw": [
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/028/stdout.log",
"bytes": 7875,
"sha256": "789083b111e2ea23188de05ec8b365389dad80ae008ab871ed94f295fd146086"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/028/stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/028/engine-native.log",
"bytes": 7725,
"sha256": "b7e8db9cceff07e3aa294bca86e3aa4ce0fe0c97ad8cce35d9f86f9eac0be865"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/028/started.json",
"bytes": 2454,
"sha256": "e53fceac25bbf69d3448cb13eda03a407765b1e16e4906e3f50138a645965164"
},
{
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-02-paid-completion-final-full172-native-r01/028/ended.json",
"bytes": 1814,
"sha256": "b5e538ac1133cbd0047f4ba93ad9675781efdc12031b75621a685239190d1c80"
}
]
}
],
"implementation_excerpts": [
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/scripts/core/simulation_kernel.gd",
"bytes": 7602,
"sha256": "341c0c878c4894adbac628d0db6362ff69fc3347bdd9e61e50936e15dc2d1edb"
},
"function": "advance_one_minute",
"start_line": 122,
"end_line": 158,
"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",
"body_sha256": "b9587ef722d8c8640248025462819374ae5eca1c3d8bbe600b6bc9c328567777"
},
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/scripts/core/simulation_kernel.gd",
"bytes": 7602,
"sha256": "341c0c878c4894adbac628d0db6362ff69fc3347bdd9e61e50936e15dc2d1edb"
},
"function": "_run_phase",
"start_line": 236,
"end_line": 249,
"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",
"body_sha256": "52461eeb288892a4bb4b6a99570185af08a30758ef88b0046a911baaa6f318e1"
},
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/scripts/core/simulation_kernel.gd",
"bytes": 7602,
"sha256": "341c0c878c4894adbac628d0db6362ff69fc3347bdd9e61e50936e15dc2d1edb"
},
"function": "_handle_time_boundaries",
"start_line": 254,
"end_line": 259,
"body": "func _handle_time_boundaries(previous_absolute_minute: int) -> void:\n\tif minute_of_day == 0:\n\t\tvar completed_day := previous_absolute_minute / MINUTES_PER_DAY + 1\n\t\tsettlement_requested.emit(completed_day)\n\t\tday_started.emit(day)\n\n",
"body_sha256": "2ced47a2911b36def9d89de82a43afc69148ead44d19db6a2a6c7bce5a910ae9"
},
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/scripts/core/command_queue.gd",
"bytes": 14401,
"sha256": "09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895"
},
"function": "_comes_before",
"start_line": 409,
"end_line": 414,
"body": "func _comes_before(left: SimulationCommand, right: SimulationCommand) -> bool:\n\tif left.execute_tick != right.execute_tick:\n\t\treturn left.execute_tick < right.execute_tick\n\tif left.priority != right.priority:\n\t\treturn left.priority > right.priority\n\treturn left.command_id < right.command_id\n",
"body_sha256": "21f7f9f7c0923121fd0a022a2f7546b7bb7117a9979c1ed25d0b33b96e28ab28"
},
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/autoload/simulation_runtime.gd",
"bytes": 608704,
"sha256": "2d7e2cea5424585e9aa4302ab66d1fc4dbaefe743ce4328fccc1efa2f19b82e4"
},
"function": "_process_tick_commands",
"start_line": 5736,
"end_line": 5746,
"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",
"body_sha256": "9de66a4bb84b12304300d49085f44546412319bd4aee91e67b61becf97e50294"
},
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/autoload/simulation_runtime.gd",
"bytes": 608704,
"sha256": "2d7e2cea5424585e9aa4302ab66d1fc4dbaefe743ce4328fccc1efa2f19b82e4"
},
"function": "_advance_operations_time",
"start_line": 1894,
"end_line": 1949,
"body": "func _advance_operations_time(absolute_minute: int) -> void:\n\tif not _operations_enabled or operations_coordinator == null:\n\t\treturn\n\tif _operations_deferred_runtime_minute >= 0:\n\t\t_operations_tick_blocked = true\n\t\t_clock.set_paused(true)\n\t\treturn\n\t_operations_tick_blocked = false\n\tvar advanced := operations_coordinator.advance_to(absolute_minute, true)\n\tif not advanced.is_success():\n\t\t# Earlier boundaries in the same minute can already be validly committed\n\t\t# (for example demand before a failed arrival). Publish only those staged\n\t\t# effects and notifications; the failing callback rolled itself back.\n\t\tif not _commit_operations_domain_events() \\\n\t\t\t\tor not _commit_operations_notifications():\n\t\t\toperations_coordinator.discard_deferred_notifications()\n\t\t\t_discard_operations_domain_events()\n\t\t_operations_runtime_failure_latched = true\n\t\t_operations_runtime_failure_report = advanced.to_dictionary()\n\t\t_operations_deferred_runtime_minute = absolute_minute\n\t\t_operations_tick_blocked = true\n\t\t_clock.set_paused(true)\n\t\treturn\n\tif operations_coordinator.current_minute != absolute_minute \\\n\t\t\tor operations_coordinator.get_population_count() != guest_service.guest_count() \\\n\t\t\tor operations_coordinator.get_arrears_total() != _operations_closed_arrears_total() \\\n\t\t\tor not _operations_notifications_are_committable() \\\n\t\t\tor not _commit_operations_domain_events() \\\n\t\t\tor not _commit_operations_notifications():\n\t\toperations_coordinator.discard_deferred_notifications()\n\t\t_discard_operations_domain_events()\n\t\t_operations_runtime_failure_latched = true\n\t\t_operations_runtime_failure_report = {\n\t\t\t&\"code\": &\"OPERATIONS_CROSSLINK_MISMATCH\",\n\t\t\t&\"minute\": absolute_minute,\n\t\t}\n\t\t_operations_deferred_runtime_minute = absolute_minute\n\t\t_operations_tick_blocked = true\n\t\t_clock.set_paused(true)\n\t\treturn\n\t_operations_runtime_failure_latched = false\n\t_operations_runtime_failure_report.clear()\n\tif operations_coordinator.is_terminal():\n\t\t_operations_deferred_runtime_minute = -1\n\t\t_operations_tick_blocked = true\n\t\t_clock.set_paused(true)\n\t\treturn\n\tif operations_coordinator.pause_requested:\n\t\t_operations_deferred_runtime_minute = absolute_minute\n\t\t_operations_tick_blocked = true\n\t\t_clock.set_paused(true)\n\t\treturn\n\t_operations_deferred_runtime_minute = -1\n\t_pause_for_waiting_foreground_event()\n\n\n",
"body_sha256": "511580d1fac3d2785072e94c2981065fa47ba18b1c97122922645dac5c0d94ab"
},
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/autoload/simulation_runtime.gd",
"bytes": 608704,
"sha256": "2d7e2cea5424585e9aa4302ab66d1fc4dbaefe743ce4328fccc1efa2f19b82e4"
},
"function": "_run_operations_deferred_suffix",
"start_line": 1683,
"end_line": 1700,
"body": "func _run_operations_deferred_suffix(absolute_minute: int) -> void:\n\t_advance_mana(absolute_minute)\n\t_advance_construction(absolute_minute)\n\t_advance_inventory_and_logistics(absolute_minute)\n\t_advance_facilities(absolute_minute)\n\t_advance_guest_vitals(absolute_minute)\n\t_advance_authority_incidents(absolute_minute)\n\t_advance_defense(absolute_minute)\n\t_advance_relationship_events(absolute_minute)\n\t_advance_guest_queues(absolute_minute)\n\t_advance_staff_ai(absolute_minute)\n\tif _active_command_minute >= 0:\n\t\t_operations_resume_publish_pending = true\n\telse:\n\t\t_publish_snapshot(absolute_minute)\n\t\t_process_save_checkpoints(absolute_minute)\n\n\n",
"body_sha256": "12075307b12cbb66ffda47a26097194a07fad9d6467e3e557bd7269315c98982"
},
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/autoload/simulation_runtime.gd",
"bytes": 608704,
"sha256": "2d7e2cea5424585e9aa4302ab66d1fc4dbaefe743ce4328fccc1efa2f19b82e4"
},
"function": "_advance_mana",
"start_line": 10628,
"end_line": 10661,
"body": "func _advance_mana(absolute_minute: int) -> void:\n\tif _operations_tick_blocked:\n\t\treturn\n\tvar infrastructure_preflight := _preflight_proxy_completions(absolute_minute)\n\tif not bool(infrastructure_preflight.get(&\"ok\", false)):\n\t\t_latch_infrastructure_failure(\n\t\t\tStringName(infrastructure_preflight.get(\n\t\t\t\t&\"code\", &\"INFRASTRUCTURE_PREFLIGHT_FAILED\"\n\t\t\t)),\n\t\t\tabsolute_minute,\n\t\t\tString(infrastructure_preflight.get(\n\t\t\t\t&\"reason\", \"Infrastructure completion preflight failed.\"\n\t\t\t)),\n\t\t\tinfrastructure_preflight.get(&\"details\", {})\n\t\t)\n\t\treturn\n\tvar report := mana_network_service.advance_one_minute(absolute_minute)\n\t# Finite reserve is an additional gate, even between network evaluations and\n\t# for zero-demand facilities. The network remains the local supply authority.\n\tpreload(\"res://scripts/mana/mana_power_projection.gd\").apply(\n\t\tfacility_service, mana_network_service, int(_state.get_resource(&\"mana\")), absolute_minute\n\t)\n\tfor change: Dictionary in report.get(&\"state_changes\", []):\n\t\tvar consumer_id := StringName(change.get(&\"consumer_id\", \"\"))\n\t\t_publish_domain_event(SimulationDomainEvent.new(\n\t\t\tid_generator.next_id(&\"domain_event\"),\n\t\t\t&\"MANA_STATE_CHANGED\",\n\t\t\tabsolute_minute,\n\t\t\t&\"mana_network_service\",\n\t\t\t[consumer_id],\n\t\t\tchange,\n\t\t\t0\n\t\t))\n\n",
"body_sha256": "05c54626ce6e355acd92994ab80aaf2177c5cf194885e66934552139e087599e"
},
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/autoload/simulation_runtime.gd",
"bytes": 608704,
"sha256": "2d7e2cea5424585e9aa4302ab66d1fc4dbaefe743ce4328fccc1efa2f19b82e4"
},
"function": "_advance_facilities",
"start_line": 8421,
"end_line": 8426,
"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",
"body_sha256": "f1efd0c23bdd60d1ef19a21879640b53b8b4d88844c0c881fe7cd724387ec274"
},
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/autoload/simulation_runtime.gd",
"bytes": 608704,
"sha256": "2d7e2cea5424585e9aa4302ab66d1fc4dbaefe743ce4328fccc1efa2f19b82e4"
},
"function": "_advance_guest_vitals",
"start_line": 8427,
"end_line": 8440,
"body": "func _advance_guest_vitals(absolute_minute: int) -> void:\n\tif _operations_tick_blocked:\n\t\treturn\n\tvar minute_of_day := posmod(absolute_minute, 1_440)\n\tguest_service.advance_one_minute(absolute_minute, {\n\t\t&\"default\": {\n\t\t\t&\"unstimulated\": true,\n\t\t\t&\"solo_guest\": true,\n\t\t\t&\"is_night\": minute_of_day < 360 or minute_of_day >= 1_080,\n\t\t\t&\"intimacy_day\": 3,\n\t\t\t&\"intimacy_night\": 7,\n\t\t}\n\t})\n\n",
"body_sha256": "8226ca18c983ac576a74e772cc3088e9fe52b362ffba1b71255bd1d7623c1234"
},
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/autoload/simulation_runtime.gd",
"bytes": 608704,
"sha256": "2d7e2cea5424585e9aa4302ab66d1fc4dbaefe743ce4328fccc1efa2f19b82e4"
},
"function": "_advance_staff_ai",
"start_line": 8597,
"end_line": 8636,
"body": "func _advance_staff_ai(absolute_minute: int) -> void:\n\tif _operations_tick_blocked:\n\t\treturn\n\t_prune_expired_staff_elevator_waits(absolute_minute)\n\t_advance_elevators(absolute_minute)\n\t_advance_staff_rescue(absolute_minute)\n\tstaff_service.advance_one_minute(absolute_minute)\n\t_prune_expired_staff_elevator_waits(absolute_minute)\n\tstaff_commute.tick(absolute_minute)\n\t_sync_facility_staffing(absolute_minute)\n\tcleaning_bridge.tick(absolute_minute)\n\tfor task: StaffTask in staff_service.get_tasks():\n\t\tif task.state == StaffTask.State.RESERVED:\n\t\t\tif task.state_changed_at < absolute_minute:\n\t\t\t\ttask.begin_moving(task.state_changed_at)\n\t\telif task.state == StaffTask.State.WORKING and task.task_type == CleaningBridge.TASK_TYPE:\n\t\t\t# Only cleaning is deferred from StaffService to these attendance and\n\t\t\t# dependency checks. Other tasks already progressed once this minute.\n\t\t\tif task.state_changed_at >= absolute_minute or not cleaning_bridge.task_can_work(task, staff_service.get_staff(task.assigned_staff_id)):\n\t\t\t\tcontinue\n\t\t\tvar work_units := CleaningBridge.work_units_per_minute(staff_service.get_staff(task.assigned_staff_id))\n\t\t\tstaff_service.progress_task(task.task_id, work_units, absolute_minute)\n\tfor staff: StaffRuntime in staff_service.get_staff_members():\n\t\tif absolute_minute % 30 != 0:\n\t\t\tcontinue\n\t\tif staff.state == StaffRuntime.State.WORKING or (staff.state == StaffRuntime.State.AVAILABLE and staff_commute.is_present(staff, facility_service.get_instance(staff.assigned_facility_id))):\n\t\t\tstaff.add_fatigue(1)\n\t\t\tif _operations_enabled:\n\t\t\t\tstaff.health = maxi(staff.health - 1, 0)\n\t\telif staff.state == StaffRuntime.State.OFF_DUTY:\n\t\t\tvar resting := get_staff_rest_report(staff.staff_id)\n\t\t\tif not _operations_enabled or resting.get(&\"resting\", false):\n\t\t\t\tstaff.add_fatigue(-1)\n\t\t\t\tif _operations_enabled and staff.health > 0:\n\t\t\t\t\tstaff.health = mini(staff.health + 1, 100)\n\t_advance_staff_rescue(absolute_minute)\n\t_sync_facility_staffing(absolute_minute)\n\t_advance_guest_ai_decisions(absolute_minute)\n\n## Record the actual completed choice, not a fresh prediction made by the UI.\n",
"body_sha256": "0e222987f7c5e25583dbaba8fe63784aa563715067396e8d31d10bd191e7179b"
},
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/autoload/simulation_runtime.gd",
"bytes": 608704,
"sha256": "2d7e2cea5424585e9aa4302ab66d1fc4dbaefe743ce4328fccc1efa2f19b82e4"
},
"function": "_advance_guest_ai_decisions",
"start_line": 8677,
"end_line": 8704,
"body": "func _advance_guest_ai_decisions(absolute_minute: int) -> void:\n\tfor guest: GuestRuntime in guest_service.get_guests():\n\t\tmatch guest.state:\n\t\t\tGuestRuntime.State.SPAWNING:\n\t\t\t\tguest_service.transition_guest(guest.guest_id, GuestRuntime.State.ENTERING, absolute_minute, &\"ENTRY_STARTED\")\n\t\t\tGuestRuntime.State.ENTERING:\n\t\t\t\tguest_service.transition_guest(guest.guest_id, GuestRuntime.State.DECIDING, absolute_minute, &\"ENTRY_COMPLETED\")\n\t\t\tGuestRuntime.State.DECIDING:\n\t\t\t\tif guest.planned_exit_at <= absolute_minute:\n\t\t\t\t\tguest_service.begin_leaving(guest.guest_id, absolute_minute, &\"PLANNED_EXIT\")\n\t\t\t\t\tcontinue\n\t\t\t\tguest.wallet_gold = economy_service.get_balance(_guest_wallet_account(guest.guest_id))\n\t\t\t\t_decide_guest_with_log(\n\t\t\t\t\tguest.guest_id,\n\t\t\t\t\t_project_guest_candidates(guest.guest_id),\n\t\t\t\t\tabsolute_minute,\n\t\t\t\t\t{&\"absolute_minute\": absolute_minute}\n\t\t\t\t)\n\t\t\tGuestRuntime.State.MOVING:\n\t\t\t\tpass\n\t\t\tGuestRuntime.State.REPLANNING, GuestRuntime.State.ABANDONING, GuestRuntime.State.INTERRUPTED:\n\t\t\t\tguest_service.transition_guest(guest.guest_id, GuestRuntime.State.DECIDING, absolute_minute, &\"REPLAN_AFTER_INTERRUPTION\")\n\t\t\tGuestRuntime.State.LEAVING:\n\t\t\t\tif guest.state_entered_at < absolute_minute:\n\t\t\t\t\tguest_service.despawn_guest(guest.guest_id, absolute_minute)\n\t_advance_runtime_path_traffic(absolute_minute)\n\n\n",
"body_sha256": "e33b41294e88dba840affd5cc0a5c58fe5d46f5d98a80a8d5f4e907a3b9a7b93"
},
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/autoload/simulation_runtime.gd",
"bytes": 608704,
"sha256": "2d7e2cea5424585e9aa4302ab66d1fc4dbaefe743ce4328fccc1efa2f19b82e4"
},
"function": "_release_closed_business_queues",
"start_line": 12557,
"end_line": 12574,
"body": "func _release_closed_business_queues(absolute_minute: int) -> void:\n\tfor facility: FacilityInstance in facility_service.get_instances():\n\t\tif facility.operator_open and facility.is_within_opening_hours(absolute_minute):\n\t\t\tcontinue\n\t\tfor request: ServiceRequest in facility_service.get_queue(facility.instance_id):\n\t\t\t_release_closed_business_request(facility, request, absolute_minute)\n\tfor guest: GuestRuntime in guest_service.get_guests():\n\t\tif guest.state != GuestRuntime.State.MOVING:\n\t\t\tcontinue\n\t\tvar facility := facility_service.get_instance(guest.target_facility_id)\n\t\tif facility == null or (facility.operator_open and facility.is_within_opening_hours(absolute_minute)):\n\t\t\tcontinue\n\t\tvar transition := guest_service.transition_guest(guest.guest_id, GuestRuntime.State.REPLANNING, absolute_minute, &\"FACILITY_CLOSED\")\n\t\tif bool(transition.get(&\"ok\", false)):\n\t\t\tguest.target_facility_id = &\"\"\n\t\t\tguest.path_handle = null\n\n\n",
"body_sha256": "3a05fbe94877eeb750fb0d692501954555ab6a8005448ab3b6023dab9bad816b"
},
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/autoload/simulation_runtime.gd",
"bytes": 608704,
"sha256": "2d7e2cea5424585e9aa4302ab66d1fc4dbaefe743ce4328fccc1efa2f19b82e4"
},
"function": "_release_closed_business_request",
"start_line": 12575,
"end_line": 12620,
"body": "func _release_closed_business_request(facility: FacilityInstance, request: ServiceRequest, minute: int) -> void:\n\t# Validate the entire group before any queue/state signals become observable.\n\tfor guest_id: StringName in request.guest_ids:\n\t\tvar guest := guest_service.get_guest(guest_id)\n\t\tif guest == null:\n\t\t\tcontinue\n\t\tif guest.state != GuestRuntime.State.QUEUING or guest.queue_request_id != request.request_id or guest.target_facility_id != facility.instance_id:\n\t\t\treturn\n\t\tif guest.transition_tick == minute and guest.transitions_this_tick >= GuestService.MAX_TRANSITIONS_PER_TICK:\n\t\t\treturn\n\t# A group releases its one reservation and queue atomically. A transition-budget\n\t# failure retries next minute, without taking patience or dropping any stock.\n\tvar before_inventory := inventory_service.create_snapshot()\n\tvar before_facility := facility_service.create_snapshot()\n\tvar before_guest := guest_service.create_snapshot()\n\tvar before_events := domain_events.create_snapshot()\n\tvar before_ids := id_generator.create_snapshot()\n\tvar released := false\n\tvar release := func(_guest_id: StringName = &\"\", _facility_id: StringName = &\"\", _request_id: StringName = &\"\") -> Dictionary:\n\t\tfor reservation_id: StringName in request.reserved_inventory_ids:\n\t\t\tvar result := inventory_service.release_reservation(reservation_id, StringName(\"business.close.%s.%s\" % [request.request_id, reservation_id]), minute)\n\t\t\tif not bool(result.get(&\"ok\", false)):\n\t\t\t\treturn result\n\t\tvar result := facility_service.leave_queue(facility.instance_id, request.request_id, &\"FACILITY_CLOSED\")\n\t\treturn {&\"ok\": result.is_success()}\n\tvar ok := true\n\tfor guest_id: StringName in request.guest_ids:\n\t\tif not guest_service.has_guest(guest_id):\n\t\t\tcontinue\n\t\tvar result: Dictionary = guest_service.release_queue_for_replanning(guest_id, minute, release if not released else Callable())\n\t\tif not bool(result.get(&\"ok\", false)):\n\t\t\tok = false\n\t\t\tbreak\n\t\treleased = true\n\tif ok and not released:\n\t\tok = bool(release.call().get(&\"ok\", false))\n\tif not ok:\n\t\tinventory_service.restore_snapshot(before_inventory)\n\t\tfacility_service.restore_snapshot(before_facility)\n\t\tguest_service.restore_snapshot(before_guest)\n\t\tdomain_events.restore_snapshot(before_events)\n\t\tid_generator.restore_snapshot(before_ids)\n\n\n## Commute and elevator movement share the authoritative Path projection and\n## fixed-point walking credit used by errands and guests.\n",
"body_sha256": "6dbde3a3d425e47a049dcc4f05eae6f01fe9784f473c0fb1019a0633c239d83b"
},
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/autoload/simulation_runtime.gd",
"bytes": 608704,
"sha256": "2d7e2cea5424585e9aa4302ab66d1fc4dbaefe743ce4328fccc1efa2f19b82e4"
},
"function": "_complete_service_transaction",
"start_line": 11702,
"end_line": 11717,
"body": "func _complete_service_transaction(\n\tservice: ServiceInstance,\n\trequest: ServiceRequest,\n\tfacility: FacilityInstance,\n\tabsolute_minute: int\n) -> Variant:\n\t# A sale is only observable after its inventory, rewards and cleanliness\n\t# effects commit. Rollback removes provisional receipts before scope exit.\n\teconomy_service.begin_notification_scope()\n\tvar result: Variant = _apply_service_transaction(service, request, facility, absolute_minute)\n\tif result is bool and result:\n\t\t_state.set_resource(&\"gold\", economy_service.get_balance(PLAYER_CASH_ACCOUNT))\n\teconomy_service.end_notification_scope()\n\treturn result\n\n\n",
"body_sha256": "f2b6e96a8eeef3dd3f8419b4d9d5ef4e1d13241600ce970bdd78a924428cac6c"
},
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/scripts/facility/facility_service.gd",
"bytes": 44951,
"sha256": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77"
},
"function": "advance_one_minute",
"start_line": 544,
"end_line": 581,
"body": "func advance_one_minute(absolute_minute: int = -1) -> Array[CommandResult]:\n\tif absolute_minute < 0:\n\t\tcurrent_minute += 1\n\telif absolute_minute < current_minute:\n\t\treturn [_invalid(\"FacilityService cannot advance backwards in time.\")]\n\telse:\n\t\tcurrent_minute = absolute_minute\n\trefresh_operating_dependencies(current_minute)\n\tvar results: Array[CommandResult] = []\n\tfor instance_id: StringName in _sorted_keys(_instances):\n\t\tvar instance: FacilityInstance = _instances[instance_id]\n\t\tinstance.apply_pending_policy(current_minute)\n\t\tvar old_state := instance.state\n\t\tinstance.evaluate_state(current_minute)\n\t\t_emit_state_change(instance, old_state)\n\t\tvar active_ids := _sorted_keys(instance.active_services)\n\t\tfor service_id: StringName in active_ids:\n\t\t\tif not instance.active_services.has(service_id):\n\t\t\t\tcontinue\n\t\t\tvar service: ServiceInstance = instance.active_services[service_id]\n\t\t\tvar preparation := _prepare_service_for_tick(instance, service)\n\t\t\tif preparation != null:\n\t\t\t\tresults.append(preparation)\n\t\t\tif not instance.active_services.has(service_id):\n\t\t\t\tcontinue\n\t\t\tif service.state != ServiceInstanceType.State.ACTIVE:\n\t\t\t\tcontinue\n\t\t\tvar ready_to_complete := service.elapsed_minutes >= service.duration_minutes\n\t\t\tif not ready_to_complete:\n\t\t\t\tready_to_complete = service.advance_one_minute()\n\t\t\tif ready_to_complete:\n\t\t\t\tresults.append(_complete_service(instance, service))\n\t\tvar starts := fill_available_slots(instance_id, current_minute)\n\t\tresults.append_array(starts)\n\tlast_error = \"\"\n\treturn results\n\n\n",
"body_sha256": "59c0e89b4dca291e3ec02601b3f7c5544dba7c823fc137e0e7a50e7d5319e0ed"
},
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/scripts/facility/facility_service.gd",
"bytes": 44951,
"sha256": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77"
},
"function": "_prepare_service_for_tick",
"start_line": 853,
"end_line": 894,
"body": "func _prepare_service_for_tick(\n\tinstance: FacilityInstance,\n\tservice: ServiceInstance\n) -> CommandResult:\n\tif instance.state == FacilityInstanceType.State.BROKEN:\n\t\t_fail_service(instance, service, INTERRUPTION_BROKEN, current_minute)\n\t\treturn _success({&\"service_id\": service.service_id, &\"failed\": true})\n\tif not instance.related_facility_operating:\n\t\tif service.state == ServiceInstanceType.State.ACTIVE:\n\t\t\tservice.pause(&\"RELATED_FACILITY_INACTIVE\", current_minute)\n\t\t\tservice_interrupted.emit(service, &\"RELATED_FACILITY_INACTIVE\")\n\t\treturn null\n\tif service.state == ServiceInstanceType.State.PAUSED and service.interruption_reason == &\"RELATED_FACILITY_INACTIVE\":\n\t\tservice.resume()\n\tif not instance.power_available:\n\t\tif service.state == ServiceInstanceType.State.ACTIVE:\n\t\t\tservice.pause(INTERRUPTION_NO_POWER, current_minute)\n\t\t\tservice_interrupted.emit(service, INTERRUPTION_NO_POWER)\n\t\treturn null\n\tif service.state == ServiceInstanceType.State.PAUSED \\\n\t\tand service.interruption_reason == INTERRUPTION_NO_POWER:\n\t\tservice.resume()\n\tvar has_required_staff := instance.active_staff_ids.size() >= instance.staff_min\n\tif not has_required_staff:\n\t\tif service.state in [ServiceInstanceType.State.ACTIVE, ServiceInstanceType.State.PAUSED]:\n\t\t\tservice.wait_for_staff(\n\t\t\t\tINTERRUPTION_STAFF_UNAVAILABLE,\n\t\t\t\tcurrent_minute,\n\t\t\t\tSTAFF_REPLACEMENT_GRACE_MINUTES\n\t\t\t)\n\t\t\tservice_interrupted.emit(service, INTERRUPTION_STAFF_UNAVAILABLE)\n\telif instance.staff_min > 0 \\\n\t\tand service.state == ServiceInstanceType.State.WAITING_FOR_STAFF \\\n\t\tand service.interruption_reason == INTERRUPTION_STAFF_UNAVAILABLE:\n\t\tservice.resume()\n\tif service.state == ServiceInstanceType.State.WAITING_FOR_STAFF:\n\t\tif service.staff_grace_deadline >= 0 and current_minute >= service.staff_grace_deadline:\n\t\t\t_fail_service(instance, service, INTERRUPTION_STAFF_UNAVAILABLE, current_minute)\n\t\t\treturn _success({&\"service_id\": service.service_id, &\"failed\": true})\n\treturn null\n\n\n",
"body_sha256": "b35c2c0fb23a04258b71995dd7c3b6dfacbbcdf36106e2e3348acef0e18d21cc"
},
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/scripts/facility/facility_service.gd",
"bytes": 44951,
"sha256": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77"
},
"function": "_complete_service",
"start_line": 895,
"end_line": 932,
"body": "func _complete_service(\n\tinstance: FacilityInstance,\n\tservice: ServiceInstance,\n\tcallback: Callable = Callable()\n) -> CommandResult:\n\tvar request := get_request(service.request_id)\n\tif request == null:\n\t\t_fail_service(instance, service, &\"MISSING_REQUEST\", current_minute)\n\t\treturn _invalid(\n\t\t\t\"Active service lost its request and was failed safely.\",\n\t\t\t{&\"service_id\": service.service_id}\n\t\t)\n\tvar effective_callback := callback if callback.is_valid() else _completion_callback\n\tvar callback_failure := _run_boundary_callback(\n\t\teffective_callback,\n\t\t[service, request, instance, current_minute],\n\t\t\"Service completion transaction failed.\",\n\t\tCommandResultType.Code.TRANSACTION_APPLY_FAILED\n\t)\n\tif callback_failure != null:\n\t\tcallback_failure.details[&\"service_id\"] = service.service_id\n\t\tcallback_failure.details[&\"request_id\"] = request.request_id\n\t\treturn callback_failure\n\tservice.mark_completed(current_minute)\n\tinstance.active_services.erase(service.service_id)\n\t_requests.erase(request.request_id)\n\t_service_history[service.service_id] = service\n\t_increment_stat(instance.statistics_today, &\"services_completed\")\n\t_increment_stat(instance.lifetime_statistics, &\"services_completed\")\n\tservice_completed.emit(service)\n\treturn _success({\n\t\t&\"instance_id\": instance.instance_id,\n\t\t&\"request_id\": request.request_id,\n\t\t&\"service_id\": service.service_id,\n\t\t&\"completed\": true,\n\t})\n\n\n",
"body_sha256": "494edfd11cb3e896d73c2c6fdbe7c1193efce6d869b105e526d2f1dfd1168142"
},
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/scripts/facility/facility_service.gd",
"bytes": 44951,
"sha256": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77"
},
"function": "_fail_service",
"start_line": 933,
"end_line": 947,
"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",
"body_sha256": "56f61b255217bddb4c8a6ad3af6ed1f9edc3b6a6e928dacf2105be6698936de5"
},
{
"source": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/scripts/operations/operations_coordinator.gd",
"bytes": 130891,
"sha256": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90"
},
"function": "_process_minute_boundaries",
"start_line": 882,
"end_line": 926,
"body": "func _process_minute_boundaries(minute: int, counts: Dictionary) -> CommandResult:\n\t# Migrated 06:00 financial periods retain their original payroll/history.\n\t# Calendar-midnight obligations still execute atomically at 00:00. Their\n\t# external receipt owns idempotency when a later boundary in this minute fails.\n\tif minute % MINUTES_PER_DAY == 0 and not _is_daily_close_boundary(minute) and _midnight_boundary.is_valid():\n\t\tvar midnight := _run_boundary_transaction(_midnight_boundary, {&\"boundary_minute\": minute}, {&\"ok\": true})\n\t\tif not bool(midnight[&\"ok\"]):\n\t\t\treturn _transaction_boundary_failure(midnight, &\"MIDNIGHT_UPKEEP\", minute, &\"MIDNIGHT_UPKEEP_FAILED\")\n\t# Finance precedes demand/arrivals at midnight. Morning work stays at 06:00.\n\t# During legacy migration, the final 06:00 close also precedes morning work.\n\tif _is_daily_close_boundary(minute):\n\t\tvar close := _process_daily_close(minute)\n\t\tif not close.is_success():\n\t\t\treturn close\n\t\tcounts[&\"daily_closes\"] = int(counts[&\"daily_closes\"]) + int(not close.is_replay)\n\t\tif _terminal_state != TERMINAL_RUNNING:\n\t\t\treturn _success({&\"terminal\": true})\n\t\tif pause_requested:\n\t\t\t# A ledger imbalance pauses before morning, demand and arrival work.\n\t\t\treturn _success({&\"deferred\": true, &\"after\": &\"DAILY_CLOSE\"})\n\n\tif minute % MINUTES_PER_DAY == MORNING_MINUTE_OF_DAY:\n\t\tvar morning := _process_morning_boundary(minute)\n\t\tif not morning.is_success():\n\t\t\treturn morning\n\t\tcounts[&\"morning_boundaries\"] = int(counts[&\"morning_boundaries\"]) + int(not morning.is_replay)\n\t\tif pause_requested:\n\t\t\treturn _success({&\"deferred\": true, &\"after\": &\"MORNING_BOUNDARY\"})\n\n\tif minute % DEMAND_INTERVAL_MINUTES == 0:\n\t\tvar demand := _process_demand_boundary(minute)\n\t\tif not demand.is_success():\n\t\t\treturn demand\n\t\tcounts[&\"demand_updates\"] = int(counts[&\"demand_updates\"]) + int(not demand.is_replay)\n\t\tif pause_requested:\n\t\t\treturn _success({&\"deferred\": true, &\"after\": &\"DEMAND_UPDATE\"})\n\n\tif minute % ARRIVAL_INTERVAL_MINUTES == 0:\n\t\tvar arrivals := _process_arrival_boundary(minute)\n\t\tif not arrivals.is_success():\n\t\t\treturn arrivals\n\t\tcounts[&\"arrival_boundaries\"] = int(counts[&\"arrival_boundaries\"]) + int(not arrivals.is_replay)\n\treturn _success()\n\n\n",
"body_sha256": "1312166dc17aee0ef470069a73ff3fe6b86d11d04ca7de76f3d04f1d2d14674e"
}
],
"domains": [
"閉店",
"停電",
"破壊",
"退出",
"課金",
"シフト交代",
"00:00決算"
],
"acceptance_effects": [
"停止中課金がない",
"二重決算がない",
"予約の孤立がない"
],
"dependencies": [
"P03 existing save and ownership implementation",
"P04-02 adopted transaction/retry contract"
],
"Windows_required": false,
"native_runs": 0,
"source_edits": 0,
"formal_completion": false,
"remaining": [
"原7種の順序規約の文書化・原本適合性確認",
"最終版の各順序境界証拠を照合し不足だけ補完",
"同じ1名の独立受入と台帳反映"
],
"open_questions": [
"シフト終端の施設完了段階がAIのStaff更新より先のため、終端ちょうどの課金が停止中課金に該当しないか確認する。既存long-service試験だけで未証明の可能性。",
"閉店時に既に受付済みserviceを完了させる既存挙動の原本/承認適用を確認する。新規中断規則は追加しない。",
"防衛phaseで破壊が施設完了phaseより後となる同Tickの既存帰結と、その次Tickの停止・予約処理が実証されているか。",
"退出の決定・除去と課金の同時境界の既存実証を確認する。",
"derived SYSTEM_SPECIFICATIONの古い06:00決算記述を原本00:00へ格上げしない。"
]
}