P08-03: 配置の通常操作受入
This commit is contained in:
@@ -310,3 +310,18 @@ Final repair10 SHA-256 pins (local controls only):
|
||||
- `tools/regression/suite-policy.json`: `a74dc701155b6207bc23095296d723928f62719fce14fda392b12f9947007fb1`
|
||||
- Complete source/input manifest: `9f3e7ddb8cecf53d668dd4556f504e4fba26b29fb81dfe4b583ab060c6e6a9c8`
|
||||
- Final local validation: `ef88dee24a9796600d6d90c6a0ae563c8d06f039231dae6db01d1f96ede2055b` (83 checker tests / 0 failures; four Python syntax checks passed).
|
||||
|
||||
## Repair11 nullable RefCounted observer (current submission)
|
||||
|
||||
R08 writer PID 75240 failed before the initial manual load; its real palette click and raw failure proof are retained as historical diagnostics only. InputObserver.endpoint now accepts the RefCounted passive recorder and retains its null guard. Modal observers explicitly keep endpoint null, record null_modal_receipts_only in observed.json, queue_free and restore the root observer. No modal cell dispatch or product handler calls were added. Both placement fixtures were reread for typed assignments; no further Node/RefCounted mismatch was found by local inspection. Godot parsing remains pending.
|
||||
|
||||
Final source/input pins are in repair11-local-source-manifest.json and implementation.json. Only passive_placement.gd and the Python test source changed since Repair10. The passive fixture input SHA change invalidates native/OS evidence whose input map includes it; recollect the full5 set. R08 palette/UI4 proof is retained and may be reused only after exact actual source/input/engine/marker applicability checks; no blanket inherited PASS.
|
||||
|
||||
Root order: actual native startup with initial manual menu load, profile JSON and no SCRIPT ERROR; then full5 native/OS writer and reader with distinct PIDs; then mandatory frozen full175 regression. Separate Opus review, integration/current verification/ledger and Windows platform acceptance remain pending. All five conditions remain unaccepted. No Godot, native, full regression, git writes, Runner operations or agents were performed by this worker. Local Python syntax and checker results are recorded in repair11-local-validation.json.
|
||||
|
||||
Repair11 final pins and local results:
|
||||
|
||||
- passive_placement.gd: `cdbd9a09b535d00a79aec7e2b7219f4daa4cf235449602b3cd02c6f12d9df88c`
|
||||
- test_p08_normal_placement_evidence.py: `b8189b2b4bf15933d7e3e760495928b6a5a7ec5b0400a1c5198427d1cb0a3408`
|
||||
- Complete source/input manifest: `0d33515d9ef33656fe13aab3f417a18a2b602047d6eb013b3f6b896f0330edf6`
|
||||
- Local validation: `188d61cb4e23211646cc9808bfb924bc56fe66f1fb7ef0534584740dcfcd9561`; 88 tests, 0 failures; four syntax checks passed. These controls establish no gameplay acceptance.
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"unit": "P08-03",
|
||||
"candidate": "4f3b42dfeca478d2398407373d75b529eb76fcf0",
|
||||
"affected_ui4": "pass exact source/engine/marker matched, both stages guarded",
|
||||
"native4": "import/parse/handler writer/reader passed before OS",
|
||||
"OS_writer_pid": 75240,
|
||||
"owned_collector_pid": 73669,
|
||||
"failure": "SCRIPT ERROR Invalid assignment endpoint RefCounted(passive_placement.gd) on Node(InputObserver), setup:96",
|
||||
"root_cua": "one genuine palette click; raw proof retained; initial load had not executed so not valid acceptance",
|
||||
"source": "InputObserver.endpoint is Node; Passive extends placement.gd extends RefCounted",
|
||||
"collection": "Root exact owned collector SIGINT after native error; no further UI/acks; no source modification",
|
||||
"output": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p08-03-native-os-r08",
|
||||
"formal_acceptance": false
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org
|
||||
OpenGL API 4.1 Metal - 90.5 - Compatibility - Using Device: Apple - Apple M4
|
||||
|
||||
SCRIPT ERROR: Invalid assignment of property or key 'endpoint' with value of type 'RefCounted (passive_placement.gd)' on a base object of type 'Node (InputObserver)'.
|
||||
at: setup (res://tests/fixtures/p08-03/passive_placement.gd:96)
|
||||
GDScript backtrace (most recent call first):
|
||||
[0] setup (res://tests/fixtures/p08-03/passive_placement.gd:96)
|
||||
[1] run (res://tests/fixtures/p08-03/placement.gd:279)
|
||||
[2] run (/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p08-03-native-os-r08/os-runs/writer/passive_os.gd:6)
|
||||
P08_ROOT_CUA_WAIT /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p08-03-native-os-r08/os-pair/writer-request-0001/request.json
|
||||
P08_ROOT_CUA_WAIT /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p08-03-native-os-r08/os-pair/writer-request-0002/request.json
|
||||
@@ -25,7 +25,7 @@
|
||||
"scenes/main/main.gd": "36316f9edc170ba965eb2f595a740ae7fcc8914e4090f0351c0cec181d6a7431",
|
||||
"scenes/main/world_preview.gd": "2f0e417ae2ff1745062bdbdcec74b3b058cfcffbbd9001ca3e6a62cd23efb47d",
|
||||
"tests/fixtures/p08-03/checker_fixture.py": "e83a94dfcfd490a99bd44ed71bd6c378de94413750cfce68dea938bfbbbf011f",
|
||||
"tests/fixtures/p08-03/passive_placement.gd": "4bf9e4cf0424c2965d28c378e07f00fdb8388f4e3f51975a92128bd0e921242d",
|
||||
"tests/fixtures/p08-03/passive_placement.gd": "cdbd9a09b535d00a79aec7e2b7219f4daa4cf235449602b3cd02c6f12d9df88c",
|
||||
"tests/fixtures/p08-03/passive_placement.gd.uid": "f75e3f2d9555c30cee3a1de882f32225fc624565a78a7ef3f5c604325c578ce3",
|
||||
"tests/fixtures/p08-03/placement.gd": "1ebaaa80784905d661954e255bfb8a96a3a963a57b9a38b19e7f91b90fb628b3",
|
||||
"tests/fixtures/p08-03/placement.gd.uid": "5caca08c1e627e0ca07e2ab7b13bd82b24a22f77513fe87e30b79023568e1987",
|
||||
@@ -34,7 +34,7 @@
|
||||
"tools/check_p08_normal_placement_evidence.py": "e3fea19be9952cd99be4df003734c43e6f81580b79984addb3622d81c1a2cc4e",
|
||||
"tools/regression/suite-policy.json": "a74dc701155b6207bc23095296d723928f62719fce14fda392b12f9947007fb1",
|
||||
"tools/run_p08_normal_placement.py": "5cb1f58664a0bec71c8b5e853749d1c3656e0a2a027201e33fbaa6b0c0291fc6",
|
||||
"tools/test_p08_normal_placement_evidence.py": "f75ce5a2aeee080864d252dc4285e32f107ce0b48b7f62dd598665a13ffa5637",
|
||||
"tools/test_p08_normal_placement_evidence.py": "b8189b2b4bf15933d7e3e760495928b6a5a7ec5b0400a1c5198427d1cb0a3408",
|
||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/NATIVE_R02_READER_OPERATION_DELTA.json": "60463e735d4f473bdad7b0925c37b9ca71ee34d6f0eb74ea6c07b508b5153e41",
|
||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/native-r02-reader-stderr.log": "8079b3dc2ba7b9a9c37fcd9a5a8df0971354027c60def4b95fb15c7310832040",
|
||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/OS_R04_INITIAL_LOAD_ORACLE_FINDING.json": "6a796bd63f5a16bd0bf0fcf07cec3f4414a5e6704409a79522a2677eae53b417",
|
||||
@@ -44,10 +44,10 @@
|
||||
"tests/fixtures/p08-03/r05-reader-checkpoint-provenance.json": "daf034375facf36e9cc8da4ec0001d7c7b017c315a9155680b4b490e582ec5b9"
|
||||
},
|
||||
"executed_source_manifest": {
|
||||
"path": "repair10-local-source-manifest.json",
|
||||
"sha256": "9f3e7ddb8cecf53d668dd4556f504e4fba26b29fb81dfe4b583ab060c6e6a9c8",
|
||||
"path": "repair11-local-source-manifest.json",
|
||||
"sha256": "0d33515d9ef33656fe13aab3f417a18a2b602047d6eb013b3f6b896f0330edf6",
|
||||
"source_file_count": 1328,
|
||||
"contains": "Complete final local source and fixture/evidence inputs; no material-size omission; Python-only execution"
|
||||
"contains": "Complete final local source and fixture/input manifest; Python-only validation; no size omissions"
|
||||
},
|
||||
"final_input_sha256": {
|
||||
"AGENTS.md": "8d8dc40211390275f858f322743309a0663c4f2d859780a8b8a08cea1450e8b3",
|
||||
@@ -70,7 +70,7 @@
|
||||
"docs/spec/acceptance/P08-03.json": "37a6a581b5a9bbe03c07a3a266b03df1f740ff488da33ecd9bd60f5b32f1efe1",
|
||||
"docs/traceability/original/BASELINE.txt": "75e4bdbdeb379c9269553f0c776bdb9cc96e01f2d6aa5ca650d132c63a8aeb1a",
|
||||
"tests/fixtures/p08-03/checker_fixture.py": "e83a94dfcfd490a99bd44ed71bd6c378de94413750cfce68dea938bfbbbf011f",
|
||||
"tests/fixtures/p08-03/passive_placement.gd": "4bf9e4cf0424c2965d28c378e07f00fdb8388f4e3f51975a92128bd0e921242d",
|
||||
"tests/fixtures/p08-03/passive_placement.gd": "cdbd9a09b535d00a79aec7e2b7219f4daa4cf235449602b3cd02c6f12d9df88c",
|
||||
"tests/fixtures/p08-03/passive_placement.gd.uid": "f75e3f2d9555c30cee3a1de882f32225fc624565a78a7ef3f5c604325c578ce3",
|
||||
"tests/fixtures/p08-03/placement.gd": "1ebaaa80784905d661954e255bfb8a96a3a963a57b9a38b19e7f91b90fb628b3",
|
||||
"tests/fixtures/p08-03/placement.gd.uid": "5caca08c1e627e0ca07e2ab7b13bd82b24a22f77513fe87e30b79023568e1987",
|
||||
@@ -78,12 +78,11 @@
|
||||
"tests/fixtures/p08-03/r05-reader-checkpoint.json.gz": "27fd3b41834106ccd6a0980dfa2bc91cc19806dd3f552ba04246efb400763233"
|
||||
},
|
||||
"actual_local_validation": {
|
||||
"path": "repair10-local-validation.json",
|
||||
"sha256": "ef88dee24a9796600d6d90c6a0ae563c8d06f039231dae6db01d1f96ede2055b",
|
||||
"python_syntax": "pass: four final Python sources parsed in memory",
|
||||
"checker_control_tests": 83,
|
||||
"path": "repair11-local-validation.json",
|
||||
"sha256": "188d61cb4e23211646cc9808bfb924bc56fe66f1fb7ef0534584740dcfcd9561",
|
||||
"python_syntax": "pass: four Python sources parsed in memory",
|
||||
"checker_control_tests": 88,
|
||||
"checker_exit_code": 0,
|
||||
"log_sha256": "b3d9829ba6d23abf088f52231aef135d29b6d6dc3513a3d850ade9c2217316f9",
|
||||
"native_OS_full_regression": "not executed"
|
||||
},
|
||||
"conditions": {
|
||||
@@ -129,15 +128,11 @@
|
||||
}
|
||||
},
|
||||
"pending": [
|
||||
"Root clean exact candidate freeze",
|
||||
"Root affected native UI suites: test_main_dashboard and test_p08_normal_placement_ops before frozen final native/OS/full-175 regression",
|
||||
"Godot parsing and actual handler execution",
|
||||
"Root isolated native writer/reader and ordinary owner/audio proof",
|
||||
"Root real CUA input/screenshots/receipts and passive observations",
|
||||
"verify-only on actual collected evidence",
|
||||
"impact checks and final full regression after source freeze",
|
||||
"independent Opus review of all five conditions",
|
||||
"integration/current final verification and ledger",
|
||||
"Root actual native startup: initial manual menu load/profile JSON/no SCRIPT ERROR",
|
||||
"Root frozen full5 native/OS writer/reader with distinct PIDs and verify-only",
|
||||
"Root mandatory final full175 regression",
|
||||
"Independent Opus review of all five conditions",
|
||||
"Integration/current final verification and ledger",
|
||||
"Windows same-distribution/device global platform acceptance"
|
||||
],
|
||||
"not_executed": [
|
||||
@@ -297,6 +292,28 @@
|
||||
],
|
||||
"raw_failed_proof_edited": false,
|
||||
"native_OS_full_175_Opus_review_integration": "pending"
|
||||
},
|
||||
"repair11": {
|
||||
"authority": "ROOT_NATIVE_OS_R08_ENDPOINT_TYPE_FAILURE.json",
|
||||
"writer_pid": 75240,
|
||||
"changes": [
|
||||
"RefCounted nullable endpoint; root remains guarded/read-only",
|
||||
"Explicit null modal endpoint with observed.json attribution; cleanup/restore retained",
|
||||
"Static source contract positive and corruption negatives"
|
||||
],
|
||||
"typed_assignment_audit": "Both fixtures reread: SceneTree tree <- p_tree; Node input_observer/old_observer <- InputObserver; Window/Control/Button/WorldPreview <- scene nodes; RefCounted endpoint <- passive self; remaining typed fields are Variant, primitive, vectors, arrays and dictionaries. No other Node/RefCounted mismatch found by local inspection; engine parsing pending.",
|
||||
"changed_source_files": [
|
||||
"tests/fixtures/p08-03/passive_placement.gd",
|
||||
"tools/test_p08_normal_placement_evidence.py"
|
||||
],
|
||||
"reuse": "R08 affected UI4 and palette raw proof retained, reuse only on exact source/engine/marker and actual input applicability. passive_placement.gd input SHA changed: native/OS full5 evidence using checker input_map or passive recorder requires recollection. No current acceptance inferred from R08 aborted initial load.",
|
||||
"root_order": [
|
||||
"actual native startup: manual menu load/profile JSON/no SCRIPT ERROR",
|
||||
"full5 native OS writer/reader with distinct PIDs",
|
||||
"mandatory final full175"
|
||||
],
|
||||
"Opus_review_integration_Windows": "pending",
|
||||
"worker_git_writes": false
|
||||
}
|
||||
},
|
||||
"caps": {
|
||||
|
||||
+6679
File diff suppressed because it is too large
Load Diff
+32
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"task_id": "P08-03",
|
||||
"repair": "Repair11",
|
||||
"python_syntax": {
|
||||
"status": "pass",
|
||||
"method": "ast.parse in memory",
|
||||
"paths": [
|
||||
"tools/run_p08_normal_placement.py",
|
||||
"tools/check_p08_normal_placement_evidence.py",
|
||||
"tools/test_p08_normal_placement_evidence.py",
|
||||
"tests/fixtures/p08-03/checker_fixture.py"
|
||||
]
|
||||
},
|
||||
"checker": {
|
||||
"command": "python3 -B tools/test_p08_normal_placement_evidence.py",
|
||||
"tests": 88,
|
||||
"failures": 0,
|
||||
"exit_code": 0,
|
||||
"elapsed_seconds": 71.298,
|
||||
"output": "Ran 88 tests in 71.298s; OK",
|
||||
"scope": "Python synthetic whole checker, historical checkpoint and static fixture controls only"
|
||||
},
|
||||
"not_executed": [
|
||||
"Godot",
|
||||
"native/OS",
|
||||
"full175",
|
||||
"Runner",
|
||||
"independent review",
|
||||
"integration"
|
||||
],
|
||||
"source_manifest_sha256": "0d33515d9ef33656fe13aab3f417a18a2b602047d6eb013b3f6b896f0330edf6"
|
||||
}
|
||||
+3
-1
@@ -9,7 +9,7 @@ var last_dispatch: Dictionary = {}
|
||||
|
||||
class InputObserver extends Node:
|
||||
var events: Array = []
|
||||
var endpoint: Node
|
||||
var endpoint: RefCounted = null
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event is InputEventMouseButton or event is InputEventKey:
|
||||
var row := {"ticks_usec": Time.get_ticks_usec(), "text": event.as_text(), "pressed": event.is_pressed()}
|
||||
@@ -53,6 +53,7 @@ func request(action: Dictionary) -> void:
|
||||
if event.has("dispatch"):
|
||||
last_dispatch = event["dispatch"]
|
||||
json_file(stem + "/observed.json", {"pid": OS.get_process_id(), "sequence": serial,
|
||||
"observer_endpoint": "null_modal_receipts_only" if input_observer.endpoint == null else "passive_read_only_dispatch",
|
||||
"events": input_observer.events.slice(first_event), "status": main.build_status_label.text})
|
||||
receipts.append("os-pair/" + stem + "/ack.json")
|
||||
all_requests.append("os-pair/" + stem + "/ack.json")
|
||||
@@ -132,6 +133,7 @@ func button(node: BaseButton) -> void:
|
||||
var old_observer: Node = input_observer
|
||||
if node.get_window() != main.get_window():
|
||||
input_observer = InputObserver.new()
|
||||
input_observer.endpoint = null # Modal receipts only; never dispatch world cells.
|
||||
node.get_window().add_child(input_observer)
|
||||
var action := point(node)
|
||||
action.merge({"action": "button", "instructions": "Click the named button through CUA; capture before/after screenshots."})
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Whole-checker positive and semantic corruption tests; synthetic proof only."""
|
||||
import copy
|
||||
import re
|
||||
import importlib.util
|
||||
import json
|
||||
from pathlib import Path
|
||||
@@ -27,6 +28,52 @@ C = module('placement_checker_test', ROOT/'tools/check_p08_normal_placement_evid
|
||||
F = module('placement_synthetic_fixture', ROOT/'tests/fixtures/p08-03/checker_fixture.py')
|
||||
D = module('placement_collector_test', ROOT/'tools/run_p08_normal_placement.py')
|
||||
|
||||
def check_passive_endpoint_types(passive, placement):
|
||||
"""Focused source contract; native parsing and startup remain pending."""
|
||||
if not re.search(r'^extends RefCounted\s*$', placement, re.M):
|
||||
raise ValueError('placement inheritance')
|
||||
observer = passive.split('class InputObserver extends Node:', 1)[1].split('\nfunc ', 1)[0]
|
||||
field = re.search(r'^\tvar endpoint:\s*(\w+)', observer, re.M)
|
||||
if not field or field[1] not in ('RefCounted', 'Object', 'Variant'):
|
||||
raise ValueError('incompatible RefCounted endpoint')
|
||||
if 'endpoint != null' not in observer:
|
||||
raise ValueError('missing null guard')
|
||||
if not re.search(r'input_observer\.endpoint\s*=\s*self', passive):
|
||||
raise ValueError('missing root endpoint')
|
||||
modal = passive.split('func button(', 1)[1].split('\nfunc ', 1)[0]
|
||||
if not re.search(r'input_observer\.endpoint\s*=\s*null', modal):
|
||||
raise ValueError('modal endpoint must remain null')
|
||||
if 'input_observer.queue_free()' not in modal or 'input_observer = old_observer' not in modal:
|
||||
raise ValueError('modal cleanup/restore')
|
||||
if 'null_modal_receipts_only' not in passive:
|
||||
raise ValueError('missing modal attribution')
|
||||
|
||||
|
||||
class PassiveTypingTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.passive = (ROOT/'tests/fixtures/p08-03/passive_placement.gd').read_text()
|
||||
self.placement = (ROOT/'tests/fixtures/p08-03/placement.gd').read_text()
|
||||
|
||||
def test_actual_fixture_types(self):
|
||||
check_passive_endpoint_types(self.passive, self.placement)
|
||||
|
||||
def test_node_endpoint_rejected(self):
|
||||
with self.assertRaisesRegex(ValueError, 'incompatible RefCounted'):
|
||||
check_passive_endpoint_types(self.passive.replace('endpoint: RefCounted', 'endpoint: Node'), self.placement)
|
||||
|
||||
def test_missing_guard_rejected(self):
|
||||
with self.assertRaisesRegex(ValueError, 'null guard'):
|
||||
check_passive_endpoint_types(self.passive.replace('endpoint != null', 'true'), self.placement)
|
||||
|
||||
def test_modal_dispatch_rejected(self):
|
||||
with self.assertRaisesRegex(ValueError, 'modal endpoint'):
|
||||
check_passive_endpoint_types(self.passive.replace('input_observer.endpoint = null', 'input_observer.endpoint = self'), self.placement)
|
||||
|
||||
def test_modal_cleanup_rejected(self):
|
||||
with self.assertRaisesRegex(ValueError, 'cleanup/restore'):
|
||||
check_passive_endpoint_types(self.passive.replace('input_observer.queue_free()', 'pass'), self.placement)
|
||||
|
||||
|
||||
class EvidenceTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
scratch = ROOT/'tests/fixtures/p08-03/.scratch'
|
||||
|
||||
Reference in New Issue
Block a user