P08-02: 旧配置の安全な変更
This commit is contained in:
+34
-18
File diff suppressed because one or more lines are too long
@@ -5,7 +5,7 @@
|
||||
"base_commit": "e196578c1a4ad2fdf84642565bd102e524be386f",
|
||||
"spec_sha256_stripped_utf8": "19f02bb7912a4d7354e565186f02366fc1d4dd698468d26142e8204fd14ebfb0",
|
||||
"spec_sha256_raw": "01b3600e8815b514ffd5c4d341d77a6a3e8341064796c1dae706062b746ba6aa",
|
||||
"scope": "Repair r04: definition-derived diagnostic deficit, three construction stages in one batch, minimal checker mutations and compact verified history references; no production/native/Runner/git writes.",
|
||||
"scope": "Landing prerequisite repair: complete stairs bottom-up through public domain commands and registered build_minutes; failure-only payload/details diagnostics; fixture SHA synchronization. Existing resource and three-stage setup retained; no production or acceptance changes.",
|
||||
"outputs": [
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json",
|
||||
@@ -27,13 +27,13 @@
|
||||
},
|
||||
{
|
||||
"path": "tests/fixtures/p08-02/README.md",
|
||||
"sha256": "8a6b8dcde00be86e1ff96b29b255b586366e759a561b03e060b28e8713e210e0",
|
||||
"sha256": "e88ca33fdb4e96602d1fb108d71a9c35b6fa054619ecf6f1396e9a6c5e0ebd98",
|
||||
"hash_scope": "raw bytes",
|
||||
"disposition": "r04 current source; retained paths and UID/marker entries"
|
||||
},
|
||||
{
|
||||
"path": "tests/fixtures/p08-02/mixed_world.gd",
|
||||
"sha256": "e084d7aa6baf122089bd6f717af7e1e62de3c9930288439e6f51cc524bb55dde",
|
||||
"sha256": "a23f8a686be1d77e4874b9956eef89be4756f6e5eb01cc62454c3845acc62c25",
|
||||
"hash_scope": "raw bytes",
|
||||
"disposition": "r04 current source; retained paths and UID/marker entries"
|
||||
},
|
||||
@@ -75,7 +75,7 @@
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p08-02/implementation.json",
|
||||
"sha256": "7783f882e49c86432ea286293fd691d7d0abbec3847a7759c814e67436645e62",
|
||||
"sha256": "02c3aedcbe55fa203193c7fcad99d4285d6651d84b70bf6aef467ab36496b6ef",
|
||||
"hash_scope": "canonical normalized self record: replace this sha256 with null, UTF-8 json.dumps(ensure_ascii=False,sort_keys=True,separators=(comma,colon)), no newline",
|
||||
"disposition": "r04 current source; retained paths and UID/marker entries"
|
||||
},
|
||||
@@ -101,24 +101,24 @@
|
||||
"self_hash_note": "A raw self-containing SHA cannot be embedded in itself. This explicit normalized hash covers implementation.json; Root must separately measure its raw SHA and the final full packet on actual submitted SHA. No final packet measurement claimed.",
|
||||
"commands_actually_run": [
|
||||
{
|
||||
"command": "python3 -B AST parse of tools/run_p08_mixed_migration.py, tools/check_p08_migration_evidence.py, tools/test_p08_migration_evidence.py",
|
||||
"command": "python3 -B AST parse of three P08 Python tools",
|
||||
"exit_code": 0,
|
||||
"result": "3 AST parses passed"
|
||||
"result": "3 parses passed"
|
||||
},
|
||||
{
|
||||
"command": "python3 -B tools/test_p08_migration_evidence.py",
|
||||
"exit_code": 0,
|
||||
"result": "2 tests in 34.514s, OK, synthetic only"
|
||||
"command": "python3 -B tools/test_p08_migration_evidence.py (first run)",
|
||||
"exit_code": 1,
|
||||
"result": "2 tests; positive stale source map because worker changed README during test"
|
||||
},
|
||||
{
|
||||
"command": "git show fixed historical references (stdout SHA only; no Git writes)",
|
||||
"command": "python3 -B tools/test_p08_migration_evidence.py (stable-source rerun)",
|
||||
"exit_code": 0,
|
||||
"result": "both references matched original raw SHA and 1082602 bytes"
|
||||
"result": "2 tests in 33.523s, OK; synthetic only"
|
||||
}
|
||||
],
|
||||
"local_checks": {
|
||||
"ast_parse": "passed, three Python sources",
|
||||
"checker_tests": "2 tests passed in 34.514s; synthetic only, includes missing_start_stage and resource_delta_mismatch",
|
||||
"checker_tests": "2 tests passed in 33.523s; synthetic only; earlier concurrent edit produced stale-source failure",
|
||||
"native_or_full_regression_run": false
|
||||
},
|
||||
"pending_root_conditions": [
|
||||
@@ -224,8 +224,8 @@
|
||||
"fixture_sources": {
|
||||
"tests/s1/test_p08_combined_migration.gd": "9284a8cfb478b4c8d69f6d8166eec6c41107e3902029289b3c0e9ba48c370855",
|
||||
"tests/s1/test_p08_combined_migration.gd.uid": "8c3a70d0ce619b8cb98dc003eb6c53a31f167a686179a3ffc105f7cd4d856da5",
|
||||
"tests/fixtures/p08-02/README.md": "8a6b8dcde00be86e1ff96b29b255b586366e759a561b03e060b28e8713e210e0",
|
||||
"tests/fixtures/p08-02/mixed_world.gd": "e084d7aa6baf122089bd6f717af7e1e62de3c9930288439e6f51cc524bb55dde",
|
||||
"tests/fixtures/p08-02/README.md": "e88ca33fdb4e96602d1fb108d71a9c35b6fa054619ecf6f1396e9a6c5e0ebd98",
|
||||
"tests/fixtures/p08-02/mixed_world.gd": "a23f8a686be1d77e4874b9956eef89be4756f6e5eb01cc62454c3845acc62c25",
|
||||
"tests/fixtures/p08-02/reader.gd": "a760d0e45979d747dbd1f8710033bdce13287b00eb879d947d8378ff920ed1be",
|
||||
"tests/fixtures/p08-02/writer.gd": "1a918b5509773b4b07a27d47ee44583b0eb5288138f7bf896088a7913773c260",
|
||||
"tools/run_p08_mixed_migration.py": "7e86737e6354a4734726ba8d3171ad5f58d6c0380aba5a0fa3c57879d580e579",
|
||||
@@ -279,5 +279,15 @@
|
||||
"mismatch": "Previous zero added resources insufficient; no acceptance narrowed.",
|
||||
"git_history_verification": "Both fixed Git references raw SHA matched ab1fcf46ef73f2157f16f69394b4039a562c031fae8d407adca013a452226e2f, 1082602 bytes",
|
||||
"archive_verification": "Reuse Root supplied roundtrip evidence; archive not opened or executed."
|
||||
},
|
||||
"landing_repair": {
|
||||
"input": "ROOT_REPAIR_INPUT-r04.json",
|
||||
"ground": "initialized world paths within rank 1 bounds",
|
||||
"upper": "complete each stair pair before ordering next floor, using maximum registered build_minutes",
|
||||
"nearby_preflight": "rank bounds, registered stair definitions and existing completed logistics endpoints checked locally",
|
||||
"acceptance_sources": "all 18 retained; no omissions",
|
||||
"packet_limit_bytes": 500000,
|
||||
"packet_measurement": "pending Root actual submitted packet",
|
||||
"collection_timeout_seconds": 900
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+6
@@ -11,6 +11,12 @@ The fixture derives and records this deficit from the actual registry/catalogs
|
||||
in identity.diagnostic_budget before using the existing change_resources command.
|
||||
No price or production coefficient is changed.
|
||||
|
||||
Stair preparation proceeds from floor 1 through floor 3. Each pair finishes
|
||||
using the maximum registered stair build_minutes before the next floor is
|
||||
ordered. Ground landings use initialized world paths; upper landings are
|
||||
created by completed stairs through build_facility, with a local path check
|
||||
before each pair. Failed commands include kind, payload and result details.
|
||||
|
||||
The first legacy premium job progresses while the six actor/transport facets
|
||||
are prepared. The second is paid and reserved immediately before saving, with
|
||||
zero progress; the dormitory is already complete. All three stages share the
|
||||
|
||||
Vendored
+8
-2
@@ -21,7 +21,9 @@ func expect(ok: bool, label: String) -> bool:
|
||||
func command(kind: StringName, payload: Dictionary) -> bool:
|
||||
serial += 1
|
||||
var result: CommandResult = runtime.submit_command(kind, payload, &"player", &"", 0, -1, StringName("p08.%d" % serial))
|
||||
return expect(result.is_success(), String(kind) + ": " + result.message)
|
||||
var label := String(kind) + ": " + result.message
|
||||
if not result.is_success(): label += " payload=" + var_to_str(payload) + " details=" + var_to_str(result.details)
|
||||
return expect(result.is_success(), label)
|
||||
func registry(old: bool) -> void:
|
||||
var paths: Array[String] = FacilityCatalog.FACILITY_PATHS + FacilityCatalog.INFRASTRUCTURE_FACILITY_PATHS + FacilityCatalog.RESCUE_FACILITY_PATHS
|
||||
paths.append_array(["res://tests/fixtures/legacy_premium_room.tres", "res://tests/fixtures/legacy_staff_dormitory.tres"] if old else ["res://data/facilities/expansion/premium_room.tres", "res://data/facilities/expansion/staff_dormitory.tres"])
|
||||
@@ -102,9 +104,13 @@ func setup(operations: bool) -> bool:
|
||||
for row: Array in [[&"warehouse",Vector3i(-8,0,1)],[&"kitchen",Vector3i(2,0,1)],[&"infirmary",Vector3i(6,0,1)],[&"staff_door",Vector3i(0,0,1)],[&"reception",Vector3i(-6,0,0)],[&"reception",Vector3i(5,0,0)],[&"guest_elevator",Vector3i.ZERO]]:
|
||||
if not build(row[0],row[1],false): return false
|
||||
clock.advance_minutes(180)
|
||||
# Completed stairs supply the next floor's landing through the domain projector.
|
||||
# Ground-floor landings come from the initialized world; never inject path cells.
|
||||
var stair_minutes: int = maxi(runtime.definition_registry.get_facility(&"service_stairs").build_minutes,runtime.definition_registry.get_facility(&"guest_stairs").build_minutes)
|
||||
for y: int in [1,2,3]:
|
||||
if not expect(runtime.path_service.has_cell(Vector3i(-9,y-1,1)) and runtime.path_service.has_cell(Vector3i(4,y-1,0)),"completed lower stair landings for floor %d" % y): return false
|
||||
if not build(&"service_stairs",Vector3i(-9,y,1),false) or not build(&"guest_stairs",Vector3i(4,y,0),false): return false
|
||||
clock.advance_minutes(runtime.definition_registry.get_facility(&"guest_stairs").build_minutes)
|
||||
clock.advance_minutes(stair_minutes)
|
||||
if not build(&"staff_dormitory",Vector3i(-8,2,1)): return false
|
||||
identity[&"dorm"] = instance(&"staff_dormitory").instance_id
|
||||
if not build(&"premium_room",Vector3i(-6,2,0),false): return false
|
||||
|
||||
Reference in New Issue
Block a user