Record approved P04 boundary policies and current acceptance evidence

This commit is contained in:
Takeshi
2026-10-15 23:08:38 +09:00
parent afde233203
commit c4bc9b44e9
40 changed files with 743 additions and 18 deletions
@@ -1,7 +1,7 @@
{
"plan_id": "P23-03",
"candidate": "9a26f9ab8c6691ba3cbe32ac4bc4525f4a9c7106",
"updated_at": "2026-10-15T19:18:48.284515+09:00",
"updated_at": "2026-10-15T13:57:15.232096+00:00",
"original_denominator": {
"packages": 30,
"delivery_units": 88,
@@ -129,7 +129,7 @@
"Retain P08/P22 package dependencies in plan. Available unit inputs: integrated P08-02/03, P22-01 inventory, current Runtime/report definitions and existing Kenney/code art. Unavailable P08-01 geometry/production values, D08/D09 quantities, P22-02/03 asset work remain explicitly open; they may not be silently considered done.",
"No Runtime/service/production data values or new assets. No visual redesign or new UI entry. Necessary existing renderer/read-only presentation wiring and evidence only."
],
"current_summary": "提出9a26f9aはRoot局所108/native319parse/A+B/semantic17+17/component45に加え、同版全177/20533/179owned終了が成立。Root全1349source/stage/default保全を照合し全4491filesのSHA一致コピーをレビュー用buildへ公開。新normalOS/画像判断/登録validate/全条件Opusreview/統合final未達、正式0。Mac解除は既存質問、native接続はSCStream-3811。",
"current_summary": "9a26f9aの同一候補版nativeOS r14を実行。A保存/別PID読込とB保存の各プロセスはpassed/engine_ended。B別PID通常読込は画面確認したが画像倍率1とエンジン要求倍率2が一致せずRoot schema gate失敗、ACKせず既存timeout終了。収集exit1で正式0。原画像・失敗・各endedを保持。既存full177は同一候補版の範囲で再利用し、UI全条件独立レビュー・通常統合finalは未完了。",
"evidence": "ROOT_9A26F9A_NATIVE_IMPACT.json",
"component_evidence": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-03-component-impact-9a26f9a-r01/runner-ended.json",
"remaining_in_order": [
@@ -158,5 +158,11 @@
"publication": "ROOT_9A26F9A_FULL177_REVIEW_PUBLICATION.json",
"candidate_bound": "9a26f9ab8c6691ba3cbe32ac4bc4525f4a9c7106"
},
"registered_validator_scope": "Native/OS semantics/pixels/resume only; full177 is separately mandatory Root gate pinned and exposed to final reviewer."
"registered_validator_scope": "Native/OS semantics/pixels/resume only; full177 is separately mandatory Root gate pinned and exposed to final reviewer.",
"native_os_r14_latest": {
"path": "docs/plans/original-completion-2026-10-02/execution/p23-03/ROOT_9A26F9A_NATIVE_OS_R14_RESULT.json",
"sha256": "8e8393203389cda699c426cb812c76fc733da626dd6bdfee2d63fb463d7d2c2f",
"status": "failed_root_calibration_gate_and_B_reader_request_timeout",
"formal_credit": 0
}
}
@@ -0,0 +1,28 @@
{
"candidate": "9a26f9ab8c6691ba3cbe32ac4bc4525f4a9c7106",
"source_clean": true,
"free_before": 3328081920,
"required_free": 2535933721,
"source_bytes": 67966899,
"source_entries": 1349,
"reserve_policy": "1GiB OS +1200MiB nativeOS/profile/proof conservative +three source maps; no full regression repeat",
"actual_GUI_probe": "Finder AX and screenshot succeeded via current cua calls",
"argv": [
"/Users/korizatou114/Antigravity/環境構築/agent-control/.venv/bin/python",
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p23-03-code/P23-03-implement/tools/run_p23_life_observation.py",
"--project-root",
"/Users/korizatou114/Projects/TheTree-managed-worktrees/p23-03-code/P23-03-implement",
"--output",
"/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-03-native-os-9a26f9a-r14",
"--commit",
"9a26f9ab8c6691ba3cbe32ac4bc4525f4a9c7106",
"--godot",
"/Applications/Godot.app/Contents/MacOS/Godot",
"--input-mode",
"native_os",
"--collect"
],
"root_controller_pid": 21406,
"started_unix": 1792070402.180254,
"formal_credit": 0
}
@@ -0,0 +1,9 @@
{
"candidate": "9a26f9ab8c6691ba3cbe32ac4bc4525f4a9c7106",
"collector_pid": 21419,
"exit_code": 1,
"ended_unix": 1792072573.131893,
"free_after": 1891954688,
"formal_credit": 0,
"index_sha256": "07cf0b8880ab87efc090eaf329d80d2b2af0a4bf419eef00834aa87ece7303a1"
}
@@ -0,0 +1,8 @@
{
"actual_collector_pid": 21419,
"root_pid": 21406,
"output": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-03-native-os-9a26f9a-r14",
"candidate": "9a26f9ab8c6691ba3cbe32ac4bc4525f4a9c7106",
"state": "running",
"started_unix": 1792070402.1822479
}
@@ -0,0 +1,79 @@
{
"plan_id": "P23-03",
"candidate": "9a26f9ab8c6691ba3cbe32ac4bc4525f4a9c7106",
"recorded_at": "2026-10-15T13:57:15.232096+00:00",
"collection_exit_code": 1,
"formal_credit": 0,
"formal_acceptance": false,
"original_unit_complete": false,
"roles": [
{
"role": "A-reader",
"passed": true,
"engine_ended": true,
"exit_code": 0,
"receipt": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-03-native-os-9a26f9a-r14/os-runs/A-reader/ended.json",
"sha256": "8ab9f317f4064b604f4a5c2ae16d39d7a829618accdd0bd1cf74bf112b8bd99b"
},
{
"role": "A-writer",
"passed": true,
"engine_ended": true,
"exit_code": 0,
"receipt": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-03-native-os-9a26f9a-r14/os-runs/A-writer/ended.json",
"sha256": "e904f8289bbbe5ef07e9016d81c2e154514fd4b4e815c8fd39771a5d9a1e2c69"
},
{
"role": "B-reader",
"passed": false,
"engine_ended": true,
"exit_code": 1,
"receipt": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-03-native-os-9a26f9a-r14/os-runs/B-reader/ended.json",
"sha256": "434098b418e5d0eff6742685d3021d50901a44bf7f346a1fdee1834c150bb855"
},
{
"role": "B-writer",
"passed": true,
"engine_ended": true,
"exit_code": 0,
"receipt": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-03-native-os-9a26f9a-r14/os-runs/B-writer/ended.json",
"sha256": "1c6148c90fd23d9c5e9543b64a1b41fb792c5ce7bc8a2887c41b2ee4b1a78fab"
}
],
"observed_load": "B-reader normal menu loaded saved 18:01, gold 200, visitors 50, lodging 47; visual observation only, not accepted evidence.",
"root_gate": {
"passed": false,
"error": "ValueError: calibrated engine scale",
"request_screen_scale": 2.0,
"actual_screenshot_calibration": {
"window_size": [
1440,
810
],
"window_position": [
1664,
574
],
"screenshot_pixels": [
1440,
874
],
"backing_scale": 1,
"titlebar_pixels": 64,
"canvas_stretch": 1
},
"ack_published": false,
"receipt_sha256": "1bd9cf0f075231d54cef4d61e249e14082c72d68de9d7e7c6d930a9a2d0a7192",
"request_sha256": "63b6d1f57f140bcd39b188a07ec4fe6877c031841d866715e08ae169b6701f7f"
},
"collection_index": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-03-native-os-9a26f9a-r14/index.json",
"sha256": "07cf0b8880ab87efc090eaf329d80d2b2af0a4bf419eef00834aa87ece7303a1"
},
"collector_ended": {
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-03-native-os-9a26f9a-r14/runner-ended.json",
"sha256": "573b2407ba7081650d7f05626ef1264601aed4eebc808615d16ad2861b6a206e"
},
"handling": "No fake ACK, image resampling, frozen checker relaxation, receipt rewriting or new collection. Initial failed capture bytes retained separately. B-reader exhausted its existing request timeout; original collector ended with failure. A writer/reader and B writer local completion does not establish whole acceptance.",
"next": "Inspect platform screenshot/backing-scale applicability and ask actual Opus for bounded continuation. Reuse exact-version full177 and existing source evidence only when applicability holds. Finish P04 approved continuation and P18 normal integration independently."
}
@@ -0,0 +1,69 @@
"""Verify real load receipt point schema with frozen checker before atomic ACK."""
import hashlib
import importlib.util
import json
import os
from pathlib import Path
import sys
import time
sys.dont_write_bytecode = True
ROOT = Path(__file__).resolve().parents[5]
SOURCE = Path('/Users/korizatou114/Projects/TheTree-managed-worktrees/p23-03-code/P23-03-implement')
PROOF = ROOT / 'artifacts/original-completion-2026-10-02/p23-03-native-os-9a26f9a-r14'
def sha(path):
return hashlib.sha256(path.read_bytes()).hexdigest()
def main():
assert len(sys.argv) == 2 and sys.argv[1] in ('A', 'B')
layout = sys.argv[1]
folder = PROOF / 'os-pair' / layout / 'reader-request-0001'
assert not (folder / 'ack.json').exists()
request = json.loads((folder / 'request.json').read_bytes())
receipt = json.loads((folder / 'cua-receipt.json').read_bytes())
started = json.loads((PROOF / 'os-runs' / (layout + '-reader') / 'process-started.json').read_bytes())
assert request['target_pid'] == receipt['target_pid'] == started['actual_pid']
assert request['action'] == 'load_menu' and request['sequence'] == 1
assert receipt['request_sha256'] == sha(folder / 'request.json')
assert len(receipt['actual_calls']) == 2 and len(receipt['events']) == 2
first, second = [event['point'] for event in receipt['events']]
assert all(first[key] == request[key] for key in ('viewport', 'screen', 'viewport_to_screen'))
assert first['engine_measured'] is True and first['point_provenance'] == 'engine_request'
assert second['engine_measured'] is False and second['independently_calibrating'] is False
assert second['point_provenance'] == 'derived:screenshot_to_content_inverse_of_independent_calibration'
summary = receipt['calibration_summary']
assert summary['independent_click_events'] == 1 and summary['derived_click_events'] == 1
assert summary['derived_events_excluded_from_independent_count'] is True
path = SOURCE / 'tools/check_p23_life_observation_evidence.py'
spec = importlib.util.spec_from_file_location('frozen_9a26f9a_checker', path)
checker = importlib.util.module_from_spec(spec)
spec.loader.exec_module(checker)
_, width, height = checker.image_kind((folder / 'screen-before.png').read_bytes())
matrix = checker.screenshot_transform(receipt['calibration'], request, (width, height), [receipt])
for shot in receipt['screenshots']:
assert sha(PROOF / shot['path']) == shot['raw_sha256']
assert shot['tool_call_id'] in {call['call_id'] for call in receipt['actual_calls']}
assert request['requested_unix_ns'] <= receipt['timestamp_ns'] <= time.time_ns()
result = dict(scope='Root serialization gate only; not game acceptance', passed=True,
target_pid=request['target_pid'], checker_sha256=sha(path),
receipt_sha256=sha(folder / 'cua-receipt.json'), request_sha256=sha(folder / 'request.json'),
independent_click_events=1, derived_events_excluded_from_independent_count=1,
matrix=matrix, actual_call_ids=[call['call_id'] for call in receipt['actual_calls']],
generator_sha256=sha(Path(__file__)), argv=[sys.executable, str(Path(__file__).resolve()), layout])
with (folder / 'root-point-schema-check.json').open('x') as stream:
json.dump(result, stream, indent=2)
stream.write('\n')
ack = dict(target_pid=request['target_pid'], sequence=1,
request_sha256=sha(folder / 'request.json'),
input_receipt='os-pair/' + layout + '/reader-request-0001/cua-receipt.json',
timestamp_ns=time.time_ns())
pending = folder / '.ack.schema-checked.pending.json'
with pending.open('x') as stream:
json.dump(ack, stream)
stream.write('\n')
os.replace(pending, folder / 'ack.json')
print(json.dumps(dict(result, atomic_ack_published=True)))
if __name__ == '__main__':
main()
@@ -0,0 +1 @@
var p23R14DefineNonce='P23-R14-ATOMIC-DEFINE-20261015-2221';var p23R14Batch=async function batch(start,count,nonce){var call=await p23CurrentCall(nonce),root=batch.root,app=batch.app,results=[],tracePath=root+'/root-cua-trace.json',trace=[];try{trace=JSON.parse(await p23fs.readFile(tracePath,'utf8'));}catch(e){if(e.code!=='ENOENT')throw e;}for(var entry of [p23R14Init,batch.definition,batch.binding,call])if(entry&&!trace.some(x=>x.call_id===entry.call_id))trace.push(entry);await p23fs.writeFile(tracePath,JSON.stringify(trace,null,2));for(var seq=start;seq<start+count;seq++){if(seq>start)await app.getAXState({emit:false});var folder=batch.layout+'/'+batch.role+'-request-'+String(seq).padStart(4,'0'),dir=root+'/os-pair/'+folder,q,raw;try{raw=await p23fs.readFile(dir+'/request.json');q=JSON.parse(raw.toString('utf8'));}catch(e){if(e.code==='ENOENT'||e instanceof SyntaxError){results.push({sequence:seq,state:'next request not ready; no input'});break;}throw e;}if(q.target_pid!==batch.pid||q.role!==batch.role||q.sequence!==seq)throw Error('Request identity changed; no input');if(!['click','wheel','screenshot'].includes(q.action)){results.push({sequence:seq,state:'separate observed action required',action:q.action});break;}try{await p23fs.access(dir+'/ack.json');throw Error('Already ACKed; no duplicate input');}catch(e){if(e.code!=='ENOENT')throw e;}var before=await app.getScreenshot({emit:false});await p23fs.writeFile(dir+'/screen-before.png',before,{flag:'wx'});var size=p23Size(before),scale=size[0]/q.window_size[0],title=size[1]-q.window_size[1]*scale,stretch=Math.min(q.window_size[0]/1440,q.window_size[1]/810);if(q.window_size[0]!==1440||q.window_size[1]!==810)throw Error('Nondefault content size requires fresh independent calibration; no input');if(title<0||title>96*q.screen_scale)throw Error('Invalid screenshot calibration');var geometry={window_size:q.window_size,window_position:q.window_position,screenshot_pixels:size,backing_scale:scale,titlebar_pixels:title,canvas_stretch:stretch};var logical=q.point?.screen,pt=logical?[logical[0]*stretch*scale,logical[1]*stretch*scale+title]:null,events=[];if(pt&&(pt[0]<0||pt[1]<title||pt[0]>=size[0]||pt[1]>=size[1]))throw Error('Target outside screenshot');if(q.action==='click'){await app.click(pt);events.push({action:'click',coordinates:pt,point:q.point,calibration:geometry});}else if(q.action==='wheel'){await app.scroll(pt,q.direction,1);events.push({action:'wheel',coordinates:pt,direction:q.direction,ctrl:false,steps:1,calibration:geometry});}else events.push({action:'observe',purpose:q.id});await app.getAXState({emit:false});var after=await app.getScreenshot({emit:false});await p23fs.writeFile(dir+'/screen-after.png',after,{flag:'wx'});var stamp=Date.now()*1000000,started=JSON.parse(await p23fs.readFile(root+'/os-runs/'+batch.layout+'-'+batch.role+'/process-started.json','utf8'));var shots=[{path:'os-pair/'+folder+'/screen-before.png',raw_sha256:p23Hash(before),tool_call_id:call.call_id},{path:'os-pair/'+folder+'/screen-after.png',raw_sha256:p23Hash(after),tool_call_id:call.call_id}];var receipt={method:'native_os',tool_name:'mcp__cua_repl.js',tool_call_id:call.call_id,arguments:call.arguments,actual_calls:[call],timestamp_ns:stamp,collector_pid:started.owner_pid,target_pid:q.target_pid,events,screenshots:shots,calibration:geometry,request_sha256:p23Hash(raw),trace_source:p23SessionPath,helper_definition_call_id:batch.definition.call_id,binding_call_id:batch.binding?.call_id,acceptance:'pending'};await p23fs.writeFile(dir+'/cua-receipt.json',JSON.stringify(receipt,null,2),{flag:'wx'});var ack={target_pid:q.target_pid,sequence:q.sequence,request_sha256:p23Hash(raw),input_receipt:'os-pair/'+folder+'/cua-receipt.json',timestamp_ns:Date.now()*1000000};var pending=dir+'/.ack-'+seq+'-'+call.call_id+'.pending.json';await p23fs.writeFile(pending,JSON.stringify(ack),{flag:'wx'});await p23fs.rename(pending,dir+'/ack.json');results.push({sequence:seq,action:q.action,id:q.id,button:q.button_text,call_id:call.call_id,ack_publication:'atomic-rename'});batch.lastImage=after;}nodeRepl.write(results);if(batch.lastImage)await nodeRepl.emitImage(batch.lastImage);};p23R14Batch.root='/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-03-native-os-9a26f9a-r14';p23R14Batch.layout='A';p23R14Batch.role='writer';p23R14Batch.pid=null;p23R14Batch.definition=await p23CurrentCall(p23R14DefineNonce);await p23fs.writeFile('/Users/korizatou114/Projects/とりにく工房ゲーム制作部/docs/plans/original-completion-2026-10-02/execution/p23-03/root_cua_atomic_r14.js',p23R14Batch.definition.arguments.code+'\n');nodeRepl.write({defined:true,atomic_ack:true,call_id:p23R14Batch.definition.call_id,no_input:true});
File diff suppressed because one or more lines are too long