Compare commits
53
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
35b3de0d59 | ||
|
|
379a1ba8fd | ||
|
|
f4f85bc54c | ||
|
|
8e4f1d92fc | ||
|
|
e7acd530c5 | ||
|
|
903a2c566e | ||
|
|
6e17cae5c9 | ||
|
|
b81f9f2860 | ||
|
|
806de25068 | ||
|
|
c5e2087dde | ||
|
|
e0420d57a3 | ||
|
|
8ca9263fee | ||
|
|
1b07b87d37 | ||
|
|
65f07bf5ea | ||
|
|
191ea3b4d1 | ||
|
|
d60f1c6d04 | ||
|
|
ef96967d8a | ||
|
|
a7e3069b16 | ||
|
|
27fc5f0544 | ||
|
|
f7ef53ac48 | ||
|
|
e930a1dedf | ||
|
|
1e8d4ea888 | ||
|
|
2f3884be11 | ||
|
|
565fd80507 | ||
|
|
c80c1688fa | ||
|
|
54cade4181 | ||
|
|
51e8657bfb | ||
|
|
32c8d1ce43 | ||
|
|
314a8a4ce1 | ||
|
|
d2581afd26 | ||
|
|
059c2f743b | ||
|
|
26f60095bf | ||
|
|
93248f4d79 | ||
|
|
7f1920b329 | ||
|
|
447f77a13b | ||
|
|
6c13940cf4 | ||
|
|
5041b88bdf | ||
|
|
53cb52da9c | ||
|
|
52ce2f125c | ||
|
|
9a26f9ab8c | ||
|
|
19fc3f50c7 | ||
|
|
49445d4a4d | ||
|
|
336a8cd0b3 | ||
|
|
56bf5a3e86 | ||
|
|
21b5d3a31a | ||
|
|
0b7727a66c | ||
|
|
55c29f1192 | ||
|
|
baa4f2d563 | ||
|
|
59a1385536 | ||
|
|
d9e4e9bd2f | ||
|
|
f6176d3f19 | ||
|
|
4c8a18aa75 | ||
|
|
03100beabe |
@@ -20,6 +20,7 @@ const OPERATING_EXPENSE_ACCOUNT := &"OPERATING_EXPENSE"
|
||||
const AUTHORITY_FINE_ACCOUNT := &"AUTHORITY_FINE_EXPENSE"
|
||||
const WAGE_EXPENSE_ACCOUNT := &"WAGE_EXPENSE"
|
||||
const RUNTIME_SNAPSHOT_VERSION := 14
|
||||
const PeepingRooms := preload("res://scripts/special/peeping_room_service.gd")
|
||||
const AUTO_PURCHASE_RUNTIME_SNAPSHOT_VERSION := 14
|
||||
const EVENT_THREAT_RUNTIME_SNAPSHOT_VERSION := 13
|
||||
const MIMI_PURCHASE_RUNTIME_SNAPSHOT_VERSION := 15
|
||||
@@ -97,6 +98,7 @@ const DEFENSE_COMMAND_TYPES: Array[StringName] = [
|
||||
var definition_registry := DefinitionRegistry.new()
|
||||
var command_queue := CommandQueue.new()
|
||||
var id_generator := StableIdGenerator.new()
|
||||
var peeping_room_service := PeepingRooms.new()
|
||||
var domain_events := DomainEventStream.new()
|
||||
var world_service := WorldService.new()
|
||||
var path_service := PathService.new()
|
||||
@@ -233,6 +235,7 @@ func initialize(clock: SimulationKernel, state: Variant, seed := DEFAULT_WORLD_S
|
||||
_hired_staff_candidate_ids.clear()
|
||||
command_queue = CommandQueue.new()
|
||||
id_generator = StableIdGenerator.new()
|
||||
peeping_room_service = PeepingRooms.new()
|
||||
domain_events = DomainEventStream.new()
|
||||
world_service = WorldService.new()
|
||||
path_service = PathService.new()
|
||||
@@ -253,6 +256,7 @@ func initialize(clock: SimulationKernel, state: Variant, seed := DEFAULT_WORLD_S
|
||||
_initialize_s5_defense()
|
||||
construction_service = ConstructionService.new(world_service, construction_resource_state)
|
||||
construction_service.current_minute = _clock.absolute_minute
|
||||
peeping_room_service.configure(world_service, facility_service, construction_service, path_service, id_generator)
|
||||
_connect_construction_signals()
|
||||
var initial_infrastructure_ok := _initialize_infrastructure_services()
|
||||
_next_command_id = 1
|
||||
@@ -298,6 +302,8 @@ func initialize(clock: SimulationKernel, state: Variant, seed := DEFAULT_WORLD_S
|
||||
register_command_executor(&"build_facility", Callable(self, "_execute_build_facility"))
|
||||
register_command_executor(&"cancel_construction", Callable(self, "_execute_cancel_construction"))
|
||||
register_command_executor(&"demolish_facility", Callable(self, "_execute_demolish_facility"))
|
||||
for command_type: StringName in [&"peeping_room_validate", &"peeping_room_place", &"peeping_room_relink", &"peeping_room_record_evidence"]:
|
||||
register_command_executor(command_type, Callable(self, "_execute_peeping_room"))
|
||||
register_command_executor(&"set_elevator_operation", Callable(self, "_execute_set_elevator_operation"))
|
||||
register_command_executor(&"start_excavation", Callable(self, "_execute_start_excavation"))
|
||||
register_command_executor(&"pause_excavation", Callable(self, "_execute_pause_excavation"))
|
||||
@@ -565,6 +571,8 @@ func create_snapshot() -> Dictionary:
|
||||
}
|
||||
if PurchaseQuoteV2.has_history(owned_systems[&"runtime"]):
|
||||
owned_systems[&"runtime"][&"runtime_schema_version"] = MIMI_PURCHASE_RUNTIME_SNAPSHOT_VERSION
|
||||
if not peeping_room_service.is_empty():
|
||||
owned_systems[&"runtime"][&"special_peeping_rooms"] = peeping_room_service.create_snapshot()
|
||||
# Every component above returns detached containers. Transfer this fresh
|
||||
# tree into the envelope instead of deep-copying all component snapshots a
|
||||
# second time. Keep generic capture's caller-owned-extra contract unchanged.
|
||||
@@ -666,6 +674,8 @@ func _restore_snapshot_internal(snapshot: Dictionary, recovery_mode: bool) -> bo
|
||||
runtime_current_keys.append(&"facility_cleanliness")
|
||||
if runtime_schema_version >= AUTO_PURCHASE_RUNTIME_SNAPSHOT_VERSION:
|
||||
runtime_current_keys.append(&"auto_purchase_plans")
|
||||
if runtime_data.has(&"special_peeping_rooms"):
|
||||
runtime_current_keys.append(&"special_peeping_rooms")
|
||||
if not _dictionary_has_exact_canonical_keys(runtime_data, runtime_current_keys) \
|
||||
or typeof(runtime_data.get(&"runtime_schema_version", null)) != TYPE_INT \
|
||||
or typeof(runtime_data.get(&"world_seed", null)) != TYPE_INT \
|
||||
@@ -1290,6 +1300,16 @@ func _restore_snapshot_internal(snapshot: Dictionary, recovery_mode: bool) -> bo
|
||||
var restored_next_id := int(runtime_data.get(&"next_command_id", 0))
|
||||
if restored_next_id <= 0:
|
||||
return false
|
||||
var restored_peeping_rooms := PeepingRooms.new()
|
||||
restored_peeping_rooms.configure(restored_world, restored_facilities, restored_construction, restored_path, restored_id_generator)
|
||||
if runtime_data.has(&"special_peeping_rooms"):
|
||||
if not runtime_data[&"special_peeping_rooms"] is Dictionary:
|
||||
return false
|
||||
for raw_key: Variant in runtime_data:
|
||||
if raw_key == &"special_peeping_rooms" and typeof(raw_key) != TYPE_STRING_NAME:
|
||||
return false
|
||||
if not restored_peeping_rooms.restore_section(runtime_data.get(&"special_peeping_rooms", null), restored_minute):
|
||||
return false
|
||||
if not SimulationSnapshot.restore(snapshot, _clock, _state):
|
||||
return false
|
||||
world_seed = restored_world_seed
|
||||
@@ -1297,6 +1317,7 @@ func _restore_snapshot_internal(snapshot: Dictionary, recovery_mode: bool) -> bo
|
||||
_staffing_projection_enabled = restored_staffing_projection
|
||||
command_queue = restored_queue
|
||||
id_generator = restored_id_generator
|
||||
peeping_room_service = restored_peeping_rooms
|
||||
domain_events = restored_domain_events
|
||||
_rng_streams = restored_streams
|
||||
world_service = restored_world
|
||||
@@ -5546,6 +5567,7 @@ func _connect_facility_signals() -> void:
|
||||
return
|
||||
facility_service.instance_registered.connect(Callable(self, "_on_cleanliness_facility_registered"))
|
||||
facility_service.instance_unregistered.connect(Callable(self, "_on_cleanliness_facility_unregistered"))
|
||||
facility_service.instance_unregistered.connect(Callable(self, "_on_peeping_target_removed"))
|
||||
facility_service.facility_state_changed.connect(Callable(self, "_on_facility_state_changed"))
|
||||
facility_service.service_started.connect(Callable(self, "_on_service_started"))
|
||||
facility_service.service_interrupted.connect(Callable(self, "_on_service_interrupted"))
|
||||
@@ -10817,6 +10839,7 @@ func _on_excavation_completed(report: Dictionary) -> void:
|
||||
))
|
||||
|
||||
func _on_facility_demolished(instance_id: StringName, refund: Dictionary) -> void:
|
||||
peeping_room_service.target_removed(instance_id)
|
||||
if not mana_network_service.get_node(instance_id).is_empty():
|
||||
mana_network_service.unregister_node(instance_id)
|
||||
if facility_service.has_instance(instance_id):
|
||||
@@ -10831,6 +10854,31 @@ func _on_facility_demolished(instance_id: StringName, refund: Dictionary) -> voi
|
||||
0
|
||||
))
|
||||
|
||||
func _on_peeping_target_removed(instance_id: StringName) -> void:
|
||||
peeping_room_service.target_removed(instance_id)
|
||||
|
||||
func _execute_peeping_room(command: SimulationCommand) -> CommandResult:
|
||||
var payload := command.payload
|
||||
var report: Dictionary
|
||||
if command.command_type == &"peeping_room_place":
|
||||
report = PeepingRooms.result(&"BUILD_DEFINITION_PENDING_D04")
|
||||
elif command.command_type == &"peeping_room_validate":
|
||||
if typeof(payload.get(&"origin")) != TYPE_VECTOR3I or typeof(payload.get(&"footprint", Vector2i(2, 1))) != TYPE_VECTOR2I or typeof(payload.get(&"target_instance_id", &"")) not in [TYPE_STRING, TYPE_STRING_NAME]:
|
||||
report = PeepingRooms.result(&"INVALID_PAYLOAD")
|
||||
else:
|
||||
report = peeping_room_service.validate_placement(payload[&"origin"], payload.get(&"footprint", Vector2i(2, 1)), StringName(payload.get(&"target_instance_id", &"")))
|
||||
else:
|
||||
var key: StringName = &"target_instance_id" if command.command_type == &"peeping_room_relink" else &"source_event_key"
|
||||
if typeof(payload.get(&"room_id")) not in [TYPE_STRING, TYPE_STRING_NAME] or typeof(payload.get(key, &"")) not in [TYPE_STRING, TYPE_STRING_NAME]:
|
||||
report = PeepingRooms.result(&"INVALID_PAYLOAD")
|
||||
elif command.command_type == &"peeping_room_relink":
|
||||
report = peeping_room_service.relink(StringName(payload[&"room_id"]), StringName(payload.get(key, &"")))
|
||||
else:
|
||||
report = peeping_room_service.record_evidence(StringName(payload[&"room_id"]), StringName(payload.get(key, &"")), _runtime_event_minute())
|
||||
if report[&"ok"]:
|
||||
return CommandResult.succeeded(command.command_id, report)
|
||||
return CommandResult.failed(CommandResult.Code.VALIDATION_FAILED, command.command_id, String(report[&"reason"]), report)
|
||||
|
||||
func _on_ledger_transaction_posted(transaction_id: StringName, _entries: Array) -> void:
|
||||
if _operations_flushing_economy_notifications.has(transaction_id):
|
||||
return
|
||||
|
||||
@@ -1809,13 +1809,13 @@ P00〜P29のIDを維持して過去記録との対応を保つ。各項目には
|
||||
|
||||
### P23 タワー画面 レイヤー演出
|
||||
|
||||
現在地: ドット断面、レイヤー表示、複数UIスキンは部分実装。原本全演出の受入は残る。
|
||||
現在地: P23-01およびP23-03は正式完了。生活の観察の全7条件・通常OS・同需要比較・別PID保存再開を同版証拠で受入。P23-02の保持操作・最大場面性能・Windows表示倍率実機、完成資産とP23全体の受入は残る。
|
||||
|
||||
統合前提: P08, P22。原本対応: B-2.2, B-11.1, B-11.4, B-12.1, B-12.2, B-12.4。
|
||||
|
||||
- P23-01 レイヤーと波紋。表時の裏半透明、裏時の表ワイヤー、魔法レンズ風の波紋を原本どおり接続する。 受入: 連続切替でも座標・選択・対象が一致し、描画層と操作対象を取り違えない。 状態: 正式完了。P23-01「レイヤーと波紋」を現採用1299/engine c7cccbf8に固定して原条件を監査。表時の裏半透明alpha0.22、裏時の表ワイヤー、魔法レンズ波紋のnative PNGを確認。局所16高速切替で全Runtime保持、通常OSで同位置の表受付/裏倉庫を選び12連続切替、Writer41689通常保存→Reader42598別PID通常読込と2切替で座標/有効選択/操作対象が一致。全51typed snapshotは切捨て/正規化なし、各PID内切替前後バイト一致、保存再開は保存成功から読込成功へのevent index12の2差分全文だけを保持。正式4members同SHA/圧縮checksum/展開長を確認。旧r01観測Nil→floatと診断を落としたgateは受入不可として保持、r02で観測可視性条件とstrict gateを修正し両GUI診断0。製品編集0、同版full172/14721と関連3suite、P04-03最終r04代表負荷CPU実描画rawを再用、重複全回帰0。 原work/acceptanceと適用横断条件を同1名が全受入し、本成果単位不足0で9件目として正式完了。 P23-02/03、Windows表示倍率/実機部分確認、リアルタイムx3/レンズ単独GPU費用・全性能予算、完成素材と全ゲームは未受入。
|
||||
- P23-02 断面の操作性。パン、上下スクロール、ズーム、建設グリッド、接続警告、HUD配置を整える。 受入: 小画面とWindows表示倍率で読めて押せる。x3時にも操作が追随する。 状態: 着手中。P23-02は着手中、次に閉じる1件を維持。制作r32を保持し、作業候補をr53から未採用r62へ選定。親r58の接続ID派生memoを保持し、r62はshared木のindices.has+添字をget(default -1)へ1箇所だけ置換、非正辺拒否・workspace非負index・探索順/費用/親/wrap/full fallbackを保持。元r58全Pathへ逆変換一致・他1298ref同一、warm32/補足12証拠は不変getter/helper/無効化/Save境界だけ再利用。同一r62の全木36・transit/partial14・全150候補/全Runtime19/0・境界24件179/0・経路15/配列所有83/0・旧仕様12群726/0を独立有限受理。fresh順58,62,62,58,58,62・同646/cold/paused/speed1/外部listenerなし3pair:2152153→2069843us;2104659→2063915us;2173628→2124916us。全6after64711487732bytes基準全文一致、3対全短縮、中央値2152153→2069843us(有限約3.82454%短縮)。比較QA初版の受付差は実行前拒否、r01/r02未実行保持、受付だけ修復したr03を実行。r60は50木呼出/50開始/50完全キー/重複0で固定窓の木再利用を支持せず。r61の7計測は包含時間で合算不可、shared木50回591877usを次変更の根拠にした診断のみ。約2.06〜2.12秒同期処理が残り予算/P95/D10/通常OS/x3は未達、制作採用はしない。正確な最終版の影響・全172は関連必要変更を固めて実施。原9横断8/通常OS647以降/x3・終了/小画面/同一Windows配布版実機倍率は全未達。Ctrl保持wheel/左保持dragは延期・未達・免除なし。正式9/着手19/予定60・30パッケージ/88成果・部分点なしを維持。
|
||||
- P23-03 生活の観察。部屋、行列、EV、職員、物資、営業状態が断面上で理解できる表示へ調整する。 受入: 人物や設備の表示が実状態に対応し、同需要の動線改善を観察できる。
|
||||
- P23-03 生活の観察。部屋、行列、EV、職員、物資、営業状態が断面上で理解できる表示へ調整する。 受入: 人物や設備の表示が実状態に対応し、同需要の動線改善を観察できる。 状態: 正式完了。P23-03「生活の観察」を正式完了。提出d2581af、main基点5041b88、実試験tree a700519、実統合/最終314a8a4。全7原条件を別Opus5.5がpass、重大/高/中指摘0。実通常OS88要求/88ACK・4別PID終了・両配置の全正式モデル保存再開一致、40画像838行を実7Opus判断へ全照合。同需要全対象の到着分合計7153→2585。局所146/portable4・native4/548・同版全179/21752/322parse/181owned終了を再利用し、通常validate/review/integration/finalが成立。low2は原判定を保持し実所在と時系列を補記。P23-02、Windows、最大場面性能、完成資産・全施設・通しゲームは別未達。 版付き全条件証拠: execution/p23-03-resume-20261017/ACCEPTANCE_CLOSED_314A8A4.json。原30/88、正式14、部分点なし。
|
||||
|
||||
### P24 インスペクター 通知 操作完成
|
||||
|
||||
|
||||
+68
-2
@@ -78,7 +78,7 @@
|
||||
"template": "Required kitchen: <checks> checks, <failures> failures",
|
||||
"required": true,
|
||||
"fixed_check_count_used": false,
|
||||
"source_sha256_at_schema_audit": "90e7639f5aa76e34b9ee14769f4ec1ae1317a647900b27877075dbf21ef1dfcf",
|
||||
"source_sha256_at_schema_audit": "3a9c92f80c24064ef0858fba10bd7caab63203932942837f7e142349578f6b2f",
|
||||
"authority": {
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p09-kitchen-single-link-candidate-r09/candidates/tests/business/test_required_kitchen.gd",
|
||||
"sha256": "90e7639f5aa76e34b9ee14769f4ec1ae1317a647900b27877075dbf21ef1dfcf",
|
||||
@@ -86,7 +86,7 @@
|
||||
},
|
||||
"source_marker_lines": [
|
||||
{
|
||||
"line": 281,
|
||||
"line": 481,
|
||||
"text": "\tprint(\"Required kitchen: %d checks, %d failures\" % [checks, failures])"
|
||||
}
|
||||
]
|
||||
@@ -3724,6 +3724,72 @@
|
||||
"scope": "normal placement; native and OS pending"
|
||||
}
|
||||
}
|
||||
,{
|
||||
"test": "tests/ui/test_p23_life_observation.gd",
|
||||
"template": "P23 life observation: <checks> checks, <failures> failures",
|
||||
"required": true,
|
||||
"fixed_check_count_used": false,
|
||||
"source_sha256_at_schema_audit": "750254af7d4b8b00508e25d1ef744837d3a7d14ddebe12398e8014bf5e8c68e8",
|
||||
"authority": {
|
||||
"path": "docs/spec/acceptance/P23-03.json",
|
||||
"scope": "component and read-only observation only; native unexecuted; whole unit blocked"
|
||||
}
|
||||
},
|
||||
{
|
||||
"test": "tests/special/test_peeping_room_geometry.gd",
|
||||
"template": "Peeping room geometry: <checks> checks, <failures> failures",
|
||||
"required": true,
|
||||
"fixed_check_count_used": false,
|
||||
"source_sha256_at_schema_audit": "103d85f83e1e97a8637892504264275eef23f172eeec56c94e5c022d81bf6945",
|
||||
"authority": {
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p13-02/CODE1_TASK_SPEC.json",
|
||||
"scope": "new backend suite marker; native execution pending"
|
||||
}
|
||||
},
|
||||
{
|
||||
"test": "tests/special/test_peeping_room_reference.gd",
|
||||
"template": "Peeping room reference: <checks> checks, <failures> failures",
|
||||
"required": true,
|
||||
"fixed_check_count_used": false,
|
||||
"source_sha256_at_schema_audit": "188b00a60f7aefda69dc4973f1de9c14447a0d4bcdd1257a2eabe7c4782e4caf",
|
||||
"authority": {
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p13-02/CODE1_TASK_SPEC.json",
|
||||
"scope": "new backend suite marker; native execution pending"
|
||||
}
|
||||
},
|
||||
{
|
||||
"test": "tests/special/test_peeping_room_evidence.gd",
|
||||
"template": "Peeping room evidence: <checks> checks, <failures> failures",
|
||||
"required": true,
|
||||
"fixed_check_count_used": false,
|
||||
"source_sha256_at_schema_audit": "390e0032d14de9a8875ced163a922341ce655744200d78b4ffa776d42c4f8c2a",
|
||||
"authority": {
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p13-02/CODE1_TASK_SPEC.json",
|
||||
"scope": "new backend suite marker; native execution pending"
|
||||
}
|
||||
},
|
||||
{
|
||||
"test": "tests/special/test_peeping_room_save.gd",
|
||||
"template": "Peeping room save: <checks> checks, <failures> failures",
|
||||
"required": true,
|
||||
"fixed_check_count_used": false,
|
||||
"source_sha256_at_schema_audit": "ba0e7644277477c1821135cae6d6fd533651799c6f9bd8c43ccf45e63b96c63c",
|
||||
"authority": {
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p13-02/CODE1_TASK_SPEC.json",
|
||||
"scope": "new backend suite marker; native execution pending"
|
||||
}
|
||||
},
|
||||
{
|
||||
"test": "tests/special/test_peeping_room_runtime.gd",
|
||||
"template": "Peeping room runtime: <checks> checks, <failures> failures",
|
||||
"required": true,
|
||||
"fixed_check_count_used": false,
|
||||
"source_sha256_at_schema_audit": "924efd34414c12a325a1b700f799aef0396de9f15441fd88a3608292ff221657",
|
||||
"authority": {
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p13-02/CODE1_TASK_SPEC.json",
|
||||
"scope": "new backend suite marker; native execution pending"
|
||||
}
|
||||
}
|
||||
],
|
||||
"unknown_roster_suite_policy": "refuse, explicitly review its source/schema before accepting",
|
||||
"roster_count_is_not_hardcoded": true,
|
||||
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
e15606fdbdc67305730ac9b2aaa8eeef91c9f1c8
|
||||
100644 9438e65c214f6d4732deee1a86853713f6a62f49 1 docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json
|
||||
100644 2eecb803f5eb6774ff38cd353de1f02847aeb0f9 2 docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json
|
||||
100644 06b74d1d442f1e412dbbb39292ad18774a149bf2 3 docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json
|
||||
100644 5e0252dba4d44335d6d0e1721c0906d9eb1c91de 1 scenes/main/main.gd
|
||||
100644 fff37f082d750bb91c71f2aa54d168c9e2cb8fe7 2 scenes/main/main.gd
|
||||
100644 2adc769cb26d7e4163fa8b2f256b10d8034d4cb5 3 scenes/main/main.gd
|
||||
100644 e1f5b0eb86b64b64216000c48d62e28555dc6536 1 scenes/main/world_preview.gd
|
||||
100644 fa32fe0344d20565b6d542da1256a94e8dee1845 2 scenes/main/world_preview.gd
|
||||
100644 5ebf3bd77a2cb114315ea6cb3ce03b47152ab7a0 3 scenes/main/world_preview.gd
|
||||
100644 dd284aea52a6de48d5322048d5ad201342cd05e5 1 tools/regression/suite-policy.json
|
||||
100644 ad194ae425fb8123fa191ed3635f404c098f692d 2 tools/regression/suite-policy.json
|
||||
100644 b233e06a0cdacc18643df1b9de76c73b95dd850a 3 tools/regression/suite-policy.json
|
||||
|
||||
Auto-merging docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json
|
||||
CONFLICT (content): Merge conflict in docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json
|
||||
Auto-merging scenes/main/main.gd
|
||||
CONFLICT (content): Merge conflict in scenes/main/main.gd
|
||||
Auto-merging scenes/main/world_preview.gd
|
||||
CONFLICT (content): Merge conflict in scenes/main/world_preview.gd
|
||||
Auto-merging tools/regression/suite-policy.json
|
||||
CONFLICT (content): Merge conflict in tools/regression/suite-policy.json
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"actual_project": "the-tree-p04-01",
|
||||
"actual_task": "P04-01",
|
||||
"actual_run": "13e728da6d8b449d9310fb72149a0aea",
|
||||
"actual_role": "commander",
|
||||
"actual_model": "claude-opus-5-5",
|
||||
"action": "wait for P04 only; propose independent existing P24-02",
|
||||
"codex_model": "gpt-6.1-sol",
|
||||
"no_worker_dispatched": true,
|
||||
"decision_is_selection_only": true,
|
||||
"result_sha256": "9322423e484de9a300738257ecf768459ef1a167916b148fd5c2b8984714f718",
|
||||
"provider_stdout_sha256": "1e03de68115d4fdc4261c2a78110fdfb71a9eb5b36c09ec3f7562710524c8b95"
|
||||
}
|
||||
+98
@@ -0,0 +1,98 @@
|
||||
{
|
||||
"plan_id": "P24-02",
|
||||
"title": "操作と通知",
|
||||
"state": "in_progress; existing Runner submitted, read-only acceptance re-audit started",
|
||||
"original_denominator": {
|
||||
"packages": 30,
|
||||
"units": 88,
|
||||
"completed": 14,
|
||||
"partial_credit": false
|
||||
},
|
||||
"source": "9641ed52def2ff8e5b0222449a4a83a1191e1d37",
|
||||
"current_main": "32c8d1ce4314f821fe2eb3713fe5c6309b98e4c3",
|
||||
"existing_project": "the-tree-p24-02-operations",
|
||||
"existing_worker_checkout": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p24-02-operations/P24-02-implement",
|
||||
"runner_repairs_used": 3,
|
||||
"max_repairs": null,
|
||||
"worker_registered": "agy (existing UI assignment retained; no new worker or model switch performed)",
|
||||
"spec_sha256": "7f4258ef94169c516b5cd1a49a96d0c41f306ca2a05203a8c2a6475b69a1a9ee",
|
||||
"actual_opus_selection": "docs/plans/original-completion-2026-10-02/execution/next-closure-after-p23-20261017/result.json",
|
||||
"all_eight_original_conditions": [
|
||||
{
|
||||
"condition_id": "placement_and_invalid_drop",
|
||||
"all_original_required_text": "Original grid snap and connection warnings; valid placement commits once, invalid placement/assignment explains the actual rejection, leaves model/ledger/selection intact, supports equivalent click-based operation.",
|
||||
"whole_condition_accepted": false,
|
||||
"existing_limited_evidence_candidate": "ordinary-controls-observations-r05.json; limited valid reception and overlap rejection, full model/selection preserved.",
|
||||
"missing_or_dependencies": "Invalid assignment/drop, real rejection call paths and equivalent click operations require exact final-source coverage."
|
||||
},
|
||||
{
|
||||
"condition_id": "modal_and_pause_resume",
|
||||
"all_original_required_text": "Modal open/cancel/confirm, input focus, pausing and resuming preserve pending commands and save identity. Behind-dialog input cannot accidentally build or change assignment. Actual pause freezes simulation and ordinary resume continues exactly once.",
|
||||
"whole_condition_accepted": false,
|
||||
"existing_limited_evidence_candidate": "ordinary-controls-observations-r05.json and ordinary-menu-os-observations-r02.json; limited modal open/cancel, IME focus, save/load.",
|
||||
"missing_or_dependencies": "All modal cancel/confirm, actual behind-dialog input limits, pending commands, actual pause freeze/resume once require mapped evidence."
|
||||
},
|
||||
{
|
||||
"condition_id": "unit_bubbles",
|
||||
"all_original_required_text": "Unit overhead Zzz, anger, heart correspond to actual existing state. Observe source/model/render bindings and switching/removal without stale symbols; do not invent gameplay thresholds or hidden approved values.",
|
||||
"whole_condition_accepted": false,
|
||||
"existing_limited_evidence_candidate": "Existing source bindings were retained by old 9641 candidate; no new whole-condition evidence inferred.",
|
||||
"missing_or_dependencies": "Real Zzz/anger/heart states, switching and removal without stale symbol; recheck current Runtime and draw source after integration conflicts resolved."
|
||||
},
|
||||
{
|
||||
"condition_id": "event_log",
|
||||
"all_original_required_text": "Actual production events reach bounded recent log in sequence, readable Japanese with correct amounts/time/reasons, no duplicate events across pause/load. Reuse accepted256-entry log only with matching source applicability.",
|
||||
"whole_condition_accepted": false,
|
||||
"existing_limited_evidence_candidate": "Existing local log34 and accepted P24-03 bounded256 evidence are candidates for exact applicability reuse.",
|
||||
"missing_or_dependencies": "Current production event sequence, readable time/amount/reason, pause/load no duplicate; current UI and Runtime source must match."
|
||||
},
|
||||
{
|
||||
"condition_id": "important_warning_cutin",
|
||||
"all_original_required_text": "Original important-warning UI for invasion start, duel, defense start is connected to actual existing signals/states with clear text, dismiss/stop/resume behavior; fixture-only signal injection is local testing, not proof ordinary production trigger. Missing upstream/catalog/assets remain explicit dependencies, do not claim complete.",
|
||||
"whole_condition_accepted": false,
|
||||
"existing_limited_evidence_candidate": "Prior limited shield-positive-to-zero warning text review; fixtures are local-only. P18 backend265ce30 integrated5f6bc11 is accepted backend only.",
|
||||
"missing_or_dependencies": "Actual ordinary NTR/duel/defense triggers still depend on whole P18-01/02, P19-01, P21-01 and required content; no synthetic signal pass or invented values. Read upstream-audit-r01 before choosing implementation."
|
||||
},
|
||||
{
|
||||
"condition_id": "click_alternatives",
|
||||
"all_original_required_text": "Provide/verify click equivalents for necessary pointer/drag/modifier navigation and assignment operations. Reuse existing step/zoom/bounds mechanisms and scales; presentation controls must not change gameplay model. Manual P23 held gestures remain deferred, not waived or relabeled.",
|
||||
"whole_condition_accepted": false,
|
||||
"existing_limited_evidence_candidate": "Actual normal menu save-label entrance and limited placement controls.",
|
||||
"missing_or_dependencies": "Map every required navigation/assignment equivalent. Preserve deferred P23 held gestures as unmet, not waived."
|
||||
},
|
||||
{
|
||||
"condition_id": "japanese_input_and_scale",
|
||||
"all_original_required_text": "Actual OS Japanese composition/confirmation/cancel, persisted display of valid Japanese text and clear invalid-input feedback, representative window/display scales with clipping/focus/modal inspection. Use existing save display_name metadata for an editable optional Japanese save label if a suitable text field is absent; retain existing default name, cryptographic owned path, old-save preservation and cancel semantics. Do not add new gameplay numbers or rename save paths to user text. Explicitly classify macOS current development verification and still-required same-Windows-release platform acceptance; do not transfer prior Windows evidence.",
|
||||
"whole_condition_accepted": false,
|
||||
"existing_limited_evidence_candidate": "ordinary-menu-os-observations-r02.json and preservation-r03: actual IME cancel/confirm, Japanese display_name, old4file content preservation, distinct PID snapshot equality for one construction scenario.",
|
||||
"missing_or_dependencies": "Invalid labels, every required scale/focus/clip/modal scenario, full applicable content and same-Windows candidate real-device conditions remain. Reuse only if exact relevant UI/input/source/settings/environment match."
|
||||
},
|
||||
{
|
||||
"condition_id": "final_validation_review",
|
||||
"all_original_required_text": "Static/import, local/affected tests first; batch related fixes then run required full roster on exact final game/source/settings. Exact version/source hashes/config/inputs/artifacts and condition status. Independent separate Claude review with actual runtime evidence (not pending templates alone), current-main integration and final validation. All required conditions/evidence must hold to close P24-02; no partial credit, no counts as acceptance.",
|
||||
"whole_condition_accepted": false,
|
||||
"existing_limited_evidence_candidate": "Submitted local-r06 3suites167checks, parse and limited independent delta review only; no whole8 acceptance.",
|
||||
"missing_or_dependencies": "Resolve actual four current-main merge conflicts retaining both accepted P23/source guards and existing P24 implementation; then static/local/impact, missing actual OS/upstream scenarios, exact final full once, registered validate, separate whole8 Opus review, normal prepare-integration/integration/final and ledger. Reuse matching current full only when all selected source/settings/input/engine pins truly match."
|
||||
}
|
||||
],
|
||||
"current_main_preflight": {
|
||||
"exit_code": 1,
|
||||
"conflict_paths": [
|
||||
"docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json",
|
||||
"scenes/main/main.gd",
|
||||
"scenes/main/world_preview.gd",
|
||||
"tools/regression/suite-policy.json"
|
||||
],
|
||||
"not_an_integration_candidate": true,
|
||||
"not_tested_or_accepted": true
|
||||
},
|
||||
"registered_build_directory_currently_exists": false,
|
||||
"raw_proof_location_audit": "docs/plans/original-completion-2026-10-02/execution/next-closure-after-p23-20261017/P24_EXISTING_LIMITED_EVIDENCE_LOCATION_AND_SHA_AUDIT.json",
|
||||
"next_bounded_action": "Have the existing P24 commander inspect these actual eight-condition/source/conflict/proof facts and direct one legal same-task continuation. Root does not start a duplicate worker or force submitted to repair_pending. Missing local old proof must use exact archive restore if needed; no repeated full run just to replace available proof.",
|
||||
"P04_four_unapproved_rules": "Remain pending independent of P24; approved hold/reservation/18:00 rules unchanged.",
|
||||
"new_engine_runs": 0,
|
||||
"new_worker_runs": 0,
|
||||
"new_full_regression_runs": 0,
|
||||
"unit_accepted": false,
|
||||
"audited_at_jst": "2026-10-17T00:26:02.956343+09:00"
|
||||
}
|
||||
+491
@@ -0,0 +1,491 @@
|
||||
{
|
||||
"source": "9641ed52def2ff8e5b0222449a4a83a1191e1d37",
|
||||
"audited_at_jst": "2026-10-17T00:26:02.956343+09:00",
|
||||
"scope": "Read-only legacy proof availability/pins only; does not establish current main/source applicability or full P24 acceptance. No engine/OS/test started.",
|
||||
"total_references": 60,
|
||||
"local_matching": 60,
|
||||
"local_mismatching": 0,
|
||||
"local_unavailable": 0,
|
||||
"rows": [
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/submitted-local-r06.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-local-native-preflight-r06/local-ended.json",
|
||||
"expected_sha256": "a49a9229bc3bde09aebff72daafbfe99d159da9bf1dfc702b036640946654b64",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "a49a9229bc3bde09aebff72daafbfe99d159da9bf1dfc702b036640946654b64",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/submitted-local-r06.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-local-native-preflight-r06/runner-input.json",
|
||||
"expected_sha256": "577442ab27679b03c4c25a8b0d362aed871599d7c37675aaafd41fa80579dd70",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "577442ab27679b03c4c25a8b0d362aed871599d7c37675aaafd41fa80579dd70",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-menu-os-observations-r02.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-ime-normal-r02/started.json",
|
||||
"expected_sha256": "d40a0252aa547b049d30cdc9a15774131438b2535f808ead128f0f86f7bf5954",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "d40a0252aa547b049d30cdc9a15774131438b2535f808ead128f0f86f7bf5954",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-menu-os-observations-r02.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-ime-normal-r02/process-started.json",
|
||||
"expected_sha256": "5ba807e0ee65944815542648108322586f4730b074abebb0b117dd61071140b1",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "5ba807e0ee65944815542648108322586f4730b074abebb0b117dd61071140b1",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-menu-os-observations-r02.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-ime-normal-r02/ended.json",
|
||||
"expected_sha256": "0b188dcb42995ee09205f233116665cbf54f59a7d1e93f9d2aafc07779ae19a3",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "0b188dcb42995ee09205f233116665cbf54f59a7d1e93f9d2aafc07779ae19a3",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-menu-os-observations-r02.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-ime-normal-r02/events.jsonl",
|
||||
"expected_sha256": "efa3f0eca8bf0001edc89041d968a0fdf9f474ddd5a6803db2a138e4dfd53cc5",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "efa3f0eca8bf0001edc89041d968a0fdf9f474ddd5a6803db2a138e4dfd53cc5",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-menu-os-observations-r02.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-ime-normal-r02/passive_os.gd",
|
||||
"expected_sha256": "66e60f81f836fe648f9011660d0255f5c4b780bfdacc820829c90bb655022880",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "66e60f81f836fe648f9011660d0255f5c4b780bfdacc820829c90bb655022880",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-menu-os-observations-r02.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-ime-normal-consumer-r02/started.json",
|
||||
"expected_sha256": "64ad63ae5b4339cd639f2d22fa076caa7d8d3f9501337fadadc1d4dcfcbbe2d0",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "64ad63ae5b4339cd639f2d22fa076caa7d8d3f9501337fadadc1d4dcfcbbe2d0",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-menu-os-observations-r02.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-ime-normal-consumer-r02/process-started.json",
|
||||
"expected_sha256": "f116952d77720858065576f41df7116f384801e6c27acb6cf339a329589627b0",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "f116952d77720858065576f41df7116f384801e6c27acb6cf339a329589627b0",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-menu-os-observations-r02.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-ime-normal-consumer-r02/ended.json",
|
||||
"expected_sha256": "22d0ffd1ea18c06a46dc7aa977613385d3ae5f4a81dab9ed4650f9c10d044d68",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "22d0ffd1ea18c06a46dc7aa977613385d3ae5f4a81dab9ed4650f9c10d044d68",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-menu-os-observations-r02.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-ime-normal-consumer-r02/events.jsonl",
|
||||
"expected_sha256": "369eb5e182fcf5b21693380198df187654b508e288c08f6ecb0d3aa6af4ec0ca",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "369eb5e182fcf5b21693380198df187654b508e288c08f6ecb0d3aa6af4ec0ca",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-menu-os-observations-r02.json",
|
||||
"path": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-393c3655f3e84483b9c24fd5d2955dd2-p24-02-os/saves/manual_ui_5e9f8ca3662a2ddf42984ba1403675a7/manifest.json",
|
||||
"expected_sha256": "e8537a6f6cba53683cca36794adc08f7c5958b78ced74fa06e499a3f8c123e4a",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "e8537a6f6cba53683cca36794adc08f7c5958b78ced74fa06e499a3f8c123e4a",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-menu-os-observations-r02.json",
|
||||
"path": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-393c3655f3e84483b9c24fd5d2955dd2-p24-02-os/saves/manual_ui_5e9f8ca3662a2ddf42984ba1403675a7/world.bin",
|
||||
"expected_sha256": "0424074b51f327ffb3ce3dc8e92ccb2d9d04d657db6e1461cdb83541f1cc0bee",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "0424074b51f327ffb3ce3dc8e92ccb2d9d04d657db6e1461cdb83541f1cc0bee",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-save-preservation-observations-r03.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-preservation-r03/started.json",
|
||||
"expected_sha256": "bc05d5ef0ec62a3fc46e5b957f3724ef95c339078bc02eee04b3c42632bbe1ab",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "bc05d5ef0ec62a3fc46e5b957f3724ef95c339078bc02eee04b3c42632bbe1ab",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-save-preservation-observations-r03.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-preservation-r03/process-started.json",
|
||||
"expected_sha256": "d6d981e157cd7e68a08e9e0133f81faac4113a48d03e74deb04d380cb03e41b1",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "d6d981e157cd7e68a08e9e0133f81faac4113a48d03e74deb04d380cb03e41b1",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-save-preservation-observations-r03.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-preservation-r03/ended.json",
|
||||
"expected_sha256": "bf42d9666d4fe27051403f7d00a96f17abaa1e9b551db9d13c49ee8f7130d5c6",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "bf42d9666d4fe27051403f7d00a96f17abaa1e9b551db9d13c49ee8f7130d5c6",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-save-preservation-observations-r03.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-preservation-r03/events.jsonl",
|
||||
"expected_sha256": "104fb16b406dd123b77356ef98bd5a8f0bd595d660be0870c881cfbf30ce7302",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "104fb16b406dd123b77356ef98bd5a8f0bd595d660be0870c881cfbf30ce7302",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-save-preservation-observations-r03.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-preservation-r03/passive_os.gd",
|
||||
"expected_sha256": "6dceadb5abdf48fda403571f84b6a682a05e7f9ccd64391f2f51176cb5dd842b",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "6dceadb5abdf48fda403571f84b6a682a05e7f9ccd64391f2f51176cb5dd842b",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-save-preservation-observations-r03.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-preservation-r03/preexisting-slot-before.json",
|
||||
"expected_sha256": "aed601473efa522c41e5ca8890c11f1eeb2b06e786fb76cba1e96263934efe82",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "aed601473efa522c41e5ca8890c11f1eeb2b06e786fb76cba1e96263934efe82",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-save-preservation-observations-r03.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-preservation-r03/preexisting-slot-after.json",
|
||||
"expected_sha256": "efb7170f0579bed92a42ead7c03b70dfc37df1e55dde05a96ae67666c6e38063",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "efb7170f0579bed92a42ead7c03b70dfc37df1e55dde05a96ae67666c6e38063",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-save-preservation-observations-r03.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-preservation-consumer-r03/started.json",
|
||||
"expected_sha256": "135b779ce605d491bc6110235e9827c4091fefe8b86a49222655b3b713adcad7",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "135b779ce605d491bc6110235e9827c4091fefe8b86a49222655b3b713adcad7",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-save-preservation-observations-r03.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-preservation-consumer-r03/process-started.json",
|
||||
"expected_sha256": "e33badfd0b68ff97ce8459fed3a6a6d7275d938fbc1705c82cea94e7ded66314",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "e33badfd0b68ff97ce8459fed3a6a6d7275d938fbc1705c82cea94e7ded66314",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-save-preservation-observations-r03.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-preservation-consumer-r03/ended.json",
|
||||
"expected_sha256": "353cfa8e5ea703cb777bf0796b8a0f2f7fa55a5a36b69585414d5e7a16fae94c",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "353cfa8e5ea703cb777bf0796b8a0f2f7fa55a5a36b69585414d5e7a16fae94c",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-save-preservation-observations-r03.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-preservation-consumer-r03/events.jsonl",
|
||||
"expected_sha256": "2f93c17152ed41dbbbd7b70b79383591a02ef0f9939d03cf340665ed4ee70ef7",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "2f93c17152ed41dbbbd7b70b79383591a02ef0f9939d03cf340665ed4ee70ef7",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-save-preservation-observations-r03.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-preservation-consumer-r03/passive_os.gd",
|
||||
"expected_sha256": "6dceadb5abdf48fda403571f84b6a682a05e7f9ccd64391f2f51176cb5dd842b",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "6dceadb5abdf48fda403571f84b6a682a05e7f9ccd64391f2f51176cb5dd842b",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-save-preservation-observations-r03.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-preservation-consumer-r03/snapshot-000.bin",
|
||||
"expected_sha256": "b242cc87abd49bb80d74b7904cfa3492ef57b59e9acfe014e12b35387990da3d",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "b242cc87abd49bb80d74b7904cfa3492ef57b59e9acfe014e12b35387990da3d",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-save-preservation-observations-r03.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-preservation-consumer-r03/loaded-stored-snapshot.bin",
|
||||
"expected_sha256": "b242cc87abd49bb80d74b7904cfa3492ef57b59e9acfe014e12b35387990da3d",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "b242cc87abd49bb80d74b7904cfa3492ef57b59e9acfe014e12b35387990da3d",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-save-preservation-observations-r03.json",
|
||||
"path": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-41ed37cd3b6c4de8908b4bba8fe20724-p24-02-os/saves/manual_ui/manifest.json",
|
||||
"expected_sha256": "62d801bb42100ade11f3f4957bff85cac7fea573dcefea97faf3806c8a29c669",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "62d801bb42100ade11f3f4957bff85cac7fea573dcefea97faf3806c8a29c669",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-save-preservation-observations-r03.json",
|
||||
"path": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-41ed37cd3b6c4de8908b4bba8fe20724-p24-02-os/saves/manual_ui/world.bin",
|
||||
"expected_sha256": "da65a181c934bf8fe0a2969db5c074863b03cf2483f2b039e5dd588b809b80b3",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "da65a181c934bf8fe0a2969db5c074863b03cf2483f2b039e5dd588b809b80b3",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-save-preservation-observations-r03.json",
|
||||
"path": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-41ed37cd3b6c4de8908b4bba8fe20724-p24-02-os/saves/manual_ui_6789d75c74d103ad3912e8992a815680/manifest.json",
|
||||
"expected_sha256": "cd450b442c37d497735888f6b96076ba482dca72a420aed1cf6568eb3723824b",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "cd450b442c37d497735888f6b96076ba482dca72a420aed1cf6568eb3723824b",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-save-preservation-observations-r03.json",
|
||||
"path": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-41ed37cd3b6c4de8908b4bba8fe20724-p24-02-os/saves/manual_ui_6789d75c74d103ad3912e8992a815680/world.bin",
|
||||
"expected_sha256": "a0eb8af6fbb6abcdaea0375b4298164013229c3ba187a9d4c1e54d37ecb75202",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "a0eb8af6fbb6abcdaea0375b4298164013229c3ba187a9d4c1e54d37ecb75202",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/started.json",
|
||||
"expected_sha256": "64397b2e4b9cf67faf78bd02848492895111ac0b0b32c9d4fd629e481103b094",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "64397b2e4b9cf67faf78bd02848492895111ac0b0b32c9d4fd629e481103b094",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/process-started.json",
|
||||
"expected_sha256": "3b73172fa0124a5ef47f7004d5ae4144b057279b7246e8dd4eb84cc5a1097c17",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "3b73172fa0124a5ef47f7004d5ae4144b057279b7246e8dd4eb84cc5a1097c17",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/ended.json",
|
||||
"expected_sha256": "9bbdf3d512b5f5ae4a8f9595da1cac52587a5f05009869ec7e0d7c8099c4ed8a",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "9bbdf3d512b5f5ae4a8f9595da1cac52587a5f05009869ec7e0d7c8099c4ed8a",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/events.jsonl",
|
||||
"expected_sha256": "f456f8013343264573c6cab8c7be99807210cb889a78f0a1db1461989d46a3dc",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "f456f8013343264573c6cab8c7be99807210cb889a78f0a1db1461989d46a3dc",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/passive_os.gd",
|
||||
"expected_sha256": "552f9bb40770f1a88bbfb41586782e4f8ba8dff29776336ab83ba64dbd2f4767",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "552f9bb40770f1a88bbfb41586782e4f8ba8dff29776336ab83ba64dbd2f4767",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/ui-snapshot-000.bin",
|
||||
"expected_sha256": "dfea6817f87a9c79cc970f65e19991e60741277244106f770341d71185321fd4",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "dfea6817f87a9c79cc970f65e19991e60741277244106f770341d71185321fd4",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/ui-snapshot-001.bin",
|
||||
"expected_sha256": "dfea6817f87a9c79cc970f65e19991e60741277244106f770341d71185321fd4",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "dfea6817f87a9c79cc970f65e19991e60741277244106f770341d71185321fd4",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/ui-snapshot-002.bin",
|
||||
"expected_sha256": "17399e4292ef33b29079f361bf91d853f0a1b036066e4e23707840d30deac4a3",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "17399e4292ef33b29079f361bf91d853f0a1b036066e4e23707840d30deac4a3",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/ui-snapshot-003.bin",
|
||||
"expected_sha256": "17399e4292ef33b29079f361bf91d853f0a1b036066e4e23707840d30deac4a3",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "17399e4292ef33b29079f361bf91d853f0a1b036066e4e23707840d30deac4a3",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/ui-snapshot-004.bin",
|
||||
"expected_sha256": "17399e4292ef33b29079f361bf91d853f0a1b036066e4e23707840d30deac4a3",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "17399e4292ef33b29079f361bf91d853f0a1b036066e4e23707840d30deac4a3",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/ui-snapshot-005.bin",
|
||||
"expected_sha256": "17399e4292ef33b29079f361bf91d853f0a1b036066e4e23707840d30deac4a3",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "17399e4292ef33b29079f361bf91d853f0a1b036066e4e23707840d30deac4a3",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/ui-snapshot-006.bin",
|
||||
"expected_sha256": "17399e4292ef33b29079f361bf91d853f0a1b036066e4e23707840d30deac4a3",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "17399e4292ef33b29079f361bf91d853f0a1b036066e4e23707840d30deac4a3",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/ui-snapshot-007.bin",
|
||||
"expected_sha256": "17399e4292ef33b29079f361bf91d853f0a1b036066e4e23707840d30deac4a3",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "17399e4292ef33b29079f361bf91d853f0a1b036066e4e23707840d30deac4a3",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/ui-snapshot-000.json",
|
||||
"expected_sha256": "ec054c36513cf2bc19b4743862b99a6d56ae0cffebe413d731c9ebb6ab53f237",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "ec054c36513cf2bc19b4743862b99a6d56ae0cffebe413d731c9ebb6ab53f237",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/ui-snapshot-001.json",
|
||||
"expected_sha256": "ec054c36513cf2bc19b4743862b99a6d56ae0cffebe413d731c9ebb6ab53f237",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "ec054c36513cf2bc19b4743862b99a6d56ae0cffebe413d731c9ebb6ab53f237",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/ui-snapshot-002.json",
|
||||
"expected_sha256": "07cebb2a71ff0c63608f8a218a03618e9504fd171d8c7059b15bcf901dc5f8ec",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "07cebb2a71ff0c63608f8a218a03618e9504fd171d8c7059b15bcf901dc5f8ec",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/ui-snapshot-003.json",
|
||||
"expected_sha256": "07cebb2a71ff0c63608f8a218a03618e9504fd171d8c7059b15bcf901dc5f8ec",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "07cebb2a71ff0c63608f8a218a03618e9504fd171d8c7059b15bcf901dc5f8ec",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/ui-snapshot-004.json",
|
||||
"expected_sha256": "07cebb2a71ff0c63608f8a218a03618e9504fd171d8c7059b15bcf901dc5f8ec",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "07cebb2a71ff0c63608f8a218a03618e9504fd171d8c7059b15bcf901dc5f8ec",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/ui-snapshot-005.json",
|
||||
"expected_sha256": "07cebb2a71ff0c63608f8a218a03618e9504fd171d8c7059b15bcf901dc5f8ec",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "07cebb2a71ff0c63608f8a218a03618e9504fd171d8c7059b15bcf901dc5f8ec",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/ui-snapshot-006.json",
|
||||
"expected_sha256": "07cebb2a71ff0c63608f8a218a03618e9504fd171d8c7059b15bcf901dc5f8ec",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "07cebb2a71ff0c63608f8a218a03618e9504fd171d8c7059b15bcf901dc5f8ec",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/ui-snapshot-007.json",
|
||||
"expected_sha256": "07cebb2a71ff0c63608f8a218a03618e9504fd171d8c7059b15bcf901dc5f8ec",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "07cebb2a71ff0c63608f8a218a03618e9504fd171d8c7059b15bcf901dc5f8ec",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/frame-000.png",
|
||||
"expected_sha256": "4516abb706e829094c19632e6c8005ad68877c7856af4ccfdf346e98b8dabe95",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "4516abb706e829094c19632e6c8005ad68877c7856af4ccfdf346e98b8dabe95",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/frame-001.png",
|
||||
"expected_sha256": "9d61efee38fee61447a3ae10e95e07381f9560254388cc4ce38a79f7a0a21e6d",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "9d61efee38fee61447a3ae10e95e07381f9560254388cc4ce38a79f7a0a21e6d",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/frame-002.png",
|
||||
"expected_sha256": "4f53747098468b37bc23078d70d091a8b1d8c78ae44547476df70d40c153d03e",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "4f53747098468b37bc23078d70d091a8b1d8c78ae44547476df70d40c153d03e",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/frame-003.png",
|
||||
"expected_sha256": "dd60776d2370d79814e874a3944f7bce9152d6d3640bee434c624940f6e000e8",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "dd60776d2370d79814e874a3944f7bce9152d6d3640bee434c624940f6e000e8",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/frame-004.png",
|
||||
"expected_sha256": "e8c2b8027767cd26850f02a2d87d2e594bab4c3d6ebcc5f288ec6140f332146d",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "e8c2b8027767cd26850f02a2d87d2e594bab4c3d6ebcc5f288ec6140f332146d",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/frame-005.png",
|
||||
"expected_sha256": "7795cc8c2ee590c673f7bcd16d83e8fbfb85a8fef0af913282e9aa1df54e54c8",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "7795cc8c2ee590c673f7bcd16d83e8fbfb85a8fef0af913282e9aa1df54e54c8",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/frame-006.png",
|
||||
"expected_sha256": "7795cc8c2ee590c673f7bcd16d83e8fbfb85a8fef0af913282e9aa1df54e54c8",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "7795cc8c2ee590c673f7bcd16d83e8fbfb85a8fef0af913282e9aa1df54e54c8",
|
||||
"sha_match": true
|
||||
},
|
||||
{
|
||||
"record": "docs/plans/original-completion-2026-10-02/execution/p24-02/native-os-input-r01/ordinary-controls-observations-r05.json",
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p24-02-native-os-controls-r05/frame-007.png",
|
||||
"expected_sha256": "0854ba41fd73e5b092d71e7d11e99fe3efb7b25ee04c2b0c8750b5d9de6d84b3",
|
||||
"local_exists": true,
|
||||
"actual_sha256": "0854ba41fd73e5b092d71e7d11e99fe3efb7b25ee04c2b0c8750b5d9de6d84b3",
|
||||
"sha_match": true
|
||||
}
|
||||
]
|
||||
}
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"argv": [
|
||||
"/Users/korizatou114/.local/bin/claude",
|
||||
"-p",
|
||||
"--safe-mode",
|
||||
"--restricted",
|
||||
"--output-format",
|
||||
"json",
|
||||
"--tools",
|
||||
"Read,Grep,Glob",
|
||||
"--strict-mcp-config",
|
||||
"--mcp-config",
|
||||
"{\"mcpServers\":{}}",
|
||||
"--setting-sources",
|
||||
"",
|
||||
"--no-session-persistence",
|
||||
"--permission-mode",
|
||||
"plan",
|
||||
"--json-schema",
|
||||
"{\"type\": \"object\", \"additionalProperties\": false, \"required\": [\"action\", \"task_id\", \"reason\", \"codex_model\", \"codex_model_reason\"], \"properties\": {\"action\": {\"type\": \"string\", \"enum\": [\"request-repair\", \"wait\"]}, \"task_id\": {\"type\": \"string\"}, \"reason\": {\"type\": \"string\"}, \"codex_model\": {\"type\": \"string\", \"enum\": [\"gpt-6.1-sol\", \"gpt-6-astra\"]}, \"codex_model_reason\": {\"type\": \"string\", \"minLength\": 1}}}",
|
||||
"--model",
|
||||
"claude-opus-5-5"
|
||||
],
|
||||
"cwd": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement",
|
||||
"env_names": [
|
||||
"AGY_CLI_DISABLE_AUTO_UPDATE",
|
||||
"BROWSER_PROFILE_DIR",
|
||||
"BUILD_OUTPUT_DIR",
|
||||
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC",
|
||||
"CLAUDE_CODE_OAUTH_TOKEN",
|
||||
"GIT_TERMINAL_PROMPT",
|
||||
"HOME",
|
||||
"LANG",
|
||||
"LC_ALL",
|
||||
"LOGNAME",
|
||||
"MAC_CHROMIUM_TMPDIR",
|
||||
"PATH",
|
||||
"PORT",
|
||||
"PYTHONDONTWRITEBYTECODE",
|
||||
"TEMP",
|
||||
"TERM",
|
||||
"TEST_DATABASE_PATH",
|
||||
"TMP",
|
||||
"TMPDIR",
|
||||
"USER"
|
||||
],
|
||||
"execution": "sandbox"
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"action": "wait",
|
||||
"task_id": "P04-01",
|
||||
"reason": "P04-01 (repair_pending, source 2dde759, repairs 29, max null) stays on wait. The repair29 review found the docs accurate to current code. The block is that 4 of the D05 order rules are still undecided, and the spec requires the order across 閉店/停電/破壊/退出/課金/シフト交代/00:00決算 to be stated (順序を明記): (a) whether RELATED_FACILITY_INACTIVE or NO_POWER takes priority, (b) destruction command vs incident completion, (c) command leave vs AI planned exit, (d) the order of a 00:00 new-day sale vs settlement. The Opus-recommended A bundle (keep current behavior) is a candidate the owner has not approved. The owner has approved only two things: dependency-closure hold with no charge, reservation retention and resume once; and 17:59->18:00 completion/payment before the shift change. Another repair cannot supply owner decisions, so request-repair would be speculative and is not used. Nothing in P04 is re-run, re-tested or re-reviewed, and BASELINE183 is not cited as authority for destruction. When the owner answers (a)-(d), the next P04 step is a narrow repair. It writes only the approved rules into order-audit.json and ORDER_AUDIT.md and adds boundary proof for exactly those rules. The seven product-order source files and the static P04 merges are reused only after their hashes are rechecked against the pins.\n\nProposed next independent original unit: P24-02 操作と通知 (existing task the-tree-p24-02-operations, submitted 9641ed52, repairs 3, max null, no active worker). Of the open units it does not touch D05, P06 mana values or P18 production values, and it already has the most collected evidence. That makes it the strongest candidate to close one of the 88 units. Its acceptance is: 無効操作を説明し、クリック代替と日本語入力・表示倍率を確認する. Per docs/spec/acceptance/P24-02-code-r01.json, warnings must come from real upstream triggers, fixture-only completion does not count, and platform-specific conditions are required.\n\nFirst bounded work item (one request-repair on that existing task, not started in this decision). The worker reads P24-02-code-r01.json and maps all 8 whole conditions against the exact 9641ed5 source in a gap matrix. For each condition it records:\n- the real upstream trigger, with the call path from the actual rejection or validation site to the visible explanation;\n- any existing evidence that applies, rechecked by source, config, input and environment hash: Japanese IME normal save/rename, click alternatives, the r03 normal Main 256-entry notification log, the 8 real-viewport operations, and the separate-process resume (314 functions + 23 parse);\n- the concrete evidence still missing.\n\nOnly missing items are then implemented or evidenced, limited to allowed_paths. Remaining conditions likely include invalid drop/placement explanation with a real cause, modal/pause/resume, speech bubble/cut-in, display scaling at each required scale, and the click alternative for every operation not yet covered. Collected IME/click evidence is reused only if 9641ed5, or its successor source, leaves the relevant UI/input files unchanged. Otherwise only the affected items are re-collected. There must be no duplicate whole-test runs and no fixture-only passes.\n\nRequired later checks:\n- the p24 current-source validation;\n- the full suite run once on the final candidate, reusing exact-match full/parse/ended results the way P23-03 did;\n- a separate session for any condition the spec marks platform-specific: native macOS IME/scale evidence, with Windows-only conditions kept individually pending if the spec requires them, not waived;\n- independent Opus review of all 8 conditions with no partial credit;\n- normal final validator, then prepare-integration; main commit/push is already authorized.\n\nGaps: this frozen P04 checkout does not contain P24-02-code-r01.json or the actual DB IME artifacts. The P24-02 dispatch must read them from current main, and the gap matrix there must verify the 8 conditions; this decision has not checked them.",
|
||||
"codex_model": "gpt-6.1-sol",
|
||||
"codex_model_reason": "The P04 action is wait, so no Codex run happens and Astra's extra cost would buy nothing. The proposed P24-02 first step is a bounded gap matrix plus a check of whether existing evidence applies. That is ordinary audit and UI-evidence work with explicit spec conditions, so the default model is enough. Astra would be considered only if a later repair needs difficult cross-platform IME/scale fixes in product code."
|
||||
}
|
||||
+1
File diff suppressed because one or more lines are too long
+31
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"task_id": "P04-01",
|
||||
"commit": "2dde7596a87c43f7bf0bf704b7479f2fa06a5b1c",
|
||||
"status": "blocked",
|
||||
"summary": "The repair29 documents describe the current code accurately but leave the required ordering rules undefined. The D05 candidate's source references match the current product (product1338): FacilityService._prepare_service_for_tick:853-874 checks RELATED_FACILITY_INACTIVE before NO_POWER, and the cited runtime functions are at 5743/7553/8482/8577/8738/9804/11785. The submission itself states that D05 items (a) power vs closure/dependency precedence, (b) destruction vs completion, (c) exit vs completion and (d) which day a 00:00 sale belongs to are pending an owner decision. P04-01 requires the order across 閉店/停電/破壊/退出/課金/シフト交代/00:00決算 to be stated ('順序を明記'). That cannot be met while these mandatory rules are only a recommended 'keep current behavior' candidate that nobody has approved. Several final steps are also unfinished, and CURRENT_STATUS.md says the unit is incomplete (13/88 unchanged). The passing p04-acceptance check is mechanical (it confirms an index exists and does not approve the rules), so it is not enough for pass. The blocker is undecided rules (spec insufficient), which needs an owner decision, so the status is blocked.",
|
||||
"acceptance_ids": [
|
||||
"P04-01"
|
||||
],
|
||||
"findings": [
|
||||
{
|
||||
"severity": "high",
|
||||
"message": "Mandatory ordering rules are undefined. The order between power stop and closure/dependency, between destruction and completion/charging, between exit and completion, and which day a 00:00 sale belongs to are pending. D05_REMAINING_ORDER_CANDIDATE.md/.json offers only Option A (keep current behavior), which has not been approved. P04-01 requires the order to be stated explicitly ('順序を明記'), and code behavior is not authority, so acceptance cannot be granted. An owner decision is needed (spec insufficient → blocked)."
|
||||
},
|
||||
{
|
||||
"severity": "high",
|
||||
"message": "Under current behavior, Option (b) allows an incident-driven destruction in the same tick to follow a completion and charge (B4a: 25G charged, then destroyed). Whether this conflicts with the 'no charging while stopped' (停止中課金なし) criterion has not been settled. A D05 destruction rule is required."
|
||||
},
|
||||
{
|
||||
"severity": "medium",
|
||||
"message": "The checker's destruction_stop rule (tools/check_p04_order_evidence.py:49) points to BASELINE:183, which covers mana depletion, not destruction. The authority reference does not match the domain. The repair is deferred until D05 is approved, so the 破壊 domain still has no valid authority link."
|
||||
},
|
||||
{
|
||||
"severity": "medium",
|
||||
"message": "No final validation has been run on the final source and checker. Full178 ran with checker f5, not the current a61, and no full1339 run exists. tests/business/test_required_kitchen.gd differs from the version that run used. The support53cb rebind, final source/config/input/environment binding, formal review, integration (P04 first, then support) and any nativeWindows conditions are all still pending."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "S4 NO_POWER evidence comes from a direct disconnect_nodes call and does not represent global mana depletion, which appears only in the B1 combined diagnostic run. The documents say this correctly, but the scope of the power-stop evidence is limited."
|
||||
}
|
||||
]
|
||||
}
|
||||
+7
File diff suppressed because one or more lines are too long
+62
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"observed_at": "2026-10-17T16:30:38.746525+09:00",
|
||||
"original_packages": 30,
|
||||
"original_units": 88,
|
||||
"formally_completed": 14,
|
||||
"new_credit": 0,
|
||||
"plan_id": "P04-01",
|
||||
"state": "in_progress",
|
||||
"runner_project": "the-tree-p04-01",
|
||||
"runner_state": "repair_pending",
|
||||
"repairs": 29,
|
||||
"max_repairs": null,
|
||||
"submitted": "2dde7596a87c43f7bf0bf704b7479f2fa06a5b1c",
|
||||
"candidate": null,
|
||||
"worktree_clean_at_observation": true,
|
||||
"active_worker": false,
|
||||
"current_main_at_audit": "565fd805079d8c446f29e30c57979242561113ea",
|
||||
"acceptance_unchanged": {
|
||||
"domains": [
|
||||
"閉店",
|
||||
"停電",
|
||||
"破壊",
|
||||
"退出",
|
||||
"課金",
|
||||
"シフト交代",
|
||||
"00:00決算"
|
||||
],
|
||||
"safety": [
|
||||
"停止中課金0",
|
||||
"二重決算0",
|
||||
"予約の孤立0"
|
||||
],
|
||||
"conditions": "all15 + EV, original frozen rules unchanged",
|
||||
"required_gates": [
|
||||
"exact final source/checker applicability",
|
||||
"required final full regression",
|
||||
"independent whole review",
|
||||
"ordinary prepare-integration / integration / final",
|
||||
"ledger reflection"
|
||||
]
|
||||
},
|
||||
"latest_commander": "ea12167cffff444596c0c36caa700a26",
|
||||
"latest_formal_review": "275d1fd64fff4d5782c6f7667fc1e031",
|
||||
"no_duplicate_repair": true,
|
||||
"remaining": [
|
||||
"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"
|
||||
],
|
||||
"already_corrected_per_actual_opus": [
|
||||
"raw joins",
|
||||
"canonical getter contract explanation",
|
||||
"candidate HEAD fixtures",
|
||||
"schema2 index",
|
||||
"S4r28",
|
||||
"Local8",
|
||||
"r22 collection"
|
||||
],
|
||||
"owner_response_pending": true,
|
||||
"approval_not_inferred": true,
|
||||
"whole_acceptance": false
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
# P04-01 current status — repair29
|
||||
|
||||
Worker checks: SOURCE-READY / NOTRUN. No probes or tests were run by this worker.
|
||||
|
||||
This canonical table overrides creation-time NOT RUN / pending-execution entries in REPAIR22–28, their status/validation records, and the runbooks (including S4_ROOT_RUN.md). Those files are historical and remain untouched. It does not relabel an old run as execution of repair29.
|
||||
|
||||
`B` = `/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build`.
|
||||
|
||||
| Item | Canonical status | Exact-version evidence |
|
||||
| --- | --- | --- |
|
||||
| Current native product / main | Root-measured `5f6bc11d` / `9b1a18c1` | Product1338 at B/audit-support/p04-r17-full-inputs-r01/product; current SHA256 inventory in REPAIR29_STATIC_SOURCE.json. Old deb11300 is not current. |
|
||||
| S4 r28 | Root-measured 4/4 PASS; import/parse/Writer/Reader PIDs49940,50044,50078,50105 all ended; guards0; cleanup0 | B/p04-s4-native-r28; B/audit-support/p04-root-fb8b-s4-r01/native.result.json. Full controls in that same support directory. |
|
||||
| Local8 | Root-measured PASS | B/audit-support/p04-root-fb8b-local-r01: bulk, negative, applicability, native, series, encoder, join, roles result/stdio records. |
|
||||
| Collection | Root-measured r22 collected, no native re-run claimed | B/audit-support/p04-raw-collect-r22/MANIFEST.json and s1/s2a/s2b/s3/s4.json. |
|
||||
| Index | Root-measured schema2, missing_conditions=[], all15 conditions + EV mechanically verified | B/p04-evidence/index.json and generation-invocation.json; local-r01 index/checker output. This is not D05 approval. |
|
||||
| Registered validation on fb8b7919 | Root-measured PASS,28.095s | B/audit-support/p04-root-fb8b-local-r01/registered-validation.result.json and stdout log. Does not establish final repair29 validation or acceptance. |
|
||||
| Full178 | Root-measured178 suites /21615 checks PASS used checker f5, **not a61** | B/audit-support/p18-regression-support-final-r01/native-full178/runner-ended.json and source-start.json; exact receipt remains preserved. Checker f5 SHA256 `f5b44827958f2ae352fe5c4bc3a1ffd4211ec7a41fc4c0759c8b954891662324`. |
|
||||
| Full1339 against a61 | **No such full run exists** | a61 SHA256 `a61c5b496e656f60c66898e42500bc9a2d45f947690ce8f5f19a03984ebbc850`. Local8 and registered validation are separate evidence. |
|
||||
| Worker repair29 | SOURCE-READY / NOTRUN | Static source/line/registration/SHA256 inspection only. No tests, probes, Git, engine, Runner or agents. |
|
||||
| Owner D05 | Pending a–d, candidate only | D05_REMAINING_ORDER_CANDIDATE.md/json; A01, dependency hold and18:00 remain approved. |
|
||||
| Original unit | **Incomplete;13/88 unchanged** | Mechanical PASS does not approve unknown mandatory priorities, replace independent review, or integrate the unit. |
|
||||
|
||||
Proof hashes for the exact collection/index/full receipt/validation and current source are in [REPAIR29_STATIC_SOURCE.json](REPAIR29_STATIC_SOURCE.json). Applicable source/config/input/environment joins stay in the immutable schema2 index and raw collection; no raw is normalized, spliced, regenerated or relabelled here.
|
||||
|
||||
Product reuse requires exact applicability: the178 suites do not execute the Python checker and the316-file GDScript parse roster excludes it. Static comparison with the preserved full178 selected_source_map found one test-source difference, tests/business/test_required_kitchen.gd (full178 3a9c92f8…, current product5dcc86d6…), and no game-source difference. Preserve the Runner applicability binding for this test; do not claim all1338 selected product hashes match that full178 receipt or byte-identical full1339 validation against a61. Preserve the f5 full178 receipt and all historical partial/full outputs separately.
|
||||
|
||||
Remaining Runner steps: independent review of these documents, then Root obtains owner decisions (or explicit non-mandatory rulings) for D05 a–d. Unknown mandatory rules stay pending. Any destruction authority pin/registry or other approved implementation change follows a normal repair. The support53cb normal registered rebind, final full run on the final source/checker, final source/config/input/environment binding, formal independent review and integration remain Runner work. Integration order is **P04 first, then support on main9b (`9b1a18c1`)**. NativeWindows obligations remain individually pending if required. No criterion is waived and no extra original unit is counted.
|
||||
|
||||
Known authority/scope gaps: destruction_stop binds BASELINE:183 (mana depletion, not destruction); explicit D05 destruction rule required before normal pin repair. S4 NO_POWER was induced by direct disconnect_nodes; global depletion appears only in B1 combined diagnostic. Preserve these distinctions even though the mechanical index passes.
|
||||
|
||||
Changed files in repair29 (all under this directory): ORDER_AUDIT.md; order-audit.json; D05_REMAINING_ORDER_CANDIDATE.md; D05_REMAINING_ORDER_CANDIDATE.json; CHECKER_PROTOCOL.md; EVIDENCE_COLLECTION.md; P04_ORDER_EVIDENCE_PROTOCOL.json; CURRENT_STATUS.md; REPAIR29_STATIC_SOURCE.json. Product/checker/registry, native footprint, staged inputs, raw and historical runbooks are unchanged.
|
||||
+130
@@ -0,0 +1,130 @@
|
||||
{
|
||||
"task_id": "P04-01",
|
||||
"revision": "repair29",
|
||||
"status": "approval candidate only; SOURCE-READY / NOTRUN",
|
||||
"approval": null,
|
||||
"apply_to_product_or_checker": false,
|
||||
"review_flow": "Root asks owner after review. This document neither requests approval from worker nor records it.",
|
||||
"proof_legend": {
|
||||
"R": "B/audit-support/p04-raw-collect-r22",
|
||||
"I": "B/p04-evidence/index.json schema2",
|
||||
"pins": "REPAIR29_STATIC_SOURCE.json; R/MANIFEST.json and I raw_references/versions"
|
||||
},
|
||||
"choices": [
|
||||
{
|
||||
"id": "a",
|
||||
"topic": "Power vs closure/dependency",
|
||||
"status": "pending D05",
|
||||
"observation": {
|
||||
"status": "observed-current",
|
||||
"behavior": "RELATED_FACILITY_INACTIVE selected before NO_POWER; both pause service with no charge.",
|
||||
"source": "FacilityService _prepare_service_for_tick:853–874, phase FACILITY_COMPLETION after MANA projection",
|
||||
"proof": "Root-measured R/s4.json isolated NO_POWER; R/s3.json B1 combined RELATED diagnostic; REPAIR29_STATIC_SOURCE.json source pins"
|
||||
},
|
||||
"inputs": "Same service and minute, related facility inactive and power unavailable; include direct closure separately under D-034.",
|
||||
"A": {
|
||||
"recommended": true,
|
||||
"rule": "Keep current RELATED-first reason selection.",
|
||||
"outcome": "Service held, progress/payment paused, reservation and serviceID retained.",
|
||||
"side_effects": "Reason reports dependency while both causes apply; no new hold limit.",
|
||||
"dependencies": "Approved dependency hold, D-034 direct closure, existing MANA-before-completion order."
|
||||
},
|
||||
"B": {
|
||||
"rule": "NO_POWER wins reason selection when both conditions fail.",
|
||||
"outcome": "Same no-charge hold safety; reason reports power.",
|
||||
"side_effects": "Reason/event and recovery-precedence semantics would change; concrete implementation and exact-version proof require normal repair.",
|
||||
"dependencies": "Must retain no-charge while either legitimate hold persists; preserve approved dependency reservation/identity behavior."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "b",
|
||||
"topic": "Destruction",
|
||||
"status": "pending D05",
|
||||
"observation": {
|
||||
"status": "observed-current",
|
||||
"behavior": "Command destruction in APPLY precedes completion. Incident destruction in INCIDENTS follows it; B4a shows25G charge then destruction in same tick.",
|
||||
"source": "Runtime _process_tick_commands:5743, _advance_facilities:8482, _advance_defense:8577 / _apply_defense_outcome_boundary:9804",
|
||||
"proof": "Root-measured R/s3.json B4a/B4b; REPAIR29_STATIC_SOURCE.json"
|
||||
},
|
||||
"inputs": "A service due for completion in a minute with command or incident destruction of its facility.",
|
||||
"A": {
|
||||
"recommended": true,
|
||||
"rule": "Keep command-before-completion and incident-after-completion behavior.",
|
||||
"outcome": "Command destruction prevents completion; incident may follow a valid completion/charge that minute; next-tick broken failure/release remains.",
|
||||
"side_effects": "Completion and destruction can coexist in one tick as B4a; not a universal no-sale-on-destruction rule.",
|
||||
"dependencies": "P04 stopped-charge and orphan-reservation safety; explicit D05 destruction authority required."
|
||||
},
|
||||
"B": {
|
||||
"rule": "An incident in the same minute suppresses that minute completion (or voids it if already posted).",
|
||||
"outcome": "No retained completion/sale for the incident-destruction minute.",
|
||||
"side_effects": "Would require preemption or atomic reversal of completion, inventory, payment and rewards; no unapproved numbers or refund amounts supplied.",
|
||||
"dependencies": "Owner must specify the suppress/void transaction semantics; preserve idempotency, no orphan reservations and approved shift/hold rules; normal implementation and new proof required."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "c",
|
||||
"topic": "Exit",
|
||||
"status": "pending D05",
|
||||
"observation": {
|
||||
"status": "observed-current",
|
||||
"behavior": "Command exit APPLY before completion/charging; AI PLANNED_EXIT after them; LEAVING despawns later.",
|
||||
"source": "Runtime _execute_leave_facility_queue:7553; _advance_guest_ai_decisions:8738–8762",
|
||||
"proof": "Root-measured R/s3.json B2a/B2b/B3 and B1 departure history; source pins REPAIR29_STATIC_SOURCE.json"
|
||||
},
|
||||
"inputs": "Exit command or AI exit due at a minute with a completion-ready service. Current AI PLANNED_EXIT applies to DECIDING guests; do not assume it preempts an active service.",
|
||||
"A": {
|
||||
"recommended": true,
|
||||
"rule": "Keep current command/AI distinction and state predicates.",
|
||||
"outcome": "Command leave/release happens first; eligible AI planned exit follows completion/charging and queue processing.",
|
||||
"side_effects": "AI due time alone does not universally cancel current-minute completion; later despawn remains separate.",
|
||||
"dependencies": "D-034, reservation ownership/release, phase6 completion before phase10 AI."
|
||||
},
|
||||
"B": {
|
||||
"rule": "An exit due this minute preempts completion.",
|
||||
"outcome": "Applicable due exits release/cancel before completion and no completion sale occurs for that preempted service.",
|
||||
"side_effects": "Changes eligibility for exit and service cancellation; would change simultaneous completion/payment observations.",
|
||||
"dependencies": "Owner must define applicable due-exit states; preserve no orphan reservation, no duplicate charge and approved dependency/shift behavior; normal repair and exact proof required."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "d",
|
||||
"topic": "Cost time/day attribution beyond A01 and18:00",
|
||||
"status": "pending D05",
|
||||
"observation": {
|
||||
"status": "observed-current",
|
||||
"behavior": "Sale dated at post-increment minute. At00:00 TIME_BOUNDARIES settlement/upkeep precede completions;00:00 sales go to new day because daily-close period_end is exclusive.",
|
||||
"source": "Kernel advance_one_minute:122; Runtime _apply_service_transaction:11785 /11826–11838; coordinator _process_daily_close:1125 /1136",
|
||||
"proof": "Root-measured R/s2a.json paid midnight/replay; I C; REPAIR29_STATIC_SOURCE.json"
|
||||
},
|
||||
"inputs": "Service completes on calendar boundary; account period ends at boundary minute. A01 ownership upkeep and18:00 shift interval remain fixed.",
|
||||
"A": {
|
||||
"recommended": true,
|
||||
"rule": "Keep post-increment sale time and new-day attribution for00:00 sales.",
|
||||
"outcome": "Closing day excludes boundary-minute completion; new day receives sale.",
|
||||
"side_effects": "Closing summary is finalized before those sales; upkeep ownership rule unchanged.",
|
||||
"dependencies": "Exclusive daily-close interval, sale timestamp, idempotent close/replay; P04 mandatory timing/attribution separate from D04/P05 numeric cost math."
|
||||
},
|
||||
"B": {
|
||||
"rule": "Boundary-minute sales belong to closing day.",
|
||||
"outcome": "Closing day includes those sales.",
|
||||
"side_effects": "Would require a distinct accounting attribution or revised boundary transaction sequencing; affects daily summaries/reconciliation/replay. No numeric cost policy is invented.",
|
||||
"dependencies": "Owner must settle attribution mechanics and same-boundary replay; preserve A01 and18:00, all P04 safety criteria; normal repair and exact-version proof required."
|
||||
}
|
||||
}
|
||||
],
|
||||
"bundle": {
|
||||
"label": "accept current-behavior A for a-d",
|
||||
"status": "pending D05",
|
||||
"recommended": true,
|
||||
"coupling_notes": [
|
||||
"a preserves the approved hold and no-charge safety independent of reason priority.",
|
||||
"b and c use the same completion boundary: commands before, incidents and AI after. Changing either requires separate applicability and replay checks.",
|
||||
"d relies on TIME_BOUNDARIES before completion; changing attribution can affect the transaction history used by b/c and settlement idempotency.",
|
||||
"A01 ownership upkeep, dependency hold and18:00 interval are already approved and are excluded from renewed approval.",
|
||||
"Owner may explicitly rule some remaining items non-mandatory; no such ruling exists here. Unknowns stay pending; mandatory acceptance is never relaxed."
|
||||
]
|
||||
},
|
||||
"authority_gap": "destruction_stop currently binds BASELINE:183, which is mana depletion, not destruction authority. Explicit D05 destruction rule required. Pin/registry repair only after approval through normal repair.",
|
||||
"power_scope": "S4 NO_POWER uses direct disconnect_nodes; not proof of global depletion, which exists only in B1 combined diagnostic.",
|
||||
"original_unit_complete": false
|
||||
}
|
||||
+93
@@ -0,0 +1,93 @@
|
||||
# D05 remaining order candidate — repair29
|
||||
|
||||
**Approval candidate only. SOURCE-READY / NOTRUN.** Root asks the owner after review. Nothing is applied to product, checker or registry; observation is not approval. A01 midnight ownership upkeep, dependency hold and18:00 are already approved and are not re-asked.
|
||||
|
||||
Structured choices: [D05_REMAINING_ORDER_CANDIDATE.json](D05_REMAINING_ORDER_CANDIDATE.json). Source path/line/SHA256 pins: [REPAIR29_STATIC_SOURCE.json](REPAIR29_STATIC_SOURCE.json); phase map: [ORDER_AUDIT.md](ORDER_AUDIT.md). R = B/audit-support/p04-raw-collect-r22; I = B/p04-evidence/index.json. These are Root-measured exact-version proof references, with raw/provenance pins in R/MANIFEST.json, I and the static manifest.
|
||||
|
||||
## (a) Power vs closure/dependency — pending D05
|
||||
|
||||
**Observed-current:** RELATED_FACILITY_INACTIVE selected before NO_POWER; both pause service with no charge. Source: FacilityService _prepare_service_for_tick:853–874, phase FACILITY_COMPLETION after MANA projection. Proof: Root-measured R/s4.json isolated NO_POWER; R/s3.json B1 combined RELATED diagnostic; REPAIR29_STATIC_SOURCE.json source pins.
|
||||
|
||||
**Inputs:** Same service and minute, related facility inactive and power unavailable; include direct closure separately under D-034.
|
||||
|
||||
**Option A (recommended; keep current behavior):** Keep current RELATED-first reason selection.
|
||||
|
||||
- Outcomes: Service held, progress/payment paused, reservation and serviceID retained.
|
||||
- Side effects: Reason reports dependency while both causes apply; no new hold limit.
|
||||
- Dependencies: Approved dependency hold, D-034 direct closure, existing MANA-before-completion order.
|
||||
|
||||
**Option B:** NO_POWER wins reason selection when both conditions fail.
|
||||
|
||||
- Outcomes: Same no-charge hold safety; reason reports power.
|
||||
- Side effects: Reason/event and recovery-precedence semantics would change; concrete implementation and exact-version proof require normal repair.
|
||||
- Dependencies: Must retain no-charge while either legitimate hold persists; preserve approved dependency reservation/identity behavior.
|
||||
|
||||
## (b) Destruction — pending D05
|
||||
|
||||
**Observed-current:** Command destruction in APPLY precedes completion. Incident destruction in INCIDENTS follows it; B4a shows25G charge then destruction in same tick. Source: Runtime _process_tick_commands:5743, _advance_facilities:8482, _advance_defense:8577 / _apply_defense_outcome_boundary:9804. Proof: Root-measured R/s3.json B4a/B4b; REPAIR29_STATIC_SOURCE.json.
|
||||
|
||||
**Inputs:** A service due for completion in a minute with command or incident destruction of its facility.
|
||||
|
||||
**Option A (recommended; keep current behavior):** Keep command-before-completion and incident-after-completion behavior.
|
||||
|
||||
- Outcomes: Command destruction prevents completion; incident may follow a valid completion/charge that minute; next-tick broken failure/release remains.
|
||||
- Side effects: Completion and destruction can coexist in one tick as B4a; not a universal no-sale-on-destruction rule.
|
||||
- Dependencies: P04 stopped-charge and orphan-reservation safety; explicit D05 destruction authority required.
|
||||
|
||||
**Option B:** An incident in the same minute suppresses that minute completion (or voids it if already posted).
|
||||
|
||||
- Outcomes: No retained completion/sale for the incident-destruction minute.
|
||||
- Side effects: Would require preemption or atomic reversal of completion, inventory, payment and rewards; no unapproved numbers or refund amounts supplied.
|
||||
- Dependencies: Owner must specify the suppress/void transaction semantics; preserve idempotency, no orphan reservations and approved shift/hold rules; normal implementation and new proof required.
|
||||
|
||||
## (c) Exit — pending D05
|
||||
|
||||
**Observed-current:** Command exit APPLY before completion/charging; AI PLANNED_EXIT after them; LEAVING despawns later. Source: Runtime _execute_leave_facility_queue:7553; _advance_guest_ai_decisions:8738–8762. Proof: Root-measured R/s3.json B2a/B2b/B3 and B1 departure history; source pins REPAIR29_STATIC_SOURCE.json.
|
||||
|
||||
**Inputs:** Exit command or AI exit due at a minute with a completion-ready service. Current AI PLANNED_EXIT applies to DECIDING guests; do not assume it preempts an active service.
|
||||
|
||||
**Option A (recommended; keep current behavior):** Keep current command/AI distinction and state predicates.
|
||||
|
||||
- Outcomes: Command leave/release happens first; eligible AI planned exit follows completion/charging and queue processing.
|
||||
- Side effects: AI due time alone does not universally cancel current-minute completion; later despawn remains separate.
|
||||
- Dependencies: D-034, reservation ownership/release, phase6 completion before phase10 AI.
|
||||
|
||||
**Option B:** An exit due this minute preempts completion.
|
||||
|
||||
- Outcomes: Applicable due exits release/cancel before completion and no completion sale occurs for that preempted service.
|
||||
- Side effects: Changes eligibility for exit and service cancellation; would change simultaneous completion/payment observations.
|
||||
- Dependencies: Owner must define applicable due-exit states; preserve no orphan reservation, no duplicate charge and approved dependency/shift behavior; normal repair and exact proof required.
|
||||
|
||||
## (d) Cost time/day attribution beyond A01 and18:00 — pending D05
|
||||
|
||||
**Observed-current:** Sale dated at post-increment minute. At00:00 TIME_BOUNDARIES settlement/upkeep precede completions;00:00 sales go to new day because daily-close period_end is exclusive. Source: Kernel advance_one_minute:122; Runtime _apply_service_transaction:11785 /11826–11838; coordinator _process_daily_close:1125 /1136. Proof: Root-measured R/s2a.json paid midnight/replay; I C; REPAIR29_STATIC_SOURCE.json.
|
||||
|
||||
**Inputs:** Service completes on calendar boundary; account period ends at boundary minute. A01 ownership upkeep and18:00 shift interval remain fixed.
|
||||
|
||||
**Option A (recommended; keep current behavior):** Keep post-increment sale time and new-day attribution for00:00 sales.
|
||||
|
||||
- Outcomes: Closing day excludes boundary-minute completion; new day receives sale.
|
||||
- Side effects: Closing summary is finalized before those sales; upkeep ownership rule unchanged.
|
||||
- Dependencies: Exclusive daily-close interval, sale timestamp, idempotent close/replay; P04 mandatory timing/attribution separate from D04/P05 numeric cost math.
|
||||
|
||||
**Option B:** Boundary-minute sales belong to closing day.
|
||||
|
||||
- Outcomes: Closing day includes those sales.
|
||||
- Side effects: Would require a distinct accounting attribution or revised boundary transaction sequencing; affects daily summaries/reconciliation/replay. No numeric cost policy is invented.
|
||||
- Dependencies: Owner must settle attribution mechanics and same-boundary replay; preserve A01 and18:00, all P04 safety criteria; normal repair and exact-version proof required.
|
||||
|
||||
## Bundle: accept current-behavior A for a-d
|
||||
|
||||
Recommended candidate, not approved.
|
||||
|
||||
- a preserves the approved hold and no-charge safety independent of reason priority.
|
||||
- b and c use the same completion boundary: commands before, incidents and AI after. Changing either requires separate applicability and replay checks.
|
||||
- d relies on TIME_BOUNDARIES before completion; changing attribution can affect the transaction history used by b/c and settlement idempotency.
|
||||
- A01 ownership upkeep, dependency hold and18:00 interval are already approved and are excluded from renewed approval.
|
||||
- Owner may explicitly rule some remaining items non-mandatory; no such ruling exists here. Unknowns stay pending; mandatory acceptance is never relaxed.
|
||||
|
||||
destruction_stop currently binds BASELINE:183, which is mana depletion, not destruction authority. Explicit D05 destruction rule required. Pin/registry repair only after approval through normal repair.
|
||||
|
||||
S4 NO_POWER uses direct disconnect_nodes; not proof of global depletion, which exists only in B1 combined diagnostic.
|
||||
|
||||
P04 timing/attribution remains mandatory; D04/P05 numeric cost math is separate. No acceptance criterion is relaxed. P04 remains incomplete; original13/88 unchanged.
|
||||
+1802
File diff suppressed because it is too large
Load Diff
+7
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"action": "wait",
|
||||
"task_id": "P04-01",
|
||||
"reason": "P04-01: WAIT. Waiting for the owner's Japanese answers on D05 (a) power vs closure/dependency precedence, (b) destruction vs completion, (c) exit vs completion, (d) which day a 00:00 sale belongs to. Do not re-ask, do not request-repair (repair30), do not redo tests.\n\nINDEPENDENT NEXT ORIGINAL UNIT (new contract proposal; no matching project in the 20-project inventory, nothing started here): P13-02 「背面条件と対象参照」.\n- Work: 覗き部屋の対象背面、通路寸断、対象喪失と証拠IDを状態として実装する。\n- Acceptance (unchanged): 対象撤去、重複収集、停止、途中保存で状態と参照が整合する。\n- Package P13 acceptance also applies: special rules hold at build time and run time; invalid placement and actions on lost targets rejected; event state saved; implemented scope reported separately from unmade content.\n- Package deps: P09, P12 (both incomplete; bounded progress is allowed, not unit closure). Decisions D04/D05/D08.\n- Original sources: B-2.5 (built behind VIPルーム/風俗個室/脱衣所 on back layer; its cells are no longer usable as back corridor; 記録係 collects 脅迫ネタ); B-8.3 (VIP/浴場/風俗の裏限定・裏通路を寸断); B-10.6 (覗き部屋 2x1, back-only).\n\nSOURCE GAP (main 2f3884b): no peeping/覗き code, data or tests in scripts/autoload/data/resources/tests/tools.\n- FacilityCatalog (scripts/data/facility_catalog.gd) has no peeping_room.\n- No recorder role; no back-side target reference; no evidence-ID ledger; no target-loss state.\n- Existing targets: public_bath, adult_private_room. VIP suite is undefined (P10-01); vip_private_salon must not substitute.\n- Rejected alternatives:\n - P07-01: weather_timeline has no rain/fog effects or natural generation (D04 values).\n - P12-01: security_station only checks the guard role (simulation_runtime.gd:6631); guard effects need D04 values.\n - P15-02: cleric witness/morale rule needs an undecided definition of \"witness\" plus a D04 magnitude.\n - P16: wages/severance/sale amounts are D04.\n\nMECHANISMS POSSIBLE WITH APPROVED INPUTS vs PENDING:\n- Possible:\n - placement check: room cells must lie entirely behind a single allowed, completed target's FRONT footprint on the BACK layer;\n - corridor blocking as an occupancy rule with no automatic bypass;\n - stable target reference;\n - target removal sets TARGET_LOST; no automatic recovery, explicit relink only (D03 pattern / kitchen relink);\n - idempotent evidence IDs keyed by (room, target, source_event_key);\n - no collection while stopped (NO_POWER/closed/under construction);\n - versioned save section with legacy-absent migration and atomic rejection of malformed data.\n- Pending (record, do not invent):\n - build cost/materials/build_minutes/upkeep (D04); FacilityDefinition requires them, so no normal palette registration;\n - recorder role and staffing, collection trigger/rate (D04/D08/P16);\n - VIP suite target (P10-01);\n - D05 ordering;\n - blackmail use and camera UI (P19/P24).\n\nBRIEF: Add a separate PeepingRoomService connected from the Runtime; no rewrite of the whole runtime.\n- Reuse world_service.cells_for_footprint/validate_occupancy/occupy and construction_service.validate_placement.\n- Copy the weather snapshot-version pattern (simulation_runtime.gd:29/520/663/1248).\n- Hook facility removal so the target is marked lost.\n- Add commands for placement validation, explicit relink and evidence recording.\n- No product values, no content, no Clock/P04 change.\n\nALLOWED PATHS:\n- scripts/special/peeping_room_service.gd (new)\n- autoload/simulation_runtime.gd (bounded connection: save section, removal hook, commands)\n- scripts/core/save_service.gd (only if needed)\n- tests/special/test_peeping_room_*.gd\n- docs/plans/original-completion-2026-10-02/execution/p13-02/**\n\nLOCAL TESTS:\n- Valid public_bath and adult_private_room backs.\n- Rejections: front layer, partial overlap, non-target, incomplete target, VIP pending.\n- Corridor cell conflict and path disconnect.\n- Target demolition leads to TARGET_LOST; rebuilt target does not auto-relink; explicit relink works.\n- Duplicate event key yields a single evidence ID.\n- Stopped room rejects collection.\n- Save/restore round-trip, legacy save without the section, malformed restore leaves state unchanged.\n- Existing suites: construction/world/path, tests/supply/test_supply_save_migration.gd, tests/transport/test_transport_save.gd, tests/environment/test_runtime_weather.gd.\n\nREUSE / FULL REVIEW:\n- No completed P18/P23 rerun.\n- Full regression only on the exact final version, then a separate Claude review and normal integration.\n- No partial credit (formal 14/88 and original 30/88 unchanged); do not claim P13 or the backend complete.\n\nOwner must register the new task contract before any run.",
|
||||
"codex_model": "gpt-6.1-sol",
|
||||
"codex_model_reason": "P04-01 itself stays in wait, so no worker runs for it. For the proposed P13-02 batch: one new state service plus a bounded runtime connection. It follows existing patterns (weather snapshot versioning, kitchen explicit relink, world occupancy), uses no numeric balancing and no native code. Sol is sufficient on quality, time and usage. Switch to Astra only if review finds the runtime save-version change crosses many existing save paths."
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
# P13-02-CODE1 implementation handoff
|
||||
|
||||
This is non-graphic state/reference/occupancy/save machinery only. It does not
|
||||
complete P13-02, grant partial credit, or change the original 30/88 denominator
|
||||
or formal 14/88 count. Native execution and acceptance are pending.
|
||||
|
||||
## Declared scope and verification
|
||||
|
||||
Before editing, the worker declared the new service, bounded Runtime hooks,
|
||||
special tests, narrow runner, marker additions and this documentation. SaveService
|
||||
was conditional on an exact-key dependency; inspection found
|
||||
`SupplyAutoPurchaseQuotePlans.valid_runtime_format` has that dependency.
|
||||
Only allowed paths were edited. No asset, UI, content, model, policy, clock phase,
|
||||
or P04 change is involved.
|
||||
|
||||
The full ignored `build/owner-handoff/ACTUAL_OPUS_RUN_DECISION.json` was read and
|
||||
left untouched. Base HEAD is `1e8d4ea88876865a72547ff0edf43ed5b0e74c7e`.
|
||||
The immutable spec was not edited. Its SHA-256 without the terminal newline is
|
||||
the registered `8ea65f2eefedc772c08170186f5cd03ac017432f4b069ade4f9210d4215c2d43`;
|
||||
the on-disk file including that newline is
|
||||
`988d6e18a49372549863cd433432c2852c962fa64b138e490361c023e80249dc`.
|
||||
|
||||
Worker verification: Python AST parsing/compilation only, without executing the
|
||||
runner or importing its dependencies; source/JSON/hash review. GDScript parsing,
|
||||
all tests, `--prepare-only`, native collection and regression were **not run**.
|
||||
No check totals or native success receipts are claimed. No git writes, commits,
|
||||
branches, other agents, integration or Runner operations were performed.
|
||||
|
||||
## Service and commands
|
||||
|
||||
`PeepingRoomService` is a separate RefCounted service with no content or UI.
|
||||
All command executors use the existing Runtime queue; queue/history receipts
|
||||
remain normal Runtime behavior even for rejected/read-only domain commands.
|
||||
|
||||
| Command | Preconditions and result |
|
||||
| --- | --- |
|
||||
| `peeping_room_validate` | `origin: Vector3i`, optional `footprint: Vector2i` (2x1), optional `target_instance_id: String/StringName`. Pure domain validation. |
|
||||
| `peeping_room_place` | Always `BUILD_DEFINITION_PENDING_D04`; no occupancy, resource, room or ID mutation. |
|
||||
| `peeping_room_relink` | Existing `room_id`, explicit nonempty `target_instance_id`; full geometry and ownership validation excluding only the room's exact own occupancy. Leaves `LINKED`, stopped, `RELINKED_PENDING_RESUME`. |
|
||||
| `peeping_room_record_evidence` | Existing `room_id`, nonblank named `source_event_key`. Uses Runtime minute, never caller-supplied time. Checks stopped, target power, target closure/opening hours, completed construction authority, and lost target in that order. Otherwise rejects with `RECORDER_ELIGIBILITY_PENDING_D04_D08_P16`. Never writes the ledger. |
|
||||
|
||||
Malformed command field types return `INVALID_PAYLOAD`. Missing/blank source keys
|
||||
return `SOURCE_EVENT_KEY_REQUIRED` before operational checks. Loss latches both
|
||||
`TARGET_LOST` and stopped, so collection after normal demolition returns `STOPPED`
|
||||
while the room's link/stop reason identifies `TARGET_LOST`. No resume command or
|
||||
automatic resume is defined. Power/closure guards read actual target conditions;
|
||||
they do not define special-room power demand, staffing or normal operation.
|
||||
|
||||
Placement is exactly 2x1 BACK, fully behind a single completed FRONT
|
||||
`public_bath` or `adult_private_room`. It checks bounds/excavation, both real
|
||||
FacilityService and ConstructionService ownership, FRONT cells, World occupancy,
|
||||
and both World walkability and PathService membership. Exact rejection families:
|
||||
`WRONG_LAYER`, `WRONG_FOOTPRINT`, `OUT_OF_BOUNDS`, `NOT_EXCAVATED`,
|
||||
`TARGET_INCOMPLETE`, `TARGET_MISSING`, `PARTIAL_TARGET`, `MULTIPLE_TARGETS`,
|
||||
`TARGET_MISMATCH`, `TARGET_UNKNOWN`, `TARGET_NOT_ALLOWED`, `TARGET_WRONG_LAYER`,
|
||||
`CORRIDOR_CONFLICT`, `BACK_OCCUPIED`. The named `vip_suite` request returns
|
||||
`PENDING_P10_01`; `vip_private_salon` is not an allowed substitute.
|
||||
|
||||
Any existing corridor cell conflicts. A proposed cut through a connected corridor
|
||||
is rejected before mutation, preserving the route; no reroute or bypass is
|
||||
invented. Accepted fixture cells were already nonwalkable and become occupied
|
||||
under `special_peeping_room`. No special-room construction weight/cost is assumed.
|
||||
|
||||
Runtime demolition and FacilityService unregistration latch loss. Collection also
|
||||
detects missing FRONT occupancy/identity. Rebuilding the same cells produces a
|
||||
different construction ID and never silently reattaches rooms. Relink is explicit.
|
||||
|
||||
## CONTROLLED_FIXTURE boundary
|
||||
|
||||
Only service methods named `controlled_fixture_place`,
|
||||
`controlled_fixture_set_stopped`, and `controlled_fixture_record_evidence` create
|
||||
test rooms, enable fixture collection, or write evidence. They are labeled
|
||||
CONTROLLED_FIXTURE in code and tests. They have no command/palette registration,
|
||||
and no Runtime executor calls them. Test helpers disclose direct underground
|
||||
geometry setup and MIMI registration; those do not assert natural unlock/join or
|
||||
production eligibility. Target construction uses existing definitions/costs/times.
|
||||
|
||||
Room IDs come from the existing StableIdGenerator's `peeping_room` counter.
|
||||
Evidence IDs encode the UTF-8 lengths and hex bytes of the full
|
||||
`(room_id, target_instance_id, source_event_key)` tuple. This is injective rather
|
||||
than delimiter concatenation or a hash with possible collisions. Replays return
|
||||
the existing ID with `duplicated=true` and retain the first minute. Evidence is
|
||||
only IDs, source key and minute. Room `target_history` retains prior bindings so
|
||||
relink does not orphan existing opaque evidence.
|
||||
|
||||
## Save invariants
|
||||
|
||||
Runtime versions remain 14 and 15, with version 15 only for existing v2 purchase
|
||||
history. Optional canonical StringName key `special_peeping_rooms` has section
|
||||
version 1 and exact keys `version`, `rooms`, `evidence`. Empty service state emits
|
||||
no key, preserving original snapshots. Absent sections restore empty only if no
|
||||
world occupancy uses the special kind or `peeping_room.` prefix. Thus removing
|
||||
the section from a current room-bearing save is rejected without a version bump.
|
||||
|
||||
Restore stages the entire section against staged world, path, facilities,
|
||||
construction and ID generator before committing any Runtime state. It checks
|
||||
canonical keys/types, version, duplicate room/evidence identities, deterministic
|
||||
evidence tuple encoding, bounds/geometry, room/occupancy correspondence in both
|
||||
directions, generator high-water mark, known historical facility IDs, present
|
||||
target definition/geometry, loss/stopped coherence, and evidence room/history/time
|
||||
references. Null/present-empty sections are invalid; absence is the only empty
|
||||
encoding. Existing pending command/reference and schema migration checks remain.
|
||||
|
||||
SaveService validates a present section through the same staged service validator,
|
||||
then supplies a shallow copy without this one key to the original purchase-format
|
||||
allowlist. No other keys are removed. The original format 1 (Runtime 1–14),
|
||||
format 2 (Runtime 15), manifest duplicate 15 and MIMI checks remain unchanged.
|
||||
|
||||
## Verification handoff
|
||||
|
||||
Five strict suites cover geometry/corridor, removal/relink, evidence/guards,
|
||||
typed atomic save corruption and physical format 1, and Runtime commands plus
|
||||
physical MIMI format 2. Tests use `var_to_bytes` for whole Runtime atomicity and
|
||||
roundtrip checks. New marker rows carry final test source hashes; prior rows and
|
||||
policy are unchanged. A helper under `tests/special/` is not a discovered suite.
|
||||
|
||||
`tools/run_p13_reference_tests.py` defaults to read-only verification of
|
||||
`$BUILD_OUTPUT_DIR/p13-reference-native`, failing closed without an absolute
|
||||
environment path. Explicit `--output --collect` is for Root only. The strict flag
|
||||
parser rejects abbreviations, repeated flags, positional inputs and `=` aliases.
|
||||
`--prepare-only` is non-native but was not executed by this worker.
|
||||
|
||||
The runner imports the existing P18 core by path. Since its three entry functions
|
||||
hardcode their label and seven/nine counts, a bounded AST adapter changes only
|
||||
protocol/runner identities, those explicit roster cardinalities, and diagnostic
|
||||
labels. It checks the exact adaptation-site counts and fails closed on drift.
|
||||
All confinement, inventory, JSON, sealing, source/engine/marker/policy binding,
|
||||
process, diagnostic, profile and cleanup gates are reused. It neither copies the
|
||||
whole runner nor modifies P18/helpers. The whole selected source map binds both
|
||||
runner sources. Phase count derives from `len(ROSTER) + 2`.
|
||||
|
||||
Roster includes all five new suites and existing construction/world/path/runtime
|
||||
construction, supply migration, transport save, Runtime weather, snapshot
|
||||
serialization, save lifecycle and MIMI purchase suites. Receipts retain
|
||||
`formal_acceptance=false` and `original_unit_complete=false`.
|
||||
|
||||
Root must perform serialized native collection with the allocation/private
|
||||
profile, then registered `p13-reference` validation, a separate actual Opus
|
||||
review, and the final exact-version required regression. Only those steps can
|
||||
establish execution results.
|
||||
|
||||
## Still pending, without invented values
|
||||
|
||||
D04 build/upkeep/build minutes and other product numbers; recorder staffing and
|
||||
natural triggers/rates D04/D08/P16; VIP suite P10-01; D05 transaction decisions
|
||||
(no tick-phase changes here); P19 evidence use and P24 camera UI; normal palette
|
||||
registration/construction/operation and natural production evidence; whole P13
|
||||
acceptance, final review/integration, and applicable native Windows conditions.
|
||||
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"id": "P13-02-CODE1",
|
||||
"parent_original_delivery_unit": "P13-02",
|
||||
"parent_work": "覗き部屋の対象背面、通路寸断、対象喪失と証拠IDを状態として実装する。",
|
||||
"parent_acceptance": "対象撤去、重複収集、停止、途中保存で状態と参照が整合する。",
|
||||
"original_denominator": {
|
||||
"packages": 30,
|
||||
"units": 88,
|
||||
"formal_complete_at_registration": 14,
|
||||
"partial_credit": false
|
||||
},
|
||||
"whole_parent_acceptance": false,
|
||||
"scope": "Non-graphic state/reference/occupancy/save machinery connected to real Runtime; no sexual depiction, camera content or blackmail action; this registered batch is not the whole original unit.",
|
||||
"authority": [
|
||||
{
|
||||
"ref": "BASELINE:52-53",
|
||||
"text": "Target FRONT VIP room/private room/changing area BACK; occupied room cells cannot be back corridor; recorder collects evidence."
|
||||
},
|
||||
{
|
||||
"ref": "BASELINE:167-174",
|
||||
"text": "VIP suite/public bath/private room explicitly peeping-compatible; restricted behind these target types and cuts back corridor."
|
||||
},
|
||||
{
|
||||
"ref": "BASELINE:199-209",
|
||||
"text": "Peeping room 2x1 BACK. Current public_bath/adult_private_room target definitions exist; missing VIP suite must remain missing, vip_private_salon is not a substitute."
|
||||
}
|
||||
],
|
||||
"implementation_requirements": [
|
||||
"Introduce separate PeepingRoomService, bounded real Runtime wiring; no whole runtime rewrite.",
|
||||
"Validate 2x1 BACK footprint entirely behind one allowed completed FRONT target, integrate existing construction/world occupancy rules; reject wrong layer, partial/multi-target overlap, unknown/missing/incomplete target and corridor conflicts.",
|
||||
"Stable room/target identity with target removal/loss detection; reconstructed different target is not silently the old identity; explicit validated relink only, preserving stopped/no-auto-resume rules.",
|
||||
"Idempotent evidence IDs bound to stable room/target/source event key; replay cannot duplicate or alias another target. Opaque state records only.",
|
||||
"Collection rejects stopped/no-power/closed/under-construction/lost-target cases; do not create undefined natural trigger/rate/staffing eligibility.",
|
||||
"Versioned Runtime snapshot section; genuinely legacy absent section migrates empty; current-schema missing/malformed/unknown/wrong-reference/duplicate data reject atomically with original whole Runtime untouched. Preserve all existing schema migrations and pending references.",
|
||||
"No free production placement, bypassed build costs or arbitrary content-event injection exposed through new commands. Unknown build/upkeep/staff/collection values remain unset and unavailable; backend tests may use clearly labeled controlled fixtures. Normal palette registration and naturally collected production evidence are pending. Define command preconditions precisely; construction costs/definition and recorder eligibility cannot be silently invented.",
|
||||
"Reuse existing guarded native harness logic for a strict narrow runner and add new test marker registrations without weakening prior marker/policy behavior. Do not rerun full regression during implementation."
|
||||
],
|
||||
"required_local_coverage": [
|
||||
"public_bath and adult_private_room valid geometry; VIP unavailable not substituted",
|
||||
"wrong FRONT, partial/multiple target footprint, incomplete/missing target; corridor/path occupancy conflict/disconnection",
|
||||
"target demolition/loss, rebuild different identity, explicit relink; reject collection after removal",
|
||||
"same event replay one evidence ID; different room/target keys distinct and stable",
|
||||
"stopped/no-power/closed/under-construction collection rejection",
|
||||
"roundtrip exact typed state; legacy absence; current missing/malformed version/references/duplicates atomic unchanged",
|
||||
"Runtime command/removal/save integration; existing construction/world/path/supply-save/transport-save/weather migrations impact coverage"
|
||||
],
|
||||
"pending_not_invented": [
|
||||
"D04 build/upkeep/build_minutes and related numbers",
|
||||
"recorder role staffing and natural collection trigger/rate D04/D08/P16",
|
||||
"VIP suite P10-01",
|
||||
"D05 unresolved transaction rules; no tick-phase changes",
|
||||
"P19 use of evidence and P24 camera UI",
|
||||
"normal construction/operation/full parent acceptance, final whole review and applicable Windows conditions"
|
||||
],
|
||||
"workflow": [
|
||||
"Actual Opus commander confirms registered run and model; Runner worker only edits allowed paths.",
|
||||
"Worker static/local preparation only; Root owns serialized native collection in allocation build with private profile and guarded process/cleanup receipts.",
|
||||
"Registered validation reads/verifies complete native evidence, exact current selected source and marker/policy/engine/input/environment binding. Zero exit alone is not acceptance.",
|
||||
"Separate actual Opus review, final exact-version required regression and ordinary integration/final; any backend completion never adds parent original-unit credit."
|
||||
],
|
||||
"model_proposal": {
|
||||
"codex": "gpt-6.1-sol",
|
||||
"selected_by_actual_opus_run": "e65d48f5a7294378a81bb58dea00c605"
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
{
|
||||
"controller_sha256": "d00bf46bfcc0e0bb197edd284a3ae14610ca710507831e18e071a79461946e8a",
|
||||
"harness_sha256": "744177b243fb97ff7ad954880a433acf6a9b879c06d4ee51cfe02ed95be29422",
|
||||
"cases": [
|
||||
{
|
||||
"case": "copytree string arguments create separate byte-exact support files",
|
||||
"expected": "accept",
|
||||
"actual": "accept"
|
||||
},
|
||||
{
|
||||
"case": "exact whole private-profile move and readback",
|
||||
"expected": "accept",
|
||||
"actual": "accept"
|
||||
},
|
||||
{
|
||||
"case": "absent empty startup profile explicitly retained",
|
||||
"expected": "accept",
|
||||
"actual": "accept"
|
||||
},
|
||||
{
|
||||
"case": "reject unowned profile name",
|
||||
"expected": "reject",
|
||||
"actual": "reject"
|
||||
},
|
||||
{
|
||||
"case": "reject valid nonce at wrong canonical location",
|
||||
"expected": "reject",
|
||||
"actual": "reject"
|
||||
},
|
||||
{
|
||||
"case": "reject changed original profile",
|
||||
"expected": "reject",
|
||||
"actual": "reject"
|
||||
},
|
||||
{
|
||||
"case": "reject undeclared profile member",
|
||||
"expected": "reject",
|
||||
"actual": "reject"
|
||||
},
|
||||
{
|
||||
"case": "reject profile symlink",
|
||||
"expected": "reject",
|
||||
"actual": "reject"
|
||||
},
|
||||
{
|
||||
"case": "reject existing retention destination",
|
||||
"expected": "reject",
|
||||
"actual": "reject"
|
||||
},
|
||||
{
|
||||
"case": "large profile lossless compression entire readback",
|
||||
"expected": "accept",
|
||||
"actual": "accept"
|
||||
},
|
||||
{
|
||||
"case": "reject compressed bytes changed",
|
||||
"expected": "reject",
|
||||
"actual": "reject"
|
||||
},
|
||||
{
|
||||
"case": "reject incomplete compressed member manifest",
|
||||
"expected": "reject",
|
||||
"actual": "reject"
|
||||
},
|
||||
{
|
||||
"case": "reject invalid archive hash",
|
||||
"expected": "reject",
|
||||
"actual": "reject"
|
||||
}
|
||||
],
|
||||
"passed": true,
|
||||
"native_engines_started": 0
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"task_id": "P13-02-CODE1",
|
||||
"commit": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"status": "pass",
|
||||
"summary": "判定: pass。ただし対象は登録済みの限定バックエンド CODE1 のみです。親の P13-02 は完了していないままで、30/88・formal 14/88 の分母にも加算しません。\n\n【実装の照合(仕様のすべての要件・カバレッジ項目と突き合わせ)】\n- 構成: PeepingRoomService を独立サービスとして追加し、Runtime 側の接続は限定的です。\n - 生成と読み込みのたびに構成し直し、施設登録解除と解体の両方で接続しています。\n - コマンドは validate / place / relink / record_evidence の4種で、通常の実行キューを通ります。\n- 配置判定: 2x1 の BACK 配置が、許可された完成済み FRONT 対象1つの真裏に完全に収まるかを検査します。\n - 拒否理由を網羅しています: 層違い、形状違い、範囲外、未掘削、建設中、対象なし、部分重なり、複数対象、対象不一致、不明対象、許可外対象、通路衝突(World の歩行可否と Path の両方で判定)、BACK 占有済み。\n - vip_suite は PENDING_P10_01 として扱い、vip_private_salon を代用に使わないことを確認しました。\n- 対象の同一性:\n - 撤去すると TARGET_LOST になり、停止状態に固定されます。\n - 同じ位置に再建すると別の ID になり、自動で再リンクしません。\n - 明示的な relink は配置判定をすべてやり直し、停止状態(RELINKED_PENDING_RESUME)のまま残ります。\n - target_history に過去の対象 ID を残すため、既存の証拠が孤立しません。\n- 証拠 ID: (room, target, source_event_key) を長さ付き UTF-8 の hex で符号化しており、単射です。\n - 同じイベントの再実行は同一 ID を返し、記録は増えません。\n - 部屋や対象が違えば ID も別になり、取り違えは起きません。\n- 本番経路の封じ込め:\n - 本番の記録は RECORDER_ELIGIBILITY_PENDING_D04_D08_P16 で拒否され、台帳を変えません。\n - place は BUILD_DEFINITION_PENDING_D04 を返すだけです。テストで、ドメインイベントの受領が1件だけ発行され、それ以外の ID とドメインデータが変わらないことを確認しています。\n - CONTROLLED_FIXTURE 用のメソッドは公開コマンドやパレットから呼べません。\n - 停止中 / 無電力 / 閉店 / 建設中 / 対象喪失 の各ケースで収集を拒否します。\n- 保存:\n - Runtime のバージョンは 14 / 15 のままで、format2 は MIMI15 の場合だけです。\n - 新セクションは任意キーで、空のときは出力しません。セクションのない本物の旧形式セーブは空として移行します。\n - 現行形式で不正なものは全体をそのまま保ったまま原子的に拒否し、元の Runtime を壊しません。対象は、セクション欠落 / null / バージョン / 未知キー / 重複 / 参照不正 / 時刻 / ID 上限 / 型 / 孤立占有、およびその逆方向の不整合で、テストの18変異ケースと孤立ケースで確認しています。\n - SaveService は同じ検証器を通したうえで、購入用の許可キー一覧を元のまま維持しています。\n\n【検証証跡】\n- 登録済みの p13-reference 検証は exit 0 で通過しています(narrow 15 スイート / 863 チェック / 構文 329 / 終了 17)。\n- 全体の 184 スイート / 21903 チェックは合成検証です。\n - 構成: 元の通し実行は ENOSPC で失敗しており、失敗のまま残っています。その前半58スイートを再検証し、後半126スイートを実際に実行した結果を組み合わせたものです。\n - 結果: 読み取り専用の集計で verified / composed=true(ネイティブ終了 186 件、すべて一意)を、元の通し実行と対象コミットに紐付いた記録で確認しました。\n- 自己申告だけに依拠していません。\n\n【残る後続ゲート】\n- 最終版でのリグレッション、通常の統合と最終確定。\n- D04 / D08 / P16 の数値、記録係の配置、自然な収集トリガー、VIP(P10-01)、P19 / P24、通常のパレット登録、Windows 条件。",
|
||||
"acceptance_ids": [
|
||||
"P13-02-CODE1"
|
||||
],
|
||||
"findings": [
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "create_snapshot は対象喪失を正規化しません(detect_target_loss は収集時にだけ遅延実行されます)。そのため、シグナルを経ずに対象が消えた場合は LINKED の部屋が残ります。こうして書かれたセーブは restore_section の配置判定で全体が拒否され、読み込めなくなります。現状、そのような経路は確認できませんでした(facility_service.restore_snapshot はシグナルを出さず、ロールバックは既存の対象を消しません)。ただし、スナップショット生成時に正規化するか、後続で防御策を入れることを推奨します。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Runtime の schema バージョンが 5 未満(v1〜4)の旧形式に special_peeping_rooms があっても拒否されず、検証を通れば受理されます。仕様の「本物の旧形式はセクションなし」に照らすと、偽装された旧ペイロードを受け入れる余地がわずかにあります。中身は restore_section で厳密に検証されるため、実害は小さいと判断します。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "施設の寸法移行(prepare_facility_dimension_snapshot)で public_bath / adult_private_room の占有セルが変わると、LINKED の部屋の再検証に失敗し、移行全体が拒否されます。現在の部屋はテスト用フィクスチャでしか作れないため影響は限定的です。後続の本番配置の実装時に扱いを決める必要があります。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "「建設中なら収集を拒否」の分岐は、本番状態では到達できません。テストは ConstructionService を差し替えて確認しており、意味上の網羅としては人工的です。配置判定も、建物定義(D04)が未定のため construction_service.validate_placement(支持・重量の判定)を使っていません。いずれも仕様の「未定値を発明しない」範囲内として許容しますが、記録に残します。"
|
||||
}
|
||||
]
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"passed": true,
|
||||
"error": null,
|
||||
"ended_unix_ns": 1792230973546897000,
|
||||
"controller_sha256": "d00bf46bfcc0e0bb197edd284a3ae14610ca710507831e18e071a79461946e8a",
|
||||
"owner_runner_pid": 92258,
|
||||
"original_full_attempt_passed": false,
|
||||
"whole_original_acceptance": false
|
||||
}
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"source": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"original_import_and_parse_passed": 2,
|
||||
"reusable_suites": 58,
|
||||
"raw057_qualified_after_archival_recovery": true,
|
||||
"original_owned_ended_pids": [
|
||||
73903,
|
||||
73987,
|
||||
74026,
|
||||
74052,
|
||||
74079,
|
||||
74092,
|
||||
74125,
|
||||
74151,
|
||||
74171,
|
||||
74194,
|
||||
74212,
|
||||
74236,
|
||||
74256,
|
||||
74284,
|
||||
74327,
|
||||
74632,
|
||||
75319,
|
||||
75331,
|
||||
75368,
|
||||
75392,
|
||||
75429,
|
||||
75453,
|
||||
75466,
|
||||
75555,
|
||||
75577,
|
||||
75603,
|
||||
75619,
|
||||
75654,
|
||||
75687,
|
||||
75932,
|
||||
76254,
|
||||
76409,
|
||||
76434,
|
||||
76455,
|
||||
76480,
|
||||
76487,
|
||||
76566,
|
||||
76851,
|
||||
76898,
|
||||
76931,
|
||||
76945,
|
||||
76973,
|
||||
76989,
|
||||
77012,
|
||||
77035,
|
||||
77087,
|
||||
77108,
|
||||
77120,
|
||||
77143,
|
||||
77158,
|
||||
77179,
|
||||
77206,
|
||||
77240,
|
||||
77253,
|
||||
77277,
|
||||
77297,
|
||||
77325,
|
||||
77340,
|
||||
77364,
|
||||
77382
|
||||
],
|
||||
"original_checks": 10991,
|
||||
"remaining_suites": 126,
|
||||
"engine_runs": 0,
|
||||
"whole_original_acceptance": false,
|
||||
"original_full_attempt_passed": false,
|
||||
"controller_sha256": "d00bf46bfcc0e0bb197edd284a3ae14610ca710507831e18e071a79461946e8a",
|
||||
"free_bytes": 4484616192,
|
||||
"admission_required_bytes": 3467374666,
|
||||
"root_owner_pid": 92258,
|
||||
"run_id": "52bfe67d08e54acd9478d74d5b030293",
|
||||
"started_unix_ns": 1792229968318418000,
|
||||
"original_input_sha256": "24d10b3a91553df54b3b2fd4b1a57dce683cc72a55576e0c73c9e142b335ad40"
|
||||
}
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
{
|
||||
"at_jst": "2026-10-17T19:05:57.762697+09:00",
|
||||
"plan_id": "P13-02",
|
||||
"batch": "P13-02-CODE1",
|
||||
"S": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"original_packages": 30,
|
||||
"original_units": 88,
|
||||
"formally_completed": 14,
|
||||
"new_credit": 0,
|
||||
"normal_validation": "passed; exact S narrow15/863/329parse/17nativeended",
|
||||
"actual_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"
|
||||
},
|
||||
"formal_review": {
|
||||
"state": "terminal_pass",
|
||||
"run_id": "ead8e74b9683404d8cf3d97bca118726",
|
||||
"model": "claude-opus-5-5",
|
||||
"critical_high_medium": 0,
|
||||
"low": 4,
|
||||
"artifact": "ACTUAL_INDEPENDENT_OPUS_REVIEW.json"
|
||||
},
|
||||
"normal_integration_candidate": "65f07bf5eaa759a8e2e17c7bdbbbdbceb24ee373",
|
||||
"source_on_main": true,
|
||||
"remaining_conditions": [
|
||||
"Whole original P13-02 normal construction/recorder/natural triggers/approved quantities/VIP/UI/assets/Windows and all original conditions remain unaccepted; CODE1 has no new original-unit credit",
|
||||
"Four low severity future-production defensive/migration/coverage observations retained from actual Opus review; no observed ordinary production path and no critical/high/medium finding",
|
||||
"P04-01 remains next original formal closure when existing D05 owner choices arrive; independent next original-unit selection will be requested from actual Opus"
|
||||
],
|
||||
"evidence": [
|
||||
{
|
||||
"path": "ACTUAL_AGGREGATE_READONLY_VERIFICATION.json",
|
||||
"original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-full-composed-readonly-verification-a7e3069.json",
|
||||
"bytes": 562,
|
||||
"sha256": "3a8be9f92c76d14dc1c9f6d387fad8e939d0d333a6f8d5903b53b8fc44ef584b"
|
||||
},
|
||||
{
|
||||
"path": "ACTUAL_SUFFIX_INPUT.json",
|
||||
"original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-full-continuation-a7/controller-input.json",
|
||||
"bytes": 1401,
|
||||
"sha256": "81c3dcfdd092fde977c158482310f164a727a73dabea698e18807eeb585d4937"
|
||||
},
|
||||
{
|
||||
"path": "ACTUAL_SUFFIX_ENDED.json",
|
||||
"original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-full-continuation-a7/controller-ended.json",
|
||||
"bytes": 277,
|
||||
"sha256": "b0759724f65175e01822b94ee731b3b9574c5098b82ce931e73e087fc5a89c65"
|
||||
},
|
||||
{
|
||||
"path": "ACTUAL_CONTINUATION_CONTROLS.json",
|
||||
"original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-full-continuation-a7/CONTINUATION_STORAGE_CONTROLS.json",
|
||||
"bytes": 1846,
|
||||
"sha256": "96f47033ef95614426cb8646f7a4fbfedcb5af6bd95a0ab1e54a802d3eed77a6"
|
||||
},
|
||||
{
|
||||
"path": "ACTUAL_INDEPENDENT_OPUS_REVIEW.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p13-02-reference/runs/ead8e74b9683404d8cf3d97bca118726/result.json",
|
||||
"bytes": 6753,
|
||||
"sha256": "cc12bb1011da2f3a21018da8fdde966a13e70dcf33ef7c83310dcf0ca08f4ec8"
|
||||
},
|
||||
{
|
||||
"path": "FORMAL_VALIDATION.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p13-02-reference/runs/6df11a390bc44b48a10c916cbeab95c9-validation.json",
|
||||
"bytes": 380,
|
||||
"sha256": "d9e73b97bb173a75931a0263119ff6430a2049e204ca459fbb53ca04b8aa0e4a"
|
||||
},
|
||||
{
|
||||
"path": "FORMAL_INTEGRATION.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p13-02-reference/runs/562e2bb9ca8b4f458d0cc011edd41cc4-integration.json",
|
||||
"bytes": 381,
|
||||
"sha256": "513ab79bd5fadafb929d5ad3201a8e9d5ff0e826eda37a80c831d82327940d8e"
|
||||
},
|
||||
{
|
||||
"path": "FORMAL_FINAL.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p13-02-reference/runs/45fdaf3b82c84e1485ad0d4cc7bf993c-final.json",
|
||||
"bytes": 375,
|
||||
"sha256": "213af13d38587ff108802fc96f6c410af6e9bf66ab6bb683963af62d36ecae2f"
|
||||
},
|
||||
{
|
||||
"path": "RUNNER_COMPLETED_TRACEABILITY.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p13-02-reference/traceability/P13-02-CODE1.json",
|
||||
"bytes": 3697,
|
||||
"sha256": "c11f2f390bfe3222dc4e955fb001878ba5db03deafd1b85534299da758354250"
|
||||
},
|
||||
{
|
||||
"path": "EXACT_INTEGRATED_FULL_REUSE_QUALIFICATION.json",
|
||||
"actual_original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/coordinator-start-20261017/EXACT_C65F07B_FULL_REUSE_QUALIFICATION.json",
|
||||
"bytes": 1487,
|
||||
"sha256": "b5c4f52638b34be0c95030486560d1ce8ed83f48e855a2fddfef528e6e635721"
|
||||
}
|
||||
],
|
||||
"next_formal_original_unit": "P04-01 pending existing real-owner D05 choices; no duplicate request or fabricated approval",
|
||||
"backend_batch_state": "completed",
|
||||
"normal_main_base": "191ea3b4d1289144d8d31096f50fbd71435656c9",
|
||||
"normal_final": {
|
||||
"passed": true,
|
||||
"commit": "65f07bf5eaa759a8e2e17c7bdbbbdbceb24ee373",
|
||||
"artifact": "FORMAL_FINAL.json"
|
||||
},
|
||||
"whole_original_acceptance": false
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"S": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"C": "65f07bf5eaa759a8e2e17c7bdbbbdbceb24ee373",
|
||||
"M": "191ea3b4d1289144d8d31096f50fbd71435656c9",
|
||||
"candidate_worktree": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/P13-02-CODE1-integration-15cc1271",
|
||||
"whole_selected_source_files": 1368,
|
||||
"all_source_settings_assets_test_inputs_helpers_byte_equal": true,
|
||||
"marker_policy_engine_roster_parse_default_player_equal": true,
|
||||
"full_evidence_reuse_qualified": true,
|
||||
"original_full_attempt_passed": false,
|
||||
"whole_original_acceptance": false,
|
||||
"aggregate": {
|
||||
"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"
|
||||
},
|
||||
"actual_independent_review": "ead8e74b9683404d8cf3d97bca118726",
|
||||
"critical_high_medium": 0,
|
||||
"low_findings": 4,
|
||||
"ownership_authority": "Existing explicit human main-update and commit/push permission only; no new SHA-specific human speech is claimed",
|
||||
"time_ns": 1792231367426496000
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"task_id": "P13-02-CODE1",
|
||||
"commit": "65f07bf5eaa759a8e2e17c7bdbbbdbceb24ee373",
|
||||
"kind": "final",
|
||||
"checks": [
|
||||
{
|
||||
"id": "p13-reference",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p13-02-reference/runs/2add11628b67481495b3782fa64dee52",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"task_id": "P13-02-CODE1",
|
||||
"commit": "65f07bf5eaa759a8e2e17c7bdbbbdbceb24ee373",
|
||||
"kind": "integration",
|
||||
"checks": [
|
||||
{
|
||||
"id": "p13-reference",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p13-02-reference/runs/19d3100d61564e3c9878624d2d8ea496",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"task_id": "P13-02-CODE1",
|
||||
"commit": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"kind": "validation",
|
||||
"checks": [
|
||||
{
|
||||
"id": "p13-reference",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p13-02-reference/runs/339d1c3cc94648aa94b00a750a5fa5ce",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"source_review": "ead8e74b9683404d8cf3d97bca118726",
|
||||
"scope": "Future normal production unlock and dimension-migration defensive handling; no mandatory CODE1 gate remains, parent P13-02 incomplete",
|
||||
"findings": [
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "create_snapshot は対象喪失を正規化しません(detect_target_loss は収集時にだけ遅延実行されます)。そのため、シグナルを経ずに対象が消えた場合は LINKED の部屋が残ります。こうして書かれたセーブは restore_section の配置判定で全体が拒否され、読み込めなくなります。現状、そのような経路は確認できませんでした(facility_service.restore_snapshot はシグナルを出さず、ロールバックは既存の対象を消しません)。ただし、スナップショット生成時に正規化するか、後続で防御策を入れることを推奨します。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Runtime の schema バージョンが 5 未満(v1〜4)の旧形式に special_peeping_rooms があっても拒否されず、検証を通れば受理されます。仕様の「本物の旧形式はセクションなし」に照らすと、偽装された旧ペイロードを受け入れる余地がわずかにあります。中身は restore_section で厳密に検証されるため、実害は小さいと判断します。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "施設の寸法移行(prepare_facility_dimension_snapshot)で public_bath / adult_private_room の占有セルが変わると、LINKED の部屋の再検証に失敗し、移行全体が拒否されます。現在の部屋はテスト用フィクスチャでしか作れないため影響は限定的です。後続の本番配置の実装時に扱いを決める必要があります。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "「建設中なら収集を拒否」の分岐は、本番状態では到達できません。テストは ConstructionService を差し替えて確認しており、意味上の網羅としては人工的です。配置判定も、建物定義(D04)が未定のため construction_service.validate_placement(支持・重量の判定)を使っていません。いずれも仕様の「未定値を発明しない」範囲内として許容しますが、記録に残します。"
|
||||
}
|
||||
]
|
||||
}
|
||||
+88
@@ -0,0 +1,88 @@
|
||||
{
|
||||
"contract": {
|
||||
"id": "P13-02-CODE1",
|
||||
"title": "P13-02 背面対象参照・占有・保存の非描写機構(全原成果の一部、加算なし)",
|
||||
"requirement_ids": [
|
||||
"P13-02"
|
||||
],
|
||||
"acceptance_ids": [
|
||||
"P13-02-CODE1"
|
||||
],
|
||||
"spec_ref": "docs/plans/original-completion-2026-10-02/execution/p13-02/CODE1_TASK_SPEC.json",
|
||||
"base_commit": "1e8d4ea88876865a72547ff0edf43ed5b0e74c7e",
|
||||
"worker": "codex",
|
||||
"allowed_paths": [
|
||||
"scripts/special/peeping_room_service.gd",
|
||||
"autoload/simulation_runtime.gd",
|
||||
"scripts/core/save_service.gd",
|
||||
"tests/special/**",
|
||||
"tools/run_p13_reference_tests.py",
|
||||
"docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json",
|
||||
"docs/plans/original-completion-2026-10-02/execution/p13-02/**"
|
||||
],
|
||||
"depends_on": [],
|
||||
"resource_locks": [
|
||||
"runtime-save-schema",
|
||||
"special-target-reference",
|
||||
"p13-reference-tests"
|
||||
],
|
||||
"validation_ids": [
|
||||
"p13-reference"
|
||||
],
|
||||
"max_repair_attempts": null,
|
||||
"spec_sha256": "8ea65f2eefedc772c08170186f5cd03ac017432f4b069ade4f9210d4215c2d43"
|
||||
},
|
||||
"implementation_commit": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"integration_commit": "65f07bf5eaa759a8e2e17c7bdbbbdbceb24ee373",
|
||||
"owner": "このチャットのユーザーによる既存の明示指示「mainの更新を明示的に許可します」「コミットすべき内容をコミットして。その上でpushして」に基づく継続許可。対象は全条件レビュー合格の登録CODE1と、この実C/M。新たなSHA指定の人間発言は主張しない。原P13-02の完了加算なし。",
|
||||
"evidence": [
|
||||
{
|
||||
"id": 1,
|
||||
"task_id": "P13-02-CODE1",
|
||||
"kind": "validation",
|
||||
"commit_sha": "e930a1dedff7ab4c4a94d274a2e0c55fc2b95829",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p13-02-reference/runs/212e4352722a442990b6fe923abe8f84-validation.json",
|
||||
"passed": 0
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"task_id": "P13-02-CODE1",
|
||||
"kind": "validation",
|
||||
"commit_sha": "27fc5f05442ca3a2b0986a976b303cf0ef675f66",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p13-02-reference/runs/5526523400ff41b6aeacd0d6f8ffd9b9-validation.json",
|
||||
"passed": 0
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"task_id": "P13-02-CODE1",
|
||||
"kind": "validation",
|
||||
"commit_sha": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p13-02-reference/runs/6df11a390bc44b48a10c916cbeab95c9-validation.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"task_id": "P13-02-CODE1",
|
||||
"kind": "review",
|
||||
"commit_sha": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p13-02-reference/runs/ead8e74b9683404d8cf3d97bca118726/result.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"task_id": "P13-02-CODE1",
|
||||
"kind": "integration",
|
||||
"commit_sha": "65f07bf5eaa759a8e2e17c7bdbbbdbceb24ee373",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p13-02-reference/runs/562e2bb9ca8b4f458d0cc011edd41cc4-integration.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"task_id": "P13-02-CODE1",
|
||||
"kind": "final",
|
||||
"commit_sha": "65f07bf5eaa759a8e2e17c7bdbbbdbceb24ee373",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p13-02-reference/runs/45fdaf3b82c84e1485ad0d4cc7bf993c-final.json",
|
||||
"passed": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
+10226
File diff suppressed because it is too large
Load Diff
+4945
File diff suppressed because it is too large
Load Diff
+209
@@ -0,0 +1,209 @@
|
||||
{
|
||||
"scripts/special/peeping_room_service.gd.uid": {
|
||||
"owner": "scripts/special/peeping_room_service.gd",
|
||||
"owner_sha256": "4dc02bc99f081d63a2518f69c960397d778d577b93d87d57bcac29bc6f108531",
|
||||
"file_type": "regular",
|
||||
"bytes": 20,
|
||||
"raw_bytes": [
|
||||
117,
|
||||
105,
|
||||
100,
|
||||
58,
|
||||
47,
|
||||
47,
|
||||
98,
|
||||
105,
|
||||
51,
|
||||
54,
|
||||
102,
|
||||
118,
|
||||
112,
|
||||
49,
|
||||
106,
|
||||
105,
|
||||
105,
|
||||
105,
|
||||
118,
|
||||
10
|
||||
],
|
||||
"sha256": "3f045afc3c140886c70ec8494d6dcb012e6da645e8a3ff3c6488442ce63a9353",
|
||||
"text": "uid://bi36fvp1jiiiv\n"
|
||||
},
|
||||
"tests/special/peeping_room_fixture.gd.uid": {
|
||||
"owner": "tests/special/peeping_room_fixture.gd",
|
||||
"owner_sha256": "0243b1d35e1fdd8aa085894a0ce1e5cd1a189e5c98fcb859f81b70ae75b98bed",
|
||||
"file_type": "regular",
|
||||
"bytes": 20,
|
||||
"raw_bytes": [
|
||||
117,
|
||||
105,
|
||||
100,
|
||||
58,
|
||||
47,
|
||||
47,
|
||||
98,
|
||||
48,
|
||||
99,
|
||||
51,
|
||||
111,
|
||||
117,
|
||||
117,
|
||||
113,
|
||||
52,
|
||||
50,
|
||||
121,
|
||||
99,
|
||||
103,
|
||||
10
|
||||
],
|
||||
"sha256": "a74e5ef6d8959826919a648e8b5d82e96d1c73ff22cd6c1f216be8b5c4060a8a",
|
||||
"text": "uid://b0c3ouuq42ycg\n"
|
||||
},
|
||||
"tests/special/test_peeping_room_evidence.gd.uid": {
|
||||
"owner": "tests/special/test_peeping_room_evidence.gd",
|
||||
"owner_sha256": "390e0032d14de9a8875ced163a922341ce655744200d78b4ffa776d42c4f8c2a",
|
||||
"file_type": "regular",
|
||||
"bytes": 20,
|
||||
"raw_bytes": [
|
||||
117,
|
||||
105,
|
||||
100,
|
||||
58,
|
||||
47,
|
||||
47,
|
||||
100,
|
||||
102,
|
||||
116,
|
||||
115,
|
||||
107,
|
||||
121,
|
||||
49,
|
||||
51,
|
||||
112,
|
||||
101,
|
||||
48,
|
||||
117,
|
||||
106,
|
||||
10
|
||||
],
|
||||
"sha256": "26bbc1435bcda963b5866327b887096f798b1629c7984768c85bfb6175648ec5",
|
||||
"text": "uid://dftsky13pe0uj\n"
|
||||
},
|
||||
"tests/special/test_peeping_room_geometry.gd.uid": {
|
||||
"owner": "tests/special/test_peeping_room_geometry.gd",
|
||||
"owner_sha256": "103d85f83e1e97a8637892504264275eef23f172eeec56c94e5c022d81bf6945",
|
||||
"file_type": "regular",
|
||||
"bytes": 19,
|
||||
"raw_bytes": [
|
||||
117,
|
||||
105,
|
||||
100,
|
||||
58,
|
||||
47,
|
||||
47,
|
||||
52,
|
||||
114,
|
||||
52,
|
||||
48,
|
||||
102,
|
||||
49,
|
||||
107,
|
||||
112,
|
||||
106,
|
||||
109,
|
||||
118,
|
||||
106,
|
||||
10
|
||||
],
|
||||
"sha256": "391b78806bc0bf759f00c778cb25dfaa97d47f6e309c3b302412c38123c5440c",
|
||||
"text": "uid://4r40f1kpjmvj\n"
|
||||
},
|
||||
"tests/special/test_peeping_room_reference.gd.uid": {
|
||||
"owner": "tests/special/test_peeping_room_reference.gd",
|
||||
"owner_sha256": "188b00a60f7aefda69dc4973f1de9c14447a0d4bcdd1257a2eabe7c4782e4caf",
|
||||
"file_type": "regular",
|
||||
"bytes": 20,
|
||||
"raw_bytes": [
|
||||
117,
|
||||
105,
|
||||
100,
|
||||
58,
|
||||
47,
|
||||
47,
|
||||
99,
|
||||
110,
|
||||
110,
|
||||
111,
|
||||
110,
|
||||
53,
|
||||
119,
|
||||
111,
|
||||
117,
|
||||
102,
|
||||
117,
|
||||
114,
|
||||
112,
|
||||
10
|
||||
],
|
||||
"sha256": "db8bfa98b7943dba15858ccaa6681bc430efd43f40f57de99117dc19c51ac417",
|
||||
"text": "uid://cnnon5woufurp\n"
|
||||
},
|
||||
"tests/special/test_peeping_room_runtime.gd.uid": {
|
||||
"owner": "tests/special/test_peeping_room_runtime.gd",
|
||||
"owner_sha256": "924efd34414c12a325a1b700f799aef0396de9f15441fd88a3608292ff221657",
|
||||
"file_type": "regular",
|
||||
"bytes": 19,
|
||||
"raw_bytes": [
|
||||
117,
|
||||
105,
|
||||
100,
|
||||
58,
|
||||
47,
|
||||
47,
|
||||
52,
|
||||
110,
|
||||
53,
|
||||
119,
|
||||
101,
|
||||
108,
|
||||
113,
|
||||
102,
|
||||
104,
|
||||
100,
|
||||
113,
|
||||
103,
|
||||
10
|
||||
],
|
||||
"sha256": "b742bb8e4077f111e0f7b4d9039261a06fe6deaad8ea308ba3b89c7b5a4a9069",
|
||||
"text": "uid://4n5welqfhdqg\n"
|
||||
},
|
||||
"tests/special/test_peeping_room_save.gd.uid": {
|
||||
"owner": "tests/special/test_peeping_room_save.gd",
|
||||
"owner_sha256": "ba0e7644277477c1821135cae6d6fd533651799c6f9bd8c43ccf45e63b96c63c",
|
||||
"file_type": "regular",
|
||||
"bytes": 19,
|
||||
"raw_bytes": [
|
||||
117,
|
||||
105,
|
||||
100,
|
||||
58,
|
||||
47,
|
||||
47,
|
||||
56,
|
||||
117,
|
||||
121,
|
||||
116,
|
||||
109,
|
||||
112,
|
||||
106,
|
||||
117,
|
||||
112,
|
||||
56,
|
||||
113,
|
||||
52,
|
||||
10
|
||||
],
|
||||
"sha256": "005561b37df9051e618d4714b2a91a82f4a48ec63c841cdf27c251bcd2865505",
|
||||
"text": "uid://8uytmpjup8q4\n"
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"S": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"argv": [
|
||||
"/Users/korizatou114/Antigravity/\u74b0\u5883\u69cb\u7bc9/agent-control/.venv/bin/python",
|
||||
"-B",
|
||||
"tests/special/test_p13_uid_policy.py"
|
||||
],
|
||||
"started_unix_ns": 1792225317277353000,
|
||||
"ended_unix_ns": 1792225317417668000,
|
||||
"exit_code": 0,
|
||||
"stdout_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"stderr_sha256": "c8904f75939074499eaa0d8a5add9f1fd5007a4e4e5e75cc9b1ce324d8f4b69c"
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
.......
|
||||
----------------------------------------------------------------------
|
||||
Ran 7 tests in 0.053s
|
||||
|
||||
OK
|
||||
+88
@@ -0,0 +1,88 @@
|
||||
{
|
||||
"at_jst": "2026-10-17T17:28:02.473746+09:00",
|
||||
"plan_id": "P13-02",
|
||||
"batch": "P13-02-CODE1",
|
||||
"original_packages": 30,
|
||||
"original_units": 88,
|
||||
"formally_completed": 14,
|
||||
"new_credit": 0,
|
||||
"S": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"source_backup_branch": "codex/p13-02-reference",
|
||||
"source_on_main": false,
|
||||
"normal_integration_candidate": null,
|
||||
"runner_state_after_registered_validation": "review_pending",
|
||||
"repairs": 4,
|
||||
"max_repairs": null,
|
||||
"implementation_models": "Astra selected by Opus for coupled save schema; Sol selected by Opus for UID policy and exact queue-event oracle corrections",
|
||||
"actual_narrow": {
|
||||
"suites": 15,
|
||||
"checks": 863,
|
||||
"parse_files": 329,
|
||||
"phases": 17,
|
||||
"actual_PIDs": [
|
||||
63523,
|
||||
63619,
|
||||
63653,
|
||||
63684,
|
||||
63709,
|
||||
63723,
|
||||
63751,
|
||||
63773,
|
||||
63789,
|
||||
63815,
|
||||
63830,
|
||||
63854,
|
||||
63870,
|
||||
63896,
|
||||
63919,
|
||||
63933,
|
||||
63993
|
||||
],
|
||||
"passed": true,
|
||||
"all_owned_engines_ended": true,
|
||||
"guard_errors": [],
|
||||
"cleanup_errors": [],
|
||||
"finite_UID_set": 7,
|
||||
"game_body_changed_by_latest_fix": false
|
||||
},
|
||||
"test_oracle_correction": "Direct rejected placement full typed Runtime unchanged; queued placement keeps world/economy/room/non-event IDs unchanged and verifies exactly1 COMMAND_FAILED domain-event ID/cause receipt. No blanket normalization or event suppression.",
|
||||
"current_next_gate": "Full standard regression with finite native UID metadata extension must preserve all standard generated-report/audio/diagnostic/process/profile/source/marker gates; actual Opus plan requested before collection, formal independent review then ordinary integration/final remain.",
|
||||
"whole_original_unit": "not accepted; pending ordinary construction/recorder/natural collection triggers/approved values/VIP/UI/content/Windows and all P13 conditions unchanged",
|
||||
"P04_priority": "Next formal closure P04-01, existing D05 questions pending, no repeated questions or fake approval",
|
||||
"previous_failures_retained": [
|
||||
"p13-reference-native-e930a1d-import-failed",
|
||||
"p13-reference-native-uid-corrected-27fc5f0-runtime-failed"
|
||||
],
|
||||
"evidence": [
|
||||
{
|
||||
"path": "ACTUAL_NATIVE_ENDED.json",
|
||||
"actual_original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native-uid-corrected/runner-ended.json",
|
||||
"bytes": 469751,
|
||||
"sha256": "4694cc13c0e0c309adf1f5c3c3885fc2d54efa8dc8ec63319ce016e48d2d66a5"
|
||||
},
|
||||
{
|
||||
"path": "ACTUAL_NATIVE_INPUT.json",
|
||||
"actual_original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native-uid-corrected/runner-input.json",
|
||||
"bytes": 320481,
|
||||
"sha256": "c899b3463fdc8925a98f5dd288eea5cca1d41b3591bc17d29394ec90da0b1094"
|
||||
},
|
||||
{
|
||||
"path": "ACTUAL_RETAINED_UIDS.json",
|
||||
"actual_original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native-uid-corrected/accepted-uids.json",
|
||||
"bytes": 4198,
|
||||
"sha256": "6a6987d53b93387aaa0f8cae268c96eb4bf326fa4599eea4e837af00384e3c38"
|
||||
},
|
||||
{
|
||||
"path": "ACTUAL_STATIC_UID_CONTROLS.json",
|
||||
"actual_original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/audit-support/p13-root-native-a7e3069/static-uid-controls.json",
|
||||
"bytes": 493,
|
||||
"sha256": "d9f4acac3e7f0ed869ece76bc5ef3e9dbe96314e893f1d7a2081a39d97b66053"
|
||||
},
|
||||
{
|
||||
"path": "ACTUAL_STATIC_UID_STDERR.log",
|
||||
"actual_original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/audit-support/p13-root-native-a7e3069/static-uid-controls.stderr.log",
|
||||
"bytes": 105,
|
||||
"sha256": "c8904f75939074499eaa0d8a5add9f1fd5007a4e4e5e75cc9b1ce324d8f4b69c"
|
||||
}
|
||||
]
|
||||
}
|
||||
+252
@@ -0,0 +1,252 @@
|
||||
{
|
||||
"phase": "import",
|
||||
"test": null,
|
||||
"passed": false,
|
||||
"failed": true,
|
||||
"validation_error": null,
|
||||
"profile_startup_name": "TheTree-PCK-tests-974717b708984f0d81f24d8164fe7bc3-standard-startup-import",
|
||||
"private_project_sha256": "f825875e910e090ce57fc0527f34b55386a77123c1784d6916718113139a3673",
|
||||
"private_project_fields": 2,
|
||||
"source_sha256": null,
|
||||
"command": [
|
||||
"/Applications/Godot.app/Contents/MacOS/Godot",
|
||||
"--headless",
|
||||
"--path",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native/stage",
|
||||
"--editor",
|
||||
"--import",
|
||||
"--quit",
|
||||
"--verbose",
|
||||
"--log-file",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native/import/engine-native.log"
|
||||
],
|
||||
"logical_script": null,
|
||||
"starter_sha256": null,
|
||||
"controlled_environment": {},
|
||||
"native_process": {
|
||||
"argv": [
|
||||
"/Applications/Godot.app/Contents/MacOS/Godot",
|
||||
"--headless",
|
||||
"--path",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native/stage",
|
||||
"--editor",
|
||||
"--import",
|
||||
"--quit",
|
||||
"--verbose",
|
||||
"--log-file",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native/import/engine-native.log"
|
||||
],
|
||||
"pid": 55035,
|
||||
"started_utc": "2026-10-17T08:05:39.153436+00:00",
|
||||
"ended_utc": "2026-10-17T08:05:54.328314+00:00",
|
||||
"wall_seconds": 15.174453041981906,
|
||||
"exit_code": 0,
|
||||
"helper_exit_code": 0,
|
||||
"timed_out": false,
|
||||
"stdout_sha256": "a7044e250290690749e344039a98595963550e89777a727da0532dd975c95778",
|
||||
"stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"error_lines": [],
|
||||
"owned_popen_ended": true,
|
||||
"old_helper_engine_ended": true,
|
||||
"start_receipt_written": true,
|
||||
"end_receipt_written": true,
|
||||
"lifecycle_error": null,
|
||||
"old_helper_lifecycle_error": null,
|
||||
"actual_start_binding": {
|
||||
"scope": "isolated diagnostic owned child",
|
||||
"event": "ENGINE_STARTED",
|
||||
"actual_pid": 55035,
|
||||
"owner_pid": 53623,
|
||||
"command": [
|
||||
"/Applications/Godot.app/Contents/MacOS/Godot",
|
||||
"--headless",
|
||||
"--path",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native/stage",
|
||||
"--editor",
|
||||
"--import",
|
||||
"--quit",
|
||||
"--verbose",
|
||||
"--log-file",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native/import/engine-native.log"
|
||||
],
|
||||
"monotonic_ns": 2836045348628125,
|
||||
"pid": 55035,
|
||||
"argv": [
|
||||
"/Applications/Godot.app/Contents/MacOS/Godot",
|
||||
"--headless",
|
||||
"--path",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native/stage",
|
||||
"--editor",
|
||||
"--import",
|
||||
"--quit",
|
||||
"--verbose",
|
||||
"--log-file",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native/import/engine-native.log"
|
||||
],
|
||||
"started_utc": "2026-10-17T08:05:39.153436+00:00",
|
||||
"current_process_identity": {
|
||||
"pid": 55035,
|
||||
"ppid": 53623,
|
||||
"pgid": 55035,
|
||||
"args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native/stage --editor --import --quit --verbose --log-file /Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native/import/engine-native.log"
|
||||
},
|
||||
"live_identity_exact": true,
|
||||
"tracked_child_ended_before_initial_probe": false,
|
||||
"signal_scope": "tracked Popen child only; no external group signal"
|
||||
},
|
||||
"actual_end_binding": {
|
||||
"scope": "isolated diagnostic owned child",
|
||||
"event": "ENGINE_ENDED",
|
||||
"actual_pid": 55035,
|
||||
"owner_pid": 53623,
|
||||
"command": [
|
||||
"/Applications/Godot.app/Contents/MacOS/Godot",
|
||||
"--headless",
|
||||
"--path",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native/stage",
|
||||
"--editor",
|
||||
"--import",
|
||||
"--quit",
|
||||
"--verbose",
|
||||
"--log-file",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native/import/engine-native.log"
|
||||
],
|
||||
"monotonic_ns": 2836060496050750,
|
||||
"exit_code": 0,
|
||||
"actual_process_exit_code": 0,
|
||||
"engine_ended": true,
|
||||
"timed_out": false,
|
||||
"lifecycle_error": null,
|
||||
"start_receipt_written": true,
|
||||
"pid": 55035,
|
||||
"argv": [
|
||||
"/Applications/Godot.app/Contents/MacOS/Godot",
|
||||
"--headless",
|
||||
"--path",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native/stage",
|
||||
"--editor",
|
||||
"--import",
|
||||
"--quit",
|
||||
"--verbose",
|
||||
"--log-file",
|
||||
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native/import/engine-native.log"
|
||||
],
|
||||
"ended_utc": "2026-10-17T08:05:54.320361+00:00",
|
||||
"signal_scope": "tracked Popen child only; no external group signal"
|
||||
},
|
||||
"strict_native_diagnostics": {
|
||||
"errors": [],
|
||||
"banner_count": 1,
|
||||
"known_unicode_diagnostic_count": 0,
|
||||
"unrecognized_unicode_diagnostic_count": 0,
|
||||
"exit_leak_diagnostic_lines": []
|
||||
},
|
||||
"external_process_or_group_signals": 0,
|
||||
"owned_child_process_helper_sha256": "c007e712c281573254faa1233c2ac92e100ab87393256a6dc096b35283e43037",
|
||||
"adapter_owned_cleanup": {
|
||||
"owned_child_created": true,
|
||||
"engine_ended": true,
|
||||
"actual_process_exit_code": 0,
|
||||
"attempts": [
|
||||
{
|
||||
"attempt": 1,
|
||||
"kill_attempted": false,
|
||||
"wait_timeout_seconds": 5,
|
||||
"wait_completed": true,
|
||||
"errors": [],
|
||||
"poll_before": 0,
|
||||
"wait_returned_code": 0,
|
||||
"poll_after": 0
|
||||
}
|
||||
],
|
||||
"errors": []
|
||||
},
|
||||
"adapter_error": null,
|
||||
"old_helper_bytes_preserved": true,
|
||||
"helper_wait_None_maps_to_actual_timeout_seconds": 5,
|
||||
"explicit_helper_wait_timeouts_preserved": true,
|
||||
"additional_cleanup_wait_timeout_seconds": 5,
|
||||
"additional_cleanup_max_attempts": 3
|
||||
},
|
||||
"outer_actual_capture": {
|
||||
"actual_captured_pids": [
|
||||
55035
|
||||
],
|
||||
"cleanup": [
|
||||
{
|
||||
"pid": 55035,
|
||||
"cleanup": {
|
||||
"owned_child_created": true,
|
||||
"engine_ended": true,
|
||||
"actual_process_exit_code": 0,
|
||||
"attempts": [
|
||||
{
|
||||
"attempt": 1,
|
||||
"kill_attempted": false,
|
||||
"wait_timeout_seconds": 5,
|
||||
"wait_completed": true,
|
||||
"errors": [],
|
||||
"poll_before": 0,
|
||||
"wait_returned_code": 0,
|
||||
"poll_after": 0
|
||||
}
|
||||
],
|
||||
"errors": []
|
||||
},
|
||||
"outer_cleanup_errors": [],
|
||||
"engine_ended": true,
|
||||
"outer_maximum_helper_invocations": 3,
|
||||
"helper_maximum_waits": 3,
|
||||
"per_wait_timeout_seconds": 5,
|
||||
"foreign_process_or_group_signals": 0
|
||||
}
|
||||
],
|
||||
"adapter_exception": null,
|
||||
"all_captured_ended": true,
|
||||
"outer_cleanup_errors": [],
|
||||
"foreign_process_or_group_signals": 0,
|
||||
"all_cleanup_before_outer_receipt": true,
|
||||
"outer_receipt_written": true,
|
||||
"outer_receipt_error": null,
|
||||
"passed": true
|
||||
},
|
||||
"actual_pid": 55035,
|
||||
"engine_ended": true,
|
||||
"exit_code": 0,
|
||||
"log": "import/combined-raw.log",
|
||||
"log_sha256": "a7044e250290690749e344039a98595963550e89777a727da0532dd975c95778",
|
||||
"raw_native_log": {
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native/import/engine-native.log",
|
||||
"bytes": 119669,
|
||||
"sha256": "9e66d1295be17e1bfa9052e78e06e7cf9bfee7fe5624ea97226529209404b8ed"
|
||||
},
|
||||
"finite_original_diagnostic_review": {
|
||||
"verified": true,
|
||||
"original_NUL_fixture_contract_applied": false,
|
||||
"producer_source_sha256": null,
|
||||
"actual_transport_counts": {
|
||||
"stdout": 0,
|
||||
"stderr": 0,
|
||||
"native_file": 0
|
||||
},
|
||||
"actual_complete_diagnostic_sequences": {
|
||||
"stdout": [],
|
||||
"stderr": [],
|
||||
"native_file": []
|
||||
},
|
||||
"unknown_or_error_or_leak_lines": {
|
||||
"stdout": [],
|
||||
"stderr": [],
|
||||
"native_file": []
|
||||
},
|
||||
"raw_lines_deleted_or_rewritten": 0,
|
||||
"contract_sha256": "22fd41c59eb13e0af397984bed418870c55fa8942524c377490a90a2aca8dedd",
|
||||
"allowed_e31_error_lines": []
|
||||
},
|
||||
"whole_startup_profile_after": {
|
||||
"path": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-974717b708984f0d81f24d8164fe7bc3-standard-startup-import",
|
||||
"files": {},
|
||||
"fresh_before_engine": true
|
||||
},
|
||||
"guard_error": "AssertionError: complete source/UID/generated report set"
|
||||
}
|
||||
+3868
File diff suppressed because it is too large
Load Diff
+4944
File diff suppressed because it is too large
Load Diff
+7
File diff suppressed because one or more lines are too long
+10
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"task_id": "P13-02-CODE1",
|
||||
"commit": "1e8d4ea88876865a72547ff0edf43ed5b0e74c7e",
|
||||
"status": "submitted",
|
||||
"summary": "許可範囲内で非描写サービス、Runtime・保存連携、5試験、専用検証スクリプト、マーカー・説明書を追加。Python構文とマーカーSHA整合を確認。エンジン・試験・Runner操作・git書込みは未実施。正式検証と独立レビュー待ちで、P13受入への加算はありません。",
|
||||
"acceptance_ids": [
|
||||
"P13-02-CODE1"
|
||||
],
|
||||
"findings": []
|
||||
}
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"at_jst": "2026-10-17T17:09:16.053627+09:00",
|
||||
"plan_id": "P13-02",
|
||||
"batch": "P13-02-CODE1",
|
||||
"original_packages": 30,
|
||||
"original_units": 88,
|
||||
"formally_completed": 14,
|
||||
"new_credit": 0,
|
||||
"source_submitted": "e930a1dedff7ab4c4a94d274a2e0c55fc2b95829",
|
||||
"source_backup_branch": "codex/p13-02-reference-e930a1d",
|
||||
"normal_integration_candidate": null,
|
||||
"source_on_main": false,
|
||||
"worker_model": "gpt-6-astra",
|
||||
"model_selection": "actual Opus19f00667 after examining coupled14/15 save paths; earlier Sol was proposal only",
|
||||
"repairs_before_current_correction": 2,
|
||||
"max_repairs": null,
|
||||
"worker_run": "b3af838ff79b4f3fafe7b68040a89079",
|
||||
"worker_terminal": "submitted",
|
||||
"source_change_summary": "12 files/1015 additions, service plus bounded Runtime/save/5suite/harness wiring; no mandatory numbers or normal palette invented",
|
||||
"native": {
|
||||
"import_actual_pid": 55035,
|
||||
"engine_ended": true,
|
||||
"exit_code": 0,
|
||||
"diagnostic_errors": 0,
|
||||
"accepted": false,
|
||||
"guard_failure": "exactly7 native-generated UID sidecars undeclared in complete source/UID/generated set",
|
||||
"suite_count": 0,
|
||||
"all15_suites_unexecuted": true,
|
||||
"all329_parse_unexecuted": true,
|
||||
"default_player_changed": false,
|
||||
"cleanup_errors": []
|
||||
},
|
||||
"next": "actual Opus decision for precise UID artifact handling; do not waive source/UID/process/profile guard or rerun full regression now",
|
||||
"P04_priority": "Next original unit to close remains P04-01; owner D05 answers pending, this batch is independent work",
|
||||
"required_remaining": [
|
||||
"UID correction then exact narrow/impact verification with strict raw evidence",
|
||||
"separate actual Opus independent code/evidence review",
|
||||
"required final exact-source full regression, normal integration/final and ledger update for backend batch",
|
||||
"whole original P13-02 normal build/production/content/roles/approved D04/D05/D08 values/VIP/UI/Windows and all original conditions remain unaccepted"
|
||||
],
|
||||
"manifest": [
|
||||
{
|
||||
"path": "ACTUAL_OPUS_MODEL_AND_BRIEF.json",
|
||||
"original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p13-02-reference/runs/19f00667226d42dd8e9b3a4ae99aaa68/result.json",
|
||||
"sha256": "1afa4b721f45c10cabeb10830db1c8b064d29c55000c3c6fbf5802ec0474c533",
|
||||
"bytes": 11457
|
||||
},
|
||||
{
|
||||
"path": "ACTUAL_WORKER_RESULT.json",
|
||||
"original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p13-02-reference/runs/b3af838ff79b4f3fafe7b68040a89079/result.json",
|
||||
"sha256": "e38129543ab8796c51b6f1c56fba7417a6f7efe8d4cff338d1a0b074bbf23dd1",
|
||||
"bytes": 538
|
||||
},
|
||||
{
|
||||
"path": "ACTUAL_IMPORT_RECEIPT.json",
|
||||
"original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native/import-receipt.json",
|
||||
"sha256": "cfa6b72b59f8df394eb22adfe1e73babbca31fb0c2a9caed9190dcc80b52d8f1",
|
||||
"bytes": 9333
|
||||
},
|
||||
{
|
||||
"path": "ACTUAL_NATIVE_ENDED.json",
|
||||
"original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native/runner-ended.json",
|
||||
"sha256": "9f13934d7844e4ceba72e87a7c5dc88e7e2ebdea5de1c556c5f19d90092917c3",
|
||||
"bytes": 167969
|
||||
},
|
||||
{
|
||||
"path": "ACTUAL_NATIVE_INPUT.json",
|
||||
"original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-reference-native/runner-input.json",
|
||||
"sha256": "6018a3d83835317a46aee69188d5f3ca0e01977212e36b030a751894cb3284dc",
|
||||
"bytes": 320355
|
||||
},
|
||||
{
|
||||
"path": "ROOT_REVIEW_CHECKLIST.json",
|
||||
"original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/coordinator-start-20261017/ROOT_REVIEW_CHECKLIST.json",
|
||||
"sha256": "32079bede7a4da3defabbdc4fca7eaf96a03ffc12344cfd7631c2d5c5e22e7c7",
|
||||
"bytes": 1440
|
||||
},
|
||||
{
|
||||
"path": "EXACT_FAILURE_FACTS.json",
|
||||
"original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/P13-02-CODE1-implement/build/owner-handoff/native-import-failure/ROOT_EXACT_FAILURE_FACTS.json",
|
||||
"sha256": "a7c906d0df05003be005e8d7160ae8c104dbdb00388bd57b87696f1dd425de86",
|
||||
"bytes": 1782
|
||||
}
|
||||
]
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"S": "e930a1dedff7ab4c4a94d274a2e0c55fc2b95829",
|
||||
"actual_engine_pid": 55035,
|
||||
"exit_code": 0,
|
||||
"owned_engine_ended": true,
|
||||
"diagnostic_errors": 0,
|
||||
"actual_suites": 0,
|
||||
"new_stage_files": [
|
||||
{
|
||||
"path": "tests/special/peeping_room_fixture.gd.uid",
|
||||
"sha256": "a74e5ef6d8959826919a648e8b5d82e96d1c73ff22cd6c1f216be8b5c4060a8a",
|
||||
"bytes": 20,
|
||||
"text": "uid://b0c3ouuq42ycg\n"
|
||||
},
|
||||
{
|
||||
"path": "tests/special/test_peeping_room_runtime.gd.uid",
|
||||
"sha256": "f7276000bd3b4c3429c72612f791ca2ed6bb04dde1de8e278cb1a055ae4ce743",
|
||||
"bytes": 20,
|
||||
"text": "uid://dkc1kiqioypih\n"
|
||||
},
|
||||
{
|
||||
"path": "tests/special/test_peeping_room_save.gd.uid",
|
||||
"sha256": "005561b37df9051e618d4714b2a91a82f4a48ec63c841cdf27c251bcd2865505",
|
||||
"bytes": 19,
|
||||
"text": "uid://8uytmpjup8q4\n"
|
||||
},
|
||||
{
|
||||
"path": "tests/special/test_peeping_room_geometry.gd.uid",
|
||||
"sha256": "391b78806bc0bf759f00c778cb25dfaa97d47f6e309c3b302412c38123c5440c",
|
||||
"bytes": 19,
|
||||
"text": "uid://4r40f1kpjmvj\n"
|
||||
},
|
||||
{
|
||||
"path": "tests/special/test_peeping_room_evidence.gd.uid",
|
||||
"sha256": "26bbc1435bcda963b5866327b887096f798b1629c7984768c85bfb6175648ec5",
|
||||
"bytes": 20,
|
||||
"text": "uid://dftsky13pe0uj\n"
|
||||
},
|
||||
{
|
||||
"path": "tests/special/test_peeping_room_reference.gd.uid",
|
||||
"sha256": "db8bfa98b7943dba15858ccaa6681bc430efd43f40f57de99117dc19c51ac417",
|
||||
"bytes": 20,
|
||||
"text": "uid://cnnon5woufurp\n"
|
||||
},
|
||||
{
|
||||
"path": "scripts/special/peeping_room_service.gd.uid",
|
||||
"sha256": "3f045afc3c140886c70ec8494d6dcb012e6da645e8a3ff3c6488442ce63a9353",
|
||||
"bytes": 20,
|
||||
"text": "uid://bi36fvp1jiiiv\n"
|
||||
}
|
||||
],
|
||||
"guards_not_waived": true,
|
||||
"whole_acceptance": false
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"scope": "Root-derived review checklist within the immutable original P13-02 state/reference/save conditions. Not extra product rules, test results, or implementation directions.",
|
||||
"created_unix_ns": 1792223589246621000,
|
||||
"checks": [
|
||||
"Retain prior evidence identities/history after target loss and explicit relink; a new target does not turn old evidence into a different event or silently discard it. Check roundtrip after this combined history.",
|
||||
"Relink may ignore only the same room own occupancy, never another room or corridor conflict. A rebuilt different facility ID cannot silently revive the link.",
|
||||
"Ordinary production commands cannot reach CONTROLLED_FIXTURE entry points or bypass missing build/recorder approvals; rejection leaves whole typed Runtime unchanged.",
|
||||
"Optional section absence is valid only for truly empty state; orphan world occupancy or owned IDs cannot be accepted by dropping the section. Other existing exact schema key allowlists remain strict.",
|
||||
"Failed section restore or later-system failure restores original whole Runtime including clock, ID generator, commands, facilities, ledger and new service references; var_to_bytes evidence, no JSON normalization.",
|
||||
"Source/marker/policy/engine/input/environment identities and actual owned process endings cover the final tested version; local test numbers never substitute whole-unit acceptance."
|
||||
],
|
||||
"formal_credit": 0
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"archive_sha256": "f962d3622f5da562c3c07c4afed84bf4f1042a2470f555c16148d450e70453ff",
|
||||
"drive_archive_id": "1F6MYrZ7begmlNaZkjMOlJT5y9uMcSVwM",
|
||||
"drive_restore_kit_id": "1eT98KWt71v62IGhxyBSjmf4FEoTvFMxA",
|
||||
"views": [
|
||||
{
|
||||
"original": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-cb0e908014ed4be48b1cc74787337f66-standard-runtime-057",
|
||||
"files": 2792,
|
||||
"logical_bytes": 1839108706,
|
||||
"verified_all_bytes_before_retirement": true,
|
||||
"restore_view": "original",
|
||||
"absent_after": true
|
||||
},
|
||||
{
|
||||
"original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/P13-02-CODE1/build/p13-full-controller/run/profiles/057/runtime",
|
||||
"files": 1535,
|
||||
"logical_bytes": 861302992,
|
||||
"verified_all_bytes_before_retirement": true,
|
||||
"restore_view": "failed-copy",
|
||||
"absent_after": true
|
||||
}
|
||||
],
|
||||
"free_before": 894099456,
|
||||
"free_after": 2749599744,
|
||||
"time_ns": 1792229099545221000,
|
||||
"original_full_attempt_passed": false,
|
||||
"receipt_bytes_unmodified": true,
|
||||
"actual_free_gain_bytes": 1855500288
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"removed": [
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/P13-02-CODE1-final-b0291970",
|
||||
"head": "65f07bf5eaa759a8e2e17c7bdbbbdbceb24ee373",
|
||||
"git_files": 4919,
|
||||
"byte_equal_review_duplicate_files": 0
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/P13-02-CODE1-integration-15cc1271",
|
||||
"head": "65f07bf5eaa759a8e2e17c7bdbbbdbceb24ee373",
|
||||
"git_files": 4919,
|
||||
"byte_equal_review_duplicate_files": 0
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/P13-02-CODE1-review-e6fc1237",
|
||||
"head": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"git_files": 4894,
|
||||
"byte_equal_review_duplicate_files": 16049
|
||||
}
|
||||
],
|
||||
"full_restore_proof": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/coordinator-start-20261017/CLOSED_P13_READONLY_FULL_RESTORE_PROOF.json",
|
||||
"free_before": 3651289088,
|
||||
"free_after": 4381392896,
|
||||
"all_unique_evidence_preserved": true,
|
||||
"time_ns": 1792232004526885000,
|
||||
"actual_free_gain": 730103808
|
||||
}
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"at_jst": "2026-10-17T18:34:28.900674+09:00",
|
||||
"plan_id": "P13-02",
|
||||
"batch": "P13-02-CODE1",
|
||||
"S": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"original_packages": 30,
|
||||
"original_units": 88,
|
||||
"formally_completed": 14,
|
||||
"new_credit": 0,
|
||||
"original_full_attempt_passed": false,
|
||||
"failure": "ENOSPC while copying ended native5374check P08 migration runtime profile; incomplete original runner-ended preserved",
|
||||
"causal_measurements": {
|
||||
"single_runtime_profile_files": 2792,
|
||||
"single_runtime_logical_bytes": 1839108706,
|
||||
"partial_duplicate_whole_files": 1534,
|
||||
"partial_duplicate_zero_byte_fragment": 1
|
||||
},
|
||||
"recovery": "Exact full archive plus original partial-copy view and fragment retained; every member SHA verified locally, remote complete archives fetched and streamed SHA verified before retiring only verified uncompressed profiles. No test log or acceptance data erased.",
|
||||
"archives": [
|
||||
{
|
||||
"drive_id": "1F6MYrZ7begmlNaZkjMOlJT5y9uMcSVwM",
|
||||
"url": "https://drive.google.com/file/d/1F6MYrZ7begmlNaZkjMOlJT5y9uMcSVwM/view",
|
||||
"purpose": "current057 full profile"
|
||||
},
|
||||
{
|
||||
"drive_id": "1eT98KWt71v62IGhxyBSjmf4FEoTvFMxA",
|
||||
"url": "https://drive.google.com/file/d/1eT98KWt71v62IGhxyBSjmf4FEoTvFMxA/view",
|
||||
"purpose": "current057 restore kit with exact original and failed-copy views"
|
||||
},
|
||||
{
|
||||
"drive_id": "1_HFt31YEAs6ak7Z2BiX9xOCQJkYBjovE",
|
||||
"url": "https://drive.google.com/file/d/1_HFt31YEAs6ak7Z2BiX9xOCQJkYBjovE/view",
|
||||
"purpose": "previous ended P23 full179 runtime profile, full restore metadata embedded"
|
||||
},
|
||||
{
|
||||
"drive_id": "1tR_3rlst7AshVskaVxG6JFvQxF5OP5ow",
|
||||
"url": "https://drive.google.com/file/d/1tR_3rlst7AshVskaVxG6JFvQxF5OP5ow/view",
|
||||
"purpose": "older ended P08 phase profile, full restore metadata embedded; failed whole attempt remains failed"
|
||||
}
|
||||
],
|
||||
"proof_records": {
|
||||
"DRIVE_FULL_ARCHIVE_READBACK.json": {
|
||||
"bytes": 221,
|
||||
"sha256": "36a59d70bb6b67b20c89a26bc5bc1bae3e16f1e4cdc34faf8690cb8d47f4ea55",
|
||||
"original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/storage-profile-recovery-20261017/DRIVE_FULL_ARCHIVE_READBACK.json"
|
||||
},
|
||||
"DRIVE_RESTORE_KIT_READBACK.json": {
|
||||
"bytes": 219,
|
||||
"sha256": "29119b49b58bdaed54b672bab4629fd17f56c33b5cb6961ce2061f222a0897e3",
|
||||
"original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/storage-profile-recovery-20261017/DRIVE_RESTORE_KIT_READBACK.json"
|
||||
},
|
||||
"057-ARCHIVAL-RECOVERY.json": {
|
||||
"bytes": 1110,
|
||||
"sha256": "220aa68ceb8195b1ac3358118b4ea652750cafc4a421b9f277026ccfadb76722",
|
||||
"original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/storage-profile-recovery-20261017/057-ARCHIVAL-RECOVERY.json"
|
||||
},
|
||||
"PREVIOUS_P23_PROFILE057_DRIVE_AND_RETIREMENT.json": {
|
||||
"bytes": 785,
|
||||
"sha256": "6633575fcf6cba529d72c3fc652fffc082128114e20cdf9f0fd0a223ff5d9c8e",
|
||||
"original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/storage-profile-recovery-20261017/PREVIOUS_P23_PROFILE057_DRIVE_AND_RETIREMENT.json"
|
||||
}
|
||||
},
|
||||
"current_free_bytes": 4153327616,
|
||||
"next_full_scope": "Import and329parse plus original58 suites qualified; remaining126 require unchanged native per-phase gates, exact input equality, all cross-segment checks, separate actual Opus review, normal integration/final. No restart of accepted native phases.",
|
||||
"admission_required_bytes": 3467374666,
|
||||
"P04_next_formal_unit": "P04-01 pending actual owner D05 choices, no fake approval",
|
||||
"whole_original_acceptance": false,
|
||||
"later_archival_result": "Additional1.838GB logical old profile preserved remotely with full readback SHA. Immediate measured free gain153612288B; logical size is not claimed as physical space recovered.",
|
||||
"subsequent_verified_copy_retirements": {
|
||||
"P13_ended3_copies_actual_gain_bytes": 730103808,
|
||||
"P04_ended9_validation_copies_actual_gain_bytes": 1304444928,
|
||||
"P04_preserved_remote_source": "codex/p04-01-preserved-2dde759",
|
||||
"all_tracked_blobs_verified": true,
|
||||
"all_unique_central_native_review_evidence_retained": true
|
||||
},
|
||||
"last_capacity_observation_jst": "2026-10-17T19:39:39.105864+09:00"
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"drive_id": "1F6MYrZ7begmlNaZkjMOlJT5y9uMcSVwM",
|
||||
"bytes": 97976496,
|
||||
"sha256": "f962d3622f5da562c3c07c4afed84bf4f1042a2470f555c16148d450e70453ff",
|
||||
"full_remote_readback": true,
|
||||
"time_ns": 1792229035052351000
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"drive_id": "1eT98KWt71v62IGhxyBSjmf4FEoTvFMxA",
|
||||
"bytes": 216139,
|
||||
"sha256": "8517b61a253141a76e3bde5bab81f3971ca91989b37b2c89e95a5ee42c010cda",
|
||||
"full_remote_readback": true,
|
||||
"time_ns": 1792229078775515000
|
||||
}
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"at_unix_ns": 1792232721652518000,
|
||||
"removed": [
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-validation-3ca36075",
|
||||
"head": "d393e4d90f068faa82fde40ca1ecd411ff7f2c1f",
|
||||
"files": 3022,
|
||||
"logical_bytes": 137851869
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-validation-998f2af8",
|
||||
"head": "55f1fb49aaefa5c1b86de1c3eda72392ef6b58f2",
|
||||
"files": 3025,
|
||||
"logical_bytes": 137889196
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-validation-a2c2024a",
|
||||
"head": "7af6fafaf00cffbb731f6a4765e5891457c51bda",
|
||||
"files": 3024,
|
||||
"logical_bytes": 137863410
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-validation-b191eb70",
|
||||
"head": "8418560aaf2f0f9ed3977ca477b5601ffebcbbda",
|
||||
"files": 3021,
|
||||
"logical_bytes": 137848317
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-validation-b85d6800",
|
||||
"head": "b543c26c95a1d634b8d7efdf127cc55eba55611a",
|
||||
"files": 3013,
|
||||
"logical_bytes": 137734675
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-validation-e0a2d54f",
|
||||
"head": "4ab7ab8712cc3b3d8bb0514ebb4b2c0927456443",
|
||||
"files": 3025,
|
||||
"logical_bytes": 137887158
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-validation-e0f78b8f",
|
||||
"head": "fb8b7919dbecba9a9de2a28dc2a25ce5cd73e9c6",
|
||||
"files": 3027,
|
||||
"logical_bytes": 137898418
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-validation-e61af951",
|
||||
"head": "2dde7596a87c43f7bf0bf704b7479f2fa06a5b1c",
|
||||
"files": 3031,
|
||||
"logical_bytes": 138115695
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-validation-f79a151b",
|
||||
"head": "16207d353ae4a2bb180793325cba9aec9ef68d66",
|
||||
"files": 3015,
|
||||
"logical_bytes": 137746167
|
||||
}
|
||||
],
|
||||
"free_before_bytes": 3734835200,
|
||||
"free_after_bytes": 5039280128,
|
||||
"observed_gain_bytes": 1304444928,
|
||||
"all_source_blobs_verified": true,
|
||||
"all_unique_runtime_evidence_preserved": true,
|
||||
"restore_manifest": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/coordinator-storage-20261017/ENDED_VALIDATION_CHECKOUT_FULL_GIT_RESTORE_PROOF.json"
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"drive_id": "1tR_3rlst7AshVskaVxG6JFvQxF5OP5ow",
|
||||
"remote_bytes": 98084260,
|
||||
"remote_sha256": "79879544b1351706d96e072f77a5b893aced99204c3c8fa83c216279b2cef011",
|
||||
"full_remote_readback": true,
|
||||
"all_original_bytes_verified_before_retirement": true,
|
||||
"original": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-4c87cfdfbfff41fd85a9686027d4b109-standard-runtime-057",
|
||||
"files": 2792,
|
||||
"archive": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/storage-profile-recovery-20261017/p08-older-ended-profile057-lossless.tar.gz",
|
||||
"archive_contains_full_manifest": true,
|
||||
"original_full_attempt_passed": false,
|
||||
"phase_passed_and_ended": true,
|
||||
"time_ns": 1792230632135468000,
|
||||
"free_before": 3985821696,
|
||||
"original_absent": true,
|
||||
"free_after": 4139433984,
|
||||
"actual_free_gain": 153612288
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"drive_id": "1_HFt31YEAs6ak7Z2BiX9xOCQJkYBjovE",
|
||||
"remote_bytes": 98141942,
|
||||
"remote_sha256": "0cdfb0eb3dc7b5bced24f209bd024436db5450926dae74885d658bcdcf407ed5",
|
||||
"full_remote_readback": true,
|
||||
"all_original_bytes_verified_before_retirement": true,
|
||||
"original": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-4572ef90efe94bc59f24b8e3d80452d0-standard-runtime-057",
|
||||
"files": 2792,
|
||||
"archive": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-02-reference/.runtime/storage-profile-recovery-20261017/p23-previous-full179-profile057-lossless.tar.gz",
|
||||
"archive_contains_full_manifest": true,
|
||||
"time_ns": 1792229606376983000,
|
||||
"free_before": 2652545024,
|
||||
"original_absent": true,
|
||||
"free_after": 4500942848,
|
||||
"actual_free_gain": 1848397824
|
||||
}
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"task_id": "P18-REG-KITCHEN-LEGACY14",
|
||||
"base_commit": "9b1a18c1eb25ca1300dcd59da78423c0dda2f498",
|
||||
"state": "code-ready; tests NOT RUN; Root native proof pending",
|
||||
"canonical_source_delta": {
|
||||
"authority_file": "MAIN9B_COMPLETE_SOURCE_REFS.json",
|
||||
"authority_bytes": 376039,
|
||||
"authority_sha256": "dc43e665be3f02d14513f0b8c4248d410175dcfb118171d8cbe0e62ef764a2e4",
|
||||
"canonical_count": 1338,
|
||||
"docs_in_canonical_map": false,
|
||||
"path": "tests/business/test_required_kitchen.gd",
|
||||
"old": {"bytes": 31533, "sha256": "5dcc86d66bdc47003472d6c30d6889eb514e016003265965bdd8496d123d5ca5"},
|
||||
"new": {"bytes": 38276, "sha256": "3a9c92f80c24064ef0858fba10bd7caab63203932942837f7e142349578f6b2f"},
|
||||
"other_entries_same_keys_and_hashes": 1337,
|
||||
"added_keys": [],
|
||||
"dropped_keys": []
|
||||
},
|
||||
"marker_delta": {
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json",
|
||||
"separate_fixed_authority": true,
|
||||
"old": {"bytes": 188089, "sha256": "6ce6b28c5985e8a4f13b78bfeb1f1e09f6216d874fb01e0656ec1633bfa01cd7"},
|
||||
"new": {"bytes": 188089, "sha256": "9c095df16eb6848e5b3b34cd78aef1c57a7724e875eb8371d3ff4c2c8cc349a1"},
|
||||
"changed_rows": [{
|
||||
"test": "tests/business/test_required_kitchen.gd",
|
||||
"source_sha256_at_schema_audit": {
|
||||
"old": "90e7639f5aa76e34b9ee14769f4ec1ae1317a647900b27877075dbf21ef1dfcf",
|
||||
"new": "3a9c92f80c24064ef0858fba10bd7caab63203932942837f7e142349578f6b2f"
|
||||
},
|
||||
"source_marker_lines": {
|
||||
"old": [{"line": 281, "text": "\tprint(\"Required kitchen: %d checks, %d failures\" % [checks, failures])"}],
|
||||
"new": [{"line": 481, "text": "\tprint(\"Required kitchen: %d checks, %d failures\" % [checks, failures])"}]
|
||||
}
|
||||
}],
|
||||
"authority_records_changed": false,
|
||||
"other_rows_changed": false,
|
||||
"fixed_check_count_used": false,
|
||||
"predicted_native_checks": 163,
|
||||
"actual_native_checks": null
|
||||
},
|
||||
"new_support_path_group": {
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p18-kitchen-legacy-support/",
|
||||
"files": ["plan.md", "delta-manifest.json", "verify_support.py", "root_diagnostic.py"]
|
||||
},
|
||||
"full_selected_map": {
|
||||
"required_count": 1339,
|
||||
"composition": "current canonical 1338 plus exactly the fixed reviewed P04 extra",
|
||||
"extra_path": "tools/check_p04_order_evidence.py",
|
||||
"extra_bytes": 78235,
|
||||
"extra_sha256": "f5b44827958f2ae352fe5c4bc3a1ffd4211ec7a41fc4c0759c8b954891662324"
|
||||
},
|
||||
"zero_changes": ["autoload", "scripts", "scenes", "resources", "project.godot", "export", "policy", "engine", "legacy_fixture"],
|
||||
"grep": {
|
||||
"pattern": "test_required_kitchen\\.gd",
|
||||
"canonical_source_reference_search_exit": 1,
|
||||
"canonical_source_reference_matches": [],
|
||||
"repository_reference_matches": "docs only (including archived manifests); edited definition is the kitchen test itself",
|
||||
"source_consumers_outside_the_test": 0
|
||||
},
|
||||
"existing_source_manifest_rewritten": false,
|
||||
"generic_exclusions_added": false,
|
||||
"tests_run": false,
|
||||
"independent_review": "pending",
|
||||
"integration": "pending",
|
||||
"native_Windows": "not claimed"
|
||||
}
|
||||
+120
@@ -0,0 +1,120 @@
|
||||
# P18-REG-KITCHEN-LEGACY14 source submission
|
||||
|
||||
Requirement: `legacy_preservation`. Base remains
|
||||
`9b1a18c1eb25ca1300dcd59da78423c0dda2f498`. This is uncounted support;
|
||||
original30/88 and the acceptance denominator do not change. Product code, P04,
|
||||
settings, thresholds, suite policy, fixture bytes and fixture authority are unchanged.
|
||||
|
||||
## Diagnosis and exact migration
|
||||
|
||||
The old14 writer is v1, while the approved P18 relationship service saves a v2
|
||||
container. The five typed differences are all below
|
||||
`/systems/runtime/relationships`: version 1 becomes 2, `legacy` is added,
|
||||
`original_relationships` is added, and `threshold_candidates` and
|
||||
`next_candidate_sequence` move into `legacy`. The retained full native typed
|
||||
inputs are 159552 and 159680 bytes, an increase of 128 bytes. Their SHA-256 values
|
||||
are respectively `a2f8992853ba9497539cdfcb74d22c83c76011f2acf73f9e8e3e7241620ddca0`
|
||||
and `a2f3e75181071f94946369df6f3a6256998dd7d776441766bccc9b9c3ccf5d8d`.
|
||||
They diagnose the earlier failure; they are never substituted into a new run.
|
||||
|
||||
The genuine local `write-checkpoint.var` contains the old v1 dictionary at byte
|
||||
offsets [143668,143816): **148 bytes**, SHA-256
|
||||
`ed2cafb629f4d08249f8cd147c7ff9fc715ff641c24809a93e66a1229d4105c4`.
|
||||
This was obtained by reading the original fixture bytes, including its dictionary
|
||||
header, StringName keys, typed empty Dictionary arrays, and int values. The new
|
||||
native proof independently hashes `var_to_bytes(old)` and the whole fixture file.
|
||||
|
||||
The pure validator requires the exact old field set/key encoding, int version 1,
|
||||
byte-identical nested legacy, int version 2, exact v2 field set, unchanged sequence,
|
||||
byte-identical compatibility projection and typed empty original records. It builds
|
||||
the container in the service's insertion order with StringName keys and typed
|
||||
`Array[Dictionary]`. Original values stay unconfigured: no conversion from old
|
||||
five-axis values and no guessed original initialization.
|
||||
|
||||
After the existing identity/saveID-bound IO1 replacement, a reader copy with just
|
||||
relationships reversed to v1 must equal the entire expected writer byte stream.
|
||||
Only that subtree is then replaced. Whole typed bytes, Dictionary equality,
|
||||
SimulationDigest, IO validity, envelope, replaced==1 and published IDs remain
|
||||
required. Only legacy14 opts in. new14 has the same behavior and proof shape.
|
||||
|
||||
Seventeen in-memory controls cover an outside change, each legacy field deleted
|
||||
and changed, sequence +1, nonempty originals, actual versions 0/3/string, equal
|
||||
reordered/reencoded dictionaries, and a byte-identical deep-copy positive control.
|
||||
Every attempt checks both caller inputs and both attempted copies for mutation.
|
||||
There are 17 new assertions plus one fresh proof-file assertion, so the native
|
||||
success path is expected to report 163 checks (the existing 145 remain). This
|
||||
arithmetic is a gate expectation, not an observed native result. The final print
|
||||
wording and schema are unchanged; the marker contract continues to derive counts
|
||||
from raw output (`fixed_check_count_used: false`).
|
||||
|
||||
## Source map and authority
|
||||
|
||||
`MAIN9B_COMPLETE_SOURCE_REFS.json` was read locally after its 376039-byte SHA-256
|
||||
`dc43e665be3f02d14513f0b8c4248d410175dcfb118171d8cbe0e62ef764a2e4`
|
||||
was checked. Its canonical 1338 keys exclude docs. The only changed selected entry
|
||||
is `tests/business/test_required_kitchen.gd`; all other 1337 keys and hashes match.
|
||||
The selected map hash before this change is
|
||||
`533a4177918a9da4d4982aa9862cb7420c25d30c2458e36aab9c071c4d3a7139`.
|
||||
Absolute production paths in those records are provenance, never input paths.
|
||||
|
||||
The completion-marker contract is a separately pinned, second changed existing
|
||||
file. Its pre-change bytes were 188089 with SHA-256
|
||||
`6ce6b28c5985e8a4f13b78bfeb1f1e09f6216d874fb01e0656ec1633bfa01cd7`.
|
||||
Only the kitchen source SHA and actual marker line position change; authority,
|
||||
template, count policy and other entries remain byte-for-byte unchanged.
|
||||
The newly added support directory is the third allowed path group. The tree as a
|
||||
whole is not described as exactly two paths. See `delta-manifest.json`.
|
||||
|
||||
Root's selected full-run map must be exactly these current 1338 files plus
|
||||
`tools/check_p04_order_evidence.py`, 78235 bytes, SHA-256
|
||||
`f5b44827958f2ae352fe5c4bc3a1ffd4211ec7a41fc4c0759c8b954891662324`.
|
||||
This is the fixed supplied reviewed P04 QA source, not permission to edit P04 or
|
||||
read its build. The verifier compares local relative keys and full file pins,
|
||||
rejecting additions, drops and stale sources. It introduces no selector exclusions.
|
||||
|
||||
Static reference search:
|
||||
|
||||
```sh
|
||||
rg -l 'test_required_kitchen\.gd' autoload scripts scenes data tests assets tools project.godot export_presets.cfg Makefile AGENTS.md
|
||||
rg -l 'test_required_kitchen\.gd' docs
|
||||
```
|
||||
|
||||
The first command returned no matches (exit 1). The second finds documentation
|
||||
and archived manifests only; there are no other source consumers of the test.
|
||||
The test itself is the edited definition. This search does not rewrite manifests.
|
||||
|
||||
## Root-only finite local diagnostic procedure
|
||||
|
||||
Worker has run **no tests, engine, Runner, Git or agents**. Python support files
|
||||
were compiled in memory only. GDScript import/parse and native results are pending.
|
||||
Root must use the existing `godot` guarded launcher supported by the current tools;
|
||||
do not point any command directly at a player profile. Run from this checkout in
|
||||
one shell, stop on the first nonzero exit, and do not retry into an existing output.
|
||||
If an output already exists, retain it and obtain a newly registered build before
|
||||
a new collection. The helper uses the existing `execute_phase`, Guard, owned outer
|
||||
launcher and `run_p18_relationship_tests.py` roster/archive APIs. It changes no
|
||||
production collector, policy or threshold. All source copying is private.
|
||||
|
||||
```sh
|
||||
export BUILD_OUTPUT_DIR=/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-kitchen-regression-r02/.runtime/P18-REG-KITCHEN-LEGACY14/build
|
||||
set -e
|
||||
python3 docs/plans/original-completion-2026-10-02/execution/p18-kitchen-legacy-support/root_diagnostic.py --phase parse
|
||||
python3 docs/plans/original-completion-2026-10-02/execution/p18-kitchen-legacy-support/root_diagnostic.py --phase kitchen
|
||||
python3 docs/plans/original-completion-2026-10-02/execution/p18-kitchen-legacy-support/root_diagnostic.py --phase affected
|
||||
python3 docs/plans/original-completion-2026-10-02/execution/p18-kitchen-legacy-support/root_diagnostic.py --phase full
|
||||
python3 docs/plans/original-completion-2026-10-02/execution/p18-kitchen-legacy-support/verify_support.py --verify-only --marker-contracts docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json
|
||||
```
|
||||
|
||||
Order is import/all-script parse, required_kitchen alone, all business plus all
|
||||
s4 relationship tests/all s6/P18 affected set, then the new standard full178.
|
||||
Every phase retains import/parse and exact-source receipts; the full phase invokes
|
||||
the unchanged `run_all_tests.main` with the explicit 1339 source input and marker
|
||||
contract. `archive_profiles` retains all actual private profiles under the build,
|
||||
including the kitchen typed proofs, checked against native inventories. The
|
||||
read-only verifier reads those receipts, raw stdout/stderr/native logger streams,
|
||||
and PID lifecycle evidence; it launches nothing and emits no PASS of its own.
|
||||
Missing future evidence correctly exits nonzero and does not block writing code.
|
||||
|
||||
Root will formally verify P04 separately in P04A repair. Independent Opus review,
|
||||
integration and final verification remain required before any original-unit credit.
|
||||
No native Windows behavior or whole-unit completion is claimed.
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Root-only finite diagnostics, using existing guarded native phase APIs.
|
||||
|
||||
This is an execution procedure, not worker evidence or an acceptance gate.
|
||||
"""
|
||||
import argparse
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
import shutil
|
||||
import sys
|
||||
import uuid
|
||||
|
||||
sys.dont_write_bytecode = True
|
||||
ROOT = Path(__file__).resolve().parents[5]
|
||||
sys.path.insert(0, str(ROOT / 'tools'))
|
||||
import run_p18_relationship_tests as p18
|
||||
|
||||
s = p18.shared
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(allow_abbrev=False)
|
||||
parser.add_argument('--phase', required=True, choices=['parse', 'kitchen', 'affected', 'full'])
|
||||
args = parser.parse_args()
|
||||
build = Path(os.environ['BUILD_OUTPUT_DIR']).resolve(strict=True)
|
||||
out = build / {'parse': 'native-parse', 'kitchen': 'native-kitchen',
|
||||
'affected': 'native-affected', 'full': 'native-full178'}[args.phase]
|
||||
s.require(not out.exists(), 'fresh output; no automatic retry or evidence splice')
|
||||
prior = {'kitchen': 'native-parse', 'affected': 'native-kitchen', 'full': 'native-affected'}
|
||||
if args.phase in prior:
|
||||
previous = s.read(build / prior[args.phase] / 'runner-ended.json')
|
||||
s.require(previous['error'] is None and previous['cleanup_errors'] == []
|
||||
and previous['guard_errors'] == [], 'preceding diagnostic must finish successfully')
|
||||
refs = s.source_refs(ROOT)
|
||||
checker = build / 'audit-support/root-input-r01/P04_REVIEWED_CANDIDATE_CHECKER.py'
|
||||
s.require(checker.stat().st_size == 78235 and s.sha(checker)
|
||||
== 'f5b44827958f2ae352fe5c4bc3a1ffd4211ec7a41fc4c0759c8b954891662324', 'fixed local P04 extra')
|
||||
extra = {'path': str(checker), 'bytes': 78235, 'sha256': s.sha(checker)}
|
||||
s.require('tools/check_p04_order_evidence.py' not in refs
|
||||
or {k: refs['tools/check_p04_order_evidence.py'][k] for k in ('bytes', 'sha256')}
|
||||
== {k: extra[k] for k in ('bytes', 'sha256')}, 'no replacement of a different P04 source')
|
||||
refs['tools/check_p04_order_evidence.py'] = extra
|
||||
s.require(len(refs) == 1339, 'prospective full source set')
|
||||
marker_path = ROOT / 'docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json'
|
||||
if args.phase == 'full':
|
||||
selected = build / 'kitchen-selected-1339.json'
|
||||
s.write(selected, refs)
|
||||
code = s.main(['--project-root', str(ROOT), '--output', str(out), '--marker-contracts', str(marker_path),
|
||||
'--source-input-refs', str(selected)])
|
||||
# Retain the actual profiles under BUILD_OUTPUT_DIR while they still
|
||||
# exist. Archive helper checks every byte against native phase inventory.
|
||||
for row in s.read(out / 'runner-ended.json')['phases']:
|
||||
p18.archive_profiles(out, row)
|
||||
return code
|
||||
root_before = s.source_refs(ROOT)
|
||||
roster = [] if args.phase == 'parse' else ['tests/business/test_required_kitchen.gd']
|
||||
if args.phase == 'affected':
|
||||
roster = sorted(set(n for n in refs if n.startswith('tests/business/test') and n.endswith('.gd'))
|
||||
| set(p18.ROSTER)
|
||||
| set(n for n in refs if n.startswith('tests/s6/test') and n.endswith('.gd'))
|
||||
| set(n for n in refs if n.startswith('tests/s4/test') and n.endswith('.gd') and 'relationship' in n))
|
||||
markers = s.module('kitchen_diagnostic_markers', ROOT / 'tools/strict_test_markers.py')
|
||||
contracts = markers.load_contracts(marker_path)
|
||||
policy = s.read(s.SUPPORT / 'suite-policy.json')
|
||||
s.policy_coverage(roster, refs, policy)
|
||||
engine = shutil.which('godot')
|
||||
s.require(engine, 'existing guarded native launcher required')
|
||||
engine = str(Path(engine).resolve())
|
||||
outer = s.module('kitchen_diagnostic_outer', s.SUPPORT / 'owned_outer.py')
|
||||
s.require(not outer.native.helper['live_engines'](), 'one owned engine; no concurrent run')
|
||||
s.require(shutil.disk_usage(build).free >= sum(p['bytes'] for p in refs.values()) + s.MIN_SPACE, 'unchanged disk admission')
|
||||
out.mkdir()
|
||||
stage = out / 'stage'; stage.mkdir()
|
||||
(out / 'starters').mkdir(); (out / 'bootstrap').mkdir()
|
||||
for name, entry in s.read(s.SUPPORT / 'bootstrap-scripts.json').items():
|
||||
data = entry['text'].encode()
|
||||
s.require(hashlib.sha256(data).hexdigest() == entry['sha256'], 'exact existing bootstrap')
|
||||
(out / 'bootstrap' / name).write_bytes(data)
|
||||
for name, entry in refs.items():
|
||||
target = stage / name; target.parent.mkdir(parents=True, exist_ok=True)
|
||||
s.copy_source(Path(entry['path']), target)
|
||||
expected = {n: {k: p[k] for k in ('bytes', 'sha256')} for n, p in refs.items()}
|
||||
s.require(s.inventory(stage, stage=True) == expected, 'whole private source copy')
|
||||
public = (ROOT / 'project.godot').read_bytes()
|
||||
protected = s.default_player(ROOT)
|
||||
paths = ['res://' + n for n in sorted(refs) if n.endswith('.gd')]
|
||||
s.write(out / 'parse-paths.json', paths)
|
||||
selected = {'root_before': root_before, 'map': {n: p['sha256'] for n, p in refs.items()}, 'timeout': 1200}
|
||||
run_id = uuid.uuid4().hex
|
||||
s.write(out / 'runner-input.json', {'protocol': 'kitchen-diagnostic-v1', 'run_id': run_id,
|
||||
'roster': roster, 'selected_source_map': selected['map'], 'default_player_before': protected})
|
||||
s.write(out / 'source-start.json', root_before)
|
||||
diagnostic = s.module('kitchen_diag_gate', s.SUPPORT / 'diagnostic_gate.py')
|
||||
owners = s.module('kitchen_diag_owners', s.SUPPORT / 'ordinary_proof_gate.py')
|
||||
audio = s.module('kitchen_diag_audio', s.SUPPORT / 'audio_evidence_gate.py')
|
||||
phases = []; rows = []; generated = {}; error = None; guard_errors = []
|
||||
try:
|
||||
for phase, test in [('import', None), ('parse', None)] + [(f'{i:03}', n) for i, n in enumerate(roster)]:
|
||||
row = s.execute_phase(engine, stage, out, phase, test, selected, expected, generated,
|
||||
policy, contracts, paths, public, protected, ROOT, outer, markers, diagnostic, owners, audio)
|
||||
p18.archive_profiles(out, row)
|
||||
phases.append(row)
|
||||
if test:
|
||||
row.update(sequence=len(rows), godot=engine); rows.append(row)
|
||||
(out / 'all-tests.json').write_text(json.dumps(rows, ensure_ascii=False, indent=2) + '\n')
|
||||
s.require(row['passed'], 'first strict native failure stops: ' + phase)
|
||||
except BaseException as caught:
|
||||
error = type(caught).__name__ + ': ' + str(caught)
|
||||
finally:
|
||||
cleanup, cleanup_errors = outer.finish_captured(outer.OWNED)
|
||||
try:
|
||||
s.require(s.source_refs(ROOT) == root_before and s.default_player(ROOT) == protected, 'whole source/default unchanged')
|
||||
s.require(s.inventory(stage, stage=True) == dict(expected, **generated), 'whole stage unchanged')
|
||||
s.require(all(r['engine_ended'] for r in cleanup), 'all native PIDs ended')
|
||||
except BaseException as caught:
|
||||
guard_errors.append(str(caught))
|
||||
s.write(out / 'runner-ended.json', {'protocol': 'kitchen-diagnostic-v1', 'run_id': run_id, 'error': error,
|
||||
'cleanup_errors': cleanup_errors, 'guard_errors': guard_errors, 'final_owned_cleanup': cleanup,
|
||||
'phases': phases, 'default_player_after': s.default_player(ROOT)})
|
||||
return int(error is not None or bool(cleanup_errors) or bool(guard_errors))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
raise SystemExit(main())
|
||||
+284
@@ -0,0 +1,284 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Read-only Root evidence gate. No collection, engine launch, or PASS emission."""
|
||||
import argparse
|
||||
import hashlib
|
||||
import importlib.util
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
import sys
|
||||
|
||||
sys.dont_write_bytecode = True
|
||||
ROOT = Path(__file__).resolve().parents[5]
|
||||
KITCHEN = 'tests/business/test_required_kitchen.gd'
|
||||
MARKER = 'docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json'
|
||||
EXTRA = 'tools/check_p04_order_evidence.py'
|
||||
EXTRA_PIN = {'bytes': 78235, 'sha256': 'f5b44827958f2ae352fe5c4bc3a1ffd4211ec7a41fc4c0759c8b954891662324'}
|
||||
BASE_PIN = {'bytes': 376039, 'sha256': 'dc43e665be3f02d14513f0b8c4248d410175dcfb118171d8cbe0e62ef764a2e4'}
|
||||
MARKER_PIN = {'bytes': 188089, 'sha256': '6ce6b28c5985e8a4f13b78bfeb1f1e09f6216d874fb01e0656ec1633bfa01cd7'}
|
||||
|
||||
|
||||
def require(ok, reason):
|
||||
if not ok:
|
||||
raise ValueError(reason)
|
||||
|
||||
|
||||
def pin(path):
|
||||
data = path.read_bytes()
|
||||
return {'bytes': len(data), 'sha256': hashlib.sha256(data).hexdigest()}
|
||||
|
||||
|
||||
def unique(pairs):
|
||||
result = {}
|
||||
for key, value in pairs:
|
||||
require(key not in result, 'duplicate JSON key: ' + key)
|
||||
result[key] = value
|
||||
return result
|
||||
|
||||
|
||||
def read(path):
|
||||
return json.loads(path.read_bytes(), object_pairs_hook=unique)
|
||||
|
||||
|
||||
def local(base, name):
|
||||
name = Path(name)
|
||||
require(not name.is_absolute() and '..' not in name.parts, 'relative evidence key required')
|
||||
path = base / name
|
||||
require(path.resolve().is_relative_to(base.resolve()), 'evidence escapes build directory')
|
||||
require(not any(p.is_symlink() for p in [path, *path.parents] if p != base.parent), 'evidence alias')
|
||||
return path
|
||||
|
||||
|
||||
def load(name, path):
|
||||
spec = importlib.util.spec_from_file_location(name, path)
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(module)
|
||||
return module
|
||||
|
||||
|
||||
def pins(refs):
|
||||
# Absolute production paths are provenance only. Never open them.
|
||||
return {name: {key: value[key] for key in ('bytes', 'sha256')} for name, value in refs.items()}
|
||||
|
||||
|
||||
def exited(pid):
|
||||
require(type(pid) is int and pid > 0, 'native PID invalid')
|
||||
try:
|
||||
os.kill(pid, 0)
|
||||
except ProcessLookupError:
|
||||
return
|
||||
raise ValueError('native PID still exists or cannot be confirmed exited: ' + str(pid))
|
||||
|
||||
|
||||
def cleanup(rows, expected):
|
||||
require([r['pid'] for r in rows] == expected, 'captured cleanup PID set/order')
|
||||
for row in rows:
|
||||
require(row['engine_ended'] is True and row['outer_cleanup_errors'] == []
|
||||
and row['foreign_process_or_group_signals'] == 0
|
||||
and row['cleanup']['engine_ended'] is True and row['cleanup']['errors'] == [],
|
||||
'owned native cleanup incomplete')
|
||||
exited(row['pid'])
|
||||
|
||||
|
||||
def verify(args):
|
||||
build = Path(os.environ['BUILD_OUTPUT_DIR']).resolve(strict=True)
|
||||
out = local(build, args.full_output)
|
||||
authority = local(build, 'audit-support/root-input-r01')
|
||||
base_path = local(authority, 'MAIN9B_COMPLETE_SOURCE_REFS.json')
|
||||
marker_base = local(authority, 'MAIN9B_COMPLETION_MARKER_CONTRACTS.json')
|
||||
require(pin(base_path) == BASE_PIN and pin(marker_base) == MARKER_PIN, 'fixed Root authority bytes')
|
||||
baseline = pins(read(base_path))
|
||||
require(len(baseline) == 1338, 'canonical map size')
|
||||
require(hashlib.sha256(json.dumps({n: p['sha256'] for n, p in baseline.items()}, sort_keys=True).encode()).hexdigest()
|
||||
== '533a4177918a9da4d4982aa9862cb7420c25d30c2458e36aab9c071c4d3a7139', 'canonical selected map hash')
|
||||
delta = read(Path(__file__).with_name('delta-manifest.json'))
|
||||
require(pin(ROOT / KITCHEN) == delta['canonical_source_delta']['new'], 'submitted kitchen source stale')
|
||||
require(baseline[KITCHEN] == delta['canonical_source_delta']['old'], 'old kitchen pin')
|
||||
expected = dict(baseline)
|
||||
expected[KITCHEN] = pin(ROOT / KITCHEN)
|
||||
expected[EXTRA] = EXTRA_PIN
|
||||
require(len(expected) == 1339, 'exact fixed additional P04 QA source')
|
||||
shared = load('kitchen_shared', ROOT / 'tools/run_all_tests.py')
|
||||
submitted = pins(shared.source_refs(ROOT))
|
||||
require(set(submitted) in (set(baseline), set(expected)), 'submitted additions/drops')
|
||||
require(all(p == expected[n] for n, p in submitted.items()), 'submitted source byte drift')
|
||||
marker_path = Path(args.marker_contracts).resolve(strict=True)
|
||||
require(pin(marker_path) == pin(ROOT / MARKER) == delta['marker_delta']['new'], 'explicit marker input stale')
|
||||
old_contract = read(marker_base)
|
||||
new_contract = read(marker_path)
|
||||
require(set(old_contract) == set(new_contract), 'marker structure changed')
|
||||
changes = []
|
||||
for old, new in zip(old_contract['rows'], new_contract['rows']):
|
||||
if old != new:
|
||||
require(old['test'] == new['test'] == KITCHEN, 'other marker row changed')
|
||||
require({k for k in set(old) | set(new) if old.get(k) != new.get(k)}
|
||||
== {'source_sha256_at_schema_audit', 'source_marker_lines'}, 'marker authority/count changed')
|
||||
changes.append(new)
|
||||
require(len(changes) == 1 and len(old_contract['rows']) == len(new_contract['rows'])
|
||||
and all(old_contract[k] == new_contract[k] for k in old_contract if k != 'rows'), 'marker contract delta')
|
||||
text = (ROOT / KITCHEN).read_text().splitlines()
|
||||
require(changes[0]['source_sha256_at_schema_audit'] == expected[KITCHEN]['sha256'], 'marker source SHA')
|
||||
require(changes[0]['source_marker_lines'] == [{'line': i, 'text': line} for i, line in enumerate(text, 1)
|
||||
if 'print("Required kitchen:' in line], 'actual source marker line/text')
|
||||
markers = load('kitchen_markers', ROOT / 'tools/strict_test_markers.py')
|
||||
contracts = markers.load_contracts(marker_path)
|
||||
start = read(local(out, 'runner-input.json'))
|
||||
end = read(local(out, 'runner-ended.json'))
|
||||
require(start['protocol'] == end['protocol'] == 'guarded-standard-v1'
|
||||
and start['run_id'] == end['run_id'] and start['owner_runner_pid'] == end['owner_runner_pid'], 'native standard run identity')
|
||||
require(Path(start['stage']) == out / 'stage', 'native build output identity')
|
||||
require(end['passed'] is True and end['engine_ended'] is True and end['failed_suites'] == 0, 'native full run did not pass')
|
||||
require(start['selected_source_map'] == {n: p['sha256'] for n, p in expected.items()}, 'exact 1339 selected map')
|
||||
require(pins(read(local(out, 'source-start.json'))) == {n: p for n, p in expected.items() if n != EXTRA}
|
||||
or pins(read(local(out, 'source-start.json'))) == expected, 'native submitted map stale')
|
||||
require(start['marker_contract_sha256'] == pin(marker_path)['sha256']
|
||||
and start['runner_sha256'] == expected['tools/run_all_tests.py']['sha256']
|
||||
and start['marker_module_sha256'] == expected['tools/strict_test_markers.py']['sha256'], 'native authority pins')
|
||||
roster = ['tests/run_tests.gd'] + sorted(n for n in expected if n.startswith('tests/') and n.endswith('.gd')
|
||||
and Path(n).name.startswith('test') and 'export' not in Path(n).parts and n != 'tests/s0/test_kernel_and_save.gd')
|
||||
require(len(roster) == 178 and start['roster'] == roster, 'new standard full 178 required')
|
||||
rows = read(local(out, 'all-tests.json'))
|
||||
require(markers.review_roster(roster, rows)['passed'], 'full exact ordered native roster')
|
||||
require(pin(local(out, 'all-tests.json'))['sha256'] == end['all_tests_sha256'], 'full rows receipt hash')
|
||||
phases = end['phases']
|
||||
require(len(phases) == 180 and [p['phase'] for p in phases] == ['import', 'parse'] + [f'{i:03}' for i in range(178)], 'import/parse/full finite phases')
|
||||
paths = ['res://' + n for n in sorted(expected) if n.endswith('.gd')]
|
||||
require(read(local(out, 'parse-paths.json')) == paths, 'all submitted scripts parsed')
|
||||
diagnostics = load('kitchen_diagnostics', ROOT / 'tools/regression/diagnostic_gate.py')
|
||||
native = load('kitchen_native', ROOT / 'tools/regression/owned_diagnostic_process.py')
|
||||
policy = read(ROOT / 'tools/regression/suite-policy.json')
|
||||
pids = []
|
||||
kitchen_raw = None
|
||||
generated = {}
|
||||
for source, source_pin in expected.items():
|
||||
require(pin(local(out, 'stage/' + source)) == source_pin, 'native selected bytes stale: ' + source)
|
||||
owners = load('kitchen_owners', ROOT / 'tools/regression/ordinary_proof_gate.py')
|
||||
audio = load('kitchen_audio', ROOT / 'tools/regression/audio_evidence_gate.py')
|
||||
bootstraps = read(ROOT / 'tools/regression/bootstrap-scripts.json')
|
||||
for name, entry in bootstraps.items():
|
||||
require(local(out, 'bootstrap/' + name).read_bytes() == entry['text'].encode()
|
||||
and pin(local(out, 'bootstrap/' + name))['sha256'] == entry['sha256'], 'existing Guard/bootstrap bytes')
|
||||
for index, phase in enumerate(phases):
|
||||
name = phase['phase']
|
||||
recorded = read(local(out, name + '-receipt.json'))
|
||||
# all-tests adds only sequence and godot after the immutable phase receipt.
|
||||
require(all(phase[k] == v for k, v in recorded.items()), 'phase receipt binding')
|
||||
test = roster[index - 2] if index >= 2 else None
|
||||
if test:
|
||||
require(phase == rows[index - 2] and phase['test'] == test, 'full row/phase identity')
|
||||
require(phase['validation_error'] is None and phase['passed'] is True and phase['failed'] is False, 'native phase failed')
|
||||
command = [start['engine'], '--headless', '--path', str(out / 'stage')]
|
||||
if name == 'import':
|
||||
command += ['--editor', '--import', '--quit', '--verbose']
|
||||
else:
|
||||
script = out / ('bootstrap/parse_full_dependencies.gd' if name == 'parse' else 'starters/' + name + '.gd')
|
||||
command += ['--script', str(script), '--verbose']
|
||||
require(pin(script)['sha256'] == phase['starter_sha256'], 'actual guarded starter pin')
|
||||
if test:
|
||||
expected_starter = ('extends ' + json.dumps('res://' + test)
|
||||
+ '\nconst Guard := preload(' + json.dumps(str(out / 'bootstrap/profile_guard.gd'))
|
||||
+ ')\nfunc _initialize() -> void:\n\tif not Guard.activate():\n\t\tquit(97)\n\t\treturn\n\tsuper._initialize()\n')
|
||||
require(script.read_text() == expected_starter, 'unchanged actual guarded suite entry')
|
||||
command += ['--log-file', str(out / name / 'engine-native.log')]
|
||||
require(phase['command'] == command, 'actual guarded launcher command')
|
||||
stdout = local(out, name + '/stdout.log').read_text()
|
||||
stderr = local(out, name + '/stderr.log').read_text()
|
||||
raw = stdout + stderr
|
||||
require(local(out, phase['log']).read_text() == raw and pin(local(out, phase['log']))['sha256'] == phase['log_sha256'], 'literal raw native transports')
|
||||
logger = local(out, name + '/engine-native.log')
|
||||
require(pin(logger) == {k: phase['raw_native_log'][k] for k in ('bytes', 'sha256')}, 'native logger hash')
|
||||
review = diagnostics.review_streams(native, {'stdout': stdout, 'stderr': stderr, 'native_file': logger.read_text()}, test,
|
||||
local(out, 'stage/' + test) if test else None)
|
||||
process = read(local(out, name + '/process.json'))
|
||||
require(process == phase['native_process'] and shared.process_gate(process, review['allowed_e31_error_lines'])
|
||||
and diagnostics.diagnostic_result_gate(process, review), 'native process/strict diagnostics')
|
||||
began = read(local(out, name + '/started.json'))
|
||||
ended = read(local(out, name + '/ended.json'))
|
||||
pid = phase['actual_pid']; pids.append(pid)
|
||||
require(began['actual_pid'] == ended['actual_pid'] == process['pid'] == pid
|
||||
and began['command'] == ended['command'] == phase['command']
|
||||
and began['owner_pid'] == ended['owner_pid'] == start['owner_runner_pid']
|
||||
and ended['engine_ended'] is True and ended['exit_code'] == 0, 'native START/END PID/command binding')
|
||||
require(began['live_identity_exact'] is True or began['tracked_child_ended_before_initial_probe'] is True, 'owned native identity')
|
||||
require(began == process['actual_start_binding'] and ended == process['actual_end_binding']
|
||||
and began['event'] == 'ENGINE_STARTED' and ended['event'] == 'ENGINE_ENDED'
|
||||
and ended['monotonic_ns'] >= began['monotonic_ns']
|
||||
and ended['actual_process_exit_code'] == 0 and ended['timed_out'] is False
|
||||
and ended['lifecycle_error'] is None, 'raw complete lifecycle binding')
|
||||
require(read(local(out, name + '/adapter-owned-cleanup.json')) == process['adapter_owned_cleanup'], 'raw adapter cleanup binding')
|
||||
capture = phase['outer_actual_capture']
|
||||
outer = read(local(out, name + '/outer-owned-finally.json'))
|
||||
require(all(capture[k] == v for k, v in outer.items()) and capture['all_captured_ended'] is True
|
||||
and capture['outer_receipt_written'] is True and capture['outer_receipt_error'] is None
|
||||
and capture['adapter_exception'] is None and capture['outer_cleanup_errors'] == []
|
||||
and capture['foreign_process_or_group_signals'] == 0 and capture['actual_captured_pids'] == [pid], 'outer native ownership')
|
||||
cleanup(capture['cleanup'], [pid])
|
||||
require(phase.get('guard_error') is None and phase['default_player_entire_profile_unchanged'] is True
|
||||
and phase['private_project_fields'] == 2, 'unchanged guards/default profile')
|
||||
public = (ROOT / 'project.godot').read_bytes()
|
||||
require(hashlib.sha256(shared.private_project(public, phase['profile_startup_name'])).hexdigest()
|
||||
== phase['private_project_sha256'], 'only the two existing private profile settings')
|
||||
require(read(local(out, name + '-startup-profile-before.json'))['existed'] is False, 'fresh startup profile')
|
||||
for kind in ('startup', 'runtime') if index else ('startup',):
|
||||
whole = phase['whole_' + kind + '_profile_after']
|
||||
archive = local(out, 'profiles/' + name + '/' + kind)
|
||||
require(archive.is_dir() and shared.inventory(archive) == whole['files'], 'retained actual whole private profile')
|
||||
if index:
|
||||
report = read(local(out, name + '-profile.json'))
|
||||
require(report == phase['actual_private_profile']['report'] and report['verified'] is True
|
||||
and report['conditions'] == [True] * 5 and report['conditions_checked'] == 5
|
||||
and report['fresh_before_parent_initialize'] is True and report['profile_writes_before_guard'] == 0
|
||||
and report['project_settings_persisted'] is False
|
||||
and report['actual_user_data_dir'] == report['expected_user_data_dir'], 'unchanged five Guard conditions')
|
||||
require(pin(local(out, name + '-profile.json'))['sha256'] == phase['actual_private_profile']['report_sha256']
|
||||
and phase['actual_private_profile']['whole_files'] == phase['whole_runtime_profile_after']['files']
|
||||
and report['globalized_probe'] == report['actual_user_data_dir'] + '/guard-probe'
|
||||
and Path(report['actual_user_data_dir']).name == report['custom_user_dir_name'], 'whole actual profile/Guard binding')
|
||||
if test:
|
||||
require(phase['source_sha256'] == phase['source_sha256_end'] == expected[test]['sha256'], 'suite source stale')
|
||||
parsed = markers.parse_raw(test, raw, contracts, expected[test]['sha256'])
|
||||
require(parsed['passed'] and parsed['checks'] == phase['reported_checks']
|
||||
and parsed['marker'] == phase['completion_marker'], 'strict actual marker/count')
|
||||
if test in policy['suite_policies']:
|
||||
require(phase['policy'] == shared.phase_policy(test, local(out, 'stage/' + test), policy['suite_policies']), 'unchanged suite cleanup/threshold policy')
|
||||
proof_policy = phase['policy']
|
||||
if proof_policy['ordinary_cleanup_prepared']:
|
||||
require(owners.ordinary_gate(local(out, name + '-teardown'), pid, out,
|
||||
proof_policy['ordinary_control_labels']) == phase['ordinary_owner_pairs'], 'actual ordinary cleanup proof')
|
||||
if proof_policy['old_bounded_teardown'] or test == 'tests/ui/test_ui_audio_feedback.gd':
|
||||
require(audio.teardown_gate(local(out, name + '-teardown'), pid, out) == phase['old_bounded_proof'], 'actual bounded cleanup proof')
|
||||
if test == KITCHEN:
|
||||
kitchen_raw = raw
|
||||
require(parsed['checks'] == 163, '145 existing checks plus 17 controls and one fresh proof')
|
||||
elif name == 'parse':
|
||||
require(raw.count('FULL_DEPENDENCY_PARSE checks=%d failures=0\n' % len(paths)) == 1, 'strict all-script parse')
|
||||
generated.update({n: {k: p[k] for k in ('bytes', 'sha256')} for n, p in phase['generated_reports'].items()})
|
||||
require(len(set(pids)) == 180 and end['actual_captured_PIDs'] == pids, 'all native PID bindings')
|
||||
cleanup(end['final_owned_cleanup'], pids)
|
||||
require(end['error'] is None and end['cleanup_errors'] == [] and end['guard_errors'] == [], 'full cleanup/guards')
|
||||
require(start['default_player_before'] == end['default_player_after']
|
||||
and start['default_player_before']['logs_and_locks_included'] is True, 'whole default profile including locks/logs preserved')
|
||||
require(shared.inventory(local(out, 'stage'), stage=True) == dict(expected, **generated), 'whole stage/source/report set preserved')
|
||||
labels = ['outside'] + [verb + ' ' + field for field in ['version', 'relationships', 'threshold_candidates', 'next_candidate_sequence']
|
||||
for verb in ['delete', 'change']] + ['sequence +1', 'nonempty originals', 'version 0', 'version 3', 'version 2',
|
||||
'equal reordered keys', 'equal String reencoding', 'byte-identical deep copy']
|
||||
lines = kitchen_raw.splitlines()
|
||||
for label in labels:
|
||||
require(lines.count(' ✓ legacy migration control immutable ' + label) == 1, 'native negative/positive control missing: ' + label)
|
||||
# Successful return is deliberately silent. This gate never produces its own PASS.
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(allow_abbrev=False, description=__doc__)
|
||||
parser.add_argument('--verify-only', required=True, action='store_true')
|
||||
parser.add_argument('--marker-contracts', default=str(ROOT / MARKER))
|
||||
parser.add_argument('--full-output', default='native-full178', help='relative to BUILD_OUTPUT_DIR')
|
||||
verify(parser.parse_args())
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
main()
|
||||
except (OSError, ValueError, KeyError, TypeError, AssertionError) as error:
|
||||
print(str(error), file=sys.stderr)
|
||||
raise SystemExit(1)
|
||||
+7
File diff suppressed because one or more lines are too long
+5686
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,125 @@
|
||||
# P19-03 実装提出報告
|
||||
|
||||
提出状態。受入は未確定。原受入「7名×3ルートの到達表があり、未制作内容は欠損として残る。」を維持する。14/88は変更しない。
|
||||
|
||||
## 変更範囲
|
||||
|
||||
Repair 1開始点e0420d57a381a1644357f0590536e1d47c9bca9fから、このディレクトリの指定5ファイルのみを変更した。原本、原子要件、work packages、decisions、TASK_SPEC、選定記録、frozen pins、ゲーム入力、marker registryは変更していない。git書込み、他worker起動、Runner操作、ゲーム起動は行っていない。素材追加なし。
|
||||
|
||||
## 要件と検査の対応
|
||||
|
||||
|TASK_SPEC implementation_requirements順|成果物|検査|
|
||||
|---|---|---|
|
||||
|1: 原7名×3ルート|REACHABILITY_TABLE.json / .md|expectedのPEOPLE/ROUTES、原本118–124行、atomic entityと21セルの完全一致。test_exact_cell_product|
|
||||
|2: 8カテゴリ、共通/人物固有の分離|JSON common_rules / cells.categories|CATEGORIES全件のcanonical比較。test_categories_and_citations|
|
||||
|3: 原本本文・行・status・anchorのsource SHA・owner|JSONの各共通項目/人物固有項目、catalog_evidence|expected.evidence/cite、verify。test_stale_record_evidence / test_owner_and_status|
|
||||
|4: 欠損、理由、担当、未知値pending|各character_specific、pending、natural_route_complete=false|test_no_invented_values_or_completion。D05/D08は未回答のまま|
|
||||
|5: docs内stdlibチェッカー/自己試験|check_reachability_table.py / test_reachability_table.py|stdlib importsのみ。選択対象外のdocs内配置|
|
||||
|6: read-only --check、厳密な表/Markdown|verify / verify_records / markdown|test_json_and_types / test_markdown_drift。--checkは書込み分岐を通らない|
|
||||
|7: 全frozen source mapと各identity|binding / selection|1368選択ファイルの完全map、marker/policy/engine、184-suite roster、329 .gd、baseline、spec→pins SHA。test_full_frozen_map_and_identities / test_real_source_and_baseline_changes|
|
||||
|8: UI/Runtime/save/Windowsの適用性|JSON route_support、MDルート別適用性|各ルートをcanonical比較。汎用UIラベル、原本登録Runtime、専用snapshotの限定証拠をcommon_rulesで参照|
|
||||
|9: 有意な負例と3種の正例|test_reachability_table.py|欠落/重複/誤人物/誤route/カテゴリ/引用/古い本文・SHA/値創作/誤完成/owner・status/JSON型/Markdown、実ファイル読込差替え、map差分とpins/marker/policy/engine改変。全3statusを含む正例|
|
||||
|10: P13パターン・原文保全|checkerのexpected/verify/markdown、原資料のbase blob照合|tools/check_p13_content_difference.pyのcanonical生成・厳密比較・read-only Git blob証拠パターンを参照。元ファイルは無変更|
|
||||
|11: 報告・残課題・外部gate|本報告、JSON accounting|正式試験・全単位独立レビュー・統合/finalは未実行と明記|
|
||||
|
||||
原子要件はB-7.1〜B-7.6をsource_group_idsに含む61件の完全レコードを読込対象とし、JSON authority_snapshotsに保持する。人物キーと原名はそのentityから確認し、原本§6の順で並べた。原本§6は114–135行、§7は136–161行であり、実際の見出しと本文を照合した。人物別の原本仕様がない部分を共通ルールから創作していない。中断/保存の人物固有手順は原本に定義されず、work_packagesのP19-02受入が所有する欠損として残した。
|
||||
|
||||
指定されたoriginal_relationship_state.gdには7名のrosterはなく、汎用subject_id等の明示入力検証のみがある。既存unique catalogのヒロインはheroine_anriのみ。監査IDには既存atomic entity.key(anri/fine/tomari/amelia/liz/mimi/satsuki)を使い、他6名の実装catalog ID、ライバル対応、初期値を創作していない。この実装欠損は表の欠損であり、原7名を削減する理由にしていない。
|
||||
|
||||
## Repair 1: 4指摘の対応
|
||||
|
||||
編集前に build/owner-handoff/p19-review-r01/ の ACTUAL_OPUS_REPAIR_DIRECTION.json、ACTUAL_WHOLE_UNIT_REVIEW.json、SPEC_HASH_REPRESENTATIONS.json を読んだ。
|
||||
|
||||
- MEDIUM: coassignment_attack / zero_break / love_actions / threshold_route_loss と旧UIのlegacy_evidenceを追加。固定anchorの実際の本文・行・Git blob OID・file-bytes SHA-256を保持する。原本準拠statusはmissing、旧実装分類はlegacy_not_originalに統一。P18-01は一対一変換を禁止し、旧数値・日次制限は原本として未承認と明記した。UI定数は実際には98–101行であり、89–97行の無関係なラベルを除いた。共通ルール参照により各該当セルへ結び付けた。所有者・原本欠損・natural_route_complete=falseを維持。
|
||||
- LOW 独立試験: validate_legacyは候補とcanonicalの比較とは独立に、git showで固定anchorのソースを読み、引用行本文とgit rev-parseによるblob OID、現ファイルとの一致を検査する。test_independent_legacy_source_evidenceは実際のJSONと実ファイルを開き、git hash-object --stdin(書込みなし)でOIDを独立計算し、関数名とshield_broken/EXCLUSIVE_LOCKEDも確認。test_legacy_evidence_required_independentlyは対象全項目の証拠削除・空配列・無条件not implemented・古いOID/本文を拒否する。
|
||||
- LOW 中断参照: 全21セルのinterruption_cancellationに原本148・153行の本文とbaseline hash、および343–355行のconfirm_route_lockをlegacy_not_originalとして追加。人物固有欠損と担当は維持。
|
||||
- LOW ハッシュ表示: 263a01b943d8056727335fb76977c010298e1c229077f8da76e48683ba2e89bb は TASK_SPEC.json file-bytes SHA-256。3af3d9b931edc5449796662ad69bb6f67c80b48827a86565b1952931db68dd15 は Runner git-show stripped-UTF-8 contract spec_sha256。上記SPEC_HASH_REPRESENTATIONS.jsonのunchanged_file=trueが証拠であり、両者は同じ無変更ファイルを表す。checker定数と出力にも区別を反映。Git blob OIDは別のgit_blob_oidフィールドでありfile-bytes SHA-256とは区別する。
|
||||
|
||||
## Repair 1の実行記録(過去のローカル確認)
|
||||
|
||||
以下は正式Runner実行ではない。記録済み修復指示に基づき3登録コマンドをローカル実行した。
|
||||
|
||||
生成 — exit 0
|
||||
|
||||
```sh
|
||||
python3 -B /Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-implement/docs/plans/original-completion-2026-10-02/execution/p19-03/check_reachability_table.py --project-root /Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-implement --write
|
||||
```
|
||||
|
||||
p19-table — exit 0
|
||||
|
||||
```sh
|
||||
python3 -B /Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-implement/docs/plans/original-completion-2026-10-02/execution/p19-03/check_reachability_table.py --project-root /Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-implement --check
|
||||
```
|
||||
|
||||
p19-negative — exit 0
|
||||
|
||||
```sh
|
||||
python3 -B /Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-implement/docs/plans/original-completion-2026-10-02/execution/p19-03/test_reachability_table.py --project-root /Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-implement
|
||||
```
|
||||
|
||||
p19-source-binding — exit 0
|
||||
|
||||
```sh
|
||||
python3 -B /Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-implement/docs/plans/original-completion-2026-10-02/execution/p19-03/check_reachability_table.py --project-root /Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-implement --source-binding-only
|
||||
```
|
||||
|
||||
--writeの実際の呼出しは同一checkout内で相対スクリプトパスと --project-root . を使用(上記は絶対パス表記)。--checkはMarkdownのバイト完全一致を確認。自己試験は12件OK。source bindingは1368ファイル一致、file_equality=true、actual_commit=e0420d57a381a1644357f0590536e1d47c9bca9f、native_evidence_reuse_accepted=false。git diff --checkはexit 0。構文は上記Python実行で確認。最初の編集用here-documentは一時ファイル作成制限でexit 1、変更は行われず、python3 -cで再実行してexit 0。native full・ゲーム起動・git書込み・Runner操作・他エージェント起動は行っていない。
|
||||
|
||||
## 残る親成果・ゲームの欠損
|
||||
|
||||
- P18-01: 原本3軸/盾の通常UI、承認済み初期値、本来の全単位受入。P18-02/03: 同配置・軽減・ブレイク・接触・閾値・確定遷移。既存旧汎用モデルの閾値を原本へ転用しない。
|
||||
- P19-01/02: 原本行動と全3種決闘、勝敗・費用・盾/履歴の一度だけ反映、通常入口、停止/取消/離脱/保存再開。原本状態保持のbackendを自然ルート完成としない。
|
||||
- P20-01/02/03: スキル/章・全エンド・図鑑と新規からの通常到達。P26-01/02/03: 人物別必要内容、状態接続、完成資産と制作受入。人物固有イベント/条件/履歴/立ち絵差分は欠損。
|
||||
- D05、D08はpending。未知の閾値・率・初期値もpendingのまま。P04の既存D05選択、P13の4件の制作followupも未解決。
|
||||
- この文書単位のnative GUI/Windows実行は適用外。global same-Windows、held gestures、全ゲーム受入はopen。固定入力一致から既存native証拠の正式再利用承認を推定していない。
|
||||
- Runnerの3 validator、原本§6–7と元受入に対する実装者から独立したwhole-unit Opus review、その後の通常prepare-integration/finalが必要。どの完了数・元台帳も変更していない。
|
||||
|
||||
|
||||
## Repair 2: BASE定義projectionと台帳更新の分離
|
||||
|
||||
開始点Sは806de25068bc423136063791afcea811d251ee1b。編集前にACTUAL_OPUS_REPAIR2_DIRECTION.jsonとACTUAL_FAILED_INTEGRATION.json、immutable TASK_SPECと既存チェッカーを確認。最新run指示に従い、実マージ候補の作成・検証は実装担当では行わない。指定5ファイルのみを変更する。Repair 1の4修正を保持し、任意の低3指摘は延期したまま。
|
||||
|
||||
### 実差分とallowlistの根拠
|
||||
|
||||
git showによるBASE 8ca9263とmain 6e17caeのkey-level比較を行った。candidate 1875b03のwork_packages.jsonは6e17caeと完全一致。差分は次だけ(配列index 19=P19、remaining_deliverables index 2=P19-03):
|
||||
|
||||
|JSON path|差分|
|
||||
|---|---|
|
||||
|/19/current_summary|変更|
|
||||
|/19/updated_at_jst|変更|
|
||||
|/19/remaining_deliverables/2/current_execution|TASK_SPEC.jsonからROOT_CURRENT_ACCEPTANCE_STATUS.jsonへの参照更新|
|
||||
|/19/remaining_deliverables/2/current_summary|変更|
|
||||
|/19/remaining_deliverables/2/progress_summary|変更|
|
||||
|/19/remaining_deliverables/2/remaining_gaps/0, /1|通常integration/final待ちの進捗説明へ更新|
|
||||
|/19/remaining_deliverables/2/evidence|1件から2件|
|
||||
|/19/remaining_deliverables/2/submitted_commit|806de25068bc423136063791afcea811d251ee1bを追加|
|
||||
|/19/remaining_deliverables/2/updated_at_jst|変更|
|
||||
|
||||
package allowlistはstate / legacy_state / current_summary / updated_at_jst。unit allowlistはstate / current_execution / remaining_gaps / updated_at_jst / submitted_commit / current_summary / progress_summary / evidence。state系は通常進捗遷移として明示的に許可し、同じ実registerに既存のキーだけを採用した。通常finalの完了時刻・source-ref用に、BASEの他unitで既に使われるcompleted_at_jst(P13-03)、implementation_commit(P13-03)、integrated_commit(P13-02)、integration_commit(P13-03)、normal_integration_candidate(P04-01)だけをunit階層で追加許可した。キーのprefixや任意のtimestamp/source_refキーは許可しない。allowlistの値は進捗メタデータとしてprojectionから全体を除外する。
|
||||
|
||||
それ以外の全キーは未知キーを含め再帰的な値・型・有無を保ち、BASE projectionと比較する。30 package / 88 unitのID・順序・件数、全title/work/acceptance、phase/parent/depends_on/requirement_ids/decisions/supplement_ids/owner_roles/state_scope等を固定する。atomic_requirements.jsonとdecisions.jsonは実main差分なしのため引き続きbyte-exact。D05/D08のstatus/answerは変更不可。selection recordもbyte-exact。
|
||||
|
||||
所有者集合・原子要件・authority_snapshotsはBASE blobのみから読む。各snapshotはanchored_base_commit、BASE blobのsha256、projected recordsを保持する。work packagesは全30/88定義を保持し、進捗を除外した。表の21セル、共通ルール・引用・status・owner・欠損・pending/null値は変更していない。Markdownには固定参照の説明だけを追加した。--writeは1回実行、--checkは読込み専用。
|
||||
|
||||
### Repair 2 ローカル実行
|
||||
|
||||
cwdとproject-rootは /Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-implement。
|
||||
以下は正式Runner試験ではない。実際の呼出しは各scriptをdocs/plans/original-completion-2026-10-02/execution/p19-03/配下の相対パスで指定し、--project-rootには上記実絶対パスを指定した。
|
||||
|
||||
- python3 -B docs/plans/original-completion-2026-10-02/execution/p19-03/check_reachability_table.py --project-root /Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-implement --write: exit 0。
|
||||
- p19-table: python3 -B docs/plans/original-completion-2026-10-02/execution/p19-03/check_reachability_table.py --project-root /Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-implement --check: exit 0。
|
||||
- p19-source-binding: python3 -B docs/plans/original-completion-2026-10-02/execution/p19-03/check_reachability_table.py --project-root /Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-implement --source-binding-only: exit 0。
|
||||
|
||||
上記3呼出しのstdoutはaudit_integrity=pass、formal_acceptance=pending_runner_and_independent_review、actual_commit=806de25068bc423136063791afcea811d251ee1b、selected_files=1368、anchor=1b07b87d3736e777932315a4bdde8b70cbf9cb23、file_equality=true、native_evidence_reuse_accepted=false。spec file-bytesとRunner contractの両hashも従来値のまま。
|
||||
|
||||
実mainおよび失敗candidateの実blobをPath.read_bytes差替えで読ませる自己試験は、生成JSONとMarkdownのbyte完全一致を検証する。実registerの書換え・一時worktree・mergeは不要。合成完了/source-ref例も同じ検査を通す。各定義フィールドの変更・削除、package/unit objectの未知キー追加、package/unit/各定義listの件数/順序変更、D05/D08承認、atomic/decisions/selectionの変更を個別subtestで拒否する。既存12テストは維持。
|
||||
|
||||
実merged-candidate確認: **Root preflight pending**。新S提出と通常validation後、Rootが最新main上の実Sについてラベル付き非正式isolated preflightで同じ3チェッカーを実行する。その後に別Opus whole-original re-review、通常prepare-integration/finalが必要。今回のローカル成功やworker exit 0は受入ではない。正式進捗14/88は維持。native GUI/Windowsは本単位に適用外、global Windowsとゲーム受入はopen。
|
||||
|
||||
自己試験の探索版2回は全recordや深い履歴データの同型フィールドまで反復走査して時間がかかったため中断(各exit 130、KeyboardInterrupt)。package/unitの異なる定義キーごとに変更・削除を検査し、ネストした定義値は全体を比較する形へ整理した。BASE blobを一度実読込して負例ループ内で再利用し、各負例ごとのgit show起動を省いた。検査対象・既存controlは削除していない。shell here-documentを用いた初回の読取り差分確認は環境の一時ファイル制約で失敗(exit 1)、python3 -cで同じ確認を実行した。
|
||||
|
||||
最終p19-negative呼出し: python3 -B docs/plans/original-completion-2026-10-02/execution/p19-03/test_reachability_table.py --project-root /Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-implement
|
||||
|
||||
exit 0、出力: Ran 16 tests in 16.285s / OK。実main/candidate正例、合成final正例、全package/unit定義フィールド負例と既存controlを含む。git diff --checkもexit 0。最終差分は指定5ファイルのみ。生成前後のJSONを比較しauthority_snapshots以外の全フィールドが一致することも静的確認した。
|
||||
|
||||
同じp19-tableコマンドを絶対scriptパスで再確認(exit 0、同じpass出力)。呼出し前後にこのディレクトリの全通常ファイルSHA-256 mapを比較し一致: Read-only byte determinism: pass。最終git diff --checkもexit 0。
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+18
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"purpose": "Nonformal Root diagnostic actual S+latestMain; not usual prepare-integration candidate, not owner-approved, no original credit",
|
||||
"S": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"M": "6e17cae5c9f0133fc3eb19e58572977f4151de7c",
|
||||
"preflight_commit": "7f9b63b0c281d57be4abec1c576e5abef273ca78",
|
||||
"preflight_tree": "5fd36ac7825980524f7d14137434a7866dd114ac",
|
||||
"source": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-root-preflight-5343471e",
|
||||
"root_pid": 49701,
|
||||
"time_ns": 1792235765159907000,
|
||||
"normal_integration_or_final_satisfied": false,
|
||||
"passed": true,
|
||||
"all3_original_checks_passed": true,
|
||||
"actual_report": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/66089140e92a48b2bc96ea67ca597b58-root-preflight.json",
|
||||
"time_end_ns": 1792235786176952000,
|
||||
"new_native_runs": 0,
|
||||
"whole_original_acceptance": false,
|
||||
"task_state_unchanged": "review_pending"
|
||||
}
|
||||
+127
@@ -0,0 +1,127 @@
|
||||
{
|
||||
"at_jst": "2026-10-17T20:29:39.555420+09:00",
|
||||
"plan_id": "P19-03",
|
||||
"registered_task": "P19-03-TABLE",
|
||||
"project": "the-tree-p19-03-reachability",
|
||||
"S": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"implementation_model": "gpt-6.1-sol",
|
||||
"actual_model_decision": "c767de1cd89d40e5a23964f2e62ce4c6",
|
||||
"state": "completed_original_P19_03",
|
||||
"original_acceptance": "7名×3ルートの到達表があり、未制作内容は欠損として残る。",
|
||||
"original_units": 88,
|
||||
"formally_completed": 15,
|
||||
"new_credit": 1,
|
||||
"registered_validation": {
|
||||
"passed": true,
|
||||
"artifact": "ROOT_FORMAL_VALIDATION_903A2C5.json",
|
||||
"checks": [
|
||||
"p19-table",
|
||||
"p19-negative",
|
||||
"p19-source-binding"
|
||||
],
|
||||
"self_tests": 16
|
||||
},
|
||||
"actual_reviewer": {
|
||||
"id": "565d4f21c12b451da2d5a7dd462d099b",
|
||||
"status": "finished_pass"
|
||||
},
|
||||
"reviewer_model": "claude-opus-5-5",
|
||||
"full_game_input_equality": {
|
||||
"files": 1368,
|
||||
"markers_policy_engine_roster_parse_default_player_same": true,
|
||||
"full184_21903_329parse_186ended_reuse_qualified": true,
|
||||
"new_native_runs": 0,
|
||||
"artifact": "ROOT_EXACT_GAME_INPUT_REUSE_903A2C5.json"
|
||||
},
|
||||
"required_before_acceptance": [],
|
||||
"source_gaps_preserved": [
|
||||
"Six missing productioncatalog IDs are not fabricated; table audit uses existing original atomic entity keys",
|
||||
"D05/D08 and unknown values/content remain missing or pending; backend/generic labels are not natural route completion",
|
||||
"Global Windows/game/content conditions stay open; this audit adds no product OS behavior"
|
||||
],
|
||||
"execution_issues_preserved": [
|
||||
"Initial registered {worktree} invocation failed before scripts opened; exact-root adapter madeactual3sameSchecks run, repairs0/source/config/policy unchanged",
|
||||
"Initial full inline review rejected beforeinference at actual1milliontoken providerlimit; completefile/diff sourceviews retainalloriginalbytes, no file/bytecaps, sameOpus5.5/sourceS"
|
||||
],
|
||||
"normal_integration_candidate": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"repairs": 2,
|
||||
"repair_cap": null,
|
||||
"whole_original_review": {
|
||||
"run_id": "565d4f21c12b451da2d5a7dd462d099b",
|
||||
"status": "pass",
|
||||
"critical_high_medium": 0,
|
||||
"low": 3,
|
||||
"artifact": "ROOT_WHOLE_REVIEW_903A2C5.json"
|
||||
},
|
||||
"actual_repair_worker": {
|
||||
"id": "bf8a86e053044bfea0051253fefb2ec7",
|
||||
"status": "finished"
|
||||
},
|
||||
"repair_scope": "Same5Docfiles: legacy presence vsoriginalconformance for4clauses, independent source-presence/evidence-loss tests, route-ending interruption crossrefs, precise hash labels. No game/values/pins/roster changes.",
|
||||
"actual_preflight": {
|
||||
"passed": true,
|
||||
"source": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"preflight_commit": "7f9b63b0c281d57be4abec1c576e5abef273ca78",
|
||||
"main": "6e17cae5c9f0133fc3eb19e58572977f4151de7c",
|
||||
"normal_integration_or_final_satisfied": false,
|
||||
"artifact": "ROOT_ACTUAL_NONFORMAL_MAIN_PREFLIGHT_903A2C5.json"
|
||||
},
|
||||
"previous_actual_integration_failure": {
|
||||
"commit": "1875b032b7f6a8525fb6ccec0574e21769943c95",
|
||||
"reason": "Checker incorrectly froze mutable workpackages metadata; now definition projection remainsfailclosed, originalfactsunchanged",
|
||||
"artifact": "ROOT_FAILED_FORMAL_INTEGRATION_806DE25.json"
|
||||
},
|
||||
"table_fact_comparison": {
|
||||
"only_changed": "authority_snapshots representation",
|
||||
"all21cells_rules_statuses_owners_gaps_unchanged": true,
|
||||
"artifact": "ROOT_TABLE_FACT_COMPARISON_806_TO_903.json"
|
||||
},
|
||||
"registered_task_state": "completed",
|
||||
"normal_main_base": "e7acd530c5d43313534d0b6ee23c915aba3cf70a",
|
||||
"source_on_main": true,
|
||||
"normal_final": {
|
||||
"passed": true,
|
||||
"commit": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"artifact": "ROOT_NORMAL_FINAL_C8E4F1D9.json"
|
||||
},
|
||||
"whole_original_P19_03_accepted": true,
|
||||
"whole_game_accepted": false,
|
||||
"related_open_work": [
|
||||
"P18/P19-01/P19-02/P20/P26 natural gameplay, all7character-specific content and6productioncatalogIDs",
|
||||
"D05/D08 and unapproved initial/threshold/rate values remain unanswered or missing",
|
||||
"SameWindows/globalgame acceptance and heldgestures stillopen; docaudit OSexecution notapplicable"
|
||||
],
|
||||
"normal_final_pending": false,
|
||||
"closure_evidence": [
|
||||
{
|
||||
"path": "ROOT_WHOLE_REVIEW_903A2C5.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/565d4f21c12b451da2d5a7dd462d099b/result.json",
|
||||
"bytes": 5470,
|
||||
"sha256": "779e58c3d31556ea25ae3fe134dccc0335a8ab14dd675ea80f97c51768223550"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_NORMAL_INTEGRATION_C8E4F1D9.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/83e6d08d9ac245d6b35941ac165d3318-integration.json",
|
||||
"bytes": 854,
|
||||
"sha256": "aa6148bc06f9ab9f9ef28364d8511b6beca4a5d4a4b6d1299f7d769bb9b44f78"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_NORMAL_FINAL_C8E4F1D9.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/213aafebe6254110bf349c25b6036d92-final.json",
|
||||
"bytes": 848,
|
||||
"sha256": "4c5ec540ff0b527d37454b16cb392b14aff1ae598c445722d9625b30b91d8ea6"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_RUNNER_COMPLETED_TRACEABILITY.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/traceability/P19-03-TABLE.json",
|
||||
"bytes": 5090,
|
||||
"sha256": "b433a6b52bb722fa8e9cdc2a161abbca71693f45926bb5c7bf1b00716d3d7f5a"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_EXACT_C8E4F1D9_QUALIFICATION.json",
|
||||
"actual_original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/.runtime/coordinator-start-20261017/EXACT_C8E4F1D9_P19_QUALIFICATION.json",
|
||||
"bytes": 2584,
|
||||
"sha256": "f15125c39a2cf2b42618dfbd9c9a9834f5c32c6b8f256b245de80a7b460ebcc0"
|
||||
}
|
||||
]
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"actual_review": "38eaaacdb31b4c76bcf982987816a391",
|
||||
"findings": [
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Most data-level negative tests still compare the document against the same expected() canonical. The independent semantic checks name only three markers: restore_shield, shield_broken and EXCLUSIVE_LOCKED. Citations such as the preview service's contact/shield-candidate lines, and the 6850, 1039 and 1047 call sites, are checked only for text and blob equality, not for a function-name marker. Consider asserting a marker for every legacy entry."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "The run log in IMPLEMENTATION_REPORT.md reports source binding actual_commit=e0420d5. That comes from the pre-commit local run. The Runner output correctly binds 806de25, but the report should mark that line as the pre-submission local value."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "The snapshot_container evidence range (relationship_service.gd 423–479) starts mid-function and cuts off inside restore_snapshot. It is accurate as evidence, but a range aligned to function boundaries would be clearer for downstream owners (P18-01, P19-02)."
|
||||
}
|
||||
],
|
||||
"disposition": "Low severity optional hardening/clarity notes, not original audit blockers. Formal Runner output pins806de25; worker report e0420d5 is a pre-submission local-run HEAD, not the final accepted version."
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"actual_review": "565d4f21c12b451da2d5a7dd462d099b",
|
||||
"findings": [
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "test_actual_main_and_candidate_metadata names commits by abbreviated SHA (6e17cae, 1875b03). The test only works where those objects exist. That holds in the current repository, but full SHAs, or a clear explanation of the dependency, would make it more reproducible."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Three low notes from the previous review (806de25) are still deferred: (1) per-entry function-name markers for every legacy citation, (2) the label on the Repair 1 local actual_commit line, (3) aligning the snapshot_container range to function boundaries. This deferral is allowed. Item (2) is already addressed by the 「過去のローカル確認」 label."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Most data-level negative tests still compare the document against the same expected() canonical. The checker's hardcoded facts (statuses, owners) are therefore protected from tampering by self-comparison, not proven correct by the tests. I separately confirmed in the actual source and work_packages that the classifications and owners are correct."
|
||||
}
|
||||
],
|
||||
"disposition": "Optional nonblocking hardening/clarity only. All required original audit conditions passed independent semantic review and normal integration/final.",
|
||||
"preserved_reproduction_fixture": {
|
||||
"full_commit": "1875b032b7f6a8525fb6ccec0574e21769943c95",
|
||||
"remote_branch": "codex/p19-03-integration-fixture-1875b03",
|
||||
"fetch_if_single_branch_clone": "git fetch origin refs/heads/codex/p19-03-integration-fixture-1875b03:refs/remotes/origin/codex/p19-03-integration-fixture-1875b03",
|
||||
"other_required_commit": "6e17cae5c9f0133fc3eb19e58572977f4151de7c",
|
||||
"no_main_adoption_of_failed_fixture": true
|
||||
}
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"S": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"C": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"M": "e7acd530c5d43313534d0b6ee23c915aba3cf70a",
|
||||
"candidate_worktree": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-integration-69419f96",
|
||||
"all1368_game_inputs_marker_policy_engine_roster_parse_default_player_identical": true,
|
||||
"all8_reviewed_doc_artifacts_byte_identical": {
|
||||
"docs/plans/original-completion-2026-10-02/execution/p19-03/ACTUAL_OPUS_NEXT_ORIGINAL_UNIT_SELECTION.json": {
|
||||
"bytes": 5614,
|
||||
"sha256": "c3c8d7367d67c6f8b74ae620357de631f8e4a158940c4d019f71e897900a1c29"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p19-03/FROZEN_GAME_INPUT_PINS.json": {
|
||||
"bytes": 234047,
|
||||
"sha256": "6c778226a4cc6d0b0d682500759e7d4229c926a27bd2e247b00b9c3e5f1a2fb0"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p19-03/IMPLEMENTATION_REPORT.md": {
|
||||
"bytes": 16909,
|
||||
"sha256": "07ec5fd2a50c328ac01859807913315023e4e8b550f11457fc8345b4606573b9"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p19-03/REACHABILITY_TABLE.json": {
|
||||
"bytes": 1609120,
|
||||
"sha256": "9904095c19742bac2871ea62347543cfc6169771454bc7419fccc2ac1e95779c"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p19-03/REACHABILITY_TABLE.md": {
|
||||
"bytes": 133432,
|
||||
"sha256": "afb99eede4c8b4a9aca4bf3113c88acc02998f0aec3c8f89ebd6179042b4f887"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p19-03/TASK_SPEC.json": {
|
||||
"bytes": 8290,
|
||||
"sha256": "263a01b943d8056727335fb76977c010298e1c229077f8da76e48683ba2e89bb"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p19-03/check_reachability_table.py": {
|
||||
"bytes": 23419,
|
||||
"sha256": "d2b78349ee95dcdd30d2aa7d1f2be41d8d82abd14bbe73f4394e3227fd1a2b43"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p19-03/test_reachability_table.py": {
|
||||
"bytes": 14770,
|
||||
"sha256": "d6cc4ceb770e9e329d0f2087a7fdf973ef8470a6f98072f2c37118f9ed8c6901"
|
||||
}
|
||||
},
|
||||
"exact_184_21903_329parse_186ended_native_evidence_reuse_qualified": true,
|
||||
"actual_independent_whole_original_review": "565d4f21c12b451da2d5a7dd462d099b",
|
||||
"critical_high_medium": 0,
|
||||
"low": 3,
|
||||
"normal_candidate_integration_passed": true,
|
||||
"new_native_runs": 0,
|
||||
"normal_final_pending": true,
|
||||
"original_unit_credit": 0,
|
||||
"authority": "Existing explicit human main-update+commit/push authorization; no new SHA-specific human speech is claimed",
|
||||
"time_ns": 1792236328462308000
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"artifact_S": "806de25068bc423136063791afcea811d251ee1b",
|
||||
"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": "All source_refs keys exactly equal; no file set was narrowed or omitted. New doc-only audit helpers are outside this unchanged pre-existing selection algorithm.",
|
||||
"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"
|
||||
},
|
||||
"previous_actual_whole_backend_Opus_review": "ead8e74b9683404d8cf3d97bca118726",
|
||||
"P19_whole_original_acceptance": "pending actual independent semantic review of full original §6–7, all21cells and all source/status/owner/gap claims, then normalintegration/final",
|
||||
"time_ns": 1792234414270856000
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"artifact_S": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"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": "All source_refs keys exactly equal; no file set was narrowed or omitted. New doc-only audit helpers are outside this unchanged pre-existing selection algorithm.",
|
||||
"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"
|
||||
},
|
||||
"previous_actual_whole_backend_Opus_review": "ead8e74b9683404d8cf3d97bca118726",
|
||||
"P19_whole_original_acceptance": "pending actual independent semantic review of full original §6–7, all21cells and all source/status/owner/gap claims, then normalintegration/final",
|
||||
"time_ns": 1792235874948502000
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"artifact_S": "e0420d57a381a1644357f0590536e1d47c9bca9f",
|
||||
"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": "All source_refs keys exactly equal; no file set was narrowed or omitted. New doc-only audit helpers are outside this unchanged pre-existing selection algorithm.",
|
||||
"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"
|
||||
},
|
||||
"previous_actual_whole_backend_Opus_review": "ead8e74b9683404d8cf3d97bca118726",
|
||||
"P19_whole_original_acceptance": "pending actual independent semantic review of full original §6–7, all21cells and all source/status/owner/gap claims, then normalintegration/final",
|
||||
"time_ns": 1792233062748520000
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"task_id": "P19-03-TABLE",
|
||||
"commit": "1875b032b7f6a8525fb6ccec0574e21769943c95",
|
||||
"kind": "integration",
|
||||
"checks": [
|
||||
{
|
||||
"id": "p19-table",
|
||||
"exit_code": 1,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/3dff1e2121844313a07c39c5f8d57842",
|
||||
"passed": false
|
||||
},
|
||||
{
|
||||
"id": "p19-negative",
|
||||
"exit_code": 5,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/07a0ef3637d64512b6338f4b21dbfbad",
|
||||
"passed": false
|
||||
},
|
||||
{
|
||||
"id": "p19-source-binding",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/0d2aac5d24564ab6ab517bad0d3eca74",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": false
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"task_id": "P19-03-TABLE",
|
||||
"commit": "806de25068bc423136063791afcea811d251ee1b",
|
||||
"kind": "validation",
|
||||
"checks": [
|
||||
{
|
||||
"id": "p19-table",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/8d14038fd19c4277a2ab9d430bf2dbd0",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p19-negative",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/ad32d058245d45c6a0554ca92e0f46dd",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p19-source-binding",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/fec4a9beda95427d89b4050e07a771e9",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"task_id": "P19-03-TABLE",
|
||||
"commit": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"kind": "validation",
|
||||
"checks": [
|
||||
{
|
||||
"id": "p19-table",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/de99282b6b4049f4932747d96ae9acae",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p19-negative",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/471595c34bc84eab924953516ee8642d",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p19-source-binding",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/24589f23e8884d268bf37fb86b05ed46",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"task_id": "P19-03-TABLE",
|
||||
"commit": "e0420d57a381a1644357f0590536e1d47c9bca9f",
|
||||
"kind": "validation",
|
||||
"checks": [
|
||||
{
|
||||
"id": "p19-table",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/1c501211989843c190f0ee1eb6d4674b",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p19-negative",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/bc25ca3804ad4aa796ba7a2cf6d9a197",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p19-source-binding",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/3e07aaa43f84446aa0f375264e8d2d51",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"task_id": "P19-03-TABLE",
|
||||
"commit": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"kind": "final",
|
||||
"checks": [
|
||||
{
|
||||
"id": "p19-table",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/3e87d070e02045d3b10f1ac05a864fc7",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p19-negative",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/d73482521c484f1595cfae5b0abb0dba",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p19-source-binding",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/2a9d3970f4b8415cb784a4a556729219",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"task_id": "P19-03-TABLE",
|
||||
"commit": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"kind": "integration",
|
||||
"checks": [
|
||||
{
|
||||
"id": "p19-table",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/8387e3805df94f448d9eaefae379cb4c",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p19-negative",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/4c9f9b10eb3b497b960137c50f1053b6",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p19-source-binding",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/bc9693db775f42c99ee06d53ee169755",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
}
|
||||
+122
@@ -0,0 +1,122 @@
|
||||
{
|
||||
"contract": {
|
||||
"id": "P19-03-TABLE",
|
||||
"title": "P19-03 分岐の到達性:原7名×3ルートの全到達表と未制作欠損監査",
|
||||
"requirement_ids": [
|
||||
"P19-03"
|
||||
],
|
||||
"acceptance_ids": [
|
||||
"P19-03"
|
||||
],
|
||||
"spec_ref": "docs/plans/original-completion-2026-10-02/execution/p19-03/TASK_SPEC.json",
|
||||
"base_commit": "8ca9263fee1ec4374d97c01fda82b95e1df6a977",
|
||||
"worker": "codex",
|
||||
"allowed_paths": [
|
||||
"docs/plans/original-completion-2026-10-02/execution/p19-03/**"
|
||||
],
|
||||
"depends_on": [],
|
||||
"resource_locks": [
|
||||
"p19-route-reachability-audit"
|
||||
],
|
||||
"validation_ids": [
|
||||
"p19-table",
|
||||
"p19-negative",
|
||||
"p19-source-binding"
|
||||
],
|
||||
"max_repair_attempts": null,
|
||||
"spec_sha256": "3af3d9b931edc5449796662ad69bb6f67c80b48827a86565b1952931db68dd15"
|
||||
},
|
||||
"implementation_commit": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"integration_commit": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"owner": "このチャットのユーザーの既存明示指示「mainの更新を明示的に許可します」「コミットすべき内容をコミットして。その上でpushして」に基づく継続許可。原P19-03の全条件レビュー合格と実C/M検証に対象を拘束し、新しいSHA指定の人間発言は主張しない。全ゲーム/他原成果の完了を意味しない。",
|
||||
"evidence": [
|
||||
{
|
||||
"id": 1,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "validation",
|
||||
"commit_sha": "e0420d57a381a1644357f0590536e1d47c9bca9f",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/239449693d9a4172a4feee317c184b6d-validation.json",
|
||||
"passed": 0
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "validation",
|
||||
"commit_sha": "e0420d57a381a1644357f0590536e1d47c9bca9f",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/bf963f060c934169ae0ef366b28fcd3f-validation.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "review",
|
||||
"commit_sha": "e0420d57a381a1644357f0590536e1d47c9bca9f",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/d4e70e7f48f549b085692962f88531a8/result.json",
|
||||
"passed": 0
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "validation",
|
||||
"commit_sha": "806de25068bc423136063791afcea811d251ee1b",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/406baca45e5f41c294ea45d380c945fc-validation.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "review",
|
||||
"commit_sha": "806de25068bc423136063791afcea811d251ee1b",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/38eaaacdb31b4c76bcf982987816a391/result.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "integration",
|
||||
"commit_sha": "1875b032b7f6a8525fb6ccec0574e21769943c95",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/be88ab416157401d97718dc80f68fd51-integration.json",
|
||||
"passed": 0
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "validation",
|
||||
"commit_sha": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/c3ed2fa3df3145fa97a037c574b6e228-validation.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "root-preflight",
|
||||
"commit_sha": "7f9b63b0c281d57be4abec1c576e5abef273ca78",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/66089140e92a48b2bc96ea67ca597b58-root-preflight.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "review",
|
||||
"commit_sha": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/565d4f21c12b451da2d5a7dd462d099b/result.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "integration",
|
||||
"commit_sha": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/83e6d08d9ac245d6b35941ac165d3318-integration.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "final",
|
||||
"commit_sha": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/213aafebe6254110bf349c25b6036d92-final.json",
|
||||
"passed": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"from": "806de25068bc423136063791afcea811d251ee1b",
|
||||
"to": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"changed_top_level_keys": [
|
||||
"authority_snapshots"
|
||||
],
|
||||
"identical_top_level_keys": [
|
||||
"task_id",
|
||||
"schema_version",
|
||||
"identity_policy",
|
||||
"source_anchor",
|
||||
"common_rules",
|
||||
"cells",
|
||||
"catalog_evidence",
|
||||
"pending",
|
||||
"route_support",
|
||||
"acceptance",
|
||||
"accounting"
|
||||
],
|
||||
"current_keys": [
|
||||
"task_id",
|
||||
"schema_version",
|
||||
"identity_policy",
|
||||
"source_anchor",
|
||||
"common_rules",
|
||||
"cells",
|
||||
"authority_snapshots",
|
||||
"catalog_evidence",
|
||||
"pending",
|
||||
"route_support",
|
||||
"acceptance",
|
||||
"accounting"
|
||||
]
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"task_id": "P19-03-TABLE",
|
||||
"commit": "806de25068bc423136063791afcea811d251ee1b",
|
||||
"status": "pass",
|
||||
"summary": "I re-reviewed the whole P19-03 unit at 806de25, read-only. I checked it against BASELINE §6 (lines 114–135) and §7 (lines 136–161), the work_packages P19-03 record, the 61 B-7.x atomic records snapshotted in the JSON, the immutable TASK_SPEC, and the frozen game source. I did not edit or run anything.\n\n**Original acceptance (「7名×3ルートの到達表があり、未制作内容は欠損として残る。」)**\n- The acceptance text is identical to work_packages.json:16100.\n- The table has 21 cells: the seven original names × 純愛/NTR/堕落.\n - The names アンリ/フィーネ/トマリ/アメリア/リズ/ミミ/サツキ match BASELINE lines 118–124.\n - The IDs are the existing atomic keys AR.heroine.<key>.route.{love,ntr,corruption}.\n - No character or route was invented or substituted.\n- The catalog has only heroine_anri, and original_relationship_state.gd has no roster. So using the atomic keys, and leaving the six missing catalog IDs as explicit gaps, is honest and invents no IDs.\n- Each cell has all 8 categories. Common rules are kept separate from character-specific content.\n- Every character-specific item is recorded as 欠損 / 原本未定義 / D08 pending. Each carries a reason, an owner from the real work_packages deliverables (P18-02, P19-01, P19-02, P20-02, P26-01, P26-02), the citations [138–161] plus the character's own line, and natural_route_complete=false.\n- D05, D08, thresholds, rates and initial values all stay pending, with no invented numbers. The original's undefined per-character content therefore stays as gaps, which is what this audit acceptance allows. It is not game acceptance.\n\n**Previous findings from the e0420d5 review**\n1. MEDIUM, missing legacy evidence: fixed.\n - coassignment_attack, zero_break, love_actions, threshold_route_loss and legacy_event_ui now carry legacy_evidence: path, anchor 1b07b87, git blob OID, file SHA-256, line range and quoted text.\n - I checked every range against the real source:\n - relationship_service.gd: restore_shield 246–261, apply_shield_attack 264–312 (includes shield_broken), request_route_lock 315–340, confirm_route_lock 343–355.\n - simulation_runtime.gd: command registration 342–343 and the apply_shield_attack call at 6850.\n - event_service.gd: lines 1039 and 1047.\n - placement_risk_preview_service.gd: _contact_summary 536–565 and _shield_attack_candidates 619–640.\n - main.gd: 98–101 is EVENT_CHOICE_NAMES. The correction from 89–101 is right, because 89–97 are unrelated excavation labels.\n - These clauses all use the same rule: original status missing, classified legacy_not_original, with the P18-01 reason. The main.gd label constant is no longer credited as partial.\n2. LOW, independent tests: addressed.\n - validate_legacy reads the anchored blobs via git show / rev-parse and is enforced by --check.\n - The self-tests compute the blob OID independently with git hash-object, assert function and text markers, and reject evidence that is dropped, emptied, marked \"not implemented\", or has a stale OID or text, for every legacy clause.\n3. LOW, interruption cross-references: addressed. All 21 cells' interruption_cancellation entries now cite lines 148 and 153 (exact text plus baseline hash) and the legacy confirm_route_lock as legacy_not_original.\n4. LOW, hash labels: addressed in the checker constants, the checker output and the report.\n\n**Scope:** the diff touches only the 5 allowed files under execution/p19-03/. TASK_SPEC, the frozen pins, the selection record, the original registers and the game files are unchanged.\n\n**Validation:** all 3 registered checks ran on 806de25 and exited 0.\n- p19-table: --check output binds actual_commit 806de25, 1368 selected files, file_equality true.\n- p19-negative: 12 tests OK.\n- p19-source-binding: passed.\n\nThe earlier failed invocations were unexpanded `{worktree}` placeholders that never opened a script; no failure was turned into a pass.\n\nOnly low-severity notes remain, and they do not block the audit acceptance. Integration/final and the other gates are still required before the count moves from 14 to 15; I give no credit before those.",
|
||||
"acceptance_ids": [
|
||||
"P19-03"
|
||||
],
|
||||
"findings": [
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Most data-level negative tests still compare the document against the same expected() canonical. The independent semantic checks name only three markers: restore_shield, shield_broken and EXCLUSIVE_LOCKED. Citations such as the preview service's contact/shield-candidate lines, and the 6850, 1039 and 1047 call sites, are checked only for text and blob equality, not for a function-name marker. Consider asserting a marker for every legacy entry."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "The run log in IMPLEMENTATION_REPORT.md reports source binding actual_commit=e0420d5. That comes from the pre-commit local run. The Runner output correctly binds 806de25, but the report should mark that line as the pre-submission local value."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "The snapshot_container evidence range (relationship_service.gd 423–479) starts mid-function and cuts off inside restore_snapshot. It is accurate as evidence, but a range aligned to function boundaries would be clearer for downstream owners (P18-01, P19-02)."
|
||||
}
|
||||
]
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"task_id": "P19-03-TABLE",
|
||||
"commit": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"status": "pass",
|
||||
"summary": "I re-reviewed the whole original P19-03 unit at 903a2c5, read-only. I did not edit or run anything.\n\n**Original acceptance (「7名×3ルートの到達表があり、未制作内容は欠損として残る。」)**\n- The acceptance text is identical to work_packages.json:9021.\n- I read BASELINE §6 (114–135) and §7 (136–161) directly. The 7 names in REACHABILITY_TABLE.md (アンリ/フィーネ/トマリ/アメリア/リズ/ミミ/サツキ) match lines 118–124 in order. Each cell cites its own character line (118…124).\n- The 21 cell IDs map to existing atomic records AR.heroine.<key>.route.{love,ntr,corruption}. I checked anri.route.love directly: B-7.1, entity key and original_name match.\n- Every cell has all 8 categories: entry events, state conditions, duel win/loss, route/selection effects, interruption/cancellation, save, history/marks, current reachability.\n- Common rules are kept separate from per-character content. All 23 common rules cite exact original line text plus the baseline hash, and the quoted text matches the BASELINE file.\n- Every per-character item is recorded as 欠損 / 原本未定義 / D08 pending, with a reason, an owner and natural_route_complete=false. The owners are P18-02, P19-01, P19-02, P20-02, P26-01 and P26-02, and they match those deliverables' titles and work in work_packages.\n- D05, D08, thresholds, rates and initial values all stay pending/null, with no invented numbers.\n\n**Checked against the actual game source**\n- data/characters/mvp_unique_characters.json contains only heroine_anri and rival_rai. None of the other six names appear anywhere under data/.\n- original_relationship_state.gd only validates and holds generic fields; it has no roster. So \"implemented\" is limited to that narrow storage, and \"partial\" to the affection/shield-max invariant, the snapshot container and the identity check.\n- There is no duel, history or pregnancy code anywhere in autoload/scripts/scenes. lust and netorare appear only in state validation, never in updates. The \"missing\" statuses are honest.\n- Legacy shield, route-lock and UI-label code is cited with blob OIDs and labelled legacy_not_original, never credited as an original route. Backend support is not called a completed natural route. Using atomic keys while leaving the six missing catalog IDs as explicit gaps is the honest choice and invents nothing.\n\n**Repair 2 (projection)**\n- PACKAGE_MUTABLE and UNIT_MUTABLE allow only progress, reference, evidence and time fields that already exist in BASE.\n- Every other field, including id/title/work/acceptance/depends_on/requirement_ids/decisions/owner_roles, is compared exactly against the BASE 8ca9263 projection. Type is preserved via json.dumps, so True does not compare equal to 1.\n- atomic_requirements.json, decisions.json and the selection record stay byte-exact against BASE.\n- test_every_register_definition_field changes or removes each distinct definition key, adds unknown keys, and alters list counts and order. D05 and D08 flipping to approved is rejected, and the real main 6e17cae and candidate 1875b03 registers are accepted as positive cases.\n- The fact comparison shows only authority_snapshots changed. I confirmed the 21 cells, common rules, statuses, owners and gaps are unchanged from the previously passed 806de25.\n\n**Scope and validation**\n- The diff touches only the 5 allowed files under execution/p19-03/.\n- All 3 registered checks ran on 903a2c5 and exited 0. p19-table binds actual_commit 903a2c5, 1368 selected files, file_equality true. p19-negative ran 16 tests, OK.\n- The Root non-formal preflight on S plus latest main (7f9b63b) also passed all 3 checks. It is not normal integration or final.\n- The earlier failed integration (1875b03) was recorded honestly and fixed without changing any original definition. No test was deleted or disabled.\n\n**Open items**\n- D08 and per-character content, P18–P20/P26 gameplay, and global Windows/game acceptance all stay open.\n- No credit before normal prepare-integration/final and the ledger update. Only then can the count move from 14/88 to 15/88.",
|
||||
"acceptance_ids": [
|
||||
"P19-03"
|
||||
],
|
||||
"findings": [
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "test_actual_main_and_candidate_metadata names commits by abbreviated SHA (6e17cae, 1875b03). The test only works where those objects exist. That holds in the current repository, but full SHAs, or a clear explanation of the dependency, would make it more reproducible."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Three low notes from the previous review (806de25) are still deferred: (1) per-entry function-name markers for every legacy citation, (2) the label on the Repair 1 local actual_commit line, (3) aligning the snapshot_container range to function boundaries. This deferral is allowed. Item (2) is already addressed by the 「過去のローカル確認」 label."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Most data-level negative tests still compare the document against the same expected() canonical. The checker's hardcoded facts (statuses, owners) are therefore protected from tampering by self-comparison, not proven correct by the tests. I separately confirmed in the actual source and work_packages that the classifications and owners are correct."
|
||||
}
|
||||
]
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"task_id": "P19-03-TABLE",
|
||||
"commit": "e0420d57a381a1644357f0590536e1d47c9bca9f",
|
||||
"status": "changes_requested",
|
||||
"summary": "Independent read-only whole-unit review of P19-03 at e0420d5 against BASELINE §6 (lines 114–135) and §7 (136–161), the B-7.x atomic records, work_packages and the immutable TASK_SPEC.\n\nWhat passes:\n- Scope: the diff adds only the 5 required files under execution/p19-03/**. TASK_SPEC, pins, selection record, original registers and game files are unchanged.\n- Roster and routes: exactly 7 original names (アンリ, フィーネ, トマリ, アメリア, リズ, ミミ, サツキ, matching BASELINE lines 118–124 and atomic entity keys AR.heroine.<key>.route.{love,ntr,corruption}) × 純愛/NTR/堕落 gives 21 cells. I confirmed the catalog has only heroine_anri/rival_rai and that original_relationship_state.gd has no roster, so using atomic keys and keeping the other six as gaps is honest and invents no IDs.\n- Gaps: every cell keeps 8 categories, separates common rules from character-specific content, marks character-specific content 欠損/D08 pending with a plausible owner (P18-02/P19-01/P19-02/P20-02/P26-01/P26-02), and sets natural_route_complete=false. Thresholds, rates, initial values and D05/D08 stay pending. Original citations quote exact line text with the baseline hash. Implemented/partial evidence carries path+SHA, bound to anchor 1b07b87 by blob equality.\n- Validation: the 3 registered checks ran on the same commit and exit 0 (10 self-tests OK; source binding 1368 files, file_equality true). The 3 initial exit-2 runs were literal `{worktree}` placeholders that never opened a script; no failure was converted to PASS.\n- Under the original acceptance wording the table structurally exists and missing content stays as gaps.\n\nWhat fails:\n- The 'audit existing support' requirement is not met, and several statuses are inaccurate. The audit marks coassignment_attack, zero_break, love_actions (shield recovery) and threshold_route_loss as \"not implemented\" with no source path. But the frozen game source has live legacy mechanisms for exactly these clauses:\n - relationship_service.gd: apply_shield_attack (reports shield_broken), restore_shield, request_route_lock/confirm_route_lock (irreversible route lock).\n - simulation_runtime.gd registers request_route_lock/confirm_route_lock as commands; line 6850 calls apply_shield_attack.\n - event_service.gd lines 1039/1047 apply these as event effects.\n - placement_risk_preview_service.gd computes heroine/rival contact intervals and _shield_attack_candidates.\n- Meanwhile a legacy UI label constant in main.gd is credited as 'partial'. Treating legacy support inconsistently undermines the audit's accuracy for downstream owners.\n\nThe legacy mechanisms need not count as original support (P18-01 forbids one-to-one conversion), but they must be listed with path+SHA and a stated reason for not crediting them. The 'not implemented' entries for the affected clauses are wrong as written.",
|
||||
"acceptance_ids": [
|
||||
"P19-03"
|
||||
],
|
||||
"findings": [
|
||||
{
|
||||
"severity": "medium",
|
||||
"message": "Existing-support audit is incomplete and inconsistent. coassignment_attack, zero_break, love_actions (shield recovery) and threshold_route_loss are recorded as implementation \"not implemented\", but frozen source at anchor 1b07b87 has live legacy mechanisms for them: scripts/relationship/relationship_service.gd apply_shield_attack (264–312, reports shield_broken), restore_shield (246–261), request_route_lock/confirm_route_lock (315–355); autoload/simulation_runtime.gd registers request_route_lock/confirm_route_lock as commands (342–343) and calls apply_shield_attack (6850); scripts/events/event_service.gd applies them as event effects (1039, 1047); scripts/relationship/placement_risk_preview_service.gd computes heroine/rival contact and _shield_attack_candidates (536, 619). Meanwhile a legacy main.gd label constant (89–101) is credited as 'partial'. Fix: record these legacy mechanisms per clause with exact path+SHA+lines at the anchor. Classify each as partial/legacy-not-original (or keep missing for the original model) with an explicit reason, e.g. P18-01 forbids one-to-one conversion and the numbers/daily limits are not approved originals. Keep owners and gaps unchanged. Regenerate the MD and add a self-test that rejects dropping this evidence."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Most data-level negative tests (wrong character/route, owner, status, stale text) mutate the document and compare it to a canonical built by the same expected() function. They only prove equality with hard-coded facts, not that those facts are correct. Source/baseline/blob/pin corruption tests are real. Consider adding independent assertions, e.g. that every 'missing' item's semantic claim is cross-checked against grep-able absence or presence in the cited source files, so mislabeled statuses like the one above are caught."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "interruption_cancellation maps only §6.5 departure (line 135). The route-terminating clauses — duel loss 'ヒロインを即座に強奪' (153) and '純愛ルート完全消失' (148) — and legacy route_lock irreversibility are not cross-referenced as interruption/cancellation authorities. The character-specific gap covers it, but the common enumeration of interruption handling required by the original work is thin."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "The checker's SPEC_HASH (263a01b9…) is the TASK_SPEC.json file-byte hash. It differs from the contract spec_sha256 (3af3d9b9…), presumably because the contract hashes a different serialization. The runner pass confirms the file is unchanged from base, but the report should say which representation each hash covers."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
{
|
||||
"id": "P19-03-TABLE",
|
||||
"original_plan_id": "P19-03",
|
||||
"title": "分岐の到達性",
|
||||
"original_work": "人物ごとの3ルートに必要なイベント・条件・中断処理を列挙する。",
|
||||
"original_acceptance": "7名×3ルートの到達表があり、未制作内容は欠損として残る。",
|
||||
"original_denominator": {
|
||||
"packages": 30,
|
||||
"units": 88,
|
||||
"completed_at_start": 14,
|
||||
"partial_credit": false
|
||||
},
|
||||
"whole_original_unit_review_required": true,
|
||||
"scope": "Whole original documentation/audit unit P19-03. Neutral non-graphic state/event IDs and exact source citations only; never create intimate content, narrative events, per-character mechanics or product numbers. Does not implement or accept route gameplay, content, endings, Windows or the whole game.",
|
||||
"authority": [
|
||||
{
|
||||
"path": "docs/traceability/original/BASELINE.txt",
|
||||
"sha256": "75e4bdbdeb379c9269553f0c776bdb9cc96e01f2d6aa5ca650d132c63a8aeb1a",
|
||||
"sections": "Original §6 seven-character catalog; §7 lines136–161 three routes and relation/duel/action/history rules. Read actual full relevant lines, do not trust line numbers without matching text."
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/work_packages.json",
|
||||
"unit": "P19-03",
|
||||
"acceptance_exact": true
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/atomic_requirements.json",
|
||||
"requirements": "B-7.1 through B-7.6 and relevant character/route clauses; inspect complete selected entries."
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/decisions.json",
|
||||
"rule": "Only approved decisions may fill specifications. D08 pending cells remain 原本未定義/D08 pending 欠損."
|
||||
}
|
||||
],
|
||||
"actual_opus_selection": "dc342e4d69154660bef7e688a70fd783",
|
||||
"frozen_game_input_pins_sha256": "6c778226a4cc6d0b0d682500759e7d4229c926a27bd2e247b00b9c3e5f1a2fb0",
|
||||
"audit_source_anchor": "1b07b87d3736e777932315a4bdde8b70cbf9cb23",
|
||||
"implementation_requirements": [
|
||||
"Build REACHABILITY_TABLE.json plus deterministic REACHABILITY_TABLE.md with exactly7 canonical character IDs/names from original §6, existing catalog and scripts/relationship/original_relationship_state.gd, crossed with3 original routes 純愛/NTR/堕落. No invented or substituted character/route.",
|
||||
"Every one of21 cells enumerates applicable entry/required events, source-defined state conditions, duel win/loss and route/selection effects, interruption/cancellation and save handling, history/marks and current reachability. Distinguish common baseline rules from character-specific content undefined by the original.",
|
||||
"Every listed event/condition/handling item carries exact original line range+text/hash authority, concrete implementation status implemented/partial/missing, exact existing source path+SHA at the audited source anchor (or explicit not implemented with no fake path), and owning remaining original deliverable. Do not call backend model support a completed natural route.",
|
||||
"Unproduced or undefined character-specific events/conditions/interruption/save/history content remains explicitly 欠損 with reason and owning remaining original item. Missing content is allowed by the unchanged original audit acceptance; it is never game acceptance. Preserve unknown numeric thresholds/rates/initial values as pending; use neutral abstract state IDs only.",
|
||||
"Implement stdlib check_reachability_table.py and test_reachability_table.py under this documentation directory. This placement is inside actual Opus proposed docs/** scope and preserves the exact1368 selected native-game input set. Do not add new files under tools, game scripts, data, tests, marker registry or other game-selected paths.",
|
||||
"Checker verifies exact7×3 unique complete cell set, canonical IDs, original pinned source+line text, no uncited item, exact current source SHA+anchor binding, valid status/owner and explicit gaps, no fabricated thresholds/unsupported completion, and byte-for-byte deterministic Markdown regeneration. --check must be read-only; optional --write may regenerate view during implementation.",
|
||||
"Source binding enforces complete frozen selected-source map, no missing/new/changed selected files, marker/policy/engine/roster/parse identity and baseline hash. Validate FROZEN_GAME_INPUT_PINS.json against this immutable spec SHA field. Code source evidence may cite published audited anchor; checker output binds actual current commit and proves exact file equality. Do not fabricate a future self-containing commit SHA.",
|
||||
"Cross-cutting UI/Runtime/save/Windows applicability is explicit: audit existing support and missing mechanisms per route; this documentation-only unit introduces no product OS behavior, so audit-unit native GUI/Windows execution is not applicable. Global/other-unit Windows and game acceptance remain open.",
|
||||
"Self-tests meaningfully reject missing/duplicate cell, wrong character/route, missing category/citation, stale source/baseline text/hash, invented numeric threshold, missing content falsely marked complete, wrong owning deliverable/status, malformed JSON/types, or Markdown drift; include valid implemented/partial/missing controls. No test-count padding.",
|
||||
"Reuse existing completed P13-03 content-audit checker pattern as guidance. Preserve all current game files, original text, decisions, frozen pins, immutable TASK_SPEC and selection record. Do not revise acceptance or invent D05/D08 answers.",
|
||||
"Provide concise implementation report with all requirements mapped to files/checks, actual invocations/results and remaining parent/game gaps. No worker claim or exit0 substitutes for independent whole-unit review and normal gates."
|
||||
],
|
||||
"required_outputs": [
|
||||
"REACHABILITY_TABLE.json",
|
||||
"REACHABILITY_TABLE.md",
|
||||
"check_reachability_table.py",
|
||||
"test_reachability_table.py",
|
||||
"IMPLEMENTATION_REPORT.md"
|
||||
],
|
||||
"validation_interface": [
|
||||
{
|
||||
"id": "p19-table",
|
||||
"argv": [
|
||||
"{python}",
|
||||
"{worktree}/docs/plans/original-completion-2026-10-02/execution/p19-03/check_reachability_table.py",
|
||||
"--project-root",
|
||||
"{worktree}",
|
||||
"--check"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "p19-negative",
|
||||
"argv": [
|
||||
"{python}",
|
||||
"{worktree}/docs/plans/original-completion-2026-10-02/execution/p19-03/test_reachability_table.py",
|
||||
"--project-root",
|
||||
"{worktree}"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "p19-source-binding",
|
||||
"argv": [
|
||||
"{python}",
|
||||
"{worktree}/docs/plans/original-completion-2026-10-02/execution/p19-03/check_reachability_table.py",
|
||||
"--project-root",
|
||||
"{worktree}",
|
||||
"--source-binding-only"
|
||||
]
|
||||
}
|
||||
],
|
||||
"workflow": [
|
||||
"Register fixed original acceptance P19-03 once; actual Opus confirms next registered run and chooses Sol6.1 default/Astra only justified. One managed worker, no duplicate task.",
|
||||
"Worker local static+checker+self-tests only; do not run native full during implementation.",
|
||||
"Required full native evidence may be reused only after independent exact candidate input equality against frozen C/S source/settings/markers/policy/engine/test inputs/roster/applicability. Doc helpers live outside selected source set; no narrowed equality definition. If equality fails do not claim reuse or launch an uncontrolled full.",
|
||||
"Separate actual Opus whole-original P19-03 review against full original §6–7 and exact acceptance. Reviewer decides whether explicit D08/content gaps satisfy audit acceptance; fail honestly if not, never redefine it.",
|
||||
"Normal prepare-integration, actual C/M exact equality, existing real main permission only (no fabricated new human speech), normal final, ledger+push. Only then original P19-03 may add1 to14/88."
|
||||
],
|
||||
"pending_not_waived": [
|
||||
"P04 existing D05 owner choices",
|
||||
"D08 production chapter/route/content scope",
|
||||
"P19-01/02 Runtime and normal route gameplay",
|
||||
"P20/P26 content/endings/encyclopedia",
|
||||
"P13 four low production followups",
|
||||
"Global same-Windows acceptance and held gestures remain open"
|
||||
],
|
||||
"model_proposal": {
|
||||
"codex_model": "gpt-6.1-sol",
|
||||
"actual_opus_decision": "dc342e4d69154660bef7e688a70fd783"
|
||||
}
|
||||
}
|
||||
+367
@@ -0,0 +1,367 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Read-only, stdlib P19-03 documentation validator; never accepts gameplay."""
|
||||
import argparse
|
||||
import hashlib
|
||||
import json
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
OUT = 'docs/plans/original-completion-2026-10-02/execution/p19-03/'
|
||||
PLAN = 'docs/plans/original-completion-2026-10-02/'
|
||||
BASELINE = 'docs/traceability/original/BASELINE.txt'
|
||||
ANCHOR = '1b07b87d3736e777932315a4bdde8b70cbf9cb23'
|
||||
BASE = '8ca9263fee1ec4374d97c01fda82b95e1df6a977'
|
||||
BASE_HASH = '75e4bdbdeb379c9269553f0c776bdb9cc96e01f2d6aa5ca650d132c63a8aeb1a'
|
||||
SPEC_FILE_BYTES_SHA256 = '263a01b943d8056727335fb76977c010298e1c229077f8da76e48683ba2e89bb'
|
||||
# Proof: build/owner-handoff/p19-review-r01/SPEC_HASH_REPRESENTATIONS.json
|
||||
# Both hashes describe the same unchanged TASK_SPEC.json.
|
||||
RUNNER_CONTRACT_SPEC_SHA256 = '3af3d9b931edc5449796662ad69bb6f67c80b48827a86565b1952931db68dd15'
|
||||
PINS_HASH = '6c778226a4cc6d0b0d682500759e7d4229c926a27bd2e247b00b9c3e5f1a2fb0'
|
||||
ROUTES = {'love': '純愛', 'ntr': 'NTR', 'corruption': '堕落'}
|
||||
PEOPLE = [('anri', 'アンリ'), ('fine', 'フィーネ'), ('tomari', 'トマリ'),
|
||||
('amelia', 'アメリア'), ('liz', 'リズ'), ('mimi', 'ミミ'), ('satsuki', 'サツキ')]
|
||||
CATEGORIES = ('entry_required_events', 'state_conditions', 'duel_effects',
|
||||
'route_selection_effects', 'interruption_cancellation', 'save_handling',
|
||||
'history_marks', 'current_reachability')
|
||||
STATE = 'scripts/relationship/original_relationship_state.gd'
|
||||
SERVICE = 'scripts/relationship/relationship_service.gd'
|
||||
RUNTIME = 'autoload/simulation_runtime.gd'
|
||||
CATALOG = 'data/characters/mvp_unique_characters.json'
|
||||
|
||||
EVENT = 'scripts/events/event_service.gd'
|
||||
PREVIEW = 'scripts/relationship/placement_risk_preview_service.gd'
|
||||
LEGACY_REASON = 'P18-01 forbids one-to-one conversion; legacy numbers/daily limits are not approved originals.'
|
||||
LEGACY_RANGES = {
|
||||
'coassignment_attack': [(SERVICE,264,312),(RUNTIME,6850,6850),(EVENT,1039,1039),(PREVIEW,536,565),(PREVIEW,619,640)],
|
||||
'zero_break': [(SERVICE,264,312),(RUNTIME,6850,6850),(EVENT,1039,1039)],
|
||||
'love_actions': [(SERVICE,246,261)],
|
||||
'threshold_route_loss': [(SERVICE,315,340),(SERVICE,343,355),(RUNTIME,342,343),(EVENT,1047,1047)],
|
||||
'legacy_event_ui': [('scenes/main/main.gd',98,101)],
|
||||
}
|
||||
|
||||
|
||||
def validate_legacy(root, document):
|
||||
rules = {r['id']: r for r in document['common_rules']}
|
||||
for identity, ranges in LEGACY_RANGES.items():
|
||||
rule = rules[identity]
|
||||
require(rule['status'] == 'missing' and rule['legacy_classification'] == 'legacy_not_original',
|
||||
'legacy/original classification')
|
||||
require(rule['implementation'] == 'original conformance missing; see legacy_evidence'
|
||||
and rule['legacy_reason'] == LEGACY_REASON, 'unqualified legacy absence')
|
||||
entries = rule.get('legacy_evidence')
|
||||
require(type(entries) is list and len(entries) == len(ranges), 'missing legacy evidence')
|
||||
for entry, (path, start, end) in zip(entries, ranges):
|
||||
data = blob(root, ANCHOR, path)
|
||||
oid = subprocess.check_output(['git','rev-parse',ANCHOR+':'+path],cwd=root).decode().strip()
|
||||
require(entry == {'path':path,'anchor':ANCHOR,'git_blob_oid':oid,
|
||||
'sha256':sha(data),'lines':[start,end],
|
||||
'text':'\n'.join(data.decode().splitlines()[start-1:end])}, 'legacy text/blob/range')
|
||||
require(data == (root/path).read_bytes(), 'legacy current source mismatch')
|
||||
|
||||
|
||||
def sha(data):
|
||||
return hashlib.sha256(data).hexdigest()
|
||||
|
||||
|
||||
def require(value, message):
|
||||
if not value:
|
||||
raise ValueError(message)
|
||||
|
||||
|
||||
def decode(data):
|
||||
def unique(pairs):
|
||||
result = {}
|
||||
for k, v in pairs:
|
||||
require(k not in result, 'duplicate JSON key: ' + k)
|
||||
result[k] = v
|
||||
return result
|
||||
return json.loads(data, object_pairs_hook=unique,
|
||||
parse_constant=lambda s: (_ for _ in ()).throw(ValueError(s)))
|
||||
|
||||
|
||||
def blob(root, commit, path):
|
||||
return subprocess.check_output(['git', 'show', commit + ':' + path], cwd=root)
|
||||
|
||||
|
||||
def selection(root):
|
||||
paths = [p for folder in ('autoload', 'scripts', 'scenes', 'data', 'tests', 'assets', 'tools')
|
||||
for p in (root / folder).rglob('*')
|
||||
if p.is_file() and p.name != '.DS_Store' and '__pycache__' not in p.parts]
|
||||
paths += [root / p for p in ('project.godot', 'export_presets.cfg', 'Makefile', 'AGENTS.md')]
|
||||
require(all(not p.is_symlink() for p in paths), 'selected source aliases refused')
|
||||
return {p.relative_to(root).as_posix(): {'bytes': p.stat().st_size, 'sha256': sha(p.read_bytes())}
|
||||
for p in sorted(paths)}
|
||||
|
||||
|
||||
def binding(root):
|
||||
raw = lambda p: (root / p).read_bytes()
|
||||
require(sha(raw(OUT + 'TASK_SPEC.json')) == SPEC_FILE_BYTES_SHA256, 'immutable spec changed')
|
||||
spec = decode(raw(OUT + 'TASK_SPEC.json'))
|
||||
require(sha(raw(OUT + 'FROZEN_GAME_INPUT_PINS.json')) == spec['frozen_game_input_pins_sha256'] == PINS_HASH,
|
||||
'frozen pins SHA differs from immutable spec')
|
||||
pins = decode(raw(OUT + 'FROZEN_GAME_INPUT_PINS.json'))
|
||||
require(pins['audited_game_source_anchor_commit'] == spec['audit_source_anchor'] == ANCHOR, 'anchor identity')
|
||||
actual = selection(root)
|
||||
require(actual == pins['source_files'], 'full selected-source map: missing/new/changed file')
|
||||
for key in ('marker_contract', 'policy', 'engine'):
|
||||
require(sha(Path(pins[key + '_path']).read_bytes() if key == 'engine' else raw(pins[key + '_path']))
|
||||
== pins[key + '_sha256'], key + ' identity')
|
||||
require(sha(raw(BASELINE)) == pins['baseline_sha256'] == BASE_HASH, 'baseline hash')
|
||||
require(len(raw(BASELINE)) == pins['baseline_bytes'], 'baseline bytes')
|
||||
roster = ['tests/run_tests.gd'] + sorted(p.relative_to(root).as_posix()
|
||||
for p in (root / 'tests').rglob('test*.gd') if 'export' not in p.relative_to(root).parts
|
||||
and p.relative_to(root).as_posix() != 'tests/s0/test_kernel_and_save.gd')
|
||||
require(roster == pins['roster'], 'roster identity')
|
||||
require(sum(p.endswith('.gd') for p in actual) == pins['parse_files'], 'parse selection identity')
|
||||
# Audit evidence is bound to published blobs, never a future self-containing commit.
|
||||
for p in (STATE, SERVICE, RUNTIME, CATALOG):
|
||||
require(raw(p) == blob(root, ANCHOR, p), 'stale audited source: ' + p)
|
||||
return {'actual_commit': subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=root).decode().strip(),
|
||||
'selected_files': len(actual), 'anchor': ANCHOR, 'file_equality': True,
|
||||
'native_evidence_reuse_accepted': False,
|
||||
'TASK_SPEC_file_bytes_sha256': SPEC_FILE_BYTES_SHA256,
|
||||
'Runner_git_show_stripped_UTF8_contract_spec_sha256': RUNNER_CONTRACT_SPEC_SHA256}
|
||||
|
||||
|
||||
# Exact key-level BASE -> 6e17cae/1875b03 diff; no prefix/wildcard exclusions.
|
||||
PACKAGE_MUTABLE = frozenset(("state", "legacy_state", "current_summary", "updated_at_jst"))
|
||||
UNIT_MUTABLE = frozenset((
|
||||
"state", "current_execution", "remaining_gaps", "updated_at_jst",
|
||||
"submitted_commit", "current_summary", "progress_summary", "evidence",
|
||||
# Normal final/source references: these names already occur in BASE units.
|
||||
"completed_at_jst", "implementation_commit", "integrated_commit",
|
||||
"integration_commit", "normal_integration_candidate",
|
||||
))
|
||||
|
||||
|
||||
def definition_projection(register):
|
||||
require(type(register) is list, "package register must be a list")
|
||||
projected = []
|
||||
for package in register:
|
||||
require(type(package) is dict, "package must be an object")
|
||||
record = {k: v for k, v in package.items() if k not in PACKAGE_MUTABLE}
|
||||
units = record.get("remaining_deliverables")
|
||||
require(type(units) is list, "deliverables must be a list")
|
||||
require(all(type(unit) is dict for unit in units), "unit must be an object")
|
||||
record["remaining_deliverables"] = [
|
||||
{k: v for k, v in unit.items() if k not in UNIT_MUTABLE} for unit in units]
|
||||
projected.append(record)
|
||||
return projected
|
||||
|
||||
|
||||
def validate_register(root, name, current):
|
||||
anchored = blob(root, BASE, PLAN + name)
|
||||
if name == "work_packages.json":
|
||||
# JSON serialization preserves types (True must not compare equal to 1).
|
||||
encode = lambda value: json.dumps(definition_projection(decode(value)),
|
||||
ensure_ascii=False, sort_keys=True)
|
||||
require(encode(current) == encode(anchored),
|
||||
"original definition changed: " + name)
|
||||
else:
|
||||
require(current == anchored, "original register changed: " + name)
|
||||
return anchored
|
||||
|
||||
|
||||
def expected(root):
|
||||
raw = lambda p: (root / p).read_bytes()
|
||||
require(sha(raw(BASELINE)) == BASE_HASH, 'baseline changed')
|
||||
anchored = {name: validate_register(root, name, raw(PLAN + name))
|
||||
for name in ('atomic_requirements.json', 'work_packages.json', 'decisions.json')}
|
||||
require(raw(OUT + 'ACTUAL_OPUS_NEXT_ORIGINAL_UNIT_SELECTION.json') ==
|
||||
blob(root, BASE, OUT + 'ACTUAL_OPUS_NEXT_ORIGINAL_UNIT_SELECTION.json'), 'selection record changed')
|
||||
lines = raw(BASELINE).decode().splitlines()
|
||||
def cite(start, end=None):
|
||||
end = end or start
|
||||
return {'path': BASELINE, 'lines': [start, end],
|
||||
'text': '\n'.join(lines[start - 1:end]), 'baseline_sha256': BASE_HASH}
|
||||
def evidence(path, start, end):
|
||||
data = blob(root, ANCHOR, path)
|
||||
require(data == raw(path), 'stale source ' + path)
|
||||
return {'path': path, 'sha256': sha(data), 'anchor': ANCHOR,
|
||||
'lines': [start, end], 'text': '\n'.join(data.decode().splitlines()[start - 1:end])}
|
||||
def item(identity, start, end, note, owner, status='missing', source=None):
|
||||
return {'id': identity, 'authority': cite(start, end), 'status': status,
|
||||
'implementation': source or 'original conformance missing', 'owner': owner,
|
||||
'observation': note, 'gap': None if status == 'implemented' else '欠損: ' + note}
|
||||
# Only narrow storage facts are implemented; simulation/route completion never follows.
|
||||
rules = [
|
||||
item('state_fields', 138, 143, '原本3値と盾の明示値の検証・保持のみ。初期値と更新方針は未定。',
|
||||
'P18-01', 'implemented', evidence(STATE, 4, 34)),
|
||||
item('affection_max_invariant', 140, 140, '入力時の最大値一致検証のみ。通常操作の回復・更新は欠損。',
|
||||
'P18-01', 'partial', evidence(STATE, 20, 30)),
|
||||
item('snapshot_container', 138, 143, '専用状態と旧値の分離保存・復元。人物別ルート進行保存を意味しない。',
|
||||
'P18-01', 'partial', evidence(SERVICE, 423, 479)),
|
||||
item('identity_registration', 138, 138, 'Runtimeは登録済み人物・相互対応を検証。既存カタログのヒロインはアンリのみ。通常ルート入口ではない。',
|
||||
'P19-01', 'partial', evidence(RUNTIME, 6791, 6812)),
|
||||
item('legacy_event_ui', 154, 157, '既存UIには汎用関係イベントの確認/保留ラベルがある。原本の行動・決闘選択・自然ルート到達は欠損。',
|
||||
'P19-01', 'partial', evidence('scenes/main/main.gd', 98, 101)),
|
||||
]
|
||||
clauses = [
|
||||
('defense_reduction', 141, 141, 'P18-02'), ('post_break_metric', 142, 143, 'P18-02'),
|
||||
('barrier_block', 143, 143, 'P18-02'), ('coassignment_attack', 145, 145, 'P18-02'),
|
||||
('zero_break', 146, 146, 'P18-02'), ('contact_after_break', 147, 147, 'P18-02'),
|
||||
('threshold_route_loss', 148, 148, 'P18-03'), ('duel_types', 150, 151, 'P19-01'),
|
||||
('duel_win', 152, 152, 'P19-01'), ('duel_loss', 153, 153, 'P19-01'),
|
||||
('love_actions', 155, 155, 'P19-01'), ('ntr_actions', 156, 156, 'P19-01'),
|
||||
('corruption_actions', 157, 157, 'P19-01'), ('history_fields', 159, 159, 'P19-02'),
|
||||
('history_cycle_parentage', 160, 160, 'P19-02'), ('portrait_marks', 161, 161, 'P26-02'),
|
||||
('route_skills', 132, 132, 'P20-01'), ('departure', 135, 135, 'P19-02')]
|
||||
for identity, start, end, owner in clauses:
|
||||
rules.append(item(identity, start, end,
|
||||
'原本の共通要求。専用原本モデルにはこの更新・表示の実装なし。旧汎用モデルの数値やルートを代用しない。', owner))
|
||||
for rule in rules:
|
||||
if rule['id'] in LEGACY_RANGES:
|
||||
rule.update(status='missing', implementation='original conformance missing; see legacy_evidence',
|
||||
legacy_classification='legacy_not_original', legacy_reason=LEGACY_REASON)
|
||||
rule['gap'] = '欠損: ' + rule['observation'] + ' ' + LEGACY_REASON
|
||||
rule['legacy_evidence'] = []
|
||||
for path, start, end in LEGACY_RANGES[rule['id']]:
|
||||
entry = evidence(path, start, end)
|
||||
entry['git_blob_oid'] = subprocess.check_output(
|
||||
['git','rev-parse',ANCHOR+':'+path],cwd=root).decode().strip()
|
||||
rule['legacy_evidence'].append(entry)
|
||||
# Read complete selected atomic records, not only their condition strings.
|
||||
atoms = decode(anchored['atomic_requirements.json'])['requirements']
|
||||
atoms = [x for x in atoms if set(x.get('source_group_ids', [])) & {'B-7.' + str(i) for i in range(1, 7)}]
|
||||
owners = {x['id'] for p in decode(anchored['work_packages.json']) for x in p.get('remaining_deliverables', [])}
|
||||
require(all(r['owner'] in owners for r in rules), 'unknown original owner')
|
||||
for key, name in PEOPLE:
|
||||
for route in ROUTES:
|
||||
require(any(x['id'] == 'AR.heroine.' + key + '.route.' + route and
|
||||
x['entity'] == {'kind': 'heroine', 'key': key, 'original_name': name} for x in atoms),
|
||||
'canonical atomic character/route missing')
|
||||
require(all(name in lines[117 + i] for i, (_, name) in enumerate(PEOPLE)), 'original character names')
|
||||
cells = []
|
||||
for i, (key, name) in enumerate(PEOPLE):
|
||||
for route, route_name in ROUTES.items():
|
||||
refs = {
|
||||
'entry_required_events': ['identity_registration', route + '_actions'],
|
||||
'state_conditions': ['state_fields', 'affection_max_invariant', 'defense_reduction',
|
||||
'post_break_metric', 'barrier_block', 'coassignment_attack', 'zero_break', 'contact_after_break'],
|
||||
'duel_effects': ['duel_types', 'duel_win', 'duel_loss'],
|
||||
'route_selection_effects': ['threshold_route_loss', route + '_actions', 'route_skills'],
|
||||
'interruption_cancellation': ['departure', 'threshold_route_loss', 'duel_loss'], 'save_handling': ['snapshot_container'],
|
||||
'history_marks': ['history_fields', 'history_cycle_parentage', 'portrait_marks'],
|
||||
'current_reachability': ['identity_registration', 'threshold_route_loss']}
|
||||
categories = {}
|
||||
for category in CATEGORIES:
|
||||
owner = {'entry_required_events': 'P26-01', 'state_conditions': 'P18-02',
|
||||
'duel_effects': 'P19-01', 'route_selection_effects': 'P26-02',
|
||||
'interruption_cancellation': 'P19-02', 'save_handling': 'P19-02',
|
||||
'history_marks': 'P19-02', 'current_reachability': 'P20-02'}[category]
|
||||
gap = item(key + '_' + route + '_' + category, 138, 161,
|
||||
'原本未定義/D08 pending: 人物固有のイベント列・条件・中断取消・進行保存・履歴と通常到達は未制作/未証明。共通要求から固有仕様を創作しない。', owner)
|
||||
gap['character_authority'] = cite(118 + i)
|
||||
categories[category] = {'common_rule_refs': refs[category], 'character_specific': gap}
|
||||
if category == 'interruption_cancellation':
|
||||
categories[category].update(route_termination_authorities=[cite(148),cite(153)],
|
||||
legacy_classification='legacy_not_original', legacy_reason=LEGACY_REASON,
|
||||
legacy_evidence=[e for r in rules if r['id']=='threshold_route_loss'
|
||||
for e in r['legacy_evidence'] if e['path']==SERVICE and e['lines']==[343,355]])
|
||||
|
||||
cells.append({'character_id': key, 'name': name, 'route_id': route, 'route': route_name,
|
||||
'natural_route_complete': False, 'categories': categories})
|
||||
return {'task_id': 'P19-03-TABLE', 'schema_version': 1,
|
||||
'identity_policy': '原本§6の名前とatomic entity.keyを監査IDに使用。実装IDを捏造しない。カタログにはheroine_anriのみ。OriginalRelationshipStateはsubject_idを保持し7名の列挙はしない。',
|
||||
'source_anchor': ANCHOR, 'common_rules': rules, 'cells': cells,
|
||||
'authority_snapshots': {PLAN + name: {
|
||||
'sha256': sha(data), 'anchored_base_commit': BASE,
|
||||
'records': definition_projection(decode(data)) if name == 'work_packages.json'
|
||||
else decode(data) if name == 'decisions.json' else atoms}
|
||||
for name, data in anchored.items()},
|
||||
'catalog_evidence': evidence(CATALOG, 1, 32),
|
||||
'pending': {'D05': 'pending', 'D08': 'pending', 'thresholds': None, 'rates': None, 'initial_values': None},
|
||||
'route_support': {r: {'UI': '欠損: 原本行動・3種決闘・原本3軸/盾の通常操作なし。既存汎用関係UIを原本ルートとしない。',
|
||||
'Runtime': 'partial: 原本明示状態の登録・identity検証のみ。共通更新と通常ルート到達は欠損。',
|
||||
'save': 'partial: 専用状態/旧値コンテナ保存あり。人物固有進行・中断再開は欠損。',
|
||||
'Windows': '未受入: global same-Windows acceptanceはopen。文書単位のnative GUI/Windows実行は適用外。',
|
||||
'evidence_refs': ['legacy_event_ui', 'identity_registration', 'snapshot_container', 'state_fields'],
|
||||
'missing_mechanisms': [x[0] for x in clauses]} for r in ROUTES.values()},
|
||||
'acceptance': '7名×3ルートの到達表があり、未制作内容は欠損として残る。',
|
||||
'accounting': '14/88 unchanged; formal Runner validation, independent whole-unit Opus review and normal integration/final required; no game acceptance'}
|
||||
|
||||
|
||||
def verify(candidate, canonical, root=None):
|
||||
require(type(candidate) is dict, 'document must be an object')
|
||||
if root is not None:
|
||||
validate_legacy(root, candidate)
|
||||
# Exact canonical equality also rejects additions, type coercion, invented numbers,
|
||||
# owner/status promotion and unsupported completion, including nested metadata.
|
||||
require(json.dumps(candidate, ensure_ascii=False, sort_keys=True) ==
|
||||
json.dumps(canonical, ensure_ascii=False, sort_keys=True), 'table differs from pinned canonical audit')
|
||||
|
||||
|
||||
def verify_records(candidate, canonical, markdown_bytes):
|
||||
verify(candidate, canonical)
|
||||
require(markdown_bytes == markdown(canonical).encode(), 'Markdown drift')
|
||||
|
||||
|
||||
def markdown(d):
|
||||
lines = ['# P19-03 到達表', '', d['acceptance'], '', d['identity_policy'], '',
|
||||
'共通原本ルールと人物固有欠損を分離する。implementedは狭い保持処理だけで、自然ルート完成ではない。', '',
|
||||
'|人物ID|原名|ルート|現在の到達性|', '|---|---|---|---|']
|
||||
for c in d['cells']:
|
||||
lines.append('|%s|%s|%s|欠損・通常到達未証明|' % (c['character_id'], c['name'], c['route']))
|
||||
lines += ['', '## 共通原本ルール', '']
|
||||
for r in d['common_rules']:
|
||||
lines += ['### ' + r['id'], '', r['status'] + ' / owner: ' + r['owner'], '',
|
||||
r['observation'], '', '原本 %s:%s–%s' % (BASELINE, *r['authority']['lines']), '',
|
||||
'```text', r['authority']['text'], '```', '',
|
||||
'実装証拠: ' + json.dumps(r['implementation'], ensure_ascii=False, sort_keys=True), '']
|
||||
if 'legacy_evidence' in r:
|
||||
lines += ['旧実装: ' + r['legacy_classification'] + ' / ' + r['legacy_reason'], '',
|
||||
'旧証拠 (git_blob_oid: Git blob OID; sha256: file-bytes SHA-256): ' +
|
||||
json.dumps(r['legacy_evidence'], ensure_ascii=False, sort_keys=True), '']
|
||||
for c in d['cells']:
|
||||
lines += ['## ' + c['character_id'] + ' / ' + c['name'] + ' / ' + c['route'], '']
|
||||
for category, record in c['categories'].items():
|
||||
g = record['character_specific']
|
||||
lines += ['- ' + category + ': 共通 [' + ', '.join(record['common_rule_refs']) +
|
||||
'] / missing / ' + g['gap'] + ' / owner: ' + g['owner'] +
|
||||
' / 原本 ' + str(g['authority']['lines']) + '・人物 ' + str(g['character_authority']['lines'])]
|
||||
if category == 'interruption_cancellation':
|
||||
lines += [' 原本中断参照: ' + json.dumps(record['route_termination_authorities'], ensure_ascii=False),
|
||||
' 旧確定ロック legacy_not_original: ' + json.dumps(record['legacy_evidence'], ensure_ascii=False)]
|
||||
lines.append('')
|
||||
lines += ['## ルート別適用性', '']
|
||||
for route, support in d['route_support'].items():
|
||||
lines += ['### ' + route, '']
|
||||
lines += ['- ' + k + ': ' + v for k, v in support.items() if isinstance(v, str)]
|
||||
lines += ['- 欠損機構: ' + ', '.join(support['missing_mechanisms']), '']
|
||||
lines += ['Authority snapshots: anchored_base_commit=' + BASE +
|
||||
'; JSON retains anchored blob SHA-256 and projected definition records.', '']
|
||||
lines += ['D05/D08、閾値・率・初期値はpending。完全な出典本文・SHA・原子要件全レコードはJSONに保持する。', '', d['accounting'], '']
|
||||
return '\n'.join(lines)
|
||||
|
||||
|
||||
def main():
|
||||
p = argparse.ArgumentParser(description=__doc__)
|
||||
p.add_argument('--project-root', type=Path, required=True)
|
||||
mode = p.add_mutually_exclusive_group(required=True)
|
||||
mode.add_argument('--check', action='store_true')
|
||||
mode.add_argument('--write', action='store_true')
|
||||
mode.add_argument('--source-binding-only', action='store_true')
|
||||
args = p.parse_args()
|
||||
try:
|
||||
root = args.project_root.resolve()
|
||||
result = binding(root)
|
||||
if not args.source_binding_only:
|
||||
canonical = expected(root)
|
||||
validate_legacy(root, canonical)
|
||||
if args.write:
|
||||
(root / OUT / 'REACHABILITY_TABLE.json').write_text(json.dumps(canonical, ensure_ascii=False, indent=2) + '\n', encoding='utf-8')
|
||||
(root / OUT / 'REACHABILITY_TABLE.md').write_text(markdown(canonical), encoding='utf-8')
|
||||
else:
|
||||
validate_legacy(root, decode((root / OUT / 'REACHABILITY_TABLE.json').read_bytes()))
|
||||
verify_records(decode((root / OUT / 'REACHABILITY_TABLE.json').read_bytes()), canonical,
|
||||
(root / OUT / 'REACHABILITY_TABLE.md').read_bytes())
|
||||
print(json.dumps({'audit_integrity': 'pass', 'formal_acceptance': 'pending_runner_and_independent_review', **result}))
|
||||
return 0
|
||||
except (ValueError, OSError, KeyError, TypeError, subprocess.CalledProcessError) as e:
|
||||
print(json.dumps({'audit_integrity': 'fail', 'error': str(e)}))
|
||||
return 1
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
+284
@@ -0,0 +1,284 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Meaningful in-memory controls; no product, Git or fixture writes."""
|
||||
import argparse
|
||||
import copy
|
||||
from pathlib import Path
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
import check_reachability_table as audit
|
||||
|
||||
ROOT = None
|
||||
|
||||
|
||||
class AuditTests(unittest.TestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
cls.canonical = audit.expected(ROOT)
|
||||
|
||||
def reject(self, mutate):
|
||||
changed = copy.deepcopy(self.canonical)
|
||||
mutate(changed)
|
||||
with self.assertRaises(ValueError):
|
||||
audit.verify(changed, self.canonical)
|
||||
|
||||
def register_output(self, data):
|
||||
original = Path.read_bytes
|
||||
def read(path):
|
||||
return data if path == ROOT / audit.PLAN / "work_packages.json" else original(path)
|
||||
with patch.object(Path, "read_bytes", read):
|
||||
document = audit.expected(ROOT)
|
||||
import json
|
||||
self.assertEqual(json.dumps(document, ensure_ascii=False, indent=2) + "\n",
|
||||
(ROOT / audit.OUT / "REACHABILITY_TABLE.json").read_text())
|
||||
self.assertEqual(audit.markdown(document).encode(),
|
||||
(ROOT / audit.OUT / "REACHABILITY_TABLE.md").read_bytes())
|
||||
|
||||
def test_actual_main_and_candidate_metadata(self):
|
||||
for commit in ("6e17cae", "1875b03"):
|
||||
with self.subTest(commit=commit):
|
||||
self.register_output(audit.blob(ROOT, commit, audit.PLAN + "work_packages.json"))
|
||||
|
||||
def test_final_ledger_metadata(self):
|
||||
import json
|
||||
register = audit.decode(audit.blob(ROOT, audit.BASE, audit.PLAN + "work_packages.json"))
|
||||
package = next(p for p in register if p["id"] == "P19")
|
||||
unit = next(u for u in package["remaining_deliverables"] if u["id"] == "P19-03")
|
||||
package.update(state="completed", legacy_state="completed",
|
||||
current_summary="ledger completion", updated_at_jst="2026-10-17")
|
||||
unit.update({key: "synthetic final reference" for key in audit.UNIT_MUTABLE})
|
||||
unit["evidence"] = [{"path": "docs/final.json", "sha256_at_integration": "0" * 64}]
|
||||
unit["remaining_gaps"] = []
|
||||
self.register_output(json.dumps(register).encode())
|
||||
|
||||
def test_every_register_definition_field(self):
|
||||
import json
|
||||
base = audit.decode(audit.blob(ROOT, audit.BASE, audit.PLAN + "work_packages.json"))
|
||||
# Independently mutate/remove every package and unit definition field.
|
||||
# Compare full nested values; unknown additions fail at both record levels.
|
||||
def visit(value, path=(), level="packages"):
|
||||
if isinstance(value, list):
|
||||
yield path, "count"
|
||||
if len(value) > 1:
|
||||
yield path, "order"
|
||||
for i, child in enumerate(value):
|
||||
yield from visit(child, path + (i,),
|
||||
"package" if not path else "unit" if path[-1] == "remaining_deliverables" else "nested")
|
||||
elif isinstance(value, dict):
|
||||
yield path, "unknown"
|
||||
excluded = audit.PACKAGE_MUTABLE if level == "package" else audit.UNIT_MUTABLE if level == "unit" else ()
|
||||
for key, child in value.items():
|
||||
if key in excluded:
|
||||
continue
|
||||
yield path + (key,), "change"
|
||||
yield path + (key,), "remove"
|
||||
if key == "remaining_deliverables":
|
||||
yield from visit(child, path + (key,), "units")
|
||||
elif isinstance(child, list):
|
||||
yield path + (key,), "count"
|
||||
if len(child) > 1 and child[0] != child[1]:
|
||||
yield path + (key,), "order"
|
||||
|
||||
seen = set()
|
||||
anchored = audit.blob(ROOT, audit.BASE, audit.PLAN + "work_packages.json")
|
||||
for path, operation in visit(base):
|
||||
# Each distinct definition key/structural path once; repeated records
|
||||
# use the same schema, so do not pad by testing it 30/88 times.
|
||||
shape = tuple("*" if type(part) is int else part for part in path)
|
||||
if (shape, operation) in seen:
|
||||
continue
|
||||
seen.add((shape, operation))
|
||||
changed = copy.deepcopy(base)
|
||||
target = changed
|
||||
for key in path[:-1]:
|
||||
target = target[key]
|
||||
value = target[path[-1]] if path else changed
|
||||
if operation == "change":
|
||||
target[path[-1]] = {"altered_definition": True}
|
||||
elif operation == "remove":
|
||||
del target[path[-1]]
|
||||
elif operation == "unknown":
|
||||
value["unknown_metadata"] = "must fail"
|
||||
elif operation == "count":
|
||||
value.append({})
|
||||
else:
|
||||
value[0], value[1] = value[1], value[0]
|
||||
with self.subTest(path=path, operation=operation), patch.object(audit, 'blob', return_value=anchored), self.assertRaises(ValueError):
|
||||
audit.validate_register(ROOT, "work_packages.json", json.dumps(changed).encode())
|
||||
|
||||
def test_atomic_decision_and_selection_integrity(self):
|
||||
import json
|
||||
for name in ("atomic_requirements.json", "decisions.json"):
|
||||
data = audit.blob(ROOT, audit.BASE, audit.PLAN + name)
|
||||
with self.subTest(name=name), self.assertRaises(ValueError):
|
||||
audit.validate_register(ROOT, name, data + b" ")
|
||||
changed = audit.decode(data)
|
||||
if name == "atomic_requirements.json":
|
||||
changed["requirements"][0]["id"] = "changed_atomic_requirement"
|
||||
with self.assertRaises(ValueError):
|
||||
audit.validate_register(ROOT, name, json.dumps(changed).encode())
|
||||
decisions = audit.decode(audit.blob(ROOT, audit.BASE, audit.PLAN + "decisions.json"))
|
||||
def flip(value, identity):
|
||||
if isinstance(value, dict):
|
||||
if value.get("id") == identity:
|
||||
value["status"] = "approved"
|
||||
return True
|
||||
return any(flip(v, identity) for v in value.values())
|
||||
if isinstance(value, list):
|
||||
return any(flip(v, identity) for v in value)
|
||||
return False
|
||||
for identity in ("D05", "D08"):
|
||||
changed = copy.deepcopy(decisions)
|
||||
self.assertTrue(flip(changed, identity))
|
||||
with self.subTest(identity=identity), self.assertRaises(ValueError):
|
||||
audit.validate_register(ROOT, "decisions.json", json.dumps(changed).encode())
|
||||
original = Path.read_bytes
|
||||
target = ROOT / audit.OUT / "ACTUAL_OPUS_NEXT_ORIGINAL_UNIT_SELECTION.json"
|
||||
def corrupt(path):
|
||||
return original(path) + (b" " if path == target else b"")
|
||||
with patch.object(Path, "read_bytes", corrupt), self.assertRaises(ValueError):
|
||||
audit.expected(ROOT)
|
||||
|
||||
def test_valid_implemented_partial_missing(self):
|
||||
# All three legitimate status classes must survive serialization and the
|
||||
# exact same verifier used by --check, without status promotion.
|
||||
import json
|
||||
value = audit.decode(json.dumps(self.canonical))
|
||||
self.assertEqual({r['status'] for r in value['common_rules']}, {'implemented', 'partial', 'missing'})
|
||||
audit.verify(value, self.canonical)
|
||||
|
||||
def test_independent_legacy_source_evidence(self):
|
||||
import subprocess
|
||||
document = audit.decode((ROOT / audit.OUT / 'REACHABILITY_TABLE.json').read_bytes())
|
||||
audit.validate_legacy(ROOT, document)
|
||||
for rule in document['common_rules']:
|
||||
for entry in rule.get('legacy_evidence', []):
|
||||
data = subprocess.check_output(['git', 'show', audit.ANCHOR + ':' + entry['path']], cwd=ROOT)
|
||||
self.assertEqual(data, (ROOT / entry['path']).read_bytes())
|
||||
self.assertEqual(entry['git_blob_oid'], subprocess.check_output(
|
||||
['git','hash-object','--stdin'], input=data, cwd=ROOT).decode().strip())
|
||||
start, end = entry['lines']
|
||||
self.assertEqual(entry['text'], '\n'.join(data.decode().splitlines()[start-1:end]))
|
||||
rules = {r['id']: r for r in document['common_rules']}
|
||||
self.assertIn('func restore_shield', rules['love_actions']['legacy_evidence'][0]['text'])
|
||||
self.assertIn('shield_broken', rules['zero_break']['legacy_evidence'][0]['text'])
|
||||
self.assertIn('EXCLUSIVE_LOCKED', rules['threshold_route_loss']['legacy_evidence'][1]['text'])
|
||||
|
||||
def test_legacy_evidence_required_independently(self):
|
||||
for identity in audit.LEGACY_RANGES:
|
||||
for mutation in ('drop', 'empty', 'absence', 'blob', 'text'):
|
||||
changed = copy.deepcopy(self.canonical)
|
||||
rule = next(r for r in changed['common_rules'] if r['id'] == identity)
|
||||
if mutation == 'drop':
|
||||
rule.pop('legacy_evidence')
|
||||
elif mutation == 'empty':
|
||||
rule['legacy_evidence'] = []
|
||||
elif mutation == 'absence':
|
||||
rule['implementation'] = 'not implemented'
|
||||
else:
|
||||
rule['legacy_evidence'][0]['git_blob_oid' if mutation == 'blob' else 'text'] = 'stale'
|
||||
with self.subTest(identity=identity, mutation=mutation), self.assertRaises(ValueError):
|
||||
audit.validate_legacy(ROOT, changed)
|
||||
|
||||
def test_exact_cell_product(self):
|
||||
mutations = {
|
||||
'missing': lambda d: d['cells'].pop(),
|
||||
'duplicate': lambda d: d['cells'].append(copy.deepcopy(d['cells'][0])),
|
||||
'wrong_character': lambda d: d['cells'][0].update(character_id='unregistered'),
|
||||
'wrong_route': lambda d: d['cells'][0].update(route='unregistered'),
|
||||
}
|
||||
for name, mutate in mutations.items():
|
||||
with self.subTest(name=name):
|
||||
self.reject(mutate)
|
||||
|
||||
def test_categories_and_citations(self):
|
||||
self.reject(lambda d: d['cells'][0]['categories'].pop('save_handling'))
|
||||
self.reject(lambda d: d['common_rules'][0].pop('authority'))
|
||||
self.reject(lambda d: d['cells'][0]['categories']['state_conditions']['character_specific'].pop('character_authority'))
|
||||
|
||||
def test_stale_record_evidence(self):
|
||||
for field in ('text', 'baseline_sha256'):
|
||||
with self.subTest(field=field):
|
||||
self.reject(lambda d: d['common_rules'][0]['authority'].update({field: 'stale'}))
|
||||
for field in ('text', 'sha256', 'anchor'):
|
||||
with self.subTest(field=field):
|
||||
self.reject(lambda d: d['common_rules'][0]['implementation'].update({field: 'stale'}))
|
||||
|
||||
def test_real_source_and_baseline_changes(self):
|
||||
original = Path.read_bytes
|
||||
for target in (audit.BASELINE, audit.STATE):
|
||||
def corrupt(path):
|
||||
value = original(path)
|
||||
return value + b'\nchanged' if path == ROOT / target else value
|
||||
with self.subTest(target=target), patch.object(Path, 'read_bytes', corrupt):
|
||||
with self.assertRaises(ValueError):
|
||||
audit.expected(ROOT)
|
||||
actual_blob = audit.blob
|
||||
def corrupt_blob(root, commit, path):
|
||||
value = actual_blob(root, commit, path)
|
||||
return value + b'\nchanged' if path == audit.STATE else value
|
||||
with patch.object(audit, 'blob', side_effect=corrupt_blob):
|
||||
with self.assertRaises(ValueError):
|
||||
audit.expected(ROOT)
|
||||
|
||||
def test_no_invented_values_or_completion(self):
|
||||
self.reject(lambda d: d['pending'].update(thresholds=50))
|
||||
self.reject(lambda d: d['common_rules'][5].update(status='implemented'))
|
||||
self.reject(lambda d: d['cells'][0].update(natural_route_complete=True))
|
||||
self.reject(lambda d: d['cells'][0]['categories']['entry_required_events']['character_specific'].update(status='implemented', gap=None))
|
||||
|
||||
def test_owner_and_status(self):
|
||||
self.reject(lambda d: d['common_rules'][0].update(owner='P99-01'))
|
||||
self.reject(lambda d: d['common_rules'][0].update(owner='P19-02'))
|
||||
self.reject(lambda d: d['common_rules'][0].update(status='complete'))
|
||||
|
||||
def test_json_and_types(self):
|
||||
for data in ('{', '{"x":1,"x":2}', '{"x":NaN}'):
|
||||
with self.subTest(data=data), self.assertRaises(ValueError):
|
||||
audit.decode(data)
|
||||
for value in ([], None, 'table'):
|
||||
with self.subTest(value=value), self.assertRaises(ValueError):
|
||||
audit.verify(value, self.canonical)
|
||||
self.reject(lambda d: d.update(cells={}))
|
||||
self.reject(lambda d: d.update(schema_version=True))
|
||||
|
||||
def test_markdown_drift(self):
|
||||
expected = audit.markdown(self.canonical).encode()
|
||||
audit.verify_records(self.canonical, self.canonical,
|
||||
(ROOT / audit.OUT / 'REACHABILITY_TABLE.md').read_bytes())
|
||||
with self.assertRaises(ValueError):
|
||||
audit.verify_records(self.canonical, self.canonical, expected + b'\nchanged')
|
||||
|
||||
def test_full_frozen_map_and_identities(self):
|
||||
audit.binding(ROOT) # Valid frozen-map control; no native execution.
|
||||
actual_selection = audit.selection(ROOT)
|
||||
for kind in ('missing', 'new', 'changed'):
|
||||
changed = copy.deepcopy(actual_selection)
|
||||
key = next(iter(changed))
|
||||
if kind == 'missing':
|
||||
del changed[key]
|
||||
elif kind == 'new':
|
||||
changed['scripts/invented.gd'] = {'bytes': 0, 'sha256': '0' * 64}
|
||||
else:
|
||||
changed[key]['sha256'] = '0' * 64
|
||||
with self.subTest(kind=kind), patch.object(audit, 'selection', return_value=changed):
|
||||
with self.assertRaises(ValueError):
|
||||
audit.binding(ROOT)
|
||||
original = Path.read_bytes
|
||||
pins = audit.decode(original(ROOT / audit.OUT / 'FROZEN_GAME_INPUT_PINS.json'))
|
||||
targets = [ROOT / audit.OUT / 'FROZEN_GAME_INPUT_PINS.json', ROOT / pins['marker_contract_path'],
|
||||
ROOT / pins['policy_path'], Path(pins['engine_path'])]
|
||||
for target in targets:
|
||||
def corrupt(path):
|
||||
value = original(path)
|
||||
return value + b'\nchanged' if path == target else value
|
||||
with self.subTest(target=str(target)), patch.object(Path, 'read_bytes', corrupt):
|
||||
with self.assertRaises(ValueError):
|
||||
audit.binding(ROOT)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument('--project-root', type=Path, required=True)
|
||||
args, rest = parser.parse_known_args()
|
||||
ROOT = args.project_root.resolve()
|
||||
unittest.main(argv=[__file__] + rest)
|
||||
+175
@@ -0,0 +1,175 @@
|
||||
{
|
||||
"schema": "original-delivery-unit-closed-v1",
|
||||
"plan_id": "P23-03",
|
||||
"title": "生活の観察",
|
||||
"formally_completed_at_jst": "2026-10-17T00:18:44.874816+09:00",
|
||||
"original_denominator": {
|
||||
"packages": 30,
|
||||
"delivery_units": 88,
|
||||
"partial_credit": false,
|
||||
"completed_before": 13,
|
||||
"completed_after": 14
|
||||
},
|
||||
"composition": {
|
||||
"submitted_sha": "d2581afd26d1976cdfe4f44c89df49a772524d1e",
|
||||
"main_base": "5041b88bdf25d0deaf3cb335be981896522c4880",
|
||||
"tested_tree": "a7005190c4d586bd9a52d8776a5667239c726052",
|
||||
"tested_commit": "8e72e70c3306432079a2070f94dc546a8b75a7f5",
|
||||
"integration_and_final_candidate": "314a8a4ce13cd0e7f6fe98807e628044d6417919"
|
||||
},
|
||||
"immutable_acceptance_contract": {
|
||||
"path": "docs/spec/acceptance/P23-03.json",
|
||||
"sha256": "1a925e0d7f5c1c9f28670d29dd0fdc5aa48f4d5415946d6de4c15e1d83b5ed66"
|
||||
},
|
||||
"all_original_conditions": [
|
||||
{
|
||||
"condition": "room_occupancy_and_operation",
|
||||
"status": "accepted",
|
||||
"independent_review": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/b3215f08a9cb46f2a91a00157762bcd8/result.json"
|
||||
},
|
||||
{
|
||||
"condition": "queues_and_overflow",
|
||||
"status": "accepted",
|
||||
"independent_review": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/b3215f08a9cb46f2a91a00157762bcd8/result.json"
|
||||
},
|
||||
{
|
||||
"condition": "elevator_state_and_passengers",
|
||||
"status": "accepted",
|
||||
"independent_review": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/b3215f08a9cb46f2a91a00157762bcd8/result.json"
|
||||
},
|
||||
{
|
||||
"condition": "staff_state_and_jobs",
|
||||
"status": "accepted",
|
||||
"independent_review": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/b3215f08a9cb46f2a91a00157762bcd8/result.json"
|
||||
},
|
||||
{
|
||||
"condition": "supplies_and_carried_goods",
|
||||
"status": "accepted",
|
||||
"independent_review": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/b3215f08a9cb46f2a91a00157762bcd8/result.json"
|
||||
},
|
||||
{
|
||||
"condition": "same_demand_route_improvement",
|
||||
"status": "accepted",
|
||||
"independent_review": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/b3215f08a9cb46f2a91a00157762bcd8/result.json"
|
||||
},
|
||||
{
|
||||
"condition": "normal_os_and_distinct_pid_resume",
|
||||
"status": "accepted",
|
||||
"independent_review": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/b3215f08a9cb46f2a91a00157762bcd8/result.json"
|
||||
}
|
||||
],
|
||||
"normal_runner_task_state": "completed",
|
||||
"normal_evidence": [
|
||||
{
|
||||
"id": 22,
|
||||
"task_id": "P23-03",
|
||||
"kind": "validation",
|
||||
"commit_sha": "d2581afd26d1976cdfe4f44c89df49a772524d1e",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/61499808c5e346558dcf2b986ed8ed4e-validation.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"task_id": "P23-03",
|
||||
"kind": "review",
|
||||
"commit_sha": "d2581afd26d1976cdfe4f44c89df49a772524d1e",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/b3215f08a9cb46f2a91a00157762bcd8/result.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"task_id": "P23-03",
|
||||
"kind": "integration",
|
||||
"commit_sha": "314a8a4ce13cd0e7f6fe98807e628044d6417919",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/663168b6ef434dc2afd5dcb1803f754d-integration.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"task_id": "P23-03",
|
||||
"kind": "final",
|
||||
"commit_sha": "314a8a4ce13cd0e7f6fe98807e628044d6417919",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/569a885ef5824eefb327d50ee38ebf12-final.json",
|
||||
"passed": 1
|
||||
}
|
||||
],
|
||||
"local": {
|
||||
"python": 146,
|
||||
"portable_committed_fixture": 4
|
||||
},
|
||||
"native_impact": {
|
||||
"suites": 4,
|
||||
"checks": 548
|
||||
},
|
||||
"full_regression": {
|
||||
"suites": 179,
|
||||
"strict_checks": 21752,
|
||||
"parse": 322,
|
||||
"owned_ended": 181,
|
||||
"guard_errors": 0,
|
||||
"cleanup_errors": 0,
|
||||
"missing_markers": 0,
|
||||
"unexecuted": 0,
|
||||
"raw_reaudit": "root-evidence/CURRENT_FULL179_D258_ROOT_REAUDIT.json"
|
||||
},
|
||||
"normal_OS": {
|
||||
"requests": 88,
|
||||
"acks": 88,
|
||||
"distinct_ended_pids": [
|
||||
54488,
|
||||
57770,
|
||||
58359,
|
||||
66858
|
||||
],
|
||||
"both_whole_formal_models_byte_equal": true,
|
||||
"frames": 40,
|
||||
"explicit_image_rows": 838,
|
||||
"actual_opus_image_sessions": 7
|
||||
},
|
||||
"same_demand": {
|
||||
"metric": "sum_destination_arrival_minutes_entire_cohort",
|
||||
"A": 7153,
|
||||
"B": 2585
|
||||
},
|
||||
"independent_formal_review": {
|
||||
"task_id": "P23-03",
|
||||
"commit": "d2581afd26d1976cdfe4f44c89df49a772524d1e",
|
||||
"status": "pass",
|
||||
"summary": "I reviewed P23-03 「生活の観察」 at d2581af and recommend pass. I found nothing at critical or high severity.\n\nScope: every change is inside allowed_paths. tools/regression/suite-policy.json is unchanged, and no test was deleted or disabled.\n\nWhat the change does:\n- world_preview.gd builds one observation model per frame from the live simulation state. It covers rooms, queues, elevator cabins and landings, staff, supplies and business state.\n- That model is exposed as a deep-copied report and drawn through a LifeOverlay. The overlay sits between InactiveLayerRooms and LayerLens.\n- room_presentation.gd adds labels for business state, queue, elevator and supply. Badges are placed in a fixed order so they don't collide.\n- Actors are fitted with identity-core packing, scale reduction and aggregation. Actors are never drawn inside a cabin. Traffic bands are cut into segments around obstacles.\n- A separate Python checker recomputes the observation from typed snapshots and checks it against a 7-condition × 6-category matrix.\n\nRunner validation: the integrity check passed with no deficits.\n\nCoordinator evidence I read under .review-material. All of it is bound to source d2581af. It was run on tested composition 8e72e70 (tree a700519), which is the submitted SHA combined with main context 5041b88, per root-composition.json.\n- **Full regression:** 179 suites, 21752 checks, all 181 phases ended, default player data unchanged before and after. tests/ui/test_p23_life_observation.gd ran in it with 137 checks.\n- **Native impact:** passed, including the same P23 suite with 137 checks and 0 failures.\n- **Local Python tests:** tools/test_p23_life_observation_evidence.py exited with code 0.\n- **Real OS runs:** 88 requests, each acknowledged. There were 4 distinct process IDs: a writer and a reader for each of layouts A and B, all ended. In each layout the reader loaded the writer's normal save, and the whole formal model was byte-identical after load (layout A: 837108 bytes).\n- **Screenshot judgments:** all 40 frames and 838 rows were judged by claude-opus-5-5 across 7 runs, all exit 0. No frames or rows are pending, and every row is true for category, state and position.\n- **Same-demand layout comparison:** total destination arrival minutes for the whole cohort was 7153 for layout A and 2585 for layout B. With the same demand, the routing improvement is measurable.\n\nSearching the coordinator JSON found no non-zero failure counts and no false pass flags.\n\nAcceptance item P23-03: the shown people and facilities match the real state (checked by the model and by the image judgments), and the routing improvement under the same demand can be observed. It is satisfied.\n\nI did not execute anything myself; the run results above are the coordinator's records, bound by hashes. The raw provider outputs and runtime receipts are outside the review checkout, so I could not read them directly; see the low findings.",
|
||||
"acceptance_ids": [
|
||||
"P23-03"
|
||||
],
|
||||
"findings": [
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Some raw evidence is not in the review checkout, so I could not re-open it here. The Opus provider stdout and result files are under ~/Library/Application Support/agent-control/... and the OS ended.json and runner receipts are under .runtime/P23-03/build/... The reviewer can only see the sha256 values recorded in the coordinator JSON. For archival auditability, mirror these artifacts into .review-material."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "The record of run order is inconsistent. COLLECTION_ALL_D258_R18_RAW_AND_MECHANICAL_VERIFIED.json says the full-179 regression would not start until every image passed. But the full-179 re-audit timestamp (1792153896) is earlier than the all-40/838 image-judgment re-audit (1792162196). Both runs bind the same source, composition and tree, so the result is unaffected; only the documented order is wrong."
|
||||
}
|
||||
]
|
||||
},
|
||||
"low_findings_disposition": "root-evidence/FORMAL_ALL7_REVIEW_LOW_FINDINGS_DISPOSITION.json; original two low findings are preserved, full raw artifacts were present before review, chronology clarified without changing historical notes.",
|
||||
"owner_authorization": "Existing human instructions in this same chat explicitly authorize main updates, commits and push. No new exact-SHA human utterance is invented; normal approval record identifies this existing authorization.",
|
||||
"whole_runtime_evidence_retained": {
|
||||
"current_build": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p23-03-code/.runtime/P23-03/build/p23-normal-os-d258-r18",
|
||||
"formal_frozen_review": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p23-03-code/P23-03-review-1f993011",
|
||||
"all_file_manifest": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p23-03-code/P23-03-review-1f993011/.review-material/manifest.json",
|
||||
"review_manifest_sha256": "9d8545b7839218f892cae242fb68a37b1c5db00fad72e01369971b92f141bd11"
|
||||
},
|
||||
"not_credited": [
|
||||
"Whole P23 package",
|
||||
"P23-02 held Ctrl-wheel and left-button drag",
|
||||
"Maximum-scene/x3 performance",
|
||||
"Same-distribution Windows actual device",
|
||||
"All30 facilities",
|
||||
"Finished assets",
|
||||
"All characters/routes/endings/encyclopedia",
|
||||
"Natural full-game completion",
|
||||
"Whole P18 backend-to-UI acceptance",
|
||||
"Whole atomic requirement acceptance"
|
||||
],
|
||||
"remaining_conditions_for_this_unit": [],
|
||||
"no_other_unit_completion_inferred": true
|
||||
}
|
||||
+360
@@ -0,0 +1,360 @@
|
||||
{
|
||||
"all_copies_sha_verified": true,
|
||||
"files": [
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/validation/61499808c5e346558dcf2b986ed8ed4e-validation.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/61499808c5e346558dcf2b986ed8ed4e-validation.json",
|
||||
"bytes": 376,
|
||||
"sha256": "1e9133920afa90037d757d7ef23716f43f65f43b710104e1a8ed8716cb00aee8"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/validation/0/stdout.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/b0dc96a9bea241159c3a490a015f0ffd/stdout.log",
|
||||
"bytes": 84,
|
||||
"sha256": "0424cfc3a1827e4654b0631c5610b2252848091de22771faefa984ea3230480f"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/validation/0/stderr.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/b0dc96a9bea241159c3a490a015f0ffd/stderr.log",
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/validation/0/command.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/b0dc96a9bea241159c3a490a015f0ffd/command.json",
|
||||
"bytes": 813,
|
||||
"sha256": "682461e57799aaf38dae4d7090be813bc8242729846cdbc777b54c14adb88a93"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/validation/0/sandbox.sb",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/b0dc96a9bea241159c3a490a015f0ffd/sandbox.sb",
|
||||
"bytes": 1927,
|
||||
"sha256": "408f8f810232a492c10346ad3bf3bd2c8e70a3724367e46afe0fe84c2d3e6687"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/review/result.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/b3215f08a9cb46f2a91a00157762bcd8/result.json",
|
||||
"bytes": 4076,
|
||||
"sha256": "32d812da3a8039e956581735ed661bb49fee728bdb8656204eed598a91d45fd0"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/review/stdout.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/b3215f08a9cb46f2a91a00157762bcd8/stdout.log",
|
||||
"bytes": 9689,
|
||||
"sha256": "124f03574dc0411fb36566768bb2cf1076493b8bad0a4f9edfd0dc051f00013d"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/review/stderr.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/b3215f08a9cb46f2a91a00157762bcd8/stderr.log",
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/review/command.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/b3215f08a9cb46f2a91a00157762bcd8/command.json",
|
||||
"bytes": 1841,
|
||||
"sha256": "9350215f4eefec2eca40af9416093d82f9affff52b8f8f69d42c49b3844ff1a2"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/review/sandbox.sb",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/b3215f08a9cb46f2a91a00157762bcd8/sandbox.sb",
|
||||
"bytes": 1982,
|
||||
"sha256": "a1f115834c8719febd34e99cbda40b16c47e0ba597015495201a0f368a746b1d"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/integration/663168b6ef434dc2afd5dcb1803f754d-integration.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/663168b6ef434dc2afd5dcb1803f754d-integration.json",
|
||||
"bytes": 377,
|
||||
"sha256": "b1a2c4c54eba977fd9662215dfc09fcf1e8fa77de501266b78804223fc068d9f"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/integration/0/stdout.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/eea98d34e1eb44a1a0c3a2e8f27121e4/stdout.log",
|
||||
"bytes": 84,
|
||||
"sha256": "0424cfc3a1827e4654b0631c5610b2252848091de22771faefa984ea3230480f"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/integration/0/stderr.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/eea98d34e1eb44a1a0c3a2e8f27121e4/stderr.log",
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/integration/0/command.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/eea98d34e1eb44a1a0c3a2e8f27121e4/command.json",
|
||||
"bytes": 814,
|
||||
"sha256": "64f0b351a0bbdec4d6e77e26503c135d942c8071e81bdeb558d530c762a40ce8"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/integration/0/sandbox.sb",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/eea98d34e1eb44a1a0c3a2e8f27121e4/sandbox.sb",
|
||||
"bytes": 1928,
|
||||
"sha256": "6508a5671d1abf62689a52cc4e45d60ef60882de181d582a263c0a04506d2be0"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/final/569a885ef5824eefb327d50ee38ebf12-final.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/569a885ef5824eefb327d50ee38ebf12-final.json",
|
||||
"bytes": 371,
|
||||
"sha256": "72b0b37efa90e3583a95b192659cfe9b0181ea055932d1531b63131d1a7d4f01"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/final/0/stdout.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/f217129904f640f585722be63be0ec3c/stdout.log",
|
||||
"bytes": 84,
|
||||
"sha256": "0424cfc3a1827e4654b0631c5610b2252848091de22771faefa984ea3230480f"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/final/0/stderr.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/f217129904f640f585722be63be0ec3c/stderr.log",
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/final/0/command.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/f217129904f640f585722be63be0ec3c/command.json",
|
||||
"bytes": 808,
|
||||
"sha256": "2f058b6aa2c2d2231c72990245a06397eedbd78ca17e56bf46e1d6757610ff92"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/final/0/sandbox.sb",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/f217129904f640f585722be63be0ec3c/sandbox.sb",
|
||||
"bytes": 1922,
|
||||
"sha256": "ea6701080d15b185655c50ddb56a4a8f1200c4a2581ece79d56d77d51974718d"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/root-evidence/CURRENT_FULL179_D258_ROOT_REAUDIT.json",
|
||||
"original_path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p23-03-code/.runtime/coordinator-resume-20261016-r01/CURRENT_FULL179_D258_ROOT_REAUDIT.json",
|
||||
"bytes": 73961,
|
||||
"sha256": "7695f552148e0dada8189c8d01aecce3a47560b43a711438f4f81f50dd2e3995"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/root-evidence/ACTUAL_ALL40_838_OPUS_BINDINGS_REAUDIT.json",
|
||||
"original_path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p23-03-code/.runtime/coordinator-resume-20261016-r01/ACTUAL_ALL40_838_OPUS_BINDINGS_REAUDIT.json",
|
||||
"bytes": 29119,
|
||||
"sha256": "77ba80ca2678271053d30456bf24441de08582f601b1bd90a97052329dc7ea81"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/root-evidence/COLLECTION_ALL_D258_R18_RAW_AND_MECHANICAL_VERIFIED.json",
|
||||
"original_path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p23-03-code/.runtime/coordinator-resume-20261016-r01/COLLECTION_ALL_D258_R18_RAW_AND_MECHANICAL_VERIFIED.json",
|
||||
"bytes": 2648,
|
||||
"sha256": "d70d81ad06994bf79cca565c9c4c4f7fc4b26c5143b6730cb2db590ec65c4070"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/root-evidence/CURRENT_NATIVE_IMPACT_D258_RESULT.json",
|
||||
"original_path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p23-03-code/.runtime/coordinator-resume-20261016-r01/CURRENT_NATIVE_IMPACT_D258_RESULT.json",
|
||||
"bytes": 905,
|
||||
"sha256": "9143215eee776591266baac09ac172b7ec72b28bdf4b309a1c88d8b9b51c5f08"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/root-evidence/FORMAL_ALL7_REVIEW_LOW_FINDINGS_DISPOSITION.json",
|
||||
"original_path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p23-03-code/.runtime/coordinator-resume-20261016-r01/FORMAL_ALL7_REVIEW_LOW_FINDINGS_DISPOSITION.json",
|
||||
"bytes": 15032,
|
||||
"sha256": "4707cd4962821fe1d098a6cec39de28bee8258cefc99810a32d408f9ffad7d10"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/root-evidence/root-local-d2581af/RESULT.json",
|
||||
"original_path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p23-03-code/.runtime/coordinator-resume-20261016-r01/root-local-d2581af/RESULT.json",
|
||||
"bytes": 1347,
|
||||
"sha256": "089741340f76d2ec5cd236436a27117944c5a18e5bfd130fcf66aad6d01e2c8d"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/root-evidence/root-portable-local-d258-r01/RESULT.json",
|
||||
"original_path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p23-03-code/.runtime/coordinator-resume-20261016-r01/root-portable-local-d258-r01/RESULT.json",
|
||||
"bytes": 340,
|
||||
"sha256": "057b63a103cd1fe151859947edca226a0a775da0cf1b09b64f507155e0b2e45e"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/root-evidence/root-composition-d2581af-r01/ACTUAL_S_Q_COMPOSITION_RESULT.json",
|
||||
"original_path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p23-03-code/.runtime/coordinator-resume-20261016-r01/root-composition-d2581af-r01/ACTUAL_S_Q_COMPOSITION_RESULT.json",
|
||||
"bytes": 1093,
|
||||
"sha256": "f4f60012a55dc463a705d78fabb178a8b9c4ccbb7893ec75d834506ae6b28789"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/860f14e22d9c446281598ba60ff9c74d/stdout.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/860f14e22d9c446281598ba60ff9c74d/stdout.log",
|
||||
"bytes": 31408,
|
||||
"sha256": "fbf85a98a0837ed87c0880304d02b0561c9a905c7dcbd38d418824c96f768b8f"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/860f14e22d9c446281598ba60ff9c74d/stderr.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/860f14e22d9c446281598ba60ff9c74d/stderr.log",
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/860f14e22d9c446281598ba60ff9c74d/command.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/860f14e22d9c446281598ba60ff9c74d/command.json",
|
||||
"bytes": 2691,
|
||||
"sha256": "f4d70dfb1149025f74fd03e27b13ec1f9356255a306b0fdb3e249b5879c55c37"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/860f14e22d9c446281598ba60ff9c74d/result.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/860f14e22d9c446281598ba60ff9c74d/result.json",
|
||||
"bytes": 21395,
|
||||
"sha256": "824be1306a92831cdc5c7f36453b1fac03124249bf392535688f9ddd88e3d0d6"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/eee6032570134ca985e8476d4ba265be/stdout.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/eee6032570134ca985e8476d4ba265be/stdout.log",
|
||||
"bytes": 40480,
|
||||
"sha256": "4023c474ca6b400b8648a47af0e5e5adb6901ecc026cad68e7030a468a68f116"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/eee6032570134ca985e8476d4ba265be/stderr.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/eee6032570134ca985e8476d4ba265be/stderr.log",
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/eee6032570134ca985e8476d4ba265be/command.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/eee6032570134ca985e8476d4ba265be/command.json",
|
||||
"bytes": 2691,
|
||||
"sha256": "67d6741a1ecd40c8b2314d81849534dee94c248453edf203880c0988f82dc120"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/eee6032570134ca985e8476d4ba265be/result.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/eee6032570134ca985e8476d4ba265be/result.json",
|
||||
"bytes": 27970,
|
||||
"sha256": "07b772bde56eae17a37491e12c1ea0029c9dbf1f2cfe6d06a956f42057c20d93"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/395a7d0c54c64dbeb92a183ac7c867b9/stdout.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/395a7d0c54c64dbeb92a183ac7c867b9/stdout.log",
|
||||
"bytes": 39420,
|
||||
"sha256": "2e65a9e950b5ccae76cd08649ba835b3cbd9fabda828cd7149f5c21570cbae40"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/395a7d0c54c64dbeb92a183ac7c867b9/stderr.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/395a7d0c54c64dbeb92a183ac7c867b9/stderr.log",
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/395a7d0c54c64dbeb92a183ac7c867b9/command.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/395a7d0c54c64dbeb92a183ac7c867b9/command.json",
|
||||
"bytes": 2691,
|
||||
"sha256": "32c7a60f71d0a29211d1efeffcb126eec620f537be10f1ae27e49fa8df43b132"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/395a7d0c54c64dbeb92a183ac7c867b9/result.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/395a7d0c54c64dbeb92a183ac7c867b9/result.json",
|
||||
"bytes": 27257,
|
||||
"sha256": "7a0ffb6ebf74d6a778316d307f9aad94816601c95c8f5fae4b04983b87f17a51"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/7994385c51d148e1b24afbab858e1f1c/stdout.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/7994385c51d148e1b24afbab858e1f1c/stdout.log",
|
||||
"bytes": 41011,
|
||||
"sha256": "4d23055b1e6ca954f8c9e23f625c0a33013d646d8647e26323ab44f5fd1789b8"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/7994385c51d148e1b24afbab858e1f1c/stderr.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/7994385c51d148e1b24afbab858e1f1c/stderr.log",
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/7994385c51d148e1b24afbab858e1f1c/command.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/7994385c51d148e1b24afbab858e1f1c/command.json",
|
||||
"bytes": 2691,
|
||||
"sha256": "76b001f9f48fd4b743d512f05a4aeb24bcce8f5ce06638d6db12769262ba2685"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/7994385c51d148e1b24afbab858e1f1c/result.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/7994385c51d148e1b24afbab858e1f1c/result.json",
|
||||
"bytes": 30027,
|
||||
"sha256": "c7bce5c7ebfe3b678c391d09f501cd6db6c59c97647aaaa1f95df6d8bcf62f8a"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/25ad9a75dc264561a2437e20b36afd4c/stdout.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/25ad9a75dc264561a2437e20b36afd4c/stdout.log",
|
||||
"bytes": 43756,
|
||||
"sha256": "33851b717a09b1f7c4b5e662f4806fccab95f21998da50fa27d41e9384e1e7f6"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/25ad9a75dc264561a2437e20b36afd4c/stderr.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/25ad9a75dc264561a2437e20b36afd4c/stderr.log",
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/25ad9a75dc264561a2437e20b36afd4c/command.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/25ad9a75dc264561a2437e20b36afd4c/command.json",
|
||||
"bytes": 2691,
|
||||
"sha256": "557f8bd9fa636a489af47186982fba62daf020397015c6a3127ecb60bafc4c36"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/25ad9a75dc264561a2437e20b36afd4c/result.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/25ad9a75dc264561a2437e20b36afd4c/result.json",
|
||||
"bytes": 29562,
|
||||
"sha256": "d70f186e56f3a66812a9a7b1e8ebf2e7284e8f3cf9c4e9855e29aef8c8c619bc"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/5ea9af91a7bf4337a4894e2724991be5/stdout.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/5ea9af91a7bf4337a4894e2724991be5/stdout.log",
|
||||
"bytes": 39351,
|
||||
"sha256": "47674e7e8760b6c05a168b89cdc43469f05e2bb0ff950618d110abd8a726a8ae"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/5ea9af91a7bf4337a4894e2724991be5/stderr.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/5ea9af91a7bf4337a4894e2724991be5/stderr.log",
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/5ea9af91a7bf4337a4894e2724991be5/command.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/5ea9af91a7bf4337a4894e2724991be5/command.json",
|
||||
"bytes": 2691,
|
||||
"sha256": "7da7a897acbaf76c7a1d73e3199520736f8362c85e2746a4b86e74b22c6ebb3e"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/5ea9af91a7bf4337a4894e2724991be5/result.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/5ea9af91a7bf4337a4894e2724991be5/result.json",
|
||||
"bytes": 27450,
|
||||
"sha256": "06e42d0e1ced35dbb0d34d89affd1591003cc68325cd769786894d69732f933a"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/7512513d603346028019ef15aaec22c1/stdout.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/7512513d603346028019ef15aaec22c1/stdout.log",
|
||||
"bytes": 23989,
|
||||
"sha256": "a90e3d30cdf47abc9dab309bef6e8977ef67fb84a34b411b99eae042098bca2f"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/7512513d603346028019ef15aaec22c1/stderr.log",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/7512513d603346028019ef15aaec22c1/stderr.log",
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/7512513d603346028019ef15aaec22c1/command.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/7512513d603346028019ef15aaec22c1/command.json",
|
||||
"bytes": 2551,
|
||||
"sha256": "d3445c6137a760a18b899abc52dbab51e1379d0e97aae665b4273cd9c66bc2ab"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/actual-image-review-runs/7512513d603346028019ef15aaec22c1/result.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/runs/7512513d603346028019ef15aaec22c1/result.json",
|
||||
"bytes": 16262,
|
||||
"sha256": "98ba351f6f0bf6a2a16e5ce8f6575fa5f0766dc0103151efa20dabfaf19add76"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/normal-gates/traceability.json",
|
||||
"original_path": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p23-03-code/traceability/P23-03.json",
|
||||
"bytes": 9767,
|
||||
"sha256": "ea7a5091b8db48d0b11bd27e7f15d03d68dab77c47a12ca536bc85ba6a839d59"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/native-full179/runner-ended.json",
|
||||
"original_path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p23-03-code/.runtime/P23-03/build/p23-normal-os-d258-r18/regression-full179-d258-r01/runner-ended.json",
|
||||
"bytes": 4952259,
|
||||
"sha256": "50eb26041b622ea87519d44a233d92c8806848c20e0e0a03dec49f505a9a1499"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03-resume-20261017/native-full179/source-start.json",
|
||||
"original_path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p23-03-code/.runtime/P23-03/build/p23-normal-os-d258-r18/regression-full179-d258-r01/source-start.json",
|
||||
"bytes": 425469,
|
||||
"sha256": "57ea04a902aee43ad94190aec452eda400ce896f3653e50a7d893f3bae03bd7f"
|
||||
}
|
||||
],
|
||||
"scope": "Durable core receipts and analysis. Whole actual current raw inputs/images/native logs remain at pinned runtime/frozen paths; nothing deleted or reduced to counts."
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"scope": "Post-ledger applicability proof, no engine/test reruns. All accepted selected files and immutable normative/spec/fixture inputs remain exact. Only progress and acceptance evidence documents changed.",
|
||||
"integrated_candidate": "314a8a4ce13cd0e7f6fe98807e628044d6417919",
|
||||
"all_selected_files": 1359,
|
||||
"selected_sha_mismatches": [],
|
||||
"all_immutable_input_pins_equal": true,
|
||||
"input_pins": {
|
||||
"AGENTS.md": "8d8dc40211390275f858f322743309a0663c4f2d859780a8b8a08cea1450e8b3",
|
||||
"docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json": "6900df6014431ff160c0d18b0dfa65ef0a3fa78eaa08922eaa96de18d5b9fd8c",
|
||||
"docs/spec/acceptance/P23-03.json": "1a925e0d7f5c1c9f28670d29dd0fdc5aa48f4d5415946d6de4c15e1d83b5ed66",
|
||||
"docs/traceability/original/BASELINE.txt": "75e4bdbdeb379c9269553f0c776bdb9cc96e01f2d6aa5ca650d132c63a8aeb1a",
|
||||
"tests/fixtures/p23-03/diagnostic_stream.gd": "b23500c7e8041e56c1a7845a50e9a7c955da69439f54901b7c00b770f20ae9c7",
|
||||
"tests/fixtures/p23-03/diagnostic_stream.gd.uid": "1f3cbee159dc93c7bd7dd7f0a3b9e9103ed43ecb341c3a900c1df59377d8bb20",
|
||||
"tests/fixtures/p23-03/layout_comparison.gd": "fd84165ac031575b92ef6865dd188c017569f894ad65ded29cd37300f01a6553",
|
||||
"tests/fixtures/p23-03/layout_comparison.gd.uid": "8a33dd196d801c199de7e4e0607b883baf52ecf67d9b9957b839bbf750928d82",
|
||||
"tests/fixtures/p23-03/observation.gd": "a9a0e611f1262151549ff033eae618436e52f661d52decbab5adb93efc4dcdf5",
|
||||
"tests/fixtures/p23-03/observation.gd.uid": "87f8d1b584d37053b76f27e02e06fefd77b2b8bbf42a7d92404d4c4109934988",
|
||||
"tests/fixtures/p23-03/passive_observation.gd": "812c2a3b399b079333e4eae0fbf78946f1c39041e6859e65f8bc7c44aaad6bfc",
|
||||
"tests/fixtures/p23-03/passive_observation.gd.uid": "8c4295b0605c6278168e6d57489075c04b75df7c9a7078b91c6b1ff8d9cbd799",
|
||||
"tests/fixtures/p23-03/passive_os_recorder.gd": "b90f054faa4fd46e6a30ba12d2ce22cdcfb281351b209650c8a00a7713767e47",
|
||||
"tests/fixtures/p23-03/passive_os_recorder.gd.uid": "269ff76c69fd161b0a979cae1dc938e9473dfde562c826a0acbda824004c576a",
|
||||
"tests/fixtures/p23-03/queued_elevator.json": "825a5bc8568cd890e1faf8c7e0122c43958f334711b0602dc2c3231373aa4fef",
|
||||
"tests/fixtures/p23-03/r13_actor_overlap.json": "a6b433c56207a172286745b57df72a76bfc2be9ac2adb15d629b4e8ab53d7985",
|
||||
"tests/fixtures/p23-03/r13_service_region_gap.json": "43e82a2a12906f0d0ce917c77b64bff6813b0a4fe5b7b287ee8311f6b3b43750",
|
||||
"tests/fixtures/p23-03/recorded-badge-negative.json.gz": "17b1596fb1dca0436cd656ac21a9dc754c75b4485335a0aebe533f70e1c1b5ac",
|
||||
"tests/fixtures/p23-03/repair28_frame180_projection.json": "95bbd41dcc5db1388e5ecc14557dfafd6bd540d707532588fd6126e8d6843d63",
|
||||
"tests/fixtures/p23-03/repair28_r15_negative.json": "8525cdfbc504583778624ab103efb4642374715be73187e97bdbf18d180a1616",
|
||||
"docs/plans/original-completion-2026-10-02/IMPLEMENTATION_PLAN.md#p23-normative": "8905c22f75dbd2a232845aa51489015346d9383d7d724fb12a44ae80214a466e"
|
||||
},
|
||||
"normative_p23_plan_sha256": "8905c22f75dbd2a232845aa51489015346d9383d7d724fb12a44ae80214a466e",
|
||||
"engine_runs": 0,
|
||||
"new_acceptance_inferred": false
|
||||
}
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"argv": [
|
||||
"/Users/korizatou114/.local/bin/claude",
|
||||
"-p",
|
||||
"--safe-mode",
|
||||
"--restricted",
|
||||
"--output-format",
|
||||
"json",
|
||||
"--tools",
|
||||
"Read,Grep,Glob",
|
||||
"--strict-mcp-config",
|
||||
"--mcp-config",
|
||||
"{\"mcpServers\":{}}",
|
||||
"--setting-sources",
|
||||
"",
|
||||
"--no-session-persistence",
|
||||
"--permission-mode",
|
||||
"plan",
|
||||
"--json-schema",
|
||||
"{\"type\": \"object\", \"additionalProperties\": false, \"required\": [\"source_sha\", \"tested_commit\", \"frames\", \"summary\", \"findings\"], \"properties\": {\"source_sha\": {\"type\": \"string\", \"enum\": [\"d2581afd26d1976cdfe4f44c89df49a772524d1e\"]}, \"tested_commit\": {\"type\": \"string\", \"enum\": [\"8e72e70c3306432079a2070f94dc546a8b75a7f5\"]}, \"frames\": {\"type\": \"array\", \"minItems\": 6, \"maxItems\": 6, \"items\": {\"type\": \"object\", \"additionalProperties\": false, \"required\": [\"manifest_sha256\", \"reviewer\", \"judgments\", \"observations\"], \"properties\": {\"manifest_sha256\": {\"type\": \"string\", \"enum\": [\"63ab543653e157058633027ed84102fc2ffda1b9e66b352e01a82b53add34dfc\", \"b22f050e18437bf591647e0d0061593f8e2f76f9e14b6ddbd950868c507d69f0\", \"05f95847cf21e582a4aa79ac752f5d1b98b131636b2e487d7359ae33ed364566\", \"556cee0068af9d4054dcfe95dabc1a631d65dde47e557a8e6fbf9053ac630ec2\", \"43a786d674a504df1888b3f4b928b5a0d6b2674e8f10adef46b57244279c3b50\", \"3d31ff113ffafc34b6d612f3539d5cc46985984a195384811e128dae60598927\"]}, \"reviewer\": {\"type\": \"string\", \"enum\": [\"independent-opus-direct-image\"]}, \"judgments\": {\"type\": \"array\", \"items\": {\"type\": \"object\", \"additionalProperties\": false, \"required\": [\"row_index\", \"category\", \"state\", \"position\"], \"properties\": {\"row_index\": {\"type\": \"integer\"}, \"category\": {\"type\": \"boolean\"}, \"state\": {\"type\": \"boolean\"}, \"position\": {\"type\": \"boolean\"}}}}, \"observations\": {\"type\": \"array\", \"items\": {\"type\": \"string\"}}}}}, \"summary\": {\"type\": \"string\"}, \"findings\": {\"type\": \"array\", \"items\": {\"type\": \"string\"}}}}",
|
||||
"--model",
|
||||
"claude-opus-5-5"
|
||||
],
|
||||
"cwd": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p23-03-code/P23-03-visual-r18-8a9d3026",
|
||||
"env_names": [
|
||||
"AGY_CLI_DISABLE_AUTO_UPDATE",
|
||||
"BROWSER_PROFILE_DIR",
|
||||
"BUILD_OUTPUT_DIR",
|
||||
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC",
|
||||
"CLAUDE_CODE_OAUTH_TOKEN",
|
||||
"GIT_TERMINAL_PROMPT",
|
||||
"HOME",
|
||||
"LANG",
|
||||
"LC_ALL",
|
||||
"LOGNAME",
|
||||
"MAC_CHROMIUM_TMPDIR",
|
||||
"PATH",
|
||||
"PORT",
|
||||
"PYTHONDONTWRITEBYTECODE",
|
||||
"TEMP",
|
||||
"TERM",
|
||||
"TEST_DATABASE_PATH",
|
||||
"TMP",
|
||||
"TMPDIR",
|
||||
"USER"
|
||||
],
|
||||
"execution": "sandbox"
|
||||
}
|
||||
+865
@@ -0,0 +1,865 @@
|
||||
{
|
||||
"source_sha": "d2581afd26d1976cdfe4f44c89df49a772524d1e",
|
||||
"tested_commit": "8e72e70c3306432079a2070f94dc546a8b75a7f5",
|
||||
"frames": [
|
||||
{
|
||||
"manifest_sha256": "63ab543653e157058633027ed84102fc2ffda1b9e66b352e01a82b53add34dfc",
|
||||
"reviewer": "independent-opus-direct-image",
|
||||
"judgments": [
|
||||
{
|
||||
"row_index": 0,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 1,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 2,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 3,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
}
|
||||
],
|
||||
"observations": [
|
||||
"writer-request-0004 is on the back layer (表層:輪郭), layer 1, paused at 10:53. The report gives definition_ids warehouse (facility_00000004) and kitchen (facility_00000005), both NO_STAFF / INACTIVE.",
|
||||
"Row 0: the whole image at 210,485 256x192 shows the warehouse with its 4 crates, three shelf lines, its 倉庫 name label above and the diagonal dim stroke. This matches dimmed=true and NO_STAFF.",
|
||||
"Row 1: at 1106,485 the kitchen counter, burners and 厨房 label are visible, with the same diagonal dimming. This is correct for NO_STAFF.",
|
||||
"Rows 2 and 3: both business badges read exactly '職員不足 未稼働' at 212,487 and 1108,487. Each is at its raw anchor (133,390 and 1029,390) with displaced_by empty, and the full text is unoccluded.",
|
||||
"PIXEL_EQUIVALENCE reports 4 crops, all_crop_pixels_exact=true and resampling=false. The contact-sheet crops match the whole image."
|
||||
]
|
||||
},
|
||||
{
|
||||
"manifest_sha256": "b22f050e18437bf591647e0d0061593f8e2f76f9e14b6ddbd950868c507d69f0",
|
||||
"reviewer": "independent-opus-direct-image",
|
||||
"judgments": [
|
||||
{
|
||||
"row_index": 0,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 1,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 2,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 3,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 4,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 5,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 6,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 7,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 8,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 9,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 10,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 11,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 12,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 13,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 14,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 15,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 16,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 17,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 18,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 19,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 20,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 21,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 22,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 23,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 24,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 25,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 26,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 27,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 28,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
}
|
||||
],
|
||||
"observations": [
|
||||
"writer-request-0006 is the front layer (layer 0) with the back layer shown semi-transparent (裏層:半透明). Rooms are reception facility_00000002, cafeteria facility_00000003 and standard_room facility_00000007, all OPEN/OPERATING and not dimmed.",
|
||||
"Row 0: the reception at 210,485 shows its desk, window and lamp, with the 受付 name label centered above. The faint crates are back-layer ghosting from the user's semi-transparent setting, not wrong room art.",
|
||||
"Row 1: the cafeteria at 1106,485 shows tables and the 大衆食堂 label. The cabin badge for shaft 0.4 ('運転 0/4人 開 IDLE', 994-1140) covers about a 34x14 strip at the room's left edge. The room stays fully identifiable.",
|
||||
"Row 2: the standard room at 210,389 shows two occupied beds and '営業中 利用2人'. Only its bottom-right corner is touched by the reception's 受付 name label.",
|
||||
"Row 3: the queue label '待ち1人' at 338,373 is at its raw anchor 259,276 with displaced_by empty. Its member is guest-auto-00000021, who is drawn standing directly below at the counter (row 8, QUEUING).",
|
||||
"Rows 4 and 5: both lift cabins at 738,589 and 994,589 show open-door interiors. Their badges read 'IDLE 開 0/4', consistent with doors_open=true and operational=true.",
|
||||
"Rows 6 and 7: guest-auto-00000019 and guest-auto-00000020 are drawn lying in the two beds, which fits RECEIVING_SERVICE. The business label only crosses empty pixels at the top of row 6's crop.",
|
||||
"Rows 9-17: the nine MOVING guests are packed in cell 2 (850-914, 644-666) and are individually distinguishable as figures. Rows 18-20: AVAILABLE staff akane is at 490,648, and iris and juno are at 938 and 954.",
|
||||
"Row 21: '+39' is at local 391,488, which is the bounds position of group[0] (staff_akane, leftmost) as world_preview.gd:1829 specifies. There are 51 members and 12 drawn keys, so the count of 39 is correct.",
|
||||
"Rows 22-24: the business labels '営業中 利用0人', '営業中 利用0人' and '営業中 利用2人' are at their raw anchors and fully readable.",
|
||||
"Rows 25-28: traffic densities on capacity 4 are 1 (green), 48 (red), 2 (green) and 3 (orange, ratio 0.75). The bands appear in exactly those colors in the crops.",
|
||||
"PIXEL_EQUIVALENCE reports 29 crops, all exact, no resampling."
|
||||
]
|
||||
},
|
||||
{
|
||||
"manifest_sha256": "05f95847cf21e582a4aa79ac752f5d1b98b131636b2e487d7359ae33ed364566",
|
||||
"reviewer": "independent-opus-direct-image",
|
||||
"judgments": [
|
||||
{
|
||||
"row_index": 0,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 1,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 2,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 3,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 4,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 5,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 6,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 7,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 8,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 9,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 10,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 11,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
}
|
||||
],
|
||||
"observations": [
|
||||
"writer-request-0008 is the back layer (layer 1) at 15:20. Rooms are warehouse facility_00000004 (NO_STAFF, dimmed), kitchen facility_00000005 (OPEN) and staff_waiting_room facility_00000013 (OPEN, labelled 待機室).",
|
||||
"Row 0: the warehouse has its crates, shelves and diagonal dim stroke. Row 1: the kitchen counter and burners are drawn, not dimmed, which is correct for OPEN.",
|
||||
"Row 2: the waiting room at 466,485 shows a locker and a table, with '営業中 利用0人'. The warehouse supply label crosses its top-left window strip (468-518, 501-515) without hiding the room's identity.",
|
||||
"Row 3: staff_chika (AVAILABLE) stands in cell 5 at 1050,614. Row 4: staff_gina (MOVING_TO_TASK) is drawn carrying a crate in the waiting room. This is consistent with the supply request warehouse→kitchen DELIVERING, carrier ジーナ.",
|
||||
"Rows 5-9: the business and supply labels are at their raw anchors (supply at rect.position+(2,16)) with displaced_by empty. The full texts '職員不足 未稼働', '物資依頼 DELIVERING:1 / RESERVED:1' and '営業中 利用0人' are readable. The counts DELIVERING:1 / RESERVED:1 match the goods requests.",
|
||||
"Rows 10 and 11: traffic density is 1/4 at cells -3,0,1 and 5,0,1. Both show green bands under gina and chika respectively.",
|
||||
"PIXEL_EQUIVALENCE reports 12 crops, all exact, no resampling."
|
||||
]
|
||||
},
|
||||
{
|
||||
"manifest_sha256": "556cee0068af9d4054dcfe95dabc1a631d65dde47e557a8e6fbf9053ac630ec2",
|
||||
"reviewer": "independent-opus-direct-image",
|
||||
"judgments": [
|
||||
{
|
||||
"row_index": 0,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 1,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 2,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 3,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 4,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 5,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 6,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 7,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 8,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 9,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 10,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 11,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 12,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 13,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 14,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 15,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 16,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 17,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 18,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 19,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 20,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 21,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 22,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 23,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 24,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 25,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 26,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 27,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 28,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 29,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 30,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 31,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 32,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 33,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 34,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 35,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 36,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 37,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 38,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
}
|
||||
],
|
||||
"observations": [
|
||||
"writer-request-0010 is the front layer at 15:23. The rooms (rows 0-2), lift cabins (rows 5-6), in-bed guests (rows 7-8) and queuing guest-auto-00000021 (row 9) show the same correct identity and state as in 0006.",
|
||||
"Row 3: the landing queue '待ち1人' for cell 4,0,0 is at local 819,468, i.e. get_cell_rect(4).position + (-80, -16), the lift-cell offset in world_preview.gd:1129. displaced_by is empty. Its member os-p23-047 is drawn waiting just left of shaft 0.4 at 938,648.",
|
||||
"Row 4: the second '待ち1人' (cell -6,2) is at its raw anchor with member guest-auto-00000021.",
|
||||
"Rows 10-28: the MOVING guests whose cells are the lift landings are drawn beside the shafts (658-712 and 850-904) rather than inside the cabin footprints. This is consistent with the unchanged cabin-intrusion guard. The figures are individually discernible.",
|
||||
"Row 29: staff_akane (AVAILABLE) is at 490,648.",
|
||||
"Row 30: '+31' is at local 391,488, the group[0] bounds of staff_akane. The group has 51 identity members and 20 drawn keys (akane plus 19 guests), so 51-20=31 is correct. iris and juno are counted inside the aggregation and not drawn, which is legitimate counted aggregation.",
|
||||
"Rows 31-33: the business labels are at their raw anchors and readable.",
|
||||
"Rows 34-38: densities are 1 (green), 24 (red), 24 (red), 2 (green) and 3 (orange). The bands are visible in the crops, with the cell 0 and cell 4 bands at the cell bottoms below the cabins.",
|
||||
"PIXEL_EQUIVALENCE reports 39 crops, all exact, no resampling."
|
||||
]
|
||||
},
|
||||
{
|
||||
"manifest_sha256": "43a786d674a504df1888b3f4b928b5a0d6b2674e8f10adef46b57244279c3b50",
|
||||
"reviewer": "independent-opus-direct-image",
|
||||
"judgments": [
|
||||
{
|
||||
"row_index": 0,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 1,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 2,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 3,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 4,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 5,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 6,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 7,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 8,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 9,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 10,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 11,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
}
|
||||
],
|
||||
"observations": [
|
||||
"writer-request-0012 is the back layer at 15:23, with the same room set as 0008: warehouse (dimmed, NO_STAFF), kitchen (OPEN) and staff waiting room (OPEN).",
|
||||
"Row 2: the waiting room now shows only its locker and table, because gina has moved away from it.",
|
||||
"Row 4: staff_gina (MOVING_TO_TASK) is at 730,614 in front of the door module in cell 0,0,1, drawn carrying a crate. This is consistent with the ongoing DELIVERING request.",
|
||||
"Row 3: staff_chika (AVAILABLE) is unchanged at 1050,614.",
|
||||
"Rows 5-9: the business and supply labels are at their raw anchors and the full text is readable.",
|
||||
"Rows 10 and 11: traffic density is 1/4 at cells 0,0,1 and 5,0,1. Both show green bands beneath the staff.",
|
||||
"PIXEL_EQUIVALENCE reports 12 crops, all exact, no resampling."
|
||||
]
|
||||
},
|
||||
{
|
||||
"manifest_sha256": "3d31ff113ffafc34b6d612f3539d5cc46985984a195384811e128dae60598927",
|
||||
"reviewer": "independent-opus-direct-image",
|
||||
"judgments": [
|
||||
{
|
||||
"row_index": 0,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 1,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 2,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 3,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 4,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 5,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 6,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 7,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 8,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 9,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 10,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 11,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 12,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 13,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 14,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 15,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 16,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 17,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 18,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 19,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 20,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 21,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 22,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 23,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 24,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 25,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 26,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 27,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 28,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
}
|
||||
],
|
||||
"observations": [
|
||||
"writer-request-0014 is the front layer at 15:24. Shaft 0.0 reads '運転 0/4人 開 IDLE'. Shaft 0.4 reads '運転 1/4人 開 BOARDING', and its longer badge ends at screen x≈1180.",
|
||||
"Row 3: '待ち24人(他20人)' has cell 0,0,0 and raw anchor 563,468. It was displaced by cabin/0/badge and cabin/1/badge to local 1101,468 (screen 1180,565), the right edge of the BOARDING badge. This matches the right-edge advance in _resolve_observation_labels (world_preview.gd:712-721).",
|
||||
"Row 3 text and count: 24 members = visible_count 4 + overflow 20. The 4 visible queuers are os-p23-000..003 (rows 12-15), drawn standing in line left of shaft 0.0. The full text is readable.",
|
||||
"Row 4: '待ち23人(他21人)' has cell 4,0,0 and raw anchor 819,468. It was displaced by cabin/1/badge and then landing/0 to local 1217 (screen 1296,565). There are 23 members = 2 visible (os-p23-005 and -006, rows 16-17) + 21 overflow. The full text is readable and extends slightly past the cafeteria's right edge.",
|
||||
"Rows 3-4 note: after the source-defined move, both landing labels sit over the cafeteria interior, well to the right of their own queues; the row 3 label is even on the far side of shaft 0.4. The positions match the source's deterministic rule exactly and the reasons are recorded in displaced_by, so position is judged true. Linking each label to its queue relies on the report's cell/displaced_by fields, not on visual proximity.",
|
||||
"Row 1: the cafeteria's interior is crossed by the two moved landing labels and the BOARDING badge tail (1106-1180). The tables, windows, 大衆食堂 name and '営業中 利用0人' badge remain visible, so the room stays identifiable.",
|
||||
"Rows 6 and 7: shaft 0.0 is empty and open. Shaft 0.4 shows one passenger inside, os-p23-047 (row 8, at 1002,623 within the cabin), which is a legitimate riding passenger and consistent with BOARDING 1/4.",
|
||||
"Rows 9-11: the in-bed guests and the reception queuer are unchanged and correct. Row 5's '待ち1人' is at its raw anchor 259,276.",
|
||||
"Rows 18-20: staff_akane is at 492,614 next to os-p23-003, and staff_iris and staff_juno are at 920 and 938 next to os-p23-005. The adjacent figures overlap only at sprite margins, and each body/head is discernible.",
|
||||
"Rows 21-23: the business labels are at their raw anchors and fully readable.",
|
||||
"Rows 24-28: densities are 1 (green), 24 (red), 23 (red), 2 (green) and 3 (orange), each band visible in its crop.",
|
||||
"PIXEL_EQUIVALENCE reports 29 crops, all exact, no resampling."
|
||||
]
|
||||
}
|
||||
],
|
||||
"summary": "Independent direct-image stage review of 6 assigned P23-03 B-writer frames (0004, 0006, 0008, 0010, 0012, 0014), 145 eligible rows in total. For each frame I viewed the whole native screenshot and its contact sheet, read the manifest, report and state views, and checked anchors, displacement, aggregation, landing-badge and traffic-color logic against scenes/main/world_preview.gd at the submitted source. All 145 rows were judged on their own evidence, and every row is true for category, state and position. Frame 0014 has source-defined label displacement: the two landing-queue labels move past both cabin badges and the earlier landing label into the cafeteria area, as world_preview.gd:712-721 specifies. Their full text and counts are correct, but they end up far from their own queues. This is a stage visual review only; it gives no formal credit, and the formal all-7-condition review and full 179/integration review are still required.",
|
||||
"findings": [
|
||||
"All 145 eligible rows across the 6 frames are true for category, state and position; no false values. Row counts per frame: 4, 29, 12, 39, 12, 29.",
|
||||
"Frame 0014, rows 3-4: the landing-queue labels 待ち24人(他20人) (cell 0,0,0, anchor 563) and 待ち23人(他21人) (cell 4,0,0, anchor 819) are displaced to local 1101 and 1217, exactly as world_preview.gd:712-721 specifies. displaced_by records cabin/0/badge, cabin/1/badge and landing/0. The member/visible/overflow counts (24=4+20, 23=2+21) match the drawn queuers. Visually, both labels now sit over the cafeteria, far from their own queues; this is recorded but not marked false because it is the defined source behavior.",
|
||||
"Aggregation badges '+39' (0006) and '+31' (0010) are at the group[0] bounds position, per world_preview.gd:1829, and their counts equal the identity members minus the drawn keys (51-12 and 51-20).",
|
||||
"Traffic band colors match the thresholds in world_preview.gd:872 (ratio above 1 red, at least 0.65 orange, otherwise green, capacity 4) in every traffic row.",
|
||||
"Minor fixed occlusions do not prevent identifying any room: cabin badges overlap the cafeteria's left edge (0006, 0010, 0014), a supply label crosses the waiting room's top-left (0008, 0012), and the 受付 name label touches the standard room's corner.",
|
||||
"All 6 PIXEL_EQUIVALENCE files report all_crop_pixels_exact=true and resampling=false, with crop counts equal to the eligible rows. No files were edited and no engines were run."
|
||||
]
|
||||
}
|
||||
+1
File diff suppressed because one or more lines are too long
+48
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"argv": [
|
||||
"/Users/korizatou114/.local/bin/claude",
|
||||
"-p",
|
||||
"--safe-mode",
|
||||
"--restricted",
|
||||
"--output-format",
|
||||
"json",
|
||||
"--tools",
|
||||
"Read,Grep,Glob",
|
||||
"--strict-mcp-config",
|
||||
"--mcp-config",
|
||||
"{\"mcpServers\":{}}",
|
||||
"--setting-sources",
|
||||
"",
|
||||
"--no-session-persistence",
|
||||
"--permission-mode",
|
||||
"plan",
|
||||
"--json-schema",
|
||||
"{\"type\": \"object\", \"additionalProperties\": false, \"required\": [\"source_sha\", \"tested_commit\", \"frames\", \"summary\", \"findings\"], \"properties\": {\"source_sha\": {\"type\": \"string\", \"enum\": [\"d2581afd26d1976cdfe4f44c89df49a772524d1e\"]}, \"tested_commit\": {\"type\": \"string\", \"enum\": [\"8e72e70c3306432079a2070f94dc546a8b75a7f5\"]}, \"frames\": {\"type\": \"array\", \"minItems\": 6, \"maxItems\": 6, \"items\": {\"type\": \"object\", \"additionalProperties\": false, \"required\": [\"manifest_sha256\", \"reviewer\", \"judgments\", \"observations\"], \"properties\": {\"manifest_sha256\": {\"type\": \"string\", \"enum\": [\"f2e18ffe51d7faf354caa970bc9ff64d58ff1389a1434af115db2119ea6faf26\", \"b54c7910beb8eed0987164f52be11a996b2f66b2bca0a000160d661c2c63f823\", \"8871b8c910d5402c034a720af418d8a87a5de8132d7b427b1786f7b58f11a06d\", \"ceab79923375c6d7586a92fd4409688a20af39af0423b4f63491ee70d2cf8620\", \"d9691fc021239198819137afd8a994b4751b2e73034599833ad3e61d33264608\", \"53fd9a11547738f3cd232a7fdd35244aaf64cc7ecfce1d0be462730cdbf82c0e\"]}, \"reviewer\": {\"type\": \"string\", \"enum\": [\"independent-opus-direct-image\"]}, \"judgments\": {\"type\": \"array\", \"items\": {\"type\": \"object\", \"additionalProperties\": false, \"required\": [\"row_index\", \"category\", \"state\", \"position\"], \"properties\": {\"row_index\": {\"type\": \"integer\"}, \"category\": {\"type\": \"boolean\"}, \"state\": {\"type\": \"boolean\"}, \"position\": {\"type\": \"boolean\"}}}}, \"observations\": {\"type\": \"array\", \"items\": {\"type\": \"string\"}}}}}, \"summary\": {\"type\": \"string\"}, \"findings\": {\"type\": \"array\", \"items\": {\"type\": \"string\"}}}}",
|
||||
"--model",
|
||||
"claude-opus-5-5"
|
||||
],
|
||||
"cwd": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p23-03-code/P23-03-visual-r18-8a9d3026",
|
||||
"env_names": [
|
||||
"AGY_CLI_DISABLE_AUTO_UPDATE",
|
||||
"BROWSER_PROFILE_DIR",
|
||||
"BUILD_OUTPUT_DIR",
|
||||
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC",
|
||||
"CLAUDE_CODE_OAUTH_TOKEN",
|
||||
"GIT_TERMINAL_PROMPT",
|
||||
"HOME",
|
||||
"LANG",
|
||||
"LC_ALL",
|
||||
"LOGNAME",
|
||||
"MAC_CHROMIUM_TMPDIR",
|
||||
"PATH",
|
||||
"PORT",
|
||||
"PYTHONDONTWRITEBYTECODE",
|
||||
"TEMP",
|
||||
"TERM",
|
||||
"TEST_DATABASE_PATH",
|
||||
"TMP",
|
||||
"TMPDIR",
|
||||
"USER"
|
||||
],
|
||||
"execution": "sandbox"
|
||||
}
|
||||
+847
@@ -0,0 +1,847 @@
|
||||
{
|
||||
"source_sha": "d2581afd26d1976cdfe4f44c89df49a772524d1e",
|
||||
"tested_commit": "8e72e70c3306432079a2070f94dc546a8b75a7f5",
|
||||
"frames": [
|
||||
{
|
||||
"manifest_sha256": "f2e18ffe51d7faf354caa970bc9ff64d58ff1389a1434af115db2119ea6faf26",
|
||||
"reviewer": "independent-opus-direct-image",
|
||||
"judgments": [
|
||||
{
|
||||
"row_index": 0,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 1,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 2,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 3,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 4,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 5,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 6,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 7,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 8,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 9,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 10,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 11,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 12,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 13,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 14,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 15,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 16,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 17,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 18,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
}
|
||||
],
|
||||
"observations": [
|
||||
"0028 at 200% on the front/ring layer. Rows 0 and 1: the 倉庫 (screen 210,485) and 厨房 (1106,485) rooms are dimmed NO_STAFF rooms; each has its own '職員不足 未稼働' business label at room.position+(2,2). Row 2: 待機室 is OPEN and undimmed, with business label '営業中 利用4人' (row 16) at 468,487.",
|
||||
"Rows 3-6 and 8-11: staff akane (armchair, 474,598), chika (538), iris (602) and juno (666) are drawn in uniform staff coats inside 待機室. They are OFF_DUTY with rest anchors in the rest room, and the 4 people match the '利用4人' count. Each staff/rest pair refers to the same sprite and is judged separately on the same visible evidence.",
|
||||
"Row 7: gina (WORKING) uses the carry pose with a box at 1050,614 in the corridor next to 厨房. This is a legitimate carried/supply anchor. The green band underneath is traffic row 18 (5,0,1, density 1).",
|
||||
"Row 13: the 倉庫 supply label '物資依頼 COMPLETED:5 / DELIVERING:1 / RESERVED:1' sits at its raw anchor 212,501, not displaced. The text is fully readable. Its 446px badge background extends over the top strip of 待機室 below that room's own business label, without hiding any actor or required label.",
|
||||
"Row 15 is marked clipped, but the full text '物資依頼 COMPLETED:9 / DELIVERING:1 / RESERVED:3' is visible inside the viewport. Only the empty badge tail is cut at the viewport edge.",
|
||||
"Row 17: traffic 0,0,1 (density 4, not blocked) shows an orange density band at the base of the door cell at 724,583. Row 18 (5,0,1, density 1) shows a green band under gina. Band colours follow _draw_congestion_overlay's ratio thresholds, and neither band is occluded."
|
||||
]
|
||||
},
|
||||
{
|
||||
"manifest_sha256": "b54c7910beb8eed0987164f52be11a996b2f66b2bca0a000160d661c2c63f823",
|
||||
"reviewer": "independent-opus-direct-image",
|
||||
"judgments": [
|
||||
{
|
||||
"row_index": 0,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 1,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 2,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 3,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 4,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 5,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 6,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 7,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 8,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 9,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 10,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 11,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 12,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 13,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 14,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 15,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 16,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 17,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 18,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 19,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 20,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 21,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 22,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 23,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 24,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 25,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 26,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 27,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 28,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 29,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 30,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
}
|
||||
],
|
||||
"observations": [
|
||||
"0030 at 200% on the guest/front layer. Rows 0 and 1: facility_02 (storeroom art) and 大衆食堂 are dimmed NO_STAFF rooms with labels '職員不足 未稼働' (rows 22 and 23). Row 2: 一般客室 at 210,389 is OPEN with '営業中 利用2人' (row 25).",
|
||||
"Row 3: the landing badge '待ち27人(他23人)' for lift cell 0,0,0. Its raw anchor is cell.pos+(-80,-16) = 642,565, which intersects cabin rect 738-834. The source rule advances it to cabin end.x = 834, and it renders there with full text readable. Counts match the members: 27 total, 4 visible, 23 overflow. The 4 visible members are rows 18-21 (os-p23-020..023), placed in the lane left of the shaft.",
|
||||
"Row 4: '待ち16人(他16人)' sits at its exact raw anchor 642,469 for cell 0,1,0. visible_count is 0 and overflow is 16, so the counted aggregation stands in for the hidden members. Row 5: '待ち1人' sits at raw anchor 338,373, and its single member, row 13 (guest-auto-21, QUEUING, wait pose), stands in the 受付 room at 346,422 above an orange band.",
|
||||
"Row 6: the EV cabin at 738,531 is drawn between floors with doors closed. Its badge reads '運転 満員 4/4人 閉 TRAVEL', consistent with doors_open=false and operational=true. Rows 7 and 8 (016, 017) are 32x36 passengers and rows 9 and 10 (018, 019) are 16x18 passengers, all inside the cabin bounds (riding = MOVING). The 16x18 sprites are small but still distinct guest silhouettes, scaled down by _life_fitted_groups.",
|
||||
"Rows 11 and 12: RECEIVING_SERVICE guests in 一般客室 use the standard_room_sleep pose (pillow, head, teal blanket) at y≈431-446. The business badge covers only the empty top 7px of row 11's rect, not the sleeper. Rows 14-16: guests in 大衆食堂 use the eat pose with plates, at service anchors.",
|
||||
"Rows 17 and 21: guest-auto-49 at 472 and os-p23-023 at 490 have overlapping sprite rects, but their body cores (≈490-505 vs 508-523) do not overlap, as _life_pack requires. Both heads and bodies are separately distinguishable.",
|
||||
"Row 24: the supply label '物資依頼 COMPLETED:4 / RESERVED:2' sits at its raw anchor and is fully readable, extending past the room edge into the corridor. Rows 26-28 show density bands: green for -4,0,0 (density 1), red for 0,0,0 (density 27, ratio >1) and orange for 5,0,0 (density 4). Row 30 (-6,2,0, density 3) shows an orange band in the 受付 cell.",
|
||||
"Row 29: for traffic 0,1,0 (density 16) the cabin occludes most of the cell. Following _traffic_segments, a small red segment survives at about x 731-738, left of the cabin, so a visible density mark is kept, as the source specifies."
|
||||
]
|
||||
},
|
||||
{
|
||||
"manifest_sha256": "8871b8c910d5402c034a720af418d8a87a5de8132d7b427b1786f7b58f11a06d",
|
||||
"reviewer": "independent-opus-direct-image",
|
||||
"judgments": [
|
||||
{
|
||||
"row_index": 0,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 1,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 2,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 3,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 4,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 5,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 6,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 7,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 8,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 9,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 10,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 11,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 12,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 13,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 14,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 15,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 16,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 17,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 18,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
}
|
||||
],
|
||||
"observations": [
|
||||
"0032: independently re-read the whole image and contact sheet. It is the same 200% back/ring scene as 0028, with the same per-row screenshot rects and states. Rows 0 and 1: dimmed NO_STAFF 倉庫 and 厨房 with '職員不足 未稼働' labels (rows 12 and 14). Row 2: OPEN 待機室 with '営業中 利用4人' (row 16).",
|
||||
"Rows 3-6 and 8-11: OFF_DUTY staff akane (armchair), chika, iris and juno are visibly resting in 待機室 at 474/538/602/666, y598, in staff coats with distinct sprites. Row 7: WORKING gina carries a box in the corridor at 1050,614 above the green band of traffic 5,0,1 (row 18).",
|
||||
"Rows 13 and 15: both supply labels sit at their raw anchors and their full text is readable. Row 15 is clipped only in its empty badge tail. Row 17: the orange band (density 4) is visible at the base of door cell 0,0,1."
|
||||
]
|
||||
},
|
||||
{
|
||||
"manifest_sha256": "ceab79923375c6d7586a92fd4409688a20af39af0423b4f63491ee70d2cf8620",
|
||||
"reviewer": "independent-opus-direct-image",
|
||||
"judgments": [
|
||||
{
|
||||
"row_index": 0,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 1,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 2,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 3,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 4,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 5,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 6,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 7,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 8,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 9,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 10,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 11,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 12,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 13,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 14,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 15,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 16,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 17,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 18,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
}
|
||||
],
|
||||
"observations": [
|
||||
"0034 at 150% zoom: rooms are 192x144 and actors 32x36. Rows 0-2: 倉庫 (346,472) and 厨房 (1018,472) are dimmed NO_STAFF; 待機室 (538,472) is OPEN. Business labels (rows 12, 14, 16) sit at room.position+(2,2) with readable text.",
|
||||
"Rows 3-11: at the smaller scale the four resting staff (546/594/642/690, y561) are still individually distinguishable in staff coats in the rest room, with akane in the armchair. Gina (WORKING, 978,573) is in the carry pose with a box over the green band of 5,0,1 (row 18).",
|
||||
"Row 13: the 倉庫 supply label spans 348-794 at y488. Its text is fully readable and its background runs across the top strip of 待機室, below that room's own label. In crop 2 this spill appears as '/ RESERVED:1', but in the whole image it is one continuous badge from 倉庫, so there is no misattribution. Row 15 (clipped to 409px) keeps its full text inside the viewport. Row 17: orange density band at 732,546+."
|
||||
]
|
||||
},
|
||||
{
|
||||
"manifest_sha256": "d9691fc021239198819137afd8a994b4751b2e73034599833ad3e61d33264608",
|
||||
"reviewer": "independent-opus-direct-image",
|
||||
"judgments": [
|
||||
{
|
||||
"row_index": 0,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 1,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 2,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 3,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 4,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 5,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 6,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 7,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 8,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 9,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 10,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 11,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 12,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 13,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 14,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 15,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 16,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 17,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 18,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
}
|
||||
],
|
||||
"observations": [
|
||||
"0036: the world area is the same 150% scene as 0034, with identical rects; only the bottom toolbar differs (screen-move mode, 画面移動中 hint). No world row is affected by the toolbar.",
|
||||
"Rows 0-2: room identities and states are correct (two dimmed NO_STAFF rooms, OPEN 待機室). Rows 3-11: four resting OFF_DUTY staff are visible and distinct in 待機室, and WORKING gina carries a box in the corridor.",
|
||||
"Rows 12-16: all business and supply labels sit at their raw anchors with full text readable; row 15's clipped tail is empty badge background. Rows 17 and 18: orange (density 4) and green (density 1) bands are visible and unoccluded."
|
||||
]
|
||||
},
|
||||
{
|
||||
"manifest_sha256": "53fd9a11547738f3cd232a7fdd35244aaf64cc7ecfce1d0be462730cdbf82c0e",
|
||||
"reviewer": "independent-opus-direct-image",
|
||||
"judgments": [
|
||||
{
|
||||
"row_index": 0,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 1,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 2,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 3,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 4,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 5,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 6,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 7,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 8,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 9,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 10,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 11,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 12,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 13,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 14,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 15,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 16,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 17,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 18,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
}
|
||||
],
|
||||
"observations": [
|
||||
"0038: the 150% scene is panned down 54px compared with 0036 (rooms at y526, actors at y615, gina at 978,627). Every manifest rect moves by that same offset, and the image matches it.",
|
||||
"Rows 0-2 and 12-16: room states and all labels are correct and fully readable at raw anchors. Rows 3-11: four resting staff and the carrying gina are clearly visible and distinct. Rows 17 and 18: the orange band at door cell 732,600 and the green band under gina at 972,600 are both visible.",
|
||||
"The mouse cursor at about 756,435 is over empty trunk wood and does not occlude any row."
|
||||
]
|
||||
}
|
||||
],
|
||||
"summary": "All 126 eligible rows across the six assigned frames passed category, state and position (0028: 19, 0030: 31, 0032/0034/0036/0038: 19 each). I read every whole native image and contact sheet directly. I checked rows against the raw manifest values and against the source in scenes/main/world_preview.gd (label placement and displacement, landing-badge anchors, traffic segments, actor packing) and scripts/ui/pixel_people.gd (poses). All six PIXEL_EQUIVALENCE files report all_crop_pixels_exact=true and resampling=false. This is visual review only; the formal all-7-condition review and full179/integration were not done here.",
|
||||
"findings": [
|
||||
"No false judgments in any assigned frame.",
|
||||
"0030 row 3: the landing badge for lift cell 0,0,0 is displaced from its raw anchor 642,565 to 834,565, which is the end of the cabin it overlapped. This matches the source rule that moves labels past fixed cabins, and the 27/4/23 counts match the raw members, visible_count and overflow.",
|
||||
"0030 rows 4 and 29: floor-2 lift queue 0,1,0 has visible_count 0 and 16 members in overflow, all shown through the counted label '待ち16人(他16人)'. Its density band is mostly behind the moving cabin, but a small red segment survives left of the cabin, as _traffic_segments is meant to do.",
|
||||
"0030 rows 9 and 10: two cabin passengers are drawn at the minimum 16x18 scale. They are still distinct guest silhouettes inside the cabin bounds.",
|
||||
"0030 rows 17 and 21: two guest sprite rects overlap, but their body cores do not, which is the actor non-overlap rule in _life_pack. Both figures are distinguishable.",
|
||||
"0028/0032/0034/0036/0038 row 13: the 倉庫 supply label is long enough that its background runs over the top strip of the neighbouring 待機室. Its text stays fully readable and covers no actor or other required label.",
|
||||
"Rows marked eligibility=clipped (row 15 in the 0028-family frames) still show their complete text inside the viewport; only empty badge background is cut off.",
|
||||
"0030: guests shown as RECEIVING_SERVICE in 大衆食堂, whose raw state is NO_STAFF/INACTIVE, are drawn exactly as the raw state says. That simulation-level combination is outside this visual review and should be checked in the formal review."
|
||||
]
|
||||
}
|
||||
+1
File diff suppressed because one or more lines are too long
+48
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"argv": [
|
||||
"/Users/korizatou114/.local/bin/claude",
|
||||
"-p",
|
||||
"--safe-mode",
|
||||
"--restricted",
|
||||
"--output-format",
|
||||
"json",
|
||||
"--tools",
|
||||
"Read,Grep,Glob",
|
||||
"--strict-mcp-config",
|
||||
"--mcp-config",
|
||||
"{\"mcpServers\":{}}",
|
||||
"--setting-sources",
|
||||
"",
|
||||
"--no-session-persistence",
|
||||
"--permission-mode",
|
||||
"plan",
|
||||
"--json-schema",
|
||||
"{\"type\": \"object\", \"additionalProperties\": false, \"required\": [\"source_sha\", \"tested_commit\", \"frames\", \"summary\", \"findings\"], \"properties\": {\"source_sha\": {\"type\": \"string\", \"enum\": [\"d2581afd26d1976cdfe4f44c89df49a772524d1e\"]}, \"tested_commit\": {\"type\": \"string\", \"enum\": [\"8e72e70c3306432079a2070f94dc546a8b75a7f5\"]}, \"frames\": {\"type\": \"array\", \"minItems\": 6, \"maxItems\": 6, \"items\": {\"type\": \"object\", \"additionalProperties\": false, \"required\": [\"manifest_sha256\", \"reviewer\", \"judgments\", \"observations\"], \"properties\": {\"manifest_sha256\": {\"type\": \"string\", \"enum\": [\"a5ce1fae31dec3957cd673e39bf53c0a5a1c2e627e5d0eeae37892e794b8b5f2\", \"0456e41c9b5ef1fb47d75983fd6d94ecf3a92ed65d18ae05cd97dd862a8f46c1\", \"fc859bf1f6cbb006c168a594ed00245cc69b7a61a5b94d580940e0d7a7381030\", \"5ca6b073f2d6955114aad597af84fce56879d69ed4aa5bf9d169e506065687e0\", \"30610336f4cd82104498daf32db81db950a2fb357ba8232623497c907da7f2af\", \"90862624eff67ff55405769b306cc6b321a41dae5c7a5570225011377ecadcbc\"]}, \"reviewer\": {\"type\": \"string\", \"enum\": [\"independent-opus-direct-image\"]}, \"judgments\": {\"type\": \"array\", \"items\": {\"type\": \"object\", \"additionalProperties\": false, \"required\": [\"row_index\", \"category\", \"state\", \"position\"], \"properties\": {\"row_index\": {\"type\": \"integer\"}, \"category\": {\"type\": \"boolean\"}, \"state\": {\"type\": \"boolean\"}, \"position\": {\"type\": \"boolean\"}}}}, \"observations\": {\"type\": \"array\", \"items\": {\"type\": \"string\"}}}}}, \"summary\": {\"type\": \"string\"}, \"findings\": {\"type\": \"array\", \"items\": {\"type\": \"string\"}}}}",
|
||||
"--model",
|
||||
"claude-opus-5-5"
|
||||
],
|
||||
"cwd": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p23-03-code/P23-03-visual-r18-8a9d3026",
|
||||
"env_names": [
|
||||
"AGY_CLI_DISABLE_AUTO_UPDATE",
|
||||
"BROWSER_PROFILE_DIR",
|
||||
"BUILD_OUTPUT_DIR",
|
||||
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC",
|
||||
"CLAUDE_CODE_OAUTH_TOKEN",
|
||||
"GIT_TERMINAL_PROMPT",
|
||||
"HOME",
|
||||
"LANG",
|
||||
"LC_ALL",
|
||||
"LOGNAME",
|
||||
"MAC_CHROMIUM_TMPDIR",
|
||||
"PATH",
|
||||
"PORT",
|
||||
"PYTHONDONTWRITEBYTECODE",
|
||||
"TEMP",
|
||||
"TERM",
|
||||
"TEST_DATABASE_PATH",
|
||||
"TMP",
|
||||
"TMPDIR",
|
||||
"USER"
|
||||
],
|
||||
"execution": "sandbox"
|
||||
}
|
||||
+867
@@ -0,0 +1,867 @@
|
||||
{
|
||||
"source_sha": "d2581afd26d1976cdfe4f44c89df49a772524d1e",
|
||||
"tested_commit": "8e72e70c3306432079a2070f94dc546a8b75a7f5",
|
||||
"frames": [
|
||||
{
|
||||
"manifest_sha256": "a5ce1fae31dec3957cd673e39bf53c0a5a1c2e627e5d0eeae37892e794b8b5f2",
|
||||
"reviewer": "independent-opus-direct-image",
|
||||
"judgments": [
|
||||
{
|
||||
"row_index": 0,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 1,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 2,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 3,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 4,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 5,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 6,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 7,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 8,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 9,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 10,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 11,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
}
|
||||
],
|
||||
"observations": [
|
||||
"B/0016 layer1 15:24. Row0 warehouse facility_00000004 is dimmed with a grey overlay, and its label 職員不足 未稼働 (row5) sits at its 212,487 anchor. Rows 1 and 2 (kitchen facility_00000005 and waiting room facility_00000013) are OPEN and undimmed, each with 営業中 利用0人 (rows 7 and 9).",
|
||||
"Rows 6 and 8 both read 物資依頼 DELIVERING:1 / RESERVED:1. The state has two logistics requests, warehouse 04 to kitchen 05, one DELIVERING (carrier staff_gina) and one RESERVED. world_preview.gd:631-638 attaches the supply badge to both the source and destination rooms. The 306px badges spill past the 256px rooms but the full text is readable. Row6 only touches the waiting-room business label (y501 edge) and does not overlap it.",
|
||||
"Row3 staff_chika is AVAILABLE, standing without cargo on the kitchen-side corridor. Row4 staff_gina is MOVING_TO_TASK and visibly carries a box (cargo:staff_gina in the state). Traffic rows 10 and 11 (density 1) show green bands under gina and chika."
|
||||
]
|
||||
},
|
||||
{
|
||||
"manifest_sha256": "0456e41c9b5ef1fb47d75983fd6d94ecf3a92ed65d18ae05cd97dd862a8f46c1",
|
||||
"reviewer": "independent-opus-direct-image",
|
||||
"judgments": [
|
||||
{
|
||||
"row_index": 0,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 1,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 2,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 3,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 4,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 5,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 6,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 7,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 8,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 9,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
}
|
||||
],
|
||||
"observations": [
|
||||
"B/0023 layer1 16:35. Logistics requests 1-6 in the state give warehouse 04 (requests 1, 2, 4, 6) COMPLETED:3 / RESERVED:1, matching row5. Kitchen 05 (all six, including 05->03 requests 3 and 5) gives COMPLETED:4 / DELIVERING:1 / RESERVED:1, matching row7.",
|
||||
"Row7 is eligibility 'clipped' (its 321px rect runs to the viewport edge), but the full text through RESERVED:1 is readable inside the viewport. staff_gina is delivering to facility_00000003 off this layer, so she is correctly absent here.",
|
||||
"Row3 staff_chika is AVAILABLE and standing near the kitchen. Row9 traffic (5,0,1) shows a green density-1 band under her. Row0 warehouse is dimmed NO_STAFF. Rooms 1 and 2 are OPEN, with business labels (rows 6 and 8) at their raw anchors."
|
||||
]
|
||||
},
|
||||
{
|
||||
"manifest_sha256": "fc859bf1f6cbb006c168a594ed00245cc69b7a61a5b94d580940e0d7a7381030",
|
||||
"reviewer": "independent-opus-direct-image",
|
||||
"judgments": [
|
||||
{
|
||||
"row_index": 0,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 1,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 2,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 3,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 4,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 5,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 6,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 7,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 8,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 9,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 10,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 11,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 12,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 13,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 14,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 15,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 16,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 17,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 18,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 19,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 20,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 21,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 22,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 23,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 24,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 25,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 26,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 27,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 28,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 29,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 30,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 31,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 32,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 33,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 34,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 35,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 36,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 37,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 38,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 39,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 40,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 41,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 42,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 43,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 44,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
}
|
||||
],
|
||||
"observations": [
|
||||
"B/0025 layer0 18:04. Queue labels follow the source landing anchor (cell position minus 80 at lift cells, minus 16 in y; world_preview.gd:1129). Row3 待ち4人 (040/042/044/046, all visible in the lane left of shaft0) is at 642,565. Row5 待ち15人(他15人) and row6 待ち14人(他14人) (all hidden, counted) are at the shaft0 and shaft1 floor-1 anchors. Row7 待ち1人 sits above reception, where row16 guest-auto-21 is QUEUING.",
|
||||
"Row4 待ち3人(他1人) (041 and 043 visible at 920/856, 045 hidden) was moved from its raw anchor 819,468 to 1111,468 (screen 1190,565), above the dining hall. The report's displaced_by is [cabin/0/badge, cabin/1/badge], which matches the deterministic right-edge rule in _resolve_observation_labels. The full text and count are readable, so position is judged source-correct.",
|
||||
"Row8 cabin0 at floor0 has doors closed and is empty (badge 運転 0/4人 閉 PICKUP). Row9 cabin1 shows 満員 4/4人 TRAVEL with four boarded guests. Rows 10-13 are 033/035/037/039: two drawn 32x36 and two drawn 16x18, all distinguishable as riders.",
|
||||
"Rows 14 and 15 are guests in standard_room_sleep in beds in OPEN guest room facility_00000007, matching 営業中 利用2人 (row34). Rows 19-21 are guests in eat mode with plates in dining hall facility_00000003. That room is dimmed NO_STAFF (rows 1 and 32), and its supply badge COMPLETED:4 / RESERVED:1 is row33.",
|
||||
"Rows 28-30 are OFF_DUTY staff (akane, iris, juno), not resting, so they idle in the corridor. They share cells with queued guests, and fitted rects spread them 18px apart (akane 682 vs guest040 664 and guest048 646; juno 880 vs 043 856; iris 944 vs 041 920). Each figure core remains distinguishable.",
|
||||
"Traffic band colours match density. Rows 35, 36, 38 and 39 (density 1) are green. Rows 40 (3), 43 (4) and 44 (3) are yellow/orange. Rows 37 (5), 41 (15) and 42 (14) are red. The row41 and row42 bands are cut by cabin badge obstacles but keep visible remnants, as _traffic_segments specifies."
|
||||
]
|
||||
},
|
||||
{
|
||||
"manifest_sha256": "5ca6b073f2d6955114aad597af84fce56879d69ed4aa5bf9d169e506065687e0",
|
||||
"reviewer": "independent-opus-direct-image",
|
||||
"judgments": [
|
||||
{
|
||||
"row_index": 0,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 1,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 2,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 3,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 4,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 5,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 6,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 7,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 8,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 9,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 10,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 11,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 12,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
}
|
||||
],
|
||||
"observations": [
|
||||
"B/0027 layer1 18:04. Warehouse 04 and kitchen 05 are both dimmed NO_STAFF (rows 0, 1, 6, 8). Waiting room 13 is OPEN with 営業中 利用1人 (row10).",
|
||||
"Of the 12 logistics requests in the state, warehouse 04 has ASSIGNED:1 / COMPLETED:5 / RESERVED:1 (row7) and kitchen 05 has ASSIGNED:1 / COMPLETED:9 / RESERVED:2 (row9). Both match exactly. Row9 is 'clipped' but its full text is visible. Row7's 426px badge runs into the waiting-room top band but does not cover that room's business label.",
|
||||
"Rows 3 and 4 are staff_chika, OFF_DUTY and resting, drawn seated in the waiting-room armchair rest slot; this is the source of the 利用1人 count. Row5 staff_gina is MOVING_TO_TASK toward a supply pickup and stands without cargo, which is correct before pickup. Rows 11 and 12 are traffic with density 1 and show green bands."
|
||||
]
|
||||
},
|
||||
{
|
||||
"manifest_sha256": "30610336f4cd82104498daf32db81db950a2fb357ba8232623497c907da7f2af",
|
||||
"reviewer": "independent-opus-direct-image",
|
||||
"judgments": [
|
||||
{
|
||||
"row_index": 0,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 1,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 2,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 3,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 4,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 5,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 6,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 7,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 8,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 9,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 10,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 11,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 12,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 13,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 14,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 15,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 16,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 17,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 18,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
}
|
||||
],
|
||||
"observations": [
|
||||
"B/0028 layer1 18:20. Four OFF_DUTY staff rest in waiting room facility_00000013, in staff_waiting_room slots (_resting_staff_position, world_preview.gd:2120). Akane is seated in the armchair at 474 (rows 3 and 4). Chika (538, rows 5 and 6), iris (602, rows 8 and 9) and juno (666, rows 10 and 11) stand at the remaining slots. All four are distinct and the count matches 営業中 利用4人 (row16).",
|
||||
"Row7 staff_gina is OFF_DUTY and not resting, standing in the corridor at 794. Row18 traffic (1,0,1) shows a green density-1 band under her. Row17 traffic (0,0,1), density 4, shows an orange band in the door cell.",
|
||||
"The report lists 6 COMPLETED and 1 RESERVED request for warehouse 04 and 10 COMPLETED and 2 RESERVED for kitchen 05. These match rows 13 and 15. Both rooms are dimmed NO_STAFF, with labels (rows 12 and 14) at their raw anchors."
|
||||
]
|
||||
},
|
||||
{
|
||||
"manifest_sha256": "90862624eff67ff55405769b306cc6b321a41dae5c7a5570225011377ecadcbc",
|
||||
"reviewer": "independent-opus-direct-image",
|
||||
"judgments": [
|
||||
{
|
||||
"row_index": 0,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 1,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 2,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 3,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 4,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 5,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 6,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 7,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 8,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 9,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 10,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 11,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 12,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 13,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 14,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 15,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 16,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 17,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 18,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 19,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 20,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 21,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 22,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 23,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 24,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 25,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 26,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 27,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 28,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 29,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
},
|
||||
{
|
||||
"row_index": 30,
|
||||
"category": true,
|
||||
"state": true,
|
||||
"position": true
|
||||
}
|
||||
],
|
||||
"observations": [
|
||||
"B/0030 layer0 18:20. Row7 cabin0 is now at floor1 (738,503), doors closed, 満員 4/4人 TRAVEL, carrying guests 040/042/044/046 (rows 8-11, drawn as riders). Row12 cabin1 is at floor1, empty, with badge 0/4人 PICKUP.",
|
||||
"Row21 aggregation +4 covers 033/035/037/039. All four are at lift cell (4,1,0) with drawn_keys empty, and the label sits at its raw anchor 819,372 (screen 898,469). Row28 traffic at the same cell has density 18 = 14 queued + 4 aggregated, which is consistent.",
|
||||
"Row5 待ち14人(他14人) was moved from anchor 819,372 to screen 1160,469 (displaced_by cabin/1/badge). Row23, the dining-hall business label, was moved from 1029,390 to 1081,390 (screen 1160,487), also by cabin/1/badge. Both follow the source rule and stay fully readable. Row24 supply COMPLETED:4 / RESERVED:1 sits below the badge at its raw anchor.",
|
||||
"Row3 待ち3人(他1人) is at the un-displaced shaft1 floor0 anchor 898,565, with 041 and 043 visible (rows 19 and 20) and 045 hidden. Row4 待ち15人(他15人) is at the shaft0 floor1 anchor. Row6 待ち2人(他1人) is above reception, with row15 guest-auto-21 QUEUING (one visible, one overflow).",
|
||||
"Rows 13 and 14 are sleeping guests in OPEN guest room 07 (row25 利用2人). Rows 16-18 are eating guests in dimmed NO_STAFF dining hall 03. Traffic bands: row26 (3) yellow, row27 (15) red remnant beside the cabin, row28 (18) red, rows 29 and 30 (4) orange."
|
||||
]
|
||||
}
|
||||
],
|
||||
"summary": "I reviewed 6 assigned frames (B/0016, 0023, 0025, 0027, 0028, 0030), 130 eligible rows in total, and judged every row individually. For each frame I read the whole native image, the contact sheet, the full manifest and the decoded report/state, and spot-checked native crops. I compared supply-label counts against the logistics requests in each state, queue and aggregation labels against members, anchors and displaced_by, and each cabin/guest/staff/rest drawing against source rules in world_preview.gd. No row failed on category, state or position, so all 130 rows are true. The assignment list contained 6 frames / 130 rows, not the '10 frames / 206 rows' named in the prompt. No other frames were reviewed or reused.",
|
||||
"findings": [
|
||||
"No false judgments in the 6 assigned frames (130 rows). This is a stage visual review only; formal all-7-condition and full179/integration review are still required.",
|
||||
"Scope discrepancy: the prompt mentions 'other10 frames206 rows', but only 6 assignments (12+10+45+13+19+31 = 130 rows) were provided. The remaining frames, if any, were not reviewed here.",
|
||||
"Every supply-badge count was checked against the logistics_requests in the state. Each frame's warehouse and kitchen/dining counts match, including the source behaviour of showing a request on both its source and destination rooms (world_preview.gd:631-638).",
|
||||
"Displaced labels in 0025 row4 (by cabin/0 and cabin/1 badges) and 0030 rows 5 and 23 (by cabin/1/badge) follow the deterministic right-edge rule in _resolve_observation_labels. Raw anchors are kept in the report and the full text stays readable. 0025 row4 ends up over the dining hall, about 290px from its shaft-1 queue members; this is source-defined, not a defect.",
|
||||
"Three goods rows extend past their room or touch the viewport edge (0023 row7 and 0027 row9 are flagged 'clipped'; 0027 row7 is 426px wide). In every case the full text is visible and nothing hides a business label.",
|
||||
"In 0025, OFF_DUTY non-resting staff share cells with queued guests and are spread 18px apart. Their figure cores remain distinguishable, so there is no actor-core obstruction.",
|
||||
"Hidden queue members (15 and 14 at the floor-1 shaft landings) and the 0030 '+4' aggregation are conveyed by count labels. The counts are consistent with traffic densities (0030 cell (4,1,0): 14 + 4 = 18)."
|
||||
]
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user