diff --git a/docs/plans/original-completion-2026-10-02/IMPLEMENTATION_PLAN.md b/docs/plans/original-completion-2026-10-02/IMPLEMENTATION_PLAN.md index 84ce20c..7ddb91f 100644 --- a/docs/plans/original-completion-2026-10-02/IMPLEMENTATION_PLAN.md +++ b/docs/plans/original-completion-2026-10-02/IMPLEMENTATION_PLAN.md @@ -1,5 +1,12 @@ # 原本全実装に向けた作業計画 2026年10月改訂 +## P23-02 現着手・次に閉じる1件(r337、2026-10-12) + +P23-02着手中。制作r32と選定済み実装親r274/library275は保持。最新未選定・未採用候補r333/library334は、親r326の在庫入力キー整列と経路コピーだけをnative化。未捕捉std確保例外をビルド前に修復。bridge1/link1、SDKcompile0、既存stage再利用。局所4工程404/0、Runtime150候補105808bytes・評価後11411840bytes原golden全文一致。S6 24/0、両whole15/0、after647全11487732bytes原oracle全文一致を独立有限受理。単一隣接観測1037100→1010883us(約2.5279%短縮)だが約1.01秒停止が残り安定性能・50ms/P95/D10は未受入。r204再構築は既非採用のため再実装なし。原9横断8はすべて未受入、Windows C08/X8のみblock、手動Ctrl保持wheel/左ボタン保持dragは延期・未達・非免除。正式9/着手19/予定60、30パッケージ/88成果、部分点なし、今回正式完了追加0。 + +全17条件・対象版・不足条件の現在authorityは `artifacts/original-completion-2026-10-02/p23-02-current-progress-disposition-r337.json`。詳細と保存証拠は `execution/CURRENT_NATIVE_INPUT_COPY_R332_R337.md`。依存P08/P22。過去の候補版に関する後続記載は履歴であり、最新対象版の受入証拠へ無条件転用しない。 + + ## P23-02 現着手・次に閉じる1件(2026-10-12・r318証拠統合) P23-02断面操作性は着手中・次に閉じる1件。30パッケージ/88成果、正式9/着手19/予定60、部分点なし。原17条件C01-C09/X1-X8は未受入、Windows C08/X8だけブロック。制作r32と実装親r274/library275を保持、r302/library303は未採用・選定保留。Guest一括候補r313-r02/library314-r02も隔離未採用・未選定。r315はliteral原Guestのclass_nameだけ除去した独立oracleとの局所53記録、原S3の18メソッド、692/0、全606268bytesの独立decode/roundtrip・型付き156比較を有限受理。pureのaccepted/rejected/ranked、4decisionと7fallbackの全状態・callback/通知順・所有を比較した。raw ordered fieldの直接oracle比較と任意custom override/一般再入は未認定。r317は候補原S6 24/0とbaseline whole15/0・全11487732bytes原oracle一致後、driverの空AssertionErrorで停止。原因は未特定、candidate未実行・pair不成立、所有2PID終了/全復元を確認。r317-r02のラベル追加による容量条件脱落と旧engine3件数を事前拒否・engine0で保存。r317-r03は容量条件とengine1件数へ修復し成功済phaseを再利用し候補whole1engineだけ続行、15/0・全11487732bytes原oracle一致・strict/private/所有終了/両stage復元を有限受理。同期時間1090007usは候補単発観測のみ、隣接pair/安定利益/50ms/P95/D10を認定しない。build/library複製/stageclone/全172追加0。旧詳細と版付き証拠はr316 matrixとcheckpointを保持。正式完了追加0。次は同候補の代表負荷時間を基に、50ms未達を解消する必要な関連変更をまとめる。正確な最終版で必須全172、P95/D10、通常OS/x3/終了/小画面、同一Windows配布版実機と原17条件を受入する。手動入力2件は延期・未達・免除なし。 diff --git a/docs/plans/original-completion-2026-10-02/PROGRESS_INTEGRATION.md b/docs/plans/original-completion-2026-10-02/PROGRESS_INTEGRATION.md index 3f22266..e15514d 100644 --- a/docs/plans/original-completion-2026-10-02/PROGRESS_INTEGRATION.md +++ b/docs/plans/original-completion-2026-10-02/PROGRESS_INTEGRATION.md @@ -1,5 +1,12 @@ # P00〜P03 進捗台帳への証拠統合 +## P23-02 現着手・次に閉じる1件(r337、2026-10-12) + +P23-02着手中。制作r32と選定済み実装親r274/library275は保持。最新未選定・未採用候補r333/library334は、親r326の在庫入力キー整列と経路コピーだけをnative化。未捕捉std確保例外をビルド前に修復。bridge1/link1、SDKcompile0、既存stage再利用。局所4工程404/0、Runtime150候補105808bytes・評価後11411840bytes原golden全文一致。S6 24/0、両whole15/0、after647全11487732bytes原oracle全文一致を独立有限受理。単一隣接観測1037100→1010883us(約2.5279%短縮)だが約1.01秒停止が残り安定性能・50ms/P95/D10は未受入。r204再構築は既非採用のため再実装なし。原9横断8はすべて未受入、Windows C08/X8のみblock、手動Ctrl保持wheel/左ボタン保持dragは延期・未達・非免除。正式9/着手19/予定60、30パッケージ/88成果、部分点なし、今回正式完了追加0。 + +全17条件・対象版・不足条件の現在authorityは `artifacts/original-completion-2026-10-02/p23-02-current-progress-disposition-r337.json`。詳細と保存証拠は `execution/CURRENT_NATIVE_INPUT_COPY_R332_R337.md`。依存P08/P22。過去の候補版に関する後続記載は履歴であり、最新対象版の受入証拠へ無条件転用しない。 + + ## P23-02 現着手・次に閉じる1件(2026-10-12・r318証拠統合) P23-02断面操作性は着手中・次に閉じる1件。30パッケージ/88成果、正式9/着手19/予定60、部分点なし。原17条件C01-C09/X1-X8は未受入、Windows C08/X8だけブロック。制作r32と実装親r274/library275を保持、r302/library303は未採用・選定保留。Guest一括候補r313-r02/library314-r02も隔離未採用・未選定。r315はliteral原Guestのclass_nameだけ除去した独立oracleとの局所53記録、原S3の18メソッド、692/0、全606268bytesの独立decode/roundtrip・型付き156比較を有限受理。pureのaccepted/rejected/ranked、4decisionと7fallbackの全状態・callback/通知順・所有を比較した。raw ordered fieldの直接oracle比較と任意custom override/一般再入は未認定。r317は候補原S6 24/0とbaseline whole15/0・全11487732bytes原oracle一致後、driverの空AssertionErrorで停止。原因は未特定、candidate未実行・pair不成立、所有2PID終了/全復元を確認。r317-r02のラベル追加による容量条件脱落と旧engine3件数を事前拒否・engine0で保存。r317-r03は容量条件とengine1件数へ修復し成功済phaseを再利用し候補whole1engineだけ続行、15/0・全11487732bytes原oracle一致・strict/private/所有終了/両stage復元を有限受理。同期時間1090007usは候補単発観測のみ、隣接pair/安定利益/50ms/P95/D10を認定しない。build/library複製/stageclone/全172追加0。旧詳細と版付き証拠はr316 matrixとcheckpointを保持。正式完了追加0。次は同候補の代表負荷時間を基に、50ms未達を解消する必要な関連変更をまとめる。正確な最終版で必須全172、P95/D10、通常OS/x3/終了/小画面、同一Windows配布版実機と原17条件を受入する。手動入力2件は延期・未達・免除なし。 diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/.gdignore b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/.gdignore new file mode 100644 index 0000000..e69de29 diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/000-p23-02-current-progress-disposition-r337.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/000-p23-02-current-progress-disposition-r337.json.gz new file mode 100644 index 0000000..e5d9df0 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/000-p23-02-current-progress-disposition-r337.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/001-p23-02-native-input-copy-build-actual-independent-review-r334.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/001-p23-02-native-input-copy-build-actual-independent-review-r334.json.gz new file mode 100644 index 0000000..98c54c0 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/001-p23-02-native-input-copy-build-actual-independent-review-r334.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/002-p23-02-native-input-copy-build-preexecution-independent-review-r334.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/002-p23-02-native-input-copy-build-preexecution-independent-review-r334.json.gz new file mode 100644 index 0000000..a3c9dff Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/002-p23-02-native-input-copy-build-preexecution-independent-review-r334.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/003-p23-02-native-input-copy-build-preexecution-root-verification-r334.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/003-p23-02-native-input-copy-build-preexecution-root-verification-r334.json.gz new file mode 100644 index 0000000..9cf33fb Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/003-p23-02-native-input-copy-build-preexecution-root-verification-r334.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/004-p23-02-native-input-copy-build-preview-r334.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/004-p23-02-native-input-copy-build-preview-r334.json new file mode 100644 index 0000000..c36098b --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/004-p23-02-native-input-copy-build-preview-r334.json @@ -0,0 +1,56 @@ +{ + "plan": [ + [ + "compile-062", + [ + "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++", + "-o", + "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/objects/062-tree_numeric_core.os", + "-c", + "-std=c++17", + "-isystem", + "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-sdk-lifetime-candidate-r131/sdk/include", + "-isystem", + "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-sdk-lifetime-candidate-r131/sdk/gen/include", + "-Wall", + "-Wextra", + "-Werror", + "-fexceptions", + "-arch", + "arm64", + "-isysroot", + "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk", + "-fvisibility=hidden", + "-O3", + "-fPIC", + "-DMACOS_ENABLED", + "-DUNIX_ENABLED", + "-DTHREADS_ENABLED", + "-DDEBUG_ENABLED", + "-DNDEBUG", + "-DGDEXTENSION", + "-I/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source", + "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source/tree_numeric_core.cpp" + ] + ], + [ + "link", + [ + "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++", + "-o", + "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/libtree_numeric_core.macos.template_debug.dylib", + "-arch", + "arm64", + "-isysroot", + "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk", + "-fvisibility=hidden", + "-Wl,-S", + "-Wl,-x", + "-Wl,-dead_strip", + "-shared", + "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/objects/062-tree_numeric_core.os", + "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-sdk-lifetime-build-r133/libgodot-cpp.macos.template_debug.arm64.a" + ] + ] + ] +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/005-ended.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/005-ended.json new file mode 100644 index 0000000..de83b76 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/005-ended.json @@ -0,0 +1,49 @@ +{ + "pid": 47216, + "argv": [ + "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++", + "-o", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/objects/062-tree_numeric_core.os", + "-c", + "-std=c++17", + "-isystem", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-sdk-lifetime-candidate-r131/sdk/include", + "-isystem", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-sdk-lifetime-candidate-r131/sdk/gen/include", + "-Wall", + "-Wextra", + "-Werror", + "-fexceptions", + "-arch", + "arm64", + "-isysroot", + "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk", + "-fvisibility=hidden", + "-O3", + "-fPIC", + "-DMACOS_ENABLED", + "-DUNIX_ENABLED", + "-DTHREADS_ENABLED", + "-DDEBUG_ENABLED", + "-DNDEBUG", + "-DGDEXTENSION", + "-I/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source/tree_numeric_core.cpp" + ], + "pgid": 47216, + "ended_utc": "2026-10-12T04:27:09.188321+00:00", + "exit_code": 0, + "duration_seconds": 1.9507496249999994, + "cleanup": [ + { + "attempt": 0, + "pgid": 47216, + "members_before": [], + "group_signal": null, + "tracked_parent_signal": null + } + ], + "remaining": [], + "cleanup_errors": [], + "foreign_process_or_group_signals": 0 +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/006-started.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/006-started.json new file mode 100644 index 0000000..b7c9960 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/006-started.json @@ -0,0 +1,45 @@ +{ + "pid": 47216, + "owner_pid": 47179, + "pgid": 47216, + "argv": [ + "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++", + "-o", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/objects/062-tree_numeric_core.os", + "-c", + "-std=c++17", + "-isystem", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-sdk-lifetime-candidate-r131/sdk/include", + "-isystem", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-sdk-lifetime-candidate-r131/sdk/gen/include", + "-Wall", + "-Wextra", + "-Werror", + "-fexceptions", + "-arch", + "arm64", + "-isysroot", + "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk", + "-fvisibility=hidden", + "-O3", + "-fPIC", + "-DMACOS_ENABLED", + "-DUNIX_ENABLED", + "-DTHREADS_ENABLED", + "-DDEBUG_ENABLED", + "-DNDEBUG", + "-DGDEXTENSION", + "-I/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source/tree_numeric_core.cpp" + ], + "started_utc": "2026-10-12T04:27:07.271137+00:00", + "initial_members": [ + { + "pid": 47216, + "ppid": 47179, + "pgid": 47216, + "args": "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -o /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/objects/062-tree_numeric_core.os -c -std=c++17 -isystem /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-sdk-lifetime-candidate-r131/sdk/include -isystem /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-sdk-lifetime-candidate-r131/sdk/gen/include -Wall -Wextra -Werror -fexceptions -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -fvisibility=hidden -O3 -fPIC -DMACOS_ENABLED -DUNIX_ENABLED -DTHREADS_ENABLED -DDEBUG_ENABLED -DNDEBUG -DGDEXTENSION -I/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source/tree_numeric_core.cpp" + } + ], + "owned_new_session": true +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/007-stderr.log b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/007-stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/008-stdout.log b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/008-stdout.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/009-compile-062-phase.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/009-compile-062-phase.json new file mode 100644 index 0000000..4098da1 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/009-compile-062-phase.json @@ -0,0 +1,28 @@ +{ + "name": "compile-062", + "result": { + "pid": 47216, + "exit_code": 0, + "timed_out": false, + "error_lines": [], + "duration_seconds": 1.9510925420000005 + }, + "capture": { + "passed": true, + "cleanup": [ + { + "attempt": 0, + "pgid": 47216, + "members_before": [], + "group_signal": null, + "tracked_parent_signal": null + } + ], + "cleanup_errors": [], + "all_captured_ended": true, + "foreign_process_or_group_signals": 0 + }, + "full_input_inventory_before_verified": true, + "full_input_inventory_after_verified": true, + "post_input_error": null +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/010-execution.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/010-execution.json new file mode 100644 index 0000000..828b0d3 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/010-execution.json @@ -0,0 +1,173 @@ +{ + "passed": true, + "error": null, + "phases": [ + { + "name": "compile-062", + "result": { + "pid": 47216, + "exit_code": 0, + "timed_out": false, + "error_lines": [], + "duration_seconds": 1.9510925420000005 + }, + "capture": { + "passed": true, + "cleanup": [ + { + "attempt": 0, + "pgid": 47216, + "members_before": [], + "group_signal": null, + "tracked_parent_signal": null + } + ], + "cleanup_errors": [], + "all_captured_ended": true, + "foreign_process_or_group_signals": 0 + }, + "full_input_inventory_before_verified": true, + "full_input_inventory_after_verified": true, + "post_input_error": null + }, + { + "name": "link", + "result": { + "pid": 47241, + "exit_code": 0, + "timed_out": false, + "error_lines": [], + "duration_seconds": 0.30894625 + }, + "capture": { + "passed": true, + "cleanup": [ + { + "attempt": 0, + "pgid": 47241, + "members_before": [], + "group_signal": null, + "tracked_parent_signal": null + } + ], + "cleanup_errors": [], + "all_captured_ended": true, + "foreign_process_or_group_signals": 0 + }, + "full_input_inventory_before_verified": true, + "full_input_inventory_after_verified": true, + "post_input_error": null + } + ], + "cleanup": [ + [ + { + "attempt": 0, + "pgid": 47216, + "members_before": [], + "group_signal": null, + "tracked_parent_signal": null + } + ], + [ + { + "attempt": 0, + "pgid": 47241, + "members_before": [], + "group_signal": null, + "tracked_parent_signal": null + } + ] + ], + "cleanup_errors": [], + "binary_checks": { + "file": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/libtree_numeric_core.macos.template_debug.dylib: Mach-O 64-bit dynamically linked shared library arm64\n", + "arch": "arm64\n", + "dependencies": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/libtree_numeric_core.macos.template_debug.dylib:\n\t/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/libtree_numeric_core.macos.template_debug.dylib (compatibility version 0.0.0, current version 0.0.0)\n\t/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 2100.43.0)\n\t/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1356.0.0)\n", + "exports": "0000000000000828 T _tree_numeric_core_init\n" + }, + "object": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/objects/062-tree_numeric_core.os", + "bytes": 387120, + "sha256": "34457a4ccc7746d1ed9dda2e7638eef7dc432e2e5ee13329fe1b347c8907b232" + }, + "library": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/libtree_numeric_core.macos.template_debug.dylib", + "bytes": 433744, + "sha256": "39f8ed73f077d15037d85b9cb53f38389c032a36dea7ff04348e5ef05c736907" + }, + "original_inputs_preserved": true, + "bridge_compilations": 1, + "link_attempts": 1, + "spawned_children": [ + { + "phase": "compile-062", + "pid": 47216, + "argv": [ + "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++", + "-o", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/objects/062-tree_numeric_core.os", + "-c", + "-std=c++17", + "-isystem", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-sdk-lifetime-candidate-r131/sdk/include", + "-isystem", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-sdk-lifetime-candidate-r131/sdk/gen/include", + "-Wall", + "-Wextra", + "-Werror", + "-fexceptions", + "-arch", + "arm64", + "-isysroot", + "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk", + "-fvisibility=hidden", + "-O3", + "-fPIC", + "-DMACOS_ENABLED", + "-DUNIX_ENABLED", + "-DTHREADS_ENABLED", + "-DDEBUG_ENABLED", + "-DNDEBUG", + "-DGDEXTENSION", + "-I/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source/tree_numeric_core.cpp" + ] + }, + { + "phase": "link", + "pid": 47241, + "argv": [ + "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++", + "-o", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/libtree_numeric_core.macos.template_debug.dylib", + "-arch", + "arm64", + "-isysroot", + "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk", + "-fvisibility=hidden", + "-Wl,-S", + "-Wl,-x", + "-Wl,-dead_strip", + "-shared", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/objects/062-tree_numeric_core.os", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-sdk-lifetime-build-r133/libgodot-cpp.macos.template_debug.arm64.a" + ] + } + ], + "SDK_compilations": 0, + "SDK_archive_reused": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-sdk-lifetime-build-r133/libgodot-cpp.macos.template_debug.arm64.a", + "bytes": 2284912, + "sha256": "4d54f0980c3f445f3013cddb859135b619f28a91205fc8b9fbc9d10bc76c52c3" + }, + "SDK_archive_rebuilt": false, + "old_bridge_object_reused": false, + "Godot_loaded": false, + "selected": false, + "unit_accepted": false, + "performance_accepted": false, + "limits": [ + "Exact r333 Guest batch bridge one-object compile and link to authenticated unchanged r133 SDK archive only; no SDK recompilation, Godot load, protocol, performance or unit acceptance." + ] +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/011-input.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/011-input.json.gz new file mode 100644 index 0000000..d1efdc1 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/011-input.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/012-libtree_numeric_core.macos.template_debug.dylib.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/012-libtree_numeric_core.macos.template_debug.dylib.gz new file mode 100644 index 0000000..5d421cd Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/012-libtree_numeric_core.macos.template_debug.dylib.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/013-ended.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/013-ended.json new file mode 100644 index 0000000..f39846b --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/013-ended.json @@ -0,0 +1,35 @@ +{ + "pid": 47241, + "argv": [ + "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++", + "-o", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/libtree_numeric_core.macos.template_debug.dylib", + "-arch", + "arm64", + "-isysroot", + "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk", + "-fvisibility=hidden", + "-Wl,-S", + "-Wl,-x", + "-Wl,-dead_strip", + "-shared", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/objects/062-tree_numeric_core.os", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-sdk-lifetime-build-r133/libgodot-cpp.macos.template_debug.arm64.a" + ], + "pgid": 47241, + "ended_utc": "2026-10-12T04:27:09.948383+00:00", + "exit_code": 0, + "duration_seconds": 0.30862637499999934, + "cleanup": [ + { + "attempt": 0, + "pgid": 47241, + "members_before": [], + "group_signal": null, + "tracked_parent_signal": null + } + ], + "remaining": [], + "cleanup_errors": [], + "foreign_process_or_group_signals": 0 +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/014-started.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/014-started.json new file mode 100644 index 0000000..6f178d6 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/014-started.json @@ -0,0 +1,31 @@ +{ + "pid": 47241, + "owner_pid": 47179, + "pgid": 47241, + "argv": [ + "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++", + "-o", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/libtree_numeric_core.macos.template_debug.dylib", + "-arch", + "arm64", + "-isysroot", + "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk", + "-fvisibility=hidden", + "-Wl,-S", + "-Wl,-x", + "-Wl,-dead_strip", + "-shared", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/objects/062-tree_numeric_core.os", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-sdk-lifetime-build-r133/libgodot-cpp.macos.template_debug.arm64.a" + ], + "started_utc": "2026-10-12T04:27:09.672403+00:00", + "initial_members": [ + { + "pid": 47241, + "ppid": 47179, + "pgid": 47241, + "args": "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -o /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/libtree_numeric_core.macos.template_debug.dylib -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -fvisibility=hidden -Wl,-S -Wl,-x -Wl,-dead_strip -shared /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-build-r334/objects/062-tree_numeric_core.os /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-sdk-lifetime-build-r133/libgodot-cpp.macos.template_debug.arm64.a" + } + ], + "owned_new_session": true +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/015-stderr.log b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/015-stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/016-stdout.log b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/016-stdout.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/017-link-phase.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/017-link-phase.json new file mode 100644 index 0000000..85b08fd --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/017-link-phase.json @@ -0,0 +1,28 @@ +{ + "name": "link", + "result": { + "pid": 47241, + "exit_code": 0, + "timed_out": false, + "error_lines": [], + "duration_seconds": 0.30894625 + }, + "capture": { + "passed": true, + "cleanup": [ + { + "attempt": 0, + "pgid": 47241, + "members_before": [], + "group_signal": null, + "tracked_parent_signal": null + } + ], + "cleanup_errors": [], + "all_captured_ended": true, + "foreign_process_or_group_signals": 0 + }, + "full_input_inventory_before_verified": true, + "full_input_inventory_after_verified": true, + "post_input_error": null +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/018-062-tree_numeric_core.os.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/018-062-tree_numeric_core.os.gz new file mode 100644 index 0000000..85f987a Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/018-062-tree_numeric_core.os.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/019-p23-02-native-input-copy-build-r334.py.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/019-p23-02-native-input-copy-build-r334.py.gz new file mode 100644 index 0000000..401145f Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/019-p23-02-native-input-copy-build-r334.py.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/020-p23-02-native-input-copy-build-root-verification-r334.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/020-p23-02-native-input-copy-build-root-verification-r334.json.gz new file mode 100644 index 0000000..747fb3f Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/020-p23-02-native-input-copy-build-root-verification-r334.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/021-input-before-allocation-guard.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/021-input-before-allocation-guard.json new file mode 100644 index 0000000..4026c01 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/021-input-before-allocation-guard.json @@ -0,0 +1,58 @@ +{ + "plan_id": "P23-02", + "status": "uncompiled_implementation_candidate", + "parent": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-hot-loop-candidate-r326/input.json", + "bytes": 3185, + "sha256": "27141ccb37a741cc468bf57cf6e5da2250b729a2fa21bbda5fa1b7f15df7b254" + }, + "contract": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-work-contract-r332.json", + "bytes": 2058, + "sha256": "33a6555addd3471f2f00f35659e3f4e69f7fa26598755f8af6b0deabbf8932c5" + }, + "candidate_pins": { + "scripts/guest_service.gd": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/scripts/guest_service.gd", + "bytes": 62505, + "sha256": "77ce52ebeed6a89f3e397de01572b17ea3e3cb246f7daca9145a1a192389969e" + }, + "scripts/simulation_runtime.gd": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/scripts/simulation_runtime.gd", + "bytes": 612068, + "sha256": "7eb24adbf91fe53cde14954dda12abd5efb05130de7d356d8df281ee99065e86" + }, + "source/guest_candidate_batch.inc": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source/guest_candidate_batch.inc", + "bytes": 28222, + "sha256": "3623a7ca03b96118c927662fc5a95c1f73e20251d5ef4b04ec519603c3c05ba9" + }, + "source/tree_core.hpp": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source/tree_core.hpp", + "bytes": 3467, + "sha256": "5f67d85bfc91d5c7830aabd8089f4bca05883045d671d4e683d7c532cf3a34a1" + }, + "source/tree_numeric_core.cpp": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source/tree_numeric_core.cpp", + "bytes": 57762, + "sha256": "d948b9c2033fd9f2ad8b85a1d5ed51fd431eb78b68b3634dc020df104712ad11" + } + }, + "original_method_sources": [ + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage/scripts/world/path_service.gd", + "bytes": 132925, + "sha256": "6b7f4e989ea9b09495f814d8ecb294028d10794005966414bf52640e122b0d17" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage/autoload/simulation_runtime.gd", + "bytes": 612068, + "sha256": "7eb24adbf91fe53cde14954dda12abd5efb05130de7d356d8df281ee99065e86" + } + ], + "selected": false, + "adopted": false, + "unit_accepted": false, + "performance_accepted": false, + "formal_completed_added": 0 +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/022-input.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/022-input.json new file mode 100644 index 0000000..53bf455 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/022-input.json @@ -0,0 +1,70 @@ +{ + "plan_id": "P23-02", + "status": "uncompiled_implementation_candidate", + "parent": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-hot-loop-candidate-r326/input.json", + "bytes": 3185, + "sha256": "27141ccb37a741cc468bf57cf6e5da2250b729a2fa21bbda5fa1b7f15df7b254" + }, + "contract": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-work-contract-r332.json", + "bytes": 2058, + "sha256": "33a6555addd3471f2f00f35659e3f4e69f7fa26598755f8af6b0deabbf8932c5" + }, + "candidate_pins": { + "scripts/guest_service.gd": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/scripts/guest_service.gd", + "bytes": 62505, + "sha256": "77ce52ebeed6a89f3e397de01572b17ea3e3cb246f7daca9145a1a192389969e" + }, + "scripts/simulation_runtime.gd": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/scripts/simulation_runtime.gd", + "bytes": 612068, + "sha256": "7eb24adbf91fe53cde14954dda12abd5efb05130de7d356d8df281ee99065e86" + }, + "source/guest_candidate_batch.inc": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source/guest_candidate_batch.inc", + "bytes": 28222, + "sha256": "3623a7ca03b96118c927662fc5a95c1f73e20251d5ef4b04ec519603c3c05ba9" + }, + "source/tree_core.hpp": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source/tree_core.hpp", + "bytes": 3467, + "sha256": "5f67d85bfc91d5c7830aabd8089f4bca05883045d671d4e683d7c532cf3a34a1" + }, + "source/tree_numeric_core.cpp": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source/tree_numeric_core.cpp", + "bytes": 58156, + "sha256": "5957fab6cdef5f44ef69cbfaa1685c5eba2aefcab7d6fb7b8bf383e54386aa01" + } + }, + "original_method_sources": [ + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage/scripts/world/path_service.gd", + "bytes": 132925, + "sha256": "6b7f4e989ea9b09495f814d8ecb294028d10794005966414bf52640e122b0d17" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage/autoload/simulation_runtime.gd", + "bytes": 612068, + "sha256": "7eb24adbf91fe53cde14954dda12abd5efb05130de7d356d8df281ee99065e86" + } + ], + "selected": false, + "adopted": false, + "unit_accepted": false, + "performance_accepted": false, + "formal_completed_added": 0, + "precompile_allocation_guard_repair": [ + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source-before-allocation-guard.cpp", + "bytes": 57762, + "sha256": "d948b9c2033fd9f2ad8b85a1d5ed51fd431eb78b68b3634dc020df104712ad11" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/input-before-allocation-guard.json", + "bytes": 3183, + "sha256": "5004a1b7d0d250a4e32107e88673c296df9a9291ba74424d36be61a7bfa62117" + } + ] +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/023-guest_service.gd.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/023-guest_service.gd.gz new file mode 100644 index 0000000..0e09bc6 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/023-guest_service.gd.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/024-simulation_runtime.gd.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/024-simulation_runtime.gd.gz new file mode 100644 index 0000000..1ed9f01 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/024-simulation_runtime.gd.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/025-guest_candidate_batch.inc b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/025-guest_candidate_batch.inc new file mode 100644 index 0000000..29d7fff --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/025-guest_candidate_batch.inc @@ -0,0 +1,395 @@ +private: + // This scope owns names only for one call. It retains no guest, candidate, + // callback, result, cache or saved simulation state across calls. + struct GuestBatchKey { + const StringName name; + const String text; + explicit GuestBatchKey(const char *s):name(s,false),text(name) {} + }; + // Immutable key objects belong to one public batch call only. No guest, + // dictionary, callback, cached value or name survives that call. + struct GuestBatchNames { + const GuestBatchKey k_empty{""}; + const GuestBatchKey k_ADULT_NOT_VERIFIED{"ADULT_NOT_VERIFIED"}; + const GuestBatchKey k_CANNOT_PAY{"CANNOT_PAY"}; + const GuestBatchKey k_CONTENT_FILTERED{"CONTENT_FILTERED"}; + const GuestBatchKey k_ETA_AFTER_EXIT{"ETA_AFTER_EXIT"}; + const GuestBatchKey k_FACILITY_CLOSED{"FACILITY_CLOSED"}; + const GuestBatchKey k_FORBIDDEN_GUEST_TAG{"FORBIDDEN_GUEST_TAG"}; + const GuestBatchKey k_GUEST_TYPE_NOT_ALLOWED{"GUEST_TYPE_NOT_ALLOWED"}; + const GuestBatchKey k_ILLEGALITY_REFUSED{"ILLEGALITY_REFUSED"}; + const GuestBatchKey k_INVALID_NEED_MAP{"INVALID_NEED_MAP"}; + const GuestBatchKey k_MISSING_INPUTS{"MISSING_INPUTS"}; + const GuestBatchKey k_MISSING_PERMISSION{"MISSING_PERMISSION"}; + const GuestBatchKey k_QUALITY_TOO_LOW{"QUALITY_TOO_LOW"}; + const GuestBatchKey k_RISK_REFUSED{"RISK_REFUSED"}; + const GuestBatchKey k_UNREACHABLE{"UNREACHABLE"}; + const GuestBatchKey k_WAIT_HARD_LIMIT{"WAIT_HARD_LIMIT"}; + const GuestBatchKey k_absolute_minute{"absolute_minute"}; + const GuestBatchKey k_accepted{"accepted"}; + const GuestBatchKey k_addiction_by_tag{"addiction_by_tag"}; + const GuestBatchKey k_adult{"adult"}; + const GuestBatchKey k_adult_content_enabled{"adult_content_enabled"}; + const GuestBatchKey k_adult_only{"adult_only"}; + const GuestBatchKey k_adult_verified{"adult_verified"}; + const GuestBatchKey k_allow_credit{"allow_credit"}; + const GuestBatchKey k_allowed_guest_types{"allowed_guest_types"}; + const GuestBatchKey k_credit_allowed{"credit_allowed"}; + const GuestBatchKey k_credit_limit_gold{"credit_limit_gold"}; + const GuestBatchKey k_current_minute{"current_minute"}; + const GuestBatchKey k_debt_gold{"debt_gold"}; + const GuestBatchKey k_discretionary{"discretionary"}; + const GuestBatchKey k_entertainment{"entertainment"}; + const GuestBatchKey k_estimated_total_gold{"estimated_total_gold"}; + const GuestBatchKey k_exit_reason{"exit_reason"}; + const GuestBatchKey k_exit_threshold{"exit_threshold"}; + const GuestBatchKey k_expected_quality{"expected_quality"}; + const GuestBatchKey k_expected_wait{"expected_wait"}; + const GuestBatchKey k_facility_id{"facility_id"}; + const GuestBatchKey k_facility_tags{"facility_tags"}; + const GuestBatchKey k_forbidden_guest_tags{"forbidden_guest_tags"}; + const GuestBatchKey k_frugal{"frugal"}; + const GuestBatchKey k_gambling{"gambling"}; + const GuestBatchKey k_get_definition{"get_definition"}; + const GuestBatchKey k_get_guest{"get_guest"}; + const GuestBatchKey k_group_fit{"group_fit"}; + const GuestBatchKey k_guest_type_id{"guest_type_id"}; + const GuestBatchKey k_hunger{"hunger"}; + const GuestBatchKey k_hygiene{"hygiene"}; + const GuestBatchKey k_illegal_level{"illegal_level"}; + const GuestBatchKey k_inputs_available{"inputs_available"}; + const GuestBatchKey k_instance_id{"instance_id"}; + const GuestBatchKey k_intimacy{"intimacy"}; + const GuestBatchKey k_is_open{"is_open"}; + const GuestBatchKey k_legal_permission_override{"legal_permission_override"}; + const GuestBatchKey k_legal_sensitivity{"legal_sensitivity"}; + const GuestBatchKey k_leisure{"leisure"}; + const GuestBatchKey k_medical{"medical"}; + const GuestBatchKey k_minimum_quality{"minimum_quality"}; + const GuestBatchKey k_need_effects{"need_effects"}; + const GuestBatchKey k_need_priority{"need_priority"}; + const GuestBatchKey k_need_relief{"need_relief"}; + const GuestBatchKey k_needs{"needs"}; + const GuestBatchKey k_novelty{"novelty"}; + const GuestBatchKey k_ok{"ok"}; + const GuestBatchKey k_open{"open"}; + const GuestBatchKey k_open_at_arrival{"open_at_arrival"}; + const GuestBatchKey k_ordered{"ordered"}; + const GuestBatchKey k_planned_exit_at{"planned_exit_at"}; + const GuestBatchKey k_preference{"preference"}; + const GuestBatchKey k_preference_weights{"preference_weights"}; + const GuestBatchKey k_price_burden{"price_burden"}; + const GuestBatchKey k_price_gold{"price_gold"}; + const GuestBatchKey k_quality{"quality"}; + const GuestBatchKey k_quoted_price{"quoted_price"}; + const GuestBatchKey k_ranked{"ranked"}; + const GuestBatchKey k_reachable{"reachable"}; + const GuestBatchKey k_reason{"reason"}; + const GuestBatchKey k_rejected{"rejected"}; + const GuestBatchKey k_repetition_penalty{"repetition_penalty"}; + const GuestBatchKey k_required_guest_tags{"required_guest_tags"}; + const GuestBatchKey k_requires_adult_verified{"requires_adult_verified"}; + const GuestBatchKey k_respect_survival_reserve{"respect_survival_reserve"}; + const GuestBatchKey k_risk{"risk"}; + const GuestBatchKey k_risk_level{"risk_level"}; + const GuestBatchKey k_risk_sensitivity{"risk_sensitivity"}; + const GuestBatchKey k_risk_tolerance{"risk_tolerance"}; + const GuestBatchKey k_service_category{"service_category"}; + const GuestBatchKey k_sleep{"sleep"}; + const GuestBatchKey k_spendthrift{"spendthrift"}; + const GuestBatchKey k_supported{"supported"}; + const GuestBatchKey k_tags{"tags"}; + const GuestBatchKey k_tourism{"tourism"}; + const GuestBatchKey k_travel_minutes{"travel_minutes"}; + const GuestBatchKey k_urgency{"urgency"}; + const GuestBatchKey k_utility{"utility"}; + const GuestBatchKey k_utility_terms{"utility_terms"}; + const GuestBatchKey k_visited_facility_ids{"visited_facility_ids"}; + const GuestBatchKey k_wait_hard_limit{"wait_hard_limit"}; + const GuestBatchKey k_wait_minutes{"wait_minutes"}; + const GuestBatchKey k_wallet_gold{"wallet_gold"}; + Variant value(const Dictionary &d,const GuestBatchKey &k,const Variant &fallback=Variant()) { + if(d.has(k.name)) return d[k.name]; + return d.has(k.text) ? d[k.text] : fallback; + } + bool has(const Dictionary &d,const GuestBatchKey &k) { return d.has(k.name) || d.has(k.text); } + int64_t integer(const Dictionary &d,const GuestBatchKey &k,int64_t fallback=0) { return value(d,k,fallback); } + bool flag(const Dictionary &d,const GuestBatchKey &k,bool fallback=false) { + const Variant v=value(d,k,fallback); + return v.get_type()==Variant::INT ? int64_t(v)!=0 : bool(v); + } + }; + struct GuestBatchRow { + Dictionary candidate,relief; + StringName id; + String id_text; + bool need_map_valid=true; + int64_t priority=0,utility=0,urgency=0,travel=0; + }; + struct GuestBatchFacilityOrder { + bool operator()(const GuestBatchRow &a,const GuestBatchRow &b) const { return a.id_text < b.id_text; } + }; + struct GuestBatchRankOrder { + bool operator()(const GuestBatchRow &a,const GuestBatchRow &b) const { + if(a.priority!=b.priority) return a.priority>b.priority; + if(a.utility!=b.utility) return a.utility>b.utility; + if(a.urgency!=b.urgency) return a.urgency>b.urgency; + if(a.travel!=b.travel) return a.travel(std::max(x,low),high); + } + static bool guest_name_value(const Variant &v) { + return v.get_type()==Variant::STRING || v.get_type()==Variant::STRING_NAME; + } + static bool guest_names_supported(const Variant &v) { + // The original name helper ignores non-arrays, but converting unusual + // array elements is deliberately left to the original GDScript path. + if(v.get_type()!=Variant::ARRAY) return true; + const Array a=v; + for(int64_t i=0;i ordered; + for(int64_t i=0;i sorter; + if(!ordered.empty()) sorter.sort(ordered.data(),ordered.size()); + out.clear();for(const String &s:ordered) out.append(StringName(s)); + return out; + } + static bool guest_normalize_need(GuestBatchNames &n,const Variant &v,Dictionary &out) { + if(v.get_type()!=Variant::DICTIONARY) return false; + const Dictionary source=v; + if(source.size()>6) return false; + const Array keys=source.keys(); + for(int64_t i=0;iname) {valid=true;break;} + if(!valid || out.has(k) || source[keys[i]].get_type()!=Variant::INT) return false; + out[k]=source[keys[i]]; + } + return true; + } + static bool guest_candidate_supported(GuestBatchNames &n,const Dictionary &d) { + // Adding canonical/result StringName keys to a typed dictionary can + // invoke conversion/error semantics; that entire domain stays original. + if(d.is_typed()) return false; + for(const GuestBatchKey *s: {&n.k_travel_minutes,&n.k_wait_minutes,&n.k_expected_wait,&n.k_wait_hard_limit,&n.k_risk_level,&n.k_risk,&n.k_illegal_level,&n.k_expected_quality,&n.k_quality,&n.k_minimum_quality,&n.k_estimated_total_gold,&n.k_price_gold,&n.k_quoted_price,&n.k_need_priority,&n.k_preference,&n.k_novelty,&n.k_group_fit,&n.k_price_burden,&n.k_risk_sensitivity,&n.k_repetition_penalty,&n.k_urgency}) + if(n.has(d,*s) && n.value(d,*s).get_type()!=Variant::INT) return false; + for(const GuestBatchKey *s: {&n.k_inputs_available,&n.k_adult_only,&n.k_requires_adult_verified,&n.k_is_open,&n.k_open,&n.k_open_at_arrival,&n.k_reachable,&n.k_credit_allowed,&n.k_allow_credit,&n.k_discretionary,&n.k_respect_survival_reserve,&n.k_legal_permission_override,&n.k_ok}) { + if(!n.has(d,*s)) continue; + const Variant::Type t=n.value(d,*s).get_type(); + if(t!=Variant::BOOL && t!=Variant::INT) return false; + } + for(const GuestBatchKey *s: {&n.k_facility_id,&n.k_instance_id,&n.k_service_category}) if(n.has(d,*s) && !guest_name_value(n.value(d,*s))) return false; + for(const GuestBatchKey *s: {&n.k_required_guest_tags,&n.k_forbidden_guest_tags,&n.k_allowed_guest_types,&n.k_facility_tags,&n.k_tags}) if(!guest_names_supported(n.value(d,*s,Array()))) return false; + return true; + } + static int64_t guest_price(GuestBatchNames &n,const Dictionary &c) { + return std::max(int64_t(n.value(c,n.k_estimated_total_gold,n.value(c,n.k_price_gold,n.value(c,n.k_quoted_price,int64_t(0))))),0); + } + static bool guest_discretionary(GuestBatchNames &n,const Dictionary &c) { + if(n.flag(c,n.k_discretionary)) return true; + const StringName category=n.value(c,n.k_service_category,n.k_empty.name); + for(const GuestBatchKey *s: {&n.k_leisure,&n.k_entertainment,&n.k_gambling,&n.k_intimacy,&n.k_tourism}) if(category==s->name) return true; + const Array tags=guest_names(n.value(c,n.k_facility_tags,n.value(c,n.k_tags,Array()))); + for(const GuestBatchKey *s: {&n.k_leisure,&n.k_entertainment,&n.k_gambling,&n.k_adult,&n.k_intimacy}) if(tags.has(s->name)) return true; + return false; + } + static StringName guest_rejection(GuestBatchNames &n,const GuestBatchRow &row, + const Dictionary &context,const StringName &type,const Array &tags,bool adult, + int64_t planned_exit,int64_t decision_minute,int64_t cash,int64_t credit, + int64_t reserve,int64_t tolerance,int64_t legal,int64_t minimum) { + const Dictionary &c=row.candidate; + if(!row.need_map_valid) return n.k_INVALID_NEED_MAP.name; + if(!n.flag(c,n.k_inputs_available,true)) return n.k_MISSING_INPUTS.name; + if(n.flag(c,n.k_adult_only,n.flag(c,n.k_requires_adult_verified))) { + if(!adult) return n.k_ADULT_NOT_VERIFIED.name; + if(!n.flag(context,n.k_adult_content_enabled,true)) return n.k_CONTENT_FILTERED.name; + } + const Array required=guest_names(n.value(c,n.k_required_guest_tags,Array())); + for(int64_t i=0;i(n.integer(c,n.k_travel_minutes),0); + if(decision_minute>=0 && the_tree_native::signed_add(decision_minute,travel)>planned_exit) return n.k_ETA_AFTER_EXIT.name; + const int64_t price=guest_price(n,c); + const int64_t available=n.flag(c,n.k_respect_survival_reserve,guest_discretionary(n,c)) ? std::max(guest_sub(cash,reserve),0) : cash; + if(price>available && (!n.flag(c,n.k_credit_allowed,n.flag(c,n.k_allow_credit)) || guest_sub(price,available)>credit)) return n.k_CANNOT_PAY.name; + const int64_t wait=std::max(int64_t(n.value(c,n.k_wait_minutes,n.value(c,n.k_expected_wait,int64_t(0)))),0); + const int64_t hard=std::max(int64_t(n.value(c,n.k_wait_hard_limit,n.value(context,n.k_wait_hard_limit,int64_t(120)))),0); + if(wait>=hard) return n.k_WAIT_HARD_LIMIT.name; + const int64_t risk=guest_clamp(int64_t(n.value(c,n.k_risk_level,n.value(c,n.k_risk,int64_t(0)))),0,100); + if(risk>tolerance) return n.k_RISK_REFUSED.name; + if(guest_clamp(n.integer(c,n.k_illegal_level),0,100)>guest_sub(100,legal) && !n.flag(c,n.k_legal_permission_override)) return n.k_ILLEGALITY_REFUSED.name; + const int64_t quality=guest_clamp(int64_t(n.value(c,n.k_expected_quality,n.value(c,n.k_quality,int64_t(0)))),0,100); + if(quality(int64_t(raw_relief),0); + else if(raw_relief.get_type()==Variant::DICTIONARY) { + for(const GuestBatchKey *s: {&n.k_hunger,&n.k_sleep,&n.k_hygiene,&n.k_medical,&n.k_leisure,&n.k_intimacy}) { + const int64_t effect=row.relief.get(s->name,int64_t(0)); + const int64_t need=needs[s->name]; + relief=std::max(relief,signed_product(std::max(effect,0),need)/100); + if(effect>0) { + default_urgency=std::max(default_urgency,need); + if(s->name==n.k_hunger.name || s->name==n.k_sleep.name || s->name==n.k_leisure.name || s->name==n.k_intimacy.name) priority=std::max(priority,need); + } + } + } + int64_t default_preference=0; + const Array facility_tags=guest_names(n.value(c,n.k_facility_tags,n.value(c,n.k_tags,Array()))); + for(int64_t i=0;i(the_tree_native::signed_add(cash,credit),1); + const int64_t numerator=guest_sub(the_tree_native::signed_add(signed_product(guest_price(n,c),100),power),1); + const int64_t burden=n.integer(c,n.k_price_burden,guest_clamp(numerator/power,0,100)); + const int64_t travel=std::max(n.integer(c,n.k_travel_minutes),0); + const int64_t wait=std::max(int64_t(n.value(c,n.k_wait_minutes,n.value(c,n.k_expected_wait,int64_t(0)))),0); + const int64_t risk=std::max(int64_t(n.value(c,n.k_risk,n.value(c,n.k_risk_level,int64_t(0)))),0); + const int64_t sensitivity=std::max(n.integer(c,n.k_risk_sensitivity,the_tree_native::signed_add(guest_sub(100,tolerance),24)/25),0); + const int64_t repetition=n.integer(c,n.k_repetition_penalty,seen?10:0); + int64_t utility=signed_product(relief,8); + utility=the_tree_native::signed_add(utility,signed_product(preference,5)); + utility=the_tree_native::signed_add(utility,signed_product(quality,3)); + utility=the_tree_native::signed_add(utility,signed_product(novelty,2)); + utility=the_tree_native::signed_add(utility,signed_product(group,2)); + utility=guest_sub(utility,signed_product(burden,5)); + utility=guest_sub(utility,signed_product(travel,2)); + utility=guest_sub(utility,signed_product(wait,3)); + utility=guest_sub(utility,signed_product(risk,sensitivity)); + utility=guest_sub(utility,repetition); + Dictionary result=c.duplicate(true); + result[n.k_facility_id.name]=row.id;result[n.k_need_priority.name]=priority; + result[n.k_utility.name]=utility;result[n.k_urgency.name]=n.integer(c,n.k_urgency,default_urgency);result[n.k_travel_minutes.name]=travel; + Dictionary terms; + terms[n.k_need_relief.name]=relief;terms[n.k_preference.name]=preference;terms[n.k_expected_quality.name]=quality; + terms[n.k_novelty.name]=novelty;terms[n.k_group_fit.name]=group;terms[n.k_price_burden.name]=burden; + terms[n.k_travel_minutes.name]=travel;terms[n.k_wait_minutes.name]=wait;terms[n.k_risk.name]=risk; + terms[n.k_risk_sensitivity.name]=sensitivity;terms[n.k_repetition_penalty.name]=repetition; + result[n.k_utility_terms.name]=terms; + row.candidate=result;row.priority=priority;row.utility=utility;row.urgency=result[n.k_urgency.name];row.travel=travel; + } +public: + Dictionary guest_candidate_batch(Object *owner,const StringName &guest_id,const Array &facilities,const Dictionary &context) { + // No owner/input mutation occurs in the entire implementation. A failed + // new standard-container allocation cannot escape the native boundary + // or publish a partially built result. Engine-internal allocation failure + // is not claimed to be covered by these standard C++ exception catches. + Dictionary unsupported;unsupported[StringName("supported",false)]=false; + try { return guest_candidate_batch_impl(owner,guest_id,facilities,context); } + catch(const std::bad_alloc &) { return unsupported; } + catch(const std::length_error &) { return unsupported; } + } +private: + Dictionary guest_candidate_batch_impl(Object *owner,const StringName &guest_id,const Array &facilities,const Dictionary &context) { + GuestBatchNames n;const ProjectionNames p; + Dictionary unsupported;unsupported[n.k_supported.name]=false; + if(!builtin(p,owner,"res://scripts/guest/guest_service.gd")) return unsupported; + // No caller callback is invoked during preflight or computation. Callback + // contexts use original extraction/evaluation/decision in their entirety. + const Array context_keys=context.keys(); + for(int64_t i=0;icall(n.k_get_guest.name,guest_id); + if(!builtin(p,guest,"res://scripts/guest/guest_runtime.gd")) return unsupported; + const Variant typev=guest->get(n.k_guest_type_id.name); + if(!guest_name_value(typev)) return unsupported; + const StringName type=typev; + Object *definition=owner->call(n.k_get_definition.name,type); + if(!builtin(p,definition,"res://scripts/guest/guest_definition.gd")) return unsupported; + for(const GuestBatchKey *s: {&n.k_wallet_gold,&n.k_credit_limit_gold,&n.k_debt_gold,&n.k_planned_exit_at}) if(guest->get(s->name).get_type()!=Variant::INT) return unsupported; + for(const GuestBatchKey *s: {&n.k_risk_tolerance,&n.k_legal_sensitivity,&n.k_minimum_quality}) if(definition->get(s->name).get_type()!=Variant::INT) return unsupported; + if(definition->get(n.k_adult_verified.name).get_type()!=Variant::BOOL || owner->get(n.k_current_minute.name).get_type()!=Variant::INT) return unsupported; + if(guest->get(n.k_needs.name).get_type()!=Variant::DICTIONARY || guest->get(n.k_addiction_by_tag.name).get_type()!=Variant::DICTIONARY || guest->get(n.k_visited_facility_ids.name).get_type()!=Variant::ARRAY || definition->get(n.k_tags.name).get_type()!=Variant::ARRAY || definition->get(n.k_preference_weights.name).get_type()!=Variant::DICTIONARY) return unsupported; + const Dictionary needs=guest->get(n.k_needs.name),addiction=guest->get(n.k_addiction_by_tag.name),weights=definition->get(n.k_preference_weights.name); + const Array visited=guest->get(n.k_visited_facility_ids.name),tags=definition->get(n.k_tags.name); + if(!guest_names_supported(visited) || !guest_names_supported(tags)) return unsupported; + for(const GuestBatchKey *s: {&n.k_hunger,&n.k_sleep,&n.k_hygiene,&n.k_medical,&n.k_leisure,&n.k_intimacy}) if(!needs.has(s->name) || needs[s->name].get_type()!=Variant::INT) return unsupported; + const Array addiction_values=addiction.values(),weight_values=weights.values(); + int64_t max_addiction=0; + for(int64_t i=0;i(max_addiction,int64_t(addiction_values[i]));} + for(int64_t i=0;i ordered; + for(int64_t i=0;iname==n.k_need_relief.name && v.get_type()==Variant::INT) continue; + Dictionary normalized; + if(!guest_normalize_need(n,v,normalized)) {row.need_map_valid=false;break;} + if(s->name==n.k_need_relief.name) row.relief=normalized; + } + ordered.push_back(row); + } + SortArray facility_sort; + if(!ordered.empty()) facility_sort.sort(ordered.data(),ordered.size()); + const int64_t cash=guest->get(n.k_wallet_gold.name); + const int64_t credit=std::max(guest_sub(guest->get(n.k_credit_limit_gold.name),guest->get(n.k_debt_gold.name)),0); + int64_t reserve=0; + if(max_addiction<75) reserve=tags.has(n.k_spendthrift.name) ? cash/10 : (tags.has(n.k_frugal.name) ? cash/2 : signed_product(cash,3)/10); + const int64_t tolerance=definition->get(n.k_risk_tolerance.name); + const int64_t minute=n.integer(context,n.k_absolute_minute,owner->get(n.k_current_minute.name)); + TypedArray raw_ordered,accepted,rejected,ranked; + std::vector rank_rows; + for(GuestBatchRow &row:ordered) { + raw_ordered.append(row.candidate); + const StringName reason=guest_rejection(n,row,context,type,tags,definition->get(n.k_adult_verified.name),guest->get(n.k_planned_exit_at.name),minute,cash,credit,reserve,tolerance,definition->get(n.k_legal_sensitivity.name),definition->get(n.k_minimum_quality.name)); + if(!reason.is_empty()) {Dictionary failure;failure[n.k_facility_id.name]=row.id_text;failure[n.k_reason.name]=String(reason);rejected.append(failure);continue;} + accepted.append(row.candidate); + guest_evaluate(n,row,needs,weights,visited,cash,credit,tolerance); + if(n.flag(row.candidate,n.k_ok,true)) rank_rows.push_back(row); + } + SortArray rank_sort; + if(!rank_rows.empty()) rank_sort.sort(rank_rows.data(),rank_rows.size()); + for(const GuestBatchRow &row:rank_rows) ranked.append(row.candidate); + Dictionary result;result[n.k_supported.name]=true;result[n.k_ordered.name]=raw_ordered; + result[n.k_accepted.name]=accepted;result[n.k_rejected.name]=rejected;result[n.k_ranked.name]=ranked; + return result; + } + +public: diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/026-tree_core.hpp b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/026-tree_core.hpp new file mode 100644 index 0000000..ea7ebd9 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/026-tree_core.hpp @@ -0,0 +1,78 @@ +#pragma once +// Standalone numeric prototype; not connected to Godot or production. +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +namespace the_tree_native { +using I = std::int64_t; +struct Edge { I neighbor, cost; }; +struct Result { + std::string status = "usable"; + std::vector costs, parents, discovered, parent_discovered, settled; +}; +I signed_add(I a, I b) { + const auto sum = static_cast(a) + static_cast(b); + if (sum <= static_cast(std::numeric_limits::max())) return static_cast(sum); + return std::numeric_limits::min() + static_cast(sum - (std::uint64_t(1) << 63)); +} +template +Result search(I n, I start, const std::vector& goals, EdgeProvider&& edge_provider) { + Result r; + if (start < 0 || start >= n) { r.status = "unusable"; return r; } + r.costs.assign(n, std::numeric_limits::max()); + r.parents.assign(n, -1); + std::vector finalized(n, 0), pending(n, 0); + bool unknown_goal = false; + I remaining = 0; + for (I goal : goals) { + if (goal < 0 || goal >= n) { unknown_goal = true; continue; } + if (!pending[goal]) { pending[goal] = 1; ++remaining; } + } + r.costs[start] = 0; r.discovered.push_back(start); + // Positive edges cannot enqueue another node at this entry cost. + // Lexicographic (cost,index) ordering preserves the old sorted cost buckets. + using Entry=std::pair; + std::priority_queue,std::greater> frontier; + frontier.emplace(0,start); + while (!frontier.empty()) { + const auto entry=frontier.top();frontier.pop(); + const I entry_cost=entry.first,current=entry.second; + { + if (finalized[current] || entry_cost != r.costs[current]) continue; + finalized[current] = 1; + r.settled.push_back(current); + if (pending[current]) { pending[current] = 0; --remaining; } + if (!remaining && !unknown_goal) return r; + for (const Edge& edge : edge_provider(current)) { + if (edge.cost <= 0) { r.status = "unusable"; return r; } + const I neighbor = edge.neighbor; + if (neighbor < 0 || neighbor >= n) { r.status = "unusable"; return r; } + const I cost = signed_add(r.costs[current], edge.cost); + if (cost < r.costs[current]) { r.status = "wrapped"; return r; } + const I known = r.costs[neighbor]; + const bool better_parent = cost == known && r.parents[neighbor] >= 0 && current < r.parents[neighbor]; + if (cost > known || (cost == known && !better_parent)) continue; + if (r.parents[neighbor] < 0) { + r.parent_discovered.push_back(neighbor); + if (neighbor != start) r.discovered.push_back(neighbor); + } + r.parents[neighbor] = current; + r.costs[neighbor] = cost; + if (finalized[neighbor]) r.settled.erase(std::remove(r.settled.begin(), r.settled.end(), neighbor), r.settled.end()); + finalized[neighbor] = 0; + frontier.emplace(cost,neighbor); + } + } + } + return r; +} +} // namespace the_tree_native diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/027-tree_numeric_core.cpp b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/027-tree_numeric_core.cpp new file mode 100644 index 0000000..5211b45 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/027-tree_numeric_core.cpp @@ -0,0 +1,895 @@ +// Isolated, uncompiled bridge prototype. No production registration or integration yet. +#include "tree_core.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace godot; +using the_tree_native::I; +using the_tree_native::Edge; + +class TheTreeNumericCore : public RefCounted { + GDCLASS(TheTreeNumericCore, RefCounted) +protected: + static void _bind_methods() { + ClassDB::bind_method(D_METHOD("performance_record_sample", "owner", "metric_id", "duration_us"), &TheTreeNumericCore::performance_record_sample); + ClassDB::bind_method(D_METHOD("guest_candidate_batch", "owner", "guest_id", "facilities", "context"), &TheTreeNumericCore::guest_candidate_batch); + ClassDB::bind_method(D_METHOD("guest_tree_edge_rows", "path", "current", "layers", "access"), &TheTreeNumericCore::guest_tree_edge_rows); + ClassDB::bind_method(D_METHOD("search", "cells", "indices", "start_index", "goals", "edge_provider"), &TheTreeNumericCore::search); + ClassDB::bind_method(D_METHOD("search_cached", "cells", "indices", "start_index", "goals", "edge_provider"), &TheTreeNumericCore::search_cached); + ClassDB::bind_method(D_METHOD("clear_edge_cache"), &TheTreeNumericCore::clear_edge_cache); + ClassDB::bind_method(D_METHOD("nearest_guest_access", "path", "start", "goals", "fallback_target", "layers", "access", "ticks"), &TheTreeNumericCore::nearest_guest_access); + ClassDB::bind_method(D_METHOD("project_guest_candidates", "runtime", "guest_id", "open_state", "degraded_state", "movement_scale", "stair_credit", "orthogonal_cost", "ticks"), &TheTreeNumericCore::project_guest_candidates); + } +private: + // Cache belongs to this instance and one caller-owned graph workspace. + // No reuse after cells, indices, filters or edge values change: the caller + // must clear it or release this core. The original search never uses it. + std::map> cached_edges; + // Per-public-call immutable names. No static/global lifetime, cached + // object values, script dispatch result or profile; recursive calls own + // separate scopes. Destruction precedes leaving the engine call. + struct ProjectionNames { + const StringName k_ACCESS_LAYER_DENIED{"ACCESS_LAYER_DENIED",false}; + const StringName k_CONNECTOR{"CONNECTOR",false}; + const StringName k_GOAL_NOT_PASSABLE{"GOAL_NOT_PASSABLE",false}; + const StringName k_GOAL_TEMPORARILY_BLOCKED{"GOAL_TEMPORARILY_BLOCKED",false}; + const StringName k_GOAL_UNREACHABLE{"GOAL_UNREACHABLE",false}; + const StringName k_OK{"OK",false}; + const StringName k_START_NOT_PASSABLE{"START_NOT_PASSABLE",false}; + const StringName k_START_TEMPORARILY_BLOCKED{"START_TEMPORARILY_BLOCKED",false}; + const StringName k__build_guest_query_tree_compact{"_build_guest_query_tree_compact",false}; + const StringName k__cache_key{"_cache_key",false}; + const StringName k__cell_traffic{"_cell_traffic",false}; + const StringName k__copy_path{"_copy_path",false}; + const StringName k__diagnose_no_route_reason{"_diagnose_no_route_reason",false}; + const StringName k__find_facility_access_path{"_find_facility_access_path",false}; + const StringName k__find_path_internal{"_find_path_internal",false}; + const StringName k__guest_access_batch_can_select{"_guest_access_batch_can_select",false}; + const StringName k__guest_batch_has_permitted_layer_crossing{"_guest_batch_has_permitted_layer_crossing",false}; + const StringName k__guest_has_checked_in{"_guest_has_checked_in",false}; + const StringName k__guest_step_connector_memo{"_guest_step_connector_memo",false}; + const StringName k__guest_tree_arithmetic_wrapped{"_guest_tree_arithmetic_wrapped",false}; + const StringName k__guest_tree_reconstruct_path{"_guest_tree_reconstruct_path",false}; + const StringName k__need_relief_for_facility_tags{"_need_relief_for_facility_tags",false}; + const StringName k__passable_cells{"_passable_cells",false}; + const StringName k__path_cache{"_path_cache",false}; + const StringName k__query_batch{"_query_batch",false}; + const StringName k__route_failure{"_route_failure",false}; + const StringName k__service_category_for_tags{"_service_category_for_tags",false}; + const StringName k__sorted_name_keys{"_sorted_name_keys",false}; + const StringName k_arithmetic_wrapped{"arithmetic_wrapped",false}; + const StringName k_available_quantity{"available_quantity",false}; + const StringName k_base_quality{"base_quality",false}; + const StringName k_base_service_minutes{"base_service_minutes",false}; + const StringName k_begin_guest_path_query_batch{"begin_guest_path_query_batch",false}; + const StringName k_cache_misses{"cache_misses",false}; + const StringName k_calculate_guest_batch_path_cost{"calculate_guest_batch_path_cost",false}; + const StringName k_candidates{"candidates",false}; + const StringName k_capacity{"capacity",false}; + const StringName k_compact{"compact",false}; + const StringName k_cost{"cost",false}; + const StringName k_cost_values{"cost_values",false}; + const StringName k_costs{"costs",false}; + const StringName k_current_cell{"current_cell",false}; + const StringName k_definition_id{"definition_id",false}; + const StringName k_definition_registry{"definition_registry",false}; + const StringName k_elevators{"elevators",false}; + const StringName k_end_guest_path_query_batch{"end_guest_path_query_batch",false}; + const StringName k_entrance{"entrance",false}; + const StringName k_estimated_total_gold{"estimated_total_gold",false}; + const StringName k_expected_quality{"expected_quality",false}; + const StringName k_expected_wait{"expected_wait",false}; + const StringName k_facility_id{"facility_id",false}; + const StringName k_facility_service{"facility_service",false}; + const StringName k_facility_tags{"facility_tags",false}; + const StringName k_get_connector{"get_connector",false}; + const StringName k_get_facility{"get_facility",false}; + const StringName k_get_facility_business_price{"get_facility_business_price",false}; + const StringName k_get_guest{"get_guest",false}; + const StringName k_get_instances{"get_instances",false}; + const StringName k_get_step_connector{"get_step_connector",false}; + const StringName k_graph_revision{"graph_revision",false}; + const StringName k_group_fit{"group_fit",false}; + const StringName k_guest_service{"guest_service",false}; + const StringName k_illegal_level{"illegal_level",false}; + const StringName k_indices{"indices",false}; + const StringName k_inputs_available{"inputs_available",false}; + const StringName k_instance_id{"instance_id",false}; + const StringName k_inventory_inputs{"inventory_inputs",false}; + const StringName k_inventory_service{"inventory_service",false}; + const StringName k_is_open{"is_open",false}; + const StringName k_last_error{"last_error",false}; + const StringName k_last_no_route_reason{"last_no_route_reason",false}; + const StringName k_last_path_cost{"last_path_cost",false}; + const StringName k_local_inventory_id{"local_inventory_id",false}; + const StringName k_movement_type{"movement_type",false}; + const StringName k_need_relief{"need_relief",false}; + const StringName k_occupied_cells{"occupied_cells",false}; + const StringName k_origin{"origin",false}; + const StringName k_owns_connector{"owns_connector",false}; + const StringName k_path{"path",false}; + const StringName k_path_handle{"path_handle",false}; + const StringName k_path_query_measured{"path_query_measured",false}; + const StringName k_path_service{"path_service",false}; + const StringName k_queue_entries{"queue_entries",false}; + const StringName k_reachable{"reachable",false}; + const StringName k_ready{"ready",false}; + const StringName k_resource_path{"resource_path",false}; + const StringName k_risk_level{"risk_level",false}; + const StringName k_service_category{"service_category",false}; + const StringName k_settled{"settled",false}; + const StringName k_staff_only{"staff_only",false}; + const StringName k_start{"start",false}; + const StringName k_state{"state",false}; + const StringName k_supported{"supported",false}; + const StringName k_tags{"tags",false}; + const StringName k_tagproj_hunger{"hunger",false}; + const StringName k_tagproj_sleep{"sleep",false}; + const StringName k_tagproj_hygiene{"hygiene",false}; + const StringName k_tagproj_medical{"medical",false}; + const StringName k_tagproj_leisure{"leisure",false}; + const StringName k_tagproj_intimacy{"intimacy",false}; + const StringName k_tagproj_dining{"dining",false}; + const StringName k_tagproj_lodging{"lodging",false}; + const StringName k_tagproj_social{"social",false}; + const StringName k_tagproj_bath{"bath",false}; + const StringName k_tagproj_wellness{"wellness",false}; + const StringName k_tagproj_adult_only{"adult_only",false}; + const StringName k_tagproj_restricted_service{"restricted_service",false}; + const StringName k_tagproj_food{"food",false}; + const StringName k_tagproj_service{"service",false}; + const StringName k_target_cell{"target_cell",false}; + const StringName k_targets{"targets",false}; + const StringName k_temporary_block{"temporary_block",false}; + const StringName k_travel_minutes{"travel_minutes",false}; + const StringName k_tree{"tree",false}; + const StringName k_usable{"usable",false}; + }; +public: + // Whole builtin integer record operation. No retained sample values or time + // suppression. Unsupported data returns before any caller-owned mutation. + Dictionary performance_record_sample(Object *owner, const StringName &metric, int64_t duration) { + const StringName supported("supported",false), report_key("report",false); + Dictionary unsupported; unsupported[supported]=false; + Object *script=owner ? owner->get_script() : nullptr; + if (!script || String(script->get(StringName("resource_path",false))) != "res://scripts/core/performance_budget.gd" || metric==StringName() || duration<0) return unsupported; + const StringName samples_key("_samples",false), ordered_key("_ordered_samples",false), bytes_key("_ordered_sample_bytes",false), integer_key("_integer_window_bytes",false), totals_key("_totals",false), counts_key("_sample_counts",false), budgets_key("_budgets",false); + const Variant sv=owner->get(samples_key), ov=owner->get(ordered_key), bv=owner->get(bytes_key), iv=owner->get(integer_key), tv=owner->get(totals_key), cv=owner->get(counts_key), uv=owner->get(budgets_key), capacityv=owner->get(StringName("sample_capacity",false)); + if (sv.get_type()!=Variant::DICTIONARY || ov.get_type()!=Variant::DICTIONARY || bv.get_type()!=Variant::DICTIONARY || iv.get_type()!=Variant::DICTIONARY || tv.get_type()!=Variant::DICTIONARY || cv.get_type()!=Variant::DICTIONARY || uv.get_type()!=Variant::DICTIONARY || capacityv.get_type()!=Variant::INT) return unsupported; + Dictionary samples=sv, orders=ov, rawbytes=bv, integers=iv, totals=tv, counts=cv, budgets=uv; + if (samples.is_read_only() || orders.is_read_only() || rawbytes.is_read_only() || integers.is_read_only() || totals.is_read_only() || counts.is_read_only()) return unsupported; + const std::array maps{samples,orders,rawbytes,integers,totals,counts,budgets}; + for (size_t i=0;i ordered; + Variant savedbytes=rawbytes.get(metric,PackedByteArray()); + bool reuse=existing && orders.has(metric) && savedbytes.get_type()==Variant::PACKED_BYTE_ARRAY && PackedByteArray(savedbytes)==before; + if (reuse) { + Variant orderv=orders[metric]; + if (orderv.get_type()!=Variant::ARRAY) return unsupported; + Array prior=orderv; + if (prior.is_read_only() || !prior.is_typed() || prior.get_typed_builtin()!=Variant::INT || prior.size()!=values.size()) return unsupported; + ordered=prior; + } else { + for (int64_t i=0;iint64_t(capacityv)) { + Variant removed=values.pop_front(); + ordered.remove_at(ordered.bsearch(removed)); + } + PackedByteArray after=UtilityFunctions::var_to_bytes(values); + rawbytes[metric]=after; integers[metric]=after; + const int64_t lifetime_total=the_tree_native::signed_add(int64_t(totalv),duration); + const int64_t lifetime_count=the_tree_native::signed_add(int64_t(countv),1); + totals[metric]=lifetime_total; counts[metric]=lifetime_count; + const int64_t average=lifetime_count>0 ? lifetime_total/lifetime_count : 0; + const int64_t maximum=ordered.is_empty() ? 0 : std::max(0,int64_t(ordered[ordered.size()-1])); + int64_t p95=0; + if (!ordered.is_empty()) { + const int64_t index=std::max(the_tree_native::signed_add(the_tree_native::signed_add(signed_product(95,ordered.size()),99)/100,-1),0); + p95=ordered[std::min(index,ordered.size()-1)]; + } + const int64_t aggregation=aggregationv, limit=limitv; + // Original default match is P95, including unknown aggregation values. + const int64_t measured=aggregation==0 ? average : (aggregation==2 ? maximum : p95); + Dictionary report; + report[StringName("metric_id",false)]=metric; + report[StringName("window_sample_count",false)]=values.size(); + report[StringName("lifetime_sample_count",false)]=lifetime_count; + report[StringName("average_us",false)]=average; + report[StringName("p95_us",false)]=p95; + report[StringName("maximum_us",false)]=maximum; + report[aggregation_key]=aggregation; + report[StringName("measured_us",false)]=measured; + report[limit_key]=limit; + report[StringName("budget_exceeded",false)]=limit>0 && measured>limit; + Dictionary result; result[supported]=true; result[report_key]=report; return result; + } +#include "guest_candidate_batch.inc" + void clear_edge_cache() { cached_edges.clear(); } + Dictionary search(const Array &cells, const Dictionary &indices, I start_index, + const Dictionary &goals, const Callable &edge_provider) { + return search_impl(cells, indices, start_index, goals, edge_provider, false); + } + Dictionary search_cached(const Array &cells, const Dictionary &indices, I start_index, + const Dictionary &goals, const Callable &edge_provider) { + return search_impl(cells, indices, start_index, goals, edge_provider, true); + } + // One ordered projection, with no new persistent ownership/cache. Only + // builtin pure getters and the already guarded sole budget observer qualify. + Dictionary project_guest_candidates(Object *runtime, const StringName &guest_id, + int64_t open_state, int64_t degraded_state, int64_t movement_scale, + int64_t stair_credit, int64_t orthogonal_cost, const Callable &ticks) { + const ProjectionNames n; + Dictionary unsupported; + unsupported[n.k_supported] = false; + if (!builtin(n,runtime, "res://autoload/simulation_runtime.gd") || !ticks.is_valid()) return unsupported; + Object *path = runtime->get(n.k_path_service); + Object *elevators = runtime->get(n.k_elevators); + Object *facilities = runtime->get(n.k_facility_service); + Object *definitions = runtime->get(n.k_definition_registry); + Object *inventory = runtime->get(n.k_inventory_service); + Object *guests = runtime->get(n.k_guest_service); + if (!builtin(n,path,"res://scripts/world/path_service.gd") || + !builtin(n,elevators,"res://scripts/transport/elevator_service.gd") || + !builtin(n,facilities,"res://scripts/facility/facility_service.gd") || + !builtin(n,definitions,"res://scripts/core/definition_registry.gd") || + !builtin(n,inventory,"res://scripts/inventory/inventory_service.gd") || + !builtin(n,guests,"res://scripts/guest/guest_service.gd") || + !static_cast(runtime->call(n.k__guest_access_batch_can_select))) return unsupported; + Object *guest = guests->call(n.k_get_guest,guest_id); + Array candidates; + if (!guest) { + Dictionary result; result[n.k_supported] = true; + result[n.k_candidates] = candidates; return result; + } + if (!builtin(n,guest,"res://scripts/guest/guest_runtime.gd")) return unsupported; + const Array initial = facilities->call(n.k_get_instances); + // Preflight is read-only: default registry/get_instances have no public + // error/counter effects. Custom resources retain the original whole loop. + for (int64_t i=0;icall(n.k_get_facility,facility->get(n.k_definition_id)); + if (definition && !builtin(n,definition,"res://scripts/data/facility_definition.gd")) return unsupported; + } + Array goals; + for (int64_t i=0;iget(n.k_current_cell); + path->call(n.k_begin_guest_path_query_batch,start,goals); + const Array ordered = facilities->call(n.k_get_instances); + TypedArray layers; layers.push_back(0); layers.push_back(1); + TypedArray access_ids; + for (int64_t i=0;icall(n.k_get_facility,facility->get(n.k_definition_id)); + if (!definition) continue; + const Array tags = definition->get(n.k_tags); + if (tags.has(n.k_staff_only)) continue; + if (tags.has(n.k_entrance) && static_cast(runtime->call(n.k__guest_has_checked_in,guest))) continue; + bool has_inputs = true; + const Dictionary inputs = definition->get(n.k_inventory_inputs); + const Array items = sorted_builtin_input_names(n,runtime,inputs); + for (int64_t j=0;jcall(n.k_available_quantity,facility->get(n.k_local_inventory_id),items[j]); + if (quantity < static_cast(inputs[items[j]])) {has_inputs=false;break;} + } + if (!has_inputs) { + Dictionary row;row[n.k_facility_id]=facility->get(n.k_instance_id); + row[n.k_inputs_available]=false;candidates.push_back(row);continue; + } + const Array destinations = facility_access_cells(n,path,facility); + Dictionary route = nearest_guest_access_impl(n,path,start,destinations,facility->get(n.k_origin),layers,access_ids,ticks); + if (static_cast(route.get(n.k_supported,false))) route.erase(n.k_supported); + else route = Dictionary(runtime->call(n.k__find_facility_access_path,start,facility)); + const Array walk = route.get(n.k_path,Array()); + const bool plain_tag_relief = builtin(n,runtime,"res://autoload/simulation_runtime.gd") && + tags.is_typed() && tags.get_typed_builtin()==Variant::STRING_NAME; + const Dictionary relief = plain_tag_relief ? builtin_tag_relief(n,tags) : + Dictionary(runtime->call(n.k__need_relief_for_facility_tags,tags)); + Dictionary row; + row[n.k_facility_id]=facility->get(n.k_instance_id); + row[n.k_facility_tags]=tags.duplicate(); + const int64_t state = facility->get(n.k_state); + row[n.k_is_open]=(state==open_state || state==degraded_state); + row[n.k_reachable]=route.get(n.k_reachable,false); + row[n.k_travel_minutes]=guest_path_minutes(n,path,elevators,walk,movement_scale,stair_credit,orthogonal_cost); + const Array queue = facility->get(n.k_queue_entries); + const int64_t capacity = facility->get(n.k_capacity); + row[n.k_expected_wait]=signed_product(queue.size(),facility->get(n.k_base_service_minutes))/std::max(capacity,1); + row[n.k_estimated_total_gold]=runtime->call(n.k_get_facility_business_price,facility); + const int64_t quality = facility->get(n.k_base_quality); + row[n.k_expected_quality]=std::max(0,std::min(quality,100)); + row[n.k_need_relief]=relief; + row[n.k_risk_level]=int64_t(0);row[n.k_illegal_level]=int64_t(0); + row[n.k_group_fit]=signed_product(std::min(capacity,4),5); + // Recheck at the original call position: preceding price/observer + // callbacks must retain a replaced/custom runtime's original call. + const bool plain_tag_category = builtin(n,runtime,"res://autoload/simulation_runtime.gd") && + tags.is_typed() && tags.get_typed_builtin()==Variant::STRING_NAME; + row[n.k_service_category]=plain_tag_category ? Variant(builtin_tag_category(n,tags)) : + runtime->call(n.k__service_category_for_tags,tags); + Dictionary handle;handle[n.k_target_cell]=route.get(n.k_target_cell,guest->get(n.k_current_cell)); + handle[n.k_graph_revision]=path->get(n.k_graph_revision); + row[n.k_path_handle]=handle;candidates.push_back(row); + } + path->call(n.k_end_guest_path_query_batch); + Dictionary result;result[n.k_supported]=true;result[n.k_candidates]=candidates;return result; + } +private: + // Direct translation of the two pure builtin tag methods. Fresh result, + // original insertion/branch order, no retained definition/tag memo. + static Dictionary builtin_tag_relief(const ProjectionNames &n,const Array &tags) { + Dictionary relief; + relief[n.k_tagproj_hunger]=int64_t(0);relief[n.k_tagproj_sleep]=int64_t(0); + relief[n.k_tagproj_hygiene]=int64_t(0);relief[n.k_tagproj_medical]=int64_t(0); + relief[n.k_tagproj_leisure]=int64_t(0);relief[n.k_tagproj_intimacy]=int64_t(0); + if(tags.has(n.k_tagproj_dining)) {relief[n.k_tagproj_hunger]=int64_t(80);relief[n.k_tagproj_leisure]=int64_t(10);} + if(tags.has(n.k_tagproj_lodging)) {relief[n.k_tagproj_sleep]=int64_t(90);relief[n.k_tagproj_hygiene]=std::max(int64_t(relief[n.k_tagproj_hygiene]),10);} + if(tags.has(n.k_tagproj_social)||tags.has(n.k_tagproj_leisure)) relief[n.k_tagproj_leisure]=std::max(int64_t(relief[n.k_tagproj_leisure]),40); + if(tags.has(n.k_tagproj_hygiene)||tags.has(n.k_tagproj_bath)) relief[n.k_tagproj_hygiene]=std::max(int64_t(relief[n.k_tagproj_hygiene]),80); + if(tags.has(n.k_tagproj_medical)) relief[n.k_tagproj_medical]=int64_t(90); + else if(tags.has(n.k_tagproj_wellness)) relief[n.k_tagproj_medical]=std::max(int64_t(relief[n.k_tagproj_medical]),20); + if(tags.has(n.k_tagproj_adult_only)||tags.has(n.k_tagproj_restricted_service)) relief[n.k_tagproj_intimacy]=int64_t(80); + return relief; + } + static StringName builtin_tag_category(const ProjectionNames &n,const Array &tags) { + if(tags.has(n.k_tagproj_dining))return n.k_tagproj_food; + if(tags.has(n.k_tagproj_lodging))return n.k_tagproj_lodging; + if(tags.has(n.k_tagproj_social))return n.k_tagproj_leisure; + return n.k_tagproj_service; + } + static bool builtin(const ProjectionNames &n,Object *object,const char *resource) { + if (!object) return false;Object *script=object->get_script(); + return script && String(script->get(n.k_resource_path))==resource; + } + // Exact builtin cache-key spelling. No normalized/reordered profile and no + // persistent cache; String lengths count Unicode codepoints as GDScript does. + static String cache_key_suffix(const ProjectionNames &n,Object *path, const TypedArray &layers, + const TypedArray &access) { + String layer_text, access_text; + for (int64_t i=0; i(layers[i])); + } + for (int64_t i=0; i(access[i])); + access_text += String::num_int64(value.length()) + ":" + value; + } + return String("|L:") + layer_text + "|A:" + access_text + "|R:" + + String::num_int64(static_cast(path->get(n.k_graph_revision))); + } + static String cache_key_with_suffix(const Vector3i &start, const Vector3i &goal, + const String &suffix) { + return String::num_int64(start.x) + "," + String::num_int64(start.y) + "," + + String::num_int64(start.z) + ">" + String::num_int64(goal.x) + "," + + String::num_int64(goal.y) + "," + String::num_int64(goal.z) + suffix; + } + static int64_t signed_product(int64_t a,int64_t b) { + const uint64_t product=static_cast(a)*static_cast(b); + if (product<=static_cast(std::numeric_limits::max())) return static_cast(product); + return std::numeric_limits::min()+static_cast(product-(uint64_t(1)<<63)); + } + static Array facility_access_cells(const ProjectionNames &n,Object *path,Object *facility) { + const Dictionary passable=path->get(n.k__passable_cells); + Array occupied=Array(facility->get(n.k_occupied_cells)).duplicate(); + if (occupied.is_empty()) occupied.push_back(facility->get(n.k_origin)); + Dictionary unique; + for (int64_t i=0;iget(n.k_origin);if(passable.has(origin)) unique[origin]=true; + const Array keys=unique.keys();std::vector sorted;sorted.reserve(keys.size()); + for (int64_t i=0;iget(n.k__guest_step_connector_memo); + // Route-local only. Reuse an ownership result only after an actual + // BOOL return and a typed cached step; no script callback occurs on a + // repeated typed memo hit. A miss/conversion/custom script keeps calls. + const bool builtin_pair = builtin(n,path,"res://scripts/world/path_service.gd") && + builtin(n,elevators,"res://scripts/transport/elevator_service.gd"); + bool ownership_valid = false; + bool ownership_value = false; + StringName ownership_connector; + for(int64_t i=1;i access;connector=path->call(n.k_get_step_connector,from,to,access);} + bool special; + if (builtin_pair && typed_memo_hit && ownership_valid && connector == ownership_connector) { + special = ownership_value; + } else { + const Variant owned = elevators->call(n.k_owns_connector,connector); + special = static_cast(owned); + ownership_valid = builtin_pair && typed_memo_hit && owned.get_type() == Variant::BOOL; + ownership_value = special; + ownership_connector = connector; + } + if(!special && String(connector).begins_with("infra.connector:") && from.x==to.x && from.z==to.z && + std::abs(int64_t(from.y)-int64_t(to.y))==1) { + const Dictionary detail=path->call(n.k_get_connector,connector); + special=detail.get(n.k_movement_type,StringName())==Variant(n.k_CONNECTOR) && + static_cast(detail.get(n.k_cost,int64_t(0)))==150 && stair_credit>movement_scale; + } + if(special) { + const int64_t cost=path->call(n.k_calculate_guest_batch_path_cost,route[0],route[route.size()-1],route); + return static_cast(std::ceil(static_cast(cost)/static_cast(orthogonal_cost))); + } + } + return std::max(route.size()-1,0); + } +public: + + // Stateless translation of the builtin nearest access query. The caller + // supplies the existing typed default profile and the real Time callable. + // Public cache publication, failure diagnostics and fallback stay ordered. + Dictionary nearest_guest_access(Object *path, const Vector3i &start, + const Array &goals, const Vector3i &fallback_target, + const TypedArray &layers, const TypedArray &access, + const Callable &ticks) { + const ProjectionNames n; + return nearest_guest_access_impl(n,path,start,goals,fallback_target,layers,access,ticks); + } +private: + Dictionary nearest_guest_access_impl(const ProjectionNames &n,Object *path, const Vector3i &start, + const Array &goals, const Vector3i &fallback_target, + const TypedArray &layers, const TypedArray &access, + const Callable &ticks) { + Dictionary unsupported; + unsupported[n.k_supported] = false; + if (!path || !ticks.is_valid() || goals.is_empty()) return unsupported; + Object *script = path->get_script(); + if (!script || String(script->get(n.k_resource_path)) != "res://scripts/world/path_service.gd") return unsupported; + Dictionary batch = path->get(n.k__query_batch); + if (batch.is_empty() || start != static_cast(batch[n.k_start])) return unsupported; + const Dictionary passable = path->get(n.k__passable_cells); + if (!passable.has(start) || blocked(n,path, start) || !layers.has(start.z)) return unsupported; + const Dictionary targets = batch[n.k_targets]; + Dictionary cache = path->get(n.k__path_cache); + // Exact builtin validation loop has no callback before ticks.call(). + // Build the unchanged profile/revision suffix lazily at the first key. + String key_suffix; + bool key_suffix_ready = false; + for (int64_t j = 0; j < goals.size(); ++j) { + if (goals[j].get_type() != Variant::VECTOR3I) return unsupported; + const Vector3i cell = goals[j]; + if (!targets.has(cell)) { + const bool searchable = passable.has(cell) && layers.has(cell.z) && !blocked(n,path, cell); + if (searchable && (start.z == cell.z || static_cast(path->call(n.k__guest_batch_has_permitted_layer_crossing, start, cell, layers, access)))) return unsupported; + } + if (!key_suffix_ready) { + key_suffix = cache_key_suffix(n,path, layers, access); + key_suffix_ready = true; + } + const String key = cache_key_with_suffix(start, cell, key_suffix); + if (cache.has(key)) return unsupported; + } + const int64_t started = ticks.call(); + if (!static_cast(batch[n.k_ready])) { + batch[n.k_tree] = path->call(n.k__build_guest_query_tree_compact, start, targets, layers, access); + batch[n.k_arithmetic_wrapped] = path->get(n.k__guest_tree_arithmetic_wrapped); + batch[n.k_ready] = true; + } + const Dictionary tree = batch[n.k_tree]; + if (!static_cast(tree.get(n.k_usable, false)) || static_cast(batch.get(n.k_arithmetic_wrapped, false))) return unsupported; + Vector3i best_cell = fallback_target; + bool found = false; + int64_t best_cost = 0; + const Dictionary settled = tree[n.k_settled]; + bool cost_view_ready=false,compact_cost_view=false; + Dictionary cost_indices,cost_dictionary; + PackedInt64Array cost_values; + for (int64_t j = 0; j < goals.size(); ++j) { + const Vector3i cell = goals[j]; + if (!targets.has(cell) || !settled.has(cell)) continue; + // No callback occurs between these original numeric cost reads. + // Initialize lazily at the first eligible goal, and retain nothing + // past this call or reuse after the subsequent route callbacks. + if (!cost_view_ready) { + compact_cost_view=tree.get(n.k_compact,false); + if(compact_cost_view) {cost_indices=tree[n.k_indices];cost_values=tree[n.k_cost_values];} + else cost_dictionary=tree[n.k_costs]; + cost_view_ready=true; + } + int64_t cost=0; + if(compact_cost_view) { + if(!cost_indices.has(cell)) return unsupported; + const int64_t index=cost_indices[cell]; + if(index<0 || index>=cost_values.size()) return unsupported; + cost=cost_values[index]; + } else { + if(!cost_dictionary.has(cell)) return unsupported; + cost=cost_dictionary[cell]; + } + if (!found || cost < best_cost) { + found = true; + best_cost = cost; + best_cell = cell; + } + } + TypedArray best_path; + if (found) { + best_path = resolve_ready_guest_point(n,path, start, best_cell, tree, layers, access); + if (best_path.is_empty()) return unsupported; + } + if (!goals.is_empty() && (!found || goals[goals.size() - 1] != Variant(best_cell))) { + resolve_ready_guest_point(n,path, start, goals[goals.size() - 1], tree, layers, access); + } + const int64_t elapsed = the_tree_native::signed_add(static_cast(ticks.call()), the_tree_native::signed_add(~started, 1)); + path->emit_signal(n.k_path_query_measured, std::max(elapsed, 0)); + Dictionary result; + result[n.k_supported] = true; + result[n.k_reachable] = found; + result[n.k_path] = best_path; + result[n.k_target_cell] = best_cell; + return result; + } +private: + // Only StringName keys qualify. Conversion-sensitive and custom runtime + // cases retain the original script sorter. No owner values are retained. + static Array sorted_builtin_input_names(const ProjectionNames &n,Object *runtime,const Dictionary &inputs) { + auto original=[&]() -> Array {return runtime->call(n.k__sorted_name_keys,inputs);}; + if(!builtin(n,runtime,"res://autoload/simulation_runtime.gd")) return original(); + const Array keys=inputs.keys(); + for(int64_t i=0;i> rows; + rows.reserve(keys.size()); + for(int64_t i=0;i result; + for(const auto &row:rows) result.push_back(row.second); + return result; + } catch(const std::bad_alloc &) {return original();} + catch(const std::length_error &) {return original();} + } + // Fresh writable typed output, matching the builtin append loop. Check + // the script at this original call position, after any route callbacks. + static Variant copy_builtin_guest_route(const ProjectionNames &n,Object *path,const TypedArray &route) { + if(!builtin(n,path,"res://scripts/world/path_service.gd")) return path->call(n.k__copy_path,route); + TypedArray copied; + for(int64_t i=0;iget(n.k__cell_traffic); + const Dictionary traffic = traffic_map.get(cell, Dictionary()); + return !traffic.is_empty() && static_cast(traffic[n.k_temporary_block]); + } + static bool tree_has_cost(const ProjectionNames &n,const Dictionary &tree, const Vector3i &cell) { + if (!static_cast(tree.get(n.k_compact, false))) { + const Dictionary values = tree[n.k_costs]; + return values.has(cell); + } + const Dictionary indices = tree[n.k_indices]; + if (!indices.has(cell)) return false; + const int64_t index = indices[cell]; + const PackedInt64Array values = tree[n.k_cost_values]; + return index >= 0 && index < values.size(); + } + static int64_t tree_cost(const ProjectionNames &n,const Dictionary &tree, const Vector3i &cell) { + if (!static_cast(tree.get(n.k_compact, false))) { + const Dictionary values = tree[n.k_costs]; + return static_cast(values[cell]); + } + const Dictionary indices = tree[n.k_indices]; + const PackedInt64Array values = tree[n.k_cost_values]; + return values[static_cast(indices[cell])]; + } + static TypedArray resolve_ready_guest_point(const ProjectionNames &n,Object *path, + const Vector3i &start, const Vector3i &goal, const Dictionary &tree, + const TypedArray &layers, const TypedArray &access) { + const Dictionary passable = path->get(n.k__passable_cells); + if (!passable.has(start)) return path->call(n.k__route_failure, n.k_START_NOT_PASSABLE); + if (!passable.has(goal)) return path->call(n.k__route_failure, n.k_GOAL_NOT_PASSABLE); + if (!layers.has(start.z) || !layers.has(goal.z)) return path->call(n.k__route_failure, n.k_ACCESS_LAYER_DENIED); + if (blocked(n,path, start)) return path->call(n.k__route_failure, n.k_START_TEMPORARILY_BLOCKED); + if (blocked(n,path, goal)) return path->call(n.k__route_failure, n.k_GOAL_TEMPORARILY_BLOCKED); + // ticks/tree callbacks may have changed the script or revision. Recheck + // at this original call position and never reuse the pre-tick suffix. + const String key = builtin(n,path,"res://scripts/world/path_service.gd") ? + cache_key_with_suffix(start, goal, cache_key_suffix(n,path, layers, access)) : + String(path->call(n.k__cache_key, start, goal, layers, access)); + Dictionary cache = path->get(n.k__path_cache); + const Dictionary batch = path->get(n.k__query_batch); + const Dictionary targets = batch[n.k_targets]; + if (cache.has(key) || !targets.has(goal)) return path->call(n.k__find_path_internal, start, goal); + path->set(n.k_cache_misses, the_tree_native::signed_add(static_cast(path->get(n.k_cache_misses)), 1)); + if (start.z != goal.z && !static_cast(path->call(n.k__guest_batch_has_permitted_layer_crossing, start, goal, layers, access))) return path->call(n.k__route_failure, n.k_GOAL_UNREACHABLE); + TypedArray route; + const Dictionary settled = tree[n.k_settled]; + if (start == goal) route.push_back(start); + else if (settled.has(goal)) route = Array(path->call(n.k__guest_tree_reconstruct_path, tree, goal)); + if (route.is_empty()) return path->call(n.k__route_failure, path->call(n.k__diagnose_no_route_reason, start, goal, layers, access)); + cache[key] = copy_builtin_guest_route(n,path,route); + path->set(n.k_last_no_route_reason, n.k_OK); + path->set(n.k_last_path_cost, tree_cost(n,tree, goal)); + path->set(n.k_last_error, String("")); + return route; + } +public: +private: + // One existing builtin provider operation, with no new value cache. Only + // connector-free WALK rows qualify; unsupported cases call the old provider. + // All work stays private until the original final shared[current] assignment. + struct WalkEdgeNames { + const StringName resource_path{"resource_path",false}, constants_method{"get_script_constant_map",false}; + const StringName front{"FRONT",false}, back{"BACK",false}, walk{"MOVEMENT_WALK",false}; + const StringName base{"ORTHOGONAL_MOVE_COST",false}, congestion{"CONGESTION_COST_PER_EXCESS",false}; + const StringName workspace{"_guest_tree_workspace",false}, edges{"edges",false}, indices{"indices",false}; + const StringName adjacency{"_adjacency",false}, traffic{"_cell_traffic",false}, vertical{"_vertical_walk_requires_connector",false}; + const StringName to{"to",false}, connector{"connector_id",false}, access{"access_id",false}, movement{"movement_type",false}; + const StringName base_cost{"base_cost",false}, cost{"cost",false}, temporary{"temporary_block",false}; + const StringName dynamic{"dynamic_cost",false}, density{"current_density",false}, capacity{"base_capacity",false}; + const StringName provider{"_guest_tree_shared_edges",false}; + }; + struct WalkEdgeContext { + Object *path=nullptr; + int64_t front=0, back=0, base=0, congestion=0; + StringName walk; + }; + static bool walk_edge_context(const WalkEdgeNames &n,Object *path,const Array &layers, + const Array &access,WalkEdgeContext &context) { + if (!path || layers.size()!=2 || !access.is_empty() || + layers[0].get_type()!=Variant::INT || layers[1].get_type()!=Variant::INT) return false; + Object *script=path->get_script(); + if (!script || String(script->get(n.resource_path))!="res://scripts/world/path_service.gd" || + !script->has_method(n.constants_method)) return false; + const Variant value=script->call(n.constants_method); + if (value.get_type()!=Variant::DICTIONARY) return false; + const Dictionary constants=value; + for (const StringName &key : {n.front,n.back,n.base,n.congestion}) + if (constants.get(key,Variant()).get_type()!=Variant::INT) return false; + if (constants.get(n.walk,Variant()).get_type()!=Variant::STRING_NAME || + int64_t(layers[0])!=int64_t(constants[n.front]) || + int64_t(layers[1])!=int64_t(constants[n.back])) return false; + context.path=path;context.front=constants[n.front];context.back=constants[n.back]; + context.base=constants[n.base];context.congestion=constants[n.congestion];context.walk=constants[n.walk]; + return true; + } + static bool builtin_walk_edge_rows(const WalkEdgeNames &n,const WalkEdgeContext &context, + const Vector3i ¤t,Array &rows) { + if (!context.path) return false; + const Variant workspace_value=context.path->get(n.workspace); + if (workspace_value.get_type()!=Variant::DICTIONARY) return false; + const Dictionary workspace=workspace_value; + const Variant shared_value=workspace.get(n.edges,Variant()); + if (shared_value.get_type()!=Variant::DICTIONARY) return false; + Dictionary shared=shared_value; + // Original cached-row branch precedes readonly and all other state reads. + if (shared.has(current)) { + const Variant cached=shared[current]; + if (cached.get_type()!=Variant::ARRAY) return false; + rows=cached;return true; + } + if (shared.is_read_only()) return false; + const Variant indices_value=workspace.get(n.indices,Variant()), adjacency_value=context.path->get(n.adjacency); + const Variant traffic_value=context.path->get(n.traffic), vertical_value=context.path->get(n.vertical); + if (indices_value.get_type()!=Variant::DICTIONARY || adjacency_value.get_type()!=Variant::DICTIONARY || + traffic_value.get_type()!=Variant::DICTIONARY || vertical_value.get_type()!=Variant::BOOL) return false; + const Dictionary indices=indices_value, adjacency=adjacency_value, traffic=traffic_value; + const Variant raw_value=adjacency.get(current,Array()); + if (raw_value.get_type()!=Variant::ARRAY) return false; + const Array raw=raw_value;Array result; + for (int64_t i=0;i0?excess:0,context.congestion)); + } + const int64_t cost=the_tree_native::signed_add(int64_t(base),dynamic); + Array pair;pair.push_back(neighbor);pair.push_back(cost);result.push_back(pair); + // Same short circuit and first invalid prefix as the original method. + if (cost<=0 || !indices.has(neighbor)) break; + } + shared[current]=result;rows=result;return true; + } +public: + Dictionary guest_tree_edge_rows(Object *path,const Vector3i ¤t,const Array &layers,const Array &access) { + const WalkEdgeNames names;WalkEdgeContext context;Array rows; + Dictionary result;const StringName supported{"supported",false}, row_key{"rows",false}; + result[supported]=false; + if (!walk_edge_context(names,path,layers,access,context) || + !builtin_walk_edge_rows(names,context,current,rows)) return result; + result[supported]=true;result[row_key]=rows;return result; + } +private: + Dictionary search_impl(const Array &cells, const Dictionary &indices, I start_index, + const Dictionary &goals, const Callable &edge_provider, bool use_edge_cache) { + Dictionary output; + output[StringName("status")] = String("unusable"); + if (start_index < 0 || start_index >= cells.size() || !edge_provider.is_valid()) return output; + try { + std::vector goal_indices; + const Array goal_keys = goals.keys(); + for (I j = 0; j < goal_keys.size(); ++j) + goal_indices.push_back(static_cast(indices.get(goal_keys[j], I(-1)))); + Array arguments; + arguments.resize(1); + const WalkEdgeNames walk_names;WalkEdgeContext walk_context; + if (edge_provider.get_method()==walk_names.provider && edge_provider.get_argument_count()==1 && + edge_provider.get_bound_arguments_count()==2 && edge_provider.get_unbound_arguments_count()==0) { + const Array bound=edge_provider.get_bound_arguments(); + if (bound.size()==2 && bound[0].get_type()==Variant::ARRAY && bound[1].get_type()==Variant::ARRAY) + walk_edge_context(walk_names,edge_provider.get_object(),bound[0],bound[1],walk_context); + } + // Call the original bound Godot edge method only when the search expands a node. + // Preserve its lazy cache population, filter ordering and first invalid row. + auto original_edges = [&](I current) { + arguments[0] = cells[current]; + Array fused;bool fused_supported=false; + if (cells[current].get_type()==Variant::VECTOR3I) { + const Vector3i cell=cells[current]; + fused_supported=builtin_walk_edge_rows(walk_names,walk_context,cell,fused); + } + const Variant value = fused_supported ? Variant(fused) : edge_provider.callv(arguments); + if (value.get_type() != Variant::ARRAY) return std::vector{{-1, 0}}; + const Array rows = value; + std::vector result; + result.reserve(rows.size()); + for (I j = 0; j < rows.size(); ++j) { + if (rows[j].get_type() != Variant::ARRAY) { result.push_back({-1, 0}); break; } + const Array row = rows[j]; + if (row.size() != 2 || row[1].get_type() != Variant::INT) { + result.push_back({-1, 0}); break; + } + const I cost = static_cast(row[1]); + // Nonpositive cost is rejected before requesting the neighbor index. + if (cost <= 0) { result.push_back({-1, cost}); break; } + const I neighbor = static_cast(indices.get(row[0], I(-1))); + result.push_back({neighbor, cost}); + if (neighbor < 0) break; + } + return result; + }; + // Borrow cached rows only during the pure numeric edge loop. + // No engine callback runs while that borrowed vector is traversed. + std::vector converted; + auto edges = [&](I current) -> const std::vector& { + if (use_edge_cache) { + const auto found = cached_edges.find(current); + if (found != cached_edges.end()) return found->second; + } + converted = original_edges(current); + // Preserve the returned conversion even if a reentrant provider + // populated this cache key first. Never substitute its row here. + if (use_edge_cache) cached_edges.emplace(current, converted); + return converted; + }; + const auto result = the_tree_native::search(cells.size(), start_index, goal_indices, edges); + output[StringName("status")] = String(result.status.c_str()); + if (result.status != "usable") return output; + PackedInt64Array costs, parents; + if (costs.resize(result.costs.size()) != OK || parents.resize(result.parents.size()) != OK) { + output[StringName("status")] = String("unusable"); + return output; + } + // Newly resized, private packed arrays own their writable storage. + // A provider may shrink caller cells. Preserve the old written + // prefix and resize-created zero tail, not the whole native vector. + const I written_count=cells.size(); + if(written_count<=static_cast(result.costs.size())) { + std::copy_n(result.costs.begin(),written_count,costs.ptrw()); + std::copy_n(result.parents.begin(),written_count,parents.ptrw()); + } else { + // Keep the original unsupported-growth path unchanged. + for (I j=0;j discovered, parent_discovered; + for (I j : result.discovered) discovered.push_back(j); + for (I j : result.parent_discovered) parent_discovered.push_back(j); + Dictionary settled; + for (I j : result.settled) settled[cells[j]] = true; + output[StringName("cost_values")] = costs; + output[StringName("parent_indices")] = parents; + output[StringName("discovered")] = discovered; + output[StringName("parent_discovered")] = parent_discovered; + output[StringName("settled")] = settled; + return output; + } catch (const std::exception &) { + output = Dictionary(); + output[StringName("status")] = String("unusable"); + return output; + } + } +}; + +void initialize_tree_numeric_core(ModuleInitializationLevel level) { + if (level == MODULE_INITIALIZATION_LEVEL_SCENE) GDREGISTER_CLASS(TheTreeNumericCore); +} +void uninitialize_tree_numeric_core(ModuleInitializationLevel) {} + +extern "C" { +GDExtensionBool GDE_EXPORT tree_numeric_core_init(GDExtensionInterfaceGetProcAddress get_proc, + GDExtensionClassLibraryPtr library, GDExtensionInitialization *initialization) { + GDExtensionBinding::InitObject init(get_proc, library, initialization); + init.register_initializer(initialize_tree_numeric_core); + init.register_terminator(uninitialize_tree_numeric_core); + init.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE); + return init.init(); +} +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/028-source-before-allocation-guard.cpp b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/028-source-before-allocation-guard.cpp new file mode 100644 index 0000000..22f78e2 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/028-source-before-allocation-guard.cpp @@ -0,0 +1,888 @@ +// Isolated, uncompiled bridge prototype. No production registration or integration yet. +#include "tree_core.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace godot; +using the_tree_native::I; +using the_tree_native::Edge; + +class TheTreeNumericCore : public RefCounted { + GDCLASS(TheTreeNumericCore, RefCounted) +protected: + static void _bind_methods() { + ClassDB::bind_method(D_METHOD("performance_record_sample", "owner", "metric_id", "duration_us"), &TheTreeNumericCore::performance_record_sample); + ClassDB::bind_method(D_METHOD("guest_candidate_batch", "owner", "guest_id", "facilities", "context"), &TheTreeNumericCore::guest_candidate_batch); + ClassDB::bind_method(D_METHOD("guest_tree_edge_rows", "path", "current", "layers", "access"), &TheTreeNumericCore::guest_tree_edge_rows); + ClassDB::bind_method(D_METHOD("search", "cells", "indices", "start_index", "goals", "edge_provider"), &TheTreeNumericCore::search); + ClassDB::bind_method(D_METHOD("search_cached", "cells", "indices", "start_index", "goals", "edge_provider"), &TheTreeNumericCore::search_cached); + ClassDB::bind_method(D_METHOD("clear_edge_cache"), &TheTreeNumericCore::clear_edge_cache); + ClassDB::bind_method(D_METHOD("nearest_guest_access", "path", "start", "goals", "fallback_target", "layers", "access", "ticks"), &TheTreeNumericCore::nearest_guest_access); + ClassDB::bind_method(D_METHOD("project_guest_candidates", "runtime", "guest_id", "open_state", "degraded_state", "movement_scale", "stair_credit", "orthogonal_cost", "ticks"), &TheTreeNumericCore::project_guest_candidates); + } +private: + // Cache belongs to this instance and one caller-owned graph workspace. + // No reuse after cells, indices, filters or edge values change: the caller + // must clear it or release this core. The original search never uses it. + std::map> cached_edges; + // Per-public-call immutable names. No static/global lifetime, cached + // object values, script dispatch result or profile; recursive calls own + // separate scopes. Destruction precedes leaving the engine call. + struct ProjectionNames { + const StringName k_ACCESS_LAYER_DENIED{"ACCESS_LAYER_DENIED",false}; + const StringName k_CONNECTOR{"CONNECTOR",false}; + const StringName k_GOAL_NOT_PASSABLE{"GOAL_NOT_PASSABLE",false}; + const StringName k_GOAL_TEMPORARILY_BLOCKED{"GOAL_TEMPORARILY_BLOCKED",false}; + const StringName k_GOAL_UNREACHABLE{"GOAL_UNREACHABLE",false}; + const StringName k_OK{"OK",false}; + const StringName k_START_NOT_PASSABLE{"START_NOT_PASSABLE",false}; + const StringName k_START_TEMPORARILY_BLOCKED{"START_TEMPORARILY_BLOCKED",false}; + const StringName k__build_guest_query_tree_compact{"_build_guest_query_tree_compact",false}; + const StringName k__cache_key{"_cache_key",false}; + const StringName k__cell_traffic{"_cell_traffic",false}; + const StringName k__copy_path{"_copy_path",false}; + const StringName k__diagnose_no_route_reason{"_diagnose_no_route_reason",false}; + const StringName k__find_facility_access_path{"_find_facility_access_path",false}; + const StringName k__find_path_internal{"_find_path_internal",false}; + const StringName k__guest_access_batch_can_select{"_guest_access_batch_can_select",false}; + const StringName k__guest_batch_has_permitted_layer_crossing{"_guest_batch_has_permitted_layer_crossing",false}; + const StringName k__guest_has_checked_in{"_guest_has_checked_in",false}; + const StringName k__guest_step_connector_memo{"_guest_step_connector_memo",false}; + const StringName k__guest_tree_arithmetic_wrapped{"_guest_tree_arithmetic_wrapped",false}; + const StringName k__guest_tree_reconstruct_path{"_guest_tree_reconstruct_path",false}; + const StringName k__need_relief_for_facility_tags{"_need_relief_for_facility_tags",false}; + const StringName k__passable_cells{"_passable_cells",false}; + const StringName k__path_cache{"_path_cache",false}; + const StringName k__query_batch{"_query_batch",false}; + const StringName k__route_failure{"_route_failure",false}; + const StringName k__service_category_for_tags{"_service_category_for_tags",false}; + const StringName k__sorted_name_keys{"_sorted_name_keys",false}; + const StringName k_arithmetic_wrapped{"arithmetic_wrapped",false}; + const StringName k_available_quantity{"available_quantity",false}; + const StringName k_base_quality{"base_quality",false}; + const StringName k_base_service_minutes{"base_service_minutes",false}; + const StringName k_begin_guest_path_query_batch{"begin_guest_path_query_batch",false}; + const StringName k_cache_misses{"cache_misses",false}; + const StringName k_calculate_guest_batch_path_cost{"calculate_guest_batch_path_cost",false}; + const StringName k_candidates{"candidates",false}; + const StringName k_capacity{"capacity",false}; + const StringName k_compact{"compact",false}; + const StringName k_cost{"cost",false}; + const StringName k_cost_values{"cost_values",false}; + const StringName k_costs{"costs",false}; + const StringName k_current_cell{"current_cell",false}; + const StringName k_definition_id{"definition_id",false}; + const StringName k_definition_registry{"definition_registry",false}; + const StringName k_elevators{"elevators",false}; + const StringName k_end_guest_path_query_batch{"end_guest_path_query_batch",false}; + const StringName k_entrance{"entrance",false}; + const StringName k_estimated_total_gold{"estimated_total_gold",false}; + const StringName k_expected_quality{"expected_quality",false}; + const StringName k_expected_wait{"expected_wait",false}; + const StringName k_facility_id{"facility_id",false}; + const StringName k_facility_service{"facility_service",false}; + const StringName k_facility_tags{"facility_tags",false}; + const StringName k_get_connector{"get_connector",false}; + const StringName k_get_facility{"get_facility",false}; + const StringName k_get_facility_business_price{"get_facility_business_price",false}; + const StringName k_get_guest{"get_guest",false}; + const StringName k_get_instances{"get_instances",false}; + const StringName k_get_step_connector{"get_step_connector",false}; + const StringName k_graph_revision{"graph_revision",false}; + const StringName k_group_fit{"group_fit",false}; + const StringName k_guest_service{"guest_service",false}; + const StringName k_illegal_level{"illegal_level",false}; + const StringName k_indices{"indices",false}; + const StringName k_inputs_available{"inputs_available",false}; + const StringName k_instance_id{"instance_id",false}; + const StringName k_inventory_inputs{"inventory_inputs",false}; + const StringName k_inventory_service{"inventory_service",false}; + const StringName k_is_open{"is_open",false}; + const StringName k_last_error{"last_error",false}; + const StringName k_last_no_route_reason{"last_no_route_reason",false}; + const StringName k_last_path_cost{"last_path_cost",false}; + const StringName k_local_inventory_id{"local_inventory_id",false}; + const StringName k_movement_type{"movement_type",false}; + const StringName k_need_relief{"need_relief",false}; + const StringName k_occupied_cells{"occupied_cells",false}; + const StringName k_origin{"origin",false}; + const StringName k_owns_connector{"owns_connector",false}; + const StringName k_path{"path",false}; + const StringName k_path_handle{"path_handle",false}; + const StringName k_path_query_measured{"path_query_measured",false}; + const StringName k_path_service{"path_service",false}; + const StringName k_queue_entries{"queue_entries",false}; + const StringName k_reachable{"reachable",false}; + const StringName k_ready{"ready",false}; + const StringName k_resource_path{"resource_path",false}; + const StringName k_risk_level{"risk_level",false}; + const StringName k_service_category{"service_category",false}; + const StringName k_settled{"settled",false}; + const StringName k_staff_only{"staff_only",false}; + const StringName k_start{"start",false}; + const StringName k_state{"state",false}; + const StringName k_supported{"supported",false}; + const StringName k_tags{"tags",false}; + const StringName k_tagproj_hunger{"hunger",false}; + const StringName k_tagproj_sleep{"sleep",false}; + const StringName k_tagproj_hygiene{"hygiene",false}; + const StringName k_tagproj_medical{"medical",false}; + const StringName k_tagproj_leisure{"leisure",false}; + const StringName k_tagproj_intimacy{"intimacy",false}; + const StringName k_tagproj_dining{"dining",false}; + const StringName k_tagproj_lodging{"lodging",false}; + const StringName k_tagproj_social{"social",false}; + const StringName k_tagproj_bath{"bath",false}; + const StringName k_tagproj_wellness{"wellness",false}; + const StringName k_tagproj_adult_only{"adult_only",false}; + const StringName k_tagproj_restricted_service{"restricted_service",false}; + const StringName k_tagproj_food{"food",false}; + const StringName k_tagproj_service{"service",false}; + const StringName k_target_cell{"target_cell",false}; + const StringName k_targets{"targets",false}; + const StringName k_temporary_block{"temporary_block",false}; + const StringName k_travel_minutes{"travel_minutes",false}; + const StringName k_tree{"tree",false}; + const StringName k_usable{"usable",false}; + }; +public: + // Whole builtin integer record operation. No retained sample values or time + // suppression. Unsupported data returns before any caller-owned mutation. + Dictionary performance_record_sample(Object *owner, const StringName &metric, int64_t duration) { + const StringName supported("supported",false), report_key("report",false); + Dictionary unsupported; unsupported[supported]=false; + Object *script=owner ? owner->get_script() : nullptr; + if (!script || String(script->get(StringName("resource_path",false))) != "res://scripts/core/performance_budget.gd" || metric==StringName() || duration<0) return unsupported; + const StringName samples_key("_samples",false), ordered_key("_ordered_samples",false), bytes_key("_ordered_sample_bytes",false), integer_key("_integer_window_bytes",false), totals_key("_totals",false), counts_key("_sample_counts",false), budgets_key("_budgets",false); + const Variant sv=owner->get(samples_key), ov=owner->get(ordered_key), bv=owner->get(bytes_key), iv=owner->get(integer_key), tv=owner->get(totals_key), cv=owner->get(counts_key), uv=owner->get(budgets_key), capacityv=owner->get(StringName("sample_capacity",false)); + if (sv.get_type()!=Variant::DICTIONARY || ov.get_type()!=Variant::DICTIONARY || bv.get_type()!=Variant::DICTIONARY || iv.get_type()!=Variant::DICTIONARY || tv.get_type()!=Variant::DICTIONARY || cv.get_type()!=Variant::DICTIONARY || uv.get_type()!=Variant::DICTIONARY || capacityv.get_type()!=Variant::INT) return unsupported; + Dictionary samples=sv, orders=ov, rawbytes=bv, integers=iv, totals=tv, counts=cv, budgets=uv; + if (samples.is_read_only() || orders.is_read_only() || rawbytes.is_read_only() || integers.is_read_only() || totals.is_read_only() || counts.is_read_only()) return unsupported; + const std::array maps{samples,orders,rawbytes,integers,totals,counts,budgets}; + for (size_t i=0;i ordered; + Variant savedbytes=rawbytes.get(metric,PackedByteArray()); + bool reuse=existing && orders.has(metric) && savedbytes.get_type()==Variant::PACKED_BYTE_ARRAY && PackedByteArray(savedbytes)==before; + if (reuse) { + Variant orderv=orders[metric]; + if (orderv.get_type()!=Variant::ARRAY) return unsupported; + Array prior=orderv; + if (prior.is_read_only() || !prior.is_typed() || prior.get_typed_builtin()!=Variant::INT || prior.size()!=values.size()) return unsupported; + ordered=prior; + } else { + for (int64_t i=0;iint64_t(capacityv)) { + Variant removed=values.pop_front(); + ordered.remove_at(ordered.bsearch(removed)); + } + PackedByteArray after=UtilityFunctions::var_to_bytes(values); + rawbytes[metric]=after; integers[metric]=after; + const int64_t lifetime_total=the_tree_native::signed_add(int64_t(totalv),duration); + const int64_t lifetime_count=the_tree_native::signed_add(int64_t(countv),1); + totals[metric]=lifetime_total; counts[metric]=lifetime_count; + const int64_t average=lifetime_count>0 ? lifetime_total/lifetime_count : 0; + const int64_t maximum=ordered.is_empty() ? 0 : std::max(0,int64_t(ordered[ordered.size()-1])); + int64_t p95=0; + if (!ordered.is_empty()) { + const int64_t index=std::max(the_tree_native::signed_add(the_tree_native::signed_add(signed_product(95,ordered.size()),99)/100,-1),0); + p95=ordered[std::min(index,ordered.size()-1)]; + } + const int64_t aggregation=aggregationv, limit=limitv; + // Original default match is P95, including unknown aggregation values. + const int64_t measured=aggregation==0 ? average : (aggregation==2 ? maximum : p95); + Dictionary report; + report[StringName("metric_id",false)]=metric; + report[StringName("window_sample_count",false)]=values.size(); + report[StringName("lifetime_sample_count",false)]=lifetime_count; + report[StringName("average_us",false)]=average; + report[StringName("p95_us",false)]=p95; + report[StringName("maximum_us",false)]=maximum; + report[aggregation_key]=aggregation; + report[StringName("measured_us",false)]=measured; + report[limit_key]=limit; + report[StringName("budget_exceeded",false)]=limit>0 && measured>limit; + Dictionary result; result[supported]=true; result[report_key]=report; return result; + } +#include "guest_candidate_batch.inc" + void clear_edge_cache() { cached_edges.clear(); } + Dictionary search(const Array &cells, const Dictionary &indices, I start_index, + const Dictionary &goals, const Callable &edge_provider) { + return search_impl(cells, indices, start_index, goals, edge_provider, false); + } + Dictionary search_cached(const Array &cells, const Dictionary &indices, I start_index, + const Dictionary &goals, const Callable &edge_provider) { + return search_impl(cells, indices, start_index, goals, edge_provider, true); + } + // One ordered projection, with no new persistent ownership/cache. Only + // builtin pure getters and the already guarded sole budget observer qualify. + Dictionary project_guest_candidates(Object *runtime, const StringName &guest_id, + int64_t open_state, int64_t degraded_state, int64_t movement_scale, + int64_t stair_credit, int64_t orthogonal_cost, const Callable &ticks) { + const ProjectionNames n; + Dictionary unsupported; + unsupported[n.k_supported] = false; + if (!builtin(n,runtime, "res://autoload/simulation_runtime.gd") || !ticks.is_valid()) return unsupported; + Object *path = runtime->get(n.k_path_service); + Object *elevators = runtime->get(n.k_elevators); + Object *facilities = runtime->get(n.k_facility_service); + Object *definitions = runtime->get(n.k_definition_registry); + Object *inventory = runtime->get(n.k_inventory_service); + Object *guests = runtime->get(n.k_guest_service); + if (!builtin(n,path,"res://scripts/world/path_service.gd") || + !builtin(n,elevators,"res://scripts/transport/elevator_service.gd") || + !builtin(n,facilities,"res://scripts/facility/facility_service.gd") || + !builtin(n,definitions,"res://scripts/core/definition_registry.gd") || + !builtin(n,inventory,"res://scripts/inventory/inventory_service.gd") || + !builtin(n,guests,"res://scripts/guest/guest_service.gd") || + !static_cast(runtime->call(n.k__guest_access_batch_can_select))) return unsupported; + Object *guest = guests->call(n.k_get_guest,guest_id); + Array candidates; + if (!guest) { + Dictionary result; result[n.k_supported] = true; + result[n.k_candidates] = candidates; return result; + } + if (!builtin(n,guest,"res://scripts/guest/guest_runtime.gd")) return unsupported; + const Array initial = facilities->call(n.k_get_instances); + // Preflight is read-only: default registry/get_instances have no public + // error/counter effects. Custom resources retain the original whole loop. + for (int64_t i=0;icall(n.k_get_facility,facility->get(n.k_definition_id)); + if (definition && !builtin(n,definition,"res://scripts/data/facility_definition.gd")) return unsupported; + } + Array goals; + for (int64_t i=0;iget(n.k_current_cell); + path->call(n.k_begin_guest_path_query_batch,start,goals); + const Array ordered = facilities->call(n.k_get_instances); + TypedArray layers; layers.push_back(0); layers.push_back(1); + TypedArray access_ids; + for (int64_t i=0;icall(n.k_get_facility,facility->get(n.k_definition_id)); + if (!definition) continue; + const Array tags = definition->get(n.k_tags); + if (tags.has(n.k_staff_only)) continue; + if (tags.has(n.k_entrance) && static_cast(runtime->call(n.k__guest_has_checked_in,guest))) continue; + bool has_inputs = true; + const Dictionary inputs = definition->get(n.k_inventory_inputs); + const Array items = sorted_builtin_input_names(n,runtime,inputs); + for (int64_t j=0;jcall(n.k_available_quantity,facility->get(n.k_local_inventory_id),items[j]); + if (quantity < static_cast(inputs[items[j]])) {has_inputs=false;break;} + } + if (!has_inputs) { + Dictionary row;row[n.k_facility_id]=facility->get(n.k_instance_id); + row[n.k_inputs_available]=false;candidates.push_back(row);continue; + } + const Array destinations = facility_access_cells(n,path,facility); + Dictionary route = nearest_guest_access_impl(n,path,start,destinations,facility->get(n.k_origin),layers,access_ids,ticks); + if (static_cast(route.get(n.k_supported,false))) route.erase(n.k_supported); + else route = Dictionary(runtime->call(n.k__find_facility_access_path,start,facility)); + const Array walk = route.get(n.k_path,Array()); + const bool plain_tag_relief = builtin(n,runtime,"res://autoload/simulation_runtime.gd") && + tags.is_typed() && tags.get_typed_builtin()==Variant::STRING_NAME; + const Dictionary relief = plain_tag_relief ? builtin_tag_relief(n,tags) : + Dictionary(runtime->call(n.k__need_relief_for_facility_tags,tags)); + Dictionary row; + row[n.k_facility_id]=facility->get(n.k_instance_id); + row[n.k_facility_tags]=tags.duplicate(); + const int64_t state = facility->get(n.k_state); + row[n.k_is_open]=(state==open_state || state==degraded_state); + row[n.k_reachable]=route.get(n.k_reachable,false); + row[n.k_travel_minutes]=guest_path_minutes(n,path,elevators,walk,movement_scale,stair_credit,orthogonal_cost); + const Array queue = facility->get(n.k_queue_entries); + const int64_t capacity = facility->get(n.k_capacity); + row[n.k_expected_wait]=signed_product(queue.size(),facility->get(n.k_base_service_minutes))/std::max(capacity,1); + row[n.k_estimated_total_gold]=runtime->call(n.k_get_facility_business_price,facility); + const int64_t quality = facility->get(n.k_base_quality); + row[n.k_expected_quality]=std::max(0,std::min(quality,100)); + row[n.k_need_relief]=relief; + row[n.k_risk_level]=int64_t(0);row[n.k_illegal_level]=int64_t(0); + row[n.k_group_fit]=signed_product(std::min(capacity,4),5); + // Recheck at the original call position: preceding price/observer + // callbacks must retain a replaced/custom runtime's original call. + const bool plain_tag_category = builtin(n,runtime,"res://autoload/simulation_runtime.gd") && + tags.is_typed() && tags.get_typed_builtin()==Variant::STRING_NAME; + row[n.k_service_category]=plain_tag_category ? Variant(builtin_tag_category(n,tags)) : + runtime->call(n.k__service_category_for_tags,tags); + Dictionary handle;handle[n.k_target_cell]=route.get(n.k_target_cell,guest->get(n.k_current_cell)); + handle[n.k_graph_revision]=path->get(n.k_graph_revision); + row[n.k_path_handle]=handle;candidates.push_back(row); + } + path->call(n.k_end_guest_path_query_batch); + Dictionary result;result[n.k_supported]=true;result[n.k_candidates]=candidates;return result; + } +private: + // Direct translation of the two pure builtin tag methods. Fresh result, + // original insertion/branch order, no retained definition/tag memo. + static Dictionary builtin_tag_relief(const ProjectionNames &n,const Array &tags) { + Dictionary relief; + relief[n.k_tagproj_hunger]=int64_t(0);relief[n.k_tagproj_sleep]=int64_t(0); + relief[n.k_tagproj_hygiene]=int64_t(0);relief[n.k_tagproj_medical]=int64_t(0); + relief[n.k_tagproj_leisure]=int64_t(0);relief[n.k_tagproj_intimacy]=int64_t(0); + if(tags.has(n.k_tagproj_dining)) {relief[n.k_tagproj_hunger]=int64_t(80);relief[n.k_tagproj_leisure]=int64_t(10);} + if(tags.has(n.k_tagproj_lodging)) {relief[n.k_tagproj_sleep]=int64_t(90);relief[n.k_tagproj_hygiene]=std::max(int64_t(relief[n.k_tagproj_hygiene]),10);} + if(tags.has(n.k_tagproj_social)||tags.has(n.k_tagproj_leisure)) relief[n.k_tagproj_leisure]=std::max(int64_t(relief[n.k_tagproj_leisure]),40); + if(tags.has(n.k_tagproj_hygiene)||tags.has(n.k_tagproj_bath)) relief[n.k_tagproj_hygiene]=std::max(int64_t(relief[n.k_tagproj_hygiene]),80); + if(tags.has(n.k_tagproj_medical)) relief[n.k_tagproj_medical]=int64_t(90); + else if(tags.has(n.k_tagproj_wellness)) relief[n.k_tagproj_medical]=std::max(int64_t(relief[n.k_tagproj_medical]),20); + if(tags.has(n.k_tagproj_adult_only)||tags.has(n.k_tagproj_restricted_service)) relief[n.k_tagproj_intimacy]=int64_t(80); + return relief; + } + static StringName builtin_tag_category(const ProjectionNames &n,const Array &tags) { + if(tags.has(n.k_tagproj_dining))return n.k_tagproj_food; + if(tags.has(n.k_tagproj_lodging))return n.k_tagproj_lodging; + if(tags.has(n.k_tagproj_social))return n.k_tagproj_leisure; + return n.k_tagproj_service; + } + static bool builtin(const ProjectionNames &n,Object *object,const char *resource) { + if (!object) return false;Object *script=object->get_script(); + return script && String(script->get(n.k_resource_path))==resource; + } + // Exact builtin cache-key spelling. No normalized/reordered profile and no + // persistent cache; String lengths count Unicode codepoints as GDScript does. + static String cache_key_suffix(const ProjectionNames &n,Object *path, const TypedArray &layers, + const TypedArray &access) { + String layer_text, access_text; + for (int64_t i=0; i(layers[i])); + } + for (int64_t i=0; i(access[i])); + access_text += String::num_int64(value.length()) + ":" + value; + } + return String("|L:") + layer_text + "|A:" + access_text + "|R:" + + String::num_int64(static_cast(path->get(n.k_graph_revision))); + } + static String cache_key_with_suffix(const Vector3i &start, const Vector3i &goal, + const String &suffix) { + return String::num_int64(start.x) + "," + String::num_int64(start.y) + "," + + String::num_int64(start.z) + ">" + String::num_int64(goal.x) + "," + + String::num_int64(goal.y) + "," + String::num_int64(goal.z) + suffix; + } + static int64_t signed_product(int64_t a,int64_t b) { + const uint64_t product=static_cast(a)*static_cast(b); + if (product<=static_cast(std::numeric_limits::max())) return static_cast(product); + return std::numeric_limits::min()+static_cast(product-(uint64_t(1)<<63)); + } + static Array facility_access_cells(const ProjectionNames &n,Object *path,Object *facility) { + const Dictionary passable=path->get(n.k__passable_cells); + Array occupied=Array(facility->get(n.k_occupied_cells)).duplicate(); + if (occupied.is_empty()) occupied.push_back(facility->get(n.k_origin)); + Dictionary unique; + for (int64_t i=0;iget(n.k_origin);if(passable.has(origin)) unique[origin]=true; + const Array keys=unique.keys();std::vector sorted;sorted.reserve(keys.size()); + for (int64_t i=0;iget(n.k__guest_step_connector_memo); + // Route-local only. Reuse an ownership result only after an actual + // BOOL return and a typed cached step; no script callback occurs on a + // repeated typed memo hit. A miss/conversion/custom script keeps calls. + const bool builtin_pair = builtin(n,path,"res://scripts/world/path_service.gd") && + builtin(n,elevators,"res://scripts/transport/elevator_service.gd"); + bool ownership_valid = false; + bool ownership_value = false; + StringName ownership_connector; + for(int64_t i=1;i access;connector=path->call(n.k_get_step_connector,from,to,access);} + bool special; + if (builtin_pair && typed_memo_hit && ownership_valid && connector == ownership_connector) { + special = ownership_value; + } else { + const Variant owned = elevators->call(n.k_owns_connector,connector); + special = static_cast(owned); + ownership_valid = builtin_pair && typed_memo_hit && owned.get_type() == Variant::BOOL; + ownership_value = special; + ownership_connector = connector; + } + if(!special && String(connector).begins_with("infra.connector:") && from.x==to.x && from.z==to.z && + std::abs(int64_t(from.y)-int64_t(to.y))==1) { + const Dictionary detail=path->call(n.k_get_connector,connector); + special=detail.get(n.k_movement_type,StringName())==Variant(n.k_CONNECTOR) && + static_cast(detail.get(n.k_cost,int64_t(0)))==150 && stair_credit>movement_scale; + } + if(special) { + const int64_t cost=path->call(n.k_calculate_guest_batch_path_cost,route[0],route[route.size()-1],route); + return static_cast(std::ceil(static_cast(cost)/static_cast(orthogonal_cost))); + } + } + return std::max(route.size()-1,0); + } +public: + + // Stateless translation of the builtin nearest access query. The caller + // supplies the existing typed default profile and the real Time callable. + // Public cache publication, failure diagnostics and fallback stay ordered. + Dictionary nearest_guest_access(Object *path, const Vector3i &start, + const Array &goals, const Vector3i &fallback_target, + const TypedArray &layers, const TypedArray &access, + const Callable &ticks) { + const ProjectionNames n; + return nearest_guest_access_impl(n,path,start,goals,fallback_target,layers,access,ticks); + } +private: + Dictionary nearest_guest_access_impl(const ProjectionNames &n,Object *path, const Vector3i &start, + const Array &goals, const Vector3i &fallback_target, + const TypedArray &layers, const TypedArray &access, + const Callable &ticks) { + Dictionary unsupported; + unsupported[n.k_supported] = false; + if (!path || !ticks.is_valid() || goals.is_empty()) return unsupported; + Object *script = path->get_script(); + if (!script || String(script->get(n.k_resource_path)) != "res://scripts/world/path_service.gd") return unsupported; + Dictionary batch = path->get(n.k__query_batch); + if (batch.is_empty() || start != static_cast(batch[n.k_start])) return unsupported; + const Dictionary passable = path->get(n.k__passable_cells); + if (!passable.has(start) || blocked(n,path, start) || !layers.has(start.z)) return unsupported; + const Dictionary targets = batch[n.k_targets]; + Dictionary cache = path->get(n.k__path_cache); + // Exact builtin validation loop has no callback before ticks.call(). + // Build the unchanged profile/revision suffix lazily at the first key. + String key_suffix; + bool key_suffix_ready = false; + for (int64_t j = 0; j < goals.size(); ++j) { + if (goals[j].get_type() != Variant::VECTOR3I) return unsupported; + const Vector3i cell = goals[j]; + if (!targets.has(cell)) { + const bool searchable = passable.has(cell) && layers.has(cell.z) && !blocked(n,path, cell); + if (searchable && (start.z == cell.z || static_cast(path->call(n.k__guest_batch_has_permitted_layer_crossing, start, cell, layers, access)))) return unsupported; + } + if (!key_suffix_ready) { + key_suffix = cache_key_suffix(n,path, layers, access); + key_suffix_ready = true; + } + const String key = cache_key_with_suffix(start, cell, key_suffix); + if (cache.has(key)) return unsupported; + } + const int64_t started = ticks.call(); + if (!static_cast(batch[n.k_ready])) { + batch[n.k_tree] = path->call(n.k__build_guest_query_tree_compact, start, targets, layers, access); + batch[n.k_arithmetic_wrapped] = path->get(n.k__guest_tree_arithmetic_wrapped); + batch[n.k_ready] = true; + } + const Dictionary tree = batch[n.k_tree]; + if (!static_cast(tree.get(n.k_usable, false)) || static_cast(batch.get(n.k_arithmetic_wrapped, false))) return unsupported; + Vector3i best_cell = fallback_target; + bool found = false; + int64_t best_cost = 0; + const Dictionary settled = tree[n.k_settled]; + bool cost_view_ready=false,compact_cost_view=false; + Dictionary cost_indices,cost_dictionary; + PackedInt64Array cost_values; + for (int64_t j = 0; j < goals.size(); ++j) { + const Vector3i cell = goals[j]; + if (!targets.has(cell) || !settled.has(cell)) continue; + // No callback occurs between these original numeric cost reads. + // Initialize lazily at the first eligible goal, and retain nothing + // past this call or reuse after the subsequent route callbacks. + if (!cost_view_ready) { + compact_cost_view=tree.get(n.k_compact,false); + if(compact_cost_view) {cost_indices=tree[n.k_indices];cost_values=tree[n.k_cost_values];} + else cost_dictionary=tree[n.k_costs]; + cost_view_ready=true; + } + int64_t cost=0; + if(compact_cost_view) { + if(!cost_indices.has(cell)) return unsupported; + const int64_t index=cost_indices[cell]; + if(index<0 || index>=cost_values.size()) return unsupported; + cost=cost_values[index]; + } else { + if(!cost_dictionary.has(cell)) return unsupported; + cost=cost_dictionary[cell]; + } + if (!found || cost < best_cost) { + found = true; + best_cost = cost; + best_cell = cell; + } + } + TypedArray best_path; + if (found) { + best_path = resolve_ready_guest_point(n,path, start, best_cell, tree, layers, access); + if (best_path.is_empty()) return unsupported; + } + if (!goals.is_empty() && (!found || goals[goals.size() - 1] != Variant(best_cell))) { + resolve_ready_guest_point(n,path, start, goals[goals.size() - 1], tree, layers, access); + } + const int64_t elapsed = the_tree_native::signed_add(static_cast(ticks.call()), the_tree_native::signed_add(~started, 1)); + path->emit_signal(n.k_path_query_measured, std::max(elapsed, 0)); + Dictionary result; + result[n.k_supported] = true; + result[n.k_reachable] = found; + result[n.k_path] = best_path; + result[n.k_target_cell] = best_cell; + return result; + } +private: + // Only StringName keys qualify. Conversion-sensitive and custom runtime + // cases retain the original script sorter. No owner values are retained. + static Array sorted_builtin_input_names(const ProjectionNames &n,Object *runtime,const Dictionary &inputs) { + auto original=[&]() -> Array {return runtime->call(n.k__sorted_name_keys,inputs);}; + if(!builtin(n,runtime,"res://autoload/simulation_runtime.gd")) return original(); + const Array keys=inputs.keys(); + std::vector> rows; + rows.reserve(keys.size()); + for(int64_t i=0;i result; + for(const auto &row:rows) result.push_back(row.second); + return result; + } + // Fresh writable typed output, matching the builtin append loop. Check + // the script at this original call position, after any route callbacks. + static Variant copy_builtin_guest_route(const ProjectionNames &n,Object *path,const TypedArray &route) { + if(!builtin(n,path,"res://scripts/world/path_service.gd")) return path->call(n.k__copy_path,route); + TypedArray copied; + for(int64_t i=0;iget(n.k__cell_traffic); + const Dictionary traffic = traffic_map.get(cell, Dictionary()); + return !traffic.is_empty() && static_cast(traffic[n.k_temporary_block]); + } + static bool tree_has_cost(const ProjectionNames &n,const Dictionary &tree, const Vector3i &cell) { + if (!static_cast(tree.get(n.k_compact, false))) { + const Dictionary values = tree[n.k_costs]; + return values.has(cell); + } + const Dictionary indices = tree[n.k_indices]; + if (!indices.has(cell)) return false; + const int64_t index = indices[cell]; + const PackedInt64Array values = tree[n.k_cost_values]; + return index >= 0 && index < values.size(); + } + static int64_t tree_cost(const ProjectionNames &n,const Dictionary &tree, const Vector3i &cell) { + if (!static_cast(tree.get(n.k_compact, false))) { + const Dictionary values = tree[n.k_costs]; + return static_cast(values[cell]); + } + const Dictionary indices = tree[n.k_indices]; + const PackedInt64Array values = tree[n.k_cost_values]; + return values[static_cast(indices[cell])]; + } + static TypedArray resolve_ready_guest_point(const ProjectionNames &n,Object *path, + const Vector3i &start, const Vector3i &goal, const Dictionary &tree, + const TypedArray &layers, const TypedArray &access) { + const Dictionary passable = path->get(n.k__passable_cells); + if (!passable.has(start)) return path->call(n.k__route_failure, n.k_START_NOT_PASSABLE); + if (!passable.has(goal)) return path->call(n.k__route_failure, n.k_GOAL_NOT_PASSABLE); + if (!layers.has(start.z) || !layers.has(goal.z)) return path->call(n.k__route_failure, n.k_ACCESS_LAYER_DENIED); + if (blocked(n,path, start)) return path->call(n.k__route_failure, n.k_START_TEMPORARILY_BLOCKED); + if (blocked(n,path, goal)) return path->call(n.k__route_failure, n.k_GOAL_TEMPORARILY_BLOCKED); + // ticks/tree callbacks may have changed the script or revision. Recheck + // at this original call position and never reuse the pre-tick suffix. + const String key = builtin(n,path,"res://scripts/world/path_service.gd") ? + cache_key_with_suffix(start, goal, cache_key_suffix(n,path, layers, access)) : + String(path->call(n.k__cache_key, start, goal, layers, access)); + Dictionary cache = path->get(n.k__path_cache); + const Dictionary batch = path->get(n.k__query_batch); + const Dictionary targets = batch[n.k_targets]; + if (cache.has(key) || !targets.has(goal)) return path->call(n.k__find_path_internal, start, goal); + path->set(n.k_cache_misses, the_tree_native::signed_add(static_cast(path->get(n.k_cache_misses)), 1)); + if (start.z != goal.z && !static_cast(path->call(n.k__guest_batch_has_permitted_layer_crossing, start, goal, layers, access))) return path->call(n.k__route_failure, n.k_GOAL_UNREACHABLE); + TypedArray route; + const Dictionary settled = tree[n.k_settled]; + if (start == goal) route.push_back(start); + else if (settled.has(goal)) route = Array(path->call(n.k__guest_tree_reconstruct_path, tree, goal)); + if (route.is_empty()) return path->call(n.k__route_failure, path->call(n.k__diagnose_no_route_reason, start, goal, layers, access)); + cache[key] = copy_builtin_guest_route(n,path,route); + path->set(n.k_last_no_route_reason, n.k_OK); + path->set(n.k_last_path_cost, tree_cost(n,tree, goal)); + path->set(n.k_last_error, String("")); + return route; + } +public: +private: + // One existing builtin provider operation, with no new value cache. Only + // connector-free WALK rows qualify; unsupported cases call the old provider. + // All work stays private until the original final shared[current] assignment. + struct WalkEdgeNames { + const StringName resource_path{"resource_path",false}, constants_method{"get_script_constant_map",false}; + const StringName front{"FRONT",false}, back{"BACK",false}, walk{"MOVEMENT_WALK",false}; + const StringName base{"ORTHOGONAL_MOVE_COST",false}, congestion{"CONGESTION_COST_PER_EXCESS",false}; + const StringName workspace{"_guest_tree_workspace",false}, edges{"edges",false}, indices{"indices",false}; + const StringName adjacency{"_adjacency",false}, traffic{"_cell_traffic",false}, vertical{"_vertical_walk_requires_connector",false}; + const StringName to{"to",false}, connector{"connector_id",false}, access{"access_id",false}, movement{"movement_type",false}; + const StringName base_cost{"base_cost",false}, cost{"cost",false}, temporary{"temporary_block",false}; + const StringName dynamic{"dynamic_cost",false}, density{"current_density",false}, capacity{"base_capacity",false}; + const StringName provider{"_guest_tree_shared_edges",false}; + }; + struct WalkEdgeContext { + Object *path=nullptr; + int64_t front=0, back=0, base=0, congestion=0; + StringName walk; + }; + static bool walk_edge_context(const WalkEdgeNames &n,Object *path,const Array &layers, + const Array &access,WalkEdgeContext &context) { + if (!path || layers.size()!=2 || !access.is_empty() || + layers[0].get_type()!=Variant::INT || layers[1].get_type()!=Variant::INT) return false; + Object *script=path->get_script(); + if (!script || String(script->get(n.resource_path))!="res://scripts/world/path_service.gd" || + !script->has_method(n.constants_method)) return false; + const Variant value=script->call(n.constants_method); + if (value.get_type()!=Variant::DICTIONARY) return false; + const Dictionary constants=value; + for (const StringName &key : {n.front,n.back,n.base,n.congestion}) + if (constants.get(key,Variant()).get_type()!=Variant::INT) return false; + if (constants.get(n.walk,Variant()).get_type()!=Variant::STRING_NAME || + int64_t(layers[0])!=int64_t(constants[n.front]) || + int64_t(layers[1])!=int64_t(constants[n.back])) return false; + context.path=path;context.front=constants[n.front];context.back=constants[n.back]; + context.base=constants[n.base];context.congestion=constants[n.congestion];context.walk=constants[n.walk]; + return true; + } + static bool builtin_walk_edge_rows(const WalkEdgeNames &n,const WalkEdgeContext &context, + const Vector3i ¤t,Array &rows) { + if (!context.path) return false; + const Variant workspace_value=context.path->get(n.workspace); + if (workspace_value.get_type()!=Variant::DICTIONARY) return false; + const Dictionary workspace=workspace_value; + const Variant shared_value=workspace.get(n.edges,Variant()); + if (shared_value.get_type()!=Variant::DICTIONARY) return false; + Dictionary shared=shared_value; + // Original cached-row branch precedes readonly and all other state reads. + if (shared.has(current)) { + const Variant cached=shared[current]; + if (cached.get_type()!=Variant::ARRAY) return false; + rows=cached;return true; + } + if (shared.is_read_only()) return false; + const Variant indices_value=workspace.get(n.indices,Variant()), adjacency_value=context.path->get(n.adjacency); + const Variant traffic_value=context.path->get(n.traffic), vertical_value=context.path->get(n.vertical); + if (indices_value.get_type()!=Variant::DICTIONARY || adjacency_value.get_type()!=Variant::DICTIONARY || + traffic_value.get_type()!=Variant::DICTIONARY || vertical_value.get_type()!=Variant::BOOL) return false; + const Dictionary indices=indices_value, adjacency=adjacency_value, traffic=traffic_value; + const Variant raw_value=adjacency.get(current,Array()); + if (raw_value.get_type()!=Variant::ARRAY) return false; + const Array raw=raw_value;Array result; + for (int64_t i=0;i0?excess:0,context.congestion)); + } + const int64_t cost=the_tree_native::signed_add(int64_t(base),dynamic); + Array pair;pair.push_back(neighbor);pair.push_back(cost);result.push_back(pair); + // Same short circuit and first invalid prefix as the original method. + if (cost<=0 || !indices.has(neighbor)) break; + } + shared[current]=result;rows=result;return true; + } +public: + Dictionary guest_tree_edge_rows(Object *path,const Vector3i ¤t,const Array &layers,const Array &access) { + const WalkEdgeNames names;WalkEdgeContext context;Array rows; + Dictionary result;const StringName supported{"supported",false}, row_key{"rows",false}; + result[supported]=false; + if (!walk_edge_context(names,path,layers,access,context) || + !builtin_walk_edge_rows(names,context,current,rows)) return result; + result[supported]=true;result[row_key]=rows;return result; + } +private: + Dictionary search_impl(const Array &cells, const Dictionary &indices, I start_index, + const Dictionary &goals, const Callable &edge_provider, bool use_edge_cache) { + Dictionary output; + output[StringName("status")] = String("unusable"); + if (start_index < 0 || start_index >= cells.size() || !edge_provider.is_valid()) return output; + try { + std::vector goal_indices; + const Array goal_keys = goals.keys(); + for (I j = 0; j < goal_keys.size(); ++j) + goal_indices.push_back(static_cast(indices.get(goal_keys[j], I(-1)))); + Array arguments; + arguments.resize(1); + const WalkEdgeNames walk_names;WalkEdgeContext walk_context; + if (edge_provider.get_method()==walk_names.provider && edge_provider.get_argument_count()==1 && + edge_provider.get_bound_arguments_count()==2 && edge_provider.get_unbound_arguments_count()==0) { + const Array bound=edge_provider.get_bound_arguments(); + if (bound.size()==2 && bound[0].get_type()==Variant::ARRAY && bound[1].get_type()==Variant::ARRAY) + walk_edge_context(walk_names,edge_provider.get_object(),bound[0],bound[1],walk_context); + } + // Call the original bound Godot edge method only when the search expands a node. + // Preserve its lazy cache population, filter ordering and first invalid row. + auto original_edges = [&](I current) { + arguments[0] = cells[current]; + Array fused;bool fused_supported=false; + if (cells[current].get_type()==Variant::VECTOR3I) { + const Vector3i cell=cells[current]; + fused_supported=builtin_walk_edge_rows(walk_names,walk_context,cell,fused); + } + const Variant value = fused_supported ? Variant(fused) : edge_provider.callv(arguments); + if (value.get_type() != Variant::ARRAY) return std::vector{{-1, 0}}; + const Array rows = value; + std::vector result; + result.reserve(rows.size()); + for (I j = 0; j < rows.size(); ++j) { + if (rows[j].get_type() != Variant::ARRAY) { result.push_back({-1, 0}); break; } + const Array row = rows[j]; + if (row.size() != 2 || row[1].get_type() != Variant::INT) { + result.push_back({-1, 0}); break; + } + const I cost = static_cast(row[1]); + // Nonpositive cost is rejected before requesting the neighbor index. + if (cost <= 0) { result.push_back({-1, cost}); break; } + const I neighbor = static_cast(indices.get(row[0], I(-1))); + result.push_back({neighbor, cost}); + if (neighbor < 0) break; + } + return result; + }; + // Borrow cached rows only during the pure numeric edge loop. + // No engine callback runs while that borrowed vector is traversed. + std::vector converted; + auto edges = [&](I current) -> const std::vector& { + if (use_edge_cache) { + const auto found = cached_edges.find(current); + if (found != cached_edges.end()) return found->second; + } + converted = original_edges(current); + // Preserve the returned conversion even if a reentrant provider + // populated this cache key first. Never substitute its row here. + if (use_edge_cache) cached_edges.emplace(current, converted); + return converted; + }; + const auto result = the_tree_native::search(cells.size(), start_index, goal_indices, edges); + output[StringName("status")] = String(result.status.c_str()); + if (result.status != "usable") return output; + PackedInt64Array costs, parents; + if (costs.resize(result.costs.size()) != OK || parents.resize(result.parents.size()) != OK) { + output[StringName("status")] = String("unusable"); + return output; + } + // Newly resized, private packed arrays own their writable storage. + // A provider may shrink caller cells. Preserve the old written + // prefix and resize-created zero tail, not the whole native vector. + const I written_count=cells.size(); + if(written_count<=static_cast(result.costs.size())) { + std::copy_n(result.costs.begin(),written_count,costs.ptrw()); + std::copy_n(result.parents.begin(),written_count,parents.ptrw()); + } else { + // Keep the original unsupported-growth path unchanged. + for (I j=0;j discovered, parent_discovered; + for (I j : result.discovered) discovered.push_back(j); + for (I j : result.parent_discovered) parent_discovered.push_back(j); + Dictionary settled; + for (I j : result.settled) settled[cells[j]] = true; + output[StringName("cost_values")] = costs; + output[StringName("parent_indices")] = parents; + output[StringName("discovered")] = discovered; + output[StringName("parent_discovered")] = parent_discovered; + output[StringName("settled")] = settled; + return output; + } catch (const std::exception &) { + output = Dictionary(); + output[StringName("status")] = String("unusable"); + return output; + } + } +}; + +void initialize_tree_numeric_core(ModuleInitializationLevel level) { + if (level == MODULE_INITIALIZATION_LEVEL_SCENE) GDREGISTER_CLASS(TheTreeNumericCore); +} +void uninitialize_tree_numeric_core(ModuleInitializationLevel) {} + +extern "C" { +GDExtensionBool GDE_EXPORT tree_numeric_core_init(GDExtensionInterfaceGetProcAddress get_proc, + GDExtensionClassLibraryPtr library, GDExtensionInitialization *initialization) { + GDExtensionBinding::InitObject init(get_proc, library, initialization); + init.register_initializer(initialize_tree_numeric_core); + init.register_terminator(uninitialize_tree_numeric_core); + init.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE); + return init.init(); +} +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/029-IMPLEMENTATION_PLAN.md.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/029-IMPLEMENTATION_PLAN.md.gz new file mode 100644 index 0000000..004e484 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/029-IMPLEMENTATION_PLAN.md.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/030-PROGRESS_INTEGRATION.md.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/030-PROGRESS_INTEGRATION.md.gz new file mode 100644 index 0000000..ba5c8d4 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/030-PROGRESS_INTEGRATION.md.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/031-progress_snapshot.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/031-progress_snapshot.json.gz new file mode 100644 index 0000000..8a3f8fd Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/031-progress_snapshot.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/032-work_packages.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/032-work_packages.json.gz new file mode 100644 index 0000000..9f5a606 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/032-work_packages.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/033-p23-02-native-input-copy-local-actual-independent-review-r335.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/033-p23-02-native-input-copy-local-actual-independent-review-r335.json.gz new file mode 100644 index 0000000..58cf87f Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/033-p23-02-native-input-copy-local-actual-independent-review-r335.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/034-p23-02-native-input-copy-local-preexecution-independent-review-r335.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/034-p23-02-native-input-copy-local-preexecution-independent-review-r335.json.gz new file mode 100644 index 0000000..15d80ea Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/034-p23-02-native-input-copy-local-preexecution-independent-review-r335.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/035-actual-root-verification.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/035-actual-root-verification.json.gz new file mode 100644 index 0000000..ca6ec54 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/035-actual-root-verification.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/036-candidate.gdextension b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/036-candidate.gdextension new file mode 100644 index 0000000..074c18b --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/036-candidate.gdextension @@ -0,0 +1,7 @@ +[configuration] +entry_symbol="tree_numeric_core_init" +compatibility_minimum="4.7.2" +reloadable=false + +[libraries] +macos.arm64="/private/tmp/TheTree-input-copy-r335-3afabc8ef9ee42d0be34994471a451b5/candidate.dylib" diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/037-config-before-symbol-fix.gdextension b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/037-config-before-symbol-fix.gdextension new file mode 100644 index 0000000..cf4843b --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/037-config-before-symbol-fix.gdextension @@ -0,0 +1,7 @@ +[configuration] +entry_symbol = "the_tree_numeric_library_init" +compatibility_minimum = "4.7.2" +reloadable = false + +[libraries] +macos.debug.arm64 = "/private/tmp/TheTree-input-copy-r335-3afabc8ef9ee42d0be34994471a451b5/candidate.dylib" diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/038-execution.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/038-execution.json.gz new file mode 100644 index 0000000..a391870 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/038-execution.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/039-input-before-symbol-fix.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/039-input-before-symbol-fix.json.gz new file mode 100644 index 0000000..432d266 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/039-input-before-symbol-fix.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/040-input.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/040-input.json.gz new file mode 100644 index 0000000..da52431 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/040-input.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/041-adapter-owned-cleanup.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/041-adapter-owned-cleanup.json new file mode 100644 index 0000000..f44709a --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/041-adapter-owned-cleanup.json @@ -0,0 +1,18 @@ +{ + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/042-ended.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/042-ended.json new file mode 100644 index 0000000..6823fb3 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/042-ended.json @@ -0,0 +1,38 @@ +{ + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 48850, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys/engine-native.log" + ], + "monotonic_ns": 13711028791, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 48850, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys/engine-native.log" + ], + "ended_utc": "2026-10-12T04:31:44.008426+00:00", + "signal_scope": "tracked Popen child only; no external group signal" +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/043-engine-native.log.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/043-engine-native.log.gz new file mode 100644 index 0000000..8795aff Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/043-engine-native.log.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/044-outer-owned-finally.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/044-outer-owned-finally.json new file mode 100644 index 0000000..47cdb65 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/044-outer-owned-finally.json @@ -0,0 +1,39 @@ +{ + "actual_captured_pids": [ + 48850 + ], + "cleanup": [ + { + "pid": 48850, + "cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "outer_cleanup_errors": [], + "engine_ended": true, + "outer_maximum_helper_invocations": 3, + "helper_maximum_waits": 3, + "per_wait_timeout_seconds": 5, + "foreign_process_or_group_signals": 0 + } + ], + "adapter_exception": null, + "all_captured_ended": true, + "outer_cleanup_errors": [], + "foreign_process_or_group_signals": 0, + "all_cleanup_before_outer_receipt": true +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/045-process.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/045-process.json new file mode 100644 index 0000000..a3f99a9 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/045-process.json @@ -0,0 +1,140 @@ +{ + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys/engine-native.log" + ], + "pid": 48850, + "started_utc": "2026-10-12T04:31:38.713646+00:00", + "ended_utc": "2026-10-12T04:31:44.010083+00:00", + "wall_seconds": 5.29639375, + "exit_code": 0, + "helper_exit_code": 0, + "timed_out": false, + "stdout_sha256": "501ad12badba237cbff60cf8d3b93d3efe9392872c76064644592b4473d1ef21", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "error_lines": [], + "owned_popen_ended": true, + "old_helper_engine_ended": true, + "start_receipt_written": true, + "end_receipt_written": true, + "lifecycle_error": null, + "old_helper_lifecycle_error": null, + "actual_start_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 48850, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys/engine-native.log" + ], + "monotonic_ns": 8420696875, + "pid": 48850, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys/engine-native.log" + ], + "started_utc": "2026-10-12T04:31:38.713646+00:00", + "current_process_identity": { + "pid": 48850, + "ppid": 48787, + "pgid": 48850, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" + }, + "actual_end_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 48850, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys/engine-native.log" + ], + "monotonic_ns": 13711028791, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 48850, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys/engine-native.log" + ], + "ended_utc": "2026-10-12T04:31:44.008426+00:00", + "signal_scope": "tracked Popen child only; no external group signal" + }, + "strict_native_diagnostics": { + "errors": [], + "banner_count": 1, + "known_unicode_diagnostic_count": 0, + "unrecognized_unicode_diagnostic_count": 0, + "exit_leak_diagnostic_lines": [] + }, + "external_process_or_group_signals": 0, + "owned_child_process_helper_sha256": "c007e712c281573254faa1233c2ac92e100ab87393256a6dc096b35283e43037", + "adapter_owned_cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "adapter_error": null, + "old_helper_bytes_preserved": true, + "helper_wait_None_maps_to_actual_timeout_seconds": 5, + "explicit_helper_wait_timeouts_preserved": true, + "additional_cleanup_wait_timeout_seconds": 5, + "additional_cleanup_max_attempts": 3 +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/046-started.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/046-started.json new file mode 100644 index 0000000..1e50ee4 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/046-started.json @@ -0,0 +1,40 @@ +{ + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 48850, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys/engine-native.log" + ], + "monotonic_ns": 8420696875, + "pid": 48850, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys/engine-native.log" + ], + "started_utc": "2026-10-12T04:31:38.713646+00:00", + "current_process_identity": { + "pid": 48850, + "ppid": 48787, + "pgid": 48850, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/047-stderr.log b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/047-stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/048-stdout.log.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/048-stdout.log.gz new file mode 100644 index 0000000..cc128de Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/048-stdout.log.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/049-keys-guarded.gd b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/049-keys-guarded.gd new file mode 100644 index 0000000..4b3dcd3 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/049-keys-guarded.gd @@ -0,0 +1,15 @@ +extends "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys.gd" +const Guard := preload("/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-cache-public-mutations-r144/profile_guard.gd") +func _initialize() -> void: + if not Guard.activate(): quit(97); return + super._initialize() +func run() -> void: + var loaded := GDExtensionManager.load_extension("/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/candidate.gdextension") + var available := loaded == GDExtensionManager.LOAD_STATUS_OK and ClassDB.class_exists(&"TheTreeNumericCore") + var probe = ClassDB.instantiate(&"TheTreeNumericCore") if available else null + available = available and probe != null and probe.has_method(&"project_guest_candidates") + probe = null + check(available, "exact native guest projection extension registered before diagnostic") + if not available: quit(96); return + print("NATIVE_ADAPTER_LIBRARY_REGISTERED") + super.run() diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/050-fixtures.varbytes.zst b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/050-fixtures.varbytes.zst new file mode 100644 index 0000000..d84fad2 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/050-fixtures.varbytes.zst differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/051-report.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/051-report.json new file mode 100644 index 0000000..1eb35ca --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/051-report.json @@ -0,0 +1,21 @@ +{ + "Windows_accepted": false, + "case_count": 4, + "checks": 31, + "failures": [], + "fixtures": { + "bytes": 435, + "codec": "zstd", + "field_deletions": 0, + "file_envelope": false, + "full_bytes_roundtrip": true, + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys-measurement/fixtures.varbytes.zst", + "sha256": "1ac9e053951ac0aee35ec6d9662c21ea3738077b5460612ae72973d67e095ee3", + "uncompressed_bytes": 3256, + "uncompressed_sha256": "7047978727b451ac7deef043d6126bf732530aca9f8f86377d92cb8ccf28b582" + }, + "passed": true, + "performance_accepted": false, + "pid": 48850, + "unit_accepted": false +} \ No newline at end of file diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/052-keys-phase.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/052-keys-phase.json new file mode 100644 index 0000000..729506a --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/052-keys-phase.json @@ -0,0 +1,185 @@ +{ + "name": "keys", + "result": { + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys/engine-native.log" + ], + "pid": 48850, + "started_utc": "2026-10-12T04:31:38.713646+00:00", + "ended_utc": "2026-10-12T04:31:44.010083+00:00", + "wall_seconds": 5.29639375, + "exit_code": 0, + "helper_exit_code": 0, + "timed_out": false, + "stdout_sha256": "501ad12badba237cbff60cf8d3b93d3efe9392872c76064644592b4473d1ef21", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "error_lines": [], + "owned_popen_ended": true, + "old_helper_engine_ended": true, + "start_receipt_written": true, + "end_receipt_written": true, + "lifecycle_error": null, + "old_helper_lifecycle_error": null, + "actual_start_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 48850, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys/engine-native.log" + ], + "monotonic_ns": 8420696875, + "pid": 48850, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys/engine-native.log" + ], + "started_utc": "2026-10-12T04:31:38.713646+00:00", + "current_process_identity": { + "pid": 48850, + "ppid": 48787, + "pgid": 48850, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" + }, + "actual_end_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 48850, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys/engine-native.log" + ], + "monotonic_ns": 13711028791, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 48850, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/keys/engine-native.log" + ], + "ended_utc": "2026-10-12T04:31:44.008426+00:00", + "signal_scope": "tracked Popen child only; no external group signal" + }, + "strict_native_diagnostics": { + "errors": [], + "banner_count": 1, + "known_unicode_diagnostic_count": 0, + "unrecognized_unicode_diagnostic_count": 0, + "exit_leak_diagnostic_lines": [] + }, + "external_process_or_group_signals": 0, + "owned_child_process_helper_sha256": "c007e712c281573254faa1233c2ac92e100ab87393256a6dc096b35283e43037", + "adapter_owned_cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "adapter_error": null, + "old_helper_bytes_preserved": true, + "helper_wait_None_maps_to_actual_timeout_seconds": 5, + "explicit_helper_wait_timeouts_preserved": true, + "additional_cleanup_wait_timeout_seconds": 5, + "additional_cleanup_max_attempts": 3 + }, + "capture": { + "actual_captured_pids": [ + 48850 + ], + "cleanup": [ + { + "pid": 48850, + "cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "outer_cleanup_errors": [], + "engine_ended": true, + "outer_maximum_helper_invocations": 3, + "helper_maximum_waits": 3, + "per_wait_timeout_seconds": 5, + "foreign_process_or_group_signals": 0 + } + ], + "adapter_exception": null, + "all_captured_ended": true, + "outer_cleanup_errors": [], + "foreign_process_or_group_signals": 0, + "all_cleanup_before_outer_receipt": true, + "outer_receipt_written": true, + "outer_receipt_error": null, + "passed": true + } +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/053-keys-profile.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/053-keys-profile.json new file mode 100644 index 0000000..f240340 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/053-keys-profile.json @@ -0,0 +1,20 @@ +{ + "actual_user_data_dir": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-a0e2bb56fdb441558fbd14d619c89c95-impact-runtime", + "before": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-a0e2bb56fdb441558fbd14d619c89c95-impact-startup", + "conditions": [ + true, + true, + true, + true, + true + ], + "conditions_checked": 5, + "custom_user_dir_name": "TheTree-PCK-tests-a0e2bb56fdb441558fbd14d619c89c95-impact-runtime", + "expected_user_data_dir": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-a0e2bb56fdb441558fbd14d619c89c95-impact-runtime", + "fresh_before_parent_initialize": true, + "globalized_probe": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-a0e2bb56fdb441558fbd14d619c89c95-impact-runtime/guard-probe", + "profile_writes_before_guard": 0, + "project_settings_persisted": false, + "runtime_settings_only": true, + "verified": true +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/054-keys.gd b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/054-keys.gd new file mode 100644 index 0000000..43725ac --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/054-keys.gd @@ -0,0 +1,51 @@ +extends "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-guest-pipeline-boundaries-r195.gd" +const NEW_CASES := ["name_unicode","name_reverse","string_keys","mixed_keys"] +func setup(label: String) -> void: + super.setup("ordinary") + var d = runtime.definition_registry.get_facility(&"finite.definition") + if label == "name_unicode": d.inventory_inputs = {&"猫":0,&"A":0,&"é":0,&"あ":0,&"😀":0} + elif label == "name_reverse": d.inventory_inputs = {&"z":0,&"m":0,&"a":0} + elif label == "string_keys": d.inventory_inputs = {"z":0,"a":0} + else: d.inventory_inputs = {&"z":0,"a":0,&"猫":0} +func run() -> void: + output=OS.get_environment("THE_TREE_RUNTIME_MONITOR_OUTPUT") + runtime=root.get_node("SimulationRuntime");clock=root.get_node("GameClock") + var raw := FileAccess.get_file_as_bytes(OS.get_environment("THE_TREE_REPLAY_SNAPSHOT")).decompress(11411840,FileAccess.COMPRESSION_ZSTD) + var initial: Dictionary=bytes_to_var(raw) + runtime.initialize(clock,root.get_node("GameState"),int(initial[&"systems"][&"runtime"][&"world_seed"])) + check(runtime.restore_snapshot(initial),"fixed646 original seed/context restore") + core=ClassDB.instantiate(&"TheTreeNumericCore") + for label: String in NEW_CASES: + setup(label) + var before := var_to_bytes(state()) + var selected := project() + var fallback := label.begins_with("custom_") or label=="path_observer" + check(bool(selected.get(&"supported",false))==not fallback,label+" actual native domain") + if fallback:check(var_to_bytes(state())==before,label+" rejection has no public effects") + var got: Array=runtime._project_guest_candidates(&"finite.guest") if fallback else selected[&"candidates"] + var after := var_to_bytes(state()) + var got_bytes := var_to_bytes(got) + check(runtime.path_service._query_batch.is_empty(),label+" derived batch released") + setup(label) + check(var_to_bytes(state())==before,label+" same complete starting state") + var expected: Array=runtime._project_guest_candidates_without_native(&"finite.guest") + check(var_to_bytes(expected)==got_bytes,label+" complete ordered typed candidates") + check(var_to_bytes(state())==after,label+" complete Runtime Path cache errors counters callback count") + if label=="stairs150":check(int(got[0][&"travel_minutes"])==2,label+" stairs ceil150/100") + elif label=="elevator151":check(int(got[0][&"travel_minutes"])==12,label+" elevator ceil((151+1floor*10minutes*100)/100)") + elif label in ["stairs149","foreign150"]:check(int(got[0][&"travel_minutes"])==1,label+" ordinary movement retained") + if label=="integer_wrap":check(int(got[0][&"expected_wait"])==9223372036854775805 and int(got[0][&"group_fit"])==-9223372036854775808,label+" signed multiplication wrap") + if label=="clamp_low":check(got[0][&"expected_quality"]==0 and got[0][&"group_fit"]==0,label+" zero divisor guard and quality lower clamp") + if label=="ordinary": + check(got[0][&"expected_quality"]==100,label+" quality upper clamp") + var protected_bytes := var_to_bytes(expected) + got[0][&"facility_tags"].append(&"mutated");got[0][&"need_relief"].clear();got[0][&"path_handle"].clear() + check(var_to_bytes(expected)==protected_bytes and runtime.definition_registry.get_facility(&"finite.definition").tags==[&"rest"],label+" owned returned tags relief and handle") + records.append({"case":label,"native_supported":not fallback,"candidates":expected,"observer_calls":calls}) + core=null + var report := {"passed":failures.is_empty(),"checks":checks,"failures":failures,"pid":OS.get_process_id(),"case_count":NEW_CASES.size(),"fixtures":typed("fixtures",records),"unit_accepted":false,"performance_accepted":false,"Windows_accepted":false} + report["passed"]=failures.is_empty();report["checks"]=checks;report["failures"]=failures + var file := FileAccess.open(output.path_join("report.json"),FileAccess.WRITE) + if file==null:quit(98);return + file.store_string(JSON.stringify(report,"\t"));file.close() + print("Guest pipeline boundaries: %d checks, %d failures"%[checks,failures.size()]);quit(0 if failures.is_empty() else 1) diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/055-adapter-owned-cleanup.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/055-adapter-owned-cleanup.json new file mode 100644 index 0000000..f44709a --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/055-adapter-owned-cleanup.json @@ -0,0 +1,18 @@ +{ + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/056-ended.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/056-ended.json new file mode 100644 index 0000000..90235e7 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/056-ended.json @@ -0,0 +1,38 @@ +{ + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 48835, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local/engine-native.log" + ], + "monotonic_ns": 6979193458, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 48835, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local/engine-native.log" + ], + "ended_utc": "2026-10-12T04:31:37.276550+00:00", + "signal_scope": "tracked Popen child only; no external group signal" +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/057-engine-native.log b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/057-engine-native.log new file mode 100644 index 0000000..b7579da --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/057-engine-native.log @@ -0,0 +1,70 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +TextServer: Added interface "Dummy" +TextServer: Added interface "ICU / HarfBuzz / Graphite (Built-in)" +SDL: Init OK! +Using "default" pen tablet driver... + +TextServer: Primary interface set to: "ICU / HarfBuzz / Graphite (Built-in)". +CORE API HASH: 2004498165 +EDITOR API HASH: 1696660745 +Loading resource: /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd remapped: /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd +Completed load for: '/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd' remapped '/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd' at thread -1 +SceneTreeFTI: traversal method DEFAULT +Loading resource: res://autoload/event_bus.gd remapped: res://autoload/event_bus.gd +Completed load for: 'res://autoload/event_bus.gd' remapped 'res://autoload/event_bus.gd' at thread -1 +Loading resource: res://autoload/game_clock.gd remapped: res://autoload/game_clock.gd +Completed load for: 'res://autoload/game_clock.gd' remapped 'res://autoload/game_clock.gd' at thread -1 +Loading resource: res://autoload/game_state.gd remapped: res://autoload/game_state.gd +Completed load for: 'res://autoload/game_state.gd' remapped 'res://autoload/game_state.gd' at thread -1 +Loading resource: res://autoload/simulation_runtime.gd remapped: res://autoload/simulation_runtime.gd +Completed load for: 'res://autoload/simulation_runtime.gd' remapped 'res://autoload/simulation_runtime.gd' at thread -1 +Loaded system CA certificates +PACK_PROFILE_GUARD verified=true +Loading resource: res://data/facilities/adult_private_room.tres remapped: res://data/facilities/adult_private_room.tres +Completed load for: 'res://data/facilities/adult_private_room.tres' remapped 'res://data/facilities/adult_private_room.tres' at thread -1 +Loading resource: res://data/facilities/cafeteria.tres remapped: res://data/facilities/cafeteria.tres +Completed load for: 'res://data/facilities/cafeteria.tres' remapped 'res://data/facilities/cafeteria.tres' at thread -1 +Loading resource: res://data/facilities/expansion/chapel.tres remapped: res://data/facilities/expansion/chapel.tres +Completed load for: 'res://data/facilities/expansion/chapel.tres' remapped 'res://data/facilities/expansion/chapel.tres' at thread -1 +Loading resource: res://data/facilities/expansion/cleaning_room.tres remapped: res://data/facilities/expansion/cleaning_room.tres +Completed load for: 'res://data/facilities/expansion/cleaning_room.tres' remapped 'res://data/facilities/expansion/cleaning_room.tres' at thread -1 +Loading resource: res://data/facilities/expansion/premium_room.tres remapped: res://data/facilities/expansion/premium_room.tres +Completed load for: 'res://data/facilities/expansion/premium_room.tres' remapped 'res://data/facilities/expansion/premium_room.tres' at thread -1 +Loading resource: res://data/facilities/expansion/staff_dormitory.tres remapped: res://data/facilities/expansion/staff_dormitory.tres +Completed load for: 'res://data/facilities/expansion/staff_dormitory.tres' remapped 'res://data/facilities/expansion/staff_dormitory.tres' at thread -1 +Loading resource: res://data/facilities/guest_corridor.tres remapped: res://data/facilities/guest_corridor.tres +Completed load for: 'res://data/facilities/guest_corridor.tres' remapped 'res://data/facilities/guest_corridor.tres' at thread -1 +Loading resource: res://data/facilities/guest_elevator.tres remapped: res://data/facilities/guest_elevator.tres +Completed load for: 'res://data/facilities/guest_elevator.tres' remapped 'res://data/facilities/guest_elevator.tres' at thread -1 +Loading resource: res://data/facilities/infrastructure/guest_stairs.tres remapped: res://data/facilities/infrastructure/guest_stairs.tres +Completed load for: 'res://data/facilities/infrastructure/guest_stairs.tres' remapped 'res://data/facilities/infrastructure/guest_stairs.tres' at thread -1 +Loading resource: res://data/facilities/infrastructure/service_stairs.tres remapped: res://data/facilities/infrastructure/service_stairs.tres +Completed load for: 'res://data/facilities/infrastructure/service_stairs.tres' remapped 'res://data/facilities/infrastructure/service_stairs.tres' at thread -1 +Loading resource: res://data/facilities/kitchen.tres remapped: res://data/facilities/kitchen.tres +Completed load for: 'res://data/facilities/kitchen.tres' remapped 'res://data/facilities/kitchen.tres' at thread -1 +Loading resource: res://data/facilities/massage_room.tres remapped: res://data/facilities/massage_room.tres +Completed load for: 'res://data/facilities/massage_room.tres' remapped 'res://data/facilities/massage_room.tres' at thread -1 +Loading resource: res://data/facilities/public_bath.tres remapped: res://data/facilities/public_bath.tres +Completed load for: 'res://data/facilities/public_bath.tres' remapped 'res://data/facilities/public_bath.tres' at thread -1 +Loading resource: res://data/facilities/reception.tres remapped: res://data/facilities/reception.tres +Completed load for: 'res://data/facilities/reception.tres' remapped 'res://data/facilities/reception.tres' at thread -1 +Loading resource: res://data/facilities/rescue/infirmary.tres remapped: res://data/facilities/rescue/infirmary.tres +Completed load for: 'res://data/facilities/rescue/infirmary.tres' remapped 'res://data/facilities/rescue/infirmary.tres' at thread -1 +Loading resource: res://data/facilities/security_station.tres remapped: res://data/facilities/security_station.tres +Completed load for: 'res://data/facilities/security_station.tres' remapped 'res://data/facilities/security_station.tres' at thread -1 +Loading resource: res://data/facilities/service_corridor.tres remapped: res://data/facilities/service_corridor.tres +Completed load for: 'res://data/facilities/service_corridor.tres' remapped 'res://data/facilities/service_corridor.tres' at thread -1 +Loading resource: res://data/facilities/service_elevator.tres remapped: res://data/facilities/service_elevator.tres +Completed load for: 'res://data/facilities/service_elevator.tres' remapped 'res://data/facilities/service_elevator.tres' at thread -1 +Loading resource: res://data/facilities/staff_door.tres remapped: res://data/facilities/staff_door.tres +Completed load for: 'res://data/facilities/staff_door.tres' remapped 'res://data/facilities/staff_door.tres' at thread -1 +Loading resource: res://data/facilities/staff_waiting_room.tres remapped: res://data/facilities/staff_waiting_room.tres +Completed load for: 'res://data/facilities/staff_waiting_room.tres' remapped 'res://data/facilities/staff_waiting_room.tres' at thread -1 +Loading resource: res://data/facilities/standard_room.tres remapped: res://data/facilities/standard_room.tres +Completed load for: 'res://data/facilities/standard_room.tres' remapped 'res://data/facilities/standard_room.tres' at thread -1 +Loading resource: res://data/facilities/tavern.tres remapped: res://data/facilities/tavern.tres +Completed load for: 'res://data/facilities/tavern.tres' remapped 'res://data/facilities/tavern.tres' at thread -1 +Loading resource: res://data/facilities/warehouse.tres remapped: res://data/facilities/warehouse.tres +Completed load for: 'res://data/facilities/warehouse.tres' remapped 'res://data/facilities/warehouse.tres' at thread -1 +NATIVE_ADAPTER_LIBRARY_REGISTERED +Guest batch point fixtures: 257 checks, 0 failures diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/058-outer-owned-finally.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/058-outer-owned-finally.json new file mode 100644 index 0000000..b1784c0 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/058-outer-owned-finally.json @@ -0,0 +1,39 @@ +{ + "actual_captured_pids": [ + 48835 + ], + "cleanup": [ + { + "pid": 48835, + "cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "outer_cleanup_errors": [], + "engine_ended": true, + "outer_maximum_helper_invocations": 3, + "helper_maximum_waits": 3, + "per_wait_timeout_seconds": 5, + "foreign_process_or_group_signals": 0 + } + ], + "adapter_exception": null, + "all_captured_ended": true, + "outer_cleanup_errors": [], + "foreign_process_or_group_signals": 0, + "all_cleanup_before_outer_receipt": true +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/059-process.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/059-process.json new file mode 100644 index 0000000..f1c10bd --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/059-process.json @@ -0,0 +1,140 @@ +{ + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local/engine-native.log" + ], + "pid": 48835, + "started_utc": "2026-10-12T04:31:36.026040+00:00", + "ended_utc": "2026-10-12T04:31:37.279118+00:00", + "wall_seconds": 1.253067208, + "exit_code": 0, + "helper_exit_code": 0, + "timed_out": false, + "stdout_sha256": "0421417c77aa8e3e402c09222a177085caafc77a8abbd3fc63f34a980e97f925", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "error_lines": [], + "owned_popen_ended": true, + "old_helper_engine_ended": true, + "start_receipt_written": true, + "end_receipt_written": true, + "lifecycle_error": null, + "old_helper_lifecycle_error": null, + "actual_start_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 48835, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local/engine-native.log" + ], + "monotonic_ns": 5733207583, + "pid": 48835, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local/engine-native.log" + ], + "started_utc": "2026-10-12T04:31:36.026040+00:00", + "current_process_identity": { + "pid": 48835, + "ppid": 48787, + "pgid": 48835, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" + }, + "actual_end_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 48835, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local/engine-native.log" + ], + "monotonic_ns": 6979193458, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 48835, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local/engine-native.log" + ], + "ended_utc": "2026-10-12T04:31:37.276550+00:00", + "signal_scope": "tracked Popen child only; no external group signal" + }, + "strict_native_diagnostics": { + "errors": [], + "banner_count": 1, + "known_unicode_diagnostic_count": 0, + "unrecognized_unicode_diagnostic_count": 0, + "exit_leak_diagnostic_lines": [] + }, + "external_process_or_group_signals": 0, + "owned_child_process_helper_sha256": "c007e712c281573254faa1233c2ac92e100ab87393256a6dc096b35283e43037", + "adapter_owned_cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "adapter_error": null, + "old_helper_bytes_preserved": true, + "helper_wait_None_maps_to_actual_timeout_seconds": 5, + "explicit_helper_wait_timeouts_preserved": true, + "additional_cleanup_wait_timeout_seconds": 5, + "additional_cleanup_max_attempts": 3 +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/060-started.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/060-started.json new file mode 100644 index 0000000..b17f24c --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/060-started.json @@ -0,0 +1,40 @@ +{ + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 48835, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local/engine-native.log" + ], + "monotonic_ns": 5733207583, + "pid": 48835, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local/engine-native.log" + ], + "started_utc": "2026-10-12T04:31:36.026040+00:00", + "current_process_identity": { + "pid": 48835, + "ppid": 48787, + "pgid": 48835, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/061-stderr.log b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/061-stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/062-stdout.log b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/062-stdout.log new file mode 100644 index 0000000..07b1ab2 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/062-stdout.log @@ -0,0 +1,74 @@ +WorkerThreadPool: 10 threads, 3 max low-priority. +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +TextServer: Added interface "Dummy" +TextServer: Added interface "ICU / HarfBuzz / Graphite (Built-in)" +SDL: Init OK! +Using "default" pen tablet driver... + +TextServer: Primary interface set to: "ICU / HarfBuzz / Graphite (Built-in)". +CORE API HASH: 2004498165 +EDITOR API HASH: 1696660745 +Loading resource: /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd remapped: /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd +Completed load for: '/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd' remapped '/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd' at thread -1 +SceneTreeFTI: traversal method DEFAULT +Loading resource: res://autoload/event_bus.gd remapped: res://autoload/event_bus.gd +Completed load for: 'res://autoload/event_bus.gd' remapped 'res://autoload/event_bus.gd' at thread -1 +Loading resource: res://autoload/game_clock.gd remapped: res://autoload/game_clock.gd +Completed load for: 'res://autoload/game_clock.gd' remapped 'res://autoload/game_clock.gd' at thread -1 +Loading resource: res://autoload/game_state.gd remapped: res://autoload/game_state.gd +Completed load for: 'res://autoload/game_state.gd' remapped 'res://autoload/game_state.gd' at thread -1 +Loading resource: res://autoload/simulation_runtime.gd remapped: res://autoload/simulation_runtime.gd +Completed load for: 'res://autoload/simulation_runtime.gd' remapped 'res://autoload/simulation_runtime.gd' at thread -1 +Loaded system CA certificates +PACK_PROFILE_GUARD verified=true +Loading resource: res://data/facilities/adult_private_room.tres remapped: res://data/facilities/adult_private_room.tres +Completed load for: 'res://data/facilities/adult_private_room.tres' remapped 'res://data/facilities/adult_private_room.tres' at thread -1 +Loading resource: res://data/facilities/cafeteria.tres remapped: res://data/facilities/cafeteria.tres +Completed load for: 'res://data/facilities/cafeteria.tres' remapped 'res://data/facilities/cafeteria.tres' at thread -1 +Loading resource: res://data/facilities/expansion/chapel.tres remapped: res://data/facilities/expansion/chapel.tres +Completed load for: 'res://data/facilities/expansion/chapel.tres' remapped 'res://data/facilities/expansion/chapel.tres' at thread -1 +Loading resource: res://data/facilities/expansion/cleaning_room.tres remapped: res://data/facilities/expansion/cleaning_room.tres +Completed load for: 'res://data/facilities/expansion/cleaning_room.tres' remapped 'res://data/facilities/expansion/cleaning_room.tres' at thread -1 +Loading resource: res://data/facilities/expansion/premium_room.tres remapped: res://data/facilities/expansion/premium_room.tres +Completed load for: 'res://data/facilities/expansion/premium_room.tres' remapped 'res://data/facilities/expansion/premium_room.tres' at thread -1 +Loading resource: res://data/facilities/expansion/staff_dormitory.tres remapped: res://data/facilities/expansion/staff_dormitory.tres +Completed load for: 'res://data/facilities/expansion/staff_dormitory.tres' remapped 'res://data/facilities/expansion/staff_dormitory.tres' at thread -1 +Loading resource: res://data/facilities/guest_corridor.tres remapped: res://data/facilities/guest_corridor.tres +Completed load for: 'res://data/facilities/guest_corridor.tres' remapped 'res://data/facilities/guest_corridor.tres' at thread -1 +Loading resource: res://data/facilities/guest_elevator.tres remapped: res://data/facilities/guest_elevator.tres +Completed load for: 'res://data/facilities/guest_elevator.tres' remapped 'res://data/facilities/guest_elevator.tres' at thread -1 +Loading resource: res://data/facilities/infrastructure/guest_stairs.tres remapped: res://data/facilities/infrastructure/guest_stairs.tres +Completed load for: 'res://data/facilities/infrastructure/guest_stairs.tres' remapped 'res://data/facilities/infrastructure/guest_stairs.tres' at thread -1 +Loading resource: res://data/facilities/infrastructure/service_stairs.tres remapped: res://data/facilities/infrastructure/service_stairs.tres +Completed load for: 'res://data/facilities/infrastructure/service_stairs.tres' remapped 'res://data/facilities/infrastructure/service_stairs.tres' at thread -1 +Loading resource: res://data/facilities/kitchen.tres remapped: res://data/facilities/kitchen.tres +Completed load for: 'res://data/facilities/kitchen.tres' remapped 'res://data/facilities/kitchen.tres' at thread -1 +Loading resource: res://data/facilities/massage_room.tres remapped: res://data/facilities/massage_room.tres +Completed load for: 'res://data/facilities/massage_room.tres' remapped 'res://data/facilities/massage_room.tres' at thread -1 +Loading resource: res://data/facilities/public_bath.tres remapped: res://data/facilities/public_bath.tres +Completed load for: 'res://data/facilities/public_bath.tres' remapped 'res://data/facilities/public_bath.tres' at thread -1 +Loading resource: res://data/facilities/reception.tres remapped: res://data/facilities/reception.tres +Completed load for: 'res://data/facilities/reception.tres' remapped 'res://data/facilities/reception.tres' at thread -1 +Loading resource: res://data/facilities/rescue/infirmary.tres remapped: res://data/facilities/rescue/infirmary.tres +Completed load for: 'res://data/facilities/rescue/infirmary.tres' remapped 'res://data/facilities/rescue/infirmary.tres' at thread -1 +Loading resource: res://data/facilities/security_station.tres remapped: res://data/facilities/security_station.tres +Completed load for: 'res://data/facilities/security_station.tres' remapped 'res://data/facilities/security_station.tres' at thread -1 +Loading resource: res://data/facilities/service_corridor.tres remapped: res://data/facilities/service_corridor.tres +Completed load for: 'res://data/facilities/service_corridor.tres' remapped 'res://data/facilities/service_corridor.tres' at thread -1 +Loading resource: res://data/facilities/service_elevator.tres remapped: res://data/facilities/service_elevator.tres +Completed load for: 'res://data/facilities/service_elevator.tres' remapped 'res://data/facilities/service_elevator.tres' at thread -1 +Loading resource: res://data/facilities/staff_door.tres remapped: res://data/facilities/staff_door.tres +Completed load for: 'res://data/facilities/staff_door.tres' remapped 'res://data/facilities/staff_door.tres' at thread -1 +Loading resource: res://data/facilities/staff_waiting_room.tres remapped: res://data/facilities/staff_waiting_room.tres +Completed load for: 'res://data/facilities/staff_waiting_room.tres' remapped 'res://data/facilities/staff_waiting_room.tres' at thread -1 +Loading resource: res://data/facilities/standard_room.tres remapped: res://data/facilities/standard_room.tres +Completed load for: 'res://data/facilities/standard_room.tres' remapped 'res://data/facilities/standard_room.tres' at thread -1 +Loading resource: res://data/facilities/tavern.tres remapped: res://data/facilities/tavern.tres +Completed load for: 'res://data/facilities/tavern.tres' remapped 'res://data/facilities/tavern.tres' at thread -1 +Loading resource: res://data/facilities/warehouse.tres remapped: res://data/facilities/warehouse.tres +Completed load for: 'res://data/facilities/warehouse.tres' remapped 'res://data/facilities/warehouse.tres' at thread -1 +NATIVE_ADAPTER_LIBRARY_REGISTERED +Guest batch point fixtures: 257 checks, 0 failures +XR: Clearing primary interface +XR: Removed interface "Native mobile" +XR: Removed interface "OpenXR" diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/063-local-guarded.gd b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/063-local-guarded.gd new file mode 100644 index 0000000..07f4431 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/063-local-guarded.gd @@ -0,0 +1,15 @@ +extends "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-access-prewarmed-fixtures-r182.gd" +const Guard := preload("/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-cache-public-mutations-r144/profile_guard.gd") +func _initialize() -> void: + if not Guard.activate(): quit(97); return + super._initialize() +func run() -> void: + var loaded := GDExtensionManager.load_extension("/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/candidate.gdextension") + var available := loaded == GDExtensionManager.LOAD_STATUS_OK and ClassDB.class_exists(&"TheTreeNumericCore") + var probe = ClassDB.instantiate(&"TheTreeNumericCore") if available else null + available = available and probe != null and probe.has_method(&"project_guest_candidates") + probe = null + check(available, "exact native guest projection extension registered before diagnostic") + if not available: quit(96); return + print("NATIVE_ADAPTER_LIBRARY_REGISTERED") + super.run() diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/064-point-resolution-fixtures.varbytes.zst b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/064-point-resolution-fixtures.varbytes.zst new file mode 100644 index 0000000..498c778 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/064-point-resolution-fixtures.varbytes.zst differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/065-report.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/065-report.json new file mode 100644 index 0000000..a46363a --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/065-report.json @@ -0,0 +1,25 @@ +{ + "candidate": "r121 unadopted", + "candidate_adopted": false, + "case_count": 19, + "checks": 257, + "failures": [], + "fixtures": { + "bytes": 1478, + "codec": "zstd", + "field_deletions": 0, + "file_envelope": false, + "full_bytes_roundtrip": true, + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-measurement/point-resolution-fixtures.varbytes.zst", + "sha256": "9023bf17cee888109eb0b12660a7e527369618abcfab12b71962f8b2495c78de", + "uncompressed_bytes": 47820, + "uncompressed_sha256": "f769984e106db6834e147c4495b1cbb3f089a2ec19da404f7585303e7ebde077" + }, + "limits": [ + "Finite differential ready-batch point resolution against original r79 nearest pipeline; no whole647, arbitrary mutation, general callback, wrapping, native lifetime, normal OS or Windows acceptance." + ], + "passed": true, + "performance_budget_accepted": false, + "pid": 48835, + "unit_accepted": false +} \ No newline at end of file diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/066-local-phase.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/066-local-phase.json new file mode 100644 index 0000000..ae8dff9 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/066-local-phase.json @@ -0,0 +1,185 @@ +{ + "name": "local", + "result": { + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local/engine-native.log" + ], + "pid": 48835, + "started_utc": "2026-10-12T04:31:36.026040+00:00", + "ended_utc": "2026-10-12T04:31:37.279118+00:00", + "wall_seconds": 1.253067208, + "exit_code": 0, + "helper_exit_code": 0, + "timed_out": false, + "stdout_sha256": "0421417c77aa8e3e402c09222a177085caafc77a8abbd3fc63f34a980e97f925", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "error_lines": [], + "owned_popen_ended": true, + "old_helper_engine_ended": true, + "start_receipt_written": true, + "end_receipt_written": true, + "lifecycle_error": null, + "old_helper_lifecycle_error": null, + "actual_start_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 48835, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local/engine-native.log" + ], + "monotonic_ns": 5733207583, + "pid": 48835, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local/engine-native.log" + ], + "started_utc": "2026-10-12T04:31:36.026040+00:00", + "current_process_identity": { + "pid": 48835, + "ppid": 48787, + "pgid": 48835, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" + }, + "actual_end_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 48835, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local/engine-native.log" + ], + "monotonic_ns": 6979193458, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 48835, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/local/engine-native.log" + ], + "ended_utc": "2026-10-12T04:31:37.276550+00:00", + "signal_scope": "tracked Popen child only; no external group signal" + }, + "strict_native_diagnostics": { + "errors": [], + "banner_count": 1, + "known_unicode_diagnostic_count": 0, + "unrecognized_unicode_diagnostic_count": 0, + "exit_leak_diagnostic_lines": [] + }, + "external_process_or_group_signals": 0, + "owned_child_process_helper_sha256": "c007e712c281573254faa1233c2ac92e100ab87393256a6dc096b35283e43037", + "adapter_owned_cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "adapter_error": null, + "old_helper_bytes_preserved": true, + "helper_wait_None_maps_to_actual_timeout_seconds": 5, + "explicit_helper_wait_timeouts_preserved": true, + "additional_cleanup_wait_timeout_seconds": 5, + "additional_cleanup_max_attempts": 3 + }, + "capture": { + "actual_captured_pids": [ + 48835 + ], + "cleanup": [ + { + "pid": 48835, + "cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "outer_cleanup_errors": [], + "engine_ended": true, + "outer_maximum_helper_invocations": 3, + "helper_maximum_waits": 3, + "per_wait_timeout_seconds": 5, + "foreign_process_or_group_signals": 0 + } + ], + "adapter_exception": null, + "all_captured_ended": true, + "outer_cleanup_errors": [], + "foreign_process_or_group_signals": 0, + "all_cleanup_before_outer_receipt": true, + "outer_receipt_written": true, + "outer_receipt_error": null, + "passed": true + } +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/067-local-profile.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/067-local-profile.json new file mode 100644 index 0000000..817d214 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/067-local-profile.json @@ -0,0 +1,20 @@ +{ + "actual_user_data_dir": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-5c050a42664f48b3921c7df430ff816b-impact-runtime", + "before": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-5c050a42664f48b3921c7df430ff816b-impact-startup", + "conditions": [ + true, + true, + true, + true, + true + ], + "conditions_checked": 5, + "custom_user_dir_name": "TheTree-PCK-tests-5c050a42664f48b3921c7df430ff816b-impact-runtime", + "expected_user_data_dir": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-5c050a42664f48b3921c7df430ff816b-impact-runtime", + "fresh_before_parent_initialize": true, + "globalized_probe": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-5c050a42664f48b3921c7df430ff816b-impact-runtime/guard-probe", + "profile_writes_before_guard": 0, + "project_settings_persisted": false, + "runtime_settings_only": true, + "verified": true +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/068-adapter-owned-cleanup.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/068-adapter-owned-cleanup.json new file mode 100644 index 0000000..f44709a --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/068-adapter-owned-cleanup.json @@ -0,0 +1,18 @@ +{ + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/069-ended.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/069-ended.json new file mode 100644 index 0000000..506af39 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/069-ended.json @@ -0,0 +1,38 @@ +{ + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 48803, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents/engine-native.log" + ], + "monotonic_ns": 4237877250, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 48803, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents/engine-native.log" + ], + "ended_utc": "2026-10-12T04:31:34.535206+00:00", + "signal_scope": "tracked Popen child only; no external group signal" +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/070-engine-native.log b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/070-engine-native.log new file mode 100644 index 0000000..4c62c0e --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/070-engine-native.log @@ -0,0 +1,70 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +TextServer: Added interface "Dummy" +TextServer: Added interface "ICU / HarfBuzz / Graphite (Built-in)" +SDL: Init OK! +Using "default" pen tablet driver... + +TextServer: Primary interface set to: "ICU / HarfBuzz / Graphite (Built-in)". +CORE API HASH: 2004498165 +EDITOR API HASH: 1696660745 +Loading resource: /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd remapped: /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd +Completed load for: '/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd' remapped '/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd' at thread -1 +SceneTreeFTI: traversal method DEFAULT +Loading resource: res://autoload/event_bus.gd remapped: res://autoload/event_bus.gd +Completed load for: 'res://autoload/event_bus.gd' remapped 'res://autoload/event_bus.gd' at thread -1 +Loading resource: res://autoload/game_clock.gd remapped: res://autoload/game_clock.gd +Completed load for: 'res://autoload/game_clock.gd' remapped 'res://autoload/game_clock.gd' at thread -1 +Loading resource: res://autoload/game_state.gd remapped: res://autoload/game_state.gd +Completed load for: 'res://autoload/game_state.gd' remapped 'res://autoload/game_state.gd' at thread -1 +Loading resource: res://autoload/simulation_runtime.gd remapped: res://autoload/simulation_runtime.gd +Completed load for: 'res://autoload/simulation_runtime.gd' remapped 'res://autoload/simulation_runtime.gd' at thread -1 +Loaded system CA certificates +PACK_PROFILE_GUARD verified=true +Loading resource: res://data/facilities/adult_private_room.tres remapped: res://data/facilities/adult_private_room.tres +Completed load for: 'res://data/facilities/adult_private_room.tres' remapped 'res://data/facilities/adult_private_room.tres' at thread -1 +Loading resource: res://data/facilities/cafeteria.tres remapped: res://data/facilities/cafeteria.tres +Completed load for: 'res://data/facilities/cafeteria.tres' remapped 'res://data/facilities/cafeteria.tres' at thread -1 +Loading resource: res://data/facilities/expansion/chapel.tres remapped: res://data/facilities/expansion/chapel.tres +Completed load for: 'res://data/facilities/expansion/chapel.tres' remapped 'res://data/facilities/expansion/chapel.tres' at thread -1 +Loading resource: res://data/facilities/expansion/cleaning_room.tres remapped: res://data/facilities/expansion/cleaning_room.tres +Completed load for: 'res://data/facilities/expansion/cleaning_room.tres' remapped 'res://data/facilities/expansion/cleaning_room.tres' at thread -1 +Loading resource: res://data/facilities/expansion/premium_room.tres remapped: res://data/facilities/expansion/premium_room.tres +Completed load for: 'res://data/facilities/expansion/premium_room.tres' remapped 'res://data/facilities/expansion/premium_room.tres' at thread -1 +Loading resource: res://data/facilities/expansion/staff_dormitory.tres remapped: res://data/facilities/expansion/staff_dormitory.tres +Completed load for: 'res://data/facilities/expansion/staff_dormitory.tres' remapped 'res://data/facilities/expansion/staff_dormitory.tres' at thread -1 +Loading resource: res://data/facilities/guest_corridor.tres remapped: res://data/facilities/guest_corridor.tres +Completed load for: 'res://data/facilities/guest_corridor.tres' remapped 'res://data/facilities/guest_corridor.tres' at thread -1 +Loading resource: res://data/facilities/guest_elevator.tres remapped: res://data/facilities/guest_elevator.tres +Completed load for: 'res://data/facilities/guest_elevator.tres' remapped 'res://data/facilities/guest_elevator.tres' at thread -1 +Loading resource: res://data/facilities/infrastructure/guest_stairs.tres remapped: res://data/facilities/infrastructure/guest_stairs.tres +Completed load for: 'res://data/facilities/infrastructure/guest_stairs.tres' remapped 'res://data/facilities/infrastructure/guest_stairs.tres' at thread -1 +Loading resource: res://data/facilities/infrastructure/service_stairs.tres remapped: res://data/facilities/infrastructure/service_stairs.tres +Completed load for: 'res://data/facilities/infrastructure/service_stairs.tres' remapped 'res://data/facilities/infrastructure/service_stairs.tres' at thread -1 +Loading resource: res://data/facilities/kitchen.tres remapped: res://data/facilities/kitchen.tres +Completed load for: 'res://data/facilities/kitchen.tres' remapped 'res://data/facilities/kitchen.tres' at thread -1 +Loading resource: res://data/facilities/massage_room.tres remapped: res://data/facilities/massage_room.tres +Completed load for: 'res://data/facilities/massage_room.tres' remapped 'res://data/facilities/massage_room.tres' at thread -1 +Loading resource: res://data/facilities/public_bath.tres remapped: res://data/facilities/public_bath.tres +Completed load for: 'res://data/facilities/public_bath.tres' remapped 'res://data/facilities/public_bath.tres' at thread -1 +Loading resource: res://data/facilities/reception.tres remapped: res://data/facilities/reception.tres +Completed load for: 'res://data/facilities/reception.tres' remapped 'res://data/facilities/reception.tres' at thread -1 +Loading resource: res://data/facilities/rescue/infirmary.tres remapped: res://data/facilities/rescue/infirmary.tres +Completed load for: 'res://data/facilities/rescue/infirmary.tres' remapped 'res://data/facilities/rescue/infirmary.tres' at thread -1 +Loading resource: res://data/facilities/security_station.tres remapped: res://data/facilities/security_station.tres +Completed load for: 'res://data/facilities/security_station.tres' remapped 'res://data/facilities/security_station.tres' at thread -1 +Loading resource: res://data/facilities/service_corridor.tres remapped: res://data/facilities/service_corridor.tres +Completed load for: 'res://data/facilities/service_corridor.tres' remapped 'res://data/facilities/service_corridor.tres' at thread -1 +Loading resource: res://data/facilities/service_elevator.tres remapped: res://data/facilities/service_elevator.tres +Completed load for: 'res://data/facilities/service_elevator.tres' remapped 'res://data/facilities/service_elevator.tres' at thread -1 +Loading resource: res://data/facilities/staff_door.tres remapped: res://data/facilities/staff_door.tres +Completed load for: 'res://data/facilities/staff_door.tres' remapped 'res://data/facilities/staff_door.tres' at thread -1 +Loading resource: res://data/facilities/staff_waiting_room.tres remapped: res://data/facilities/staff_waiting_room.tres +Completed load for: 'res://data/facilities/staff_waiting_room.tres' remapped 'res://data/facilities/staff_waiting_room.tres' at thread -1 +Loading resource: res://data/facilities/standard_room.tres remapped: res://data/facilities/standard_room.tres +Completed load for: 'res://data/facilities/standard_room.tres' remapped 'res://data/facilities/standard_room.tres' at thread -1 +Loading resource: res://data/facilities/tavern.tres remapped: res://data/facilities/tavern.tres +Completed load for: 'res://data/facilities/tavern.tres' remapped 'res://data/facilities/tavern.tres' at thread -1 +Loading resource: res://data/facilities/warehouse.tres remapped: res://data/facilities/warehouse.tres +Completed load for: 'res://data/facilities/warehouse.tres' remapped 'res://data/facilities/warehouse.tres' at thread -1 +NATIVE_ADAPTER_LIBRARY_REGISTERED +Parent reconstruction boundaries: 93 checks, 0 failures diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/071-outer-owned-finally.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/071-outer-owned-finally.json new file mode 100644 index 0000000..04d63de --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/071-outer-owned-finally.json @@ -0,0 +1,39 @@ +{ + "actual_captured_pids": [ + 48803 + ], + "cleanup": [ + { + "pid": 48803, + "cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "outer_cleanup_errors": [], + "engine_ended": true, + "outer_maximum_helper_invocations": 3, + "helper_maximum_waits": 3, + "per_wait_timeout_seconds": 5, + "foreign_process_or_group_signals": 0 + } + ], + "adapter_exception": null, + "all_captured_ended": true, + "outer_cleanup_errors": [], + "foreign_process_or_group_signals": 0, + "all_cleanup_before_outer_receipt": true +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/072-process.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/072-process.json new file mode 100644 index 0000000..5c8700c --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/072-process.json @@ -0,0 +1,140 @@ +{ + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents/engine-native.log" + ], + "pid": 48803, + "started_utc": "2026-10-12T04:31:32.755887+00:00", + "ended_utc": "2026-10-12T04:31:34.536852+00:00", + "wall_seconds": 1.7799485830000004, + "exit_code": 0, + "helper_exit_code": 0, + "timed_out": false, + "stdout_sha256": "829ba8e177a70ab087c018ee4d2e80d352efa6a4efc99cdc0ecc7669f7be64a0", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "error_lines": [], + "owned_popen_ended": true, + "old_helper_engine_ended": true, + "start_receipt_written": true, + "end_receipt_written": true, + "lifecycle_error": null, + "old_helper_lifecycle_error": null, + "actual_start_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 48803, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents/engine-native.log" + ], + "monotonic_ns": 2464118916, + "pid": 48803, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents/engine-native.log" + ], + "started_utc": "2026-10-12T04:31:32.755887+00:00", + "current_process_identity": { + "pid": 48803, + "ppid": 48787, + "pgid": 48803, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" + }, + "actual_end_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 48803, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents/engine-native.log" + ], + "monotonic_ns": 4237877250, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 48803, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents/engine-native.log" + ], + "ended_utc": "2026-10-12T04:31:34.535206+00:00", + "signal_scope": "tracked Popen child only; no external group signal" + }, + "strict_native_diagnostics": { + "errors": [], + "banner_count": 1, + "known_unicode_diagnostic_count": 0, + "unrecognized_unicode_diagnostic_count": 0, + "exit_leak_diagnostic_lines": [] + }, + "external_process_or_group_signals": 0, + "owned_child_process_helper_sha256": "c007e712c281573254faa1233c2ac92e100ab87393256a6dc096b35283e43037", + "adapter_owned_cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "adapter_error": null, + "old_helper_bytes_preserved": true, + "helper_wait_None_maps_to_actual_timeout_seconds": 5, + "explicit_helper_wait_timeouts_preserved": true, + "additional_cleanup_wait_timeout_seconds": 5, + "additional_cleanup_max_attempts": 3 +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/073-started.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/073-started.json new file mode 100644 index 0000000..b0f1d2e --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/073-started.json @@ -0,0 +1,40 @@ +{ + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 48803, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents/engine-native.log" + ], + "monotonic_ns": 2464118916, + "pid": 48803, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents/engine-native.log" + ], + "started_utc": "2026-10-12T04:31:32.755887+00:00", + "current_process_identity": { + "pid": 48803, + "ppid": 48787, + "pgid": 48803, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/074-stderr.log b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/074-stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/075-stdout.log b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/075-stdout.log new file mode 100644 index 0000000..d34b8ec --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/075-stdout.log @@ -0,0 +1,74 @@ +WorkerThreadPool: 10 threads, 3 max low-priority. +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +TextServer: Added interface "Dummy" +TextServer: Added interface "ICU / HarfBuzz / Graphite (Built-in)" +SDL: Init OK! +Using "default" pen tablet driver... + +TextServer: Primary interface set to: "ICU / HarfBuzz / Graphite (Built-in)". +CORE API HASH: 2004498165 +EDITOR API HASH: 1696660745 +Loading resource: /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd remapped: /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd +Completed load for: '/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd' remapped '/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd' at thread -1 +SceneTreeFTI: traversal method DEFAULT +Loading resource: res://autoload/event_bus.gd remapped: res://autoload/event_bus.gd +Completed load for: 'res://autoload/event_bus.gd' remapped 'res://autoload/event_bus.gd' at thread -1 +Loading resource: res://autoload/game_clock.gd remapped: res://autoload/game_clock.gd +Completed load for: 'res://autoload/game_clock.gd' remapped 'res://autoload/game_clock.gd' at thread -1 +Loading resource: res://autoload/game_state.gd remapped: res://autoload/game_state.gd +Completed load for: 'res://autoload/game_state.gd' remapped 'res://autoload/game_state.gd' at thread -1 +Loading resource: res://autoload/simulation_runtime.gd remapped: res://autoload/simulation_runtime.gd +Completed load for: 'res://autoload/simulation_runtime.gd' remapped 'res://autoload/simulation_runtime.gd' at thread -1 +Loaded system CA certificates +PACK_PROFILE_GUARD verified=true +Loading resource: res://data/facilities/adult_private_room.tres remapped: res://data/facilities/adult_private_room.tres +Completed load for: 'res://data/facilities/adult_private_room.tres' remapped 'res://data/facilities/adult_private_room.tres' at thread -1 +Loading resource: res://data/facilities/cafeteria.tres remapped: res://data/facilities/cafeteria.tres +Completed load for: 'res://data/facilities/cafeteria.tres' remapped 'res://data/facilities/cafeteria.tres' at thread -1 +Loading resource: res://data/facilities/expansion/chapel.tres remapped: res://data/facilities/expansion/chapel.tres +Completed load for: 'res://data/facilities/expansion/chapel.tres' remapped 'res://data/facilities/expansion/chapel.tres' at thread -1 +Loading resource: res://data/facilities/expansion/cleaning_room.tres remapped: res://data/facilities/expansion/cleaning_room.tres +Completed load for: 'res://data/facilities/expansion/cleaning_room.tres' remapped 'res://data/facilities/expansion/cleaning_room.tres' at thread -1 +Loading resource: res://data/facilities/expansion/premium_room.tres remapped: res://data/facilities/expansion/premium_room.tres +Completed load for: 'res://data/facilities/expansion/premium_room.tres' remapped 'res://data/facilities/expansion/premium_room.tres' at thread -1 +Loading resource: res://data/facilities/expansion/staff_dormitory.tres remapped: res://data/facilities/expansion/staff_dormitory.tres +Completed load for: 'res://data/facilities/expansion/staff_dormitory.tres' remapped 'res://data/facilities/expansion/staff_dormitory.tres' at thread -1 +Loading resource: res://data/facilities/guest_corridor.tres remapped: res://data/facilities/guest_corridor.tres +Completed load for: 'res://data/facilities/guest_corridor.tres' remapped 'res://data/facilities/guest_corridor.tres' at thread -1 +Loading resource: res://data/facilities/guest_elevator.tres remapped: res://data/facilities/guest_elevator.tres +Completed load for: 'res://data/facilities/guest_elevator.tres' remapped 'res://data/facilities/guest_elevator.tres' at thread -1 +Loading resource: res://data/facilities/infrastructure/guest_stairs.tres remapped: res://data/facilities/infrastructure/guest_stairs.tres +Completed load for: 'res://data/facilities/infrastructure/guest_stairs.tres' remapped 'res://data/facilities/infrastructure/guest_stairs.tres' at thread -1 +Loading resource: res://data/facilities/infrastructure/service_stairs.tres remapped: res://data/facilities/infrastructure/service_stairs.tres +Completed load for: 'res://data/facilities/infrastructure/service_stairs.tres' remapped 'res://data/facilities/infrastructure/service_stairs.tres' at thread -1 +Loading resource: res://data/facilities/kitchen.tres remapped: res://data/facilities/kitchen.tres +Completed load for: 'res://data/facilities/kitchen.tres' remapped 'res://data/facilities/kitchen.tres' at thread -1 +Loading resource: res://data/facilities/massage_room.tres remapped: res://data/facilities/massage_room.tres +Completed load for: 'res://data/facilities/massage_room.tres' remapped 'res://data/facilities/massage_room.tres' at thread -1 +Loading resource: res://data/facilities/public_bath.tres remapped: res://data/facilities/public_bath.tres +Completed load for: 'res://data/facilities/public_bath.tres' remapped 'res://data/facilities/public_bath.tres' at thread -1 +Loading resource: res://data/facilities/reception.tres remapped: res://data/facilities/reception.tres +Completed load for: 'res://data/facilities/reception.tres' remapped 'res://data/facilities/reception.tres' at thread -1 +Loading resource: res://data/facilities/rescue/infirmary.tres remapped: res://data/facilities/rescue/infirmary.tres +Completed load for: 'res://data/facilities/rescue/infirmary.tres' remapped 'res://data/facilities/rescue/infirmary.tres' at thread -1 +Loading resource: res://data/facilities/security_station.tres remapped: res://data/facilities/security_station.tres +Completed load for: 'res://data/facilities/security_station.tres' remapped 'res://data/facilities/security_station.tres' at thread -1 +Loading resource: res://data/facilities/service_corridor.tres remapped: res://data/facilities/service_corridor.tres +Completed load for: 'res://data/facilities/service_corridor.tres' remapped 'res://data/facilities/service_corridor.tres' at thread -1 +Loading resource: res://data/facilities/service_elevator.tres remapped: res://data/facilities/service_elevator.tres +Completed load for: 'res://data/facilities/service_elevator.tres' remapped 'res://data/facilities/service_elevator.tres' at thread -1 +Loading resource: res://data/facilities/staff_door.tres remapped: res://data/facilities/staff_door.tres +Completed load for: 'res://data/facilities/staff_door.tres' remapped 'res://data/facilities/staff_door.tres' at thread -1 +Loading resource: res://data/facilities/staff_waiting_room.tres remapped: res://data/facilities/staff_waiting_room.tres +Completed load for: 'res://data/facilities/staff_waiting_room.tres' remapped 'res://data/facilities/staff_waiting_room.tres' at thread -1 +Loading resource: res://data/facilities/standard_room.tres remapped: res://data/facilities/standard_room.tres +Completed load for: 'res://data/facilities/standard_room.tres' remapped 'res://data/facilities/standard_room.tres' at thread -1 +Loading resource: res://data/facilities/tavern.tres remapped: res://data/facilities/tavern.tres +Completed load for: 'res://data/facilities/tavern.tres' remapped 'res://data/facilities/tavern.tres' at thread -1 +Loading resource: res://data/facilities/warehouse.tres remapped: res://data/facilities/warehouse.tres +Completed load for: 'res://data/facilities/warehouse.tres' remapped 'res://data/facilities/warehouse.tres' at thread -1 +NATIVE_ADAPTER_LIBRARY_REGISTERED +Parent reconstruction boundaries: 93 checks, 0 failures +XR: Clearing primary interface +XR: Removed interface "Native mobile" +XR: Removed interface "OpenXR" diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/076-parents-guarded.gd b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/076-parents-guarded.gd new file mode 100644 index 0000000..85add44 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/076-parents-guarded.gd @@ -0,0 +1,15 @@ +extends "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-reconstruction-parent-boundaries-r211.gd" +const Guard := preload("/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-cache-public-mutations-r144/profile_guard.gd") +func _initialize() -> void: + if not Guard.activate(): quit(97); return + super._initialize() +func run() -> void: + var loaded := GDExtensionManager.load_extension("/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/candidate.gdextension") + var available := loaded == GDExtensionManager.LOAD_STATUS_OK and ClassDB.class_exists(&"TheTreeNumericCore") + var probe = ClassDB.instantiate(&"TheTreeNumericCore") if available else null + available = available and probe != null and probe.has_method(&"project_guest_candidates") + probe = null + check(available, "exact native guest projection extension registered before diagnostic") + if not available: quit(96); return + print("NATIVE_ADAPTER_LIBRARY_REGISTERED") + super.run() diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/077-parent-fixtures.varbytes.zst b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/077-parent-fixtures.varbytes.zst new file mode 100644 index 0000000..8bc77b8 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/077-parent-fixtures.varbytes.zst differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/078-report.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/078-report.json new file mode 100644 index 0000000..e4c32fe --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/078-report.json @@ -0,0 +1,23 @@ +{ + "case_count": 6, + "checks": 93, + "failures": [], + "fixtures": { + "bytes": 836, + "codec": "zstd", + "field_deletions": 0, + "file_envelope": false, + "full_bytes_roundtrip": true, + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-measurement/parent-fixtures.varbytes.zst", + "sha256": "89451d49b00bb0e1df4e1c3e11e599148a5406c45eb58d5c24e026250288c470", + "uncompressed_bytes": 10712, + "uncompressed_sha256": "cddf529394d1e800c53c0ef51292ab33946ef2421449f0169f5d7220683687dd" + }, + "limits": [ + "Six synthetic valid or permitted-conversion shapes only. Out-of-range/error-generating malformed inputs and arbitrary reentry remain outside this finite acceptance." + ], + "passed": true, + "performance_accepted": false, + "pid": 48803, + "unit_accepted": false +} \ No newline at end of file diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/079-parents-phase.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/079-parents-phase.json new file mode 100644 index 0000000..3a6081d --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/079-parents-phase.json @@ -0,0 +1,185 @@ +{ + "name": "parents", + "result": { + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents/engine-native.log" + ], + "pid": 48803, + "started_utc": "2026-10-12T04:31:32.755887+00:00", + "ended_utc": "2026-10-12T04:31:34.536852+00:00", + "wall_seconds": 1.7799485830000004, + "exit_code": 0, + "helper_exit_code": 0, + "timed_out": false, + "stdout_sha256": "829ba8e177a70ab087c018ee4d2e80d352efa6a4efc99cdc0ecc7669f7be64a0", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "error_lines": [], + "owned_popen_ended": true, + "old_helper_engine_ended": true, + "start_receipt_written": true, + "end_receipt_written": true, + "lifecycle_error": null, + "old_helper_lifecycle_error": null, + "actual_start_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 48803, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents/engine-native.log" + ], + "monotonic_ns": 2464118916, + "pid": 48803, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents/engine-native.log" + ], + "started_utc": "2026-10-12T04:31:32.755887+00:00", + "current_process_identity": { + "pid": 48803, + "ppid": 48787, + "pgid": 48803, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" + }, + "actual_end_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 48803, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents/engine-native.log" + ], + "monotonic_ns": 4237877250, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 48803, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/parents/engine-native.log" + ], + "ended_utc": "2026-10-12T04:31:34.535206+00:00", + "signal_scope": "tracked Popen child only; no external group signal" + }, + "strict_native_diagnostics": { + "errors": [], + "banner_count": 1, + "known_unicode_diagnostic_count": 0, + "unrecognized_unicode_diagnostic_count": 0, + "exit_leak_diagnostic_lines": [] + }, + "external_process_or_group_signals": 0, + "owned_child_process_helper_sha256": "c007e712c281573254faa1233c2ac92e100ab87393256a6dc096b35283e43037", + "adapter_owned_cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "adapter_error": null, + "old_helper_bytes_preserved": true, + "helper_wait_None_maps_to_actual_timeout_seconds": 5, + "explicit_helper_wait_timeouts_preserved": true, + "additional_cleanup_wait_timeout_seconds": 5, + "additional_cleanup_max_attempts": 3 + }, + "capture": { + "actual_captured_pids": [ + 48803 + ], + "cleanup": [ + { + "pid": 48803, + "cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "outer_cleanup_errors": [], + "engine_ended": true, + "outer_maximum_helper_invocations": 3, + "helper_maximum_waits": 3, + "per_wait_timeout_seconds": 5, + "foreign_process_or_group_signals": 0 + } + ], + "adapter_exception": null, + "all_captured_ended": true, + "outer_cleanup_errors": [], + "foreign_process_or_group_signals": 0, + "all_cleanup_before_outer_receipt": true, + "outer_receipt_written": true, + "outer_receipt_error": null, + "passed": true + } +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/080-parents-profile.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/080-parents-profile.json new file mode 100644 index 0000000..665c491 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/080-parents-profile.json @@ -0,0 +1,20 @@ +{ + "actual_user_data_dir": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-956f195b7d424eb4ad8a0cdc374fc1a9-impact-runtime", + "before": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-956f195b7d424eb4ad8a0cdc374fc1a9-impact-startup", + "conditions": [ + true, + true, + true, + true, + true + ], + "conditions_checked": 5, + "custom_user_dir_name": "TheTree-PCK-tests-956f195b7d424eb4ad8a0cdc374fc1a9-impact-runtime", + "expected_user_data_dir": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-956f195b7d424eb4ad8a0cdc374fc1a9-impact-runtime", + "fresh_before_parent_initialize": true, + "globalized_probe": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-956f195b7d424eb4ad8a0cdc374fc1a9-impact-runtime/guard-probe", + "profile_writes_before_guard": 0, + "project_settings_persisted": false, + "runtime_settings_only": true, + "verified": true +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/081-preexecution-root-verification.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/081-preexecution-root-verification.json.gz new file mode 100644 index 0000000..53c5f62 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/081-preexecution-root-verification.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/082-adapter-owned-cleanup.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/082-adapter-owned-cleanup.json new file mode 100644 index 0000000..f44709a --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/082-adapter-owned-cleanup.json @@ -0,0 +1,18 @@ +{ + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/083-ended.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/083-ended.json new file mode 100644 index 0000000..e81d2ea --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/083-ended.json @@ -0,0 +1,38 @@ +{ + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 48887, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime/engine-native.log" + ], + "monotonic_ns": 20043365916, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 48887, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime/engine-native.log" + ], + "ended_utc": "2026-10-12T04:31:50.340817+00:00", + "signal_scope": "tracked Popen child only; no external group signal" +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/084-engine-native.log.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/084-engine-native.log.gz new file mode 100644 index 0000000..c547cdf Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/084-engine-native.log.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/085-outer-owned-finally.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/085-outer-owned-finally.json new file mode 100644 index 0000000..378df81 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/085-outer-owned-finally.json @@ -0,0 +1,39 @@ +{ + "actual_captured_pids": [ + 48887 + ], + "cleanup": [ + { + "pid": 48887, + "cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "outer_cleanup_errors": [], + "engine_ended": true, + "outer_maximum_helper_invocations": 3, + "helper_maximum_waits": 3, + "per_wait_timeout_seconds": 5, + "foreign_process_or_group_signals": 0 + } + ], + "adapter_exception": null, + "all_captured_ended": true, + "outer_cleanup_errors": [], + "foreign_process_or_group_signals": 0, + "all_cleanup_before_outer_receipt": true +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/086-process.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/086-process.json new file mode 100644 index 0000000..cf38945 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/086-process.json @@ -0,0 +1,140 @@ +{ + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime/engine-native.log" + ], + "pid": 48887, + "started_utc": "2026-10-12T04:31:45.343072+00:00", + "ended_utc": "2026-10-12T04:31:50.344666+00:00", + "wall_seconds": 5.001550541, + "exit_code": 0, + "helper_exit_code": 0, + "timed_out": false, + "stdout_sha256": "15bcd2516627e27cd4a8fc9d12d02dac864c0a6998e6d1298c529161b6724a5d", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "error_lines": [], + "owned_popen_ended": true, + "old_helper_engine_ended": true, + "start_receipt_written": true, + "end_receipt_written": true, + "lifecycle_error": null, + "old_helper_lifecycle_error": null, + "actual_start_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 48887, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime/engine-native.log" + ], + "monotonic_ns": 15049963083, + "pid": 48887, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime/engine-native.log" + ], + "started_utc": "2026-10-12T04:31:45.343072+00:00", + "current_process_identity": { + "pid": 48887, + "ppid": 48787, + "pgid": 48887, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" + }, + "actual_end_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 48887, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime/engine-native.log" + ], + "monotonic_ns": 20043365916, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 48887, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime/engine-native.log" + ], + "ended_utc": "2026-10-12T04:31:50.340817+00:00", + "signal_scope": "tracked Popen child only; no external group signal" + }, + "strict_native_diagnostics": { + "errors": [], + "banner_count": 1, + "known_unicode_diagnostic_count": 0, + "unrecognized_unicode_diagnostic_count": 0, + "exit_leak_diagnostic_lines": [] + }, + "external_process_or_group_signals": 0, + "owned_child_process_helper_sha256": "c007e712c281573254faa1233c2ac92e100ab87393256a6dc096b35283e43037", + "adapter_owned_cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "adapter_error": null, + "old_helper_bytes_preserved": true, + "helper_wait_None_maps_to_actual_timeout_seconds": 5, + "explicit_helper_wait_timeouts_preserved": true, + "additional_cleanup_wait_timeout_seconds": 5, + "additional_cleanup_max_attempts": 3 +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/087-started.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/087-started.json new file mode 100644 index 0000000..3845e06 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/087-started.json @@ -0,0 +1,40 @@ +{ + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 48887, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime/engine-native.log" + ], + "monotonic_ns": 15049963083, + "pid": 48887, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime/engine-native.log" + ], + "started_utc": "2026-10-12T04:31:45.343072+00:00", + "current_process_identity": { + "pid": 48887, + "ppid": 48787, + "pgid": 48887, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/088-stderr.log b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/088-stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/089-stdout.log.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/089-stdout.log.gz new file mode 100644 index 0000000..ede923c Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/089-stdout.log.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/090-runtime-guarded.gd b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/090-runtime-guarded.gd new file mode 100644 index 0000000..7be9b7e --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/090-runtime-guarded.gd @@ -0,0 +1,15 @@ +extends "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-guest-pipeline-runtime-r190.gd" +const Guard := preload("/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-cache-public-mutations-r144/profile_guard.gd") +func _initialize() -> void: + if not Guard.activate(): quit(97); return + super._initialize() +func run() -> void: + var loaded := GDExtensionManager.load_extension("/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/candidate.gdextension") + var available := loaded == GDExtensionManager.LOAD_STATUS_OK and ClassDB.class_exists(&"TheTreeNumericCore") + var probe = ClassDB.instantiate(&"TheTreeNumericCore") if available else null + available = available and probe != null and probe.has_method(&"project_guest_candidates") + probe = null + check(available, "exact native guest projection extension registered before diagnostic") + if not available: quit(96); return + print("NATIVE_ADAPTER_LIBRARY_REGISTERED") + super.run() diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/091-after-evaluation.varbytes.zst b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/091-after-evaluation.varbytes.zst new file mode 100644 index 0000000..407af73 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/091-after-evaluation.varbytes.zst differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/092-candidates.varbytes.zst b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/092-candidates.varbytes.zst new file mode 100644 index 0000000..671b40d Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/092-candidates.varbytes.zst differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/093-report.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/093-report.json new file mode 100644 index 0000000..e1c83ca --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/093-report.json @@ -0,0 +1,44 @@ +{ + "Windows_accepted": false, + "after_evaluation": { + "bytes": 240032, + "codec": "zstd", + "field_deletions": 0, + "file_envelope": false, + "full_bytes_roundtrip": true, + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime-measurement/after-evaluation.varbytes.zst", + "sha256": "1a88f7ed27d1d32102c6fe3a9533221d2565191712ed15b631190479d1d41505", + "uncompressed_bytes": 11411840, + "uncompressed_sha256": "c0830afde6ca25d8d36b1d61c4dc32f5161eba93a0e76646724645bd61554606" + }, + "batch_released": true, + "candidate_adopted": false, + "candidate_count": 150, + "candidates": { + "bytes": 1498, + "codec": "zstd", + "field_deletions": 0, + "file_envelope": false, + "full_bytes_roundtrip": true, + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime-measurement/candidates.varbytes.zst", + "sha256": "d636067f11f70a82ae7d928d2463bc3c2a4107b1d63d1baaed065c8ef93b87d2", + "uncompressed_bytes": 105808, + "uncompressed_sha256": "3f94a15cb2c508660a2cbdb2558f93be7a1ce50bd6803a0861015d99a6a86a02" + }, + "checks": 23, + "failures": [], + "guest_id": "diag.guest.101", + "limits": [ + "One selected guest only, no decide or clock progression. No whole647 query reason attribution.", + "Inclusive timers overlap and include instrumentation overhead; do not add them or treat them as production performance budgets.", + "r38 isolated indexed-edges nearest-access batch; empty derived cache after restore, no Main/UI/OS/x3 acceptance." + ], + "normal_OS_x3_accepted": false, + "passed": true, + "performance_budget_accepted": false, + "pid": 48887, + "point_query_cache_misses": 184, + "projection_us": 47768, + "start_cell": "(-6, -2, 0)", + "unit_accepted": false +} \ No newline at end of file diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/094-runtime-phase.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/094-runtime-phase.json new file mode 100644 index 0000000..d2a25f3 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/094-runtime-phase.json @@ -0,0 +1,185 @@ +{ + "name": "runtime", + "result": { + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime/engine-native.log" + ], + "pid": 48887, + "started_utc": "2026-10-12T04:31:45.343072+00:00", + "ended_utc": "2026-10-12T04:31:50.344666+00:00", + "wall_seconds": 5.001550541, + "exit_code": 0, + "helper_exit_code": 0, + "timed_out": false, + "stdout_sha256": "15bcd2516627e27cd4a8fc9d12d02dac864c0a6998e6d1298c529161b6724a5d", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "error_lines": [], + "owned_popen_ended": true, + "old_helper_engine_ended": true, + "start_receipt_written": true, + "end_receipt_written": true, + "lifecycle_error": null, + "old_helper_lifecycle_error": null, + "actual_start_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 48887, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime/engine-native.log" + ], + "monotonic_ns": 15049963083, + "pid": 48887, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime/engine-native.log" + ], + "started_utc": "2026-10-12T04:31:45.343072+00:00", + "current_process_identity": { + "pid": 48887, + "ppid": 48787, + "pgid": 48887, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" + }, + "actual_end_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 48887, + "owner_pid": 48787, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime/engine-native.log" + ], + "monotonic_ns": 20043365916, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 48887, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/runtime/engine-native.log" + ], + "ended_utc": "2026-10-12T04:31:50.340817+00:00", + "signal_scope": "tracked Popen child only; no external group signal" + }, + "strict_native_diagnostics": { + "errors": [], + "banner_count": 1, + "known_unicode_diagnostic_count": 0, + "unrecognized_unicode_diagnostic_count": 0, + "exit_leak_diagnostic_lines": [] + }, + "external_process_or_group_signals": 0, + "owned_child_process_helper_sha256": "c007e712c281573254faa1233c2ac92e100ab87393256a6dc096b35283e43037", + "adapter_owned_cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "adapter_error": null, + "old_helper_bytes_preserved": true, + "helper_wait_None_maps_to_actual_timeout_seconds": 5, + "explicit_helper_wait_timeouts_preserved": true, + "additional_cleanup_wait_timeout_seconds": 5, + "additional_cleanup_max_attempts": 3 + }, + "capture": { + "actual_captured_pids": [ + 48887 + ], + "cleanup": [ + { + "pid": 48887, + "cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "outer_cleanup_errors": [], + "engine_ended": true, + "outer_maximum_helper_invocations": 3, + "helper_maximum_waits": 3, + "per_wait_timeout_seconds": 5, + "foreign_process_or_group_signals": 0 + } + ], + "adapter_exception": null, + "all_captured_ended": true, + "outer_cleanup_errors": [], + "foreign_process_or_group_signals": 0, + "all_cleanup_before_outer_receipt": true, + "outer_receipt_written": true, + "outer_receipt_error": null, + "passed": true + } +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/095-runtime-profile.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/095-runtime-profile.json new file mode 100644 index 0000000..96ac6a2 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/095-runtime-profile.json @@ -0,0 +1,20 @@ +{ + "actual_user_data_dir": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-82cfaa9f87624ba092016ae5ff823103-impact-runtime", + "before": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-82cfaa9f87624ba092016ae5ff823103-impact-startup", + "conditions": [ + true, + true, + true, + true, + true + ], + "conditions_checked": 5, + "custom_user_dir_name": "TheTree-PCK-tests-82cfaa9f87624ba092016ae5ff823103-impact-runtime", + "expected_user_data_dir": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-82cfaa9f87624ba092016ae5ff823103-impact-runtime", + "fresh_before_parent_initialize": true, + "globalized_probe": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-82cfaa9f87624ba092016ae5ff823103-impact-runtime/guard-probe", + "profile_writes_before_guard": 0, + "project_settings_persisted": false, + "runtime_settings_only": true, + "verified": true +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/096-p23-02-native-input-copy-local-r335.py b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/096-p23-02-native-input-copy-local-r335.py new file mode 100644 index 0000000..74427a3 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/096-p23-02-native-input-copy-local-r335.py @@ -0,0 +1,80 @@ +# coding: utf-8 +"""One finite cold native guest projection QA against original Runtime golden; no full regression.""" +from pathlib import Path +import hashlib, importlib.util, json, os, shutil, subprocess, sys, uuid +sys.dont_write_bytecode=True +R=Path(__file__).resolve().parents[2];A=R/'artifacts/original-completion-2026-10-02' +O=A/'p23-02-native-input-copy-local-r335';D=R/'docs/plans/original-completion-2026-10-02' +NAMES=['IMPLEMENTATION_PLAN.md','PROGRESS_INTEGRATION.md','work_packages.json','progress_snapshot.json'] +def mod(name,path): + s=importlib.util.spec_from_file_location(name,path);m=importlib.util.module_from_spec(s);s.loader.exec_module(m);return m +def unpack(ref): + raw=subprocess.run(['/opt/homebrew/bin/zstd','-d','-q','-c',ref['path']],capture_output=True,check=True,timeout=10).stdout + assert len(raw)==ref['uncompressed_bytes'] and hashlib.sha256(raw).hexdigest()==ref['uncompressed_sha256'] + return raw +def main(): + r=mod('impact_runner',R/'tools/run_all_tests.py');outer=mod('impact_owned',r.SUPPORT/'owned_outer.py');plan=r.read(O/'input.json') + assert not (O/'execution.json').exists() + fixed=plan['pins'];source=r.source_refs(R);player=r.default_player(R);docs={n:r.sha(D/n) for n in NAMES} + assert source==plan['source_before'] and player==plan['default_before'] and docs==plan['doc4_before'] + stage=Path(plan['stage']);parent=Path(plan['parent']);public=(stage/'project.godot').read_bytes() + def protect(): + assert r.source_refs(R)==source and r.default_player(R)==player and {n:r.sha(D/n) for n in NAMES}==docs + assert r.inventory(parent,stage=True)==plan['expected_stage'] and r.inventory(stage,stage=True)==plan['expected_stage'] + assert r.inventory(r.SUPPORT)==plan['support_inventory'] + for key,q in fixed.items(): + p=Path(q['path']);assert p.stat().st_size==q['bytes'] and r.sha(p)==q['sha256'],key + protect() + review=r.read(Path(fixed['host_review']['path'])) + assert not review['blockers'] and review['host_build_accepted'] + pre=r.read(A/'p23-02-native-input-copy-local-preexecution-independent-review-r335.json') + assert pre['execution_allowed'] and not pre['blockers'] + for group in ('evidence_sha256','canonical_doc4_context_pins'): + for q in pre[group].values(): + p=Path(q['path']);assert p.stat().st_size==q['bytes'] and r.sha(p)==q['sha256'] + assert r.read(O/'preexecution-root-verification.json')['passed'] + phases=[];samples=[];error=None;cleanup=[];cleanup_errors=[] + try: + for spec in plan['specs']: + name=spec['name'];protect() + assert sum(p.stat().st_size for p in O.rglob('*') if p.is_file())<=16*1048576 + assert not outer.native.helper['live_engines']() and shutil.disk_usage(A).free >= plan['capacity_floor_bytes'] + output=O/(name+'-measurement');output.mkdir();ident=uuid.uuid4().hex + startup='TheTree-PCK-tests-'+ident+'-impact-startup';profile='TheTree-PCK-tests-'+ident+'-impact-runtime' + assert not r.profile_path(startup).exists() and not r.profile_path(profile).exists() + env=r.fresh_environment(os.environ) + env.update(THE_TREE_PACK_PROFILE_NAME=profile,THE_TREE_PACK_PROFILE_EXPECTED=str(r.profile_path(profile)),THE_TREE_PACK_PROFILE_REPORT=str(O/(name+'-profile.json')),THE_TREE_RUNTIME_MONITOR_OUTPUT=str(output),THE_TREE_REPLAY_SNAPSHOT=fixed['fixture']['path'],THE_TREE_CANDIDATE_ORACLE=fixed['oracle']['path'],THE_TREE_PAIRED_CANDIDATE='r333-library334',THE_TREE_PAIRED_SAMPLE=name) + (stage/'project.godot').write_bytes(r.private_project(public,startup));phase=O/name + argv=[fixed['engine']['path'],'--headless','--path',str(stage),'--script',fixed['starter_'+name]['path'],'--verbose','--log-file',str(phase/'engine-native.log')] + result,capture=outer.run_phase(argv,phase,90,env,now_fn=r.now,dump_fn=r.write,sha_fn=r.sha,live_engines_fn=outer.native.helper['live_engines']) + row=dict(name=name,result=result,capture=capture);phases.append(row);r.write(O/(name+'-phase.json'),row) + report_path=output/'report.json';report=r.read(report_path) if report_path.exists() else None + if report is not None:samples.append(dict(name=name,report=report)) + assert result is not None and result['exit_code']==0 and not result['error_lines'] and not result['timed_out'] and capture['passed'] + logs=''.join((phase/n).read_text() for n in ['stdout.log','stderr.log','engine-native.log']) + assert 'Orphan StringName:' not in logs and 'unclaimed string names' not in logs + assert report and report['passed'] and not report['failures'] and report['pid']==result['pid'] and report['checks']==spec['expected_checks'] + assert (phase/'stdout.log').read_text().count(spec['label']+'%d checks, 0 failures'%report['checks'])==1 + assert (phase/'stdout.log').read_text().count('NATIVE_ADAPTER_LIBRARY_REGISTERED')==1 + r.profile_gate(r.profile_path(profile),O/(name+'-profile.json'),profile) + if name=='runtime': + golden=r.read(Path(fixed['golden_runtime']['path'])) + for field in ['candidates','after_evaluation']:assert unpack(report[field])==unpack(golden[field]),field+' full typed golden' + assert report['candidate_count']==150 and report['batch_released'] + else: + assert report['case_count']==spec['case_count'] + unpack(report['fixtures']) + assert sum(p.stat().st_size for p in O.rglob('*') if p.is_file())<=16*1048576 + (stage/'project.godot').write_bytes(public);protect() + except BaseException as caught:error=type(caught).__name__+': '+str(caught) + finally: + cleanup,cleanup_errors=outer.finish_captured(outer.OWNED) + if all(q['engine_ended'] is True for q in cleanup):(stage/'project.godot').write_bytes(public) + else:cleanup_errors.append('Project restoration refused while owned child remains live') + guard_errors=[] + try:protect() + except BaseException as caught:guard_errors.append(type(caught).__name__+': '+str(caught)) + passed=error is None and not guard_errors and not cleanup_errors and len(phases)==4 and len(samples)==4 + r.write(O/'execution.json',dict(passed=passed,error=error,guard_errors=guard_errors,phases=phases,samples=samples,cleanup=cleanup,cleanup_errors=cleanup_errors,input_source_default_doc4_preserved=not guard_errors,candidate_adopted=False,unit_accepted=False,performance_accepted=False,normal_OS_accepted=False,Windows_accepted=False,limitations=['Four finite local QA engines for r333/library334: six parent shapes,19 nearest paths,4 input-key projection shapes and150 Runtime candidates/full evaluation state. Not invalid-index errors, arbitrary reentry, whole647, performance, full172, OS, Windows or adoption.'])) + print(json.dumps(dict(passed=passed,error=error,guard_errors=guard_errors)),flush=True);return 0 if passed else 1 +if __name__=='__main__':raise SystemExit(main()) diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/097-p23-02-native-input-copy-static-independent-review-r333.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/097-p23-02-native-input-copy-static-independent-review-r333.json.gz new file mode 100644 index 0000000..8dd2b35 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/097-p23-02-native-input-copy-static-independent-review-r333.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/098-p23-02-native-input-copy-static-root-verification-r333.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/098-p23-02-native-input-copy-static-root-verification-r333.json new file mode 100644 index 0000000..2fbf786 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/098-p23-02-native-input-copy-static-root-verification-r333.json @@ -0,0 +1,128 @@ +{ + "passed": true, + "review_sha256": "ca9a5baf1a1a5ff249f7ccfc9f135816312bc56e578405750c6f9e0715d8f267", + "verified_entries": [ + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/input.json", + "bytes": 3862, + "sha256": "665fbb574cce4cf1af96bfc5cbdcf9efb554a42be8bd531a4447068dbb9185ee" + }, + { + "path": "/private/tmp/thetree-prepare-input-copy-r333.py", + "bytes": 5683, + "sha256": "fb25296b75b080fb3770638775bba59ecc4e544287d3698266d9eb232755a2a8" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-work-contract-r332.json", + "bytes": 2058, + "sha256": "33a6555addd3471f2f00f35659e3f4e69f7fa26598755f8af6b0deabbf8932c5" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-hot-loop-candidate-r326/input.json", + "bytes": 3185, + "sha256": "27141ccb37a741cc468bf57cf6e5da2250b729a2fa21bbda5fa1b7f15df7b254" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-hot-loop-static-independent-review-r326.json", + "bytes": 12687, + "sha256": "717f8aa9a1b12425b79f7dbbb81b4e0526de32ddd836114525b53d4fd7bc05e1" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-hot-loop-whole-actual-independent-review-r330.json", + "bytes": 43971, + "sha256": "ed7ddfa923ccd23128e79e9ccdbc392ab3d44ef16a6c42e8f1f5b3eb94a71ef2" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/scripts/guest_service.gd", + "bytes": 62505, + "sha256": "77ce52ebeed6a89f3e397de01572b17ea3e3cb246f7daca9145a1a192389969e" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-hot-loop-candidate-r326/scripts/guest_service.gd", + "bytes": 62505, + "sha256": "77ce52ebeed6a89f3e397de01572b17ea3e3cb246f7daca9145a1a192389969e" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/scripts/simulation_runtime.gd", + "bytes": 612068, + "sha256": "7eb24adbf91fe53cde14954dda12abd5efb05130de7d356d8df281ee99065e86" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-hot-loop-candidate-r326/scripts/simulation_runtime.gd", + "bytes": 612068, + "sha256": "7eb24adbf91fe53cde14954dda12abd5efb05130de7d356d8df281ee99065e86" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source/guest_candidate_batch.inc", + "bytes": 28222, + "sha256": "3623a7ca03b96118c927662fc5a95c1f73e20251d5ef4b04ec519603c3c05ba9" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-hot-loop-candidate-r326/source/guest_candidate_batch.inc", + "bytes": 28222, + "sha256": "3623a7ca03b96118c927662fc5a95c1f73e20251d5ef4b04ec519603c3c05ba9" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source/tree_core.hpp", + "bytes": 3467, + "sha256": "5f67d85bfc91d5c7830aabd8089f4bca05883045d671d4e683d7c532cf3a34a1" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-hot-loop-candidate-r326/source/tree_core.hpp", + "bytes": 3467, + "sha256": "5f67d85bfc91d5c7830aabd8089f4bca05883045d671d4e683d7c532cf3a34a1" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source/tree_numeric_core.cpp", + "bytes": 58156, + "sha256": "5957fab6cdef5f44ef69cbfaa1685c5eba2aefcab7d6fb7b8bf383e54386aa01" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-hot-loop-candidate-r326/source/tree_numeric_core.cpp", + "bytes": 56138, + "sha256": "a2434ef2fbc9624aa3b62746cebde2cacdce78712d4d866774df54fbd291bee3" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage/scripts/world/path_service.gd", + "bytes": 132925, + "sha256": "6b7f4e989ea9b09495f814d8ecb294028d10794005966414bf52640e122b0d17" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage/autoload/simulation_runtime.gd", + "bytes": 612068, + "sha256": "7eb24adbf91fe53cde14954dda12abd5efb05130de7d356d8df281ee99065e86" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/source-before-allocation-guard.cpp", + "bytes": 57762, + "sha256": "d948b9c2033fd9f2ad8b85a1d5ed51fd431eb78b68b3634dc020df104712ad11" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-candidate-r333/input-before-allocation-guard.json", + "bytes": 3183, + "sha256": "5004a1b7d0d250a4e32107e88673c296df9a9291ba74424d36be61a7bfa62117" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/docs/plans/original-completion-2026-10-02/IMPLEMENTATION_PLAN.md", + "bytes": 491120, + "sha256": "1a3a063f451581a57842cfed1a269ae5696381577ff0dec48c64512030930816" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/docs/plans/original-completion-2026-10-02/PROGRESS_INTEGRATION.md", + "bytes": 409184, + "sha256": "80d0d2718a35ddbfa79cae504cabec017ac034fd31c8e1deafaa651b0dcdd7f9" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/docs/plans/original-completion-2026-10-02/work_packages.json", + "bytes": 1203820, + "sha256": "285cabc1156ec828b4621be8af88494ac4e386e9312db18b8dcf42dfa7249311" + }, + { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/docs/plans/original-completion-2026-10-02/progress_snapshot.json", + "bytes": 590336, + "sha256": "183a35f79c6b251b115e46f517843cce21b78abe35d0803f8f0773b920b280ed" + } + ], + "unit_accepted": false, + "performance_accepted": false +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/099-p23-02-native-input-copy-whole-actual-independent-review-r336.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/099-p23-02-native-input-copy-whole-actual-independent-review-r336.json.gz new file mode 100644 index 0000000..614f2da Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/099-p23-02-native-input-copy-whole-actual-independent-review-r336.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/100-p23-02-native-input-copy-whole-preexecution-independent-review-r336.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/100-p23-02-native-input-copy-whole-preexecution-independent-review-r336.json.gz new file mode 100644 index 0000000..8c75069 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/100-p23-02-native-input-copy-whole-preexecution-independent-review-r336.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/101-actual-root-verification.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/101-actual-root-verification.json.gz new file mode 100644 index 0000000..2c73b54 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/101-actual-root-verification.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/102-adapter-owned-cleanup.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/102-adapter-owned-cleanup.json new file mode 100644 index 0000000..f44709a --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/102-adapter-owned-cleanup.json @@ -0,0 +1,18 @@ +{ + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/103-ended.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/103-ended.json new file mode 100644 index 0000000..8a456bd --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/103-ended.json @@ -0,0 +1,38 @@ +{ + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 51019, + "owner_pid": 50976, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline/engine-native.log" + ], + "monotonic_ns": 12299549500, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 51019, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline/engine-native.log" + ], + "ended_utc": "2026-10-12T04:38:06.061195+00:00", + "signal_scope": "tracked Popen child only; no external group signal" +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/104-engine-native.log.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/104-engine-native.log.gz new file mode 100644 index 0000000..574d2d9 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/104-engine-native.log.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/105-outer-owned-finally.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/105-outer-owned-finally.json new file mode 100644 index 0000000..c33baed --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/105-outer-owned-finally.json @@ -0,0 +1,39 @@ +{ + "actual_captured_pids": [ + 51019 + ], + "cleanup": [ + { + "pid": 51019, + "cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "outer_cleanup_errors": [], + "engine_ended": true, + "outer_maximum_helper_invocations": 3, + "helper_maximum_waits": 3, + "per_wait_timeout_seconds": 5, + "foreign_process_or_group_signals": 0 + } + ], + "adapter_exception": null, + "all_captured_ended": true, + "outer_cleanup_errors": [], + "foreign_process_or_group_signals": 0, + "all_cleanup_before_outer_receipt": true +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/106-process.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/106-process.json new file mode 100644 index 0000000..6ee64df --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/106-process.json @@ -0,0 +1,140 @@ +{ + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline/engine-native.log" + ], + "pid": 51019, + "started_utc": "2026-10-12T04:38:00.573702+00:00", + "ended_utc": "2026-10-12T04:38:06.063402+00:00", + "wall_seconds": 5.489648583, + "exit_code": 0, + "helper_exit_code": 0, + "timed_out": false, + "stdout_sha256": "0ce40a79667f756f4d6c1d12676943a9829595a5e03501bfdce4de944223492f", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "error_lines": [], + "owned_popen_ended": true, + "old_helper_engine_ended": true, + "start_receipt_written": true, + "end_receipt_written": true, + "lifecycle_error": null, + "old_helper_lifecycle_error": null, + "actual_start_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 51019, + "owner_pid": 50976, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline/engine-native.log" + ], + "monotonic_ns": 6816680083, + "pid": 51019, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline/engine-native.log" + ], + "started_utc": "2026-10-12T04:38:00.573702+00:00", + "current_process_identity": { + "pid": 51019, + "ppid": 50976, + "pgid": 51019, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" + }, + "actual_end_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 51019, + "owner_pid": 50976, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline/engine-native.log" + ], + "monotonic_ns": 12299549500, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 51019, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline/engine-native.log" + ], + "ended_utc": "2026-10-12T04:38:06.061195+00:00", + "signal_scope": "tracked Popen child only; no external group signal" + }, + "strict_native_diagnostics": { + "errors": [], + "banner_count": 1, + "known_unicode_diagnostic_count": 0, + "unrecognized_unicode_diagnostic_count": 0, + "exit_leak_diagnostic_lines": [] + }, + "external_process_or_group_signals": 0, + "owned_child_process_helper_sha256": "c007e712c281573254faa1233c2ac92e100ab87393256a6dc096b35283e43037", + "adapter_owned_cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "adapter_error": null, + "old_helper_bytes_preserved": true, + "helper_wait_None_maps_to_actual_timeout_seconds": 5, + "explicit_helper_wait_timeouts_preserved": true, + "additional_cleanup_wait_timeout_seconds": 5, + "additional_cleanup_max_attempts": 3 +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/107-started.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/107-started.json new file mode 100644 index 0000000..0f86435 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/107-started.json @@ -0,0 +1,40 @@ +{ + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 51019, + "owner_pid": 50976, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline/engine-native.log" + ], + "monotonic_ns": 6816680083, + "pid": 51019, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline/engine-native.log" + ], + "started_utc": "2026-10-12T04:38:00.573702+00:00", + "current_process_identity": { + "pid": 51019, + "ppid": 50976, + "pgid": 51019, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/108-stderr.log b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/108-stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/109-stdout.log.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/109-stdout.log.gz new file mode 100644 index 0000000..41587f5 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/109-stdout.log.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/110-baseline-guarded.gd b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/110-baseline-guarded.gd new file mode 100644 index 0000000..9898cb8 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/110-baseline-guarded.gd @@ -0,0 +1,16 @@ +extends "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/whole.gd" +const Guard := preload("/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-cache-public-mutations-r144/profile_guard.gd") +func _initialize() -> void: + if not Guard.activate(): quit(97); return + super._initialize() +func run() -> void: + var loaded := GDExtensionManager.load_extension("/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-hot-loop-local-r329/candidate.gdextension") + var exact_api := false + if loaded == GDExtensionManager.LOAD_STATUS_OK and ClassDB.class_exists(&"TheTreeNumericCore"): + var probe: Variant = ClassDB.instantiate(&"TheTreeNumericCore") + exact_api = probe != null and probe.has_method(&"guest_tree_edge_rows") == true + probe = null + check(loaded == GDExtensionManager.LOAD_STATUS_OK and ClassDB.class_exists(&"TheTreeNumericCore") and exact_api, "exact native extension registered before diagnostic") + if loaded != GDExtensionManager.LOAD_STATUS_OK or not ClassDB.class_exists(&"TheTreeNumericCore") or not exact_api: quit(96); return + print("NATIVE_ADAPTER_LIBRARY_REGISTERED") + super.run() diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/111-after647.varbytes.zst b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/111-after647.varbytes.zst new file mode 100644 index 0000000..84c74b4 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/111-after647.varbytes.zst differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/112-report.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/112-report.json new file mode 100644 index 0000000..c2aeff2 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/112-report.json @@ -0,0 +1,32 @@ +{ + "Windows_accepted": false, + "after647": { + "bytes": 246720, + "codec": "zstd", + "field_deletions": 0, + "file_envelope": false, + "full_bytes_roundtrip": true, + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline-measurement/after647.varbytes.zst", + "sha256": "684ba40e9f649b7dd4bfc620185d7cd18bae3111c3b4038e48aaad5a9168d880", + "uncompressed_bytes": 11487732, + "uncompressed_sha256": "9df3c1b6f65dfd8be944cd5cab8c631f7533530dfef3820d9fa5d74a5b1ac30f" + }, + "cache_hits": 0, + "cache_misses": 9311, + "candidate": "baseline", + "candidate_adopted": false, + "checks": 15, + "failures": [], + "limits": [ + "One sample from an adjacent baseline hot-loop r326/library327 versus input-copy r333/library334 pair; fixed cold restored646. Only exploratory pair observation, no stable speedup, percentile or budget acceptance.", + "No Main, rendering, OS input or realtime x3. Timed interval contains builtin production callbacks; snapshot verification and compression occur after timing." + ], + "manual_tick_us": 1037100, + "normal_OS_accepted": false, + "passed": true, + "performance_budget_accepted": false, + "pid": 51019, + "plan_id": "P23-02", + "sample": "baseline", + "unit_accepted": false +} \ No newline at end of file diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/113-baseline-phase.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/113-baseline-phase.json new file mode 100644 index 0000000..14f7fe7 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/113-baseline-phase.json @@ -0,0 +1,185 @@ +{ + "mode": "baseline", + "result": { + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline/engine-native.log" + ], + "pid": 51019, + "started_utc": "2026-10-12T04:38:00.573702+00:00", + "ended_utc": "2026-10-12T04:38:06.063402+00:00", + "wall_seconds": 5.489648583, + "exit_code": 0, + "helper_exit_code": 0, + "timed_out": false, + "stdout_sha256": "0ce40a79667f756f4d6c1d12676943a9829595a5e03501bfdce4de944223492f", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "error_lines": [], + "owned_popen_ended": true, + "old_helper_engine_ended": true, + "start_receipt_written": true, + "end_receipt_written": true, + "lifecycle_error": null, + "old_helper_lifecycle_error": null, + "actual_start_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 51019, + "owner_pid": 50976, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline/engine-native.log" + ], + "monotonic_ns": 6816680083, + "pid": 51019, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline/engine-native.log" + ], + "started_utc": "2026-10-12T04:38:00.573702+00:00", + "current_process_identity": { + "pid": 51019, + "ppid": 50976, + "pgid": 51019, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" + }, + "actual_end_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 51019, + "owner_pid": 50976, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline/engine-native.log" + ], + "monotonic_ns": 12299549500, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 51019, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/baseline/engine-native.log" + ], + "ended_utc": "2026-10-12T04:38:06.061195+00:00", + "signal_scope": "tracked Popen child only; no external group signal" + }, + "strict_native_diagnostics": { + "errors": [], + "banner_count": 1, + "known_unicode_diagnostic_count": 0, + "unrecognized_unicode_diagnostic_count": 0, + "exit_leak_diagnostic_lines": [] + }, + "external_process_or_group_signals": 0, + "owned_child_process_helper_sha256": "c007e712c281573254faa1233c2ac92e100ab87393256a6dc096b35283e43037", + "adapter_owned_cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "adapter_error": null, + "old_helper_bytes_preserved": true, + "helper_wait_None_maps_to_actual_timeout_seconds": 5, + "explicit_helper_wait_timeouts_preserved": true, + "additional_cleanup_wait_timeout_seconds": 5, + "additional_cleanup_max_attempts": 3 + }, + "capture": { + "actual_captured_pids": [ + 51019 + ], + "cleanup": [ + { + "pid": 51019, + "cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "outer_cleanup_errors": [], + "engine_ended": true, + "outer_maximum_helper_invocations": 3, + "helper_maximum_waits": 3, + "per_wait_timeout_seconds": 5, + "foreign_process_or_group_signals": 0 + } + ], + "adapter_exception": null, + "all_captured_ended": true, + "outer_cleanup_errors": [], + "foreign_process_or_group_signals": 0, + "all_cleanup_before_outer_receipt": true, + "outer_receipt_written": true, + "outer_receipt_error": null, + "passed": true + } +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/114-baseline-profile.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/114-baseline-profile.json new file mode 100644 index 0000000..c9a0c5b --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/114-baseline-profile.json @@ -0,0 +1,20 @@ +{ + "actual_user_data_dir": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-254105d359b041fcbc522ba5c6a105a4-budget-runtime", + "before": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-254105d359b041fcbc522ba5c6a105a4-budget-startup", + "conditions": [ + true, + true, + true, + true, + true + ], + "conditions_checked": 5, + "custom_user_dir_name": "TheTree-PCK-tests-254105d359b041fcbc522ba5c6a105a4-budget-runtime", + "expected_user_data_dir": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-254105d359b041fcbc522ba5c6a105a4-budget-runtime", + "fresh_before_parent_initialize": true, + "globalized_probe": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-254105d359b041fcbc522ba5c6a105a4-budget-runtime/guard-probe", + "profile_writes_before_guard": 0, + "project_settings_persisted": false, + "runtime_settings_only": true, + "verified": true +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/115-adapter-owned-cleanup.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/115-adapter-owned-cleanup.json new file mode 100644 index 0000000..f44709a --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/115-adapter-owned-cleanup.json @@ -0,0 +1,18 @@ +{ + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/116-ended.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/116-ended.json new file mode 100644 index 0000000..21c7f56 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/116-ended.json @@ -0,0 +1,38 @@ +{ + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 51073, + "owner_pid": 50976, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate/engine-native.log" + ], + "monotonic_ns": 19779473666, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 51073, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate/engine-native.log" + ], + "ended_utc": "2026-10-12T04:38:13.541144+00:00", + "signal_scope": "tracked Popen child only; no external group signal" +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/117-engine-native.log.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/117-engine-native.log.gz new file mode 100644 index 0000000..399ad0f Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/117-engine-native.log.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/118-outer-owned-finally.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/118-outer-owned-finally.json new file mode 100644 index 0000000..49ad370 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/118-outer-owned-finally.json @@ -0,0 +1,39 @@ +{ + "actual_captured_pids": [ + 51073 + ], + "cleanup": [ + { + "pid": 51073, + "cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "outer_cleanup_errors": [], + "engine_ended": true, + "outer_maximum_helper_invocations": 3, + "helper_maximum_waits": 3, + "per_wait_timeout_seconds": 5, + "foreign_process_or_group_signals": 0 + } + ], + "adapter_exception": null, + "all_captured_ended": true, + "outer_cleanup_errors": [], + "foreign_process_or_group_signals": 0, + "all_cleanup_before_outer_receipt": true +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/119-process.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/119-process.json new file mode 100644 index 0000000..b0fe1a5 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/119-process.json @@ -0,0 +1,140 @@ +{ + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate/engine-native.log" + ], + "pid": 51073, + "started_utc": "2026-10-12T04:38:08.134903+00:00", + "ended_utc": "2026-10-12T04:38:13.544873+00:00", + "wall_seconds": 5.409920666, + "exit_code": 0, + "helper_exit_code": 0, + "timed_out": false, + "stdout_sha256": "33a064036d80cf88498429e366a4e62e2e9eef8537b0dd2ad458f738d7060665", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "error_lines": [], + "owned_popen_ended": true, + "old_helper_engine_ended": true, + "start_receipt_written": true, + "end_receipt_written": true, + "lifecycle_error": null, + "old_helper_lifecycle_error": null, + "actual_start_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 51073, + "owner_pid": 50976, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate/engine-native.log" + ], + "monotonic_ns": 14377898333, + "pid": 51073, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate/engine-native.log" + ], + "started_utc": "2026-10-12T04:38:08.134903+00:00", + "current_process_identity": { + "pid": 51073, + "ppid": 50976, + "pgid": 51073, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" + }, + "actual_end_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 51073, + "owner_pid": 50976, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate/engine-native.log" + ], + "monotonic_ns": 19779473666, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 51073, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate/engine-native.log" + ], + "ended_utc": "2026-10-12T04:38:13.541144+00:00", + "signal_scope": "tracked Popen child only; no external group signal" + }, + "strict_native_diagnostics": { + "errors": [], + "banner_count": 1, + "known_unicode_diagnostic_count": 0, + "unrecognized_unicode_diagnostic_count": 0, + "exit_leak_diagnostic_lines": [] + }, + "external_process_or_group_signals": 0, + "owned_child_process_helper_sha256": "c007e712c281573254faa1233c2ac92e100ab87393256a6dc096b35283e43037", + "adapter_owned_cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "adapter_error": null, + "old_helper_bytes_preserved": true, + "helper_wait_None_maps_to_actual_timeout_seconds": 5, + "explicit_helper_wait_timeouts_preserved": true, + "additional_cleanup_wait_timeout_seconds": 5, + "additional_cleanup_max_attempts": 3 +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/120-started.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/120-started.json new file mode 100644 index 0000000..b47b9b2 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/120-started.json @@ -0,0 +1,40 @@ +{ + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 51073, + "owner_pid": 50976, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate/engine-native.log" + ], + "monotonic_ns": 14377898333, + "pid": 51073, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate/engine-native.log" + ], + "started_utc": "2026-10-12T04:38:08.134903+00:00", + "current_process_identity": { + "pid": 51073, + "ppid": 50976, + "pgid": 51073, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/121-stderr.log b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/121-stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/122-stdout.log.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/122-stdout.log.gz new file mode 100644 index 0000000..cc74cad Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/122-stdout.log.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/123-candidate-guarded.gd b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/123-candidate-guarded.gd new file mode 100644 index 0000000..34eaf20 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/123-candidate-guarded.gd @@ -0,0 +1,16 @@ +extends "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/whole.gd" +const Guard := preload("/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-cache-public-mutations-r144/profile_guard.gd") +func _initialize() -> void: + if not Guard.activate(): quit(97); return + super._initialize() +func run() -> void: + var loaded := GDExtensionManager.load_extension("/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/candidate.gdextension") + var exact_api := false + if loaded == GDExtensionManager.LOAD_STATUS_OK and ClassDB.class_exists(&"TheTreeNumericCore"): + var probe: Variant = ClassDB.instantiate(&"TheTreeNumericCore") + exact_api = probe != null and probe.has_method(&"guest_tree_edge_rows") == true + probe = null + check(loaded == GDExtensionManager.LOAD_STATUS_OK and ClassDB.class_exists(&"TheTreeNumericCore") and exact_api, "exact native extension registered before diagnostic") + if loaded != GDExtensionManager.LOAD_STATUS_OK or not ClassDB.class_exists(&"TheTreeNumericCore") or not exact_api: quit(96); return + print("NATIVE_ADAPTER_LIBRARY_REGISTERED") + super.run() diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/124-after647.varbytes.zst b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/124-after647.varbytes.zst new file mode 100644 index 0000000..84c74b4 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/124-after647.varbytes.zst differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/125-report.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/125-report.json new file mode 100644 index 0000000..a56934c --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/125-report.json @@ -0,0 +1,32 @@ +{ + "Windows_accepted": false, + "after647": { + "bytes": 246720, + "codec": "zstd", + "field_deletions": 0, + "file_envelope": false, + "full_bytes_roundtrip": true, + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate-measurement/after647.varbytes.zst", + "sha256": "684ba40e9f649b7dd4bfc620185d7cd18bae3111c3b4038e48aaad5a9168d880", + "uncompressed_bytes": 11487732, + "uncompressed_sha256": "9df3c1b6f65dfd8be944cd5cab8c631f7533530dfef3820d9fa5d74a5b1ac30f" + }, + "cache_hits": 0, + "cache_misses": 9311, + "candidate": "candidate", + "candidate_adopted": false, + "checks": 15, + "failures": [], + "limits": [ + "One sample from an adjacent baseline hot-loop r326/library327 versus input-copy r333/library334 pair; fixed cold restored646. Only exploratory pair observation, no stable speedup, percentile or budget acceptance.", + "No Main, rendering, OS input or realtime x3. Timed interval contains builtin production callbacks; snapshot verification and compression occur after timing." + ], + "manual_tick_us": 1010883, + "normal_OS_accepted": false, + "passed": true, + "performance_budget_accepted": false, + "pid": 51073, + "plan_id": "P23-02", + "sample": "candidate", + "unit_accepted": false +} \ No newline at end of file diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/126-candidate-phase.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/126-candidate-phase.json new file mode 100644 index 0000000..264712c --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/126-candidate-phase.json @@ -0,0 +1,185 @@ +{ + "mode": "candidate", + "result": { + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate/engine-native.log" + ], + "pid": 51073, + "started_utc": "2026-10-12T04:38:08.134903+00:00", + "ended_utc": "2026-10-12T04:38:13.544873+00:00", + "wall_seconds": 5.409920666, + "exit_code": 0, + "helper_exit_code": 0, + "timed_out": false, + "stdout_sha256": "33a064036d80cf88498429e366a4e62e2e9eef8537b0dd2ad458f738d7060665", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "error_lines": [], + "owned_popen_ended": true, + "old_helper_engine_ended": true, + "start_receipt_written": true, + "end_receipt_written": true, + "lifecycle_error": null, + "old_helper_lifecycle_error": null, + "actual_start_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 51073, + "owner_pid": 50976, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate/engine-native.log" + ], + "monotonic_ns": 14377898333, + "pid": 51073, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate/engine-native.log" + ], + "started_utc": "2026-10-12T04:38:08.134903+00:00", + "current_process_identity": { + "pid": 51073, + "ppid": 50976, + "pgid": 51073, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" + }, + "actual_end_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 51073, + "owner_pid": 50976, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate/engine-native.log" + ], + "monotonic_ns": 19779473666, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 51073, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/candidate/engine-native.log" + ], + "ended_utc": "2026-10-12T04:38:13.541144+00:00", + "signal_scope": "tracked Popen child only; no external group signal" + }, + "strict_native_diagnostics": { + "errors": [], + "banner_count": 1, + "known_unicode_diagnostic_count": 0, + "unrecognized_unicode_diagnostic_count": 0, + "exit_leak_diagnostic_lines": [] + }, + "external_process_or_group_signals": 0, + "owned_child_process_helper_sha256": "c007e712c281573254faa1233c2ac92e100ab87393256a6dc096b35283e43037", + "adapter_owned_cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "adapter_error": null, + "old_helper_bytes_preserved": true, + "helper_wait_None_maps_to_actual_timeout_seconds": 5, + "explicit_helper_wait_timeouts_preserved": true, + "additional_cleanup_wait_timeout_seconds": 5, + "additional_cleanup_max_attempts": 3 + }, + "capture": { + "actual_captured_pids": [ + 51073 + ], + "cleanup": [ + { + "pid": 51073, + "cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "outer_cleanup_errors": [], + "engine_ended": true, + "outer_maximum_helper_invocations": 3, + "helper_maximum_waits": 3, + "per_wait_timeout_seconds": 5, + "foreign_process_or_group_signals": 0 + } + ], + "adapter_exception": null, + "all_captured_ended": true, + "outer_cleanup_errors": [], + "foreign_process_or_group_signals": 0, + "all_cleanup_before_outer_receipt": true, + "outer_receipt_written": true, + "outer_receipt_error": null, + "passed": true + } +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/127-candidate-profile.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/127-candidate-profile.json new file mode 100644 index 0000000..398179b --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/127-candidate-profile.json @@ -0,0 +1,20 @@ +{ + "actual_user_data_dir": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-d149ca14eb3a48699bd9de9060e5b2d5-budget-runtime", + "before": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-d149ca14eb3a48699bd9de9060e5b2d5-budget-startup", + "conditions": [ + true, + true, + true, + true, + true + ], + "conditions_checked": 5, + "custom_user_dir_name": "TheTree-PCK-tests-d149ca14eb3a48699bd9de9060e5b2d5-budget-runtime", + "expected_user_data_dir": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-d149ca14eb3a48699bd9de9060e5b2d5-budget-runtime", + "fresh_before_parent_initialize": true, + "globalized_probe": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-d149ca14eb3a48699bd9de9060e5b2d5-budget-runtime/guard-probe", + "profile_writes_before_guard": 0, + "project_settings_persisted": false, + "runtime_settings_only": true, + "verified": true +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/128-execution.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/128-execution.json.gz new file mode 100644 index 0000000..185110f Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/128-execution.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/129-input.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/129-input.json.gz new file mode 100644 index 0000000..3cc5d37 Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/129-input.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/130-preexecution-root-verification.json.gz b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/130-preexecution-root-verification.json.gz new file mode 100644 index 0000000..b9f475f Binary files /dev/null and b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/130-preexecution-root-verification.json.gz differ diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/131-adapter-owned-cleanup.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/131-adapter-owned-cleanup.json new file mode 100644 index 0000000..f44709a --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/131-adapter-owned-cleanup.json @@ -0,0 +1,18 @@ +{ + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/132-ended.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/132-ended.json new file mode 100644 index 0000000..0a6a031 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/132-ended.json @@ -0,0 +1,38 @@ +{ + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 51002, + "owner_pid": 50976, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6/engine-native.log" + ], + "monotonic_ns": 4650645458, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 51002, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6/engine-native.log" + ], + "ended_utc": "2026-10-12T04:37:58.412191+00:00", + "signal_scope": "tracked Popen child only; no external group signal" +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/133-engine-native.log b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/133-engine-native.log new file mode 100644 index 0000000..6745f69 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/133-engine-native.log @@ -0,0 +1,95 @@ +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +TextServer: Added interface "Dummy" +TextServer: Added interface "ICU / HarfBuzz / Graphite (Built-in)" +SDL: Init OK! +Using "default" pen tablet driver... + +TextServer: Primary interface set to: "ICU / HarfBuzz / Graphite (Built-in)". +CORE API HASH: 2004498165 +EDITOR API HASH: 1696660745 +Loading resource: /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd remapped: /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd +Completed load for: '/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd' remapped '/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd' at thread -1 +SceneTreeFTI: traversal method DEFAULT +Loading resource: res://autoload/event_bus.gd remapped: res://autoload/event_bus.gd +Completed load for: 'res://autoload/event_bus.gd' remapped 'res://autoload/event_bus.gd' at thread -1 +Loading resource: res://autoload/game_clock.gd remapped: res://autoload/game_clock.gd +Completed load for: 'res://autoload/game_clock.gd' remapped 'res://autoload/game_clock.gd' at thread -1 +Loading resource: res://autoload/game_state.gd remapped: res://autoload/game_state.gd +Completed load for: 'res://autoload/game_state.gd' remapped 'res://autoload/game_state.gd' at thread -1 +Loading resource: res://autoload/simulation_runtime.gd remapped: res://autoload/simulation_runtime.gd +Completed load for: 'res://autoload/simulation_runtime.gd' remapped 'res://autoload/simulation_runtime.gd' at thread -1 +Loaded system CA certificates +PACK_PROFILE_GUARD verified=true +NATIVE_ADAPTER_LIBRARY_REGISTERED +Loading resource: res://data/facilities/adult_private_room.tres remapped: res://data/facilities/adult_private_room.tres +Completed load for: 'res://data/facilities/adult_private_room.tres' remapped 'res://data/facilities/adult_private_room.tres' at thread -1 +Loading resource: res://data/facilities/cafeteria.tres remapped: res://data/facilities/cafeteria.tres +Completed load for: 'res://data/facilities/cafeteria.tres' remapped 'res://data/facilities/cafeteria.tres' at thread -1 +Loading resource: res://data/facilities/expansion/chapel.tres remapped: res://data/facilities/expansion/chapel.tres +Completed load for: 'res://data/facilities/expansion/chapel.tres' remapped 'res://data/facilities/expansion/chapel.tres' at thread -1 +Loading resource: res://data/facilities/expansion/cleaning_room.tres remapped: res://data/facilities/expansion/cleaning_room.tres +Completed load for: 'res://data/facilities/expansion/cleaning_room.tres' remapped 'res://data/facilities/expansion/cleaning_room.tres' at thread -1 +Loading resource: res://data/facilities/expansion/premium_room.tres remapped: res://data/facilities/expansion/premium_room.tres +Completed load for: 'res://data/facilities/expansion/premium_room.tres' remapped 'res://data/facilities/expansion/premium_room.tres' at thread -1 +Loading resource: res://data/facilities/expansion/staff_dormitory.tres remapped: res://data/facilities/expansion/staff_dormitory.tres +Completed load for: 'res://data/facilities/expansion/staff_dormitory.tres' remapped 'res://data/facilities/expansion/staff_dormitory.tres' at thread -1 +Loading resource: res://data/facilities/guest_corridor.tres remapped: res://data/facilities/guest_corridor.tres +Completed load for: 'res://data/facilities/guest_corridor.tres' remapped 'res://data/facilities/guest_corridor.tres' at thread -1 +Loading resource: res://data/facilities/guest_elevator.tres remapped: res://data/facilities/guest_elevator.tres +Completed load for: 'res://data/facilities/guest_elevator.tres' remapped 'res://data/facilities/guest_elevator.tres' at thread -1 +Loading resource: res://data/facilities/infrastructure/guest_stairs.tres remapped: res://data/facilities/infrastructure/guest_stairs.tres +Completed load for: 'res://data/facilities/infrastructure/guest_stairs.tres' remapped 'res://data/facilities/infrastructure/guest_stairs.tres' at thread -1 +Loading resource: res://data/facilities/infrastructure/service_stairs.tres remapped: res://data/facilities/infrastructure/service_stairs.tres +Completed load for: 'res://data/facilities/infrastructure/service_stairs.tres' remapped 'res://data/facilities/infrastructure/service_stairs.tres' at thread -1 +Loading resource: res://data/facilities/kitchen.tres remapped: res://data/facilities/kitchen.tres +Completed load for: 'res://data/facilities/kitchen.tres' remapped 'res://data/facilities/kitchen.tres' at thread -1 +Loading resource: res://data/facilities/massage_room.tres remapped: res://data/facilities/massage_room.tres +Completed load for: 'res://data/facilities/massage_room.tres' remapped 'res://data/facilities/massage_room.tres' at thread -1 +Loading resource: res://data/facilities/public_bath.tres remapped: res://data/facilities/public_bath.tres +Completed load for: 'res://data/facilities/public_bath.tres' remapped 'res://data/facilities/public_bath.tres' at thread -1 +Loading resource: res://data/facilities/reception.tres remapped: res://data/facilities/reception.tres +Completed load for: 'res://data/facilities/reception.tres' remapped 'res://data/facilities/reception.tres' at thread -1 +Loading resource: res://data/facilities/rescue/infirmary.tres remapped: res://data/facilities/rescue/infirmary.tres +Completed load for: 'res://data/facilities/rescue/infirmary.tres' remapped 'res://data/facilities/rescue/infirmary.tres' at thread -1 +Loading resource: res://data/facilities/security_station.tres remapped: res://data/facilities/security_station.tres +Completed load for: 'res://data/facilities/security_station.tres' remapped 'res://data/facilities/security_station.tres' at thread -1 +Loading resource: res://data/facilities/service_corridor.tres remapped: res://data/facilities/service_corridor.tres +Completed load for: 'res://data/facilities/service_corridor.tres' remapped 'res://data/facilities/service_corridor.tres' at thread -1 +Loading resource: res://data/facilities/service_elevator.tres remapped: res://data/facilities/service_elevator.tres +Completed load for: 'res://data/facilities/service_elevator.tres' remapped 'res://data/facilities/service_elevator.tres' at thread -1 +Loading resource: res://data/facilities/staff_door.tres remapped: res://data/facilities/staff_door.tres +Completed load for: 'res://data/facilities/staff_door.tres' remapped 'res://data/facilities/staff_door.tres' at thread -1 +Loading resource: res://data/facilities/staff_waiting_room.tres remapped: res://data/facilities/staff_waiting_room.tres +Completed load for: 'res://data/facilities/staff_waiting_room.tres' remapped 'res://data/facilities/staff_waiting_room.tres' at thread -1 +Loading resource: res://data/facilities/standard_room.tres remapped: res://data/facilities/standard_room.tres +Completed load for: 'res://data/facilities/standard_room.tres' remapped 'res://data/facilities/standard_room.tres' at thread -1 +Loading resource: res://data/facilities/tavern.tres remapped: res://data/facilities/tavern.tres +Completed load for: 'res://data/facilities/tavern.tres' remapped 'res://data/facilities/tavern.tres' at thread -1 +Loading resource: res://data/facilities/warehouse.tres remapped: res://data/facilities/warehouse.tres +Completed load for: 'res://data/facilities/warehouse.tres' remapped 'res://data/facilities/warehouse.tres' at thread -1 +S6: performance budgets + ✓ empty metric ID is rejected + ✓ negative duration is rejected + ✓ non-positive budget is rejected + ✓ custom budget registers + ✓ sample window remains bounded + ✓ lifetime count survives window eviction + ✓ lifetime average uses every recorded sample + ✓ window maximum is exact + ✓ nearest-rank P95 is deterministic + ✓ measurement below limit passes + ✓ P95 above limit fails + ✓ budget violation emits its exact metric once + ✓ x1 uses the MVP average budget + ✓ x3 uses the MVP P95 budget + ✓ x3 sample within budget passes + ✓ path P95 enforces two milliseconds + ✓ all reports are returned in stable metric order + ✓ single metric can be cleared + ✓ all diagnostic samples can be cleared + ✓ real-delta Kernel ticks feed the diagnostic profiler + ✓ Kernel exposes read-only performance reports + ✓ x3 process frame advances the expected three game-minute ticks + ✓ x3 performance measures the aggregate frame once rather than three isolated ticks + ✓ active simulation frames feed the main-thread stall budget +PASS: 24 checks diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/134-outer-owned-finally.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/134-outer-owned-finally.json new file mode 100644 index 0000000..0b30383 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/134-outer-owned-finally.json @@ -0,0 +1,39 @@ +{ + "actual_captured_pids": [ + 51002 + ], + "cleanup": [ + { + "pid": 51002, + "cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "outer_cleanup_errors": [], + "engine_ended": true, + "outer_maximum_helper_invocations": 3, + "helper_maximum_waits": 3, + "per_wait_timeout_seconds": 5, + "foreign_process_or_group_signals": 0 + } + ], + "adapter_exception": null, + "all_captured_ended": true, + "outer_cleanup_errors": [], + "foreign_process_or_group_signals": 0, + "all_cleanup_before_outer_receipt": true +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/135-process.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/135-process.json new file mode 100644 index 0000000..f1d0067 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/135-process.json @@ -0,0 +1,140 @@ +{ + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6/engine-native.log" + ], + "pid": 51002, + "started_utc": "2026-10-12T04:37:57.008566+00:00", + "ended_utc": "2026-10-12T04:37:58.414207+00:00", + "wall_seconds": 1.4049286250000002, + "exit_code": 0, + "helper_exit_code": 0, + "timed_out": false, + "stdout_sha256": "3e8b6c1a2e2fa2f004b313863eb5a9a03b2685d13eab6d2a30faeaa00521350e", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "error_lines": [], + "owned_popen_ended": true, + "old_helper_engine_ended": true, + "start_receipt_written": true, + "end_receipt_written": true, + "lifecycle_error": null, + "old_helper_lifecycle_error": null, + "actual_start_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 51002, + "owner_pid": 50976, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6/engine-native.log" + ], + "monotonic_ns": 3252893500, + "pid": 51002, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6/engine-native.log" + ], + "started_utc": "2026-10-12T04:37:57.008566+00:00", + "current_process_identity": { + "pid": 51002, + "ppid": 50976, + "pgid": 51002, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" + }, + "actual_end_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 51002, + "owner_pid": 50976, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6/engine-native.log" + ], + "monotonic_ns": 4650645458, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 51002, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6/engine-native.log" + ], + "ended_utc": "2026-10-12T04:37:58.412191+00:00", + "signal_scope": "tracked Popen child only; no external group signal" + }, + "strict_native_diagnostics": { + "errors": [], + "banner_count": 1, + "known_unicode_diagnostic_count": 0, + "unrecognized_unicode_diagnostic_count": 0, + "exit_leak_diagnostic_lines": [] + }, + "external_process_or_group_signals": 0, + "owned_child_process_helper_sha256": "c007e712c281573254faa1233c2ac92e100ab87393256a6dc096b35283e43037", + "adapter_owned_cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "adapter_error": null, + "old_helper_bytes_preserved": true, + "helper_wait_None_maps_to_actual_timeout_seconds": 5, + "explicit_helper_wait_timeouts_preserved": true, + "additional_cleanup_wait_timeout_seconds": 5, + "additional_cleanup_max_attempts": 3 +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/136-started.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/136-started.json new file mode 100644 index 0000000..0fe17f7 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/136-started.json @@ -0,0 +1,40 @@ +{ + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 51002, + "owner_pid": 50976, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6/engine-native.log" + ], + "monotonic_ns": 3252893500, + "pid": 51002, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6/engine-native.log" + ], + "started_utc": "2026-10-12T04:37:57.008566+00:00", + "current_process_identity": { + "pid": 51002, + "ppid": 50976, + "pgid": 51002, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/137-stderr.log b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/137-stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/138-stdout.log b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/138-stdout.log new file mode 100644 index 0000000..4d542d9 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/138-stdout.log @@ -0,0 +1,99 @@ +WorkerThreadPool: 10 threads, 3 max low-priority. +Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org +TextServer: Added interface "Dummy" +TextServer: Added interface "ICU / HarfBuzz / Graphite (Built-in)" +SDL: Init OK! +Using "default" pen tablet driver... + +TextServer: Primary interface set to: "ICU / HarfBuzz / Graphite (Built-in)". +CORE API HASH: 2004498165 +EDITOR API HASH: 1696660745 +Loading resource: /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd remapped: /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd +Completed load for: '/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd' remapped '/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd' at thread -1 +SceneTreeFTI: traversal method DEFAULT +Loading resource: res://autoload/event_bus.gd remapped: res://autoload/event_bus.gd +Completed load for: 'res://autoload/event_bus.gd' remapped 'res://autoload/event_bus.gd' at thread -1 +Loading resource: res://autoload/game_clock.gd remapped: res://autoload/game_clock.gd +Completed load for: 'res://autoload/game_clock.gd' remapped 'res://autoload/game_clock.gd' at thread -1 +Loading resource: res://autoload/game_state.gd remapped: res://autoload/game_state.gd +Completed load for: 'res://autoload/game_state.gd' remapped 'res://autoload/game_state.gd' at thread -1 +Loading resource: res://autoload/simulation_runtime.gd remapped: res://autoload/simulation_runtime.gd +Completed load for: 'res://autoload/simulation_runtime.gd' remapped 'res://autoload/simulation_runtime.gd' at thread -1 +Loaded system CA certificates +PACK_PROFILE_GUARD verified=true +NATIVE_ADAPTER_LIBRARY_REGISTERED +Loading resource: res://data/facilities/adult_private_room.tres remapped: res://data/facilities/adult_private_room.tres +Completed load for: 'res://data/facilities/adult_private_room.tres' remapped 'res://data/facilities/adult_private_room.tres' at thread -1 +Loading resource: res://data/facilities/cafeteria.tres remapped: res://data/facilities/cafeteria.tres +Completed load for: 'res://data/facilities/cafeteria.tres' remapped 'res://data/facilities/cafeteria.tres' at thread -1 +Loading resource: res://data/facilities/expansion/chapel.tres remapped: res://data/facilities/expansion/chapel.tres +Completed load for: 'res://data/facilities/expansion/chapel.tres' remapped 'res://data/facilities/expansion/chapel.tres' at thread -1 +Loading resource: res://data/facilities/expansion/cleaning_room.tres remapped: res://data/facilities/expansion/cleaning_room.tres +Completed load for: 'res://data/facilities/expansion/cleaning_room.tres' remapped 'res://data/facilities/expansion/cleaning_room.tres' at thread -1 +Loading resource: res://data/facilities/expansion/premium_room.tres remapped: res://data/facilities/expansion/premium_room.tres +Completed load for: 'res://data/facilities/expansion/premium_room.tres' remapped 'res://data/facilities/expansion/premium_room.tres' at thread -1 +Loading resource: res://data/facilities/expansion/staff_dormitory.tres remapped: res://data/facilities/expansion/staff_dormitory.tres +Completed load for: 'res://data/facilities/expansion/staff_dormitory.tres' remapped 'res://data/facilities/expansion/staff_dormitory.tres' at thread -1 +Loading resource: res://data/facilities/guest_corridor.tres remapped: res://data/facilities/guest_corridor.tres +Completed load for: 'res://data/facilities/guest_corridor.tres' remapped 'res://data/facilities/guest_corridor.tres' at thread -1 +Loading resource: res://data/facilities/guest_elevator.tres remapped: res://data/facilities/guest_elevator.tres +Completed load for: 'res://data/facilities/guest_elevator.tres' remapped 'res://data/facilities/guest_elevator.tres' at thread -1 +Loading resource: res://data/facilities/infrastructure/guest_stairs.tres remapped: res://data/facilities/infrastructure/guest_stairs.tres +Completed load for: 'res://data/facilities/infrastructure/guest_stairs.tres' remapped 'res://data/facilities/infrastructure/guest_stairs.tres' at thread -1 +Loading resource: res://data/facilities/infrastructure/service_stairs.tres remapped: res://data/facilities/infrastructure/service_stairs.tres +Completed load for: 'res://data/facilities/infrastructure/service_stairs.tres' remapped 'res://data/facilities/infrastructure/service_stairs.tres' at thread -1 +Loading resource: res://data/facilities/kitchen.tres remapped: res://data/facilities/kitchen.tres +Completed load for: 'res://data/facilities/kitchen.tres' remapped 'res://data/facilities/kitchen.tres' at thread -1 +Loading resource: res://data/facilities/massage_room.tres remapped: res://data/facilities/massage_room.tres +Completed load for: 'res://data/facilities/massage_room.tres' remapped 'res://data/facilities/massage_room.tres' at thread -1 +Loading resource: res://data/facilities/public_bath.tres remapped: res://data/facilities/public_bath.tres +Completed load for: 'res://data/facilities/public_bath.tres' remapped 'res://data/facilities/public_bath.tres' at thread -1 +Loading resource: res://data/facilities/reception.tres remapped: res://data/facilities/reception.tres +Completed load for: 'res://data/facilities/reception.tres' remapped 'res://data/facilities/reception.tres' at thread -1 +Loading resource: res://data/facilities/rescue/infirmary.tres remapped: res://data/facilities/rescue/infirmary.tres +Completed load for: 'res://data/facilities/rescue/infirmary.tres' remapped 'res://data/facilities/rescue/infirmary.tres' at thread -1 +Loading resource: res://data/facilities/security_station.tres remapped: res://data/facilities/security_station.tres +Completed load for: 'res://data/facilities/security_station.tres' remapped 'res://data/facilities/security_station.tres' at thread -1 +Loading resource: res://data/facilities/service_corridor.tres remapped: res://data/facilities/service_corridor.tres +Completed load for: 'res://data/facilities/service_corridor.tres' remapped 'res://data/facilities/service_corridor.tres' at thread -1 +Loading resource: res://data/facilities/service_elevator.tres remapped: res://data/facilities/service_elevator.tres +Completed load for: 'res://data/facilities/service_elevator.tres' remapped 'res://data/facilities/service_elevator.tres' at thread -1 +Loading resource: res://data/facilities/staff_door.tres remapped: res://data/facilities/staff_door.tres +Completed load for: 'res://data/facilities/staff_door.tres' remapped 'res://data/facilities/staff_door.tres' at thread -1 +Loading resource: res://data/facilities/staff_waiting_room.tres remapped: res://data/facilities/staff_waiting_room.tres +Completed load for: 'res://data/facilities/staff_waiting_room.tres' remapped 'res://data/facilities/staff_waiting_room.tres' at thread -1 +Loading resource: res://data/facilities/standard_room.tres remapped: res://data/facilities/standard_room.tres +Completed load for: 'res://data/facilities/standard_room.tres' remapped 'res://data/facilities/standard_room.tres' at thread -1 +Loading resource: res://data/facilities/tavern.tres remapped: res://data/facilities/tavern.tres +Completed load for: 'res://data/facilities/tavern.tres' remapped 'res://data/facilities/tavern.tres' at thread -1 +Loading resource: res://data/facilities/warehouse.tres remapped: res://data/facilities/warehouse.tres +Completed load for: 'res://data/facilities/warehouse.tres' remapped 'res://data/facilities/warehouse.tres' at thread -1 +S6: performance budgets + ✓ empty metric ID is rejected + ✓ negative duration is rejected + ✓ non-positive budget is rejected + ✓ custom budget registers + ✓ sample window remains bounded + ✓ lifetime count survives window eviction + ✓ lifetime average uses every recorded sample + ✓ window maximum is exact + ✓ nearest-rank P95 is deterministic + ✓ measurement below limit passes + ✓ P95 above limit fails + ✓ budget violation emits its exact metric once + ✓ x1 uses the MVP average budget + ✓ x3 uses the MVP P95 budget + ✓ x3 sample within budget passes + ✓ path P95 enforces two milliseconds + ✓ all reports are returned in stable metric order + ✓ single metric can be cleared + ✓ all diagnostic samples can be cleared + ✓ real-delta Kernel ticks feed the diagnostic profiler + ✓ Kernel exposes read-only performance reports + ✓ x3 process frame advances the expected three game-minute ticks + ✓ x3 performance measures the aggregate frame once rather than three isolated ticks + ✓ active simulation frames feed the main-thread stall budget +PASS: 24 checks +XR: Clearing primary interface +XR: Removed interface "Native mobile" +XR: Removed interface "OpenXR" diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/139-s6-guarded.gd b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/139-s6-guarded.gd new file mode 100644 index 0000000..75f9962 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/139-s6-guarded.gd @@ -0,0 +1,17 @@ +extends "res://tests/s6/test_performance_budget.gd" +const Guard := preload("/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-cache-public-mutations-r144/profile_guard.gd") +func _initialize() -> void: + if not Guard.activate(): quit(97); return + var loaded := GDExtensionManager.load_extension("/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-local-r335/candidate.gdextension") + if loaded != GDExtensionManager.LOAD_STATUS_OK or not ClassDB.class_exists(&"TheTreeNumericCore"): quit(96); return + var probe: Variant = ClassDB.instantiate(&"TheTreeNumericCore") + if probe == null or not probe.has_method(&"performance_record_sample") or not probe.has_method(&"guest_tree_edge_rows"): quit(96); return + probe = null + if FileAccess.get_sha256("res://scripts/core/performance_budget.gd") != OS.get_environment("THE_TREE_EXPECTED_BUDGET_SHA"): quit(98); return + print("NATIVE_ADAPTER_LIBRARY_REGISTERED") + super._initialize() +func _run() -> void: + super._run() + var f := FileAccess.open(OS.get_environment("THE_TREE_RUNTIME_MONITOR_OUTPUT").path_join("report.json"), FileAccess.WRITE) + if f == null: quit(98); return + f.store_string(JSON.stringify({"mode":"s6", "pid":OS.get_process_id(), "checks":_checks, "failures":_failures, "passed":_failures == 0, "original_s6_test_unchanged":true, "unit_accepted":false, "performance_accepted":false}, "\t")); f.close() diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/140-report.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/140-report.json new file mode 100644 index 0000000..f566411 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/140-report.json @@ -0,0 +1,10 @@ +{ + "checks": 24, + "failures": 0, + "mode": "s6", + "original_s6_test_unchanged": true, + "passed": true, + "performance_accepted": false, + "pid": 51002, + "unit_accepted": false +} \ No newline at end of file diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/141-s6-phase.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/141-s6-phase.json new file mode 100644 index 0000000..6d4e8eb --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/141-s6-phase.json @@ -0,0 +1,185 @@ +{ + "mode": "s6", + "result": { + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6/engine-native.log" + ], + "pid": 51002, + "started_utc": "2026-10-12T04:37:57.008566+00:00", + "ended_utc": "2026-10-12T04:37:58.414207+00:00", + "wall_seconds": 1.4049286250000002, + "exit_code": 0, + "helper_exit_code": 0, + "timed_out": false, + "stdout_sha256": "3e8b6c1a2e2fa2f004b313863eb5a9a03b2685d13eab6d2a30faeaa00521350e", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "error_lines": [], + "owned_popen_ended": true, + "old_helper_engine_ended": true, + "start_receipt_written": true, + "end_receipt_written": true, + "lifecycle_error": null, + "old_helper_lifecycle_error": null, + "actual_start_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_STARTED", + "actual_pid": 51002, + "owner_pid": 50976, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6/engine-native.log" + ], + "monotonic_ns": 3252893500, + "pid": 51002, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6/engine-native.log" + ], + "started_utc": "2026-10-12T04:37:57.008566+00:00", + "current_process_identity": { + "pid": 51002, + "ppid": 50976, + "pgid": 51002, + "args": "/Applications/Godot.app/Contents/MacOS/Godot --headless --path /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage --script /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd --verbose --log-file /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6/engine-native.log" + }, + "live_identity_exact": true, + "tracked_child_ended_before_initial_probe": false, + "signal_scope": "tracked Popen child only; no external group signal" + }, + "actual_end_binding": { + "scope": "isolated diagnostic owned child", + "event": "ENGINE_ENDED", + "actual_pid": 51002, + "owner_pid": 50976, + "command": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6/engine-native.log" + ], + "monotonic_ns": 4650645458, + "exit_code": 0, + "actual_process_exit_code": 0, + "engine_ended": true, + "timed_out": false, + "lifecycle_error": null, + "start_receipt_written": true, + "pid": 51002, + "argv": [ + "/Applications/Godot.app/Contents/MacOS/Godot", + "--headless", + "--path", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-guest-bulk-local-r315/stage", + "--script", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6-guarded.gd", + "--verbose", + "--log-file", + "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-input-copy-whole-r336/s6/engine-native.log" + ], + "ended_utc": "2026-10-12T04:37:58.412191+00:00", + "signal_scope": "tracked Popen child only; no external group signal" + }, + "strict_native_diagnostics": { + "errors": [], + "banner_count": 1, + "known_unicode_diagnostic_count": 0, + "unrecognized_unicode_diagnostic_count": 0, + "exit_leak_diagnostic_lines": [] + }, + "external_process_or_group_signals": 0, + "owned_child_process_helper_sha256": "c007e712c281573254faa1233c2ac92e100ab87393256a6dc096b35283e43037", + "adapter_owned_cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "adapter_error": null, + "old_helper_bytes_preserved": true, + "helper_wait_None_maps_to_actual_timeout_seconds": 5, + "explicit_helper_wait_timeouts_preserved": true, + "additional_cleanup_wait_timeout_seconds": 5, + "additional_cleanup_max_attempts": 3 + }, + "capture": { + "actual_captured_pids": [ + 51002 + ], + "cleanup": [ + { + "pid": 51002, + "cleanup": { + "owned_child_created": true, + "engine_ended": true, + "actual_process_exit_code": 0, + "attempts": [ + { + "attempt": 1, + "kill_attempted": false, + "wait_timeout_seconds": 5, + "wait_completed": true, + "errors": [], + "poll_before": 0, + "wait_returned_code": 0, + "poll_after": 0 + } + ], + "errors": [] + }, + "outer_cleanup_errors": [], + "engine_ended": true, + "outer_maximum_helper_invocations": 3, + "helper_maximum_waits": 3, + "per_wait_timeout_seconds": 5, + "foreign_process_or_group_signals": 0 + } + ], + "adapter_exception": null, + "all_captured_ended": true, + "outer_cleanup_errors": [], + "foreign_process_or_group_signals": 0, + "all_cleanup_before_outer_receipt": true, + "outer_receipt_written": true, + "outer_receipt_error": null, + "passed": true + } +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/142-s6-profile.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/142-s6-profile.json new file mode 100644 index 0000000..816d154 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/142-s6-profile.json @@ -0,0 +1,20 @@ +{ + "actual_user_data_dir": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-3303716920674766b50d2706fee41c1b-budget-runtime", + "before": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-3303716920674766b50d2706fee41c1b-budget-startup", + "conditions": [ + true, + true, + true, + true, + true + ], + "conditions_checked": 5, + "custom_user_dir_name": "TheTree-PCK-tests-3303716920674766b50d2706fee41c1b-budget-runtime", + "expected_user_data_dir": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-3303716920674766b50d2706fee41c1b-budget-runtime", + "fresh_before_parent_initialize": true, + "globalized_probe": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-3303716920674766b50d2706fee41c1b-budget-runtime/guard-probe", + "profile_writes_before_guard": 0, + "project_settings_persisted": false, + "runtime_settings_only": true, + "verified": true +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/143-whole.gd b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/143-whole.gd new file mode 100644 index 0000000..f885a43 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/143-whole.gd @@ -0,0 +1,38 @@ +extends "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-build-preview-monitor-compressed-r06.gd" +# One sample of an adjacent hot-loop r326/library327 versus input-copy r333/library334 pair. Only the synchronous tick is timed. +func run() -> void: + output = OS.get_environment("THE_TREE_RUNTIME_MONITOR_OUTPUT") + var input_path := OS.get_environment("THE_TREE_REPLAY_SNAPSHOT") + var candidate := OS.get_environment("THE_TREE_PAIRED_CANDIDATE") + if not output.is_absolute_path() or not input_path.is_absolute_path() or candidate not in ["baseline","candidate"]: quit(98); return + var original := FileAccess.get_file_as_bytes(input_path).decompress(11411840, FileAccess.COMPRESSION_ZSTD) + var initial: Dictionary = bytes_to_var(original) + runtime = root.get_node("SimulationRuntime") + clock = root.get_node("GameClock") + runtime.initialize(clock, root.get_node("GameState"), int(initial[&"systems"][&"runtime"][&"world_seed"])) + check(runtime.restore_snapshot(initial), "fixed646 public restore") + check(var_to_bytes(runtime.create_snapshot()) == original, "complete input bytes identical") + check(clock.absolute_minute == 646 and clock.paused and clock.speed == 1, "same paused646 speed1") + var path_listeners: Array = runtime.path_service.get_signal_connection_list(&"path_query_measured") + check(path_listeners.size() == 1 and path_listeners[0]["callable"] == Callable(runtime, "_on_path_query_measured") and int(path_listeners[0]["flags"]) == 0, "only builtin path listener") + check(clock.performance_budget.get_signal_connection_list(&"budget_exceeded").is_empty(), "no external budget listener") + check(clock.get_signal_connection_list(&"tick_phase_started").is_empty() and clock.get_signal_connection_list(&"tick_completed").is_empty(), "no phase or completion instrumentation") + check(runtime.path_service.cache_hits == 0 and runtime.path_service.cache_misses == 0 and runtime.path_service.cached_path_count() == 0, "same cold derived cache") + check(runtime.path_service._query_batch.is_empty() and runtime.path_service._guest_tree_workspace.is_empty() and runtime.path_service._guest_step_connector_memo.is_empty(), "same cold tree/native-edge/step workspace") + check(runtime._guest_access_batch_can_select(), "both candidates active fast guard") + check(runtime.path_service.get_script().get_source_code().sha256_text() == OS.get_environment("THE_TREE_EXPECTED_PATH_SHA") and FileAccess.get_sha256("res://scripts/core/performance_budget.gd") == OS.get_environment("THE_TREE_EXPECTED_BUDGET_SHA"), "actual loaded original Path and same candidate Budget sources") + var started := Time.get_ticks_usec() + clock.advance_minutes(1) + var elapsed := Time.get_ticks_usec() - started + check(clock.absolute_minute == 647 and clock.paused, "tick returns at paused647") + var after: Dictionary = runtime.create_snapshot() + var oracle := FileAccess.get_file_as_bytes(OS.get_environment("THE_TREE_CANDIDATE_ORACLE")).decompress(11487732, FileAccess.COMPRESSION_ZSTD) + check(var_to_bytes(after) == oracle, "complete after647 equals pinned r32 oracle") + var after_pin := typed("after647", after) + check(after_pin["uncompressed_sha256"] == "9df3c1b6f65dfd8be944cd5cab8c631f7533530dfef3820d9fa5d74a5b1ac30f", "complete output digest identical") + var report := {"plan_id":"P23-02", "candidate":candidate, "sample":OS.get_environment("THE_TREE_PAIRED_SAMPLE"), "pid":OS.get_process_id(), "manual_tick_us":elapsed, "after647":after_pin, "cache_hits":runtime.path_service.cache_hits, "cache_misses":runtime.path_service.cache_misses, "checks":checks, "failures":failures, "passed":failures.is_empty(), "unit_accepted":false, "performance_budget_accepted":false, "normal_OS_accepted":false, "Windows_accepted":false, "candidate_adopted":false, "limits":["One sample from an adjacent baseline hot-loop r326/library327 versus input-copy r333/library334 pair; fixed cold restored646. Only exploratory pair observation, no stable speedup, percentile or budget acceptance.", "No Main, rendering, OS input or realtime x3. Timed interval contains builtin production callbacks; snapshot verification and compression occur after timing."]} + var file := FileAccess.open(output.path_join("report.json"), FileAccess.WRITE) + if file == null: quit(98); return + file.store_string(JSON.stringify(report, "\t")); file.close() + print("SDK whole647: %d checks, %d failures" % [checks, failures.size()]) + quit(0 if failures.is_empty() else 1) diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/144-p23-02-native-input-copy-whole-r336.py b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/144-p23-02-native-input-copy-whole-r336.py new file mode 100644 index 0000000..1626782 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/144-p23-02-native-input-copy-whole-r336.py @@ -0,0 +1,68 @@ +# coding: utf-8 +from pathlib import Path +import hashlib,importlib.util,json,os,shutil,subprocess,sys,uuid,traceback +sys.dont_write_bytecode=True +R=Path(__file__).resolve().parents[2];A=R/'artifacts/original-completion-2026-10-02';D=R/'docs/plans/original-completion-2026-10-02';O=A/'p23-02-native-input-copy-whole-r336';NAMES=['IMPLEMENTATION_PLAN.md','PROGRESS_INTEGRATION.md','work_packages.json','progress_snapshot.json'] +def mod(name,p): + s=importlib.util.spec_from_file_location(name,p);m=importlib.util.module_from_spec(s);s.loader.exec_module(m);return m +def unpack(path):return subprocess.run(['/opt/homebrew/bin/zstd','-d','-q','-c',str(path)],check=True,capture_output=True,timeout=10).stdout +def main(): + r=mod('r281',R/'tools/run_all_tests.py');outer=mod('owned270',r.SUPPORT/'owned_outer.py');plan=r.read(O/'input.json');fixed=plan['pins'];assert not (O/'execution.json').exists() + source=r.source_refs(R);player=r.default_player(R);docs={n:r.sha(D/n) for n in NAMES};assert source==plan['source_before'] and player==plan['default_before'] and docs==plan['doc4_before'] + prepath=A/'p23-02-native-input-copy-whole-preexecution-independent-review-r336.json';pre=r.read(prepath);assert pre['execution_allowed'] and not pre['blockers'] + for group in ['evidence_sha256','canonical_doc4_context_pins']: + for key,q in pre[group].items(): + f=Path(q.get('path',key));assert f.stat().st_size==q['bytes'] and r.sha(f)==q['sha256'] + root=r.read(O/'preexecution-root-verification.json');assert root['passed'] and root['review_sha256']==r.sha(prepath) + assert r.read(fixed['local_review']['path'])['finite_local_equivalence_accepted'] + auditpath=A/'p23-02-native-provider-fallback-static-independent-review-r280.json';audit=r.read(auditpath);assert audit['builtin_synchronous_fallback_supported'] and not audit['blockers'] + auditroot=r.read(A/'p23-02-native-provider-fallback-static-root-verification-r280.json');assert auditroot['passed'] and auditroot['review_sha256']==r.sha(auditpath) + stage=Path(plan['stage']);parent=Path(plan['parent']);candidate_stage=stage;baseline_stage=parent;budget=stage/'scripts/core/performance_budget.gd';original=budget.read_bytes();modified=Path(fixed['modified_budget']['path']).read_bytes();public=(stage/'project.godot').read_bytes();patched=False + assert hashlib.sha256(original).hexdigest()==plan['original_budget_sha256'] + def protect(): + assert r.source_refs(R)==source and r.default_player(R)==player and {n:r.sha(D/n) for n in NAMES}==docs and r.inventory(r.SUPPORT)==plan['support_inventory'] + assert r.inventory(baseline_stage,stage=True)==(plan['patched_baseline_stage'] if patched and stage==baseline_stage else plan['expected_baseline_stage']) + assert r.inventory(candidate_stage,stage=True)==(plan['patched_stage'] if patched and stage==candidate_stage else plan['expected_stage']) + for key,q in fixed.items(): + f=Path(q['path']);assert f.stat().st_size==q['bytes'] and r.sha(f)==q['sha256'],key + protect();oracle=unpack(fixed['oracle']['path']);assert len(oracle)==11487732 and hashlib.sha256(oracle).hexdigest()=='9df3c1b6f65dfd8be944cd5cab8c631f7533530dfef3820d9fa5d74a5b1ac30f' + phases=[];samples=[];error=None;cleanup=[];cleanup_errors=[] + try: + for mode in ['s6','baseline','candidate']: + stage=baseline_stage if mode=='baseline' else candidate_stage;budget=stage/'scripts/core/performance_budget.gd';public=(stage/'project.godot').read_bytes() + assert budget.read_bytes()==original, 'Budget original bytes before phase' + protect();assert not outer.native.helper['live_engines']() and shutil.disk_usage(A).free>=plan['capacity_floor_bytes'], 'No competing engine and capacity floor before candidate' + budget.write_bytes(modified);patched=True + protect();output=O/(mode+'-measurement');output.mkdir();ident=uuid.uuid4().hex;startup='TheTree-PCK-tests-'+ident+'-budget-startup';profile='TheTree-PCK-tests-'+ident+'-budget-runtime';assert not r.profile_path(startup).exists() and not r.profile_path(profile).exists() + env=r.fresh_environment(os.environ);env.update(THE_TREE_PACK_PROFILE_NAME=profile,THE_TREE_PACK_PROFILE_EXPECTED=str(r.profile_path(profile)),THE_TREE_PACK_PROFILE_REPORT=str(O/(mode+'-profile.json')),THE_TREE_RUNTIME_MONITOR_OUTPUT=str(output),THE_TREE_REPLAY_SNAPSHOT=fixed['fixture']['path'],THE_TREE_CANDIDATE_ORACLE=fixed['oracle']['path'],THE_TREE_PAIRED_CANDIDATE=mode,THE_TREE_PAIRED_SAMPLE=mode,THE_TREE_EXPECTED_BUDGET_SHA=fixed['modified_budget']['sha256'],THE_TREE_EXPECTED_PATH_SHA=fixed['original_path']['sha256']) + (stage/'project.godot').write_bytes(r.private_project(public,startup));phase=O/mode;argv=[fixed['engine']['path'],'--headless','--path',str(stage),'--script',fixed['starter_'+mode]['path'],'--verbose','--log-file',str(phase/'engine-native.log')] + result,capture=outer.run_phase(argv,phase,90,env,now_fn=r.now,dump_fn=r.write,sha_fn=r.sha,live_engines_fn=outer.native.helper['live_engines']);row=dict(mode=mode,result=result,capture=capture);phases.append(row);r.write(O/(mode+'-phase.json'),row) + rp=output/'report.json';report=r.read(rp) if rp.exists() else None + if report is not None:samples.append(report) + assert result and result['exit_code']==0 and not result['error_lines'] and not result['timed_out'] and capture['passed'], 'Owned candidate process and strict capture' + logs=''.join((phase/n).read_text() for n in ['stdout.log','stderr.log','engine-native.log']);assert 'Orphan StringName:' not in logs and 'unclaimed string names' not in logs + assert report and report['passed'] and not report['failures'] and report['pid']==result['pid'], 'Candidate report success and PID binding' + stdout=(phase/'stdout.log').read_text();assert stdout.count('NATIVE_ADAPTER_LIBRARY_REGISTERED')==1, 'Unique native registration marker' + if mode=='s6':assert report['mode']==mode and report['checks']==24 and stdout.count('PASS: 24 checks')==1 + else: + assert report['candidate']==mode and report['sample']==mode and report['checks']==15 and stdout.count('SDK whole647: 15 checks, 0 failures')==1, 'Candidate mode and whole15 report' + ref=report['after647'];raw=unpack(ref['path']);assert raw==oracle and len(raw)==ref['uncompressed_bytes'] and hashlib.sha256(raw).hexdigest()==ref['uncompressed_sha256'], 'Full whole647 original raw equality length and digest' + r.profile_gate(r.profile_path(profile),O/(mode+'-profile.json'),profile);assert sum(f.stat().st_size for f in O.rglob('*') if f.is_file())<=16*1048576, 'Postphase measurement16MiB cap' + (stage/'project.godot').write_bytes(public);budget.write_bytes(original);patched=False;protect() + except BaseException as caught:error=traceback.format_exc() + finally: + cleanup,cleanup_errors=outer.finish_captured(outer.OWNED) + if all(q['engine_ended'] is True for q in cleanup):budget.write_bytes(original);patched=False;(stage/'project.godot').write_bytes(public) + else:cleanup_errors.append('Budget/project restoration refused while owned child remains live') + guard_errors=[] + try:assert not patched and budget.read_bytes()==original;protect() + except BaseException as caught:guard_errors.append(type(caught).__name__+': '+str(caught)) + pairs=[] + if len(samples)==3 and all(q.get('passed') for q in samples): + old_sample,new_sample=samples[1],samples[2] + assert old_sample['candidate']=='baseline' and new_sample['candidate']=='candidate' + pairs=[dict(baseline_us=old_sample['manual_tick_us'],candidate_us=new_sample['manual_tick_us'],ratio=new_sample['manual_tick_us']/old_sample['manual_tick_us'],scope='One adjacent uninstrumented fixed cold646 observation; no stable/P95/budget acceptance')] + passed=error is None and not guard_errors and not cleanup_errors and len(phases)==3 and len(samples)==3 and len(pairs)==1 + r.write(O/'execution.json',dict(passed=passed,error=error,guard_errors=guard_errors,phases=phases,samples=samples,pairs=pairs,cleanup=cleanup,cleanup_errors=cleanup_errors,shared_Budget_restored_byteexact=not patched and budget.read_bytes()==original,input_source_default_doc4_preserved=not guard_errors,candidate_adopted=False,unit_accepted=False,performance_accepted=False,limitations=['One current input-copy S6 and adjacent whole647 baseline326/library327 versus candidate333/library334 pair only. Each whole state equals original oracle; three fresh owned engines sequential on same unchanged315 Guest/Runtime stage. Historical317 assertion remains a separate retained failed execution. No stable/P95/D10/50ms/final172/Main/render/OS/realtime x3/Windows/adoption/unit acceptance.'])) + print(json.dumps(dict(passed=passed,error=error,guard_errors=guard_errors,pairs=pairs)),flush=True);return 0 if passed else 1 +if __name__=='__main__':raise SystemExit(main()) diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/145-p23-02-native-input-copy-work-contract-r332.json b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/145-p23-02-native-input-copy-work-contract-r332.json new file mode 100644 index 0000000..394a67b --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/145-p23-02-native-input-copy-work-contract-r332.json @@ -0,0 +1,45 @@ +{ + "plan_id": "P23-02", + "parent": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-hot-loop-candidate-r326/input.json", + "bytes": 3185, + "sha256": "27141ccb37a741cc468bf57cf6e5da2250b729a2fa21bbda5fa1b7f15df7b254" + }, + "whole_review": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-hot-loop-whole-actual-independent-review-r330.json", + "bytes": 43971, + "sha256": "ed7ddfa923ccd23128e79e9ccdbc392ab3d44ef16a6c42e8f1f5b3eb94a71ef2" + }, + "reused_rejected_reconstruction": { + "path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-02-native-reconstruction-whole-pair-actual-independent-review-r214.json", + "bytes": 39797, + "sha256": "6f3de61c816a36f69cdb0c5decd63ec4699319c1e5d958a4b4dfce5dd1cb0450" + }, + "scope": [ + "native builtin StringName-only inventory input key sort; fresh TypedArray and same engine String comparator", + "native builtin fresh route copy at original publication position; custom script dispatch retained" + ], + "excluded": [ + "r204 reconstruction replay", + "new ownership/value caches", + "callback suppression", + "budget changes", + "new specification values", + "stage clone", + "SDK compile", + "full regression before related changes stabilize" + ], + "validation": [ + "static independent review", + "authenticated SDK133 bridge compile1/link1", + "local Runtime150 candidate/evaluation whole-state oracle and nearest boundary/route cache ownership fixtures", + "input key order Unicode and conversion/custom fallbacks", + "original S6 and adjacent fixed646 whole state comparison", + "exact final regression, required OS/Windows and full independent acceptance before unit closure" + ], + "capacity_floor_bytes": 553648128, + "formal_completed_added": 0, + "selected": false, + "adopted": false, + "unit_accepted": false +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/146-thetree-integrate-input-copy-r337.py b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/146-thetree-integrate-input-copy-r337.py new file mode 100644 index 0000000..c2525bf --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/146-thetree-integrate-input-copy-r337.py @@ -0,0 +1,46 @@ +# coding: utf-8 +from pathlib import Path +import json,hashlib,gzip,copy +R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');A=R/'artifacts/original-completion-2026-10-02';D=R/'docs/plans/original-completion-2026-10-02';O=A/'p23-02-native-input-copy-integration-r337';O.mkdir();B=O/'before';B.mkdir() +names=['IMPLEMENTATION_PLAN.md','PROGRESS_INTEGRATION.md','work_packages.json','progress_snapshot.json'] +for n in names:(B/n).write_bytes((D/n).read_bytes()) +def pin(p): + b=p.read_bytes();return dict(path=str(p),bytes=len(b),sha256=hashlib.sha256(b).hexdigest()) +old=json.loads((A/'p23-02-current-progress-disposition-r320.json').read_text()) +v={k:copy.deepcopy(old[k]) for k in ['plan_id','production','selected_working_candidate','conditions','Windows_only_blocked_ids','manual_deferred_not_waived']} +v.update(source_matrix=pin(A/'p23-02-current-progress-disposition-r320.json'),scope='Current r333/library334 finite evidence; 17 original conditions remain unaccepted',latest_implementation_candidate=pin(A/'p23-02-native-input-copy-candidate-r333/input.json'),latest_library=pin(A/'p23-02-native-input-copy-build-r334/libtree_numeric_core.macos.template_debug.dylib'),latest_local_review=pin(A/'p23-02-native-input-copy-local-actual-independent-review-r335.json'),latest_whole_review=pin(A/'p23-02-native-input-copy-whole-actual-independent-review-r336.json'),accepted_condition_count=0,remaining_condition_count=17,unit_accepted=False,formal_completion_allowed=False,packages=30,delivery_units=88,partial_credit=False,test_counts_used_as_completion=False,candidate_selected=False,candidate_adopted=False,next_action='Review remaining dominant synchronous Runtime/Guest operations and consolidate required changes; do not replay rejected r204 reconstruction or repeat full regression on this unselected finite trial') +assert len(v['conditions'])==17 and all(not q['accepted'] for q in v['conditions']) +for q in v['conditions']: + q['current_missing']='同一最終対象版で原条件全体を確認し受入統合。r333/library334局所・S6・全保存状態の有限証拠を条件全体へ拡張しない。' if q['id'] not in ['C08','X8'] else '同一最終Windows配布版の実機・表示倍率・viewport・操作・必要性能証拠' +matrix=A/'p23-02-current-progress-disposition-r337.json';matrix.write_text(json.dumps(v,ensure_ascii=False,indent=2)+'\n') +summary='P23-02着手中。制作r32と選定済み実装親r274/library275は保持。最新未選定・未採用候補r333/library334は、親r326の在庫入力キー整列と経路コピーだけをnative化。未捕捉std確保例外をビルド前に修復。bridge1/link1、SDKcompile0、既存stage再利用。局所4工程404/0、Runtime150候補105808bytes・評価後11411840bytes原golden全文一致。S6 24/0、両whole15/0、after647全11487732bytes原oracle全文一致を独立有限受理。単一隣接観測1037100→1010883us(約2.5279%短縮)だが約1.01秒停止が残り安定性能・50ms/P95/D10は未受入。r204再構築は既非採用のため再実装なし。原9横断8はすべて未受入、Windows C08/X8のみblock、手動Ctrl保持wheel/左ボタン保持dragは延期・未達・非免除。正式9/着手19/予定60、30パッケージ/88成果、部分点なし、今回正式完了追加0。' +wp=json.loads((D/'work_packages.json').read_text());p=next(q for q in wp if q['id']=='P23');u=next(q for q in p['remaining_deliverables'] if q['id']=='P23-02') +p['current_summary']=summary;p['updated_at_jst']='2026-10-12';u['progress_summary']=summary;u['updated_at_jst']='2026-10-12';u['acceptance_matrix_reference']=str(matrix) +u['remaining_gaps']=['原9条件C01-C09と横断8条件X1-X8は全未受入。版付き全文条件はcurrent r337 matrixを参照。','性能:候補約1.01秒同期停止。安定利益・50ms・P95・D10・実時間x3・通常OS操作追随は未達。','原全操作・小画面・保存再起動・境界中断・同版関連/最終必須全回帰と独立受入を統合する。','Windows C08/X8:同一最終配布版の実機倍率/viewport/操作/性能証拠。未確定値は設定しない。','手動Ctrl保持wheelと左ボタン保持dragは延期、免除しない。','未選定/未採用候補の有限成功を成果単位完了へ拡張しない。'] +assert u['state']=='in_progress' +for e in [str(matrix),str(D/'execution/CURRENT_NATIVE_INPUT_COPY_R332_R337.md')]: + if e not in u['evidence']:u['evidence'].append(e) +(D/'work_packages.json').write_text(json.dumps(wp,ensure_ascii=False,indent=2)+'\n') +ps=json.loads((D/'progress_snapshot.json').read_text());ps['integrated_at_jst']='2026-10-12';ps['current_native_input_copy_r337']=dict(plan_id='P23-02',summary=summary,matrix=pin(matrix),official_completed_added=0,unit_accepted=False,candidate_selected=False,candidate_adopted=False) +assert ps['current_delivery_state_counts']==dict(completed=9,in_progress=19,planned=60) +(D/'progress_snapshot.json').write_text(json.dumps(ps,ensure_ascii=False,indent=2)+'\n') +text='\n## P23-02 現着手・次に閉じる1件(r337、2026-10-12)\n\n'+summary+'\n\n全17条件・対象版・不足条件の現在authorityは `artifacts/original-completion-2026-10-02/p23-02-current-progress-disposition-r337.json`。詳細と保存証拠は `execution/CURRENT_NATIVE_INPUT_COPY_R332_R337.md`。依存P08/P22。過去の候補版に関する後続記載は履歴であり、最新対象版の受入証拠へ無条件転用しない。\n\n' +for n in ['IMPLEMENTATION_PLAN.md','PROGRESS_INTEGRATION.md']: + s=(D/n).read_text();i=s.index('\n');(D/n).write_text(s[:i+1]+text+s[i+1:]) +note='# P23-02 native入力整列・経路コピー r332–r337\n\n'+summary+'\n\n対象候補r333/library334、原制作r32、選定済み実装親r274/library275を区別する。最終受入対象版とWindows配布版は未確定。依存P08/P22。下表は原条件を変更せず、各条件は部分点なしで未受入を維持する。\n\n| ID | 全受入条件 | 状態 |\n|---|---|---|\n' +for q in v['conditions']:note+='| '+q['id']+' | '+q['condition'].replace('|',' / ')+' | '+('Windows実機block' if q['id'] in ['C08','X8'] else '着手中・未受入')+' |\n' +note+='\n条件ごとの全文説明・必要対象版・歴史証拠・不足条件はcurrent r337 matrixに保持。現在候補の有限証拠はbuild334、local335、whole336の入力・実行記録・独立レビュー・root。キー内部順/native分岐の直接観測やOOM実fault injectionは未実施で、静的catch支持に限定する。新sortのstd例外とconfig誤記は実行前に修復しbeforeソース/入力を保持した。経路再構築の既不採用r204を再実装していない。\n\n静的24、build前68、build実85、局所前39、局所実93、whole前43、whole実82の各root pinsをfresh再照合。制作ソース・既定保存先・stage・Budget/project・SDK・検証supportを保持/復元した。最終全172の追加実行0、SDKcompile0、stageclone0。必須最終回帰を免除せず、関連修正が安定した正確な最終版で実行する。\n\n次に閉じる1件はP23-02。約1秒残る同期処理について主要なRuntime/Guest処理を直接検討し、必要な関連変更をまとめる。性能不足を満たす修正がないまま微小変更の単一pairや全回帰を繰り返さない。完成、採用、安定性能の判定は行わない。\n\n保存コピーはcheckpoints/native-input-copy-r332-r337/manifest.json。全コピーは復元byte一致を確認し、原本を保持する。r337で変更前D4を保存し、旧レビューの文書contextを歴史証拠として保存した。\n' +(D/'execution/CURRENT_NATIVE_INPUT_COPY_R332_R337.md').write_text(note) +files=[] +for n in ['p23-02-native-input-copy-candidate-r333','p23-02-native-input-copy-build-r334','p23-02-native-input-copy-local-r335','p23-02-native-input-copy-whole-r336','p23-02-native-input-copy-integration-r337']: + files.extend(q for q in (A/n).rglob('*') if q.is_file()) +files.extend(q for q in A.glob('p23-02-native-input-copy-*') if q.is_file()) +files.append(matrix) +files.extend(Path('/private/tmp')/n for n in ['thetree-prepare-input-copy-r333.py','thetree-plan-input-copy-local-r335.py','thetree-plan-input-copy-whole-r336.py','thetree-integrate-input-copy-r337.py']) +dest=D/'checkpoints/native-input-copy-r332-r337';dest.mkdir();rows=[] +for i,q in enumerate(sorted(set(files))): + raw=q.read_bytes();compressed=len(raw)>10000 and q.suffix not in ['.cpp','.hpp','.inc','.zst'];stored=gzip.compress(raw,mtime=0) if compressed else raw;out=dest/(f'{i:03d}-'+q.name+('.gz' if compressed else ''));out.write_bytes(stored) + assert (gzip.decompress(out.read_bytes()) if compressed else out.read_bytes())==raw + rows.append(dict(original=pin(q),stored=pin(out),gzip=compressed)) +(dest/'manifest.json').write_text(json.dumps(dict(plan_id='P23-02',candidate='r333/library334',copies=rows,unit_accepted=False,performance_accepted=False),ensure_ascii=False,indent=2)+'\n');(dest/'.gdignore').write_text('');(dest/'README.md').write_text('# Native input-copy finite evidence r332–r337\n\nSources, input/build/local/whole evidence, independent receipts, root verifications and original document context are retained. All stored copies roundtrip to every original byte. No production adoption, performance or unit acceptance.\n') +print(dict(copies=len(rows),raw_bytes=sum(q['original']['bytes'] for q in rows),stored_bytes=sum(q['stored']['bytes'] for q in rows),official_completed_added=0)) diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/147-thetree-plan-input-copy-local-r335.py b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/147-thetree-plan-input-copy-local-r335.py new file mode 100644 index 0000000..a7d2baa --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/147-thetree-plan-input-copy-local-r335.py @@ -0,0 +1,30 @@ +# coding: utf-8 +from pathlib import Path +import json,hashlib,importlib.util,uuid,shutil +R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');A=R/'artifacts/original-completion-2026-10-02';O=A/'p23-02-native-input-copy-local-r335';C=A/'p23-02-native-input-copy-candidate-r333' +spec=importlib.util.spec_from_file_location('runner335',R/'tools/run_all_tests.py');r=importlib.util.module_from_spec(spec);spec.loader.exec_module(r) +def pin(p):return dict(path=str(p),bytes=p.stat().st_size,sha256=r.sha(p)) +review=A/'p23-02-native-input-copy-build-actual-independent-review-r334.json';assert r.read(review)['host_build_accepted'] +assert shutil.disk_usage(A).free>=528*1048576 and not (O/'input.json').exists() +v=r.read(A/'p23-02-native-reconstruction-local-r211/input.json');stage=A/'p23-02-native-guest-bulk-local-r315/stage' +library=A/'p23-02-native-input-copy-build-r334/libtree_numeric_core.macos.template_debug.dylib' +private=Path('/private/tmp')/('TheTree-input-copy-r335-'+uuid.uuid4().hex);private.mkdir();copied=private/'candidate.dylib';copied.write_bytes(library.read_bytes());assert copied.read_bytes()==library.read_bytes() +config=O/'candidate.gdextension';config.write_text('[configuration]\nentry_symbol = "the_tree_numeric_library_init"\ncompatibility_minimum = "4.7.2"\nreloadable = false\n\n[libraries]\nmacos.debug.arm64 = '+json.dumps(str(copied))+'\n') +specs=[q.copy() for q in v['specs']] +specs[2]=dict(name='keys',qa=str(O/'keys.gd'),expected_checks=31,case_count=4,label='Guest pipeline boundaries: ') +fixed={k:q for k,q in v['pins'].items() if k in ['engine','helper','run_all','profile_guard','fixture','oracle','custom_QA','golden_runtime','QA_local','QA_runtime','QA_parents','base124']} +fixed['key_base']=pin(A/'p23-02-native-guest-pipeline-boundaries-r195.gd') +for q in specs: + name=q['name'];qa=Path(q['qa']);fixed['QA_'+name]=pin(qa) + wrapper=(A/'p23-02-native-reconstruction-local-r211'/(( 'parents' if name=='parents' else 'boundaries' if name=='keys' else name)+'-guarded.gd')).read_text() + if name=='keys':wrapper=wrapper.replace(str(A/'p23-02-native-guest-pipeline-boundaries-r195.gd'),str(qa)) + # Prior wrappers used escaped Unicode in their literals. + prior=A/'p23-02-native-reconstruction-local-r209/access.gdextension' + wrapper=wrapper.replace(json.dumps(str(prior)),json.dumps(str(config))) + if name=='keys':wrapper=wrapper.replace(json.dumps(str(A/'p23-02-native-guest-pipeline-boundaries-r195.gd')),json.dumps(str(qa))) + out=O/(name+'-guarded.gd');out.write_text(wrapper);fixed['starter_'+name]=pin(out) +for k,p in dict(original_library=library,library=copied,config=config,host_review=review,host_root=A/'p23-02-native-input-copy-build-root-verification-r334.json',host_execution=A/'p23-02-native-input-copy-build-r334/execution.json',candidate_input=C/'input.json',native_cpp=C/'source/tree_numeric_core.cpp',native_hpp=C/'source/tree_core.hpp',runner=A/'p23-02-native-input-copy-local-r335.py',prepare=Path(__file__)).items():fixed[k]=pin(p) +v.update(parent=str(stage),stage=str(stage),expected_stage=r.inventory(stage,stage=True),pins=fixed,specs=specs,source_before=r.source_refs(R),default_before=r.default_player(R),doc4_before={n:r.sha(R/'docs/plans/original-completion-2026-10-02'/n) for n in v['doc4_before']},support_inventory=r.inventory(r.SUPPORT),scope='r333/library334 four finite local phases: existing nearest ownership/parent boundaries, input-key shapes, original150 Runtime oracle; no performance/adoption/unit acceptance',engine_processes=4,compiler_processes=0,full_regression_runs=0,expected_total_seconds=[5,45],stage_clones=0,library_copies=1,unit_accepted=False) +v.pop('repair_scope',None) +with (O/'input.json').open('x') as f:json.dump(v,f,ensure_ascii=False,indent=2);f.write('\n') +print(dict(pins=len(fixed),specs=specs,free=shutil.disk_usage(A).free)) diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/148-thetree-plan-input-copy-whole-r336.py b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/148-thetree-plan-input-copy-whole-r336.py new file mode 100644 index 0000000..6e1e70f --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/148-thetree-plan-input-copy-whole-r336.py @@ -0,0 +1,15 @@ +# coding: utf-8 +from pathlib import Path +import json,importlib.util,shutil +R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');A=R/'artifacts/original-completion-2026-10-02';O=A/'p23-02-native-input-copy-whole-r336';C=A/'p23-02-native-input-copy-candidate-r333';L=A/'p23-02-native-input-copy-local-r335' +sp=importlib.util.spec_from_file_location('plan336',R/'tools/run_all_tests.py');r=importlib.util.module_from_spec(sp);sp.loader.exec_module(r) +def pin(p):return dict(path=str(p),bytes=p.stat().st_size,sha256=r.sha(p)) +review=A/'p23-02-native-input-copy-local-actual-independent-review-r335.json' +assert r.read(review)['finite_local_equivalence_accepted'] and r.read(L/'execution.json')['passed'] +assert shutil.disk_usage(A).free>=528*1048576 +v=r.read(A/'p23-02-native-hot-loop-whole-r330/input.json');stage=Path(v['stage']);assert r.inventory(stage,stage=True)==v['expected_stage'] +fixed={k:q for k,q in v['pins'].items() if k in ['engine','helper','run_all','profile_guard','modified_budget','original_budget','original_path','fixture','oracle','original_s6','original_clock','QA_base','provider_review','provider_root']} +for k,p in dict(config_baseline=A/'p23-02-native-hot-loop-local-r329/candidate.gdextension',library_baseline=Path(r.read(A/'p23-02-native-hot-loop-local-r329/input.json')['pins']['private_library']['path']),config_candidate=L/'candidate.gdextension',new_library=A/'p23-02-native-input-copy-build-r334/libtree_numeric_core.macos.template_debug.dylib',library_candidate=Path(r.read(L/'input.json')['pins']['library']['path']),prepare=Path(__file__),runner=A/'p23-02-native-input-copy-whole-r336.py',QA=O/'whole.gd',QA_original=A/'p23-02-native-hot-loop-whole-r330/whole.gd',local_input=L/'input.json',local_review=review,local_root=L/'actual-root-verification.json',candidate_input=C/'input.json',candidate_guest=C/'scripts/guest_service.gd',candidate_runtime=C/'scripts/simulation_runtime.gd',host_review=A/'p23-02-native-input-copy-build-actual-independent-review-r334.json',host_root=A/'p23-02-native-input-copy-build-root-verification-r334.json',starter_s6=O/'s6-guarded.gd',starter_baseline=O/'baseline-guarded.gd',starter_candidate=O/'candidate-guarded.gd',diagnostic_reference=A/'p23-02-current-native-diagnostic-actual-independent-review-r323.json').items():fixed[k]=pin(p) +v.update(pins=fixed,source_before=r.source_refs(R),default_before=r.default_player(R),doc4_before={n:r.sha(R/'docs/plans/original-completion-2026-10-02'/n) for n in v['doc4_before']},support_inventory=r.inventory(r.SUPPORT),scope='Original S6 and one adjacent uninstrumented fixed646 pair baseline326/library327 versus candidate333/library334; each whole raw equals original647. No stable gain/budget/adoption/unit acceptance.',expected_total_seconds=[5,45],engine_processes=3,compiler_processes=0,stage_clones=0,library_copies=0,full_regression_runs=0) +with (O/'input.json').open('x') as f:json.dump(v,f,ensure_ascii=False,indent=2);f.write('\n') +print(dict(pins=len(fixed),free=shutil.disk_usage(A).free)) diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/149-thetree-prepare-input-copy-r333.py b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/149-thetree-prepare-input-copy-r333.py new file mode 100644 index 0000000..a26b8c0 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/149-thetree-prepare-input-copy-r333.py @@ -0,0 +1,68 @@ +# coding: utf-8 +from pathlib import Path +import hashlib,json,shutil +R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部') +A=R/'artifacts/original-completion-2026-10-02' +P=A/'p23-02-native-hot-loop-candidate-r326' +C=A/'p23-02-native-input-copy-candidate-r333' +assert not C.exists() and shutil.disk_usage(A).free>=528*1048576 +def pin(p): + b=p.read_bytes();return dict(path=str(p),bytes=len(b),sha256=hashlib.sha256(b).hexdigest()) +C.mkdir();(C/'source').mkdir();(C/'scripts').mkdir() +for rel in ['scripts/guest_service.gd','scripts/simulation_runtime.gd','source/tree_core.hpp','source/tree_numeric_core.cpp','source/guest_candidate_batch.inc']: + (C/rel).write_bytes((P/rel).read_bytes()) +p=C/'source/tree_numeric_core.cpp';s=p.read_text() +anchor=' static bool blocked(const ProjectionNames &n,Object *path, const Vector3i &cell) {' +helper=''' // Only StringName keys qualify. Conversion-sensitive and custom runtime + // cases retain the original script sorter. No owner values are retained. + static Array sorted_builtin_input_names(const ProjectionNames &n,Object *runtime,const Dictionary &inputs) { + auto original=[&]() -> Array {return runtime->call(n.k__sorted_name_keys,inputs);}; + if(!builtin(n,runtime,"res://autoload/simulation_runtime.gd")) return original(); + const Array keys=inputs.keys(); + std::vector> rows; + rows.reserve(keys.size()); + for(int64_t i=0;i result; + for(const auto &row:rows) result.push_back(row.second); + return result; + } + // Fresh writable typed output, matching the builtin append loop. Check + // the script at this original call position, after any route callbacks. + static Variant copy_builtin_guest_route(const ProjectionNames &n,Object *path,const TypedArray &route) { + if(!builtin(n,path,"res://scripts/world/path_service.gd")) return path->call(n.k__copy_path,route); + TypedArray copied; + for(int64_t i=0;i