P08-03: 配置の通常操作受入

This commit is contained in:
Agent Control Runner
2026-10-14 06:20:46 +09:00
parent d01286360e
commit 0c5e0022f2
12 changed files with 6899 additions and 42 deletions
+3 -1
View File
@@ -18,6 +18,7 @@ HERE = Path(__file__).resolve().parent
CONTRACT = 'docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json'
CONDITIONS = ('support_connection', 'invalid_position_reason', 'demolish_rebuild',
'pan_zoom_world_identity', 'separate_pid_resume')
OS_CHILD_TIMEOUT_SECONDS = 2400
RECORDER = 'docs/plans/original-completion-2026-10-02/execution/p08-03/passive_os_placement_recorder.gd'
def collect_os(r, root, out, stage, engine, commit, refs, protected, outer):
@@ -68,6 +69,7 @@ def collect_os(r, root, out, stage, engine, commit, refs, protected, outer):
'default_before':protected, 'command':command, 'engine_sha256':r.sha(engine),
'controller_sha256':r.sha(root/'tools/run_p08_normal_placement.py'),
'recorder_sha256':r.sha(recorder), 'formal_acceptance':False,
'timeout_seconds':OS_CHILD_TIMEOUT_SECONDS,
'environment':{k:v for k,v in env.items() if k.startswith(('P08_', 'THE_TREE_'))},
'environment_sha256':hashlib.sha256(json.dumps(env,sort_keys=True).encode()).hexdigest()}
r.write(folder/'started.json', base)
@@ -81,7 +83,7 @@ def collect_os(r, root, out, stage, engine, commit, refs, protected, outer):
monotonic_ns=time.monotonic_ns(), state='waiting_for_root_cua_requests'))
print(json.dumps({'actual_pid':process.pid, 'request_directory':str(pair),
'state':'waiting_for_root_cua', 'role':role}), flush=True)
exit_code = process.wait(timeout=900)
exit_code = process.wait(timeout=base['timeout_seconds'])
r.require(exit_code == 0, 'ordinary native OS exit0')
raw = (folder/'engine-native.log').read_text()
r.require('ERROR:' not in raw and 'SCRIPT ERROR:' not in raw, 'OS native diagnostics')
+12 -2
View File
@@ -375,6 +375,10 @@ class EvidenceTests(unittest.TestCase):
def collector_mock(self, fail_wait=False):
"""No native engine: Popen, profiles, live engine probes are all mocked."""
expected2400 = 2400
self.assertEqual(expected2400, D.OS_CHILD_TIMEOUT_SECONDS)
def assert2400(receipt):
self.assertEqual(expected2400, receipt['timeout_seconds'])
output = Path(self.temp.name)/'mock-collection'
stage = output/'stage'; stage.mkdir(parents=True)
shutil.copyfile(self.root/'project.godot',stage/'project.godot')
@@ -392,9 +396,10 @@ class EvidenceTests(unittest.TestCase):
profile_text = (stage/'project.godot').read_text()
name = __import__('re').search(r'config/custom_user_dir_name="([^"]+)"',profile_text).group(1)
pid = 801+len(captured)
process = SimpleNamespace(pid=pid)
process = SimpleNamespace(pid=pid, role=role)
def wait(timeout):
self.assertEqual(900,timeout)
self.assertEqual(expected2400,timeout)
assert2400(C.load(output/('os-runs/'+role+'/started.json')))
if fail_wait:
raise TimeoutError('mock Root acknowledgement timeout')
kw['stdout'].write('P08 passive OS placement: 2 checks, 0 failures\n')
@@ -425,6 +430,11 @@ class EvidenceTests(unittest.TestCase):
self.assertEqual([p.pid for p in captured],cleaned)
self.assertEqual(public,(stage/'project.godot').read_bytes())
self.assertTrue((output/'os-runs/writer/ended.json').exists())
self.assertEqual(['writer'] if fail_wait else ['writer', 'reader'],
[p.role for p in captured])
for process in captured:
for event in ('started', 'ended'):
assert2400(C.load(output/('os-runs/'+process.role+'/'+event+'.json')))
def test_mock_native_controller_two_private_pids(self):
self.collector_mock()