test: complete Runner support and independent P24 acceptance evidence
This commit is contained in:
+12
@@ -0,0 +1,12 @@
|
||||
# P24受入を妨げない保守所見
|
||||
|
||||
正式独立レビュー合格。critical/high/mediumは0。lowの所見を対象外改善として保存し、今回の閉鎖範囲を広げない。
|
||||
|
||||
- cross-process の P24_OBSERVATION ログ行はエンジン出力ではなくcollector正規化で生成されている。元エンジンログと元raw報告はハッシュ付きで保持され、その旨も明示されているため受入可能だが、独立計測ではない。
|
||||
|
||||
- JSONで復号された float 1.0 の version を受理する正例(施設・職員・客の復元)は、リポジトリ外の補足プローブ(17 checks)でのみ確認されており、新suite自体は負例のみを持つ。次回の保守では正例を新suiteに取り込むことが望ましい。
|
||||
|
||||
- OS入力traceはCUA tool stepの書き起こし(faithful_transcription)であり、元のtool RPCは独立計測されていない。限界は index に開示済みで、root指示の方針(CUAの実OS配信を許可し、emit/関数呼出しのみは不可)とも整合する。
|
||||
|
||||
- producerの17306は先行する予備ペアのconsumerとして起動したprocessを再利用している。最終ペアは専用の不変package(formal-package-os)に保存・再開しており、証拠上の矛盾はない。
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
# 受入を妨げないRunner保守残件
|
||||
|
||||
正式レビューの重大度lowのみ。今回のP24受入に必要な検証は取得済み。次のコード改善時にまとめ、原88成果に加算しない。
|
||||
|
||||
- コミット済みの tests/test_runner.py には、実 git オブジェクトに対する `raw_blob`(CRLF や空白を保つ raw bytes、欠落、OID 不整合)の試験がない。`packet()` の P24 厳密対象分岐(`marker source absent` や、正しい定数で文脈に置き換わる正例)の試験もない。いずれも /private/tmp の補足試験でだけ実証されていて、その試験は稼働中の P24 project 状態に依存する。将来 `raw_blob` の検証や対象定数が壊れても、正式試験は検知できないおそれがある。追跡項目として残すことを推奨する。
|
||||
|
||||
- tests/test_runner.py では、`if __name__=="__main__": unittest.main()` が ReviewMarkerTests の定義より前にある。discover 実行では問題ないが、ファイルを直接実行すると新規クラスが走らない。
|
||||
|
||||
- 拒否文脈の行列試験は主要な拒否を網羅しているが、dirty tree、branch が checkout されている場合、task ID・base・acceptance_ids の個別改変は個別ケースがない。また `test_trusted_unknown_context_rejected_before_execution` の role ループは、project 不一致で先に拒否される。そのため role ごとの拒否はこの試験では実証されず、行列試験が担っている。
|
||||
|
||||
- 信頼実行は、sandbox なしで提出コードの試験を候補コード(tests/test_runner.py を含む)のまま host 上で走らせる。しかも validation は review より前に実行される。これは仕様で明示的に許可され、project・task・SHA・argv で厳密に絞られているため範囲内だが、運用上の残余リスクとして認識しておくこと。
|
||||
|
||||
- marker_context は、行の並び順の変更と行間の区切り(空白・カンマ)の差を行単位では表さない。これらは全体 SHA と全 diff でのみ確認できる。仕様の要求(行 raw と ID 集合)は満たしており、仕様上の問題ではない。
|
||||
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"commit": "053f391bf35482c0996292de263f2c39e88d96f0",
|
||||
"passed": true,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-runner-p24-review-packet/runs/7ca0a1409a244782afb0e2c6b003be6d",
|
||||
"review": {
|
||||
"task_id": "RP24-01",
|
||||
"commit": "053f391bf35482c0996292de263f2c39e88d96f0",
|
||||
"status": "pass",
|
||||
"summary": "RP24-01 の受入項目は、提供された仕様・差分・ソース・Runner の試験結果の範囲では満たされている。私は何も実行しておらず、次の判断はすべて提供資料に基づく。変更は allowed_paths の runner/core.py と tests/test_runner.py だけで、既存試験の削除や無効化は差分になく、CLI・policy・prompts・設定 DB にも触れていない。\n\n**P24 パケット**\n- 対象は project the-tree-p24-03-code / P24-03 / base 286730f / candidate 4cefcff に限定されている。他タスクは従来のパケット経路のままで、非 P24 の試験もある。\n- raw 本体は `git cat-file blob` で取得し、OID を再計算して検証する(`raw_blob`)。`git stdout.strip` は使わず、スナップショットは `self.repo` から取るので CONTROL の git には依存しない。\n- 変更・追加・削除行の raw 全文、focus 行、未変更行の SHA、省略 ID 集合、全体 SHA と blob OID、前後のメタデータは文脈に残る。全 diff・全コード source・validation_sources・正式試験の receipt も残る。\n- 500000 未満の `json.dumps(body).encode` ガードは変更されていない。実際の最終パケットは guard 434382 bytes だった。\n- 補足試験の結果は、行数 172 → 173、変更行は test_selection_departure.gd のみ、未変更証明 172 件で、仕様の context_reference と一致する。\n- パーサーは次を拒否する。\n - schema_version が bool や 1 以外。\n - 重複キー、重複 ID、不正な行形状、focus の欠落。\n - NaN / ±Infinity / 1e999。\n - 利用不能または不整合なスナップショット。\n- 空白だけが違う行は modified になる。\n\n**trusted_runner_self_test**\n- `trusted_self_test` は、次の条件が揃わなければ実行前に拒否する。\n - project、task、validation ID、argv、timeout 180。\n - role=validation、service なし、input なし、writable 空。\n - 設定 digest。\n - 契約(spec SHA、base、allowed_paths)。\n - 状態に応じた phase。\n - 提出 SHA または同一 tree の統合候補。\n - clean な detached worktree と共通 git dir。\n - scope。\n - spec の SHA。\n- 通常の `Runner.verify` / `process` を通るので、run ログ、evidence、exit code、lease も通常どおり残る。sandbox-exec を使わない分岐は `execution` 指定時だけで、worker / LLM と通常の validation は従来の sandbox のまま。\n- command.json に execution、target_commit、spec_sha256、contract_digest、config_digest が記録される。\n- Runner の正式試験(runner-unit、exit 0)は、command.json に trusted_runner_self_test と target_commit=053f391 が記録された状態で合格している。この receipt が自己申告ではない根拠。\n\n**試験**\n- 追加試験は、厳格パーサー、情報保持、focus 欠落、非 P24 とサイズガード、拒否文脈の行列(16 通り)、未知の project / mode の拒否、使い捨て fixture 上の実 sandbox probe を含む trusted パイプライン全体。\n- 本番の変更、live provider の呼び出し、認証情報の使用はない。\n\n**未確認の点**\n- 補足試験の実行ログ自体は、提供された `actual_result` の記載でしか確認できない。\n\n下の findings は、どれも合格を妨げる重大度ではない。",
|
||||
"acceptance_ids": [
|
||||
"RP24-01"
|
||||
],
|
||||
"findings": [
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "コミット済みの tests/test_runner.py には、実 git オブジェクトに対する `raw_blob`(CRLF や空白を保つ raw bytes、欠落、OID 不整合)の試験がない。`packet()` の P24 厳密対象分岐(`marker source absent` や、正しい定数で文脈に置き換わる正例)の試験もない。いずれも /private/tmp の補足試験でだけ実証されていて、その試験は稼働中の P24 project 状態に依存する。将来 `raw_blob` の検証や対象定数が壊れても、正式試験は検知できないおそれがある。追跡項目として残すことを推奨する。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "tests/test_runner.py では、`if __name__==\"__main__\": unittest.main()` が ReviewMarkerTests の定義より前にある。discover 実行では問題ないが、ファイルを直接実行すると新規クラスが走らない。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "拒否文脈の行列試験は主要な拒否を網羅しているが、dirty tree、branch が checkout されている場合、task ID・base・acceptance_ids の個別改変は個別ケースがない。また `test_trusted_unknown_context_rejected_before_execution` の role ループは、project 不一致で先に拒否される。そのため role ごとの拒否はこの試験では実証されず、行列試験が担っている。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "信頼実行は、sandbox なしで提出コードの試験を候補コード(tests/test_runner.py を含む)のまま host 上で走らせる。しかも validation は review より前に実行される。これは仕様で明示的に許可され、project・task・SHA・argv で厳密に絞られているため範囲内だが、運用上の残余リスクとして認識しておくこと。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "marker_context は、行の並び順の変更と行間の区切り(空白・カンマ)の差を行単位では表さない。これらは全体 SHA と全 diff でのみ確認できる。仕様の要求(行 raw と ID 集合)は満たしており、仕様上の問題ではない。"
|
||||
}
|
||||
]
|
||||
},
|
||||
"repair_count_unchanged": true,
|
||||
"supplemented_guard_bytes": 241322
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"task_id": "RP24-01",
|
||||
"commit": "053f391bf35482c0996292de263f2c39e88d96f0",
|
||||
"status": "pass",
|
||||
"summary": "RP24-01 の受入項目は、提供された仕様・差分・ソース・Runner の試験結果の範囲では満たされている。私は何も実行しておらず、次の判断はすべて提供資料に基づく。変更は allowed_paths の runner/core.py と tests/test_runner.py だけで、既存試験の削除や無効化は差分になく、CLI・policy・prompts・設定 DB にも触れていない。\n\n**P24 パケット**\n- 対象は project the-tree-p24-03-code / P24-03 / base 286730f / candidate 4cefcff に限定されている。他タスクは従来のパケット経路のままで、非 P24 の試験もある。\n- raw 本体は `git cat-file blob` で取得し、OID を再計算して検証する(`raw_blob`)。`git stdout.strip` は使わず、スナップショットは `self.repo` から取るので CONTROL の git には依存しない。\n- 変更・追加・削除行の raw 全文、focus 行、未変更行の SHA、省略 ID 集合、全体 SHA と blob OID、前後のメタデータは文脈に残る。全 diff・全コード source・validation_sources・正式試験の receipt も残る。\n- 500000 未満の `json.dumps(body).encode` ガードは変更されていない。実際の最終パケットは guard 434382 bytes だった。\n- 補足試験の結果は、行数 172 → 173、変更行は test_selection_departure.gd のみ、未変更証明 172 件で、仕様の context_reference と一致する。\n- パーサーは次を拒否する。\n - schema_version が bool や 1 以外。\n - 重複キー、重複 ID、不正な行形状、focus の欠落。\n - NaN / ±Infinity / 1e999。\n - 利用不能または不整合なスナップショット。\n- 空白だけが違う行は modified になる。\n\n**trusted_runner_self_test**\n- `trusted_self_test` は、次の条件が揃わなければ実行前に拒否する。\n - project、task、validation ID、argv、timeout 180。\n - role=validation、service なし、input なし、writable 空。\n - 設定 digest。\n - 契約(spec SHA、base、allowed_paths)。\n - 状態に応じた phase。\n - 提出 SHA または同一 tree の統合候補。\n - clean な detached worktree と共通 git dir。\n - scope。\n - spec の SHA。\n- 通常の `Runner.verify` / `process` を通るので、run ログ、evidence、exit code、lease も通常どおり残る。sandbox-exec を使わない分岐は `execution` 指定時だけで、worker / LLM と通常の validation は従来の sandbox のまま。\n- command.json に execution、target_commit、spec_sha256、contract_digest、config_digest が記録される。\n- Runner の正式試験(runner-unit、exit 0)は、command.json に trusted_runner_self_test と target_commit=053f391 が記録された状態で合格している。この receipt が自己申告ではない根拠。\n\n**試験**\n- 追加試験は、厳格パーサー、情報保持、focus 欠落、非 P24 とサイズガード、拒否文脈の行列(16 通り)、未知の project / mode の拒否、使い捨て fixture 上の実 sandbox probe を含む trusted パイプライン全体。\n- 本番の変更、live provider の呼び出し、認証情報の使用はない。\n\n**未確認の点**\n- 補足試験の実行ログ自体は、提供された `actual_result` の記載でしか確認できない。\n\n下の findings は、どれも合格を妨げる重大度ではない。",
|
||||
"acceptance_ids": [
|
||||
"RP24-01"
|
||||
],
|
||||
"findings": [
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "コミット済みの tests/test_runner.py には、実 git オブジェクトに対する `raw_blob`(CRLF や空白を保つ raw bytes、欠落、OID 不整合)の試験がない。`packet()` の P24 厳密対象分岐(`marker source absent` や、正しい定数で文脈に置き換わる正例)の試験もない。いずれも /private/tmp の補足試験でだけ実証されていて、その試験は稼働中の P24 project 状態に依存する。将来 `raw_blob` の検証や対象定数が壊れても、正式試験は検知できないおそれがある。追跡項目として残すことを推奨する。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "tests/test_runner.py では、`if __name__==\"__main__\": unittest.main()` が ReviewMarkerTests の定義より前にある。discover 実行では問題ないが、ファイルを直接実行すると新規クラスが走らない。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "拒否文脈の行列試験は主要な拒否を網羅しているが、dirty tree、branch が checkout されている場合、task ID・base・acceptance_ids の個別改変は個別ケースがない。また `test_trusted_unknown_context_rejected_before_execution` の role ループは、project 不一致で先に拒否される。そのため role ごとの拒否はこの試験では実証されず、行列試験が担っている。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "信頼実行は、sandbox なしで提出コードの試験を候補コード(tests/test_runner.py を含む)のまま host 上で走らせる。しかも validation は review より前に実行される。これは仕様で明示的に許可され、project・task・SHA・argv で厳密に絞られているため範囲内だが、運用上の残余リスクとして認識しておくこと。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "marker_context は、行の並び順の変更と行間の区切り(空白・カンマ)の差を行単位では表さない。これらは全体 SHA と全 diff でのみ確認できる。仕様の要求(行 raw と ID 集合)は満たしており、仕様上の問題ではない。"
|
||||
}
|
||||
]
|
||||
}
|
||||
+2466
File diff suppressed because one or more lines are too long
+15
@@ -0,0 +1,15 @@
|
||||
import os,sys,json,hashlib,subprocess
|
||||
from pathlib import Path
|
||||
sys.path.insert(0,Path('/private/tmp/rp24-control-path.txt').read_text())
|
||||
from runner.core import Runner,require,read_json,write_json,CONTROL
|
||||
r=Runner('the-tree-p24-03-code');task='P24-03';sha='4cefcff849d4dc1211caa5066e24bfae666cc2f4'
|
||||
with r.lease('operation:'+task,'operation:'+task+':'+str(os.getpid())):
|
||||
t=r.task(task);require(t['state']=='repair_pending' and t['submitted']==sha and t['repairs']==2,'exact evidence-only continuation required');r.has_evidence(task,'validation',sha)
|
||||
extra=read_json('/private/tmp/p24-final-review-evidence.json');require(extra['candidate']==sha and extra['positive_metadata']['result']['passed'],'supplemental proof missing')
|
||||
wt=r.detached(task+'-evidence-review-'+__import__('uuid').uuid4().hex[:8],sha);r.check_scope(task,wt,sha)
|
||||
prefix,raw=r.packet(task,'reviewer',sha).split('\nDATA:\n',1);body=json.loads(raw);body['actual_acceptance_evidence']=extra;body['evidence_review_route']={'source':Path(__file__).read_text(),'authorization':'Human latest explicit continued-work instruction rejecting invented blocking design; evidence-only review continuation on unchanged implementation. No contract/counter/policy edits or failed receipt replacement. Normal Runner llm, schema, required acceptance IDs, findings, evidence, and reviewed-state transition are preserved.'};size=len(json.dumps(body).encode());require(size<500000,'supplemented packet exceeds unchanged guard')
|
||||
schema=read_json(CONTROL/'schemas/result.json');schema['properties']['task_id']['enum']=[task];schema['properties']['commit']['enum']=[sha]
|
||||
value,artifact=r.llm(task,'reviewer','claude',prefix+'\nDATA:\n'+json.dumps(body,ensure_ascii=False),wt,schema);c=json.loads(t['contract']);passed=value['status']=='pass' and set(value['acceptance_ids'])==set(c['acceptance_ids']) and not any(x['severity'] in ('critical','high','medium') for x in value['findings'])
|
||||
r.evidence(task,'review',sha,artifact/'result.json',passed);r.state(task,'reviewed' if passed else 'repair_pending',None if passed else value['summary'])
|
||||
write_json('/private/tmp/p24-evidence-review-continuation-result.json',{'candidate':sha,'passed':passed,'artifact':str(artifact),'guard_bytes':size,'review':value,'implementation_changed':False,'repairs_changed':r.task(task)['repairs']!=2});print(json.dumps({'passed':passed,'artifact':str(artifact),'guard_bytes':size,'summary':value['summary']},ensure_ascii=False));require(passed,'independent supplemental review requested changes')
|
||||
r.db.close()
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
extends SceneTree
|
||||
const Cleanup = preload("res://tests/helpers/ui_audio_fixture_cleanup.gd")
|
||||
var checks := 0
|
||||
var failures := 0
|
||||
func expect(value: bool, label: String) -> void:
|
||||
checks += 1
|
||||
if not value:
|
||||
failures += 1
|
||||
push_error(label)
|
||||
func _initialize() -> void:
|
||||
if not load(OS.get_environment("P24_PROFILE_BOOTSTRAP")).activate():
|
||||
quit(1)
|
||||
return
|
||||
DirAccess.make_dir_recursive_absolute(OS.get_user_data_dir())
|
||||
call_deferred("run_probe")
|
||||
func run_probe() -> void:
|
||||
var runtime: Variant = root.get_node("SimulationRuntime")
|
||||
var clock: Variant = root.get_node("GameClock")
|
||||
var state: Variant = root.get_node("GameState")
|
||||
clock.reset(1, 6, 0)
|
||||
state.reset()
|
||||
runtime.initialize(clock, state, 42533)
|
||||
clock.set_paused(true)
|
||||
runtime.configure_save_policy({&"enabled": false, &"daily_checkpoint_enabled": false})
|
||||
var main: Control = load("res://scenes/main/main.tscn").instantiate()
|
||||
root.add_child(main)
|
||||
await process_frame
|
||||
await process_frame
|
||||
runtime.configure_save_policy({&"enabled": false, &"daily_checkpoint_enabled": false})
|
||||
var built: Variant = runtime.submit_command(&"build_facility", {&"definition_id": &"reception", &"origin": Vector3i(-8, 0, 0)})
|
||||
expect(built.is_success(), "real construction starts")
|
||||
clock.advance_minutes(120)
|
||||
var facilities: Array = runtime.construction_service.get_facilities()
|
||||
expect(not facilities.is_empty(), "real construction completes")
|
||||
if facilities.is_empty():
|
||||
quit(1)
|
||||
return
|
||||
var facility_id := String(facilities[0][&"instance_id"])
|
||||
var definition: GuestDefinition = runtime.guest_service.get_definitions()[0]
|
||||
expect(runtime.submit_command(&"spawn_guest", {&"guest_id": &"positive_guest", &"guest_type_id": definition.guest_type_id, &"gold": 731, &"options": {&"planned_exit_at": clock.absolute_minute + 1000}}).is_success(), "real guest exists")
|
||||
expect(runtime.staff_service.create_staff(&"positive_staff", &"cleaner", {}).is_success(), "real staff exists")
|
||||
var selection := {"kind": "facility", "id": facility_id, "staff_id": "positive_staff", "staff_open": true, "guest_id": "positive_guest", "guest_open": true}
|
||||
for version: Variant in [1, 1.0]:
|
||||
selection["version"] = version
|
||||
expect(main.call("_valid_interface_selection_version", version), "positive version accepted type="+str(typeof(version)))
|
||||
main.set("_selected_entity_id", &"")
|
||||
main.call("_restore_interface_selection", {"interface_selection": selection})
|
||||
main.call("_restore_actor_interface_selection", {"interface_selection": selection})
|
||||
expect(String(main.get("_selected_entity_id")) == facility_id, "facility restored type="+str(typeof(version)))
|
||||
expect(String(main.get("staff_management_panel").selected_staff_id) == "positive_staff", "staff restored type="+str(typeof(version)))
|
||||
var panel: Variant = main.call("_ensure_guest_observer")
|
||||
expect(String(panel.selected_guest_id) == "positive_guest", "guest restored type="+str(typeof(version)))
|
||||
var manifest: Variant = JSON.parse_string(JSON.stringify({"interface_selection": selection}))
|
||||
expect(typeof(manifest["interface_selection"]["version"]) == TYPE_FLOAT, "actual JSON decode produces float version")
|
||||
main.set("_selected_entity_id", &"")
|
||||
main.call("_restore_interface_selection", manifest)
|
||||
main.call("_restore_actor_interface_selection", manifest)
|
||||
expect(String(main.get("_selected_entity_id")) == facility_id, "JSON decoded facility restored")
|
||||
expect(String(main.get("staff_management_panel").selected_staff_id) == "positive_staff", "JSON decoded staff restored")
|
||||
expect(String(main.call("_ensure_guest_observer").selected_guest_id) == "positive_guest", "JSON decoded guest restored")
|
||||
var cleanup: Dictionary = await Cleanup.free_owner_and_wait(self, main)
|
||||
expect(bool(cleanup.get(&"passed", false)), "ordinary Main/audio cleanup")
|
||||
print("P24 positive metadata: %d checks, %d failures" % [checks, failures])
|
||||
quit(1 if failures else 0)
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
import importlib.util,json,os,sys,uuid,subprocess,hashlib
|
||||
from pathlib import Path
|
||||
R=Path('/Users/korizatou114/Projects/TheTree-managed-worktrees/p24-03-code/P24-03-implement');P=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');s=importlib.util.spec_from_file_location('p24_existing',R/'tools/run_all_tests.py');r=importlib.util.module_from_spec(s);s.loader.exec_module(r)
|
||||
O=P/'artifacts/original-completion-2026-10-02/p24-positive-metadata-r02';O.mkdir(exist_ok=False);stage=P/'artifacts/original-completion-2026-10-02/p24-03-full173-native-r01/stage';before=r.inventory(stage,stage=True);player=r.default_player(R)
|
||||
pins=r.read(R/'tools/regression/bootstrap-scripts.json');name=next(n for n,v in pins.items() if 'class' not in n and 'PACK_PROFILE_GUARD' in v['text']);boot=O/name;boot.write_text(pins[name]['text']);profile='TheTree-PCK-tests-'+uuid.uuid4().hex+'-p24-positive';expected=Path.home()/'Library/Application Support'/profile
|
||||
assert not expected.exists();env={**os.environ,'THE_TREE_PACK_PROFILE_NAME':profile,'THE_TREE_PACK_PROFILE_EXPECTED':str(expected),'THE_TREE_PACK_PROFILE_REPORT':str(O/'profile.json'),'P24_PROFILE_BOOTSTRAP':str(boot),'THE_TREE_AUDIO_FIXTURE_CONTROL_PROOF':str(O/'ordinary-cleanup.json'),'THE_TREE_AUDIO_TEARDOWN_PROOF_DIR':str(O/'audio-teardown')};argv=['/Applications/Godot.app/Contents/MacOS/Godot','--headless','--log-file',str(O/'engine-private.log'),'--path',str(stage),'--script','/private/tmp/p24-positive-version.gd'];(O/'command.json').write_text(json.dumps({'argv':argv,'candidate':'4cefcff849d4dc1211caa5066e24bfae666cc2f4','source_stage':str(stage),'supplement_script_sha256':hashlib.sha256(Path('/private/tmp/p24-positive-version.gd').read_bytes()).hexdigest()},indent=2)+'\n')
|
||||
with (O/'stdout.log').open('w') as out,(O/'stderr.log').open('w') as err:
|
||||
p=subprocess.Popen(argv,env=env,stdout=out,stderr=err,start_new_session=True)
|
||||
try:code=p.wait(timeout=90)
|
||||
except subprocess.TimeoutExpired:os.killpg(p.pid,15);p.wait(timeout=3);code=124
|
||||
passed=code==0 and r.inventory(stage,stage=True)==before and r.default_player(R)==player
|
||||
report={'passed':passed,'exit_code':code,'pid':p.pid,'candidate':'4cefcff849d4dc1211caa5066e24bfae666cc2f4','unchanged_stage':r.inventory(stage,stage=True)==before,'unchanged_default_player':r.default_player(R)==player,'profile':str(expected),'stdout':str(O/'stdout.log'),'stderr':str(O/'stderr.log'),'game_implementation_changed':False};(O/'result.json').write_text(json.dumps(report,indent=2)+'\n');print(json.dumps(report));print((O/'stdout.log').read_text()[-900:]);print((O/'stderr.log').read_text()[-1000:]);sys.exit(0 if passed else 1)
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"candidate": "4cefcff849d4dc1211caa5066e24bfae666cc2f4",
|
||||
"passed": true,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p24-03-code/runs/ec59a91c09f342a594aa0ec49854c7cf",
|
||||
"guard_bytes": 494833,
|
||||
"review": {
|
||||
"task_id": "P24-03",
|
||||
"commit": "4cefcff849d4dc1211caa5066e24bfae666cc2f4",
|
||||
"status": "pass",
|
||||
"summary": "全7条件(facility/guest/staff lifecycle、layer_and_values、invalid_and_failed_load、normal_os_input、final_validation_review)の証拠を、提供された差分・ソース・Runner結果と突合し、受入P24-03は満たされていると判断する。critical/high/mediumの指摘はない。変更は allowed_paths 内に収まっている。新suite以外の既存suiteのSHA・marker・cleanupは変更されておらず、試験の削除・無効化もない。製品コードの変更は2点のみで、(1) Main の interface_selection version 判定を数値1(JSON由来の1.0を含む、bool/文字列/非1は拒否)に修正、(2) 客パネルで選択対象が不在のとき OptionButton を未選択(-1)にする、である。実GuestService/StaffServiceの離脱、実建設→実撤去、Unique解雇拒否、履歴(永続recordと離職給与43G)の保持、UI収集がRuntime digestを変えないこと、不正version拒否は新suite(41 checks, 0 failures)で確認されている。全173 roster(import/parse含む)がstrict markerで14810 checks, 0 failuresで通過し、cleanup/guardエラーもなく、実PIDとsource SHAが一致している。正式保存の同一manifest/world SHAに対し、別PID(17306と19943)で通常Mainを再開し、選択ID、レイヤー、施設の地図強調、各画面値が完全一致している。画面値は実ラベル文字列とneed barから独立に解析され、model値と等価であることが確認されている。通常OS入力はCUA native appによる実クリック6件(施設・客・職員・レイヤー選択、保存、再開)で、各stepのPID・画面・source mapが突合されている。生成物は injected=true と faithful_transcription の限界が開示されている。Godot内部のemitや関数呼出しのみの証拠ではない。正式独立レビューは本レビューが担う最終段で、pending_reviewの状態は設計どおり。Windows条件は仕様上別扱いで未受入のまま。以下は低優先度の所見。",
|
||||
"acceptance_ids": [
|
||||
"P24-03"
|
||||
],
|
||||
"findings": [
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "cross-process の P24_OBSERVATION ログ行はエンジン出力ではなくcollector正規化で生成されている。元エンジンログと元raw報告はハッシュ付きで保持され、その旨も明示されているため受入可能だが、独立計測ではない。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "JSONで復号された float 1.0 の version を受理する正例(施設・職員・客の復元)は、リポジトリ外の補足プローブ(17 checks)でのみ確認されており、新suite自体は負例のみを持つ。次回の保守では正例を新suiteに取り込むことが望ましい。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "OS入力traceはCUA tool stepの書き起こし(faithful_transcription)であり、元のtool RPCは独立計測されていない。限界は index に開示済みで、root指示の方針(CUAの実OS配信を許可し、emit/関数呼出しのみは不可)とも整合する。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "producerの17306は先行する予備ペアのconsumerとして起動したprocessを再利用している。最終ペアは専用の不変package(formal-package-os)に保存・再開しており、証拠上の矛盾はない。"
|
||||
}
|
||||
]
|
||||
},
|
||||
"implementation_changed": false,
|
||||
"repairs_changed": false
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"task_id": "P24-03",
|
||||
"commit": "4cefcff849d4dc1211caa5066e24bfae666cc2f4",
|
||||
"status": "pass",
|
||||
"summary": "全7条件(facility/guest/staff lifecycle、layer_and_values、invalid_and_failed_load、normal_os_input、final_validation_review)の証拠を、提供された差分・ソース・Runner結果と突合し、受入P24-03は満たされていると判断する。critical/high/mediumの指摘はない。変更は allowed_paths 内に収まっている。新suite以外の既存suiteのSHA・marker・cleanupは変更されておらず、試験の削除・無効化もない。製品コードの変更は2点のみで、(1) Main の interface_selection version 判定を数値1(JSON由来の1.0を含む、bool/文字列/非1は拒否)に修正、(2) 客パネルで選択対象が不在のとき OptionButton を未選択(-1)にする、である。実GuestService/StaffServiceの離脱、実建設→実撤去、Unique解雇拒否、履歴(永続recordと離職給与43G)の保持、UI収集がRuntime digestを変えないこと、不正version拒否は新suite(41 checks, 0 failures)で確認されている。全173 roster(import/parse含む)がstrict markerで14810 checks, 0 failuresで通過し、cleanup/guardエラーもなく、実PIDとsource SHAが一致している。正式保存の同一manifest/world SHAに対し、別PID(17306と19943)で通常Mainを再開し、選択ID、レイヤー、施設の地図強調、各画面値が完全一致している。画面値は実ラベル文字列とneed barから独立に解析され、model値と等価であることが確認されている。通常OS入力はCUA native appによる実クリック6件(施設・客・職員・レイヤー選択、保存、再開)で、各stepのPID・画面・source mapが突合されている。生成物は injected=true と faithful_transcription の限界が開示されている。Godot内部のemitや関数呼出しのみの証拠ではない。正式独立レビューは本レビューが担う最終段で、pending_reviewの状態は設計どおり。Windows条件は仕様上別扱いで未受入のまま。以下は低優先度の所見。",
|
||||
"acceptance_ids": [
|
||||
"P24-03"
|
||||
],
|
||||
"findings": [
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "cross-process の P24_OBSERVATION ログ行はエンジン出力ではなくcollector正規化で生成されている。元エンジンログと元raw報告はハッシュ付きで保持され、その旨も明示されているため受入可能だが、独立計測ではない。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "JSONで復号された float 1.0 の version を受理する正例(施設・職員・客の復元)は、リポジトリ外の補足プローブ(17 checks)でのみ確認されており、新suite自体は負例のみを持つ。次回の保守では正例を新suiteに取り込むことが望ましい。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "OS入力traceはCUA tool stepの書き起こし(faithful_transcription)であり、元のtool RPCは独立計測されていない。限界は index に開示済みで、root指示の方針(CUAの実OS配信を許可し、emit/関数呼出しのみは不可)とも整合する。"
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "producerの17306は先行する予備ペアのconsumerとして起動したprocessを再利用している。最終ペアは専用の不変package(formal-package-os)に保存・再開しており、証拠上の矛盾はない。"
|
||||
}
|
||||
]
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"integrated_candidate": "ba238177d33310fe8b4095998a178464488ed5e4",
|
||||
"authority": "latest explicit human Runner fix/continue directive and existing main-update authorization",
|
||||
"files": {
|
||||
"runner/core.py": {
|
||||
"before": "893ffa63f8ff1607815316d5e2368e272472e973462f63b8a09c931a96e62607",
|
||||
"after": "34d0f62ec5b17b070a2d1ad4f58d06f3be7e9b6fb649ec86b366bc03b07c1329"
|
||||
},
|
||||
"tests/test_runner.py": {
|
||||
"before": "b171622be1542123c9c523dfbce5d2734b5bdd0fe6689a46b7e21a88fdc4d80d",
|
||||
"after": "315bead61f690a8d23ddd0a0da376041a7ad1cc0f6a4b64db07be52d864cb286"
|
||||
},
|
||||
"docs/spec/RP24-01.json": {
|
||||
"added_spec_reference": true,
|
||||
"sha256": "dde0184b95c399fc1a359d70a4db4a97f6eafb546e86fc6488478a5af8a49e0b"
|
||||
}
|
||||
},
|
||||
"preexisting_changes_preserved": true,
|
||||
"failed_rp13_adopted": false
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"codex": {
|
||||
"binary": "/Users/korizatou114/.local/bin/codex",
|
||||
"version": "codex-cli 0.162.0-alpha.17.2",
|
||||
"exit_code": 0,
|
||||
"auth": "Logged in using ChatGPT"
|
||||
},
|
||||
"claude": {
|
||||
"binary": "/Users/korizatou114/.local/bin/claude",
|
||||
"version": "2.1.287 (Claude Code)",
|
||||
"exit_code": 0,
|
||||
"auth": {
|
||||
"loggedIn": true,
|
||||
"authMethod": "claude.ai",
|
||||
"apiProvider": "firstParty"
|
||||
}
|
||||
},
|
||||
"agy": {
|
||||
"binary": "/Users/korizatou114/.local/bin/agy",
|
||||
"version": "1.3.2",
|
||||
"exit_code": 0
|
||||
},
|
||||
"scoped": {
|
||||
"providers": {
|
||||
"codex": {
|
||||
"authenticated": true,
|
||||
"exit_code": 0,
|
||||
"scope": "Runner outer sandbox",
|
||||
"model_request": false,
|
||||
"probe": "ChatGPT credential readability; live execution verified separately"
|
||||
},
|
||||
"claude": {
|
||||
"authenticated": true,
|
||||
"exit_code": 0,
|
||||
"scope": "Runner outer sandbox",
|
||||
"model_request": false,
|
||||
"probe": "CLI authentication"
|
||||
},
|
||||
"agy": {
|
||||
"authenticated": true,
|
||||
"exit_code": 0,
|
||||
"scope": "Runner outer sandbox",
|
||||
"model_request": false,
|
||||
"probe": "CLI authentication"
|
||||
}
|
||||
},
|
||||
"evidence": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-runner-p24-review-packet/runs/auth-probe-b736b5abb4ec49ed89f8e91a35a46d16.json"
|
||||
}
|
||||
}
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
+81
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"contract": {
|
||||
"id": "RP24-01",
|
||||
"title": "P24レビュー全文保持とRunner自身の正式試験実行を修正",
|
||||
"requirement_ids": [
|
||||
"RP24-01"
|
||||
],
|
||||
"acceptance_ids": [
|
||||
"RP24-01"
|
||||
],
|
||||
"spec_ref": "docs/spec/RP24-01.json",
|
||||
"base_commit": "5811e01a17c423b156c5a45c49e2c6e81a4e2153",
|
||||
"worker": "codex",
|
||||
"allowed_paths": [
|
||||
"runner/core.py",
|
||||
"tests/test_runner.py"
|
||||
],
|
||||
"depends_on": [],
|
||||
"resource_locks": [
|
||||
"runner-p24-code-isolated"
|
||||
],
|
||||
"validation_ids": [
|
||||
"runner-unit"
|
||||
],
|
||||
"max_repair_attempts": 2,
|
||||
"spec_sha256": "5841d6ac4673336b2ece64efb1b9af3dbf67838bf54b8fa1021f2280e5105854"
|
||||
},
|
||||
"implementation_commit": "053f391bf35482c0996292de263f2c39e88d96f0",
|
||||
"integration_commit": "ba238177d33310fe8b4095998a178464488ed5e4",
|
||||
"owner": "ユーザーの既存main更新明示許可および2026-10-13のRunner修正・確認待ち解除・継続実行の明示指示に基づく",
|
||||
"evidence": [
|
||||
{
|
||||
"id": 1,
|
||||
"task_id": "RP24-01",
|
||||
"kind": "validation",
|
||||
"commit_sha": "ab1862582fb59c926d9068a42d7000ec16239c3c",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-runner-p24-review-packet/runs/7cb969e720b14805a33ba4b46d692115-validation.json",
|
||||
"passed": 0
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"task_id": "RP24-01",
|
||||
"kind": "validation",
|
||||
"commit_sha": "053f391bf35482c0996292de263f2c39e88d96f0",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-runner-p24-review-packet/runs/de360519c08c4ec7aca2bd2919cc3ffa-validation.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"task_id": "RP24-01",
|
||||
"kind": "review",
|
||||
"commit_sha": "053f391bf35482c0996292de263f2c39e88d96f0",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-runner-p24-review-packet/runs/0f153dac1227409fab1236c00424be19/result.json",
|
||||
"passed": 0
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"task_id": "RP24-01",
|
||||
"kind": "review",
|
||||
"commit_sha": "053f391bf35482c0996292de263f2c39e88d96f0",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-runner-p24-review-packet/runs/7ca0a1409a244782afb0e2c6b003be6d/result.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"task_id": "RP24-01",
|
||||
"kind": "integration",
|
||||
"commit_sha": "ba238177d33310fe8b4095998a178464488ed5e4",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-runner-p24-review-packet/runs/697c1da420c24b07893ff537e051f538-integration.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"task_id": "RP24-01",
|
||||
"kind": "final",
|
||||
"commit_sha": "ba238177d33310fe8b4095998a178464488ed5e4",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-runner-p24-review-packet/runs/ffb274fdd26b4ed897482b05a0510d61-final.json",
|
||||
"passed": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"task_id": "RP24-01",
|
||||
"commit": "ba238177d33310fe8b4095998a178464488ed5e4",
|
||||
"kind": "final",
|
||||
"checks": [
|
||||
{
|
||||
"id": "runner-unit",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-runner-p24-review-packet/runs/e1b730628fb847f0ae295c8fca8f95da",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"candidate": "ba238177d33310fe8b4095998a178464488ed5e4",
|
||||
"main_base": "5811e01a17c423b156c5a45c49e2c6e81a4e2153",
|
||||
"authority": "actual human main-update authorization and latest explicit directive rejecting invented blocking design; no new human SHA utterance is claimed",
|
||||
"source": "Current thread user instructions",
|
||||
"passed_integration_evidence": [
|
||||
{
|
||||
"kind": "integration",
|
||||
"commit_sha": "ba238177d33310fe8b4095998a178464488ed5e4",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-runner-p24-review-packet/runs/697c1da420c24b07893ff537e051f538-integration.json",
|
||||
"passed": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"task_id": "RP24-01",
|
||||
"commit": "ba238177d33310fe8b4095998a178464488ed5e4",
|
||||
"kind": "integration",
|
||||
"checks": [
|
||||
{
|
||||
"id": "runner-unit",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-runner-p24-review-packet/runs/15cfd03fdcb34c7e8d4d915814ee452e",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
}
|
||||
Reference in New Issue
Block a user