Compare commits
18
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c0ea009b28 | ||
|
|
72a50a4a1b | ||
|
|
fc9c8909ac | ||
|
|
cec295f34b | ||
|
|
a65af90168 | ||
|
|
f10907d8db | ||
|
|
aec0957b98 | ||
|
|
2d506a5ce8 | ||
|
|
da80360a60 | ||
|
|
3b9e8f32bd | ||
|
|
3bbd19a59c | ||
|
|
e6327b4571 | ||
|
|
a13f7c0b79 | ||
|
|
e6fb757480 | ||
|
|
27d0a3c764 | ||
|
|
137639773c | ||
|
|
f525629ab7 | ||
|
|
6396321a4d |
+7
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"action": "wait",
|
||||
"task_id": "P04-01",
|
||||
"reason": "WAIT. The owner asked for planning only. No repair while the P26 doc repair is active. The repair counter stays at 29 and nothing new is dispatched. D05 is not open any more. The actual human approved all 4 remaining policies on 2026-10-18 (call_5fa8987f83284eb58b685002499cb9df), recorded in build/owner-handoff/d05-approved-20261018/D05_ACTUAL_HUMAN_APPROVAL.json. The approved rules are:\n- Command destruction is processed before completion. Accident or raid destruction is processed after completion and payment: that minute's sale stays valid, and the failure and reservation release happen in the next minute.\n- A sale that completes at 00:00 belongs to the new day. The previous day's settlement and upkeep are fixed before the completion.\n- When dependency closure and power loss coincide, the closure reason is shown. Both pause progress and charging and keep the reservation.\n- The exit command is processed before completion. An AI planned exit applies only to deciding guests and is processed after completion.\nThe earlier dependency-hold rule, the 18:00 shift order and the A01 upkeep rule stay unchanged.\n\nNext P04 repair plan, to be issued as one normal request-repair on the existing task (2dde759, repair 30) only after P26 closes. P04 is next in priority. No duplicate P13/P18/P23 worker.\n\n1) Decision record (allowed path execution/p04-01/**). Add D05_REMAINING_APPROVAL.json. It cites the handoff approval file by path and SHA256, quotes the 4 answers exactly, and gives each a stable ID: D05-P04-DESTRUCTION, D05-P04-MIDNIGHT-DAY, D05-P04-PAUSE-REASON, D05-P04-EXIT. It sets formal_acceptance=false. Mark D05_REMAINING_ORDER_CANDIDATE.md/json as superseded by the approval. Do not delete them.\n\n2) Checker, registry and pins (tools/check_p04_order_evidence.py). Fix the REQUIRED authority refs:\n- destruction_stop: replace the wrong BASELINE:183 binding (183 is mana depletion) with D05-P04-DESTRUCTION.\n- power_stop: add D05-P04-PAUSE-REASON. Keep BASELINE:183 only where it truly covers power.\n- exit_release and patience_release: add D05-P04-EXIT.\n- paused_midnight and midnight_settlement: add D05-P04-MIDNIGHT-DAY.\nMake the checker require the approval record and its hash, and fail when any mandatory D05 ID is missing. Rerun the existing negative, role and applicability fixtures and add one negative case per new ID. Do not change measurement thresholds or the 15 conditions + EV.\n\n3) Evidence that each rule is actually exercised. Do not relabel existing evidence. Map each approved order to an existing S1–S4 raw record only if that record's source, config, input and environment match the current version exactly. Already known:\n- S4 caused NO_POWER by a direct disconnect, not real depletion.\n- No raw record covers the accident-destruction next-minute release, a 00:00 completion booked to the new day, or a command exit versus an AI exit.\nFor each such gap, report \"probe needed\" with a concrete boundary case. Root then runs the minimal native probe on the current product (5f6bc11d). No product code changes; game_source_write_authorized=false.\n\n4) Docs. Update ORDER_AUDIT.md, order-audit.json and CURRENT_STATUS.md. All 7 domains keep their current function and line references. Remove the 'pending a–d' wording. Status stays 14/88 formal (the stale 13 must be corrected) with no partial credit.\n\n5) After the worker submits, Root runs:\n- validation p04-acceptance and Local8 on the new checker SHA;\n- the new index from the existing r22 collection plus any new probe raw;\n- a final full regression on exactly the final source and checker. Do not reuse the old f5 full178 (checker f5 is not the final a61 checker). Bind tests/business/test_required_kitchen.gd separately.\nThen a whole-unit independent Opus review of the full current file roster, followed by the normal prepare-integration, integration and final, in the order P04 first, then the support work on main 9b1a18c1. Native-Windows conditions stay individually pending if they are required.\n\nEstimates: worker edits about 15–40 KB of docs and checker, about 1 Codex session (roughly 1–3M input tokens cached, 30–60 min). Possible native probes take about 0.5–1.5 h of Root time. The full regression has previously taken hours. Review material is about 1–3 MB. No cost, API or security expansion, and no change to the acceptance denominator.",
|
||||
"codex_model": "gpt-6.1-sol",
|
||||
"codex_model_reason": "The next repair is bounded and fully specified. It records 4 approved decisions, fixes authority refs in a fixed REQUIRED table, adds the matching negative fixtures and updates the docs. No product logic changes and no new design reasoning are needed. The evidence mapping uses existing raw records, and Root does the native probes. Sol is good enough for this and costs less time and usage. Astra's extra reasoning would not clearly improve the result."
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"source": "Actual human reply in this same chat, questionItem call_5fa8987f83284eb58b685002499cb9df",
|
||||
"received_client_date_jst": "2026-10-18",
|
||||
"original_plan_id": "P04-01",
|
||||
"decision": "D05 remaining order policies",
|
||||
"approved": [
|
||||
{
|
||||
"id": "destruction_completion_order",
|
||||
"question_item": 0,
|
||||
"answer_exact": "現行順序を承認する(Opus推奨)",
|
||||
"approved_question_policy": "コマンド破壊をサービス完了前に処理。事故・襲撃による破壊は完了・課金後に処理してその分の売上を有効とし、次の分で失敗処理と予約解放。"
|
||||
},
|
||||
{
|
||||
"id": "midnight_revenue_day",
|
||||
"question_item": 1,
|
||||
"answer_exact": "新しい日に計上し、前日決算・維持費を完了より先に確定する(Opus推奨・現状維持)",
|
||||
"approved_question_policy": "00:00完了のサービス売上は新しい日に計上。前日決算・維持費は完了より先に確定。既承認の維持費規則と18:00交代順序を維持。"
|
||||
},
|
||||
{
|
||||
"id": "pause_reason_priority",
|
||||
"question_item": 2,
|
||||
"answer_exact": "2点とも現行動作を確定する(Opus推奨)",
|
||||
"approved_question_policy": "停電と依存先休業が同時なら休業を理由表示の優先とする。どちらも進捗・課金停止、予約保持。"
|
||||
},
|
||||
{
|
||||
"id": "exit_command_ai_order",
|
||||
"question_item": 2,
|
||||
"answer_exact": "2点とも現行動作を確定する(Opus推奨)",
|
||||
"approved_question_policy": "退出コマンドは完了前、AIの予定退出は判断中の客だけを対象として完了後に処理。"
|
||||
}
|
||||
],
|
||||
"prior_approved_rules_preserved": [
|
||||
"依存先休業中は進捗・課金停止、予約保持、復帰後1回だけ完了",
|
||||
"17:59→18:00昼番作業を先に確定し完了・課金後に交代",
|
||||
"既承認維持費規則"
|
||||
],
|
||||
"boundary": "These are actual product-order approvals, not acceptance/completion or new candidate-SHA approval. No new values/content/permission/cost change. Counter history retained.",
|
||||
"next": "Actual Opus resumes existing P04 task2dde759 with existing evidence after in-flight P26 repair closure, planning only in parallel."
|
||||
}
|
||||
+133
@@ -0,0 +1,133 @@
|
||||
{
|
||||
"client_date_jst": "2026-10-18",
|
||||
"preserved_P04_S": "2dde7596a87c43f7bf0bf704b7479f2fa06a5b1c",
|
||||
"current_M": "e6327b4571d3034f7619319d08a01e16e66c9c13",
|
||||
"source_selection": "Git tracked full autoload/scripts/scenes/data/tests/assets/tools plus root settings/Makefile/AGENTS, source_refs .DS_Store/cache exclusions examined separately at actual candidate. Conservative comparison, not narrowed for reuse.",
|
||||
"old_files": 1300,
|
||||
"current_files": 1368,
|
||||
"changed": [
|
||||
{
|
||||
"path": "autoload/simulation_runtime.gd",
|
||||
"P04_source_blob": "b2eca36cebfcc216c3bca0de2c310c06786c74b7",
|
||||
"current_main_blob": "64e1d61bf2cd0acf9466605a318f7a362c793460"
|
||||
},
|
||||
{
|
||||
"path": "scenes/main/main.gd",
|
||||
"P04_source_blob": "eaa051fe5bca4f56de0c4ac294477f770d13d095",
|
||||
"current_main_blob": "fff37f082d750bb91c71f2aa54d168c9e2cb8fe7"
|
||||
},
|
||||
{
|
||||
"path": "scenes/main/world_preview.gd",
|
||||
"P04_source_blob": "e1f5b0eb86b64b64216000c48d62e28555dc6536",
|
||||
"current_main_blob": "fa32fe0344d20565b6d542da1256a94e8dee1845"
|
||||
},
|
||||
{
|
||||
"path": "scripts/core/save_service.gd",
|
||||
"P04_source_blob": "92464b958e5a55c2ed245afdb5819e3f22f71551",
|
||||
"current_main_blob": "236a8f157c0d98a205e7244e8b06caceb1e336a1"
|
||||
},
|
||||
{
|
||||
"path": "scripts/relationship/relationship_service.gd",
|
||||
"P04_source_blob": "1d1e093cd4ba21927c08e30d92232ba676b2731d",
|
||||
"current_main_blob": "ba632c34d2a3fe5ebcb742746d3bbf54e06e383a"
|
||||
},
|
||||
{
|
||||
"path": "scripts/ui/guest_observation_panel.gd",
|
||||
"P04_source_blob": "39557906f5d9ca95611407e510521d4cc4b3b2ab",
|
||||
"current_main_blob": "d4bf77783ee801077f3adb409e2eac3eea7f0a9b"
|
||||
},
|
||||
{
|
||||
"path": "scripts/ui/room_presentation.gd",
|
||||
"P04_source_blob": "5945440e28e3aa8304bd4477196009ac2b59f127",
|
||||
"current_main_blob": "0c1fa7fb911b6017291732f09fb5073aeaeb2fd9"
|
||||
},
|
||||
{
|
||||
"path": "tests/business/test_required_kitchen.gd",
|
||||
"P04_source_blob": "47b252a4686ac47b8fb02588985ec4437617f8bc",
|
||||
"current_main_blob": "df535f9f67213ea9c14fdefc20340f7f2a71090c"
|
||||
},
|
||||
{
|
||||
"path": "tools/regression/suite-policy.json",
|
||||
"P04_source_blob": "3969e9715552efc333b2f0f6e3d02a9903154f4c",
|
||||
"current_main_blob": "ad194ae425fb8123fa191ed3635f404c098f692d"
|
||||
}
|
||||
],
|
||||
"added": [
|
||||
"scripts/relationship/original_relationship_state.gd",
|
||||
"scripts/relationship/original_relationship_state.gd.uid",
|
||||
"scripts/special/peeping_room_service.gd",
|
||||
"tests/fixtures/p08-02/README.md",
|
||||
"tests/fixtures/p08-02/mixed_world.gd",
|
||||
"tests/fixtures/p08-02/mixed_world.gd.uid",
|
||||
"tests/fixtures/p08-02/reader.gd",
|
||||
"tests/fixtures/p08-02/reader.gd.uid",
|
||||
"tests/fixtures/p08-02/writer.gd",
|
||||
"tests/fixtures/p08-02/writer.gd.uid",
|
||||
"tests/fixtures/p08-03/checker_fixture.py",
|
||||
"tests/fixtures/p08-03/passive_placement.gd",
|
||||
"tests/fixtures/p08-03/passive_placement.gd.uid",
|
||||
"tests/fixtures/p08-03/placement.gd",
|
||||
"tests/fixtures/p08-03/placement.gd.uid",
|
||||
"tests/fixtures/p08-03/r05-reader-checkpoint-provenance.json",
|
||||
"tests/fixtures/p08-03/r05-reader-checkpoint.json.gz",
|
||||
"tests/fixtures/p23-03/diagnostic_stream.gd",
|
||||
"tests/fixtures/p23-03/diagnostic_stream.gd.uid",
|
||||
"tests/fixtures/p23-03/layout_comparison.gd",
|
||||
"tests/fixtures/p23-03/layout_comparison.gd.uid",
|
||||
"tests/fixtures/p23-03/observation.gd",
|
||||
"tests/fixtures/p23-03/observation.gd.uid",
|
||||
"tests/fixtures/p23-03/passive_observation.gd",
|
||||
"tests/fixtures/p23-03/passive_observation.gd.uid",
|
||||
"tests/fixtures/p23-03/passive_os_recorder.gd",
|
||||
"tests/fixtures/p23-03/passive_os_recorder.gd.uid",
|
||||
"tests/fixtures/p23-03/queued_elevator.json",
|
||||
"tests/fixtures/p23-03/r13_actor_overlap.json",
|
||||
"tests/fixtures/p23-03/r13_service_region_gap.json",
|
||||
"tests/fixtures/p23-03/recorded-badge-negative.json.gz",
|
||||
"tests/fixtures/p23-03/repair28_frame180_projection.json",
|
||||
"tests/fixtures/p23-03/repair28_r15_negative.json",
|
||||
"tests/s1/test_p08_combined_migration.gd",
|
||||
"tests/s1/test_p08_combined_migration.gd.uid",
|
||||
"tests/s4/test_original_relationship_model.gd",
|
||||
"tests/s4/test_original_relationship_model.gd.uid",
|
||||
"tests/s4/test_original_relationship_runtime.gd",
|
||||
"tests/s4/test_original_relationship_runtime.gd.uid",
|
||||
"tests/special/peeping_room_fixture.gd",
|
||||
"tests/special/test_p13_uid_policy.py",
|
||||
"tests/special/test_peeping_room_evidence.gd",
|
||||
"tests/special/test_peeping_room_geometry.gd",
|
||||
"tests/special/test_peeping_room_reference.gd",
|
||||
"tests/special/test_peeping_room_runtime.gd",
|
||||
"tests/special/test_peeping_room_save.gd",
|
||||
"tests/transport/test_runtime_build_preview.gd",
|
||||
"tests/transport/test_runtime_build_preview.gd.uid",
|
||||
"tests/ui/fixtures/selection_cross_process.gd",
|
||||
"tests/ui/fixtures/selection_cross_process.gd.uid",
|
||||
"tests/ui/test_p08_normal_placement_ops.gd",
|
||||
"tests/ui/test_p08_normal_placement_ops.gd.uid",
|
||||
"tests/ui/test_p23_life_observation.gd",
|
||||
"tests/ui/test_p23_life_observation.gd.uid",
|
||||
"tests/ui/test_selection_departure.gd",
|
||||
"tests/ui/test_selection_departure.gd.uid",
|
||||
"tools/check_p08_migration_evidence.py",
|
||||
"tools/check_p08_normal_placement_evidence.py",
|
||||
"tools/check_p13_content_difference.py",
|
||||
"tools/check_p23_life_observation_evidence.py",
|
||||
"tools/check_p24_selection_evidence.py",
|
||||
"tools/run_p08_mixed_migration.py",
|
||||
"tools/run_p08_normal_placement.py",
|
||||
"tools/run_p13_reference_tests.py",
|
||||
"tools/run_p18_relationship_tests.py",
|
||||
"tools/run_p23_life_observation.py",
|
||||
"tools/test_p08_migration_evidence.py",
|
||||
"tools/test_p08_normal_placement_evidence.py",
|
||||
"tools/test_p23_life_observation_evidence.py"
|
||||
],
|
||||
"removed": [
|
||||
"tools/check_p04_order_evidence.py"
|
||||
],
|
||||
"direct_full_source_equality": false,
|
||||
"old_P04_full_evidence_auto_reuse_accepted": false,
|
||||
"new_native_runs": 0,
|
||||
"conclusion": "Rebind current exact final combined S/M, engine/policy/input/roster and checker; old full178 cannot automatically cover changed product/test roster. No new whole/full run launched while P26 active."
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"actual_opus": "0e5dee1afba14d56877edba14796b6a2",
|
||||
"preserved_P04_S": "2dde7596a87c43f7bf0bf704b7479f2fa06a5b1c",
|
||||
"no_worker_started": true,
|
||||
"no_repaircounter_increment": true,
|
||||
"formal_total_current": 15,
|
||||
"stale_plan_labels": [
|
||||
"Opus wording14/88 is old; currentformal15/88",
|
||||
"Opus product5f6bc11d/main9b1a18c labels are old; rebind exact actual currentM/source/settings/roster beforeanyprobes, never relabel old results"
|
||||
],
|
||||
"next": "After P26 closure, nextactualP04commander must see latest main15/88 and decide exactS/Q/M repair/test inputs. Actual4D05answers not pending."
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"at_unix_ns": 1792281637586363000,
|
||||
"removed": [
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-final-188a0a94",
|
||||
"head": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"files": 4949,
|
||||
"logical_bytes": 233247791
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-integration-69419f96",
|
||||
"head": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"files": 4949,
|
||||
"logical_bytes": 233247791
|
||||
}
|
||||
],
|
||||
"free_before_bytes": 865939456,
|
||||
"free_after_bytes": 1365258240,
|
||||
"observed_gain_bytes": 499318784,
|
||||
"all_source_blobs_verified": true,
|
||||
"all_unique_runtime_evidence_preserved": true,
|
||||
"restore_manifest": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/.runtime/coordinator-start-20261017/ENDED_FINAL_INTEGRATION_CHECKOUT_FULL_GIT_RESTORE_PROOF.json",
|
||||
"restore_manifest_sha256": "c6172ba00a383659159d82751ffbcea36188c56cdf2d346252c8af7a385fc1b7"
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"at_unix_ns": 1792236882234332000,
|
||||
"removed": [
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-validation-0f79a9c4",
|
||||
"head": "e0420d57a381a1644357f0590536e1d47c9bca9f",
|
||||
"files": 4934,
|
||||
"logical_bytes": 232564889
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-validation-42f984f5",
|
||||
"head": "806de25068bc423136063791afcea811d251ee1b",
|
||||
"files": 4934,
|
||||
"logical_bytes": 232691295
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-validation-78ad972b",
|
||||
"head": "e0420d57a381a1644357f0590536e1d47c9bca9f",
|
||||
"files": 4934,
|
||||
"logical_bytes": 232564889
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-validation-bae800fe",
|
||||
"head": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"files": 4934,
|
||||
"logical_bytes": 233215331
|
||||
}
|
||||
],
|
||||
"free_before_bytes": 2115686400,
|
||||
"free_after_bytes": 3097645056,
|
||||
"observed_gain_bytes": 981958656,
|
||||
"all_source_blobs_verified": true,
|
||||
"all_unique_runtime_evidence_preserved": true,
|
||||
"restore_manifest": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/.runtime/coordinator-start-20261017/ENDED_VALIDATION_CHECKOUT_FULL_GIT_RESTORE_PROOF.json",
|
||||
"restore_manifest_sha256": "d79a5488f2b4361fadc61068d5e6c9d9eedca35deb2f605eeb4e202b0438ee6d",
|
||||
"scope_note": "Only4ended clean detached validation checkout copies. Every4934trackedblob per copy verified against remotely pushed main ancestry; central raw evidence/current implementer/review contexts preserved. No game/user asset deletion."
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"archive": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/.runtime/coordinator-storage-20261018/p19-ended-review-contexts-20261018.tar.gz",
|
||||
"archive_bytes": 2772135,
|
||||
"archive_sha256": "50930815e0f844c67633d08ff97ad5de128201d134256a9e4fee97617087686a",
|
||||
"archive_md5": "eb0fa0641162759ac8fd93df13062e31",
|
||||
"all_members_full_local_readback_sha_verified": true,
|
||||
"extra_files": 138,
|
||||
"extra_bytes": 14398680,
|
||||
"source_checkout_count": 4,
|
||||
"full_restore_manifest": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/.runtime/coordinator-storage-20261018/FULL_RESTORE_MANIFEST.json",
|
||||
"free_before": 1189703680,
|
||||
"source_deleted": false,
|
||||
"drive_uploaded": false
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"drive_id": "1E0Zm9ihweOs9cX_NjFzFaMFq0vOBHXYy",
|
||||
"url": "https://drive.google.com/file/d/1E0Zm9ihweOs9cX_NjFzFaMFq0vOBHXYy/view",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"complete_remote_stream_bytes": 2772135,
|
||||
"sha256": "50930815e0f844c67633d08ff97ad5de128201d134256a9e4fee97617087686a",
|
||||
"matches_local_archive": true,
|
||||
"local_all_members_already_verified": true,
|
||||
"temporary_bearer_url_retained": false
|
||||
}
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"removed": [
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-review-0d4c580b",
|
||||
"head": "806de25068bc423136063791afcea811d251ee1b",
|
||||
"tracked_files": 4934,
|
||||
"archived_extra_files": 35
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-review-4c66b574",
|
||||
"head": "e0420d57a381a1644357f0590536e1d47c9bca9f",
|
||||
"tracked_files": 4934,
|
||||
"archived_extra_files": 31
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-review-90700823",
|
||||
"head": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"tracked_files": 4934,
|
||||
"archived_extra_files": 44
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-review-c5ab075d",
|
||||
"head": "e0420d57a381a1644357f0590536e1d47c9bca9f",
|
||||
"tracked_files": 4934,
|
||||
"archived_extra_files": 28
|
||||
}
|
||||
],
|
||||
"free_before": 1240883200,
|
||||
"free_after": 2250661888,
|
||||
"archive_verified": {
|
||||
"archive": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/.runtime/coordinator-storage-20261018/p19-ended-review-contexts-20261018.tar.gz",
|
||||
"archive_bytes": 2772135,
|
||||
"archive_sha256": "50930815e0f844c67633d08ff97ad5de128201d134256a9e4fee97617087686a",
|
||||
"archive_md5": "eb0fa0641162759ac8fd93df13062e31",
|
||||
"all_members_full_local_readback_sha_verified": true,
|
||||
"extra_files": 138,
|
||||
"extra_bytes": 14398680,
|
||||
"source_checkout_count": 4,
|
||||
"full_restore_manifest": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/.runtime/coordinator-storage-20261018/FULL_RESTORE_MANIFEST.json",
|
||||
"free_before": 1189703680,
|
||||
"source_deleted": false,
|
||||
"drive_uploaded": false
|
||||
},
|
||||
"remote_full_readback": {
|
||||
"drive_id": "1E0Zm9ihweOs9cX_NjFzFaMFq0vOBHXYy",
|
||||
"url": "https://drive.google.com/file/d/1E0Zm9ihweOs9cX_NjFzFaMFq0vOBHXYy/view",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"complete_remote_stream_bytes": 2772135,
|
||||
"sha256": "50930815e0f844c67633d08ff97ad5de128201d134256a9e4fee97617087686a",
|
||||
"matches_local_archive": true,
|
||||
"local_all_members_already_verified": true,
|
||||
"temporary_bearer_url_retained": false
|
||||
},
|
||||
"all_required_unique_evidence_preserved": true,
|
||||
"current_P26_unchanged": true,
|
||||
"restoration_manifest": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/.runtime/coordinator-storage-20261018/FULL_RESTORE_MANIFEST.json",
|
||||
"restoration_manifest_sha256": "cb84bf8be29c4fadafdafaaf31bd3d9982d29e331e00b4faae6456abbb6e3a50",
|
||||
"time_ns": 1792282918865244000,
|
||||
"actual_free_gain_bytes": 1009778688
|
||||
}
|
||||
+7
File diff suppressed because one or more lines are too long
+522495
-722
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+55
-40
@@ -1,64 +1,79 @@
|
||||
# P26-01 全必要内容の台帳 — 実装提出
|
||||
# P26-01 全必要内容の台帳 — 修復提出
|
||||
|
||||
対象: P26-01 / AC-P26-01。原作業「全章、7名の3ルート、全エンド、台詞、立ち絵、音声の必要枠と条件を確定する。」、原受入「原本で要求された未制作内容を欠損として記録し、架空の完成数を置かない。」を変更しない。
|
||||
対象は P26-01 / AC-P26-01。原作業「全章、7名の3ルート、全エンド、台詞、立ち絵、音声の必要枠と条件を確定する。」、原受入「原本で要求された未制作内容を欠損として記録し、架空の完成数を置かない。」を保持する。自己受入せず、30パッケージ / 88単位、正式完了15、今回加算0、partial_credit=false、whole_unit_accepted=falseを維持する。
|
||||
|
||||
本提出は内容監査資料であり、原本全体は30パッケージ・88単位、正式完了15/88のまま、今回加算0。P26-01の自己受入は行わない。独立したwhole-unit Opusレビューが原受入を判定する。
|
||||
変更は契約の5成果物のみ。TASK_SPEC、Opus選択、frozen pins、原本・AR・計画・決定・修復回数は変更しない。git書込み、他エージェント、Runner操作、native/full run、ゲーム・素材・設定・権限・API変更は行っていない。新規素材の導入はない。
|
||||
|
||||
## 作成した5成果物
|
||||
## 引継ぎと決定の版
|
||||
|
||||
|成果物|役割|
|
||||
|---|---|
|
||||
|CONTENT_LEDGER.json|原文引用、条件、状態、欠損、責任先、実ソースとSHAを持つ監査台帳|
|
||||
|CONTENT_LEDGER.md|JSONの全行と固定参照情報を欠落させない決定的な表示|
|
||||
|check_content_ledger.py|stdlibの読取専用検査、source binding、明示的な生成モード|
|
||||
|test_content_ledger.py|正例と、原本要求欠落・架空数・誤完成・出典改変等の負例|
|
||||
|IMPLEMENTATION_REPORT.md|原単位全体との対応と残存不足、本報告|
|
||||
build/owner-handoff/p26-repair3/ の ACTUAL_WHOLE_REVIEW.json、ACTUAL_OPUS_REPAIR3.json、D05_ACTUAL_HUMAN_APPROVAL.json、D05_APPROVAL_SOURCE_BINDING.json を編集前に全文読み、データとして照合した。開始時に存在した前回blocked報告の承認出典不足は、この4資料により解消している。
|
||||
|
||||
変更は契約の5 allowed_paths内だけ。TASK_SPEC、selection、frozen pins、原本、計画定義、決定、修正回数は変更しない。git書込み、他エージェント、Runner操作、ゲーム・素材編集、API/安全性/対象範囲変更は行わない。新規素材の導入はない。
|
||||
監査アンカーは f4f85bc54c39361f9efcd16f67a17835559ca70c、原計画定義ベースは 379a1ba8fd25b5ad24226178a2492f91761dc31d。この両時点ではD05の残質問は未解決として登録されていた、という歴史的事実のみを保存する。現在のD05が未回答だとは記述しない。
|
||||
|
||||
## 原単位全体の対応
|
||||
現在の実承認は a13f7c0b791dd385ff8113c3d321c0e3fe7d7c94 の docs/plans/original-completion-2026-10-02/execution/p04-01-owner-approval-20261018/D05_ACTUAL_HUMAN_APPROVAL.json、SHA256 cd365ded1b777a0327d090709f0a4161f5005562819183455d9f2e106fba3e96。チェッカーはこのgit objectのhashを照合し、4回答の原レコードを台帳に保存する。質問IDは call_5fa8987f83284eb58b685002499cb9df。破壊/完了、日付境界、停止理由、退出順序の承認であり、P04への製品採用・内容完成・P26受入ではない。D08/D09は未解決。
|
||||
|
||||
原本は `docs/traceability/original/BASELINE.txt`、SHA256 `75e4bdbdeb379c9269553f0c776bdb9cc96e01f2d6aa5ca650d132c63a8aeb1a`。各行は行番号、原文全文、ファイルSHAを保持する。
|
||||
## 修復6: 直接読解マップによる証拠のAR別帰属
|
||||
|
||||
|要求|台帳ID/根拠|現状と不足の所有先|
|
||||
|---|---|---|
|
||||
|全章|chapters.all、原本8・26〜30・256行|メインストーリーの要求のみ。章名・章数・順序・場面一覧は未定義。仕様書の第1〜14章をシナリオ章に転用しない。D08|
|
||||
|7名×3ルート|route.anri/fine/tomari/amelia/liz/mimi/satsuki × love/ntr/corruption、118〜124・30・132・138〜161行|アンリ、フィーネ、トマリ、アメリア、リズ、ミミ、サツキと純愛/NTR/堕落の正確な対応。人物固有のイベント列、入口・分岐・終点・台詞・素材・履歴/保存・通常到達は欠損。P26-02 / D08|
|
||||
|全エンド|endings.all / endings.bad / endings.game_over、9・135・72行|全エンド集合、特定バッドエンド、赤字決算3回連続のゲームオーバーを区別。個別終点ID・本数は未定義。3ルートを3個の完成エンドに数えない。D08 / P26-02|
|
||||
|台詞|dialogue.all、155・230・256行、全route行の条件|会話/イベント/脚本の必要枠。台詞本文、話者一覧、行数、シーン列は未定義。UI文言や汎用関係イベントを完成脚本に数えない。P26-02 / D08|
|
||||
|立ち絵|portraits.all とP22人物利用枠、160〜161・230・235・242行|主/サブ、表情、衣装、破損、汚れ、刻印、妊婦外見、ルート別描き分け。必要枚数・共有方針は未定義。P26-03 / D09|
|
||||
|音声|voice.all とP22人物voice枠、252・257行|ボイス収録・実装が欠損。話者/台詞/クリップ数/担当未定義。BGM、UI音、汎用音はボイスの代用にしない。P26-03 / D09|
|
||||
|図鑑|encyclopedia.all、9行|対象集合、ID、解放条件、項目数は未定義。D08|
|
||||
|横断する必要内容|clause.*、原本27〜34・132・134〜135・138〜161・229〜230・234〜235・242〜246・252・255〜258行|原本共通ルール、世界設定、CG/差分/モブ、SDモーション、制作段階を保存。今回新規の物語・台詞・場面は制作しない。P26-02/03、P22制作系とD08/D09|
|
||||
今回の変更前に build/owner-handoff/p26-direct-support-r06/ の ACTUAL_OPUS_DIRECT_SOURCE_MAP.json、ACTUAL_WHOLE_REVIEW_F10907D8.json、DIRECT_POLICY_AUTHORITY_SNAPSHOT.json を全フィールド・全ソース本文まで読了した。確定済みの直接読解マップを転記し、証拠帰属だけを修復する。モデル指定はgpt-6.1-solのまま。新しい意味判断・仕様・承認は加えない。
|
||||
|
||||
台帳の必要数・完成数はnull(未定義/未計数)。既知の7名×3ルートと、既存P22の614利用枠/用途群は、画像枚数、ボイス数、制作完了数、原子分母への換算をしない。未定義状態も欠損として明示する。状態語彙は produced / placeholder / code-drawing / partial / missing / undefined。完成を裏付ける証拠がないためproducedへの昇格はない。
|
||||
SUPPORT_POLICYの4種をマップの許容リストに限定する。relationship-containerは21人物ルートARとAR.relationship.three_emotions / affection_shield_max、peeping-containerはAR.underground.observation / AR.observation.recorder、night-inputはAR.guest.need_sexual_night_peak、bankruptcy-bookkeepingはAR.progression.three_deficits_gameoverだけ。以前のキーワードpartial処理の廃止、voice修復、全先行修復は保持する。
|
||||
|
||||
## 版と実証拠
|
||||
各行のscoped_supportは対象AR・証拠種別・限定範囲・content_status=missingを明記する。unsupported_atomic_requirement_idsはその行で基盤支援がない残りのARを列挙する(用途行の既存placeholder/code-drawingは従来どおり別記)。L9は21ルートのコンテナだけpartialで、全エンド/図鑑/所要時間は未支援。L21 / L156 / L221 / L222 / L257とclause.productionは支援が空になるためmissing、evidence=[]。L34は観察状態、L53は記録フィールド、L65は客欲求入力、L72は赤字終端計算だけpartialを保持する。voice.all、endings全3行、encyclopedia.allはmissing、証拠なし。声に関するどのARも対応表に入れない。行数・AR対応・引用・制作数量は増減させない。
|
||||
|
||||
計画定義の基準は `379a1ba8fd25b5ad24226178a2492f91761dc31d`、ゲーム監査アンカーは `f4f85bc54c39361f9efcd16f67a17835559ca70c`。TASK_SPEC raw SHA256は `8026040345de6b7d06cfce40beac9150bfe9ad303d6b26c11bd94e66b1080b29`、stripしたUTF-8表現は `1fedc9ade42a04722846daa9ac8ec26f821fb4efbce8dbbb53e3e76e31f38d02`。両表現を区別する。selectionは基準コミットの同一バイトで固定する。
|
||||
独立したEXCLUDED_ATTRIBUTIONS表で、AR.ui.observation_camera_entry(カメラアイコン/専用画面遷移)、AR.ui.observation_capture(スクリーンショット)、AR.underground.blackmail(取引状態/収支)、AR.route_action.observation_progress(観察部屋のルート進行確認)、AR.schedule.B-14.3.observation(専用観察モード達成)、AR.events.ntr_night_peak(NTRイベント夜ピーク)を拒否する。関連コードは uncredited precursor, not required behaviour と理由文に記す。コードの不存在は主張せず、これらARに証拠pinを帰属させない。SUPPORT_POLICYへの再追加も、行のscoped_support主張も独立層で拒否する。6個の個別負例は双方を注入し、許容ARの正例と復旧後の正例を伴う。破損ポリシーで再生成した台帳も拒否する。
|
||||
|
||||
P19-03 REACHABILITY_TABLE.jsonは読取専用の既存監査でありP26の前身ではない。21セルの人物名・ルート名・natural_route_complete=falseを確認する。台帳にはそのセル参照とファイルSHAを保存する。実ソースのカタログ、OriginalRelationshipState、Runtime identity検査、relationship_serviceの保存コンテナ、PixelPeopleの汎用描画も直接参照し、正確な行範囲・本文・SHAを保持する。専用の明示状態検証/保存があることと、人物別ルートの内容制作・到達がないことを区別する。Runtimeの主人公ID `player` もこの証拠と全入力固定の対象。
|
||||
chapters.all / dialogue.allはstatus=undefinedを保持し、制作内容は欠損、undefinedは範囲・数量のみと理由文で明示する。owner精度の追加判断は引き続きdeferred。
|
||||
|
||||
P22-01は既存の360施設枠・176人物用途群・76その他用途群・2状態群を全て参照する。原レコードは型を保持して保存し、現在の表現先の実ファイルSHAを別に取得する。過去のSHAと現在のSHAが異なる場合も両方を残し、旧レコードを書き換えない。既存296mediaの全現物参照と、固定入力中の全assetsパス/SHAも記録する。汎用コード描画、仮素材、完成素材を混同しない。現物の存在だけで用途・差分の品質/権利受入済みとは判定しない。
|
||||
verify_authorityはexpectedやcanonicalを呼ばず、提出された各claimのARと行の種類、固定出典・抜粋全文、支援/未支援ARの分割、状態と範囲文を検査する。有効なSHAでも無関係な証拠、無根拠なpartial、声への同一引用行の観察証拠の流用は拒否する。負例はmissingの音声/立ち絵/エンド/図鑑への証拠注入、混合行内の支援AR拡張、正しい夜間支援への無関係な証拠追加を含む。route、L65、L53の実際のpartialを正例にする。既存負例は維持し、AR削除負例だけ新しい分割フィールドも整合して削除する。
|
||||
|
||||
P22-01の元artifactsパスは非追跡アーカイブの別名であり、その入力はRootの公開コミット `137639773c9017f9ee7733d78e37179b687f965c` の `accepted-p22-01-inputs/` からも読める。公開manifest SHA256 `90b5a69d5f364012edabe5a68b8c7613f5f5ca47bc189d435dd2e69b8dd8c915` と全10ファイルのサイズ/SHAで固定する。元パスがある場合は公開バイトと一致必須、ない場合は固定git objectを使う。レビュー用別名の設置や新規ファイル追加は本workerでは行わない。P22-03 production_backlog.jsonはアンカー固定された未受入の下書き参考のみで、制作数量・承認・完了の権威にしない。
|
||||
矛盾した「no dedicated support established; …only」の連結を廃止した。任意LOWのL226はAR.ui.cut_duel/cut_defenseの対象外理由にP24 UIカットインを明記した。owner決定用content ARの追加分類は、既存の原典リンクと所有先を狭める別の判断が必要なため今回はdeferred。ownerは引き続き引用ARのprimary_packageに基づく追跡先で、専任制作担当の確定ではない。
|
||||
|
||||
## チェッカーと正式試験
|
||||
## whole-unit対応と残存不足
|
||||
|
||||
`--check` は台帳・出典・固定入力・決定的Markdownを読取専用で検査する。`--source-binding-only` は同じ出典結合と台帳を確認し、Markdown表示の一致を要求しない。`--write` は固定原文・実ソースから指定JSON/Markdownの2ファイルだけを生成する。JSON重複キーと非有限数値も拒否する。
|
||||
| 対象 | 実際の記録・修復 | 残存不足 |
|
||||
| --- | --- | --- |
|
||||
| 全章 | chapters.all、原本内容行、対応AR | 章名・章数・順序・シーン列は未定義。仕様書章番号を物語章数に転用しない |
|
||||
| 7名×3ルート | 原名の21 route行、人物別AR、P19セルの版固定と関係状態ソース | 共通状態・保存のみpartial。固有イベント列・自然到達・台詞・素材・終点はmissing、D08未決 |
|
||||
| 全エンド | endings.all / bad / game_overとAR | 全3行missing、全集合/本数は未定義。赤字終端の処理はoriginal.line.72の該当ARだけpartial |
|
||||
| 台詞/立ち絵/音声/図鑑 | 各総括行、原文個別行、人物/用途AR、P22全614枠 | 完成本文・画像・ボイス・項目集合の完成証拠なし。汎用BGM/UI音は声の代用にしない |
|
||||
| 原本欠落の修復 | original.line.13 / 53 / 65 / 196 / 221 / 222、各原文全文・行・SHAとAR | イベント/台詞/CG/音声/専用操作内容はmissing。個別場面数はundefined |
|
||||
| 独立網羅 | 原本テキストの内容語彙・節見出しとARドメイン/condition/source_anchorsから選択 | 機械的な保守的選択方針を明記し、独立レビューが原単位網羅を判定 |
|
||||
| AR独立確認 | atomic_dispositionsで全ARに原レコード引用・所管原P単位・明示処置 | 旧view_results/statusを転記せず、未再制作/未定義を完成に昇格しない |
|
||||
| 所有と状態 | 引用ARのprimary_package/work_packagesと原P単位定義に結合 | 複数原P単位から特定制作担当を推測しない。owner_assignmentに担当未定義を明記 |
|
||||
| 負例 | 省略イベント行、AR欠落/未知/処置欠落、AR不一致owner、route/usage状態、stale AR/原文/usage SHA、partial誤完成 | 正式実行はRunner |
|
||||
|
||||
元の30/88のacceptance/work/dependency/requirement等は基準版の計画定義へfail closedで結合し、明示した既存の進捗メタデータキーだけを除いて比較する。work_packages全体をバイト固定しない。atomic_requirementsとdecisionsは型/値を変えず基準版へ結合する。台帳は閉じたスキーマ相当の完全一致、ID一意性、原要求/利用枠集合、正確な人物/ルート、null数量、owner/status/type、引用とSHAを検査する。期待値は提出台帳から生成せず、固定原文の明示的な条項範囲・固定P19/P22・実ソースから作る。
|
||||
現在の生成物は762行(既存651行を保持し、選択した原文111行を追加)、関連AR675件。これは監査レコードの数であり、制作数量・完成数・受入分母ではない。全required_count/completed_countはnull。ARの関連選択外は追加施設契約/財布・採用等の別単位条件または独立メカニクスとして理由と原所有先を保持し、製品上の適用外/受入済みとはしない。
|
||||
|
||||
負例は章/ルート/各エンド/台詞/立ち絵/音声/図鑑/共通カテゴリ/利用枠の欠落、架空数、欠損の完成昇格、owner/status/type/追加キー/重複ID、人物誤同定、原文/原文SHA/実証拠SHA/アンカー改変、不正JSON/重複キー/非有限値、Markdown drift、計画定義改変、公開manifest改変、選択入力の欠落/追加/変更/型改変を含む。正例は提出資料、独立期待集合、元の入力集合、許容される進捗メタデータ変更。
|
||||
各行はatomic_requirement_idsを持つ。対応ARがない原文も消さず、所有先undefinedとして残す。ownerは引用ARのprimary_package、owner_deliverable_refsは固定参照の原P単位定義を指す。ARごとのowning_deliverablesにはprimary_packageとwork_packagesの各パッケージの元のid/title/work/acceptanceを保存する。特定の1単位が専任と原本で決まっていない場合、候補定義全体と担当未定義を示す。clause.*を一律P26-03に割り当てる旧処理を除いた。
|
||||
|
||||
正式試験はRunnerが実行する。本workerは `--check`、`--source-binding-only`、負例テストを実行しておらず、合格は報告しない。JSON/Markdownは生成処理だけを実行した。正式コマンドは契約の p26-ledger / p26-negative / p26-source-binding の3本をそのまま使用する。
|
||||
## 現物の部分支援と欠損
|
||||
|
||||
全1368のselected game input、settings、assets、tests、tools、marker、policy、engine、roster、329parseとdefault player identityをチェッカーで固定入力マップへ照合する。固定pin SHA256は `6c778226a4cc6d0b0d682500759e7d4229c926a27bd2e247b00b9c3e5f1a2fb0`。追加/欠落/変更のいずれも拒否し、全選択入力をf4f85bcのgit blobにも照合する。docs helperはゲーム選択集合外。
|
||||
scripts/relationship/original_relationship_state.gd:6、21–25、26でaffection/lust/netorareと有限値検証、shield_max==affection / 0<=shield_current<=shield_maxを引用する。relationship_service.gd:38–58はsubject_idキーの原本記録登録、315–355は別の汎用route_lock/route_id記録だけ。元ルートID・自然到達・内容はない。whole-file pinをこの抜粋へ狭める。21 route行はpartial、content_status=missingを保持し、更新・攻撃・閾値・固有物語を実装済みとはしない。
|
||||
|
||||
既存nativeの184 suites / 21903 checks / 329 parse / 186 owned-endedは履歴としてのみ保存する。既存証拠のsource S `a7e3069b167511b3194242b3403fbcc35244a526` とC `65f07bf5eaa759a8e2e17c7bdbbbdbceb24ee373` への適用性は独立ゲートであり、本提出はnative再利用受入を主張しない。新規のnative full runは行わない。
|
||||
scripts/special/peeping_room_service.gd:127–138はstopped/link_state/targetと前提優先順、140–142は製品記録のRECORDER_ELIGIBILITY_PENDING_D04_D08_P16、155–164はfixture専用書込みのevidence_id/room_id/target_instance_id/source_event_key/minuteを引用する。autoload/simulation_runtime.gd:10863–10864は配置のBUILD_DEFINITION_PENDING_D04だけ。通常入口・記録係配置は欠損。視界、専用画面、スクリーンショット、ルート確認、取引、介入や制作イベントへ帰属させない。
|
||||
|
||||
## 残存不足と受入境界
|
||||
scripts/guest/guest_service.gd:355–359はadult intimacy needのis_nightによるintimacy_night/intimacy_day入力選択だけ。ピーク値・NTRイベントの制作証拠はない。scripts/operations/operations_coordinator.gd:1190–1194は負のnet_profit連続カウンタがconfig bankruptcy_close_countに達するとTERMINAL_BANKRUPTを選ぶ処理だけ。設定値が3だとは主張せず、著作されたゲームオーバー内容は欠損。L196の専用代物弁済イベントは現物制作証拠なしとしてmissing。数量/シーン列はundefinedのまま。
|
||||
|
||||
D05の既存未解決事項、D08の章/ルート/全エンド/図鑑/必要内容範囲、D09の品質/量/担当/予算/権利は未解決のまま。D05の既存承認を撤回も拡張もしない。P26-02/03と上流の制作・ゲームプレイ・保存/移行・素材受入は未完。held gestures、same-Windows、global acceptanceも未受入。本監査に製品操作は追加されない。
|
||||
P19/P22の旧状態をそのまま合否にしない。P19の正確な21セルと自然到達未完成の事実を版固定し、現在の関係ソースも独立参照する。P22全614用途レコードと全296mediaを保存し、表現先の現物SHAを監査アンカーへ再結合する。表現型からcode-drawing / placeholder / missingを区別し、歴史的inventoryのSHAと現在アンカーのSHAを別々に保持する。全assetsのパス/SHAも保存する。P22-03はdraft/unaccepted reference only。
|
||||
|
||||
whole-unit独立レビューが未定義の記録では原受入を満たさないと判断した場合は、正直に不合格/無加算とする。必要な通常prepare-integration、exact C/M、normal final、Rootの台帳更新/main pushはworker範囲外であり未実行。これらと独立受入が終わるまでは16/88へ進めない。
|
||||
P22の公開入力は137639773c9017f9ee7733d78e37179b687f965cのaccepted-p22-01-inputs/、manifest SHA256 90b5a69d5f364012edabe5a68b8c7613f5f5ca47bc189d435dd2e69b8dd8c915 に固定。元artifacts別名が存在すれば同一バイト必須、なければ公開git objectを読む。
|
||||
|
||||
## 検査の構造と実行状況
|
||||
|
||||
check_content_ledger.py はstdlibのみ。--checkは読取専用の台帳/出典/入力/Markdown検査、--source-binding-onlyは出典結合と台帳検査、--writeは指定JSON/Markdown生成。JSON重複キー・非有限値は拒否する。
|
||||
|
||||
authorities()は提出行や旧監査の合否を使わず、BASELINE本文の内容語彙/節見出し、ARのドメイン/condition/source_anchorsから必要行・ARを導く。選択条件はcoverage_policyに公開する。verify_authority()はcanonicalを引数に取らず、必要行とARの網羅、原文全文/行/hash、AR自身のrecord、所有原P単位、状態と表現pin、部分支援と内容欠損を検査する。canonical完全一致は追加のdrift検査として残す。原計画定義はベースへのprojectionで固定し、明示した進捗メタデータ以外の変更を拒否する。
|
||||
|
||||
負例には従来の章/route/全エンド/category欠落、架空数、schema/type、重複ID、不正JSON、Markdown drift、原計画改変、公開manifest改変、ゲーム入力追加/欠落/改変を保持する。新しいindependent_rejectは正例も負例もverify_authorityだけを呼び、canonical一致に頼らずAR網羅・owner・状態・hash不正を捕捉する。各mutationに有効な提出資料のcontrolを置く。
|
||||
|
||||
このworkerはJSON/Markdownの生成処理と読取による実装確認だけを行った。p26-ledger / p26-negative / p26-source-binding、--check、--source-binding-only、unittestは実行していない。PASSは主張しない。正式試験はRunnerが契約の3コマンドを実行する。
|
||||
|
||||
修復6の生成後の読取比較では762行、1309 AR処置、675関連ARを保持し、全行のID・引用・ARリンクは開始時と同一。全required_count/completed_countはnull。JSONの変更した最上位領域はrowsのみで、D05の4回答、atomic_dispositions、source pinsを含む他領域は同一。JSONとMDはexpected/markdownによる決定的生成であり、試験実行結果ではない。生成後に変更したcheckerの独立検証と負例はRunnerでの実行待ち。今回の実装担当指示「試験はRunnerが正式実行します」に従い、登録済み3チェックはworker未実行、結果は未取得。
|
||||
|
||||
## 新Sと受入の残ゲート
|
||||
|
||||
FROZEN_GAME_INPUT_PINS.json SHA256 6c778226a4cc6d0b0d682500759e7d4229c926a27bd2e247b00b9c3e5f1a2fb0 と、全1368 selected game inputs・settings・assets・tests・tools・marker・policy・engine・roster・329parse・default player identityの照合処理は保持する。docs helpersは対象ゲーム集合外。TASK_SPEC raw SHAは8026040345de6b7d06cfce40beac9150bfe9ad303d6b26c11bd94e66b1080b29、strip表現は1fedc9ade42a04722846daa9ac8ec26f821fb4efbce8dbbb53e3e76e31f38d02。
|
||||
|
||||
旧SでのRoot source/input equality結果を新Sへ流用しない。workerはgit書込みを禁止されており、新Sの確定/Root qualificationはRunner・Rootの担当で未実行。新Sが存在した後に改めて全入力一致を資格確認する必要がある。
|
||||
|
||||
native 184 suites / 21903 checks / 329 parse / 186 owned-endedは履歴のみ。新規native/full runなし。exact S/Cの独立適用性確認前に再利用を承認しない。whole-unit独立Opusレビュー、prepare-integration、exact C/M、normal final、Rootの台帳/main pushも未実行。P26-02/03・上流制作、D08/D09、held gestures、same-Windows、global acceptanceは未完/未受入であり、これらの完了は主張しない。15/88から16/88への加算は行わない。
|
||||
|
||||
+156
@@ -0,0 +1,156 @@
|
||||
{
|
||||
"at": "2026-10-17T20:44:25.180745+09:00",
|
||||
"original_plan_id": "P26-01",
|
||||
"registered_project": "the-tree-p26-01-ledger",
|
||||
"registered_task": "P26-01-LEDGER",
|
||||
"state": "completed_original_P26_01",
|
||||
"actual_selection": "6b9bb7f7a8474689b4094efbfcde2eef",
|
||||
"base_commit": "379a1ba8fd25b5ad24226178a2492f91761dc31d",
|
||||
"original_denominator": {
|
||||
"packages": 30,
|
||||
"units": 88,
|
||||
"formal_completed_before_this_unit": 15,
|
||||
"formal_completed_now": 16,
|
||||
"credit_added_by_this_original_unit": 1,
|
||||
"partial_credit": false
|
||||
},
|
||||
"full_acceptance": "原本で要求された未制作内容を欠損として記録し、架空の完成数を置かない。",
|
||||
"dependencies": "Audit observes P19/P20/P22 actual state; does not accept their production. Pending D08/D09 explicit. P04 existing D05 questions retained.",
|
||||
"missing": [],
|
||||
"reuse": [
|
||||
"P19-03 accepted table S903a2c566e73cebc874a6499410a1243bc190a63/C8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"P22-01 accepted usage inventory, verify exact artifact hashes",
|
||||
"P22-03 unaccepted draft cross-reference only"
|
||||
],
|
||||
"model": "actual Opus selects; proposed gpt-6.1-sol",
|
||||
"storage_estimate_scope": "Opus under5MB is output-material estimate, excludes required Runner checkout copies (~240MB each); stage copies, recover only ended fully restorable duplicates",
|
||||
"actual_commander_run_direction": "1f3936da8f174bbd983f55f4b749c764",
|
||||
"actual_jobs": [],
|
||||
"repairs": 6,
|
||||
"repair_limit": null,
|
||||
"setup_attempt": {
|
||||
"run": "860ffd16cb38404ab434d65688eb0f68",
|
||||
"writes": 0,
|
||||
"tests": 0,
|
||||
"result": "returned blocked on two delivery issues, resolved without scope/spec/policy changes",
|
||||
"recovery_direction": "ba1534298b4c4100b83c353c90fbdd35",
|
||||
"raw_spec_sha256": "8026040345de6b7d06cfce40beac9150bfe9ad303d6b26c11bd94e66b1080b29",
|
||||
"Runner_strippedUTF8_sha256": "1fedc9ade42a04722846daa9ac8ec26f821fb4efbce8dbbb53e3e76e31f38d02",
|
||||
"committed_accepted_material_anchor": "137639773c9017f9ee7733d78e37179b687f965c",
|
||||
"manifest": "accepted-p22-01-inputs/ROOT_MATERIAL_PRESERVATION_MANIFEST.json"
|
||||
},
|
||||
"resume_rule": "P26-01 formally closed on exactC72a50a4a, no duplicate worker/test/review. Next original unit P04-01 existingthe-tree-p04-01/2dde759 repair29; actual4D05answers supplied. Rebind current main and complete exact remaining conditions, no old f5full178 relabel.",
|
||||
"second_setup_attempt": {
|
||||
"run": "81b128df2b3741ec9ab480f3d05d96c1",
|
||||
"writes": 0,
|
||||
"result": "Prior commander direction incorrectly assumed existing P26 outputs. Actual Opus818862 withdrew assumption and actual3e55ca authorized creating all5newfiles; immutable spec unchanged. Three precreation invocations exited2 missing script, not actual tests or acceptance."
|
||||
},
|
||||
"original_unit_credit_added": 1,
|
||||
"S": "cec295f34b60424a7238076407a89a2a2ad41b0c",
|
||||
"submitted_source": "cec295f34b60424a7238076407a89a2a2ad41b0c",
|
||||
"formal_validation": {
|
||||
"passed": true,
|
||||
"S": "cec295f34b60424a7238076407a89a2a2ad41b0c",
|
||||
"all_registered_checks": 3,
|
||||
"meaningful_self_tests": 24,
|
||||
"artifact": "ROOT_FORMAL_VALIDATION_CEC295F3.json"
|
||||
},
|
||||
"whole_original_review": {
|
||||
"S": "cec295f34b60424a7238076407a89a2a2ad41b0c",
|
||||
"actual_run": "1aeee623878f42b89ee83595be3539fb",
|
||||
"status": "pass",
|
||||
"critical_high_medium": 0,
|
||||
"low": 3,
|
||||
"artifact": "ROOT_WHOLE_REVIEW_CEC295F3.json"
|
||||
},
|
||||
"D05_current_human_answers": "All4remaining rules approved clientdate2026-10-18; separateP04adoptionnext. Frozenf4/379audit must explicitlylabel historicalsource.",
|
||||
"native_reuse": {
|
||||
"C": "72a50a4a1bc7c416d45e3045398e53134e44a6ce",
|
||||
"all1368_inputs_settings_marker_policy_engine_roster_parse_defaultplayer_equal": true,
|
||||
"actual_proof": "ROOT_EXACT_FINAL_72A50A4A_GAME_INPUT_REUSE.json",
|
||||
"new_native_runs": 0
|
||||
},
|
||||
"actual_repair_direction": "5c77fcb3394e4c34a2558cde5e1ff3e8",
|
||||
"repair3_result": {
|
||||
"run": "3094806e368d4ed18952ff238508fe23",
|
||||
"result": "blocked on exact D05 approval source delivery; report-only edits, actual review fixes not done",
|
||||
"resolved": "Actual4humananswers/policytexts/questionID and published a13f7c0 approval bytes/SHA supplied in same implementer handoff; actual Opus b0db/98e5 verified all4handoffdocs before same-task resume",
|
||||
"approval_file_sha256": "cd365ded1b777a0327d090709f0a4161f5005562819183455d9f2e106fba3e96"
|
||||
},
|
||||
"previous_whole_original_review": {
|
||||
"actual_run": "8a8f40a333de4f0f993bc757c665c696",
|
||||
"model": "claude-opus-5-5",
|
||||
"status": "changes_requested",
|
||||
"high": 2,
|
||||
"medium": 2,
|
||||
"low": 1,
|
||||
"artifact": "ROOT_WHOLE_REVIEW_35B3DE0D.json"
|
||||
},
|
||||
"implementation_model": "gpt-6.1-sol",
|
||||
"model_selection": "Actual Opus5c77 directly read every policy AR condition and each cited code span and fixed exact allowed/excluded memberships. Actual1f3936 switches to Sol6.1 for mechanical implementation; provider argv verified. Prior Astra output remains currentS.",
|
||||
"at_jst": "2026-10-18T09:59:36.678192+09:00",
|
||||
"normal_integration_candidate": "72a50a4a1bc7c416d45e3045398e53134e44a6ce",
|
||||
"normal_main_base": "fc9c8909ac04639076052dfa7325f1603f4db89e",
|
||||
"registered_task_state": "completed",
|
||||
"formally_completed": 16,
|
||||
"whole_original_P26_01_accepted": true,
|
||||
"whole_game_accepted": false,
|
||||
"required_before_acceptance": [],
|
||||
"normal_final_pending": false,
|
||||
"source_on_main": true,
|
||||
"closure_evidence": [
|
||||
{
|
||||
"path": "ROOT_FORMAL_VALIDATION_CEC295F3.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/e2cdb8cd88184505a25a19459b35dd2e-validation.json",
|
||||
"bytes": 837,
|
||||
"sha256": "ae7010aa607c8b27e0d13bcf1e8e8f0e7267a7d2a1d96c8b106d6529399178f6"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_WHOLE_REVIEW_CEC295F3.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/1aeee623878f42b89ee83595be3539fb/result.json",
|
||||
"bytes": 6739,
|
||||
"sha256": "da47429ba7048a21006ee4c247680acdec5b3b6ef451de908cc8f47e5af2199f"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_NORMAL_INTEGRATION_72A50A4A.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/41fb06480320418a9caf5199756590dd-integration.json",
|
||||
"bytes": 838,
|
||||
"sha256": "2f47d39d3f05b3735f0fb3e01adaabf1c66c6a784d60af247063bd90e5ec0d5c"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_NORMAL_FINAL_72A50A4A.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/80390306daee4eacb57048e4feb3a7ee-final.json",
|
||||
"bytes": 832,
|
||||
"sha256": "b41069126e029c30ab644a62a54cb45ca2e0e504add150020500acba4e249469"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_RUNNER_COMPLETED_TRACEABILITY.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/traceability/P26-01-LEDGER.json",
|
||||
"bytes": 5013,
|
||||
"sha256": "039cb19b4eca41c48f7262bb456ce61d06b3381bf830d193358e85757d06d33d"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_EXACT_NORMAL_CANDIDATE_72A50A4A.json",
|
||||
"actual_original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p26-01-ledger/.runtime/P26-01-LEDGER/build/audit-support/ROOT_EXACT_NORMAL_CANDIDATE_72a50a4a.json",
|
||||
"bytes": 2634,
|
||||
"sha256": "5614c9b1c9eb222dbbcfd9ae1c3b438cc4129c779deba2841d660a8c96b6cfe6"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_EXACT_FINAL_72A50A4A_GAME_INPUT_REUSE.json",
|
||||
"actual_original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p26-01-ledger/.runtime/P26-01-LEDGER/build/audit-support/ROOT_EXACT_FINAL_72a50a4a_GAME_INPUT_REUSE.json",
|
||||
"bytes": 1327,
|
||||
"sha256": "9862725854c4a7d2c651ba79841dd44cf791d4794f1cd33a551d18c134d3fd6f"
|
||||
}
|
||||
],
|
||||
"normal_final": {
|
||||
"passed": true,
|
||||
"commit": "72a50a4a1bc7c416d45e3045398e53134e44a6ce",
|
||||
"artifact": "ROOT_NORMAL_FINAL_72A50A4A.json"
|
||||
},
|
||||
"related_open_work": [
|
||||
"P26-02/03 original production content, all chapter/route/ending/dialogue/portrait/voice missing items remain owned gaps",
|
||||
"D08/D09 unresolved scope/quantity/quality; no invented content or values",
|
||||
"P04 actual4D05 approvals now ready for adoption and remaining original acceptance",
|
||||
"Global natural-play/performance/held gestures/same-Windows actual-device acceptance incomplete"
|
||||
]
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"S": "cec295f34b60424a7238076407a89a2a2ad41b0c",
|
||||
"actual_review": "1aeee623878f42b89ee83595be3539fb",
|
||||
"required_P26_01_gap": false,
|
||||
"deferred_findings": [
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Support evidence is narrowed per kind, not per AR. When a row claims only some ARs of a kind, it still gets every pin for that kind. For example, the 21 route rows and original.line.9/30/33 claim only heroine route ARs, but they also carry the affection/shield invariant pins (original_relationship_state.gd:21-26) that support three_emotions and affection_shield_max. The scope string lists every fragment of the kind, so nothing is overstated and every row stays content_status=missing. This does not block the AC. A later refinement could split the pins per AR."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "The AR.guest.need_sexual_night_peak fragment is thin: guest_service.gd:355-359 only switches between the intimacy_night and intimacy_day input keys. The scope correctly disclaims peak values and event production, so the partial status is honestly bounded. Downstream units must not read this as evidence of a peak."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Owner precision is still explicitly deferred: owners come from the primary_package of every AR sharing a cited line, e.g. original.line.257 → P00. The previous review allowed this, and it causes no original acceptance gap."
|
||||
}
|
||||
],
|
||||
"scope": "Preserve optional precision improvements for future content work; no extra originalunit, no required acceptance relaxed."
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"at_unix_ns": 1792283537701105000,
|
||||
"removed": [
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p26-01-ledger/P26-01-LEDGER-validation-1b73eeae",
|
||||
"head": "f10907d8db7fe8d1de31bfe7726b2b002a4c727b",
|
||||
"files": 4963,
|
||||
"logical_bytes": 297061841
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p26-01-ledger/P26-01-LEDGER-validation-4fd47d16",
|
||||
"head": "da80360a60224bed5aedb487141511dc690a30f7",
|
||||
"files": 4963,
|
||||
"logical_bytes": 282396293
|
||||
}
|
||||
],
|
||||
"free_before_bytes": 718565376,
|
||||
"free_after_bytes": 1371758592,
|
||||
"observed_gain_bytes": 653193216,
|
||||
"all_source_blobs_verified": true,
|
||||
"all_unique_runtime_evidence_preserved": true,
|
||||
"restore_manifest": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p26-01-ledger/.runtime/coordinator-start-20261017/ENDED_DA_F109_VALIDATION_CHECKOUT_FULL_GIT_RESTORE_PROOF.json",
|
||||
"restore_manifest_sha256": "5dc84346ab742a2d9ea0e7659777b246cda42c68ad7654e55dee419f79e65f5a"
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"at_unix_ns": 1792281770511418000,
|
||||
"removed": [
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p26-01-ledger/P26-01-LEDGER-validation-ae31dabe",
|
||||
"head": "35b3de0d59d41633fe89678e742f35f4df620618",
|
||||
"files": 4963,
|
||||
"logical_bytes": 242975029
|
||||
}
|
||||
],
|
||||
"free_before_bytes": 1523347456,
|
||||
"free_after_bytes": 1780461568,
|
||||
"observed_gain_bytes": 257114112,
|
||||
"all_source_blobs_verified": true,
|
||||
"all_unique_runtime_evidence_preserved": true,
|
||||
"restore_manifest": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p26-01-ledger/.runtime/coordinator-start-20261017/ENDED_VALIDATION_CHECKOUT_FULL_GIT_RESTORE_PROOF.json",
|
||||
"restore_manifest_sha256": "d0ac5aa2a4d9691bdcda52c8d85347afbb697efff82c1e1aeea94563c37df8f4"
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"artifact_commit": "35b3de0d59d41633fe89678e742f35f4df620618",
|
||||
"kind": "submitted",
|
||||
"existing_product_C": "65f07bf5eaa759a8e2e17c7bdbbbdbceb24ee373",
|
||||
"old_actual_native_S": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"all1368_selected_source_settings_assets_tests_tools_byte_equal": true,
|
||||
"marker_policy_engine_roster_parse_default_player_equal": true,
|
||||
"scope": "Unmodified existing source_refs algorithm exact key set; doc audit files excluded by preexisting algorithm, no narrowed source set. All source file bytes hashed independently by Root.",
|
||||
"native_full_evidence_reuse_qualified": true,
|
||||
"new_native_runs": 0,
|
||||
"existing_full": {
|
||||
"actual_suites": 184,
|
||||
"missing_marker_paths": [],
|
||||
"remaining_unexecuted_tests": [],
|
||||
"available_marker_checks": 21903,
|
||||
"actual_all_roster_checks": 21903,
|
||||
"strict_accepted_checks": 21903,
|
||||
"verified": true,
|
||||
"composed": true,
|
||||
"original_full_attempt_passed": false,
|
||||
"whole_original_acceptance": false,
|
||||
"parse_checks": 329,
|
||||
"setup_phases": 2,
|
||||
"owned_ended": 186,
|
||||
"tested_source": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"engines_started": 0,
|
||||
"verifier_sha256": "d00bf46bfcc0e0bb197edd284a3ae14610ca710507831e18e071a79461946e8a"
|
||||
},
|
||||
"whole_original_P26_01_accepted": false,
|
||||
"time_ns": 1792237684606707000
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"artifact_commit": "cec295f34b60424a7238076407a89a2a2ad41b0c",
|
||||
"kind": "submitted",
|
||||
"existing_product_C": "65f07bf5eaa759a8e2e17c7bdbbbdbceb24ee373",
|
||||
"old_actual_native_S": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"all1368_selected_source_settings_assets_tests_tools_byte_equal": true,
|
||||
"marker_policy_engine_roster_parse_default_player_equal": true,
|
||||
"scope": "Unmodified existing source_refs algorithm exact key set; doc audit files excluded by preexisting algorithm, no narrowed source set. All source file bytes hashed independently by Root.",
|
||||
"native_full_evidence_reuse_qualified": true,
|
||||
"new_native_runs": 0,
|
||||
"existing_full": {
|
||||
"actual_suites": 184,
|
||||
"missing_marker_paths": [],
|
||||
"remaining_unexecuted_tests": [],
|
||||
"available_marker_checks": 21903,
|
||||
"actual_all_roster_checks": 21903,
|
||||
"strict_accepted_checks": 21903,
|
||||
"verified": true,
|
||||
"composed": true,
|
||||
"original_full_attempt_passed": false,
|
||||
"whole_original_acceptance": false,
|
||||
"parse_checks": 329,
|
||||
"setup_phases": 2,
|
||||
"owned_ended": 186,
|
||||
"tested_source": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"engines_started": 0,
|
||||
"verifier_sha256": "d00bf46bfcc0e0bb197edd284a3ae14610ca710507831e18e071a79461946e8a"
|
||||
},
|
||||
"whole_original_P26_01_accepted": false,
|
||||
"time_ns": 1792284216824577000
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"artifact_commit": "da80360a60224bed5aedb487141511dc690a30f7",
|
||||
"kind": "submitted",
|
||||
"existing_product_C": "65f07bf5eaa759a8e2e17c7bdbbbdbceb24ee373",
|
||||
"old_actual_native_S": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"all1368_selected_source_settings_assets_tests_tools_byte_equal": true,
|
||||
"marker_policy_engine_roster_parse_default_player_equal": true,
|
||||
"scope": "Unmodified existing source_refs algorithm exact key set; doc audit files excluded by preexisting algorithm, no narrowed source set. All source file bytes hashed independently by Root.",
|
||||
"native_full_evidence_reuse_qualified": true,
|
||||
"new_native_runs": 0,
|
||||
"existing_full": {
|
||||
"actual_suites": 184,
|
||||
"missing_marker_paths": [],
|
||||
"remaining_unexecuted_tests": [],
|
||||
"available_marker_checks": 21903,
|
||||
"actual_all_roster_checks": 21903,
|
||||
"strict_accepted_checks": 21903,
|
||||
"verified": true,
|
||||
"composed": true,
|
||||
"original_full_attempt_passed": false,
|
||||
"whole_original_acceptance": false,
|
||||
"parse_checks": 329,
|
||||
"setup_phases": 2,
|
||||
"owned_ended": 186,
|
||||
"tested_source": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"engines_started": 0,
|
||||
"verifier_sha256": "d00bf46bfcc0e0bb197edd284a3ae14610ca710507831e18e071a79461946e8a"
|
||||
},
|
||||
"whole_original_P26_01_accepted": false,
|
||||
"time_ns": 1792282413524270000
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"artifact_commit": "f10907d8db7fe8d1de31bfe7726b2b002a4c727b",
|
||||
"kind": "submitted",
|
||||
"existing_product_C": "65f07bf5eaa759a8e2e17c7bdbbbdbceb24ee373",
|
||||
"old_actual_native_S": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"all1368_selected_source_settings_assets_tests_tools_byte_equal": true,
|
||||
"marker_policy_engine_roster_parse_default_player_equal": true,
|
||||
"scope": "Unmodified existing source_refs algorithm exact key set; doc audit files excluded by preexisting algorithm, no narrowed source set. All source file bytes hashed independently by Root.",
|
||||
"native_full_evidence_reuse_qualified": true,
|
||||
"new_native_runs": 0,
|
||||
"existing_full": {
|
||||
"actual_suites": 184,
|
||||
"missing_marker_paths": [],
|
||||
"remaining_unexecuted_tests": [],
|
||||
"available_marker_checks": 21903,
|
||||
"actual_all_roster_checks": 21903,
|
||||
"strict_accepted_checks": 21903,
|
||||
"verified": true,
|
||||
"composed": true,
|
||||
"original_full_attempt_passed": false,
|
||||
"whole_original_acceptance": false,
|
||||
"parse_checks": 329,
|
||||
"setup_phases": 2,
|
||||
"owned_ended": 186,
|
||||
"tested_source": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"engines_started": 0,
|
||||
"verifier_sha256": "d00bf46bfcc0e0bb197edd284a3ae14610ca710507831e18e071a79461946e8a"
|
||||
},
|
||||
"whole_original_P26_01_accepted": false,
|
||||
"time_ns": 1792283275576147000
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"artifact_commit": "72a50a4a1bc7c416d45e3045398e53134e44a6ce",
|
||||
"kind": "final",
|
||||
"existing_product_C": "65f07bf5eaa759a8e2e17c7bdbbbdbceb24ee373",
|
||||
"old_actual_native_S": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"all1368_selected_source_settings_assets_tests_tools_byte_equal": true,
|
||||
"marker_policy_engine_roster_parse_default_player_equal": true,
|
||||
"scope": "Unmodified existing source_refs algorithm exact key set; doc audit files excluded by preexisting algorithm, no narrowed source set. All source file bytes hashed independently by Root.",
|
||||
"native_full_evidence_reuse_qualified": true,
|
||||
"new_native_runs": 0,
|
||||
"existing_full": {
|
||||
"actual_suites": 184,
|
||||
"missing_marker_paths": [],
|
||||
"remaining_unexecuted_tests": [],
|
||||
"available_marker_checks": 21903,
|
||||
"actual_all_roster_checks": 21903,
|
||||
"strict_accepted_checks": 21903,
|
||||
"verified": true,
|
||||
"composed": true,
|
||||
"original_full_attempt_passed": false,
|
||||
"whole_original_acceptance": false,
|
||||
"parse_checks": 329,
|
||||
"setup_phases": 2,
|
||||
"owned_ended": 186,
|
||||
"tested_source": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"engines_started": 0,
|
||||
"verifier_sha256": "d00bf46bfcc0e0bb197edd284a3ae14610ca710507831e18e071a79461946e8a"
|
||||
},
|
||||
"whole_original_P26_01_accepted": false,
|
||||
"time_ns": 1792285176653921000
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"S": "cec295f34b60424a7238076407a89a2a2ad41b0c",
|
||||
"C": "72a50a4a1bc7c416d45e3045398e53134e44a6ce",
|
||||
"M": "fc9c8909ac04639076052dfa7325f1603f4db89e",
|
||||
"worktree": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p26-01-ledger/P26-01-LEDGER-integration-f50ec274",
|
||||
"normal_integration_passed": true,
|
||||
"actual_independent_whole_review_artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/1aeee623878f42b89ee83595be3539fb/result.json",
|
||||
"critical_high_medium": 0,
|
||||
"low": 3,
|
||||
"all8_reviewed_doc_artifacts_exact": {
|
||||
"docs/plans/original-completion-2026-10-02/execution/p26-01/CONTENT_LEDGER.json": {
|
||||
"bytes": 33210478,
|
||||
"sha256": "d6e4397eb11c7adb27cfa873f929695a49f8cbe6059fd74de4765b9575bee5bc"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p26-01/CONTENT_LEDGER.md": {
|
||||
"bytes": 30504649,
|
||||
"sha256": "382bfdb9087f1c4fa48936ac487e6b148a99b6086c8bc576bffaa632a4fa2054"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p26-01/check_content_ledger.py": {
|
||||
"bytes": 41984,
|
||||
"sha256": "c9e10ad2288e6e5c038aaff5c1bbe11a4d47c5fb6898ac94ab4e19abb08ab5f7"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p26-01/test_content_ledger.py": {
|
||||
"bytes": 18721,
|
||||
"sha256": "ea8ba4b8a78cb289a5ffe9e1bd82b99dbb476b560b62f53c94c577f87c5cf5d0"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p26-01/IMPLEMENTATION_REPORT.md": {
|
||||
"bytes": 15076,
|
||||
"sha256": "ea0492b8ee854a959fd1965f955ca8b6779404c01441e20a5027e88ba0d4eacd"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p26-01/TASK_SPEC.json": {
|
||||
"bytes": 6901,
|
||||
"sha256": "8026040345de6b7d06cfce40beac9150bfe9ad303d6b26c11bd94e66b1080b29"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p26-01/FROZEN_GAME_INPUT_PINS.json": {
|
||||
"bytes": 234047,
|
||||
"sha256": "6c778226a4cc6d0b0d682500759e7d4229c926a27bd2e247b00b9c3e5f1a2fb0"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p26-01/ACTUAL_OPUS_NEXT_ORIGINAL_UNIT_SELECTION.json": {
|
||||
"bytes": 5472,
|
||||
"sha256": "fbe3502ad7c28b713889c0cf0db9d3b3107c7ebaa1e81ad8295ed3ebbab55be2"
|
||||
}
|
||||
},
|
||||
"all1368_game_inputs_settings_engine_policy_marker_roster_defaultplayer_exact": true,
|
||||
"native_full_reuse_qualified": true,
|
||||
"new_native_runs": 0,
|
||||
"human_authority": "Standing actual human main-update and commit/push authorization for original plan scope; no new SHA-specific human statement is claimed.",
|
||||
"final_pending": true,
|
||||
"whole_original_unit_credit": 0,
|
||||
"time_ns": 1792284917997008000
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"old_S": "da80360a60224bed5aedb487141511dc690a30f7",
|
||||
"new_S": "f10907d8db7fe8d1de31bfe7726b2b002a4c727b",
|
||||
"row_count": 762,
|
||||
"all_same_ids_original_citations_AR_links": true,
|
||||
"top_level_changed_only": [
|
||||
"rows",
|
||||
"atomic_dispositions"
|
||||
],
|
||||
"all_required_and_completed_counts_null": true,
|
||||
"voice_all_missing_no_unrelated_evidence": true,
|
||||
"scope": "Independent Root JSON facts comparison; not semantic whole-unit acceptance. Existing requirement coverage preserved; changed statuses/support still need actual independent Opus review."
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"old_S": "f10907d8db7fe8d1de31bfe7726b2b002a4c727b",
|
||||
"new_S": "cec295f34b60424a7238076407a89a2a2ad41b0c",
|
||||
"all762_IDs_original_citations_and_AR_links_unchanged": true,
|
||||
"only_changed_top_level": [
|
||||
"rows"
|
||||
],
|
||||
"all_required_and_completed_counts_null": true,
|
||||
"original_line_221_missing_no_camera_backend_evidence": true,
|
||||
"voice_all_missing_no_unrelated_evidence": true,
|
||||
"whole_unit_acceptance": false
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"task_id": "P26-01-LEDGER",
|
||||
"commit": "cec295f34b60424a7238076407a89a2a2ad41b0c",
|
||||
"kind": "validation",
|
||||
"checks": [
|
||||
{
|
||||
"id": "p26-ledger",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/3cb7980d34a44170845268da3baa6b19",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p26-negative",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/d0f8e79308f44b6eb31819789a8ad606",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p26-source-binding",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/cb599ac518d34133a180a56cdcd2ee86",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"task_id": "P26-01-LEDGER",
|
||||
"commit": "da80360a60224bed5aedb487141511dc690a30f7",
|
||||
"kind": "validation",
|
||||
"checks": [
|
||||
{
|
||||
"id": "p26-ledger",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/efd869f3b9024afd82659924fcbf4d4d",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p26-negative",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/744733ca201d41869d1eb8422f428f7b",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p26-source-binding",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/a5bbe5d88a344ebd8eee59bd62315893",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"task_id": "P26-01-LEDGER",
|
||||
"commit": "f10907d8db7fe8d1de31bfe7726b2b002a4c727b",
|
||||
"kind": "validation",
|
||||
"checks": [
|
||||
{
|
||||
"id": "p26-ledger",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/47f3444c78da46809fcde2de6b57b1a2",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p26-negative",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/8c8c6b23af954aba837b770d3bf78271",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p26-source-binding",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/94f2e37d61f043ed966195985e20dbd0",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"task_id": "P26-01-LEDGER",
|
||||
"commit": "72a50a4a1bc7c416d45e3045398e53134e44a6ce",
|
||||
"kind": "final",
|
||||
"checks": [
|
||||
{
|
||||
"id": "p26-ledger",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/ea69be80d6ab44c4a6ff53ef14105882",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p26-negative",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/37a1dff8996549628cb3eb258fe565ab",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p26-source-binding",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/724f3c4085af45659ac47866ac1e6731",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"task_id": "P26-01-LEDGER",
|
||||
"commit": "72a50a4a1bc7c416d45e3045398e53134e44a6ce",
|
||||
"kind": "integration",
|
||||
"checks": [
|
||||
{
|
||||
"id": "p26-ledger",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/33004d5d1ca14a93b26df6e7fe9ce7a4",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p26-negative",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/7dded2c3b10b412885264a93f1a281a4",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p26-source-binding",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/fadb4f1220f9415e92262f9352b4ddb7",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
}
|
||||
+118
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"contract": {
|
||||
"id": "P26-01-LEDGER",
|
||||
"title": "原P26-01 全必要内容の台帳",
|
||||
"requirement_ids": [
|
||||
"P26-01"
|
||||
],
|
||||
"acceptance_ids": [
|
||||
"AC-P26-01"
|
||||
],
|
||||
"spec_ref": "docs/plans/original-completion-2026-10-02/execution/p26-01/TASK_SPEC.json",
|
||||
"base_commit": "379a1ba8fd25b5ad24226178a2492f91761dc31d",
|
||||
"worker": "codex",
|
||||
"allowed_paths": [
|
||||
"docs/plans/original-completion-2026-10-02/execution/p26-01/CONTENT_LEDGER.json",
|
||||
"docs/plans/original-completion-2026-10-02/execution/p26-01/CONTENT_LEDGER.md",
|
||||
"docs/plans/original-completion-2026-10-02/execution/p26-01/check_content_ledger.py",
|
||||
"docs/plans/original-completion-2026-10-02/execution/p26-01/test_content_ledger.py",
|
||||
"docs/plans/original-completion-2026-10-02/execution/p26-01/IMPLEMENTATION_REPORT.md"
|
||||
],
|
||||
"depends_on": [],
|
||||
"resource_locks": [
|
||||
"p26-01-content-audit-docs"
|
||||
],
|
||||
"validation_ids": [
|
||||
"p26-ledger",
|
||||
"p26-negative",
|
||||
"p26-source-binding"
|
||||
],
|
||||
"max_repair_attempts": null,
|
||||
"spec_sha256": "1fedc9ade42a04722846daa9ac8ec26f821fb4efbce8dbbb53e3e76e31f38d02"
|
||||
},
|
||||
"implementation_commit": "cec295f34b60424a7238076407a89a2a2ad41b0c",
|
||||
"integration_commit": "72a50a4a1bc7c416d45e3045398e53134e44a6ce",
|
||||
"owner": "Standing actual human authorization in this same chat to update main and commit/push original-plan work. Exact P26-01 candidate 72a50a4a1bc7c416d45e3045398e53134e44a6ce and main-base fc9c8909ac04639076052dfa7325f1603f4db89e have normal integration pass, independent whole-unit Opus pass with no critical/high/medium, and exact source applicability. No new SHA-specific human statement is claimed.",
|
||||
"evidence": [
|
||||
{
|
||||
"id": 1,
|
||||
"task_id": "P26-01-LEDGER",
|
||||
"kind": "validation",
|
||||
"commit_sha": "35b3de0d59d41633fe89678e742f35f4df620618",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/c6477467b3f1443d81852e7ad06c46b9-validation.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"task_id": "P26-01-LEDGER",
|
||||
"kind": "review",
|
||||
"commit_sha": "35b3de0d59d41633fe89678e742f35f4df620618",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/8a8f40a333de4f0f993bc757c665c696/result.json",
|
||||
"passed": 0
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"task_id": "P26-01-LEDGER",
|
||||
"kind": "validation",
|
||||
"commit_sha": "da80360a60224bed5aedb487141511dc690a30f7",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/3aae63d325db4f3aa702b1f10bb26d96-validation.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"task_id": "P26-01-LEDGER",
|
||||
"kind": "review",
|
||||
"commit_sha": "da80360a60224bed5aedb487141511dc690a30f7",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/dc734a96100a4c0bb1593f6dc124fa06/result.json",
|
||||
"passed": 0
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"task_id": "P26-01-LEDGER",
|
||||
"kind": "validation",
|
||||
"commit_sha": "f10907d8db7fe8d1de31bfe7726b2b002a4c727b",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/2c9aefa162844c1aaebb7a6568c1eb9a-validation.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"task_id": "P26-01-LEDGER",
|
||||
"kind": "review",
|
||||
"commit_sha": "f10907d8db7fe8d1de31bfe7726b2b002a4c727b",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/1d87b50d0be3488f80eda4cee7fea06d/result.json",
|
||||
"passed": 0
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"task_id": "P26-01-LEDGER",
|
||||
"kind": "validation",
|
||||
"commit_sha": "cec295f34b60424a7238076407a89a2a2ad41b0c",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/e2cdb8cd88184505a25a19459b35dd2e-validation.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"task_id": "P26-01-LEDGER",
|
||||
"kind": "review",
|
||||
"commit_sha": "cec295f34b60424a7238076407a89a2a2ad41b0c",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/1aeee623878f42b89ee83595be3539fb/result.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"task_id": "P26-01-LEDGER",
|
||||
"kind": "integration",
|
||||
"commit_sha": "72a50a4a1bc7c416d45e3045398e53134e44a6ce",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/41fb06480320418a9caf5199756590dd-integration.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"task_id": "P26-01-LEDGER",
|
||||
"kind": "final",
|
||||
"commit_sha": "72a50a4a1bc7c416d45e3045398e53134e44a6ce",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/80390306daee4eacb57048e4feb3a7ee-final.json",
|
||||
"passed": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"task_id": "P26-01-LEDGER",
|
||||
"commit": "35b3de0d59d41633fe89678e742f35f4df620618",
|
||||
"status": "changes_requested",
|
||||
"summary": "Independent whole-unit review of P26-01 (AC-P26-01) at 35b3de0. What holds: all 5 outputs are inside allowed_paths. All 3 Runner validations exited 0: --check printed pass with selected_files 1368 and parse_files 329; the negative suite ran 13 tests, OK; --source-binding-only also passed. No row claims 'produced', every required_count/completed_count is null, and accounting stays at 15/88 with credit 0 and whole_unit_accepted false. D05, D08 and D09 are recorded as unresolved. The 21 route rows keep the exact 7 original names (BASELINE 118–124) crossed with 純愛/NTR/堕落, each tied to its P19 cell, where natural_route_complete is false. The 614 P22-01 usage records are kept, and their status is derived from the actual representation type: only code_drawn and placeholder_media exist, so rows are code-drawing, placeholder or missing. Rivals (line 125) and per-route event CG (line 243) appear through the P22 usage slots. Endings are split into all/bad/game_over with no invented counts, and the task-spec/selection/pin binding and the definition projection look correct. Acceptance is NOT met as a whole unit, for three reasons. (1) Some event and dialogue content the original requires is never recorded: BASELINE line 65 (night NTR events), line 196 (the 代物弁済 event), and lines 13/53/221–222 (peeping-view, recorder and intervention content). None of them are cited anywhere in the 651 rows. (2) The checker cannot catch this kind of gap. Clause coverage comes from hard-coded line spans inside the checker, and verify() finishes by comparing the ledger to a canonical document built by the same function that wrote it with --write. There is no independent clause-coverage check, which the spec forbids as the sole verification. (3) The ledger is never linked to atomic_requirements.json, which the spec lists as an authority: zero AR.* IDs are referenced, including AR.heroine.*.route.*, AR.progression.all_endings, AR.progression.encyclopedia_complete, AR.events.ntr_night_peak, AR.guest.debt_settlement_imprisonment and AR.asset.character_voice. Owner and status for the clause.* rows are also hard-coded rather than derived from evidence. Because there is no partial credit, P26-01 should not be credited and the count must stay at 15/88 until these are fixed and the unit is reviewed again.",
|
||||
"acceptance_ids": [
|
||||
"AC-P26-01"
|
||||
],
|
||||
"findings": [
|
||||
{
|
||||
"severity": "high",
|
||||
"message": "Some original event/dialogue content clauses are missing from the ledger. BASELINE.txt line 65 (夜…NTRイベント発生のピーク), line 196 (女性客は「代物弁済」イベントで即座に奴隷化・投獄) and lines 13/53/221-222 (peeping view, 記録係 collecting 脅迫ネタ, intervention) are not cited by any of the 651 rows. Grep for 代物弁済, NTRイベント発生, 覗き見し and 記録係 returns 0 matches, and no citation starts at lines 65 or 196. dialogue.all cites only 155/230/256. The spec requires covering every original-required dialogue/event slot, or recording it as explicitly undefined, so these required-but-unproduced event contents are not recorded as missing, as AC-P26-01 requires."
|
||||
},
|
||||
{
|
||||
"severity": "high",
|
||||
"message": "Clause-coverage verification is circular. expected() builds the rows from hard-coded BASELINE spans in check_content_ledger.py:177-205, and verify() ends with an exact equality check against that same canonical document, which --write also produced (check_content_ledger.py:289, 331). Nothing independently computes which BASELINE clauses are content-relevant, for example a closed list of required line numbers, or a cross-check against atomic_requirements entries for routes, endings, encyclopedia, events, portraits and voice. So an omitted clause, like the ones in the first finding, passes --check and the 13 tests. Most negative tests (kind 'invented', extra key, identity name) are caught only by that same equality check. The spec forbids using tautological generated facts as the sole verification of 'exact original full clause coverage'."
|
||||
},
|
||||
{
|
||||
"severity": "medium",
|
||||
"message": "There is no traceability to atomic_requirements.json, although the spec lists it as an authority. The ledger references no AR.* IDs (grep returns 0). Relevant mandatory items exist and are not reconciled with the ledger, for example: AR.heroine.<7>.route.{love,ntr,corruption}, AR.progression.all_endings, AR.progression.encyclopedia_complete, AR.narrative.route_tones, AR.events.ntr_night_peak, AR.guest.debt_settlement_imprisonment, AR.unique.bad_end_transformation, AR.asset.character_voice, AR.asset.main_portraits/sub_portraits/portrait_*, AR.asset.route_event_cg, and AR.schedule.B-14.2.scenario/B-14.3.voice_*. Without this mapping, nothing shows that every relevant atomic requirement has a ledger row."
|
||||
},
|
||||
{
|
||||
"severity": "medium",
|
||||
"message": "Owner and status for the clause.* rows are hard-coded instead of derived from evidence. All eight clause rows (world, scope, route_skills, route_rules, art, cg, motion, production) get owner 'P26-03' and status 'missing' with empty evidence (check_content_ledger.py:196-205), and the owner enum is fixed to {D08, P26-02, P26-03}. This assigns game-mechanic clauses (shield, three duel types, history/pregnancy state, route skills) to the production-acceptance unit P26-03. It also leaves no way to name the P22 production packages or other upstream owners that the IMPLEMENTATION_REPORT itself names. Meanwhile, the existing OriginalRelationshipState / relationship_service support is recorded only in the top-level actual_support and is not reflected as 'partial' on the rows it relates to. The spec asks that each requirement name its actual owning remaining deliverable or decision and distinguish partial from missing."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "The negative tests mutate only rows[0] (the chapters.all row) for the owner/status/kind/count checks, and only a single route row for identity. No test covers status/owner tampering on route or usage rows, or a stale evidence SHA inside a usage row's representation pin, other than through the equality check. Test strength is therefore lower than the 13-test count suggests."
|
||||
}
|
||||
]
|
||||
}
|
||||
+23
File diff suppressed because one or more lines are too long
+31
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"task_id": "P26-01-LEDGER",
|
||||
"commit": "da80360a60224bed5aedb487141511dc690a30f7",
|
||||
"status": "changes_requested",
|
||||
"summary": "Independent whole-unit review of P26-01 (AC-P26-01) at da80360. Basis: BASELINE.txt in full, check_content_ledger.py, test_content_ledger.py, IMPLEMENTATION_REPORT, the ledger Markdown/JSON, atomic_requirements, the Runner receipts, and the P22 and D05 audit-support files.\n\nThe previous findings at 35b3de0 are mostly fixed:\n(1) The missing clauses are now explicit rows: original.line.13, 53, 65, 196, 221 and 222. Each quotes the exact original text, line number and SHA. Content stays missing; L196 代物弁済 is missing, and L65 is partial only for the night guest-need input.\n(2) The checker no longer relies only on canonical equality. verify_authority() selects required lines and ARs from BASELINE text and AR anchors without reading the ledger. It checks coverage, citation integrity, AR records, AR-to-row linkage, the owner derived from the AR, the route partial/missing split, and usage representation status and pins. 17 tests ran OK, and the new independent_reject tests call only that layer.\n(3) Every one of the 1309 ARs has a disposition, and the 675 relevant ARs are linked to rows.\n(4) Owners now come from the AR primary_package; the blanket P26-03 assignment is gone.\n\nThese also hold:\n- All 5 outputs are inside allowed_paths.\n- All 3 Runner validations exited 0: 1368 selected files, 329 parse files.\n- The 21 route rows keep the exact original names. Each is status partial (shared relationship container only) with content_status missing.\n- Every required_count and completed_count is null. No row claims produced.\n- Accounting stays at 15/88, credit 0, no partial credit.\n- D05 is recorded as historical-unresolved at f4f85bc/379a1ba, and the actual approval is pinned separately at a13f7c0 with SHA cd365ded. D08 and D09 stay unresolved.\n- P22-03 is reference only.\n- The definition projection rejects changes to work, acceptance, dependencies and requirement_ids.\n\nRemaining blocker: status attribution is not truthful for one of the six content categories the original names (音声). The partial status is assigned by matching keywords anywhere in a row's combined citation text. Because line 257 contains 覗きモード組み込み, the peeping-room backend pins are attached as partial support to voice.all, clause.production and original.line.257. These are voice-recording rows, and no voice support exists at all. The checker accepts any partial status as long as the row has some evidence and its support_scope contains the word 'only', so this mis-attribution passes. Because the spec requires each row to truthfully separate partial from missing, and voice is a named original category, whole-unit acceptance cannot be granted yet. Smaller precision issues are listed in the findings.\n\nNot verified here: integration gates (prepare-integration, exact C/M, final, Root ledger) remain mandatory. No native runs were reviewed or required.",
|
||||
"acceptance_ids": [
|
||||
"AC-P26-01"
|
||||
],
|
||||
"findings": [
|
||||
{
|
||||
"severity": "high",
|
||||
"message": "Voice is mislabelled partial. In check_content_ledger.py:351-367, a non-route, non-usage row becomes status='partial' whenever its combined citation text matches 覗|マジックミラー|記録係|カメラ|スクリーンショット|脅迫. voice.all cites L257 (フェーズ3: Hシーン実装、覗きモード組み込み、ボイス収録・実装…). So voice.all gets status 'partial', the peeping_room_service.gd:127-162 and simulation_runtime.gd:10860-10880 pins as evidence, and support_scope 'no dedicated support established; stopped room/reference/evidence container only…'. CONTENT_LEDGER.md:274-286 shows this. original.line.257 and clause.production get the same attribution. Character voice (原本: キャラクターボイス, ボイス収録・実装) has no implementation or support at all, so its row status should be missing. The peeping backend says nothing about voice. The spec requires distinguishing produced, placeholder, code-drawing, partial, missing and undefined truthfully, and voice is one of the six categories the original names. content_status remains missing, but the primary status field and its evidence are wrong for this category. Fix: assign partial support per AR/requirement rather than by keyword match on the whole merged row text, or split the mixed L257 schedule clause by AR."
|
||||
},
|
||||
{
|
||||
"severity": "medium",
|
||||
"message": "Partial-support truth is not independently checked. For a partial row, verify_authority (check_content_ledger.py:440-441) only requires non-empty evidence and the substring 'only' in support_scope. Nothing checks that the evidence relates to the cited requirement or its ARs. The only related negative test, test_owners_route_usage_and_partial_truth, flips partial to produced. Attaching unrelated backend pins to a missing content row, as in the voice case, is accepted by both the independent layer and the tests. Add a closed mapping from support-evidence kind to the ARs or prefixes it may support, and a negative test where unrelated evidence makes a missing row partial."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Several rows carry self-contradictory or over-broad status text. The support_scope strings concatenate 'no dedicated support established; …only' (endings.game_over, voice.all, clause.scope, clause.production, original.line.13/65/221/222/257). original.line.9 (全エンド・全ヒロイン攻略・図鑑コンプ) becomes partial through the shared relationship container, even though endings and the encyclopedia have no support. Status should be scoped to the sub-requirement it actually supports."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Owners come from every AR whose anchor shares a cited line, not from the requirement itself. For example, dialogue.all is owned by P00/P19/P25 because line 256 also carries the BGM, tile and parameter schedule ARs, and voice.all includes P00 schedule ARs. owner_assignment openly says the specific assignee is undefined, so this is acceptable as traceability, but each row's owning deliverable is imprecise. Consider marking which linked ARs are the content ARs that determine the owner."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "L226 (カットイン: 「NTR侵食開始」などの重要警告、決闘発生) is not selected by the content regex. Its ARs (AR.ui.cut_duel, AR.ui.cut_defense) get the generic out-of-scope 'independent mechanics' reason, while L225 notification bubbles are selected because イベントログ matches. Treating cut-ins as P24 UI is defensible, but the disposition reason should name that explicitly rather than rely on the regex's inconsistent boundary."
|
||||
}
|
||||
]
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"task_id": "P26-01-LEDGER",
|
||||
"commit": "f10907d8db7fe8d1de31bfe7726b2b002a4c727b",
|
||||
"status": "changes_requested",
|
||||
"summary": "Independent whole-unit review of P26-01 (AC-P26-01) at f10907d. Evidence read: BASELINE.txt in full (L1-258); check_content_ledger.py and test_content_ledger.py in full; IMPLEMENTATION_REPORT.md; the CONTENT_LEDGER.json rows for chapters, endings, encyclopedia, dialogue, portraits, voice, clause.*, 21 routes and original.line.9/53/65/72/221/222/257; the atomic_requirements records for every AR in SUPPORT_POLICY; the cited game source excerpts (peeping_room_service.gd:127-162, simulation_runtime.gd:10860-10880, guest_service.gd:355-360, operations_coordinator.gd:1183-1195); the prior da80360 review; the Root f10907d8 supplement, fact comparison and game-input reuse proof; the D05 binding; Runner receipts and logs. The diff file list was checked: changes touch only the 5 allowed outputs.\n\nReassessment of the da80360 findings:\n(1) Fixed. The merged-text keyword partial assignment is gone. It is replaced by a closed SUPPORT_POLICY that maps each support kind to its allowed ARs, plus a support_family limit. Claims are per AR in scoped_support, with an exact unsupported_atomic_requirement_ids partition.\n(2) Fixed. voice.all, endings.all/bad/game_over and encyclopedia.all are status=missing with evidence=[]. verify_authority line 508 rejects any evidence or partial status on voice/ending/encyclopedia rows. Mixed rows L9, L257 and clause.production keep the voice, ending and encyclopedia ARs as unsupported.\n(3) Fixed structurally. Partial support is scoped to the listed ARs. The self-contradictory concatenated 'no dedicated support; ...only' text is gone.\n(4) Fixed. Negative tests cover: injecting valid peeping pins into missing voice/portrait/ending/encyclopedia rows; copying a same-line observation claim into voice.all; giving a peeping claim to the L196 debt-settlement AR; expanding a claim to voice/ending/encyclopedia ARs; adding an unrelated pin to L65. Each has a valid control.\n(5) Preserved. Per the Root fact comparison and the checker: 762 rows, the same IDs, citations and AR links, 1309 AR dispositions, 675 relevant ARs linked, and required ⊆ seen_lines enforced from the BASELINE text.\nThe optional L226 low item is now explicit (P24 cut-ins). Owner precision is honestly deferred.\n\nStill holding:\n- All required_count and completed_count values are null. No row is produced.\n- Accounting stays at 15/88, credit 0, no partial credit.\n- D05 is historical at f4f85bc/379a1ba, and the current approval is pinned separately at a13f7c0 (cd365ded). D08 and D09 are unresolved.\n- P22-03 is a reference only.\n- Route rows keep exact original names and are partial (relationship container) with content_status missing.\n- Definition projection rejects changes to work, acceptance, depends_on and requirement_ids.\n- All 3 Runner validations exited 0 (18 tests OK, 1368 selected files, 329 parse files).\n\nRemaining blocker: the closed policy table itself contains at least one false AR attribution, so status is still not truthful for one original clause row. The checker's 'independent' compatibility check uses the same table, and the tests treat these attributions as valid. Neither can catch the error.\n\nNot verified or out of scope: prepare-integration, exact C/M, final, the Root ledger and main push remain mandatory. No native runs were required or reviewed. Native-reuse qualification rests on Root's supplied proof.",
|
||||
"acceptance_ids": [
|
||||
"AC-P26-01"
|
||||
],
|
||||
"findings": [
|
||||
{
|
||||
"severity": "medium",
|
||||
"message": "False partial attribution in the closed policy. In check_content_ledger.py:48-55, SUPPORT_POLICY['peeping-container'] lists AR.ui.observation_camera_entry (condition: 裏層のカメラアイコンから専用観察画面へ移る) as supported. The same policy's scope says 'no view, camera UI, screenshot, intervention, transaction or authored content'. IMPLEMENTATION_REPORT.md:49 also says the container does not prove 視界 or 専用画面. The cited code (peeping_room_service.gd:127-162 precondition/evidence-key fixture; simulation_runtime.gd:10860-10880 with placement returning BUILD_DEFINITION_PENDING_D04) has no camera icon, view transition or observation screen. Yet original.line.221 (CONTENT_LEDGER.json:336727-336794) has status=partial, evidence = the peeping pins, scoped_support=[AR.ui.observation_camera_entry], and unsupported_atomic_requirement_ids=[]. So a clause with zero relevant implementation is presented as fully partially supported. This is the same class of defect as the prior voice finding: unrelated backend support confers partial status. Because verify_authority reuses the same table and the tests use it as a valid control, the 'independent' compatibility check cannot detect it. Fix: remove AR.ui.observation_camera_entry from the policy, so L221 becomes missing with no evidence. Also re-justify each remaining policy AR against direct source proof, and add a negative test that rejects support for an AR whose required feature the support scope disclaims."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Several other policy memberships rest on precursor relevance only and should be re-justified or narrowed during the same fix:\n- AR.ui.observation_capture (screenshot evidence collection; the scope disclaims screenshots).\n- AR.underground.blackmail (blackmail transaction state and income; the scope disclaims transactions).\n- AR.route_action.observation_progress (route progress shown from the observation room).\n- AR.events.ntr_night_peak (NTR events peak at night). Its support is guest_service.gd:355-360, which only selects intimacy_night vs intimacy_day for guest need; report line 51 itself says this is not NTR event evidence.\nEach row's content_status stays missing, and the parent rows have other legitimately supported ARs, so this is low. The per-AR attribution should still not credit ARs whose only required behaviour is absent."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "chapters.all and dialogue.all use status=undefined rather than missing, although the reason text begins with 欠損 and the missing field is set. This is acceptable because the original defines no chapter or dialogue set. Consider stating explicitly that the produced content is missing and only the scope/quantity is undefined, so the AC wording (未制作内容を欠損として記録) is unambiguous for these two named categories."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Owner precision (owners derived from every AR sharing a cited line, e.g. dialogue.all → P00/P19/P25 through BGM/tile/parameter schedule ARs) remains explicitly deferred, as permitted. It does not block original acceptance."
|
||||
}
|
||||
]
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
# P22-01 必要素材の利用枠契約
|
||||
|
||||
原本の30施設についてLv1〜3 × 表裏の描画文脈 × 外観/内装の360利用枠を引き継ぎ、7人物、原本に名前のあるライバル3名と未確定の追加人物、状態、遠景、UI、音を対応付けた。
|
||||
|
||||
360は画像枚数ではない。表裏の描画文脈は建設許可を増やさない。同一画像/atlas/コードが複数利用枠を担えるが、個別利用条件への適合は後続受入で必要。現コード描画・仮素材と完成素材の区分を保持し、完成素材を追加認定していない。
|
||||
|
||||
原本必須の未制作内容も一覧に残す。章・イベント・フレーム・台詞数・追加人物等の未確定値はnullであり、0や適用外ではない。P22-02/03・P25/P26・原本全実装の完了には換算しない。
|
||||
|
||||
一覧はsource_pins.jsonとoutput-index.jsonで版を特定する。静的チェックは欠損/重複/現参照/未設定保持の検証であり、描画品質やWindows受入ではない。製品変更がないためゲーム全回帰を新規実行せず、P22-01一覧の独立レビューを行う。
|
||||
+78
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"scope": "Existing accepted P22-01 archival evidence exact bytes, not new production content; original raw evidence and old paths retained. Docs-only Root delivery supplement. No frozen spec/pins change.",
|
||||
"spec_file_bytes_sha256": "8026040345de6b7d06cfce40beac9150bfe9ad303d6b26c11bd94e66b1080b29",
|
||||
"Runner_git_show_strippedUTF8_spec_sha256": "1fedc9ade42a04722846daa9ac8ec26f821fb4efbce8dbbb53e3e76e31f38d02",
|
||||
"hash_semantics": "Different explicitly defined byte representations, not a spec mismatch. Raw source bytes equal pinned commit.",
|
||||
"files": [
|
||||
{
|
||||
"original_path": "artifacts/original-completion-2026-10-02/p22-01-usage-contract-candidate-r02/character_usage_slots.json",
|
||||
"preserved_path": "docs/plans/original-completion-2026-10-02/execution/p26-01/accepted-p22-01-inputs/character_usage_slots.json",
|
||||
"bytes": 232930,
|
||||
"sha256": "4c108db179c33f3e00771f5962628d0b342c4e34da3037c590426bc84524ad3f",
|
||||
"existing_P22_01_ledger_pin_matched": true
|
||||
},
|
||||
{
|
||||
"original_path": "artifacts/original-completion-2026-10-02/p22-01-usage-contract-candidate-r02/source_pins.json",
|
||||
"preserved_path": "docs/plans/original-completion-2026-10-02/execution/p26-01/accepted-p22-01-inputs/source_pins.json",
|
||||
"bytes": 5497,
|
||||
"sha256": "71f8a2837a63173889a1269bfc98f5b9bcb2a10b240c7173b8a263477d8e78f5",
|
||||
"existing_P22_01_ledger_pin_matched": true
|
||||
},
|
||||
{
|
||||
"original_path": "artifacts/original-completion-2026-10-02/p22-01-usage-contract-candidate-r02/facility_usage_slots.json",
|
||||
"preserved_path": "docs/plans/original-completion-2026-10-02/execution/p26-01/accepted-p22-01-inputs/facility_usage_slots.json",
|
||||
"bytes": 1361931,
|
||||
"sha256": "380cbd49cde77a665476e2dd636cc2853d261d5778c51897de7f376d7eda62be",
|
||||
"existing_P22_01_ledger_pin_matched": true
|
||||
},
|
||||
{
|
||||
"original_path": "artifacts/original-completion-2026-10-02/p22-01-usage-contract-candidate-r02/output-index.json",
|
||||
"preserved_path": "docs/plans/original-completion-2026-10-02/execution/p26-01/accepted-p22-01-inputs/output-index.json",
|
||||
"bytes": 1993,
|
||||
"sha256": "0f4977a8927662b031dab18b39fe4b9bc577dac9fff0c74ea0b1da66cba2f969",
|
||||
"existing_P22_01_ledger_pin_matched": true
|
||||
},
|
||||
{
|
||||
"original_path": "artifacts/original-completion-2026-10-02/p22-01-usage-contract-candidate-r02/current_media_inventory.json",
|
||||
"preserved_path": "docs/plans/original-completion-2026-10-02/execution/p26-01/accepted-p22-01-inputs/current_media_inventory.json",
|
||||
"bytes": 81687,
|
||||
"sha256": "6a981ff9e0a936c643b877fa9b0c23fb4ab7cdca3f84c35504107702398d00ff",
|
||||
"existing_P22_01_ledger_pin_matched": true
|
||||
},
|
||||
{
|
||||
"original_path": "artifacts/original-completion-2026-10-02/p22-01-usage-contract-candidate-r02/README.md",
|
||||
"preserved_path": "docs/plans/original-completion-2026-10-02/execution/p26-01/accepted-p22-01-inputs/README.md",
|
||||
"bytes": 1164,
|
||||
"sha256": "1098eaae9b4b6517b48646610b149913b5de64d0db48193b4c3895ae9e4e6cfd",
|
||||
"existing_P22_01_ledger_pin_matched": true
|
||||
},
|
||||
{
|
||||
"original_path": "artifacts/original-completion-2026-10-02/p22-01-usage-contract-candidate-r02/validation.json",
|
||||
"preserved_path": "docs/plans/original-completion-2026-10-02/execution/p26-01/accepted-p22-01-inputs/validation.json",
|
||||
"bytes": 584,
|
||||
"sha256": "b97bec43043c0f264b1169e5344f3f8ea4da3d893590764041f4ab7894a42da9",
|
||||
"existing_P22_01_ledger_pin_matched": true
|
||||
},
|
||||
{
|
||||
"original_path": "artifacts/original-completion-2026-10-02/p22-01-usage-contract-candidate-r02/state_usage_groups.json",
|
||||
"preserved_path": "docs/plans/original-completion-2026-10-02/execution/p26-01/accepted-p22-01-inputs/state_usage_groups.json",
|
||||
"bytes": 4501,
|
||||
"sha256": "94a9f97942ab3458b8c93b7604557f6b277a3392837a85a142fc41157bb5edb8",
|
||||
"existing_P22_01_ledger_pin_matched": true
|
||||
},
|
||||
{
|
||||
"original_path": "artifacts/original-completion-2026-10-02/p22-01-usage-contract-candidate-r02/other_usage_slots.json",
|
||||
"preserved_path": "docs/plans/original-completion-2026-10-02/execution/p26-01/accepted-p22-01-inputs/other_usage_slots.json",
|
||||
"bytes": 95365,
|
||||
"sha256": "f90e66fe0034043ed936b30b5c2fab1d759c198b55c0408c3982e352ccb6dcb7",
|
||||
"existing_P22_01_ledger_pin_matched": true
|
||||
},
|
||||
{
|
||||
"original_path": "artifacts/original-completion-2026-10-02/p22-01-usage-contract-candidate-r02/contract.json",
|
||||
"preserved_path": "docs/plans/original-completion-2026-10-02/execution/p26-01/accepted-p22-01-inputs/contract.json",
|
||||
"bytes": 4170,
|
||||
"sha256": "ab7995dcf09c9d4ec08b0cad82ff5e06d277836a1436c514bdee67cc9d6ed66c",
|
||||
"existing_P22_01_ledger_pin_matched": true
|
||||
}
|
||||
]
|
||||
}
|
||||
+6217
File diff suppressed because it is too large
Load Diff
+80
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"plan_id": "P22-01",
|
||||
"original_work": "全30施設のLv1〜3と表裏、7人物、ライバル、状態、背景、UI、音の必要枠を列挙する。",
|
||||
"original_acceptance": "仮素材、コード描画、完成素材の区分と利用条件が分かり、枠数を素材枚数と混同しない。",
|
||||
"source_baseline_sha256": "75e4bdbdeb379c9269553f0c776bdb9cc96e01f2d6aa5ca650d132c63a8aeb1a",
|
||||
"production_source_authority": {
|
||||
"path": "artifacts/original-completion-2026-10-02/p04-01-overdue-exit-source-adoption-r01/source-after.json",
|
||||
"bytes": 152598,
|
||||
"sha256": "df8328ea8b6a7bc400caad8a52f6ead710c01942a726e5a6b530b82411c55da5"
|
||||
},
|
||||
"canonical_parent": {
|
||||
"path": "artifacts/original-completion-2026-10-02/p05-02-long-ledger-progress-doc4-publication-r01/canonical_doc4_update.json",
|
||||
"bytes": 1414,
|
||||
"sha256": "e2c5fb66efc8eb3043e9355e9a512aa7bb33a2e8b1fcb10657bcb7496d766287"
|
||||
},
|
||||
"reused_inputs": [
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/asset_inventory_reaudit/facility_usage_slots.json",
|
||||
"bytes": 214179,
|
||||
"sha256": "56a031b6430aa9cb408f14b66efc5dd9a779841c0e7c19301945c49c12711491"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/asset_inventory_reaudit/character_usage_slots.json",
|
||||
"bytes": 37784,
|
||||
"sha256": "3bd305795c99ad4134bb059df29b394560014492d7d7a67706cb33f79afb1652"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/asset_inventory_reaudit/other_usage_slots.json",
|
||||
"bytes": 4376,
|
||||
"sha256": "768a440d11a23c366157300fc426de326e64b1dbce9f6cd6183b0ad73ab2bacf"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/asset_inventory_reaudit/inventory_summary.json",
|
||||
"bytes": 793,
|
||||
"sha256": "298b37e65c41febe8a2ccdea10bd105ab7a606904f06b16c1659cda6214859b9"
|
||||
}
|
||||
],
|
||||
"scope": "Required usage/variant-family enumeration only, not asset production or whole-atom/game acceptance",
|
||||
"classifications": {
|
||||
"placeholder_media": "Adopted or candidate existing media without final per-use quality acceptance",
|
||||
"code_drawn": "Actual procedural/vector/typed drawing; retained and scoped, not finished mandatory bitmap/character appearance",
|
||||
"finished_media": "Requires specific use/variant quality and rights acceptance; none promoted in this contract",
|
||||
"required_unproduced": "Mandatory missing content remains required; no substitution/pass"
|
||||
},
|
||||
"counts": {
|
||||
"original_facilities": 30,
|
||||
"facility_usage_slots": 360,
|
||||
"named_heroines": 7,
|
||||
"named_rivals": 3,
|
||||
"additional_rivals_open": true,
|
||||
"character_usage_groups": 176,
|
||||
"other_usage_groups": 76,
|
||||
"state_groups": 2,
|
||||
"existing_media_files": 296,
|
||||
"finished_assets_promoted": 0
|
||||
},
|
||||
"counts_are_not_file_or_completion_counts": true,
|
||||
"required_image_count": null,
|
||||
"required_frame_count": null,
|
||||
"required_voice_clip_count": null,
|
||||
"final_content_target_count": null,
|
||||
"pending": [
|
||||
"D08 exact chapters/routes/events/endings/content identities",
|
||||
"D09 final quality/number of files/frames/voice clips/creator/budget",
|
||||
"Additional rivals denoted 等 and other subcharacter identities",
|
||||
"Per-role/per-facility applicable final visible variants"
|
||||
],
|
||||
"acceptance_applicability": {
|
||||
"source_condition": "Original source anchors and preserved 30/7/named rival enumeration",
|
||||
"definition": "Usage conditions and classifications implemented in this contract",
|
||||
"runtime": "not_applicable: P22-01 specifies an inventory; gameplay connection is P25/P26 and no Runtime edits occur",
|
||||
"normal_ui": "not_applicable: this unit is required-asset enumeration; actual UI usage conditions are listed, visual quality remains separate",
|
||||
"save_migration": "not_applicable: inventory has no save schema or migration",
|
||||
"boundary_verification": "Static omission/duplicate/classification/unknown-count controls",
|
||||
"assets_platform": "Current paths/SHA/reference applicability; no final art or Windows claim",
|
||||
"evidence": "Pinned source/input/output/current-version and independent review required"
|
||||
},
|
||||
"whole_goal_accepted": false,
|
||||
"unit_accepted": false
|
||||
}
|
||||
+2074
File diff suppressed because it is too large
Load Diff
+32402
File diff suppressed because it is too large
Load Diff
+2473
File diff suppressed because it is too large
Load Diff
+42
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"character_usage_slots.json": {
|
||||
"path": "artifacts/original-completion-2026-10-02/p22-01-usage-contract-candidate-r02/character_usage_slots.json",
|
||||
"bytes": 232930,
|
||||
"sha256": "4c108db179c33f3e00771f5962628d0b342c4e34da3037c590426bc84524ad3f"
|
||||
},
|
||||
"contract.json": {
|
||||
"path": "artifacts/original-completion-2026-10-02/p22-01-usage-contract-candidate-r02/contract.json",
|
||||
"bytes": 4170,
|
||||
"sha256": "ab7995dcf09c9d4ec08b0cad82ff5e06d277836a1436c514bdee67cc9d6ed66c"
|
||||
},
|
||||
"current_media_inventory.json": {
|
||||
"path": "artifacts/original-completion-2026-10-02/p22-01-usage-contract-candidate-r02/current_media_inventory.json",
|
||||
"bytes": 81687,
|
||||
"sha256": "6a981ff9e0a936c643b877fa9b0c23fb4ab7cdca3f84c35504107702398d00ff"
|
||||
},
|
||||
"facility_usage_slots.json": {
|
||||
"path": "artifacts/original-completion-2026-10-02/p22-01-usage-contract-candidate-r02/facility_usage_slots.json",
|
||||
"bytes": 1361931,
|
||||
"sha256": "380cbd49cde77a665476e2dd636cc2853d261d5778c51897de7f376d7eda62be"
|
||||
},
|
||||
"other_usage_slots.json": {
|
||||
"path": "artifacts/original-completion-2026-10-02/p22-01-usage-contract-candidate-r02/other_usage_slots.json",
|
||||
"bytes": 95365,
|
||||
"sha256": "f90e66fe0034043ed936b30b5c2fab1d759c198b55c0408c3982e352ccb6dcb7"
|
||||
},
|
||||
"source_pins.json": {
|
||||
"path": "artifacts/original-completion-2026-10-02/p22-01-usage-contract-candidate-r02/source_pins.json",
|
||||
"bytes": 5497,
|
||||
"sha256": "71f8a2837a63173889a1269bfc98f5b9bcb2a10b240c7173b8a263477d8e78f5"
|
||||
},
|
||||
"state_usage_groups.json": {
|
||||
"path": "artifacts/original-completion-2026-10-02/p22-01-usage-contract-candidate-r02/state_usage_groups.json",
|
||||
"bytes": 4501,
|
||||
"sha256": "94a9f97942ab3458b8c93b7604557f6b277a3392837a85a142fc41157bb5edb8"
|
||||
},
|
||||
"validation.json": {
|
||||
"path": "artifacts/original-completion-2026-10-02/p22-01-usage-contract-candidate-r02/validation.json",
|
||||
"bytes": 584,
|
||||
"sha256": "b97bec43043c0f264b1169e5344f3f8ea4da3d893590764041f4ab7894a42da9"
|
||||
}
|
||||
}
|
||||
+137
@@ -0,0 +1,137 @@
|
||||
{
|
||||
"docs/traceability/original/BASELINE.txt": {
|
||||
"path": "docs/traceability/original/BASELINE.txt",
|
||||
"bytes": 23494,
|
||||
"sha256": "75e4bdbdeb379c9269553f0c776bdb9cc96e01f2d6aa5ca650d132c63a8aeb1a"
|
||||
},
|
||||
"scripts/ui/pixel_tower_art.gd": {
|
||||
"path": "scripts/ui/pixel_tower_art.gd",
|
||||
"bytes": 14969,
|
||||
"sha256": "71df9b8400cb883a5bb1c89729f80c77e734df503fc54154be3e486adb8391df"
|
||||
},
|
||||
"scripts/ui/standard_room_art.gd": {
|
||||
"path": "scripts/ui/standard_room_art.gd",
|
||||
"bytes": 2800,
|
||||
"sha256": "8f0f2af2a3903fc1debc760037dc8fab92e4fff1e49803fcb56a56ab1f04defa"
|
||||
},
|
||||
"scripts/ui/infirmary_room_art.gd": {
|
||||
"path": "scripts/ui/infirmary_room_art.gd",
|
||||
"bytes": 3100,
|
||||
"sha256": "f8333f7915fe453eaee6f00ff1b1539b2ae67fecd508566292bf9ea986531a75"
|
||||
},
|
||||
"assets/kenney/tiny_town/Tilemap/tilemap_packed.png": {
|
||||
"path": "assets/kenney/tiny_town/Tilemap/tilemap_packed.png",
|
||||
"bytes": 5042,
|
||||
"sha256": "3a54d99ecde790d4fdea207a3644cf130fc56fa838f1beb1507c185a95b8e902"
|
||||
},
|
||||
"assets/kenney/tiny_dungeon/Tilemap/tilemap_packed.png": {
|
||||
"path": "assets/kenney/tiny_dungeon/Tilemap/tilemap_packed.png",
|
||||
"bytes": 5294,
|
||||
"sha256": "d24e60a41e4ac7a745c0304dfde121143688557f40215f23221c29cfe683825f"
|
||||
},
|
||||
"scripts/ui/pixel_people.gd": {
|
||||
"path": "scripts/ui/pixel_people.gd",
|
||||
"bytes": 4270,
|
||||
"sha256": "a171703083aa2d00f8be2b63e1daef9c41717c8fe59d8056878bc4b7df1e0b0c"
|
||||
},
|
||||
"assets/themes/japanese_fantasy/world-front-v1.png": {
|
||||
"path": "assets/themes/japanese_fantasy/world-front-v1.png",
|
||||
"bytes": 2774704,
|
||||
"sha256": "02b52ea05bdb4bbe78b8c905374052505bb73411eb7f2b0578e9b1a82994cde5"
|
||||
},
|
||||
"scenes/main/world_preview.gd": {
|
||||
"path": "scenes/main/world_preview.gd",
|
||||
"bytes": 64597,
|
||||
"sha256": "3df29be32d3a016d8fb9dc1ee2bd32e2360ac8fad9810293f6be9b58d26046e0"
|
||||
},
|
||||
"assets/themes/japanese_fantasy/world-back-v1.png": {
|
||||
"path": "assets/themes/japanese_fantasy/world-back-v1.png",
|
||||
"bytes": 2616183,
|
||||
"sha256": "2b0dbf07c17e677ed023c56b1e90f013c40362f46c427950033868b042508c7c"
|
||||
},
|
||||
"assets/themes/japanese_fantasy/ui-skin-v1.png": {
|
||||
"path": "assets/themes/japanese_fantasy/ui-skin-v1.png",
|
||||
"bytes": 2492477,
|
||||
"sha256": "4b4906cc9c6ed3fdb5330bfc11177376e5fec10afa3f2dac9318dbaf71833ff2"
|
||||
},
|
||||
"assets/themes/japanese_fantasy/visual-theme-v1.tres": {
|
||||
"path": "assets/themes/japanese_fantasy/visual-theme-v1.tres",
|
||||
"bytes": 12404,
|
||||
"sha256": "42e968ba5e35c228d3ff372f92a8e249ec3a743045be0a3ec158556944c0bc18"
|
||||
},
|
||||
"scenes/main/main.gd": {
|
||||
"path": "scenes/main/main.gd",
|
||||
"bytes": 135550,
|
||||
"sha256": "a7ae44c680eb9b70a117ddc8c6cbf0ca290b8e8d485eac41b4122698fde2a620"
|
||||
},
|
||||
"scripts/ui/paired_bgm.gd": {
|
||||
"path": "scripts/ui/paired_bgm.gd",
|
||||
"bytes": 3826,
|
||||
"sha256": "a7fe9311f348975a380feced102702ad3ee91439b9511006f0ff6d29540f5836"
|
||||
},
|
||||
"assets/audio/bgm/tree_theme_front_candidate.wav": {
|
||||
"path": "assets/audio/bgm/tree_theme_front_candidate.wav",
|
||||
"bytes": 7526444,
|
||||
"sha256": "6df0a7af307327f703c9325f5ca2ac456888102d50ef1fa76bf4cdf19d2b86cb"
|
||||
},
|
||||
"assets/audio/bgm/tree_theme_back_candidate.wav": {
|
||||
"path": "assets/audio/bgm/tree_theme_back_candidate.wav",
|
||||
"bytes": 7526444,
|
||||
"sha256": "efe4cc1aa588661d73376720e4278427f7220ce93a5d446f198c5af607c141ca"
|
||||
},
|
||||
"assets/audio/ui/click_001.ogg": {
|
||||
"path": "assets/audio/ui/click_001.ogg",
|
||||
"bytes": 4876,
|
||||
"sha256": "ccfb7fa0cccdd9faec0eb16033c732b1e308d139d80f799161495d58f7adcdb9"
|
||||
},
|
||||
"assets/audio/ui/confirmation_001.ogg": {
|
||||
"path": "assets/audio/ui/confirmation_001.ogg",
|
||||
"bytes": 8968,
|
||||
"sha256": "063564703b6094d70718a3e787a55cc9141611e4ecd6b6637f8828f79b4a8c3a"
|
||||
},
|
||||
"assets/audio/ui/error_008.ogg": {
|
||||
"path": "assets/audio/ui/error_008.ogg",
|
||||
"bytes": 9215,
|
||||
"sha256": "eba17ecb2a426bfd4a8a6acff5f8a86202b6424a77af0fd842e37809a1ab6d81"
|
||||
},
|
||||
"assets/audio/ui/bong_001.ogg": {
|
||||
"path": "assets/audio/ui/bong_001.ogg",
|
||||
"bytes": 4848,
|
||||
"sha256": "d21d0f0b782445db579d11e2506b24cd1ac9d664ee33aeaf807761aa7b6fd710"
|
||||
},
|
||||
"assets/audio/ui/source_manifest.json": {
|
||||
"path": "assets/audio/ui/source_manifest.json",
|
||||
"bytes": 1330,
|
||||
"sha256": "f981c2ce12ed364010217dee996908f037d2abfcc3b21b8cf501dd591f7744c9"
|
||||
},
|
||||
"assets/audio/ui/License.txt": {
|
||||
"path": "assets/audio/ui/License.txt",
|
||||
"bytes": 574,
|
||||
"sha256": "f7966c773bbed0eca6a9c75081c44a178b38eae112724dbb5fdfbd4192d118a9"
|
||||
},
|
||||
"assets/kenney/sources.json": {
|
||||
"path": "assets/kenney/sources.json",
|
||||
"bytes": 724,
|
||||
"sha256": "708f5980d0e740f6a7bf1e7fbd0d8964292729309c1a3eeafc367fb94f119b76"
|
||||
},
|
||||
"assets/kenney/tiny_town/License.txt": {
|
||||
"path": "assets/kenney/tiny_town/License.txt",
|
||||
"bytes": 567,
|
||||
"sha256": "c483c167cc3bdfe17c15f957ff847d409f64d81b410b28783636cf3b2b7814c5"
|
||||
},
|
||||
"assets/kenney/tiny_dungeon/License.txt": {
|
||||
"path": "assets/kenney/tiny_dungeon/License.txt",
|
||||
"bytes": 570,
|
||||
"sha256": "9f574a2f1f636a3db8a0665ba90212f34e2b5e61ecb533d77c05237766374111"
|
||||
},
|
||||
"assets/themes/japanese_fantasy/README.md": {
|
||||
"path": "assets/themes/japanese_fantasy/README.md",
|
||||
"bytes": 5544,
|
||||
"sha256": "edc674a212eeb0cf5a4e40e73e857e8303bf08d1199e96aa8071cba588f33f6d"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/decisions.json": {
|
||||
"path": "docs/plans/original-completion-2026-10-02/decisions.json",
|
||||
"bytes": 6150,
|
||||
"sha256": "ad0673051b0fa601e525f05128e0b11e2dddd9d4bae6a3e0170bbf47da35efe9"
|
||||
}
|
||||
}
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
[
|
||||
{
|
||||
"group_id": "facility.visual_states",
|
||||
"source_anchors": [
|
||||
{
|
||||
"path": "docs/traceability/original/BASELINE.txt",
|
||||
"line": 235,
|
||||
"text": " * **立ち絵:** 破損、汚れ、刻印差分。純愛(ソフトフォーカス)とNTR/堕落(強い影・レイプ目)の明確な描き分け。",
|
||||
"sha256": "75e4bdbdeb379c9269553f0c776bdb9cc96e01f2d6aa5ca650d132c63a8aeb1a"
|
||||
},
|
||||
{
|
||||
"path": "docs/traceability/original/BASELINE.txt",
|
||||
"line": 248,
|
||||
"text": " * 施設Lv1〜3の外観・内装(表裏両方)。背景遠景。",
|
||||
"sha256": "75e4bdbdeb379c9269553f0c776bdb9cc96e01f2d6aa5ca650d132c63a8aeb1a"
|
||||
}
|
||||
],
|
||||
"usage_condition": "Facility world state when applicable: constructing/completed, operating/closed/suspended, unpowered, damaged, dirty; current implementation cues are not mandatory per-facility unique image counts",
|
||||
"required_file_count": null,
|
||||
"required_frame_count": null,
|
||||
"representations": [
|
||||
{
|
||||
"path": "scripts/ui/pixel_tower_art.gd",
|
||||
"bytes": 14969,
|
||||
"sha256": "71df9b8400cb883a5bb1c89729f80c77e734df503fc54154be3e486adb8391df",
|
||||
"representation": "code_drawn",
|
||||
"applicability": "Current generic room/fixture drawing; code token or fallback does not prove every required level/layer/exterior/interior",
|
||||
"final_quality_accepted": false
|
||||
},
|
||||
{
|
||||
"path": "scripts/ui/standard_room_art.gd",
|
||||
"bytes": 2800,
|
||||
"sha256": "8f0f2af2a3903fc1debc760037dc8fab92e4fff1e49803fcb56a56ab1f04defa",
|
||||
"representation": "code_drawn",
|
||||
"applicability": "Dedicated standard_room Lv1-3 decoration only; keep limited existing acceptance",
|
||||
"final_quality_accepted": false
|
||||
},
|
||||
{
|
||||
"path": "scripts/ui/infirmary_room_art.gd",
|
||||
"bytes": 3100,
|
||||
"sha256": "f8333f7915fe453eaee6f00ff1b1539b2ae67fecd508566292bf9ea986531a75",
|
||||
"representation": "code_drawn",
|
||||
"applicability": "Dedicated infirmary decoration only; keep limited existing acceptance",
|
||||
"final_quality_accepted": false
|
||||
},
|
||||
{
|
||||
"path": "assets/kenney/tiny_town/Tilemap/tilemap_packed.png",
|
||||
"bytes": 5042,
|
||||
"sha256": "3a54d99ecde790d4fdea207a3644cf130fc56fa838f1beb1507c185a95b8e902",
|
||||
"representation": "placeholder_media",
|
||||
"applicability": "Shared generic atlas, not 30 facility-specific finished appearances",
|
||||
"final_quality_accepted": false
|
||||
},
|
||||
{
|
||||
"path": "assets/kenney/tiny_dungeon/Tilemap/tilemap_packed.png",
|
||||
"bytes": 5294,
|
||||
"sha256": "d24e60a41e4ac7a745c0304dfde121143688557f40215f23221c29cfe683825f",
|
||||
"representation": "placeholder_media",
|
||||
"applicability": "Shared generic atlas, not facility-specific acceptance",
|
||||
"final_quality_accepted": false
|
||||
}
|
||||
],
|
||||
"finished_asset": null,
|
||||
"scope_note": "No new state transitions/policies. Existing 3-state contract and approved A04/A05 apply; exact visible variants per facility require P22-02/P25 production acceptance."
|
||||
},
|
||||
{
|
||||
"group_id": "unit.visual_states",
|
||||
"source_anchors": [
|
||||
{
|
||||
"path": "docs/traceability/original/BASELINE.txt",
|
||||
"line": 245,
|
||||
"text": " * ユニットSDモーション(待機・歩行・作業・気絶・各種Hアニメループ)。",
|
||||
"sha256": "75e4bdbdeb379c9269553f0c776bdb9cc96e01f2d6aa5ca650d132c63a8aeb1a"
|
||||
},
|
||||
{
|
||||
"path": "docs/traceability/original/BASELINE.txt",
|
||||
"line": 234,
|
||||
"text": " * **ドット絵:** 呼吸、胸の揺れ、職種別歩行、生々しいHアニメーションループ。",
|
||||
"sha256": "75e4bdbdeb379c9269553f0c776bdb9cc96e01f2d6aa5ca650d132c63a8aeb1a"
|
||||
}
|
||||
],
|
||||
"usage_condition": "idle/walk/work/collapse + role task/carry/rescue/clean/eat/rest/sleep as actual state; generic code draw does not complete per-role/identity assets",
|
||||
"required_file_count": null,
|
||||
"required_frame_count": null,
|
||||
"representations": [
|
||||
{
|
||||
"path": "scripts/ui/pixel_people.gd",
|
||||
"bytes": 4270,
|
||||
"sha256": "a171703083aa2d00f8be2b63e1daef9c41717c8fe59d8056878bc4b7df1e0b0c",
|
||||
"representation": "code_drawn",
|
||||
"applicability": "Generic pose(mode,frame,variant,staff); no character ID and no heroine/rival-specific finished appearance",
|
||||
"final_quality_accepted": false
|
||||
}
|
||||
],
|
||||
"finished_asset": null
|
||||
}
|
||||
]
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"passed": true,
|
||||
"checks": {
|
||||
"all30_names_from_original_mapping": true,
|
||||
"every_facility_exact_12_uses": true,
|
||||
"exact_3levels_2contexts_2surfaces": true,
|
||||
"unique_ids": true,
|
||||
"7_heroines": true,
|
||||
"3_named_rivals_and_open_remainder": true,
|
||||
"all_usage_conditions_and_classifications": true,
|
||||
"all_have_original_anchors": true,
|
||||
"no_asset_promotion": true,
|
||||
"file_frame_voice_counts_unset": true,
|
||||
"current_pins_exact": true,
|
||||
"production1299_unchanged": true
|
||||
},
|
||||
"engine_runs": 0,
|
||||
"finished_assets_added": 0,
|
||||
"unit_accepted": false
|
||||
}
|
||||
+306
-11
@@ -4,6 +4,7 @@ import argparse
|
||||
from functools import lru_cache
|
||||
import hashlib
|
||||
import json
|
||||
import re
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
import sys
|
||||
@@ -26,6 +27,105 @@ PEOPLE = [('anri', 'アンリ'), ('fine', 'フィーネ'), ('tomari', 'トマリ
|
||||
('amelia', 'アメリア'), ('liz', 'リズ'), ('mimi', 'ミミ'), ('satsuki', 'サツキ')]
|
||||
ROUTES = {'love': '純愛', 'ntr': 'NTR', 'corruption': '堕落'}
|
||||
STATUSES = {'produced', 'placeholder', 'code-drawing', 'partial', 'missing', 'undefined'}
|
||||
AR_PATH = PLAN + 'atomic_requirements.json'
|
||||
CONTENT_WORDS = re.compile(r'章|ストーリー|シナリオ|ルート|エンド|図鑑|台詞|会話|立ち絵|ボイス|音声|CG|スチル|モーション|アニメ|差分|イベント|覗|記録係|脅迫|介入|カメラ|アングル|スクリーンショット|代物弁済|破産|履歴|妊娠|刻印|衣装|キャラクター|ヒロイン')
|
||||
CONTENT_DOMAINS = ('AR.heroine.', 'AR.asset.', 'AR.art.', 'AR.narrative.',
|
||||
'AR.observation.', 'AR.route_action.', 'AR.progression.')
|
||||
APPROVAL_COMMIT = 'a13f7c0b791dd385ff8113c3d321c0e3fe7d7c94'
|
||||
APPROVAL_PATH = PLAN + 'execution/p04-01-owner-approval-20261018/D05_ACTUAL_HUMAN_APPROVAL.json'
|
||||
APPROVAL_HASH = 'cd365ded1b777a0327d090709f0a4161f5005562819183455d9f2e106fba3e96'
|
||||
|
||||
# Closed attribution policy: membership means only the named backend fragment,
|
||||
# never the whole AR, its content, or other ARs sharing its source line.
|
||||
SUPPORT_POLICY = {
|
||||
'relationship-container': {
|
||||
'ars': frozenset({'AR.relationship.three_emotions',
|
||||
'AR.relationship.affection_shield_max'} |
|
||||
{'AR.heroine.' + p + '.route.' + r for p, _ in PEOPLE for r in ROUTES}),
|
||||
'sources': [('scripts/relationship/original_relationship_state.gd', (6, 6)),
|
||||
('scripts/relationship/original_relationship_state.gd', (21, 25)),
|
||||
('scripts/relationship/original_relationship_state.gd', (26, 26)),
|
||||
('scripts/relationship/relationship_service.gd', (38, 58)),
|
||||
('scripts/relationship/relationship_service.gd', (315, 355))],
|
||||
'scope': 'affection/lust/netorare fields and finite-number validation; shield_max==affection and 0<=shield_current<=shield_max invariant; subject_id-keyed original record registration; separate generic route_lock/route_id record only, with no original route IDs, natural reach or content'},
|
||||
'peeping-container': {
|
||||
'ars': frozenset({'AR.observation.recorder', 'AR.underground.observation'}),
|
||||
'sources': [('scripts/special/peeping_room_service.gd', (127, 138)),
|
||||
('scripts/special/peeping_room_service.gd', (140, 142)),
|
||||
('scripts/special/peeping_room_service.gd', (155, 164)),
|
||||
('autoload/simulation_runtime.gd', (10863, 10864))],
|
||||
'scope': 'observation state half only: stopped/link_state/target and precondition precedence; recorder ledger fields evidence_id/room_id/target_instance_id/source_event_key/minute with fixture-only writes; production record_evidence returns RECORDER_ELIGIBILITY_PENDING_D04_D08_P16, placement returns BUILD_DEFINITION_PENDING_D04; no normal entry, recorder placement, view, camera UI, screenshot, route progress, dedicated mode, intervention, transaction or authored content'},
|
||||
'night-input': {
|
||||
'ars': frozenset({'AR.guest.need_sexual_night_peak'}),
|
||||
'sources': [('scripts/guest/guest_service.gd', (355, 359))],
|
||||
'scope': 'adult intimacy need selects intimacy_night or intimacy_day input key from is_night only; no peak values, NTR events or event production'},
|
||||
'bankruptcy-bookkeeping': {
|
||||
'ars': frozenset({'AR.progression.three_deficits_gameover'}),
|
||||
'sources': [('scripts/operations/operations_coordinator.gd', (1190, 1194))],
|
||||
'scope': 'consecutive negative-net-profit counter reaches config bankruptcy_close_count and selects TERMINAL_BANKRUPT only; configured value 3 is not established; no authored game-over ending'},
|
||||
}
|
||||
|
||||
# Independent exclusions from the direct source-read map. Never derive these
|
||||
# from SUPPORT_POLICY: a policy re-add must itself be rejected.
|
||||
EXCLUDED_ATTRIBUTIONS = {
|
||||
'AR.ui.observation_camera_entry': 'camera icon and dedicated observation screen transition',
|
||||
'AR.ui.observation_capture': 'screenshot evidence collection',
|
||||
'AR.underground.blackmail': 'blackmail transaction state and income',
|
||||
'AR.route_action.observation_progress': 'route progress from observation room',
|
||||
'AR.schedule.B-14.3.observation': 'dedicated observation mode achievement',
|
||||
'AR.events.ntr_night_peak': 'NTR event night peak',
|
||||
}
|
||||
|
||||
|
||||
def support_family(row):
|
||||
# Content summaries cannot inherit support from neighbouring schedule ARs.
|
||||
return (row['kind'] == 'route' or row['id'].startswith('original.line.') or
|
||||
row['id'] in {'clause.route_rules', 'clause.production', 'clause.scope'})
|
||||
|
||||
|
||||
def support_pins(root, kind):
|
||||
return [excerpt(root, path, *span) if span else source(root, path)
|
||||
for path, span in SUPPORT_POLICY[kind]['sources']]
|
||||
|
||||
|
||||
def authorities(root):
|
||||
"""Selection reads authority text, never generated rows or old audit statuses.
|
||||
|
||||
All non-heading content-bearing lines plus whole narrative/character/art
|
||||
sections are conservative audit scope. Every AR receives a disposition;
|
||||
unrelated mechanics are explicitly outside this documentation unit.
|
||||
"""
|
||||
require(sha((root / BASELINE).read_bytes()) == BASE_HASH, 'authority BASELINE hash')
|
||||
require((root / AR_PATH).read_bytes() == blob(root, BASE, AR_PATH), 'authority AR hash')
|
||||
lines = (root / BASELINE).read_text().splitlines()
|
||||
required = set()
|
||||
section_content = False
|
||||
for n, text in enumerate(lines, 1):
|
||||
if text.startswith('# '):
|
||||
section_content = bool(re.search(r'世界観|ユニークキャラクター|恋愛|デザイン|アセット|ロードマップ', text))
|
||||
if text.strip() and not text.startswith('#') and (section_content or CONTENT_WORDS.search(text)):
|
||||
required.add(n)
|
||||
records = decode((root / AR_PATH).read_bytes())['requirements']
|
||||
relevant = {a['id'] for a in records if atomic_lines(a) and (a['id'].startswith(CONTENT_DOMAINS)
|
||||
or CONTENT_WORDS.search(a['condition']) or any(
|
||||
s['path'] == BASELINE and required.intersection(s['lines'])
|
||||
for s in a['source_anchors']))}
|
||||
required.update(n for a in records if a['id'] in relevant for n in atomic_lines(a))
|
||||
packages = decode(blob(root, BASE, PLAN + 'work_packages.json'))
|
||||
return lines, required, {a['id']: a for a in records}, relevant, {p['id']: p for p in packages}
|
||||
|
||||
|
||||
def atomic_lines(record):
|
||||
return {n for s in record['source_anchors'] if s['path'] == BASELINE for n in s['lines']}
|
||||
|
||||
|
||||
def owning_units(record, packages):
|
||||
# Preserve the actual definitions; do not invent a uniquely assigned unit
|
||||
# where the original package has several remaining deliverables.
|
||||
return [{'package': p, 'primary': p == record['primary_package'],
|
||||
'deliverables': [{k: u[k] for k in ('id', 'title', 'work', 'acceptance')}
|
||||
for u in packages[p]['remaining_deliverables']]}
|
||||
for p in dict.fromkeys([record['primary_package']] + record['work_packages'])]
|
||||
|
||||
|
||||
def require(ok, message):
|
||||
@@ -175,19 +275,21 @@ def expected(root):
|
||||
'evidence': evidence or [], 'missing': 'original production content missing or undefined',
|
||||
'reason': reason, 'owner': owner})
|
||||
add('chapters.all', 'chapter', [(8,), (26,), (27,30), (256,)],
|
||||
'メインストーリー全章。原本の仕様書章番号をシナリオ章と混同しない。章名・章数・順序・場面一覧は未定義。', 'D08')
|
||||
'メインストーリー全章。原本の仕様書章番号をシナリオ章と混同しない。章名・章数・順序・場面一覧は未定義。', 'D08',
|
||||
reason='欠損: 制作内容は欠損。undefinedは章の範囲・数量のみを指す。章名・順序・場面一覧は原本未定義、D08未決。')
|
||||
add('endings.all', 'ending', [(9,), (135,)],
|
||||
'全エンドを要求。個別エンドID・本数・到達条件は未定義。', 'D08')
|
||||
'全エンドを要求。個別エンドID・本数・到達条件は未定義。', 'D08', 'missing')
|
||||
add('endings.bad', 'ending', [(135,)],
|
||||
'特定バッドエンド確定時の敵/背景オブジェクト化。カテゴリのみ原本定義、対象人物/場面/数は未定義。', 'P26-02')
|
||||
'特定バッドエンド確定時の敵/背景オブジェクト化。カテゴリのみ原本定義、対象人物/場面/数は未定義。', 'P26-02', 'missing')
|
||||
add('endings.game_over', 'ending', [(72,)],
|
||||
'赤字決算3回連続のゲームオーバー。物語エンド数への換算不可。', 'P26-02', 'missing',
|
||||
[source(root, 'scripts/economy/economy_service.gd')],
|
||||
[],
|
||||
'欠損: 経済処理の既存コードは存在するが終点のシナリオ・画像・音声・全受入を証明しない。')
|
||||
add('encyclopedia.all', 'encyclopedia', [(9,)],
|
||||
'図鑑コンプ。対象集合・項目ID・解放条件・必要項目数は未定義。', 'D08')
|
||||
'図鑑コンプ。対象集合・項目ID・解放条件・必要項目数は未定義。', 'D08', 'missing')
|
||||
add('dialogue.all', 'dialogue', [(155,), (230,), (256,)],
|
||||
'会話/イベント用台詞とシナリオ。本文・話者・行数・場面単位は未定義。UI通知文を完成脚本に数えない。', 'P26-02')
|
||||
'会話/イベント用台詞とシナリオ。本文・話者・行数・場面単位は未定義。UI通知文を完成脚本に数えない。', 'P26-02',
|
||||
reason='欠損: 制作内容は欠損。undefinedは台詞の範囲・数量のみを指す。本文・話者・場面単位は原本未定義、D08未決。')
|
||||
add('portraits.all', 'portrait', [(160,161), (230,), (235,), (242,)],
|
||||
'メイン/サブ人物の表情・衣装・破損・汚れ・刻印・妊婦外見・ルート別描き分け。差分枚数未定義。', 'P26-03', 'missing')
|
||||
add('voice.all', 'voice', [(252,), (257,)],
|
||||
@@ -255,8 +357,84 @@ def expected(root):
|
||||
current_media = [dict(source(root, m['path']), historical_inventory=m) for m in media]
|
||||
pins = decode((root / OUT / 'FROZEN_GAME_INPUT_PINS.json').read_bytes())
|
||||
available_assets = {p: v for p, v in pins['source_files'].items() if p.startswith('assets/')}
|
||||
original_lines, required_lines, atoms, relevant, packages = authorities(root)
|
||||
# A separate row for every selected original clause prevents a broad category
|
||||
# citation from concealing an omitted event/control requirement.
|
||||
for n in sorted(required_lines):
|
||||
add('original.line.' + str(n), 'original-clause', [(n,)],
|
||||
'原本の必要条件。個別の脚本/台詞/CG/音声/場面数は定義しない。',
|
||||
'undefined', 'missing', reason='原本条件を保存。専用制作内容は欠損、場面ID・数量は未定義。下記AR所有先で残作業を追跡。')
|
||||
relationship_paths = ['scripts/relationship/original_relationship_state.gd',
|
||||
'scripts/relationship/relationship_service.gd']
|
||||
# Direct source inspection is limited to explicit state/container support.
|
||||
# These excerpts never assert authored scenes, usable observation controls,
|
||||
# or a naturally reachable character route.
|
||||
require('class_name OriginalRelationshipState' in read_source(root, relationship_paths[0]).decode(),
|
||||
'relationship class evidence')
|
||||
peep_pin = excerpt(root, 'scripts/special/peeping_room_service.gd', 127, 162)
|
||||
peep_runtime_pin = excerpt(root, 'autoload/simulation_runtime.gd', 10860, 10880)
|
||||
require('RECORDER_ELIGIBILITY_PENDING_D04_D08_P16' in peep_pin['text'] and
|
||||
'BUILD_DEFINITION_PENDING_D04' in peep_runtime_pin['text'], 'peeping backend boundary')
|
||||
dispositions = {}
|
||||
for row in rows:
|
||||
cited = {n for c in row['citations'] for n in range(c['lines'][0], c['lines'][1] + 1)}
|
||||
matches = sorted(a for a in relevant if cited.intersection(atomic_lines(atoms[a])))
|
||||
if row['kind'] == 'route':
|
||||
matches = ['AR.heroine.' + row['identity']['character_id'] + '.route.' + row['identity']['route_id']]
|
||||
row['atomic_requirement_ids'] = matches
|
||||
owners = sorted({atoms[a]['primary_package'] for a in matches})
|
||||
row['owner'] = '/'.join(owners) if owners else 'undefined'
|
||||
row['owner_deliverable_refs'] = owners
|
||||
row['owner_assignment'] = 'original package deliverables; specific production assignee undefined'
|
||||
row['content_status'] = row['status']
|
||||
row['support_scope'] = 'no dedicated support established'
|
||||
row['scoped_support'] = []
|
||||
for kind, policy in SUPPORT_POLICY.items():
|
||||
supported = sorted(set(matches) & policy['ars']) if support_family(row) else []
|
||||
if supported:
|
||||
row['scoped_support'].append({'kind': kind, 'atomic_requirement_ids': supported,
|
||||
'scope': policy['scope'], 'content_status': 'missing'})
|
||||
row['evidence'] += support_pins(root, kind)
|
||||
supported_ids = {a for claim in row['scoped_support'] for a in claim['atomic_requirement_ids']}
|
||||
row['unsupported_atomic_requirement_ids'] = sorted(set(matches) - supported_ids)
|
||||
excluded = sorted(set(matches) & EXCLUDED_ATTRIBUTIONS.keys())
|
||||
if excluded:
|
||||
row['reason'] += ' ' + '; '.join(a + ': uncredited precursor, not required behaviour (' +
|
||||
EXCLUDED_ATTRIBUTIONS[a] + ')' for a in excluded) + '。関連基盤コードは存在するが当該ARの証拠には帰属させない。'
|
||||
if row['scoped_support']:
|
||||
row['status'] = 'partial'
|
||||
row['support_scope'] = '; '.join(c['scope'] for c in row['scoped_support'])
|
||||
row['reason'] += ' scoped_supportに列挙したARの基盤断片のみpartial。他のARは未支援、全制作内容は欠損。'
|
||||
if row['id'].startswith('clause.'):
|
||||
row['reason'] += ' 所有先は引用ARのprimary_packageと原P単位定義。包括P26-03への割当はしない。'
|
||||
for identity, atom in atoms.items():
|
||||
linked = [r['id'] for r in rows if identity in r['atomic_requirement_ids']]
|
||||
dispositions[identity] = {
|
||||
'record': {k: atom[k] for k in ('id', 'condition', 'source_anchors',
|
||||
'source_sha256', 'primary_package', 'work_packages')},
|
||||
'rows': linked,
|
||||
'disposition': 'covered-by-row' if identity in relevant else 'out-of-scope-with-reason',
|
||||
'reason': ('原本条件・欠損は各行に記録。ARの旧監査合否は転記しない。'
|
||||
if identity in relevant else 'L226カットイン警告・決闘/防衛演出はP24 UIの所管。制作/受入済みを意味しない。'
|
||||
if identity in {'AR.ui.cut_duel', 'AR.ui.cut_defense'} else
|
||||
'原本内容行に結合しない追加施設契約/採用・財布条件、または内容語彙/対象節/内容ARドメインに該当しない独立メカニクス。製品受入は当該原P単位の責任。'),
|
||||
'owning_deliverables': owning_units(atom, packages)}
|
||||
approval_raw = blob(root, APPROVAL_COMMIT, APPROVAL_PATH)
|
||||
require(sha(approval_raw) == APPROVAL_HASH, 'published D05 approval')
|
||||
approval = {'commit': APPROVAL_COMMIT, 'path': APPROVAL_PATH,
|
||||
'sha256': APPROVAL_HASH, 'record': decode(approval_raw),
|
||||
'scope': 'actual approval received; P04 product adoption remains outside P26'}
|
||||
return {'task_id': 'P26-01-LEDGER', 'schema_version': 1, 'source_anchor': ANCHOR,
|
||||
'definition_base': BASE, 'rows': rows, 'usage_snapshots': usage_snapshots,
|
||||
'coverage_policy': {'line_selector': CONTENT_WORDS.pattern,
|
||||
'whole_sections': '世界観|ユニークキャラクター|恋愛|デザイン|アセット|ロードマップ',
|
||||
'ar_domains': list(CONTENT_DOMAINS), 'selected_original_lines': sorted(required_lines),
|
||||
'relevant_ar_ids': sorted(relevant)},
|
||||
'atomic_authority': source(root, AR_PATH), 'atomic_dispositions': dispositions,
|
||||
'owning_package_definitions': {p: {'title': v['title'],
|
||||
'remaining_deliverables': [{k: u[k] for k in ('id', 'title', 'work', 'acceptance')}
|
||||
for u in v['remaining_deliverables']]} for p, v in packages.items()},
|
||||
'current_D05_approval': approval,
|
||||
'published_material': {'anchor': PUBLISHED, 'manifest_sha256': MANIFEST_HASH,
|
||||
'manifest_path': ARCHIVE + 'ROOT_MATERIAL_PRESERVATION_MANIFEST.json'},
|
||||
'references': references, 'P22_03_authority': 'draft/unaccepted reference only',
|
||||
@@ -264,7 +442,7 @@ def expected(root):
|
||||
'support_interpretation': 'Explicit state/identity/container support only; generic pose has no original character-specific appearance. No finished chapter/dialogue/portrait/voice/encyclopedia inferred.',
|
||||
'current_media_reaudit': current_media,
|
||||
'available_asset_source_set': available_assets,
|
||||
'pending': {'D05': 'unresolved existing questions; existing approvals preserved',
|
||||
'pending': {'D05': 'Historical register only: unresolved as of audit anchor f4f85bc54c39361f9efcd16f67a17835559ca70c and base 379a1ba8fd25b5ad24226178a2492f91761dc31d. Current actual approval is separately pinned; P04 adoption pending outside P26.',
|
||||
'D08': 'unresolved', 'D09': 'unresolved'},
|
||||
'accounting': {'packages': 30, 'units': 88, 'completed': 15, 'credit': 0,
|
||||
'partial_credit': False, 'whole_unit_accepted': False},
|
||||
@@ -273,7 +451,118 @@ def expected(root):
|
||||
'reason': 'Runner must independently establish exact S/C applicability; no native result claimed here.'}}
|
||||
|
||||
|
||||
def verify(candidate, canonical):
|
||||
def verify_authority(candidate, root):
|
||||
"""Non-canonical coverage/ownership/citation checks, callable on their own."""
|
||||
for policy in SUPPORT_POLICY.values():
|
||||
require(not (set(policy['ars']) & EXCLUDED_ATTRIBUTIONS.keys()),
|
||||
'excluded attribution in SUPPORT_POLICY')
|
||||
lines, required, atoms, relevant, packages = authorities(root)
|
||||
seen_lines, seen_atoms = set(), set()
|
||||
row_ids = {r['id'] for r in candidate['rows']}
|
||||
for row in candidate['rows']:
|
||||
require(set(row) == {'id', 'kind', 'identity', 'citations', 'required_condition',
|
||||
'status', 'required_count', 'completed_count', 'evidence', 'missing', 'reason',
|
||||
'owner', 'atomic_requirement_ids', 'owner_deliverable_refs', 'owner_assignment',
|
||||
'content_status', 'support_scope', 'scoped_support',
|
||||
'unsupported_atomic_requirement_ids'}, 'closed row schema')
|
||||
require(row['status'] in STATUSES, 'invalid row status')
|
||||
require(row['required_count'] is None and row['completed_count'] is None, 'invented quantity')
|
||||
require(type(row['atomic_requirement_ids']) is list, 'AR ID list')
|
||||
ids = row['atomic_requirement_ids']
|
||||
require(set(ids) <= relevant, 'unknown or unrelated AR ID')
|
||||
owners = sorted({atoms[a]['primary_package'] for a in ids})
|
||||
require(row['owner'] == ('/'.join(owners) if owners else 'undefined') and
|
||||
row['owner_deliverable_refs'] == owners, 'AR owner mismatch')
|
||||
cited = set()
|
||||
for c in row['citations']:
|
||||
lo, hi = c['lines']
|
||||
require(type(lo) is int and type(hi) is int and 1 <= lo <= hi <= len(lines), 'citation lines')
|
||||
require(c['path'] == BASELINE and c['sha256'] == BASE_HASH and
|
||||
c['text'] == '\n'.join(lines[lo-1:hi]), 'original citation integrity')
|
||||
cited.update(range(lo, hi + 1))
|
||||
require(all(cited.intersection(atomic_lines(atoms[a])) for a in ids), 'AR citation correspondence')
|
||||
seen_lines.update(cited)
|
||||
seen_atoms.update(ids)
|
||||
require(row['content_status'] in STATUSES and row['content_status'] != 'produced', 'unsupported content production')
|
||||
require(row['status'] != 'produced', 'partial support falsely produced')
|
||||
# Inspect submitted claims and pins directly, without expected() or a
|
||||
# generated row. The policy is a normative compatibility table, not a
|
||||
# keyword classifier. A valid hash alone cannot establish relevance.
|
||||
claims = row['scoped_support']
|
||||
require(type(claims) is list, 'support claims type')
|
||||
claimed_ids, kinds, allowed_pins = set(), set(), []
|
||||
for claim in claims:
|
||||
require(set(claim) == {'kind', 'atomic_requirement_ids', 'scope', 'content_status'},
|
||||
'closed support claim')
|
||||
kind = claim['kind']
|
||||
require(kind in SUPPORT_POLICY and kind not in kinds, 'unknown/duplicate support kind')
|
||||
policy = SUPPORT_POLICY[kind]
|
||||
require(support_family(row), 'support incompatible with requirement family')
|
||||
targets = claim['atomic_requirement_ids']
|
||||
require(not (set(targets) & EXCLUDED_ATTRIBUTIONS.keys()),
|
||||
'excluded attribution in row claim')
|
||||
require(type(targets) is list and targets and len(targets) == len(set(targets)) and
|
||||
set(targets) <= set(ids) & policy['ars'], 'support incompatible with AR')
|
||||
require(claim['scope'] == policy['scope'] and claim['content_status'] == 'missing',
|
||||
'support scope/content mismatch')
|
||||
kinds.add(kind)
|
||||
claimed_ids.update(targets)
|
||||
for path, span in policy['sources']:
|
||||
pin = source(root, path)
|
||||
if span:
|
||||
pin.update(lines=list(span), text='\n'.join(
|
||||
read_source(root, path).decode().splitlines()[span[0]-1:span[1]]))
|
||||
allowed_pins.append(pin)
|
||||
require(row['unsupported_atomic_requirement_ids'] == sorted(set(ids) - claimed_ids),
|
||||
'unsupported AR partition')
|
||||
require((row['status'] == 'partial') == bool(claims),
|
||||
'route support/content distinction' if row['kind'] == 'route' else 'unqualified partial support')
|
||||
if claims:
|
||||
require(row['support_scope'] == '; '.join(c['scope'] for c in claims) and
|
||||
row['content_status'] == 'missing', 'support summary/content mismatch')
|
||||
else:
|
||||
require(row['support_scope'] == 'no dedicated support established', 'unsupported scope text')
|
||||
if not row['id'].startswith('usage.'):
|
||||
if row['kind'] == 'route':
|
||||
allowed_pins.insert(0, dict(source(root, P19), cell=[
|
||||
row['identity']['character_id'], row['identity']['route_id']]))
|
||||
require(encoded(row['evidence']) == encoded(allowed_pins), 'unrelated or unscoped support evidence')
|
||||
else:
|
||||
require(not claims, 'usage cannot inherit backend support')
|
||||
if row['kind'] in {'voice', 'ending', 'encyclopedia'}:
|
||||
require(row['status'] == row['content_status'] == 'missing' and not row['evidence'],
|
||||
'unsupported content family')
|
||||
for pin in row['evidence']:
|
||||
require(encoded({k: pin[k] for k in ('path', 'sha256', 'bytes', 'anchor', 'anchor_path')}) ==
|
||||
encoded(source(root, pin['path'])), 'row evidence integrity')
|
||||
if row['id'].startswith('usage.'):
|
||||
reps = row['evidence']
|
||||
status = ('code-drawing' if all(p['historical_inventory']['representation'] == 'code_drawn'
|
||||
for p in reps) else 'placeholder') if reps else 'missing'
|
||||
require(row['status'] == status and row['content_status'] == status, 'usage representation status')
|
||||
if row['kind'] == 'route':
|
||||
require(row['status'] == 'partial' and row['content_status'] == 'missing', 'route support/content distinction')
|
||||
identity = row['identity']
|
||||
require((identity['character_id'], identity['original_name']) in PEOPLE and
|
||||
ROUTES.get(identity['route_id']) == identity['route_name'], 'original route identity')
|
||||
require(ids == ['AR.heroine.' + identity['character_id'] + '.route.' + identity['route_id']], 'route AR identity')
|
||||
require(required <= seen_lines, 'independent original line coverage')
|
||||
require(relevant <= seen_atoms, 'independent AR coverage')
|
||||
require(set(candidate['atomic_dispositions']) == set(atoms), 'AR disposition set')
|
||||
for identity, atom in atoms.items():
|
||||
entry = candidate['atomic_dispositions'][identity]
|
||||
require(entry['record'] == {k: atom[k] for k in entry['record']} and
|
||||
set(entry['record']) == {'id', 'condition', 'source_anchors', 'source_sha256', 'primary_package', 'work_packages'},
|
||||
'stale AR record')
|
||||
require(entry['owning_deliverables'] == owning_units(atom, packages), 'AR owning deliverables')
|
||||
require(entry['reason'] and entry.get('disposition') == (
|
||||
'covered-by-row' if identity in relevant else 'out-of-scope-with-reason'), 'missing AR disposition')
|
||||
require(set(entry['rows']) <= row_ids and set(entry['rows']) == {
|
||||
r['id'] for r in candidate['rows'] if identity in r['atomic_requirement_ids']}, 'AR row linkage')
|
||||
require(identity not in relevant or entry['rows'], 'AR without content row')
|
||||
|
||||
|
||||
def verify(candidate, canonical, root=None):
|
||||
require(type(candidate) is dict, 'closed document object')
|
||||
require(type(candidate.get('rows')) is list, 'closed rows list')
|
||||
rows = candidate['rows']
|
||||
@@ -284,8 +573,9 @@ def verify(candidate, canonical):
|
||||
require(row['status'] in STATUSES, 'invalid status')
|
||||
require(row['required_count'] is None and row['completed_count'] is None, 'invented quantity')
|
||||
require(row['status'] != 'produced', 'unsupported completion')
|
||||
require(row['owner'] in {'D08', 'P26-02', 'P26-03'}, 'invalid owner')
|
||||
require(row['citations'] and row['reason'] and row['missing'], 'missing traceability')
|
||||
require(root is not None, 'independent authority root required')
|
||||
verify_authority(candidate, root)
|
||||
require(encoded(candidate) == encoded(canonical), 'ledger differs from original/source-bound audit')
|
||||
|
||||
|
||||
@@ -293,11 +583,16 @@ def markdown(document):
|
||||
# A lossless deterministic human view, including exact citations and source hashes.
|
||||
lines = ['# P26-01 全必要内容の台帳', '',
|
||||
'15/88、今回加算0。未制作/未定義は欠損。利用枠数は完成数ではない。', '',
|
||||
'D05既存未解決事項・D08・D09は未解決。P22-03は未受入の参考資料。', '']
|
||||
'D05の過去未解決記録はf4f85bc/379a1ba時点。現行承認は別途固定。D08/D09未解決。P22-03は未受入参考。', '']
|
||||
for row in document['rows']:
|
||||
lines += ['## ' + row['id'], '', '- 種別: ' + row['kind'],
|
||||
'- 識別: ' + encoded(row['identity']),
|
||||
'- 状態: ' + row['status'], '- 所管: ' + row['owner'],
|
||||
'- 内容状態: ' + row['content_status'], '- 部分支援範囲: ' + row['support_scope'],
|
||||
'- AR: ' + encoded(row['atomic_requirement_ids']),
|
||||
'- AR別部分支援(列挙ARの基盤断片のみ、制作内容はmissing): ' + encoded(row['scoped_support']),
|
||||
'- 基盤支援なしのAR: ' + encoded(row['unsupported_atomic_requirement_ids']),
|
||||
'- 所管単位: ' + encoded(row['owner_deliverable_refs']) + ' (固定参照の原P単位定義を参照)',
|
||||
'- 条件: ' + (row['required_condition'] if isinstance(row['required_condition'], str)
|
||||
else encoded(row['required_condition'])), '- 理由: ' + row['reason'],
|
||||
'- 必要数/完成数: 未定義 / 未計数', '- 欠損: ' + row['missing'], '']
|
||||
@@ -332,7 +627,7 @@ def main():
|
||||
(root / OUT / 'CONTENT_LEDGER.md').write_text(markdown(canonical))
|
||||
else:
|
||||
document = decode((root / OUT / 'CONTENT_LEDGER.json').read_bytes())
|
||||
verify(document, canonical)
|
||||
verify(document, canonical, root)
|
||||
if args.check:
|
||||
check_view((root / OUT / 'CONTENT_LEDGER.md').read_bytes(), document)
|
||||
print(json.dumps({'documentation_check': 'pass', **result}, ensure_ascii=False))
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"archive": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p26-01-ledger/.runtime/coordinator-storage-20261018/p26-ended-review-contexts-20261018.tar.gz",
|
||||
"archive_bytes": 14482250,
|
||||
"archive_sha256": "ed4102702e8b4b7df080f9befdcc3e48effc94804e4e00e70031080b72c58c3c",
|
||||
"archive_md5": "0602ae24c5f2a10358e753a7b99a8d63",
|
||||
"all_members_full_local_readback_sha_verified": true,
|
||||
"extra_files": 101,
|
||||
"extra_bytes": 389793821,
|
||||
"source_checkout_count": 3,
|
||||
"full_restore_manifest": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p26-01-ledger/.runtime/coordinator-storage-20261018/FULL_RESTORE_MANIFEST.json",
|
||||
"free_before": 1182154752,
|
||||
"source_deleted": false,
|
||||
"drive_uploaded": false
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"drive_id": "1-u8cFfJkvS9aBNE15XYbHiVb4bC3DAz6",
|
||||
"url": "https://drive.google.com/file/d/1-u8cFfJkvS9aBNE15XYbHiVb4bC3DAz6/view",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"complete_remote_stream_bytes": 14482250,
|
||||
"sha256": "ed4102702e8b4b7df080f9befdcc3e48effc94804e4e00e70031080b72c58c3c",
|
||||
"matches_local_archive": true,
|
||||
"local_all_members_already_verified": true,
|
||||
"temporary_bearer_url_retained": false
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"removed": [
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p26-01-ledger/P26-01-LEDGER-review-4952bf2f",
|
||||
"head": "da80360a60224bed5aedb487141511dc690a30f7",
|
||||
"tracked_files": 4963,
|
||||
"archived_extra_files": 34
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p26-01-ledger/P26-01-LEDGER-review-5450abed",
|
||||
"head": "f10907d8db7fe8d1de31bfe7726b2b002a4c727b",
|
||||
"tracked_files": 4963,
|
||||
"archived_extra_files": 38
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p26-01-ledger/P26-01-LEDGER-review-7c039bfa",
|
||||
"head": "35b3de0d59d41633fe89678e742f35f4df620618",
|
||||
"tracked_files": 4963,
|
||||
"archived_extra_files": 29
|
||||
}
|
||||
],
|
||||
"free_before": 377675776,
|
||||
"free_after": 1633542144,
|
||||
"archive_verified": {
|
||||
"archive": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p26-01-ledger/.runtime/coordinator-storage-20261018/p26-ended-review-contexts-20261018.tar.gz",
|
||||
"archive_bytes": 14482250,
|
||||
"archive_sha256": "ed4102702e8b4b7df080f9befdcc3e48effc94804e4e00e70031080b72c58c3c",
|
||||
"archive_md5": "0602ae24c5f2a10358e753a7b99a8d63",
|
||||
"all_members_full_local_readback_sha_verified": true,
|
||||
"extra_files": 101,
|
||||
"extra_bytes": 389793821,
|
||||
"source_checkout_count": 3,
|
||||
"full_restore_manifest": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p26-01-ledger/.runtime/coordinator-storage-20261018/FULL_RESTORE_MANIFEST.json",
|
||||
"free_before": 1182154752,
|
||||
"source_deleted": false,
|
||||
"drive_uploaded": false
|
||||
},
|
||||
"remote_full_readback": {
|
||||
"drive_id": "1-u8cFfJkvS9aBNE15XYbHiVb4bC3DAz6",
|
||||
"url": "https://drive.google.com/file/d/1-u8cFfJkvS9aBNE15XYbHiVb4bC3DAz6/view",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"complete_remote_stream_bytes": 14482250,
|
||||
"sha256": "ed4102702e8b4b7df080f9befdcc3e48effc94804e4e00e70031080b72c58c3c",
|
||||
"matches_local_archive": true,
|
||||
"local_all_members_already_verified": true,
|
||||
"temporary_bearer_url_retained": false
|
||||
},
|
||||
"all_required_unique_evidence_preserved": true,
|
||||
"current_CEC_P26_review_and_implementation_unchanged": true,
|
||||
"restoration_manifest": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p26-01-ledger/.runtime/coordinator-storage-20261018/FULL_RESTORE_MANIFEST.json",
|
||||
"restoration_manifest_sha256": "63a686e6517f40651c66e941b410aed090c4203cbcf9c02df84e79145a6cd41f",
|
||||
"time_ns": 1792284587446598000,
|
||||
"actual_free_gain_bytes": 1255866368
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"source_actual_review_packet": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/8a8f40a333de4f0f993bc757c665c696/packet.txt",
|
||||
"restored_path": "/private/tmp/the-tree-p24-02-control-r02/AGENTS.md",
|
||||
"recorded_rules_sha256": "cb19c16aa0e2f8b70465777ae32cc5d9210733363c30206a0032a42cda625047",
|
||||
"canonical_stripped_equal": true,
|
||||
"permission_policy_change": false,
|
||||
"repair_counter_change": false,
|
||||
"cause": "missing after date boundary; deletion cause not yet established",
|
||||
"date_jst": "2026-10-18"
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"rows": [
|
||||
{
|
||||
"role": "commander",
|
||||
"sha256": "d0d5825308b1b193799cb765e8d128a084c1cd1967e97239c3d269d09427ab6c",
|
||||
"actual_previous_packet": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/3e55ca8b6dcf476a81ae20728bcb6290/packet.txt",
|
||||
"exact_template_in_previous_prefix": true
|
||||
},
|
||||
{
|
||||
"role": "implementer",
|
||||
"sha256": "5b1f0136cc36e1cbea343eadc6820e8dd5e037ede4794126a0fa67acaa11dbd8",
|
||||
"actual_previous_packet": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/753fb93320c644979504a86a78501be9/packet.txt",
|
||||
"exact_template_in_previous_prefix": true
|
||||
},
|
||||
{
|
||||
"role": "reviewer",
|
||||
"sha256": "ef431ec4ad0fff1964a382643429b59db59e24b8cc3dfcf61fea7cdc5608c7ba",
|
||||
"actual_previous_packet": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/8a8f40a333de4f0f993bc757c665c696/packet.txt",
|
||||
"exact_template_in_previous_prefix": true
|
||||
}
|
||||
],
|
||||
"no_gate_model_permission_change": true,
|
||||
"user_client_date_jst": "2026-10-18"
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"restored_missing_files": [
|
||||
{
|
||||
"path": "/private/tmp/the-tree-p24-02-control-r02/schemas/result.json",
|
||||
"sha256": "7cd8c0dfd013800322df8d6dee344f29677c00881ced6b586bc11d9b0b6ce44e"
|
||||
},
|
||||
{
|
||||
"path": "/private/tmp/the-tree-p24-02-control-r02/schemas/task.json",
|
||||
"sha256": "23866bc8c27e1e4782185ea1834f6211bf479585a7d9498ae8be10e78bbdba4e"
|
||||
},
|
||||
{
|
||||
"path": "/private/tmp/the-tree-p24-02-control-r02/schemas/decision.json",
|
||||
"sha256": "d0e84bb79d09c179c656a7f05553f9d95a808a1529808d4e3b950ecf6dd8fa2d"
|
||||
},
|
||||
{
|
||||
"path": "/private/tmp/the-tree-p24-02-control-r02/policies/default.json",
|
||||
"sha256": "dbafea6c8afebf8855e769f33ee8ae80a733b89b7e3cb7759e5bb0fb0a179f2a",
|
||||
"authority": "existing owner-approved active P26 project effective policy, user removed caps"
|
||||
}
|
||||
],
|
||||
"actual_result_schema_same_after_existing_task_commit_narrowing": true,
|
||||
"actual_model_state_narrowing_still_OwnerCLI": true,
|
||||
"existing_project_config_baseline_unchanged": true
|
||||
}
|
||||
@@ -15,14 +15,15 @@ class LedgerTests(unittest.TestCase):
|
||||
cls.submitted = audit.decode((ROOT / audit.OUT / 'CONTENT_LEDGER.json').read_bytes())
|
||||
|
||||
def reject(self, mutate):
|
||||
audit.verify(self.submitted, self.canonical, ROOT)
|
||||
value = copy.deepcopy(self.submitted)
|
||||
mutate(value)
|
||||
with self.assertRaises((ValueError, TypeError, KeyError)):
|
||||
audit.verify(value, self.canonical)
|
||||
audit.verify(value, self.canonical, ROOT)
|
||||
|
||||
def test_valid_submitted_and_independent_source_control(self):
|
||||
audit.verify(self.submitted, self.canonical)
|
||||
audit.verify(copy.deepcopy(self.canonical), self.canonical)
|
||||
audit.verify(self.submitted, self.canonical, ROOT)
|
||||
audit.verify(copy.deepcopy(self.canonical), self.canonical, ROOT)
|
||||
audit.check_view((ROOT / audit.OUT / 'CONTENT_LEDGER.md').read_bytes(), self.submitted)
|
||||
|
||||
def test_required_sets_are_independent_of_submitted_rows(self):
|
||||
@@ -40,7 +41,8 @@ class LedgerTests(unittest.TestCase):
|
||||
self.reject(lambda d: d.update(rows=[r for r in d['rows'] if r['id'] != identity]))
|
||||
|
||||
def test_missing_usage_slot(self):
|
||||
self.reject(lambda d: d['rows'].pop())
|
||||
self.reject(lambda d: d.update(rows=[r for r in d['rows'] if r['id'] !=
|
||||
next(x['id'] for x in d['rows'] if x['id'].startswith('usage.'))]))
|
||||
|
||||
def test_fabricated_quantity_and_false_completion(self):
|
||||
self.reject(lambda d: d['rows'][0].update(required_count=8))
|
||||
@@ -115,6 +117,193 @@ class LedgerTests(unittest.TestCase):
|
||||
with self.subTest(mode=mode), patch.object(audit, 'selection', return_value=changed), self.assertRaises(ValueError):
|
||||
audit.binding(ROOT)
|
||||
|
||||
def independent_reject(self, mutate, message):
|
||||
# The positive control and rejection invoke only the independent layer:
|
||||
# no canonical document/equality can make these tests pass.
|
||||
audit.verify_authority(self.submitted, ROOT)
|
||||
value = copy.deepcopy(self.submitted)
|
||||
mutate(value)
|
||||
with self.assertRaisesRegex(ValueError, message):
|
||||
audit.verify_authority(value, ROOT)
|
||||
|
||||
def test_omitted_review_event_clauses(self):
|
||||
for n in (13, 53, 65, 196, 221, 222):
|
||||
with self.subTest(line=n):
|
||||
self.reject(lambda d: d.update(rows=[r for r in d['rows']
|
||||
if r['id'] != 'original.line.' + str(n)]))
|
||||
# Remove a line from every citation (including broad category ranges),
|
||||
# preserving other lines, AR links and IDs: authority coverage must fail.
|
||||
def omit(d):
|
||||
for row in d['rows']:
|
||||
row['citations'] = [c for c in row['citations']
|
||||
if not c['lines'][0] <= 65 <= c['lines'][1]]
|
||||
self.independent_reject(omit, 'AR citation correspondence|independent original line coverage')
|
||||
|
||||
def test_atomic_coverage_unknown_and_missing_disposition(self):
|
||||
identity = 'AR.events.ntr_night_peak'
|
||||
def remove(d):
|
||||
for row in d['rows']:
|
||||
if identity in row['atomic_requirement_ids']:
|
||||
row['atomic_requirement_ids'].remove(identity)
|
||||
if identity in row['unsupported_atomic_requirement_ids']:
|
||||
row['unsupported_atomic_requirement_ids'].remove(identity)
|
||||
for claim in row['scoped_support']:
|
||||
if identity in claim['atomic_requirement_ids']:
|
||||
claim['atomic_requirement_ids'].remove(identity)
|
||||
atoms = audit.authorities(ROOT)[2]
|
||||
owners = sorted({atoms[a]['primary_package'] for a in row['atomic_requirement_ids']})
|
||||
row.update(owner='/'.join(owners) if owners else 'undefined', owner_deliverable_refs=owners)
|
||||
self.independent_reject(remove, 'independent AR coverage')
|
||||
self.independent_reject(lambda d: d['rows'][0]['atomic_requirement_ids'].append('AR.unknown'), 'unknown or unrelated AR ID')
|
||||
self.independent_reject(lambda d: d['atomic_dispositions'][identity].pop('disposition'), 'disposition')
|
||||
|
||||
def test_owners_route_usage_and_partial_truth(self):
|
||||
for prefix in ('route.', 'usage.', 'original.line.65'):
|
||||
with self.subTest(prefix=prefix):
|
||||
self.independent_reject(lambda d: next(r for r in d['rows']
|
||||
if r['id'].startswith(prefix)).update(owner='P26-03'), 'AR owner mismatch')
|
||||
self.independent_reject(lambda d: next(r for r in d['rows'] if r['kind']=='route')
|
||||
.update(status='missing'), 'route support/content distinction')
|
||||
self.independent_reject(lambda d: next(r for r in d['rows'] if r['id'].startswith('usage.') and r['evidence'])
|
||||
.update(status='missing'), 'usage representation status')
|
||||
self.independent_reject(lambda d: next(r for r in d['rows'] if r['status']=='partial')
|
||||
.update(status='produced'), 'partial support falsely produced')
|
||||
|
||||
def test_stale_atomic_original_and_usage_pins(self):
|
||||
identity = 'AR.events.ntr_night_peak'
|
||||
self.independent_reject(lambda d: d['atomic_dispositions'][identity]['record']
|
||||
.update(source_sha256='0'*64), 'stale AR record')
|
||||
self.independent_reject(lambda d: d['rows'][0]['citations'][0]
|
||||
.update(sha256='0'*64), 'original citation integrity')
|
||||
self.independent_reject(lambda d: next(r for r in d['rows'] if r['id'].startswith('usage.') and r['evidence'])
|
||||
['evidence'][0].update(sha256='0'*64), 'row evidence integrity')
|
||||
|
||||
def test_closed_support_attribution_independent_controls_and_injection(self):
|
||||
rows = {r['id']: r for r in self.submitted['rows']}
|
||||
audit.verify_authority(self.submitted, ROOT)
|
||||
for identity, kind in [('route.anri.love', 'relationship-container'),
|
||||
('original.line.138', 'relationship-container'),
|
||||
('original.line.140', 'relationship-container'),
|
||||
('original.line.65', 'night-input'),
|
||||
('original.line.53', 'peeping-container'),
|
||||
('original.line.34', 'peeping-container'),
|
||||
('original.line.72', 'bankruptcy-bookkeeping')]:
|
||||
with self.subTest(control=identity):
|
||||
self.assertEqual(rows[identity]['status'], 'partial')
|
||||
self.assertEqual(rows[identity]['content_status'], 'missing')
|
||||
self.assertIn(kind, {c['kind'] for c in rows[identity]['scoped_support']})
|
||||
allowed_controls = {
|
||||
'AR.relationship.three_emotions', 'AR.relationship.affection_shield_max',
|
||||
'AR.underground.observation', 'AR.observation.recorder',
|
||||
'AR.guest.need_sexual_night_peak', 'AR.progression.three_deficits_gameover',
|
||||
} | {'AR.heroine.' + p + '.route.' + r for p, _ in audit.PEOPLE for r in audit.ROUTES}
|
||||
self.assertEqual({a for row in rows.values() for c in row['scoped_support']
|
||||
for a in c['atomic_requirement_ids']}, allowed_controls)
|
||||
for identity in ('voice.all', 'portraits.all', 'endings.all', 'encyclopedia.all'):
|
||||
self.assertEqual(rows[identity]['status'], 'missing')
|
||||
self.assertEqual(rows[identity]['evidence'], [])
|
||||
# Valid pins + the old textual qualifier must not confer support.
|
||||
def inject(d):
|
||||
row = next(r for r in d['rows'] if r['id'] == identity)
|
||||
row.update(status='partial', support_scope='backend only',
|
||||
evidence=copy.deepcopy(rows['original.line.53']['evidence']))
|
||||
self.independent_reject(inject, 'unqualified partial support')
|
||||
# Preserve the same-line voice attack: the old observation schedule AR
|
||||
# shares L257 with voice, even though it is now independently excluded.
|
||||
def voice_claim(d):
|
||||
voice = next(r for r in d['rows'] if r['id'] == 'voice.all')
|
||||
mixed = rows['original.line.53']
|
||||
for key in ('status', 'support_scope', 'scoped_support', 'evidence'):
|
||||
voice[key] = copy.deepcopy(mixed[key])
|
||||
atom = 'AR.schedule.B-14.3.observation'
|
||||
self.assertIn(atom, voice['atomic_requirement_ids'])
|
||||
voice['scoped_support'][0]['atomic_requirement_ids'] = [atom]
|
||||
self.independent_reject(voice_claim, 'support incompatible with requirement family')
|
||||
# An original-clause row is an eligible family, but its debt-settlement
|
||||
# ARs still cannot receive a peeping-container claim.
|
||||
def content_claim(d):
|
||||
row = next(r for r in d['rows'] if r['id'] == 'original.line.196')
|
||||
donor = rows['original.line.53']
|
||||
for key in ('status', 'support_scope', 'scoped_support', 'evidence'):
|
||||
row[key] = copy.deepcopy(donor[key])
|
||||
row['scoped_support'][0]['atomic_requirement_ids'] = row['atomic_requirement_ids'][:]
|
||||
row['unsupported_atomic_requirement_ids'] = []
|
||||
self.assertEqual(rows['original.line.196']['status'], 'missing')
|
||||
self.independent_reject(content_claim, 'support incompatible with AR')
|
||||
# Mixed rows retain missing voice/end/encyclopedia ARs; an attacker
|
||||
# cannot expand a valid backend claim to those ARs.
|
||||
for identity, atom in [('original.line.257', 'AR.schedule.B-14.3.voice_record'),
|
||||
('clause.production', 'AR.asset.character_voice'),
|
||||
('original.line.9', 'AR.progression.all_endings'),
|
||||
('original.line.9', 'AR.progression.encyclopedia_complete')]:
|
||||
with self.subTest(mixed=identity, atom=atom):
|
||||
self.assertIn(atom, rows[identity]['unsupported_atomic_requirement_ids'])
|
||||
def expand(d):
|
||||
row = next(r for r in d['rows'] if r['id'] == identity)
|
||||
if not row['scoped_support']:
|
||||
donor = rows['original.line.53']
|
||||
for key in ('status', 'support_scope', 'scoped_support', 'evidence'):
|
||||
row[key] = copy.deepcopy(donor[key])
|
||||
row['scoped_support'][0]['atomic_requirement_ids'] = []
|
||||
row['scoped_support'][0]['atomic_requirement_ids'].append(atom)
|
||||
row['unsupported_atomic_requirement_ids'].remove(atom)
|
||||
self.independent_reject(expand, 'support incompatible with AR')
|
||||
# A valid claim does not license an additional, unrelated pinned file.
|
||||
self.independent_reject(lambda d: next(r for r in d['rows'] if r['id']=='original.line.65')
|
||||
['evidence'].extend(copy.deepcopy(rows['original.line.53']['evidence'])),
|
||||
'unrelated or unscoped support evidence')
|
||||
|
||||
def excluded_attribution_rejected(self, atom, line, kind, control_atom, control_line):
|
||||
# Fixed cases below are independent of both policy and exclusion table.
|
||||
audit.verify_authority(self.submitted, ROOT)
|
||||
rows = {r['id']: r for r in self.submitted['rows']}
|
||||
control = rows['original.line.' + str(control_line)]
|
||||
self.assertTrue(any(c['kind'] == kind and control_atom in c['atomic_requirement_ids']
|
||||
for c in control['scoped_support']))
|
||||
target = rows['original.line.' + str(line)]
|
||||
self.assertIn(atom, target['unsupported_atomic_requirement_ids'])
|
||||
def inject(d):
|
||||
row = next(r for r in d['rows'] if r['id'] == target['id'])
|
||||
claim = {'kind': kind, 'atomic_requirement_ids': [atom],
|
||||
'scope': audit.SUPPORT_POLICY[kind]['scope'], 'content_status': 'missing'}
|
||||
row.update(status='partial', content_status='missing', scoped_support=[claim],
|
||||
support_scope=claim['scope'], evidence=audit.support_pins(ROOT, kind),
|
||||
unsupported_atomic_requirement_ids=sorted(set(row['atomic_requirement_ids']) - {atom}))
|
||||
self.independent_reject(inject, 'excluded attribution in row claim')
|
||||
policy = copy.deepcopy(audit.SUPPORT_POLICY)
|
||||
policy[kind]['ars'] = policy[kind]['ars'] | {atom}
|
||||
with patch.object(audit, 'SUPPORT_POLICY', policy):
|
||||
with self.assertRaisesRegex(ValueError, 'excluded attribution in SUPPORT_POLICY'):
|
||||
audit.verify_authority(self.submitted, ROOT)
|
||||
# Even regeneration under a corrupted policy cannot legitimize it.
|
||||
with self.assertRaisesRegex(ValueError, 'excluded attribution in SUPPORT_POLICY'):
|
||||
audit.verify_authority(audit.expected(ROOT), ROOT)
|
||||
audit.verify_authority(self.submitted, ROOT)
|
||||
|
||||
def test_excluded_camera_entry(self):
|
||||
self.excluded_attribution_rejected('AR.ui.observation_camera_entry', 221,
|
||||
'peeping-container', 'AR.underground.observation', 34)
|
||||
|
||||
def test_excluded_screenshot_capture(self):
|
||||
self.excluded_attribution_rejected('AR.ui.observation_capture', 222,
|
||||
'peeping-container', 'AR.observation.recorder', 53)
|
||||
|
||||
def test_excluded_blackmail(self):
|
||||
self.excluded_attribution_rejected('AR.underground.blackmail', 21,
|
||||
'peeping-container', 'AR.observation.recorder', 53)
|
||||
|
||||
def test_excluded_observation_route_progress(self):
|
||||
self.excluded_attribution_rejected('AR.route_action.observation_progress', 156,
|
||||
'peeping-container', 'AR.underground.observation', 34)
|
||||
|
||||
def test_excluded_dedicated_observation_mode(self):
|
||||
self.excluded_attribution_rejected('AR.schedule.B-14.3.observation', 257,
|
||||
'peeping-container', 'AR.observation.recorder', 53)
|
||||
|
||||
def test_excluded_ntr_event_night_peak(self):
|
||||
self.excluded_attribution_rejected('AR.events.ntr_night_peak', 65,
|
||||
'night-input', 'AR.guest.need_sexual_night_peak', 65)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
@@ -205,8 +205,7 @@
|
||||
"remaining_delivery_units": 88,
|
||||
"current_package_state_counts": {
|
||||
"completed": 1,
|
||||
"in_progress": 28,
|
||||
"planned": 1
|
||||
"in_progress": 29
|
||||
},
|
||||
"initial_snapshot_checked": false,
|
||||
"historical_source_bytes_compared": false,
|
||||
@@ -244,7 +243,7 @@
|
||||
"facility_value_contracts_validation.json": "bf490a9ca585c48fc318e76c4a069ef244827d828d46e6415399f7710590dd16",
|
||||
"performance_audit.json": "0b630b15a392c3e0366f1362bfe4ddacb968f915f54549f82e4d6fa315384762",
|
||||
"progress_contract.json": "ccbdfce8c8365d5c13f59531955708834cce45acd0e136561c95295dfdb5df77",
|
||||
"progress_snapshot.json": "332dd0b3ba2e58c6801fdebf0ce42b672f7085479b6c4842b109c4e921b09686",
|
||||
"progress_snapshot.json": "eaaaeafeda9c6003ab7ee87077f905b06eccac362e30922d5cadaad0d9f730c4",
|
||||
"progress_validator_guard_checks.json": "72ee513fcf1cad85c24bfd0a4b472f425f6acf117928ece0f6b41e29018da627",
|
||||
"progress_validator_guard_checks.r01.json": "14c26adffa5a1938241db4912e50ea54b660641ee6fee2e412d467dce14d0519",
|
||||
"requirement_coverage.json": "03b10e4da367579db502d0671a6e0dda36fd385111c6f1c0084acaff7605f593",
|
||||
@@ -254,6 +253,6 @@
|
||||
"validate_facility_value_contracts.py": "91640e2a76cd6cc9186f7b85c0bf379b24b6cac0d48962815235ee628e7ae43e",
|
||||
"validate_plan.py": "23678227d9b3c556f1bd903f4b5b3147c4a82ce5085e10055481026803451b80",
|
||||
"validator_update_checks.json": "f997d0f3de2cea29550840b1d5cb23647d64f81329de46758551e2b6c8fecc27",
|
||||
"work_packages.json": "9cac178af50d3320287c64aa518f6ec704fc71139a481c858f45b707eaf9f8ad"
|
||||
"work_packages.json": "1c1164c1e39655d10a0369c0cfe215cf25761a0a19d802ce29f3d1be101118f9"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"integrated_at_jst": "2026-10-17T15:19:09.416187+09:00",
|
||||
"scope": "P23-03 formally completed; original 30 packages/88 units,14 complete, no partial credit. Whole game and same-Windows distribution actual-device acceptance remain incomplete.",
|
||||
"source_head": "314a8a4ce13cd0e7f6fe98807e628044d6417919",
|
||||
"source_authority_note": "Latest accepted product integration314a8a4 has exact tested treea700519: source d2581af plus main5041b88. Whole7-condition independent Opus review and normal validation/integration/final passed. This ledger-only publication preserves all1359 selected source files and every immutable input pin; prior proofs remain bound to their original versions. See POST_LEDGER_SOURCE_APPLICABILITY.json.",
|
||||
"integrated_at_jst": "2026-10-18T09:59:36.678192+09:00",
|
||||
"scope": "Original30packages/88units;16formallyaccepted including whole originalP26-01. No partialcredit. Game/content/same-Windows acceptance incomplete.",
|
||||
"source_head": "65f07bf5eaa759a8e2e17c7bdbbbdbceb24ee373",
|
||||
"source_authority_note": "Latest accepted product integration65f07bf(P13backend-only, originalunitcredit0). OriginalP19-03 audited atC8e4f1d9 and currentmainf4f85bc exact1368selectedgameinputs equality. Proofs remain bound to original S/C/settings/input/policy/engine. Current P26 preparation docs do not alter game inputs.",
|
||||
"immutable_history": {
|
||||
"baseline.json": {
|
||||
"sha256": "750bb3d313cc5e2ce0d4c79e563a995abd7a78f991dee1dd75c627877b02cd7b",
|
||||
@@ -152,13 +152,12 @@
|
||||
},
|
||||
"current_package_state_counts": {
|
||||
"completed": 1,
|
||||
"in_progress": 28,
|
||||
"planned": 1
|
||||
"in_progress": 29
|
||||
},
|
||||
"current_delivery_state_counts": {
|
||||
"completed": 15,
|
||||
"completed": 16,
|
||||
"in_progress": 24,
|
||||
"planned": 49
|
||||
"planned": 48
|
||||
},
|
||||
"completed_current_deliveries": [
|
||||
"P00-01",
|
||||
@@ -4538,7 +4537,7 @@
|
||||
}
|
||||
},
|
||||
"known_original_principal_profit_difference_unresolved": 0,
|
||||
"next_priority_original_principal_profit": "Continue ordered independent P06 stop/recovery audit: current supply cargo and kitchen batch controlled outage accepted, natural reserve policy and active-service/whole-building/hardware acceptance pending. Existing P05 terms remain unresolved.",
|
||||
"next_priority_original_principal_profit": "P04 existingD05 answers pending; current independent nextwholeunit P26-01 actualOpus selected. PriorP06 evidence retained, no activeworker.",
|
||||
"historical_before_original_profit_fix_original_principal_profit_reproduction_checkpoint": {
|
||||
"issued_by": "/root",
|
||||
"linked_at_jst": "2026-10-09T07:29:13.140774+09:00",
|
||||
@@ -5229,24 +5228,23 @@
|
||||
"whole_P06_accepted": false,
|
||||
"whole_goal_accepted": false
|
||||
},
|
||||
"next_priority_p06": "Continue current source outage acceptance through cleaning and held rescue/transport, then full HUD/whole-building scope. Natural reserve policy and full hardware acceptance remain pending; active meal/lodging services accepted only for explicit diagnostic reserve boundary.",
|
||||
"next_priority_p06": "Deferred existingP06 original conditions; no duplicate run. CurrentfocusP26-01.",
|
||||
"current_P02_01_formal_completion": {
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p02-01-completion-acceptance-r01.json",
|
||||
"bytes": 8539,
|
||||
"sha256": "45845238d8a73b84fd346f2d834ee4aaa12d32b45367ea0952b523db9b2523d9"
|
||||
},
|
||||
"next_single_delivery_unit": {
|
||||
"id": "P24-02",
|
||||
"title": "操作と通知",
|
||||
"id": "P04-01",
|
||||
"title": "同時発生の更新規約",
|
||||
"state": "in_progress",
|
||||
"completed": false,
|
||||
"actual_runner_state": "submitted",
|
||||
"existing_project": "the-tree-p24-02-operations",
|
||||
"source": "fe44f550750acbf5c510346e7cacbea2ccbdd184",
|
||||
"selection": "docs/plans/original-completion-2026-10-02/execution/next-closure-after-p23-20261017/result.json",
|
||||
"current_acceptance_and_all8_missing": "docs/plans/original-completion-2026-10-02/execution/p24-02/root-readiness-repair6-20261017/CURRENT_ACCEPTANCE_AND_NEXT_GATE.json",
|
||||
"current_scope": "Same-task repair6 limited source review plus actual committed S/Q reproducibility and native import/326parse/3 affected suites passed. All8 unaccepted; next genuine typed OS/runtime evidence and upstream production dependencies before exact final full/formal integration.",
|
||||
"pending_dependencies": "Real ordinary invasion/duel/defense triggers and upstream whole P18-01/02/P19-01/P21-01/content/approved production input remain. Backend265ce30 is already completed and is never restarted. No fixture-only credit or invented values."
|
||||
"existing_project": "the-tree-p04-01",
|
||||
"source": "2dde7596a87c43f7bf0bf704b7479f2fa06a5b1c",
|
||||
"actual_runner_state": "repair_pending; verify live before next run",
|
||||
"actual_worker": null,
|
||||
"approval_record": "docs/plans/original-completion-2026-10-02/execution/p04-01-owner-approval-20261018/D05_ACTUAL_HUMAN_APPROVAL.json",
|
||||
"remaining": "Adopt actual approved rules/authority refs/registry/pins; qualified minimal real-boundary probes; exact final full roster and whole-unit independent review; normalcandidate/final. No duplicateP26."
|
||||
},
|
||||
"current_P14_01_contract_audit": {
|
||||
"audit": "artifacts/original-completion-2026-10-02/p14-01-current-contract-audit-r01/audit.json",
|
||||
@@ -10305,8 +10303,8 @@
|
||||
"unresolved_original_content": "Five definitions absent in bounded current search, all required asset counts/content quantities remain unknown; D08/D09 pending. P13-01/P13-02 remain planned.",
|
||||
"new_engine_runs": 0
|
||||
},
|
||||
"active_implementation_plan_id": "P24-02",
|
||||
"active_backend_task": "P24-02",
|
||||
"active_implementation_plan_id": "P04-01",
|
||||
"active_backend_task": "P04-01",
|
||||
"p18_current_execution": {
|
||||
"original_plan_id": "P18-01",
|
||||
"existing_task": "the-tree-p18-01-model/P18-01-CODE",
|
||||
@@ -10521,5 +10519,168 @@
|
||||
},
|
||||
"whole_game_acceptance": false
|
||||
},
|
||||
"next_closure_note": "P04-01 remains first upon existing D05 answers; actual Opus will select next independent original work without duplicate worker or invented values."
|
||||
"next_closure_note": "Existing P04-01 next: actual2026-10-18 remaining4D05approvals supplied. PreserveS2dde759, repair29 and all accepted domains; actual Opus must bind currentM and final source/roster, no old14/88 or staleproduct labels.",
|
||||
"current_p26_01_content_ledger": {
|
||||
"at": "2026-10-17T20:44:25.180745+09:00",
|
||||
"original_plan_id": "P26-01",
|
||||
"registered_project": "the-tree-p26-01-ledger",
|
||||
"registered_task": "P26-01-LEDGER",
|
||||
"state": "completed_original_P26_01",
|
||||
"actual_selection": "6b9bb7f7a8474689b4094efbfcde2eef",
|
||||
"base_commit": "379a1ba8fd25b5ad24226178a2492f91761dc31d",
|
||||
"original_denominator": {
|
||||
"packages": 30,
|
||||
"units": 88,
|
||||
"formal_completed_before_this_unit": 15,
|
||||
"formal_completed_now": 16,
|
||||
"credit_added_by_this_original_unit": 1,
|
||||
"partial_credit": false
|
||||
},
|
||||
"full_acceptance": "原本で要求された未制作内容を欠損として記録し、架空の完成数を置かない。",
|
||||
"dependencies": "Audit observes P19/P20/P22 actual state; does not accept their production. Pending D08/D09 explicit. P04 existing D05 questions retained.",
|
||||
"missing": [],
|
||||
"reuse": [
|
||||
"P19-03 accepted table S903a2c566e73cebc874a6499410a1243bc190a63/C8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"P22-01 accepted usage inventory, verify exact artifact hashes",
|
||||
"P22-03 unaccepted draft cross-reference only"
|
||||
],
|
||||
"model": "actual Opus selects; proposed gpt-6.1-sol",
|
||||
"storage_estimate_scope": "Opus under5MB is output-material estimate, excludes required Runner checkout copies (~240MB each); stage copies, recover only ended fully restorable duplicates",
|
||||
"actual_commander_run_direction": "1f3936da8f174bbd983f55f4b749c764",
|
||||
"actual_jobs": [],
|
||||
"repairs": 6,
|
||||
"repair_limit": null,
|
||||
"setup_attempt": {
|
||||
"run": "860ffd16cb38404ab434d65688eb0f68",
|
||||
"writes": 0,
|
||||
"tests": 0,
|
||||
"result": "returned blocked on two delivery issues, resolved without scope/spec/policy changes",
|
||||
"recovery_direction": "ba1534298b4c4100b83c353c90fbdd35",
|
||||
"raw_spec_sha256": "8026040345de6b7d06cfce40beac9150bfe9ad303d6b26c11bd94e66b1080b29",
|
||||
"Runner_strippedUTF8_sha256": "1fedc9ade42a04722846daa9ac8ec26f821fb4efbce8dbbb53e3e76e31f38d02",
|
||||
"committed_accepted_material_anchor": "137639773c9017f9ee7733d78e37179b687f965c",
|
||||
"manifest": "accepted-p22-01-inputs/ROOT_MATERIAL_PRESERVATION_MANIFEST.json"
|
||||
},
|
||||
"resume_rule": "P26-01 formally closed on exactC72a50a4a, no duplicate worker/test/review. Next original unit P04-01 existingthe-tree-p04-01/2dde759 repair29; actual4D05answers supplied. Rebind current main and complete exact remaining conditions, no old f5full178 relabel.",
|
||||
"second_setup_attempt": {
|
||||
"run": "81b128df2b3741ec9ab480f3d05d96c1",
|
||||
"writes": 0,
|
||||
"result": "Prior commander direction incorrectly assumed existing P26 outputs. Actual Opus818862 withdrew assumption and actual3e55ca authorized creating all5newfiles; immutable spec unchanged. Three precreation invocations exited2 missing script, not actual tests or acceptance."
|
||||
},
|
||||
"original_unit_credit_added": 1,
|
||||
"S": "cec295f34b60424a7238076407a89a2a2ad41b0c",
|
||||
"submitted_source": "cec295f34b60424a7238076407a89a2a2ad41b0c",
|
||||
"formal_validation": {
|
||||
"passed": true,
|
||||
"S": "cec295f34b60424a7238076407a89a2a2ad41b0c",
|
||||
"all_registered_checks": 3,
|
||||
"meaningful_self_tests": 24,
|
||||
"artifact": "ROOT_FORMAL_VALIDATION_CEC295F3.json"
|
||||
},
|
||||
"whole_original_review": {
|
||||
"S": "cec295f34b60424a7238076407a89a2a2ad41b0c",
|
||||
"actual_run": "1aeee623878f42b89ee83595be3539fb",
|
||||
"status": "pass",
|
||||
"critical_high_medium": 0,
|
||||
"low": 3,
|
||||
"artifact": "ROOT_WHOLE_REVIEW_CEC295F3.json"
|
||||
},
|
||||
"D05_current_human_answers": "All4remaining rules approved clientdate2026-10-18; separateP04adoptionnext. Frozenf4/379audit must explicitlylabel historicalsource.",
|
||||
"native_reuse": {
|
||||
"C": "72a50a4a1bc7c416d45e3045398e53134e44a6ce",
|
||||
"all1368_inputs_settings_marker_policy_engine_roster_parse_defaultplayer_equal": true,
|
||||
"actual_proof": "ROOT_EXACT_FINAL_72A50A4A_GAME_INPUT_REUSE.json",
|
||||
"new_native_runs": 0
|
||||
},
|
||||
"actual_repair_direction": "5c77fcb3394e4c34a2558cde5e1ff3e8",
|
||||
"repair3_result": {
|
||||
"run": "3094806e368d4ed18952ff238508fe23",
|
||||
"result": "blocked on exact D05 approval source delivery; report-only edits, actual review fixes not done",
|
||||
"resolved": "Actual4humananswers/policytexts/questionID and published a13f7c0 approval bytes/SHA supplied in same implementer handoff; actual Opus b0db/98e5 verified all4handoffdocs before same-task resume",
|
||||
"approval_file_sha256": "cd365ded1b777a0327d090709f0a4161f5005562819183455d9f2e106fba3e96"
|
||||
},
|
||||
"previous_whole_original_review": {
|
||||
"actual_run": "8a8f40a333de4f0f993bc757c665c696",
|
||||
"model": "claude-opus-5-5",
|
||||
"status": "changes_requested",
|
||||
"high": 2,
|
||||
"medium": 2,
|
||||
"low": 1,
|
||||
"artifact": "ROOT_WHOLE_REVIEW_35B3DE0D.json"
|
||||
},
|
||||
"implementation_model": "gpt-6.1-sol",
|
||||
"model_selection": "Actual Opus5c77 directly read every policy AR condition and each cited code span and fixed exact allowed/excluded memberships. Actual1f3936 switches to Sol6.1 for mechanical implementation; provider argv verified. Prior Astra output remains currentS.",
|
||||
"at_jst": "2026-10-18T09:59:36.678192+09:00",
|
||||
"normal_integration_candidate": "72a50a4a1bc7c416d45e3045398e53134e44a6ce",
|
||||
"normal_main_base": "fc9c8909ac04639076052dfa7325f1603f4db89e",
|
||||
"registered_task_state": "completed",
|
||||
"formally_completed": 16,
|
||||
"whole_original_P26_01_accepted": true,
|
||||
"whole_game_accepted": false,
|
||||
"required_before_acceptance": [],
|
||||
"normal_final_pending": false,
|
||||
"source_on_main": true,
|
||||
"closure_evidence": [
|
||||
{
|
||||
"path": "ROOT_FORMAL_VALIDATION_CEC295F3.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/e2cdb8cd88184505a25a19459b35dd2e-validation.json",
|
||||
"bytes": 837,
|
||||
"sha256": "ae7010aa607c8b27e0d13bcf1e8e8f0e7267a7d2a1d96c8b106d6529399178f6"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_WHOLE_REVIEW_CEC295F3.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/1aeee623878f42b89ee83595be3539fb/result.json",
|
||||
"bytes": 6739,
|
||||
"sha256": "da47429ba7048a21006ee4c247680acdec5b3b6ef451de908cc8f47e5af2199f"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_NORMAL_INTEGRATION_72A50A4A.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/41fb06480320418a9caf5199756590dd-integration.json",
|
||||
"bytes": 838,
|
||||
"sha256": "2f47d39d3f05b3735f0fb3e01adaabf1c66c6a784d60af247063bd90e5ec0d5c"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_NORMAL_FINAL_72A50A4A.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/runs/80390306daee4eacb57048e4feb3a7ee-final.json",
|
||||
"bytes": 832,
|
||||
"sha256": "b41069126e029c30ab644a62a54cb45ca2e0e504add150020500acba4e249469"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_RUNNER_COMPLETED_TRACEABILITY.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p26-01-ledger/traceability/P26-01-LEDGER.json",
|
||||
"bytes": 5013,
|
||||
"sha256": "039cb19b4eca41c48f7262bb456ce61d06b3381bf830d193358e85757d06d33d"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_EXACT_NORMAL_CANDIDATE_72A50A4A.json",
|
||||
"actual_original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p26-01-ledger/.runtime/P26-01-LEDGER/build/audit-support/ROOT_EXACT_NORMAL_CANDIDATE_72a50a4a.json",
|
||||
"bytes": 2634,
|
||||
"sha256": "5614c9b1c9eb222dbbcfd9ae1c3b438cc4129c779deba2841d660a8c96b6cfe6"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_EXACT_FINAL_72A50A4A_GAME_INPUT_REUSE.json",
|
||||
"actual_original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p26-01-ledger/.runtime/P26-01-LEDGER/build/audit-support/ROOT_EXACT_FINAL_72a50a4a_GAME_INPUT_REUSE.json",
|
||||
"bytes": 1327,
|
||||
"sha256": "9862725854c4a7d2c651ba79841dd44cf791d4794f1cd33a551d18c134d3fd6f"
|
||||
}
|
||||
],
|
||||
"normal_final": {
|
||||
"passed": true,
|
||||
"commit": "72a50a4a1bc7c416d45e3045398e53134e44a6ce",
|
||||
"artifact": "ROOT_NORMAL_FINAL_72A50A4A.json"
|
||||
},
|
||||
"related_open_work": [
|
||||
"P26-02/03 original production content, all chapter/route/ending/dialogue/portrait/voice missing items remain owned gaps",
|
||||
"D08/D09 unresolved scope/quantity/quality; no invented content or values",
|
||||
"P04 actual4D05 approvals now ready for adoption and remaining original acceptance",
|
||||
"Global natural-play/performance/held gestures/same-Windows actual-device acceptance incomplete"
|
||||
]
|
||||
},
|
||||
"p04_remaining_D05_actual_approval": {
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p04-01-owner-approval-20261018/D05_ACTUAL_HUMAN_APPROVAL.json",
|
||||
"all4approved": true,
|
||||
"product_adoption_pending": true,
|
||||
"existing_source": "2dde7596a87c43f7bf0bf704b7479f2fa06a5b1c",
|
||||
"next_after_P26": true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3856,6 +3856,12 @@
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p04-01-current-recheck-20261017/CURRENT_ACCEPTANCE_STATUS.json",
|
||||
"sha256": "908111f64a3d6c206504e26e76c721a0a97864238f6f6bb6604ac7b8e31ce7bf",
|
||||
"scope": "Actual latest29 state and Opus re-audit supersede stale repair19 remaining work; zero formal credit"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p04-01-owner-approval-20261018/D05_ACTUAL_HUMAN_APPROVAL.json",
|
||||
"sha256_at_integration": "cd365ded1b777a0327d090709f0a4161f5005562819183455d9f2e106fba3e96",
|
||||
"scope": "Actual user approval of remaining4D05rules only; not implementation/acceptance",
|
||||
"linked_at_jst": "2026-10-18"
|
||||
}
|
||||
],
|
||||
"current_summary": "次に閉じる優先候補。実Runnerは提出2dde7596・修正29・repair_pending・未稼働、worktree差分0。実Opus ea12167cが最新29を再監査し、旧台帳のraw結合/getter/HEAD fixture等は既修正と確認、重複repairを起動しない。登録validationはpassでも正式レビュー275d1fd6はD05規則未確定等で不合格。破壊順序・00:00売上帰属と理由表示/退出の明文化を具体案で確認中。既承認2規則維持。全15+EV/7領域/安全性3結果/全条件・必須最終全回帰・独立wholeレビュー・通常integration/finalは維持。正式14/88、今回加算0。",
|
||||
@@ -3864,11 +3870,11 @@
|
||||
"after actual answers, normal batched checker destruction-authority pin / registry / approval record / stale current metadata correction",
|
||||
"final gates as listed; previous full178 f5 receipt is not full final checker a61 evidence; no relabeling"
|
||||
],
|
||||
"progress_summary": "次に閉じる優先候補。実Runnerは提出2dde7596・修正29・repair_pending・未稼働、worktree差分0。実Opus ea12167cが最新29を再監査し、旧台帳のraw結合/getter/HEAD fixture等は既修正と確認、重複repairを起動しない。登録validationはpassでも正式レビュー275d1fd6はD05規則未確定等で不合格。破壊順序・00:00売上帰属と理由表示/退出の明文化を具体案で確認中。既承認2規則維持。全15+EV/7領域/安全性3結果/全条件・必須最終全回帰・独立wholeレビュー・通常integration/finalは維持。正式14/88、今回加算0。",
|
||||
"progress_summary": "2026-10-18実ユーザーがD05残4規則を承認。既存2dde759/repair29保持、承認記録をOpusへ渡し再開準備。P26修正後に同一P04を優先、未受入・無加算。",
|
||||
"remaining_gaps": [
|
||||
"owner choices for destruction order and midnight-sale day, plus explicit disposition of reason label and command/AI exit",
|
||||
"after actual answers, normal batched checker destruction-authority pin / registry / approval record / stale current metadata correction",
|
||||
"final gates as listed; previous full178 f5 receipt is not full final checker a61 evidence; no relabeling"
|
||||
"Adopt actual 2026-10-18 remaining4D05 approvals into authoritative rule/registry/approval/source pins; no owner answer remains pending for these4",
|
||||
"Apply actual Opus-approved necessary batched corrections on preserved2dde759",
|
||||
"Exact final current-roster regression and all original conditions/independent whole review/normal integration/final; oldf5full178 not finala61 evidence"
|
||||
],
|
||||
"updated_at_jst": "2026-10-17T16:30:38.746525+09:00",
|
||||
"current_recheck": "execution/p04-01-current-recheck-20261017/CURRENT_ACCEPTANCE_STATUS.json",
|
||||
@@ -17131,7 +17137,7 @@
|
||||
"D08",
|
||||
"D09"
|
||||
],
|
||||
"state": "planned",
|
||||
"state": "in_progress",
|
||||
"supplement_ids": [],
|
||||
"owner_roles": {
|
||||
"implementation": "実装担当(担当者未割当)",
|
||||
@@ -17140,15 +17146,68 @@
|
||||
},
|
||||
"legacy_state": "planned",
|
||||
"state_scope": "package-level; completed means whole package accepted; partial implementation is not completion",
|
||||
"current_summary": "全章・人物別内容と完成資産の制作受入は未着手。",
|
||||
"current_summary": "OriginalP26-01 full required-content ledger formally accepted; P26-02/03 production and original content gaps remain unaccepted.",
|
||||
"remaining_deliverables": [
|
||||
{
|
||||
"id": "P26-01",
|
||||
"title": "全必要内容の台帳",
|
||||
"work": "全章、7名の3ルート、全エンド、台詞、立ち絵、音声の必要枠と条件を確定する。",
|
||||
"acceptance": "原本で要求された未制作内容を欠損として記録し、架空の完成数を置かない。",
|
||||
"state": "planned",
|
||||
"evidence": []
|
||||
"state": "completed",
|
||||
"evidence": [
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p26-01/ROOT_CURRENT_ACCEPTANCE_STATUS.json",
|
||||
"scope": "Registered audit start only, no original-unit acceptance",
|
||||
"sha256_at_integration": "9818c6d76ebe3972c3128ab3d956589991360baa1fb97529a6d30e97d10d87d5",
|
||||
"linked_at_jst": "2026-10-17T20:36:24.754292+09:00"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p26-01/ROOT_FORMAL_VALIDATION_CEC295F3.json",
|
||||
"sha256_at_integration": "ae7010aa607c8b27e0d13bcf1e8e8f0e7267a7d2a1d96c8b106d6529399178f6",
|
||||
"scope": "Whole originalP26-01 audit acceptance only on exact S/C, not produced game content or Windows",
|
||||
"linked_at_jst": "2026-10-18T09:59:36.678192+09:00"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p26-01/ROOT_WHOLE_REVIEW_CEC295F3.json",
|
||||
"sha256_at_integration": "da47429ba7048a21006ee4c247680acdec5b3b6ef451de908cc8f47e5af2199f",
|
||||
"scope": "Whole originalP26-01 audit acceptance only on exact S/C, not produced game content or Windows",
|
||||
"linked_at_jst": "2026-10-18T09:59:36.678192+09:00"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p26-01/ROOT_NORMAL_INTEGRATION_72A50A4A.json",
|
||||
"sha256_at_integration": "2f47d39d3f05b3735f0fb3e01adaabf1c66c6a784d60af247063bd90e5ec0d5c",
|
||||
"scope": "Whole originalP26-01 audit acceptance only on exact S/C, not produced game content or Windows",
|
||||
"linked_at_jst": "2026-10-18T09:59:36.678192+09:00"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p26-01/ROOT_NORMAL_FINAL_72A50A4A.json",
|
||||
"sha256_at_integration": "b41069126e029c30ab644a62a54cb45ca2e0e504add150020500acba4e249469",
|
||||
"scope": "Whole originalP26-01 audit acceptance only on exact S/C, not produced game content or Windows",
|
||||
"linked_at_jst": "2026-10-18T09:59:36.678192+09:00"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p26-01/ROOT_RUNNER_COMPLETED_TRACEABILITY.json",
|
||||
"sha256_at_integration": "039cb19b4eca41c48f7262bb456ce61d06b3381bf830d193358e85757d06d33d",
|
||||
"scope": "Whole originalP26-01 audit acceptance only on exact S/C, not produced game content or Windows",
|
||||
"linked_at_jst": "2026-10-18T09:59:36.678192+09:00"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p26-01/ROOT_EXACT_NORMAL_CANDIDATE_72A50A4A.json",
|
||||
"sha256_at_integration": "5614c9b1c9eb222dbbcfd9ae1c3b438cc4129c779deba2841d660a8c96b6cfe6",
|
||||
"scope": "Whole originalP26-01 audit acceptance only on exact S/C, not produced game content or Windows",
|
||||
"linked_at_jst": "2026-10-18T09:59:36.678192+09:00"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p26-01/ROOT_EXACT_FINAL_72A50A4A_GAME_INPUT_REUSE.json",
|
||||
"sha256_at_integration": "9862725854c4a7d2c651ba79841dd44cf791d4794f1cd33a551d18c134d3fd6f",
|
||||
"scope": "Whole originalP26-01 audit acceptance only on exact S/C, not produced game content or Windows",
|
||||
"linked_at_jst": "2026-10-18T09:59:36.678192+09:00"
|
||||
}
|
||||
],
|
||||
"progress_summary": "Original P26-01 formally accepted at C72a50a4a/Scec295f3: exact original missing-content audit, all3registered checks, whole Opus1aeee623 pass0critical/high/medium, normalintegration/final pass and actual Runnercompleted. Unknown/unproduced content stays explicit missing; no game/global acceptance.",
|
||||
"remaining_gaps": [],
|
||||
"updated_at_jst": "2026-10-18T09:59:36.678192+09:00",
|
||||
"completed_at_jst": "2026-10-18T09:59:36.678192+09:00"
|
||||
},
|
||||
{
|
||||
"id": "P26-02",
|
||||
|
||||
Reference in New Issue
Block a user