65 lines
15 KiB
Python
65 lines
15 KiB
Python
# coding: utf-8
|
|
from pathlib import Path
|
|
import collections,contextlib,datetime,importlib.util,io,runpy,shutil,sys
|
|
sys.dont_write_bytecode=True
|
|
R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');A=R/'artifacts/original-completion-2026-10-02';D=R/'docs/plans/original-completion-2026-10-02';C=A/'p23-02-progress-integration-candidate-r294';O=A/'p23-02-progress-integration-r294';names=['IMPLEMENTATION_PLAN.md','PROGRESS_INTEGRATION.md','work_packages.json','progress_snapshot.json']
|
|
s=importlib.util.spec_from_file_location('int294',R/'tools/run_all_tests.py');r=importlib.util.module_from_spec(s);s.loader.exec_module(r)
|
|
def pin(p):return dict(path=str(p),bytes=p.stat().st_size,sha256=r.sha(p))
|
|
proofs=[]
|
|
for review,root,flags in [
|
|
(A/'p23-02-native-integer-window-codec-static-independent-review-r290.json',A/'p23-02-native-integer-window-codec-static-root-verification-r290.json',['implementation_supported']),
|
|
(A/'p23-02-native-integer-window-codec-build-actual-independent-review-r291.json',A/'p23-02-native-integer-window-codec-build-root-verification-r291.json',['host_build_accepted']),
|
|
(A/'p23-02-native-integer-window-codec-local-actual-independent-review-r292-r02.json',A/'p23-02-native-integer-window-codec-local-r292-r02/actual-root-verification.json',['finite_local_equivalence_accepted','codec_equivalence_accepted']),
|
|
(A/'p23-02-native-integer-window-codec-impact-whole-actual-independent-review-r293-r04.json',A/'p23-02-native-integer-window-codec-impact-whole-r293-r04/actual-root-verification.json',['finite_s6_impact_accepted','finite_whole647_equivalence_accepted','finite_exit_observation_accepted'])]:
|
|
v=r.read(review);assert not v['blockers'] and all(v[k] for k in flags);assert r.read(root)['passed'] and r.read(root)['review_sha256']==r.sha(review);proofs.append(dict(review=pin(review),root=pin(root)))
|
|
assert not C.exists() and not O.exists();source=r.source_refs(R);player=r.default_player(R);historical=r.sha(D/'plan_validation.json');C.mkdir();(C/'before').mkdir();(C/'after').mkdir();O.mkdir()
|
|
for n in names:shutil.copyfile(D/n,C/'before'/n)
|
|
packages=r.read(D/'work_packages.json');snapshot=r.read(D/'progress_snapshot.json');original_packages=r.read(D/'work_packages.json');pkg=next(p for p in packages if p['id']=='P23');unit=next(u for u in pkg['remaining_deliverables'] if u['id']=='P23-02');old=unit['progress_summary'];execution=r.read(A/'p23-02-native-integer-window-codec-impact-whole-r293-r04/execution.json');assert execution['passed'];pair=execution['pairs'][0]
|
|
next_action='r290/library291は今回の単発比較で性能改善を示さず追加codecの維持負担があるため不採用とし、次の性能修正元はr274/library275を保持する。r290/library291の局所・原S6影響・全保存同値証拠を保持し、代表同期負荷の必須性能未達を解消する関連修正を1件に絞る。未変更版の性能反復や全回帰を重複せず、関連変更を固めた同一最終版で必須全172・P95/D10・50ms・通常OS/x3/終了/小画面・同一Windows配布版実機と原17条件を満たす。人のCtrl保持ホイールと左ボタン保持ドラッグは延期・未達・免除なし。'
|
|
budget_note='50ms未達' if pair['candidate_us']>=50000 else '50ms未満の単発観測だが必須性能全条件は未受入'
|
|
new='P23-02は着手中・次に閉じる1件。30パッケージ/88成果、正式9/着手19/予定60、部分点なし。制作r32と選定済み未採用作業r62を保持。原17条件C01-C09/X1-X8はすべて未受入、Windows実機を要するC08/X8だけブロック。Ctrl保持wheel/左保持dragは延期・未達・免除なし。最新の局所・原S6影響・whole647検証済み実験候補はr290/library291。r285-r02の整数Array符号化/追記・単一先頭削除候補は実校正を通らず、r287の4024/112失敗を拒否記録として保持。r290は型付きINT・空classのscript不在をNILまたはnull OBJECTだけ許す判定修復で、符号化・全4校正・元fallback・記録・閾値・通知・所有処理は親と同一。静的290とbridge compile1/link1・SDK再コンパイル0のhost291を独立有限受理。局所r292-r02は同一library291をactual loadし、原260-r02の同入力/設定/原1299stage/engine/fixture bodyを照合した有効な原結果を再利用、原Budget833行・6,589,288bytes全文一致と整数codec33ケース・4024/0を独立有限受理。整数28ケースは型付き/無型・read-only/可変・int32/int64境界・窓長0/1/2/9/511/512/513・返却bytesの変更隔離を実engine bytesと比較、非整数5ケースは拒否/無変更。説明3箇所の旧対象名による未実行r292拒否は履歴保持し、r02で説明だけ修復・試験基準不変・既存libraryコピー再利用。r293-r04は同一r290/library291で元S6/GameClock24/0、直前r274/library275と同cold646/paused/speed1/同Budget257一時patch/原Pathのwhole各15/0、全11,487,732bytes原oracle同値・3所有PID正常終了・strict/private/source/default/stage/SUPPORT保護復元を独立有限受理。同期時間%d→%dusは隣接単発観測のみで、%s・安定利益/P95/D10未証明。料金/重み/閾値/論理時刻/行動/会計/乱数/保存は変更しない。r274/275の純タグ局所278-r04・whole281、同期builtin fallback静的280と他の旧実験詳細は版付き証拠・before/previous_summaryへ保持。全172・通常OS/Windows・性能・採用・単位完成は未受入、未選定・未採用。Gitの実験checkpoint配下に空.gdignoreを置き、Budget class_nameが本体のresource走査へ混ざることを防止。正式完了追加0。次は%s'%(pair['baseline_us'],pair['candidate_us'],budget_note,next_action)
|
|
pkg['current_summary']=new;unit['progress_summary']=new;stamp=datetime.datetime.now().astimezone().isoformat();pkg['updated_at_jst']=stamp;unit['updated_at_jst']=stamp
|
|
prior=A/'p23-02-current-progress-disposition-r282.json';matrix=A/'p23-02-current-progress-disposition-r294.json';m=r.read(prior);m['historical_candidate_fields_before_r294']={k:m[k] for k in ['source_candidate','candidate_input','library','latest_implementation_candidate','latest_implementation_candidate_input','latest_implementation_library','latest_local_validated_trial','latest_local_candidate_input','latest_local_library','latest_whole_validated_trial','latest_whole_candidate_input','latest_whole_library','next_implementation_parent','next_implementation_parent_input','next_implementation_parent_library']}
|
|
ci=pin(A/'p23-02-native-integer-window-codec-candidate-r290/input.json');lib=pin(A/'p23-02-native-integer-window-codec-build-r291/libtree_numeric_core.macos.template_debug.dylib');cpp=pin(A/'p23-02-native-integer-window-codec-candidate-r290/source/tree_numeric_core.cpp')
|
|
parent_fields={k:m[k] for k in ['latest_implementation_candidate','latest_implementation_candidate_input','latest_implementation_library','next_implementation_parent','next_implementation_parent_input','next_implementation_parent_library']};parent_source=pin(A/'p23-02-native-pure-tag-projection-candidate-r274/source/tree_numeric_core.cpp')
|
|
m.update(source_previous_matrix=pin(prior),next_action=next_action,source_candidate='r290/library291 finite local292-r02 and originalS6/whole293-r04; performance unmet, unselected and unadopted',candidate_input=ci,library=lib,latest_implementation_candidate='r290/library291 finite local292-r02 and originalS6/whole293-r04',latest_implementation_candidate_input=ci,latest_implementation_library=lib,latest_local_validated_trial='r290/library291 finite Budget+integercodec local292-r02',latest_local_candidate_input=ci,latest_local_library=lib,latest_locally_validated_candidate='r290/library291 finite292-r02',latest_whole_validated_trial='r290/library291 finite originalS6/whole293-r04',latest_whole_validated_candidate='r290/library291 finite293-r04',latest_whole_candidate_input=ci,latest_whole_library=lib,next_implementation_parent='r290/library291 private candidate finite local292-r02 and S6/whole293-r04; unadopted/performance unmet',next_implementation_parent_input=ci,next_implementation_parent_library=lib,next_implementation_parent_source=cpp,next_test_candidate='One necessary related performance change against r290/library291 then coherent final-version mandatory validation',native_trial_stage_status='local292-r02 and whole293-r04 reused shared209/parent239 original1299; Budget257 transient and project restored after owned exit; no production290 stage created')
|
|
m.update(parent_fields);m['next_implementation_parent_source']=parent_source;m['next_test_candidate']='One necessary performance change against retained r274/library275 then final-version mandatory validation';m['declined_trial']=dict(candidate_input=ci,library=lib,single_pair=pair,reason='No improvement demonstrated in the single adjacent pair; stable performance benefit unproved and optional codec adds maintenance complexity',stable_regression_claimed=False,candidate_adopted=False)
|
|
for name,p in [('integer_codec_static',proofs[0]),('integer_codec_host',proofs[1]),('integer_codec_local',proofs[2]),('integer_codec_impact_whole',proofs[3])]:m['finite_evidence'][name]=p['review'];m['finite_evidence'][name+'_root']=p['root']
|
|
for name,p in [('integer_codec_rejected_local287',A/'p23-02-native-integer-window-codec-local-actual-independent-review-r287.json'),('integer_codec_rejected_preparation292',A/'p23-02-native-integer-window-codec-local-preexecution-independent-review-r292.json')]:m['finite_evidence'][name]=pin(p)
|
|
missing='Latest r290/library291 finite local292-r02 and original S6/whole293-r04 accepted. Single whole tick%dus; %s. Stable gain/P95/D10/50ms final performance, final172, general reentry/provider ownership, normal OS/realtime x3/exit/small-screen/same Windows and original17 remain unaccepted. Old287 codec failure and 292 metadata rejection retained; experimental codec declined, next implementation parent r274/library275 retained; no stable regression claim or adoption.'%(pair['candidate_us'],budget_note)
|
|
for q in m['conditions']:
|
|
if q['id'] in ['C09','X5','X7']:q['current_missing']=missing
|
|
assert len(m['conditions'])==17 and all(not q['accepted'] for q in m['conditions']) and m['Windows_only_blocked_ids']==['C08','X8'];r.write(matrix,m)
|
|
# Update active residual fields, retaining every historical field unchanged.
|
|
for xs in [unit['remaining_gaps'],snapshot['next_single_delivery_unit']['missing']]:
|
|
for q in xs:
|
|
if q['id']=='C09':q['conditions']=[missing,'原詳細・旧版条件はhistorical fieldsと旧matrixへ保持。']
|
|
elif q['id']=='cross-cutting-final-candidate':q['conditions']=[new if xs is unit['remaining_gaps'] else '原17条件を同一最終版で受入。最新版付き有限証拠と未達はr294 matrixへ保持。']
|
|
for proof in proofs:
|
|
for p in [Path(proof['review']['path']),Path(proof['root']['path'])]:unit['evidence'].append(dict(path=str(p.relative_to(R)),sha256_at_integration=r.sha(p),scope='Finite static/host/Budget enginecodec local/originalS6/whole647/owned exit per individual receipt only; no stable performance/final172/OS/Windows/adoption/unit acceptance',linked_at_jst=stamp,current_game_acceptance_inferred=False))
|
|
unit['evidence'].append(dict(path=str(matrix.relative_to(R)),sha256_at_integration=r.sha(matrix),scope='Current17 unaccepted conditions and versioned finite evidence, no partial credit',linked_at_jst=stamp,current_game_acceptance_inferred=False));unit['acceptance_matrix_reference']=str(matrix)
|
|
nu=snapshot['next_single_delivery_unit'];assert nu['id']=='P23-02';nu['historical_trial_source_fields_before_r294']={k:nu.get(k) for k in ['unselected_trial_candidate_source','unselected_trial_candidate_input','unselected_trial_candidate_library','next_implementation_parent_source','next_implementation_parent_input']};nu.update(acceptance_matrix_reference=str(matrix),progress_evidence=str(matrix),native_trial_stage_status=m['native_trial_stage_status'],unselected_trial_candidate_source=str(cpp['path']),unselected_trial_candidate_input=str(ci['path']),unselected_trial_candidate_library=str(lib['path']),next_implementation_parent_source=str(parent_source['path']),next_implementation_parent_input=m['next_implementation_parent_input']['path']);nu['unselected_trial_evidence'].extend(p['review']['path'] for p in proofs)
|
|
key='p23_02_native_integer_window_codec_integration_r294';snapshot['p23_02_native_pure_tag_whole_integration_r282']['superseded_by']=key;snapshot[key]=dict(prior_integration='p23_02_native_pure_tag_whole_integration_r282',previous_summary=old,proofs=proofs,acceptance_matrix=pin(matrix),next_action=next_action,finite_local_accepted=True,codec_equivalence_accepted=True,finite_s6_impact_accepted=True,finite_whole647_equivalence_accepted=True,latest_whole_candidate='r290/library291 finite293-r04',single_timing_pair=pair,stable_gain_supported=False,stall_budget_met=False,candidate_adopted=False,formal_completed_added=0,unit_accepted=False,whole_goal_accepted=False)
|
|
r.write(C/'after/work_packages.json',packages);r.write(C/'after/progress_snapshot.json',snapshot)
|
|
for n in names[:2]:
|
|
t=(C/'before'/n).read_text();assert t.count(old)==1;(C/'after'/n).write_text(t.replace(old,new,1).replace('2026-10-12・r282証拠統合','2026-10-12・r294証拠統合',1))
|
|
counts=collections.Counter(u['state'] for p in packages for u in p['remaining_deliverables']);assert len(packages)==30 and dict(counts)=={'completed':9,'in_progress':19,'planned':60}
|
|
for p,q in zip(original_packages,packages):
|
|
if p['id']!='P23':assert p==q
|
|
else:
|
|
for u,v in zip(p['remaining_deliverables'],q['remaining_deliverables']):
|
|
if u['id']!='P23-02':assert u==v
|
|
r.write(C/'input.json',dict(before={n:pin(C/'before'/n) for n in names},after={n:pin(C/'after'/n) for n in names},proofs=proofs,matrix=pin(matrix),author=pin(Path(__file__)),counts=dict(counts),summary_before=old,summary_after=new,formal_completed_added=0,unit_accepted=False))
|
|
original_write=Path.write_text;stdout=io.StringIO()
|
|
try:
|
|
for n in names:assert (D/n).read_bytes()==(C/'before'/n).read_bytes();shutil.copyfile(C/'after'/n,D/n)
|
|
def routed(p,data,*args,**kwargs):return original_write(O/'plan_validation.json' if p==D/'plan_validation.json' else p,data,*args,**kwargs)
|
|
Path.write_text=routed;sys.argv=[str(D/'validate_plan.py')]
|
|
with contextlib.redirect_stdout(stdout):runpy.run_path(str(D/'validate_plan.py'),run_name='__main__')
|
|
val=r.read(O/'plan_validation.json');assert val['passed'] and len(val['checks'])==49 and not val['failed_checks'];assert r.source_refs(R)==source and r.default_player(R)==player and r.sha(D/'plan_validation.json')==historical
|
|
except BaseException:
|
|
for n in names:shutil.copyfile(C/'before'/n,D/n)
|
|
raise
|
|
finally:Path.write_text=original_write
|
|
r.write(O/'execution.json',dict(passed=True,canonical_after={n:pin(D/n) for n in names},source_before=source,source_after_equal=True,default_before=player,default_after_equal=True,historical_validator_receipt_preserved=True,validation=dict(checks=49,failures=0),counts=dict(counts),formal_completed_added=0,source_edits=0,engine_processes=0,unit_accepted=False,whole_goal_accepted=False));print(dict(applied=True,checks=49,failures=0,formal_completed_added=0))
|