Fix the P28-02-OPT registration documents (r04) for the continuing registration
The r03 S f651ce1 failed its formal OPT verification: the save sample of the migration attempt of a rejected out_of_range load stays in K. r04 extends decision D1 to that sample, adds only that statement to the SPEC section 2 sites and derives the fixed table again from the before record only. Docs only; the r03 task keeps its failure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
# P28-02-OPT 仕様(r03。原本の加算は whole-unit final の後だけ)
|
# P28-02-OPT 仕様(r04。原本の加算は whole-unit final の後だけ)
|
||||||
|
|
||||||
- 状態: 登録のための固定版です(候補 r01 と r02 を Root の照合で直したもの。r01・r02 は Root 制御フォルダの `opt-registration-proposal-r01/`・`-r02/` にそのまま保持)。`docs/plans/original-completion-2026-10-02/execution/p28-02/opt/SPEC.md` として main に固定し、その実 SHA を base にして、Root が通常の新規登録をします。§3 の決定 D1(案 B)を含みます。
|
- 状態: 登録のための固定版です(r04。候補 r01〜r03 と r04 の候補は Root 制御フォルダの `opt-registration-proposal-r01/`〜`-r04/` にそのまま保持)。`docs/plans/original-completion-2026-10-02/execution/p28-02/opt/SPEC.md` として main に固定し、その実 SHA を base にして、Root が新しい継続登録(project `the-tree-p28-02-opt-r04`、task `P28-02-OPT-R04`)をします(Root の決定: 案 1。既存のユーザーの「対象受入に必要な不具合を優先」の範囲、Opus への実装の委任、main の更新の許可を適用した Root の実装判断で、新たな人間の発言を主張する承認ではありません)。r03 で登録した `the-tree-p28-02-opt` の task `P28-02-OPT` は、repair_pending と失敗の履歴のまま残します。r03(main `a916841` に固定、SHA `6441437c…`)で登録した task P28-02-OPT の S `f651ce1` は、正式の validation で失敗しました(`opt/verify_opt.py` の after の既存の不具合が R・O で各1件: E3/load_from_path/out_of_range の K に、移行の試行の save の標本が残った。§3 (iii))。r04 は、その原因の箇所だけを §2・§3・§4・§7 に限定して足し、固定表を before の記録だけから導き直したものです。§3 の決定 D1(案 B)は、失敗した load の移行の試行の save の標本まで同じ扱いに広げます。全ての E の合格、固定表との完全一致、後の版の既存の不具合 0 件、§5 の3指標の規則、全 roster(192 suite)、独立レビュー、原本の 30/88 の分母は変えません。
|
||||||
- 前提:
|
- 前提:
|
||||||
- P28-02-DIAG は正式に完了しています(Q `fdb309f3bc81529135915429d2432a6644696311`、`execution/p28-02/DIAG_FORMAL_COMPLETION_FDB309F.json`)。T1 の選定の根拠です。
|
- P28-02-DIAG は正式に完了しています(Q `fdb309f3bc81529135915429d2432a6644696311`、`execution/p28-02/DIAG_FORMAL_COMPLETION_FDB309F.json`)。T1 の選定の根拠です。
|
||||||
- P28-02-EQ は正式に完了しています(S `9adbbee334548ac36cd49d68efc021abb7acd003`、Q `4e34e5209706e3e16a4860e65e52b90287722c36`、`execution/p28-02/EQ_FORMAL_COMPLETION_4E34E52.json`)。凍結した EQ(`execution/p28-02/eq/**`)が、この task の同等性の比較器です。
|
- P28-02-EQ は正式に完了しています(S `9adbbee334548ac36cd49d68efc021abb7acd003`、Q `4e34e5209706e3e16a4860e65e52b90287722c36`、`execution/p28-02/EQ_FORMAL_COMPLETION_4E34E52.json`)。凍結した EQ(`execution/p28-02/eq/**`)が、この task の同等性の比較器です。
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `autoload/simulation_runtime.gd` | `create_snapshot`、`_publish_snapshot`、`latest_snapshot` と `latest_digest`(宣言と getter、`:148-156`) | T1 と E5 の所有権 |
|
| `autoload/simulation_runtime.gd` | `create_snapshot`、`_publish_snapshot`、`latest_snapshot` と `latest_digest`(宣言と getter、`:148-156`) | T1 と E5 の所有権 |
|
||||||
| 同上 | `_restore_snapshot_internal` のうち `domain_events` を検証する文(`restored_domain_events`、`:788-790`)と確定する文(`:1346`)だけ | E4(§3) |
|
| 同上 | `_restore_snapshot_internal` のうち `domain_events` を検証する文(`restored_domain_events`、`:788-790`)と確定する文(`:1346`)だけ | E4(§3) |
|
||||||
| 同上 | `load_from_path` の pause の扱い(`:4225-4226`)と、`_finish_load_operation` の失敗の分岐のうち `operation == &"load"` の pause の復元と、同じ失敗の分岐の `_record_runtime_performance(&"load", …)`(記録しない。決定 D1) | E3(§3) |
|
| 同上 | `load_from_path` の pause の扱い(`:4225-4226`)と、`load_from_path` の移行の試行の `_record_runtime_performance(&"save", …)`(`:4235`。移行の時間を変数に保持し、受け入れた load だけ `_finish_load_operation` の後に記録する。決定 D1、r04)と、`_finish_load_operation` の失敗の分岐のうち `operation == &"load"` の pause の復元と、同じ失敗の分岐の `_record_runtime_performance(&"load", …)`(記録しない。決定 D1) | E3(§3) |
|
||||||
| `scripts/world/path_service.gd` | `create_snapshot` だけ | T1 |
|
| `scripts/world/path_service.gd` | `create_snapshot` だけ | T1 |
|
||||||
| `scripts/core/command_queue.gd` | `create_snapshot` だけ | T1 |
|
| `scripts/core/command_queue.gd` | `create_snapshot` だけ | T1 |
|
||||||
| `scripts/world/world_service.gd` | `create_snapshot` と `_create_geometry_snapshot` だけ | T1 |
|
| `scripts/world/world_service.gd` | `create_snapshot` と `_create_geometry_snapshot` だけ | T1 |
|
||||||
@@ -43,11 +43,12 @@ before の記録(EQ の S_eq native `native-9adbbee-r01`。R-A と O-A の sto
|
|||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| E5 outside_in の aliasing | 27、29、31、33、35、37(latest_snapshot / snapshot_published / state_updated × dict / array。defect: external_mutation_latest、cached_digest_aliasing、computed_latest_digest_changed) | `_publish_snapshot`(`simulation_runtime.gd:12616-12621`)が同じ dict を `latest_snapshot` と2つの signal に渡し、`latest_digest` を遅延で計算する(`:151-156`) | T1 の対象の箇所そのもの。OPT で直す |
|
| E5 outside_in の aliasing | 27、29、31、33、35、37(latest_snapshot / snapshot_published / state_updated × dict / array。defect: external_mutation_latest、cached_digest_aliasing、computed_latest_digest_changed) | `_publish_snapshot`(`simulation_runtime.gd:12616-12621`)が同じ dict を `latest_snapshot` と2つの signal に渡し、`latest_digest` を遅延で計算する(`:151-156`) | T1 の対象の箇所そのもの。OPT で直す |
|
||||||
| E4 restore/load の event stream の差し替え | 20 `E4/restore_snapshot`、21 `E4/load_from_path`(defect: event_stream_replaced_subscribers_not_carried) | `_restore_snapshot_internal` が新しい `DomainEventStream` で置き換え、購読を引き継がない(`:788`、`:1346`) | 最小の原因の修正: 検証は従来どおり一時のインスタンスで行い、確定の時に、今の `domain_events` のインスタンスへ同じ内容を `restore_snapshot` で入れる(`DomainEventStream.restore_snapshot` は購読に触れない)。確定の前に、今のインスタンスで restore が失敗しない条件(配送中でない、保留の配送が無い)を確かめ、原子性を保つ |
|
| E4 restore/load の event stream の差し替え | 20 `E4/restore_snapshot`、21 `E4/load_from_path`(defect: event_stream_replaced_subscribers_not_carried) | `_restore_snapshot_internal` が新しい `DomainEventStream` で置き換え、購読を引き継がない(`:788`、`:1346`) | 最小の原因の修正: 検証は従来どおり一時のインスタンスで行い、確定の時に、今の `domain_events` のインスタンスへ同じ内容を `restore_snapshot` で入れる(`DomainEventStream.restore_snapshot` は購読に触れない)。確定の前に、今のインスタンスで restore が失敗しない条件(配送中でない、保留の配送が無い)を確かめ、原子性を保つ |
|
||||||
| E3 load の失敗で K が変わる | R: 12〜17、O: 12〜15、17(E3/load_from_path の各入力。defect: K_changes。O の 16 は NA) | (i) `load_from_path` が既に paused でも `_clock.set_paused(true)` を呼び(`:4226`)、失敗の分岐が `_clock.set_paused(previous_paused)` で同じ値に戻す(`_finish_load_operation`)ので、kernel の `_pause_request_serial` が失敗ごとに +2 される(kernel 側は `simulation_kernel.gd:172-178`)。(ii) 同じ失敗の分岐が `_record_runtime_performance(&"load", …)` で `performance_budget` に標本を1つ足す(`_sample_counts.load` +1、`_samples`・`_totals` の load) | 最小の原因の修正: `load_from_path` の失敗の経路でだけ、(i) kernel の `paused` と `_pause_request_serial` を load の前の値に戻し、(ii) その失敗の試行の performance telemetry を記録しない(決定 D1)。成功の経路(`set_paused(true)` とその serial の +1、成功した load の状態・event・telemetry)と、他の load 系の操作は変えない。kernel のファイルは変えない |
|
| E3 load の失敗で K が変わる | R: 12〜17、O: 12〜15、17(E3/load_from_path の各入力。defect: K_changes。O の 16 は NA) | (i) `load_from_path` が既に paused でも `_clock.set_paused(true)` を呼び(`:4226`)、失敗の分岐が `_clock.set_paused(previous_paused)` で同じ値に戻す(`_finish_load_operation`)ので、kernel の `_pause_request_serial` が失敗ごとに +2 される(kernel 側は `simulation_kernel.gd:172-178`)。(ii) 同じ失敗の分岐が `_record_runtime_performance(&"load", …)` で `performance_budget` に標本を1つ足す(`_sample_counts.load` +1、`_samples`・`_totals` の load)。(iii) out_of_range の入力では、`load_from_path` が UNSUPPORTED_FORMAT を受けて自動の移行を試み(`:4228-4242`。移行は `MIGRATION_DOWNGRADE_UNSUPPORTED` で失敗し、ファイルは書かない)、移行の結果にかかわらず `_record_runtime_performance(&"save", …)`(`:4235`)で save の標本を1つ足す(`_sample_counts.save` +1、`_samples`・`_totals` の save。R・O とも scenario 14) | 最小の原因の修正: `load_from_path` の失敗の経路でだけ、(i) kernel の `paused` と `_pause_request_serial` を load の前の値に戻し、(ii) その失敗の試行の performance telemetry(load の標本と、(iii) 移行を試みた場合の save の標本)を記録しない(決定 D1)。成功の経路(`set_paused(true)` とその serial の +1、成功した load の状態・event・telemetry)と、他の load 系の操作は変えない。移行を伴って受け入れた load の save の標本は保つ(記録の位置が `_finish_load_operation` の後になる。指標ごとの値は同じ)。kernel のファイルは変えない |
|
||||||
|
|
||||||
- 決定 D1(案 B): Root が、既存のユーザーの「対象受入に必要な不具合を優先」の範囲、Opus への実装の委任、main の更新の許可を適用した実装判断です(新たな人間の発言を主張する承認ではありません)。
|
- 決定 D1(案 B): Root が、既存のユーザーの「対象受入に必要な不具合を優先」の範囲、Opus への実装の委任、main の更新の許可を適用した実装判断です(新たな人間の発言を主張する承認ではありません)。
|
||||||
- before の E3 の K_changes は (i) と (ii) の2つからなり、凍結した EQ の E3 の判定は、拒否の前後の K の層の全体(telemetry を含む全ての欄の bytes)を比べます。(i) だけでは後の版の「全ての E の合格」(OPT_CONTRACT_T1 §3)に届かないので、(ii) も同じ失敗の経路でだけ止めます。
|
- before の E3 の K_changes は (i) と (ii)、out_of_range ではさらに (iii) からなり、凍結した EQ の E3 の判定は、拒否の前後の K の層の全体(telemetry を含む全ての欄の bytes)を比べます。(i) だけでは後の版の「全ての E の合格」(OPT_CONTRACT_T1 §3)に届かないので、(ii) と (iii) も同じ失敗の経路でだけ止めます。
|
||||||
- 凍結 E3 の基準(失敗の前後で S/K/C が不変)は変えません。止めるのは、`load_from_path` の失敗の分岐の performance telemetry の記録だけです。成功した load と他の操作の telemetry は維持します。E3 の K から telemetry を除くという基準の除外(案 A)は採用しません。
|
- 凍結 E3 の基準(失敗の前後で S/K/C が不変)は変えません。止めるのは、`load_from_path` の失敗した試行の performance telemetry の記録(load の標本と、移行の試行の save の標本)だけです。成功した load(移行を伴う場合の save の標本を含む)と他の操作(`migrate_save_path` を含む)の telemetry は維持します。E3 の K から telemetry を除くという基準の除外(案 A)は採用しません。失敗の標本を除外して通すことはしません。
|
||||||
|
- r04 の補正の経緯: r03 の §3・D1・固定表は (iii) を見落としていました(r02 の表の導出が、失敗した load の K の変化のうち load の標本だけを確かめていたため)。S `f651ce1` の正式の validation で見つかりました(Root 制御フォルダの `FORMAL_VALIDATE_F651CE1_SUMMARY.json`、`OPT_F651CE1_E3_MIGRATION_TELEMETRY_FINDING.json`、`opt-registration-proposal-r04/OUT_OF_RANGE_ACTUAL_VALUES.json`)。
|
||||||
- 失敗の記録と通知は残します: `_complete_save_operation` による SAVE_LOAD_FAILED の event、`latest_save_operation_result`、`save_operation_completed` の signal、戻り値と payload の `duration_us`・`runtime_duration_us`・`message`・`save_path`。凍結 E3 は、この event の形、payload と `latest_save_operation_result` の一致、戻り値と payload の一致、`preload_pause_restored` と `loaded_clock_paused` を検査します。
|
- 失敗の記録と通知は残します: `_complete_save_operation` による SAVE_LOAD_FAILED の event、`latest_save_operation_result`、`save_operation_completed` の signal、戻り値と payload の `duration_us`・`runtime_duration_us`・`message`・`save_path`。凍結 E3 は、この event の形、payload と `latest_save_operation_result` の一致、戻り値と payload の一致、`preload_pause_restored` と `loaded_clock_paused` を検査します。
|
||||||
- 修正は、その不具合の原因だけを変えます。他の挙動(公開の順序と回数、event の ID と counter と全欄、成功した restore/load の状態)は、§4 の固定表の外で前の版と一致しなければなりません。
|
- 修正は、その不具合の原因だけを変えます。他の挙動(公開の順序と回数、event の ID と counter と全欄、成功した restore/load の状態)は、§4 の固定表の外で前の版と一致しなければなりません。
|
||||||
|
|
||||||
@@ -55,12 +56,12 @@ before の記録(EQ の S_eq native `native-9adbbee-r01`。R-A と O-A の sto
|
|||||||
|
|
||||||
- 後の版の EQ の記録は、OPT の提出 S で、凍結した `eq/run_eq.py --run <共通> --opt-changed <実際に変更した OPT ファイル>… --output …/eq-after-<S>-r01` で取ります(7 phase、version after、measured_source `S_opt-native-not-Q`)。その束は、凍結した `eq/verify_eq.py`(native-verify と同じ規則)で検証します。R-A と R-B、O-A と O-B の差 0(決定性)と、before と同じ全範囲(各 39 シナリオ)が必要です。
|
- 後の版の EQ の記録は、OPT の提出 S で、凍結した `eq/run_eq.py --run <共通> --opt-changed <実際に変更した OPT ファイル>… --output …/eq-after-<S>-r01` で取ります(7 phase、version after、measured_source `S_opt-native-not-Q`)。その束は、凍結した `eq/verify_eq.py`(native-verify と同じ規則)で検証します。R-A と R-B、O-A と O-B の差 0(決定性)と、before と同じ全範囲(各 39 シナリオ)が必要です。
|
||||||
- 版の間の比較は、凍結した `verify_eq.compare_bundles(before, after)` の結果の全体を使います(その `ok` は差が1件でもあれば false。EQ の設計どおり)。
|
- 版の間の比較は、凍結した `verify_eq.compare_bundles(before, after)` の結果の全体を使います(その `ok` は差が1件でもあれば false。EQ の設計どおり)。
|
||||||
- **許容する差は、before の記録だけから事前に導いて固定した表 `opt/registration/BEFORE_DEFECT_ALLOWED_DIFFERENCES.json`(SHA `3bd40d64dfacfa1cd81a130e67b278673b4621b9f5face8e71d63042faf2403d`、role ごとに 196 行)だけです。** 表は `derive_opt_allowed_differences.py`(Root 制御フォルダ、SHA `fe35d945…`)が、before の bundle(`4c54b665…`)の R-A/O-A の joined report・stored checker と、正式の native-verify の比較の結果(digest の方式)から作った r02 の表(`6b057c18…`)に、決定 D1 の行を同じ集合として含めたものです。後の版の観測は使っていません。
|
- **許容する差は、before の記録だけから事前に導いて固定した表 `opt/registration/BEFORE_DEFECT_ALLOWED_DIFFERENCES.json`(SHA `a763f0110284326afa5f9001a72261dcd1b9c729c5dd97f9cd82598b841ac9de`、role ごとに 196 行)だけです。** 表は `opt-registration-proposal-r04/derive_opt_allowed_differences_r04.py`(Root 制御フォルダ、SHA `3f569d94…`)が、before の bundle(`4c54b665…`)の R-A/O-A の joined report・stored checker と、正式の native-verify の比較の結果(digest の方式)から導いたものです。失敗した load ごとに K の変化の全体を取り、serial と、その試行が記録した指標の標本(load、移行を試みた行では save)以外の変化があれば導出を止めます。r03 の表(`3bd40d64…`)との違いは、role ごとに `_sample_counts` の 83 行(scenario 14 の checkpoint 1 以降)の after の値だけで、path の集合・行数・before の値は同じです。後の版の観測は使っていません。
|
||||||
- 表の各行は、比較の path(`compare_reports` の path の形そのもの)、before の値、after の値(または K の差の量)、原因です。内訳は role ごとに次のとおりです。
|
- 表の各行は、比較の path(`compare_reports` の path の形そのもの)、before の値、after の値(または K の差の量)、原因です。内訳は role ごとに次のとおりです。
|
||||||
- E5 の6行: 操作の直後の観測(checkpoint 2)で、`latest` の木の、before の defect に記録された mutation の path(dict は `systems/runtime/id_generator/counters/__p28_eq_probe`、array は `systems/runtime/domain_events/published_ids` の実際の index)。`digest_self_consistent`(false → true)。before の比較がその checkpoint で記録した digest の欄(R は product の `computed_latest_digest`、O は `harness_normalized_digest`。after の値は同じ行の checkpoint 1 の値)。
|
- E5 の6行: 操作の直後の観測(checkpoint 2)で、`latest` の木の、before の defect に記録された mutation の path(dict は `systems/runtime/id_generator/counters/__p28_eq_probe`、array は `systems/runtime/domain_events/published_ids` の実際の index)。`digest_self_consistent`(false → true)。before の比較がその checkpoint で記録した digest の欄(R は product の `computed_latest_digest`、O は `harness_normalized_digest`。after の値は同じ行の checkpoint 1 の値)。
|
||||||
- E4 の2行: `result.facts.event_stream` の `keys`(3つ → `replaced` だけ)と `replaced`(true → false)。
|
- E4 の2行: `result.facts.event_stream` の `keys`(3つ → `replaced` だけ)と `replaced`(true → false)。
|
||||||
- E3 の修正による K の差: 失敗した load の行の最後の checkpoint 以降の全ての scenario の checkpoint で、`K._pause_request_serial` の before と after の差が、before の実行の順序で、それまでに通った失敗した load の行の実際の増分(before の defect に記録された値、各 +2)の合計とちょうど等しいこと(R は最後に 12、O は 10)。成功した E4/load_from_path の +1 は両版で同じ。
|
- E3 の修正による K の差: 失敗した load の行の最後の checkpoint 以降の全ての scenario の checkpoint で、`K._pause_request_serial` の before と after の差が、before の実行の順序で、それまでに通った失敗した load の行の実際の増分(before の defect に記録された値、各 +2)の合計とちょうど等しいこと(R は最後に 12、O は 10)。成功した E4/load_from_path の +1 は両版で同じ。
|
||||||
- 決定 D1 による K の差: 同じ checkpoint の `K.performance_budget._sample_counts` で、`load` の件数だけが、before の実行の順序で、それまでに通った失敗した load の行の数(before の defect に記録された各 +1)だけ少ないこと(R は最後に 6、O は 5)。他の metric の件数は同じ。`_samples`・`_totals` は EQ の SPEC §3.2 の除外(実時間)のまま、両版の値つきで記録します。
|
- 決定 D1 による K の差: 同じ checkpoint の `K.performance_budget._sample_counts` で、before の実行の順序で、`load` の件数がそれまでに通った失敗した load の行の数(before の defect に記録された各 +1)だけ、`save` の件数がそれまでに通った移行を試みた失敗した load の行の数(out_of_range、before の defect に記録された各 +1)だけ少ないこと(R は最後に load 6・save 1、O は load 5・save 1)。他の metric の件数は同じ。`_samples`・`_totals` は EQ の SPEC §3.2 の除外(実時間)のまま、両版の値つきで記録します。
|
||||||
- 判定(`opt/check_opt.py`)。どれか1つでも満たさなければ不合格です。
|
- 判定(`opt/check_opt.py`)。どれか1つでも満たさなければ不合格です。
|
||||||
1. `compare_bundles` の差の集合が、表の行の集合(path・before の値・after の値)と**完全に一致**すること。表に無い差があっても、表の行の差が出なくても不合格です。仮の定数、path の前方一致での包括の許容、後の版の観測から許容を足すことはしません。
|
1. `compare_bundles` の差の集合が、表の行の集合(path・before の値・after の値)と**完全に一致**すること。表に無い差があっても、表の行の差が出なくても不合格です。仮の定数、path の前方一致での包括の許容、後の版の観測から許容を足すことはしません。
|
||||||
2. 主の 31 checkpoint(B1 と 30 分)の S・latest・latest_digest・K・C と、全イベント(E2)は差 0 件(表に行が無い)。
|
2. 主の 31 checkpoint(B1 と 30 分)の S・latest・latest_digest・K・C と、全イベント(E2)は差 0 件(表に行が無い)。
|
||||||
@@ -102,7 +103,7 @@ before の記録(EQ の S_eq native `native-9adbbee-r01`。R-A と O-A の sto
|
|||||||
| `opt/registration/BEFORE_DEFECT_ALLOWED_DIFFERENCES.json` | §4 の固定表(登録の時に固定。SHA を §4 に記載) |
|
| `opt/registration/BEFORE_DEFECT_ALLOWED_DIFFERENCES.json` | §4 の固定表(登録の時に固定。SHA を §4 に記載) |
|
||||||
| `opt/check_opt.py` | §4 の差の判定、§5 の改善の分類、§2 の変更の箇所の検査(base と S の差分の hunk が、§2 の表の箇所と、そこから呼ぶ新しい private 関数の中だけにあること)、各束の結合(engine を使わない) |
|
| `opt/check_opt.py` | §4 の差の判定、§5 の改善の分類、§2 の変更の箇所の検査(base と S の差分の hunk が、§2 の表の箇所と、そこから呼ぶ新しい private 関数の中だけにあること)、各束の結合(engine を使わない) |
|
||||||
| `opt/verify_opt.py` | `$BUILD_OUTPUT_DIR/p28-02-opt-evidence/` の束(EQ の before/after、DIAG の after、frame の after 3回と before 2回、RESTART、全 roster)を結合して判定します。束が無ければ失敗します |
|
| `opt/verify_opt.py` | `$BUILD_OUTPUT_DIR/p28-02-opt-evidence/` の束(EQ の before/after、DIAG の after、frame の after 3回と before 2回、RESTART、全 roster)を結合して判定します。束が無ければ失敗します |
|
||||||
| `opt/test_opt.py` | engine を使わない unittest(§2・§4・§5 の正負、束の欠落、偽の合格の拒否。凍結 E3 の判定が K の全体を比べ、telemetry だけの変化も K_changes にすること、失敗の SAVE_LOAD_FAILED の event と payload を消すと E3 が不合格になることを含む) |
|
| `opt/test_opt.py` | engine を使わない unittest(§2・§4・§5 の正負、束の欠落、偽の合格の拒否。凍結 E3 の判定が K の全体を比べ、telemetry だけの変化も K_changes にすること(移行の save の標本だけが残る場合を含む)、失敗の SAVE_LOAD_FAILED の event と payload を消すと E3 が不合格になることを含む) |
|
||||||
| `opt/PROGRESS.md`、`opt/IMPLEMENTATION.md` | 経緯と実装の判断 |
|
| `opt/PROGRESS.md`、`opt/IMPLEMENTATION.md` | 経緯と実装の判断 |
|
||||||
|
|
||||||
## 8. 順序
|
## 8. 順序
|
||||||
@@ -116,3 +117,6 @@ before の記録(EQ の S_eq native `native-9adbbee-r01`。R-A と O-A の sto
|
|||||||
## 9. 全ての失敗の保持
|
## 9. 全ての失敗の保持
|
||||||
|
|
||||||
- native・validation・review の失敗は、raw と SHA とともに保全し、成功に書き換えません。修正は、通常の repair で、同じ W で行います。E1〜E5 が1つでも崩れた変更は採用しません。
|
- native・validation・review の失敗は、raw と SHA とともに保全し、成功に書き換えません。修正は、通常の repair で、同じ W で行います。E1〜E5 が1つでも崩れた変更は採用しません。
|
||||||
|
- r03 の S `f651ce1` の記録(EQ・DIAG・collector 3回・RESTART の native、全 roster の r01(容量で停止)と r02(192 suite PASS)、正式の validation の失敗)は、その S の記録として保持します。r04 では製品の source が変わるので、§6 の後の版の全て(EQ、(a)、(b) の3回、(c)、(d))を r04 の S でやり直し、`f651ce1` の結果を流用しません。前の版の記録(EQ の before、DIAG `d6ce6dd`、frame の before 3回)は、§5・§6 の条件の一致を確かめて再利用します。
|
||||||
|
- r04 の実装は、新しい W に `f651ce1` の成果(製品の T1・E3・E4・E5 の変更と OPT の道具)を SHA の一致で引き継ぎ(Root 制御フォルダの引き継ぎの manifest)、§2・§3 の r04 の差分と、固定表・規則の更新だけを足します。全てを作り直すことはしません。
|
||||||
|
- r04 の S では、局所の確認と必要な native で、次も確かめます: 移行が成功した後に load(または restore)が失敗する分岐で、K が不変で save の標本が残らないこと。移行を伴って受け入れた load で、save の標本が1件、移行の `duration_us` の値で記録されること。通常の save の標本と、SAVE_LOADED・`save_operation_completed` の通知の順序と値が変わらないこと。受入の規則に合わなければ、失敗として保持します。後の版を見て固定表の許容を足すことはしません。
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
- 前の版の既存の不具合(SPEC §3)は、その原因の箇所だけで直します。
|
- 前の版の既存の不具合(SPEC §3)は、その原因の箇所だけで直します。
|
||||||
- E5: `latest_snapshot` と signal の引数を、受け手が入れ子の dict や配列を変えても、内部・`latest_snapshot`・`latest_digest` に影響しない形にします。公開の回数・順序・内容は変えません。複製の費用で T1 の改善を打ち消さないこと(SPEC §5 の (a) が「改善」でなければ採用しない)。
|
- E5: `latest_snapshot` と signal の引数を、受け手が入れ子の dict や配列を変えても、内部・`latest_snapshot`・`latest_digest` に影響しない形にします。公開の回数・順序・内容は変えません。複製の費用で T1 の改善を打ち消さないこと(SPEC §5 の (a) が「改善」でなければ採用しない)。
|
||||||
- E4: 検証は従来どおり一時の `DomainEventStream` で行い、確定の時に、今の `domain_events` のインスタンスへ同じ内容を `restore_snapshot` で入れます(購読をそのまま保つ)。確定の前に、今のインスタンスで restore が失敗しない条件を確かめ、原子性を保ちます。インスタンスを差し替えて購読を写す方法は使いません(同じ ID の再購読が失敗するため)。
|
- E4: 検証は従来どおり一時の `DomainEventStream` で行い、確定の時に、今の `domain_events` のインスタンスへ同じ内容を `restore_snapshot` で入れます(購読をそのまま保つ)。確定の前に、今のインスタンスで restore が失敗しない条件を確かめ、原子性を保ちます。インスタンスを差し替えて購読を写す方法は使いません(同じ ID の再購読が失敗するため)。
|
||||||
- E3: `load_from_path` の失敗の経路でだけ、kernel の `paused` と `_pause_request_serial` を load の前の値に戻し、その失敗の試行の performance telemetry(`_record_runtime_performance(&"load", …)`)を記録しません(SPEC §3 の決定 D1)。成功の経路(状態・event・telemetry)と、他の load 系の操作は変えません。失敗の記録と通知(SAVE_LOAD_FAILED の event、`latest_save_operation_result`、`save_operation_completed`、戻り値と payload の時間・message・save_path)は残します。kernel のファイルは変えません。
|
- E3: `load_from_path` の失敗の経路でだけ、kernel の `paused` と `_pause_request_serial` を load の前の値に戻し、その失敗の試行の performance telemetry(`_finish_load_operation` の `_record_runtime_performance(&"load", …)` と、移行を試みた場合の `load_from_path` の `_record_runtime_performance(&"save", …)`)を記録しません(SPEC §3 の決定 D1、r04)。移行を伴って受け入れた load の save の標本は、`_finish_load_operation` の後に記録して保ちます。移行が成功した後に load(または restore)が失敗する分岐でも、save の標本を残しません。この分岐、移行を伴う成功の load の save の標本(件数と値)、通常の save の標本と通知(SAVE_LOADED・`save_operation_completed`)の順序と値を、局所の確認(engine を使う診断は正式の証拠に数えない)で確かめ、結果を `opt/IMPLEMENTATION.md` に記録します。成功の経路(状態・event・telemetry)と、他の load 系の操作は変えません。失敗の記録と通知(SAVE_LOAD_FAILED の event、`latest_save_operation_result`、`save_operation_completed`、戻り値と payload の時間・message・save_path)は残します。kernel のファイルは変えません。
|
||||||
- 既に分かっている落とし穴を避けること:
|
- 既に分かっている落とし穴を避けること:
|
||||||
- autoload の script の class_name を静的に参照しない。Variant から `:=` で型を推論しない。StringName の key は文字の比較で並べる。一時ディレクトリは `BUILD_OUTPUT_DIR` か `tempfile.gettempdir()` の下に作る。
|
- autoload の script の class_name を静的に参照しない。Variant から `:=` で型を推論しない。StringName の key は文字の比較で並べる。一時ディレクトリは `BUILD_OUTPUT_DIR` か `tempfile.gettempdir()` の下に作る。
|
||||||
- `opt/check_opt.py` には、少なくとも次の拒否試験を置く:
|
- `opt/check_opt.py` には、少なくとも次の拒否試験を置く:
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
- §2 の表の外の箇所を変えた S を通すこと(新しい private 関数を表の外から呼ぶことを含む)
|
- §2 の表の外の箇所を変えた S を通すこと(新しい private 関数を表の外から呼ぶことを含む)
|
||||||
- SPEC §5 で (a) が「改善」でないのに採用すること、(b) の「悪化」を見落とすこと、「差は確認できない」の指標を「改善した」と書くこと
|
- SPEC §5 で (a) が「改善」でないのに採用すること、(b) の「悪化」を見落とすこと、「差は確認できない」の指標を「改善した」と書くこと
|
||||||
- `opt/test_opt.py` には、凍結 EQ の E3 の判定(`check_eq.check_e3`)について、少なくとも次の確認を置く(本物の判定の関数を、合成の E3 の記録で呼ぶ):
|
- `opt/test_opt.py` には、凍結 EQ の E3 の判定(`check_eq.check_e3`)について、少なくとも次の確認を置く(本物の判定の関数を、合成の E3 の記録で呼ぶ):
|
||||||
- 拒否の前後で K の telemetry だけ(`performance_budget` の load の件数・標本・合計)が変わっても K_changes になること、`_pause_request_serial` だけが変わっても K_changes になること
|
- 拒否の前後で K の telemetry だけ(`performance_budget` の load の件数・標本・合計)が変わっても K_changes になること、移行の save の標本だけが変わっても K_changes になること、`_pause_request_serial` だけが変わっても K_changes になること
|
||||||
- K・S・C が不変で、SAVE_LOAD_FAILED の event と一致する payload があれば、load の失敗の行に不具合が無いこと
|
- K・S・C が不変で、SAVE_LOAD_FAILED の event と一致する payload があれば、load の失敗の行に不具合が無いこと
|
||||||
- SAVE_LOAD_FAILED の event を消すと、または payload と `latest_save_operation_result` を食い違わせると、不具合として報告されること
|
- SAVE_LOAD_FAILED の event を消すと、または payload と `latest_save_operation_result` を食い違わせると、不具合として報告されること
|
||||||
- しないこと: git への書込み(commit を含む)、全回帰、§6 の native と比較の実行(Root が行います)。
|
- しないこと: git への書込み(commit を含む)、全回帰、§6 の native と比較の実行(Root が行います)。
|
||||||
|
|||||||
+2
-2
@@ -21,7 +21,7 @@
|
|||||||
{
|
{
|
||||||
"id": "P28-02-OPT3",
|
"id": "P28-02-OPT3",
|
||||||
"requirement_id": "P28-02",
|
"requirement_id": "P28-02",
|
||||||
"text": "原 acceptance(全状態・全イベント一致): 凍結 EQ を --opt-changed で OPT の S に実行した後の版の記録が verify_eq の検証に通り、compare_bundles の差の集合が、before の記録だけから事前に導いた固定表 opt/registration/BEFORE_DEFECT_ALLOWED_DIFFERENCES.json(SHA 3bd40d64…)の行の集合(path・before の値・after の値。E3 の K の差は、before の実行順の失敗した load の実際の増分の合計の _pause_request_serial と、決定 D1 による performance_budget の load の件数)と完全に一致する。主の31 checkpoint と全イベントの差は0。仮の定数・前方一致の包括の許容・after の観測からの許容の追加は無い。",
|
"text": "原 acceptance(全状態・全イベント一致): 凍結 EQ を --opt-changed で OPT の S に実行した後の版の記録が verify_eq の検証に通り、compare_bundles の差の集合が、before の記録だけから事前に導いた固定表 opt/registration/BEFORE_DEFECT_ALLOWED_DIFFERENCES.json(SHA a763f011…)の行の集合(path・before の値・after の値。E3 の K の差は、before の実行順の失敗した load の実際の増分の合計の _pause_request_serial と、決定 D1 による performance_budget の load の件数と、移行を試みた失敗の load の save の件数)と完全に一致する。主の31 checkpoint と全イベントの差は0。仮の定数・前方一致の包括の許容・after の観測からの許容の追加は無い。",
|
||||||
"validation_ids": [
|
"validation_ids": [
|
||||||
"p28-02-opt-unit",
|
"p28-02-opt-unit",
|
||||||
"p28-02-opt-eq-native-verify",
|
"p28-02-opt-eq-native-verify",
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
{
|
{
|
||||||
"id": "P28-02-OPT4",
|
"id": "P28-02-OPT4",
|
||||||
"requirement_id": "P28-02",
|
"requirement_id": "P28-02",
|
||||||
"text": "原 acceptance(キャッシュの古さ・所有権・不正入力): 後の版で E3(restore_snapshot・validate・load_from_path の全ての不正入力の原子的な拒否。凍結 E3 の判定は拒否の前後の S/K/C の全体を比べる)、E4(全ての無効化の経路)、E5(双方向の非干渉)が R と O の両方で既存の不具合 0 件(after_all_e_pass true)。前の版の不具合(E5 aliasing、E4 stream の差し替え、E3 load の K の変化)は SPEC §2・§3 の最小の原因の修正だけで直る。E3 の load の失敗の経路では pause の状態と serial を戻し、その失敗の試行の performance telemetry を記録しない(決定 D1。成功した load と他の操作の telemetry、失敗の SAVE_LOAD_FAILED の event・latest_save_operation_result・save_operation_completed は維持)。",
|
"text": "原 acceptance(キャッシュの古さ・所有権・不正入力): 後の版で E3(restore_snapshot・validate・load_from_path の全ての不正入力の原子的な拒否。凍結 E3 の判定は拒否の前後の S/K/C の全体を比べる)、E4(全ての無効化の経路)、E5(双方向の非干渉)が R と O の両方で既存の不具合 0 件(after_all_e_pass true)。前の版の不具合(E5 aliasing、E4 stream の差し替え、E3 load の K の変化)は SPEC §2・§3 の最小の原因の修正だけで直る。E3 の load の失敗の経路では pause の状態と serial を戻し、その失敗の試行の performance telemetry(load の標本と、移行を試みた場合の save の標本)を記録しない(決定 D1。成功した load(移行を伴う場合の save の標本を含む)と他の操作の telemetry、失敗の SAVE_LOAD_FAILED の event・latest_save_operation_result・save_operation_completed は維持)。",
|
||||||
"validation_ids": [
|
"validation_ids": [
|
||||||
"p28-02-opt-unit",
|
"p28-02-opt-unit",
|
||||||
"p28-02-opt-eq-native-verify",
|
"p28-02-opt-eq-native-verify",
|
||||||
|
|||||||
+1024
-1071
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"project": "the-tree-p28-02-opt",
|
"project": "the-tree-p28-02-opt-r04",
|
||||||
"models": {
|
"models": {
|
||||||
"implementer": "Claude Opus 5.5 Desktop governor under the user delegation; registered worker field codex is not the actual actor and no new Codex implementation is started",
|
"implementer": "Claude Opus 5.5 Desktop governor under the user delegation; registered worker field codex is not the actual actor and no new Codex implementation is started",
|
||||||
"reviewer": "claude-opus-5-5 (fresh, separate Desktop session, async delivery)"
|
"reviewer": "claude-opus-5-5 (fresh, separate Desktop session, async delivery)"
|
||||||
|
|||||||
+134
-123
@@ -1,128 +1,139 @@
|
|||||||
{
|
{
|
||||||
"status": "r03 for registration (candidates r01 and r02 kept unchanged in opt-registration-proposal-r01/ and -r02/); decision D1 = option B recorded in opt/SPEC.md §3. The tracked paths below are fixed to main by a docs-only commit; that actual SHA is the base_commit of the Root registration.",
|
"status": "r04 for registration (r01-r03 and the r04 candidate kept unchanged in opt-registration-proposal-r01/ .. -r04/). Root decision: option 1, a new continuing registration (project the-tree-p28-02-opt-r04, task P28-02-OPT-R04) so that the registered spec_sha256 and baseline match the r04 documents and the r03 task keeps its formal failure (repair_pending). Decision D1 extended in opt/SPEC.md §3: a rejected load_from_path records neither its load sample nor the save sample of its migration attempt; an accepted load keeps the save sample (recorded after _finish_load_operation). The tracked paths below are fixed to main by a docs-only commit; that actual SHA is the base_commit of the Root registration.",
|
||||||
"prepared_by": "Claude Opus 5.5 Desktop governor (local_a7f85421-3eed-4482-8030-c0dca669573a) under the user's delegation; registration is the owner's (Root's) action",
|
"prepared_by": "Claude Opus 5.5 Desktop governor (local_a7f85421-3eed-4482-8030-c0dca669573a) under the user's delegation; registration is the owner's (Root's) action",
|
||||||
"tracked_paths_to_commit": {
|
"tracked_paths_to_commit": {
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p28-02/opt/SPEC.md": "opt-registration-proposal-r03/SPEC.md",
|
"docs/plans/original-completion-2026-10-02/execution/p28-02/opt/SPEC.md": "opt-registration-proposal-r04-final/SPEC.md",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p28-02/opt/TASK_INSTRUCTIONS.md": "opt-registration-proposal-r03/TASK_INSTRUCTIONS.md",
|
"docs/plans/original-completion-2026-10-02/execution/p28-02/opt/TASK_INSTRUCTIONS.md": "opt-registration-proposal-r04-final/TASK_INSTRUCTIONS.md",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p28-02/opt/registration/ACCEPTANCE_BASELINE.json": "opt-registration-proposal-r03/ACCEPTANCE_BASELINE.json",
|
"docs/plans/original-completion-2026-10-02/execution/p28-02/opt/registration/ACCEPTANCE_BASELINE.json": "opt-registration-proposal-r04-final/ACCEPTANCE_BASELINE.json",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p28-02/opt/registration/REGISTRATION_PROPOSAL.json": "opt-registration-proposal-r03/REGISTRATION_PROPOSAL.json",
|
"docs/plans/original-completion-2026-10-02/execution/p28-02/opt/registration/REGISTRATION_PROPOSAL.json": "opt-registration-proposal-r04-final/REGISTRATION_PROPOSAL.json",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p28-02/opt/registration/CONFIG_PROPOSAL.json": "opt-registration-proposal-r03/CONFIG_PROPOSAL.json",
|
"docs/plans/original-completion-2026-10-02/execution/p28-02/opt/registration/CONFIG_PROPOSAL.json": "opt-registration-proposal-r04-final/CONFIG_PROPOSAL.json",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p28-02/opt/registration/BEFORE_DEFECT_ALLOWED_DIFFERENCES.json": "opt-registration-proposal-r03/BEFORE_DEFECT_ALLOWED_DIFFERENCES.json (byte-identical, SHA 3bd40d64dfacfa1cd81a130e67b278673b4621b9f5face8e71d63042faf2403d)"
|
"docs/plans/original-completion-2026-10-02/execution/p28-02/opt/registration/BEFORE_DEFECT_ALLOWED_DIFFERENCES.json": "opt-registration-proposal-r04-final/BEFORE_DEFECT_ALLOWED_DIFFERENCES.json (byte-identical to the r04 candidate, SHA a763f0110284326afa5f9001a72261dcd1b9c729c5dd97f9cd82598b841ac9de)"
|
||||||
|
},
|
||||||
|
"register_project": {
|
||||||
|
"project": "the-tree-p28-02-opt-r04",
|
||||||
|
"repo": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部",
|
||||||
|
"worktrees": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p28-02-opt-r04",
|
||||||
|
"baseline_file": "docs/plans/original-completion-2026-10-02/execution/p28-02/opt/registration/ACCEPTANCE_BASELINE.json",
|
||||||
|
"validations": {
|
||||||
|
"p28-02-opt-unit": {
|
||||||
|
"argv": [
|
||||||
|
"{python}",
|
||||||
|
"docs/plans/original-completion-2026-10-02/execution/p28-02/opt/test_opt.py"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"p28-02-opt-eq-native-verify": {
|
||||||
|
"argv": [
|
||||||
|
"{python}",
|
||||||
|
"docs/plans/original-completion-2026-10-02/execution/p28-02/eq/verify_eq.py",
|
||||||
|
"--project-root",
|
||||||
|
"."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"p28-02-opt-diag-native-verify": {
|
||||||
|
"argv": [
|
||||||
|
"{python}",
|
||||||
|
"docs/plans/original-completion-2026-10-02/execution/p28-02/diag/verify_diag.py",
|
||||||
|
"--project-root",
|
||||||
|
"."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"p28-02-opt-native-verify": {
|
||||||
|
"argv": [
|
||||||
|
"{python}",
|
||||||
|
"docs/plans/original-completion-2026-10-02/execution/p28-02/opt/verify_opt.py",
|
||||||
|
"--project-root",
|
||||||
|
"."
|
||||||
|
]
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"register_project": {
|
"validation_note": "The frozen EQ and DIAG verifiers run unchanged on the OPT S checkout and read the Root-placed after bundles at $BUILD_OUTPUT_DIR/p28-02-eq-evidence and $BUILD_OUTPUT_DIR/p28-02-diag-evidence. opt/verify_opt.py reads $BUILD_OUTPUT_DIR/p28-02-opt-evidence (EQ before/after copies for compare_bundles and the SPEC §4 rule, frame before/after, RESTART, full roster) and fails when any bundle is absent; unit PASS alone never accepts. Each check runs under the default validation limit; a measured need for a longer limit goes back to the owner as a normal policy decision, not a silent change."
|
||||||
"project": "the-tree-p28-02-opt",
|
},
|
||||||
"repo": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部",
|
"register_task_contract": {
|
||||||
"worktrees": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p28-02-opt",
|
"id": "P28-02-OPT-R04",
|
||||||
"baseline_file": "docs/plans/original-completion-2026-10-02/execution/p28-02/opt/registration/ACCEPTANCE_BASELINE.json",
|
"title": "意味を保つ軽量化:T1 snapshot の変換・コピーの改善(原 P28-02 の完了の条件)(r04 継続登録)",
|
||||||
"validations": {
|
"requirement_ids": [
|
||||||
"p28-02-opt-unit": {
|
"P28-02",
|
||||||
"argv": [
|
"P28"
|
||||||
"{python}",
|
],
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p28-02/opt/test_opt.py"
|
"acceptance_ids": [
|
||||||
]
|
"P28-02-OPT1",
|
||||||
},
|
"P28-02-OPT2",
|
||||||
"p28-02-opt-eq-native-verify": {
|
"P28-02-OPT3",
|
||||||
"argv": [
|
"P28-02-OPT4",
|
||||||
"{python}",
|
"P28-02-OPT5",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p28-02/eq/verify_eq.py",
|
"P28-02-OPT6",
|
||||||
"--project-root",
|
"P28-02-OPT7",
|
||||||
"."
|
"P28-02-OPT8",
|
||||||
]
|
"P28-02-OPT9",
|
||||||
},
|
"P28-02-OPT10",
|
||||||
"p28-02-opt-diag-native-verify": {
|
"P28-02-OPT11",
|
||||||
"argv": [
|
"P28-02-OPT12"
|
||||||
"{python}",
|
],
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p28-02/diag/verify_diag.py",
|
"spec_ref": "docs/plans/original-completion-2026-10-02/execution/p28-02/opt/SPEC.md",
|
||||||
"--project-root",
|
"base_commit": "TBD: actual main SHA that adds the r04 opt/SPEC.md, opt/TASK_INSTRUCTIONS.md and opt/registration/**",
|
||||||
"."
|
"worker": "codex",
|
||||||
]
|
"worker_note": "The registered worker field codex is not the actual actor: the Runner implementer services do not include Claude, so the field is kept as for EQ S5/S6. No new Codex (or Astra) implementation run will be started. The actual implementer is the Claude Opus 5.5 Desktop governor under the user delegation, recorded honestly in each owner submit receipt; Runner submit makes the commits.",
|
||||||
},
|
"allowed_paths": [
|
||||||
"p28-02-opt-native-verify": {
|
"autoload/simulation_runtime.gd",
|
||||||
"argv": [
|
"scripts/core/simulation_snapshot.gd",
|
||||||
"{python}",
|
"scripts/world/world_service.gd",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p28-02/opt/verify_opt.py",
|
"scripts/world/route_subslot_path_adapter.gd",
|
||||||
"--project-root",
|
"scripts/world/path_service.gd",
|
||||||
"."
|
"scripts/core/command_queue.gd",
|
||||||
]
|
"docs/plans/original-completion-2026-10-02/execution/p28-02/opt/**"
|
||||||
}
|
],
|
||||||
},
|
"depends_on": [],
|
||||||
"validation_note": "The frozen EQ and DIAG verifiers run unchanged on the OPT S checkout and read the Root-placed after bundles at $BUILD_OUTPUT_DIR/p28-02-eq-evidence and $BUILD_OUTPUT_DIR/p28-02-diag-evidence. opt/verify_opt.py reads $BUILD_OUTPUT_DIR/p28-02-opt-evidence (EQ before/after copies for compare_bundles and the SPEC §4 rule, frame before/after, RESTART, full roster) and fails when any bundle is absent; unit PASS alone never accepts. Each check runs under the default validation limit; a measured need for a longer limit goes back to the owner as a normal policy decision, not a silent change."
|
"resource_locks": [
|
||||||
|
"p28-02-opt-r04"
|
||||||
|
],
|
||||||
|
"validation_ids": [
|
||||||
|
"p28-02-opt-unit",
|
||||||
|
"p28-02-opt-eq-native-verify",
|
||||||
|
"p28-02-opt-diag-native-verify",
|
||||||
|
"p28-02-opt-native-verify"
|
||||||
|
],
|
||||||
|
"max_repair_attempts": null,
|
||||||
|
"allowed_paths_note": "Runner allowed_paths are file-level. The allowed sites inside each file are fixed by opt/SPEC.md §2 and enforced by opt/check_opt.py (diff hunks only inside those functions and statements, plus new private functions called only from them); scripts/core/simulation_snapshot.gd is listed by OPT_CONTRACT_T1 but is not to be changed."
|
||||||
|
},
|
||||||
|
"native_contract": {
|
||||||
|
"executor": "Root role only, after the worker submits S_opt (currently the Desktop governor by user delegation)",
|
||||||
|
"common_arguments": {
|
||||||
|
"readonly": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p28-01-perf-baseline/.runtime/P28-01-COLLECTOR/build/p28-01-readonly",
|
||||||
|
"fixture": "artifacts/original-completion-2026-10-02/p28-current1299-runtime-scale-build-candidate-native-r01/fixture/reference.variant (eb4f7700...)",
|
||||||
|
"engine": "/Applications/Godot.app/Contents/MacOS/Godot (c7cccbf8...)"
|
||||||
},
|
},
|
||||||
"register_task_contract": {
|
"runs_on_S_opt": [
|
||||||
"id": "P28-02-OPT",
|
"eq/run_eq.py --run <common> --opt-changed <each changed OPT file> --output artifacts/original-completion-2026-10-02/p28-02-opt/eq-after-<S>-r01",
|
||||||
"title": "意味を保つ軽量化:T1 snapshot の変換・コピーの改善(原 P28-02 の完了の条件)",
|
"diag/diag_p28_02.py --run <common> --output artifacts/original-completion-2026-10-02/p28-02-opt/phase-after-<S>-r01",
|
||||||
"requirement_ids": [
|
"p28-01/collector/collect_p28_01.py --run <common> --output artifacts/original-completion-2026-10-02/p28-02-opt/frame-after-<S>-r0{1,2,3}",
|
||||||
"P28-02",
|
"p28-01/restart/probe/restart_pair.py --run <common> --output artifacts/original-completion-2026-10-02/p28-02-opt/restart-after-<S>-r01",
|
||||||
"P28"
|
"tools/run_all_tests.py --project-root <frozen S checkout> --godot <engine> --output artifacts/original-completion-2026-10-02/p28-02-opt/full-roster-<S>-r01"
|
||||||
],
|
],
|
||||||
"acceptance_ids": [
|
"before_records": {
|
||||||
"P28-02-OPT1",
|
"EQ": "artifacts/original-completion-2026-10-02/p28-02-root-control-r01/native-9adbbee-r01 (S_eq, version before; qualified on Q_eq 4e34e52)",
|
||||||
"P28-02-OPT2",
|
"phase": "DIAG native bundle of S d6ce6dd (reused when the source map, DIAG files, engine, fixture and settings match)",
|
||||||
"P28-02-OPT3",
|
"frame": "full9 db9d613 (reused as one run) + artifacts/original-completion-2026-10-02/p28-02-opt/frame-before-r02 and -r03 (run on main 44bce91, product source map 651f7036..., summary FRAME_BEFORE_R02_R03_SUMMARY.json; P1 x1 averages 487.037 / 481.987 ms, P2 x3 P95 5126.595 / 5145.149 ms)"
|
||||||
"P28-02-OPT4",
|
|
||||||
"P28-02-OPT5",
|
|
||||||
"P28-02-OPT6",
|
|
||||||
"P28-02-OPT7",
|
|
||||||
"P28-02-OPT8",
|
|
||||||
"P28-02-OPT9",
|
|
||||||
"P28-02-OPT10",
|
|
||||||
"P28-02-OPT11",
|
|
||||||
"P28-02-OPT12"
|
|
||||||
],
|
|
||||||
"spec_ref": "docs/plans/original-completion-2026-10-02/execution/p28-02/opt/SPEC.md",
|
|
||||||
"base_commit": "TBD: actual main SHA that adds opt/SPEC.md and opt/TASK_INSTRUCTIONS.md",
|
|
||||||
"worker": "codex",
|
|
||||||
"worker_note": "The registered worker field codex is not the actual actor: the Runner implementer services do not include Claude, so the field is kept as for EQ S5/S6. No new Codex (or Astra) implementation run will be started. The actual implementer is the Claude Opus 5.5 Desktop governor under the user delegation, recorded honestly in each owner submit receipt; Runner submit makes the commits.",
|
|
||||||
"allowed_paths": [
|
|
||||||
"autoload/simulation_runtime.gd",
|
|
||||||
"scripts/core/simulation_snapshot.gd",
|
|
||||||
"scripts/world/world_service.gd",
|
|
||||||
"scripts/world/route_subslot_path_adapter.gd",
|
|
||||||
"scripts/world/path_service.gd",
|
|
||||||
"scripts/core/command_queue.gd",
|
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p28-02/opt/**"
|
|
||||||
],
|
|
||||||
"depends_on": [],
|
|
||||||
"resource_locks": [
|
|
||||||
"p28-02-opt"
|
|
||||||
],
|
|
||||||
"validation_ids": [
|
|
||||||
"p28-02-opt-unit",
|
|
||||||
"p28-02-opt-eq-native-verify",
|
|
||||||
"p28-02-opt-diag-native-verify",
|
|
||||||
"p28-02-opt-native-verify"
|
|
||||||
],
|
|
||||||
"max_repair_attempts": null,
|
|
||||||
"allowed_paths_note": "Runner allowed_paths are file-level. The allowed sites inside each file are fixed by opt/SPEC.md §2 and enforced by opt/check_opt.py (diff hunks only inside those functions and statements, plus new private functions called only from them); scripts/core/simulation_snapshot.gd is listed by OPT_CONTRACT_T1 but is not to be changed."
|
|
||||||
},
|
},
|
||||||
"native_contract": {
|
"measured_source_rule": "Every after value is recorded as run on S_opt, never as measured on Q (OPT_CONTRACT_T1 §5)."
|
||||||
"executor": "Root role only, after the worker submits S_opt (currently the Desktop governor by user delegation)",
|
},
|
||||||
"common_arguments": {
|
"credit": "EQ, DIAG add 0. P28-02 moves 23->24 only after the OPT final, the whole-unit independent review of the original work/acceptance, cross-cutting 6 and U1/U2, and the ledger. The P28 package stays in progress (P27, P28-03 pending).",
|
||||||
"readonly": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p28-01-perf-baseline/.runtime/P28-01-COLLECTOR/build/p28-01-readonly",
|
"improvement_rule": "Formally completed EQ SPEC §4 (lines 76-79): improvement claimed only when (a) I11 is 改善 and none of (a)(b-1)(b-2) is 悪化; (b) need not improve if not worse. OPT_CONTRACT_T1 §4 line 83 differs; EQ SPEC line 6 states its §3-§5 fix and replace that judgment, so EQ SPEC §4 is used unchanged (opt/SPEC.md §5).",
|
||||||
"fixture": "artifacts/original-completion-2026-10-02/p28-current1299-runtime-scale-build-candidate-native-r01/fixture/reference.variant (eb4f7700...)",
|
"decision_D1": {
|
||||||
"engine": "/Applications/Godot.app/Contents/MacOS/Godot (c7cccbf8...)"
|
"option": "B",
|
||||||
},
|
"where": "opt/SPEC.md §3",
|
||||||
"runs_on_S_opt": [
|
"basis": "Root implementation decision applying the existing user scope (prioritize defect fixes needed for the target acceptance), the Opus implementation delegation and the main update permission; not a claim of a new human statement",
|
||||||
"eq/run_eq.py --run <common> --opt-changed <each changed OPT file> --output artifacts/original-completion-2026-10-02/p28-02-opt/eq-after-<S>-r01",
|
"content": "load_from_path failure path stops recording its performance telemetry sample; success load and other operations keep their telemetry; the failure event SAVE_LOAD_FAILED, latest_save_operation_result and save_operation_completed stay; the frozen E3 rule (S/K/C unchanged across a rejection) is unchanged; option A (excluding telemetry from E3 K) is not adopted",
|
||||||
"diag/diag_p28_02.py --run <common> --output artifacts/original-completion-2026-10-02/p28-02-opt/phase-after-<S>-r01",
|
"unapproved_criterion_change": false,
|
||||||
"p28-01/collector/collect_p28_01.py --run <common> --output artifacts/original-completion-2026-10-02/p28-02-opt/frame-after-<S>-r0{1,2,3}",
|
"extended_r04": "the migration attempt of a rejected load_from_path records no save sample either; an accepted load keeps it, recorded after _finish_load_operation (opt/SPEC.md §2, §3)"
|
||||||
"p28-01/restart/probe/restart_pair.py --run <common> --output artifacts/original-completion-2026-10-02/p28-02-opt/restart-after-<S>-r01",
|
},
|
||||||
"tools/run_all_tests.py --project-root <frozen S checkout> --godot <engine> --output artifacts/original-completion-2026-10-02/p28-02-opt/full-roster-<S>-r01"
|
"r03_failure": {
|
||||||
],
|
"project": "the-tree-p28-02-opt",
|
||||||
"before_records": {
|
"task": "P28-02-OPT",
|
||||||
"EQ": "artifacts/original-completion-2026-10-02/p28-02-root-control-r01/native-9adbbee-r01 (S_eq, version before; qualified on Q_eq 4e34e52)",
|
"S": "f651ce174eef0d8a0c77fbcc2a23bd59fa6c53c9",
|
||||||
"phase": "DIAG native bundle of S d6ce6dd (reused when the source map, DIAG files, engine, fixture and settings match)",
|
"state": "repair_pending (kept)",
|
||||||
"frame": "full9 db9d613 (reused as one run) + artifacts/original-completion-2026-10-02/p28-02-opt/frame-before-r02 and -r03 (run on main 44bce91, product source map 651f7036..., summary FRAME_BEFORE_R02_R03_SUMMARY.json; P1 x1 averages 487.037 / 481.987 ms, P2 x3 P95 5126.595 / 5145.149 ms)"
|
"formal_validation_report": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p28-02-opt/runs/cbfbca0ed70c4f73a0a393f4cf4cdeff-validation.json",
|
||||||
},
|
"summary": "artifacts/original-completion-2026-10-02/p28-02-root-control-r01/FORMAL_VALIDATE_F651CE1_SUMMARY.json",
|
||||||
"measured_source_rule": "Every after value is recorded as run on S_opt, never as measured on Q (OPT_CONTRACT_T1 §5)."
|
"cause": "E3/load_from_path/out_of_range: the save sample of the migration attempt (R and O), outside the r03 §2/§3 and the r03 table"
|
||||||
},
|
},
|
||||||
"credit": "EQ, DIAG add 0. P28-02 moves 23->24 only after the OPT final, the whole-unit independent review of the original work/acceptance, cross-cutting 6 and U1/U2, and the ledger. The P28 package stays in progress (P27, P28-03 pending).",
|
"carry_over": "The new W takes the S f651ce1 product changes and OPT tools by SHA (Root control folder CARRY_OVER_F651CE1_TO_R04.json) and adds only the r04 differences."
|
||||||
"improvement_rule": "Formally completed EQ SPEC §4 (lines 76-79): improvement claimed only when (a) I11 is 改善 and none of (a)(b-1)(b-2) is 悪化; (b) need not improve if not worse. OPT_CONTRACT_T1 §4 line 83 differs; EQ SPEC line 6 states its §3-§5 fix and replace that judgment, so EQ SPEC §4 is used unchanged (opt/SPEC.md §5).",
|
|
||||||
"decision_D1": {
|
|
||||||
"option": "B",
|
|
||||||
"where": "opt/SPEC.md §3",
|
|
||||||
"basis": "Root implementation decision applying the existing user scope (prioritize defect fixes needed for the target acceptance), the Opus implementation delegation and the main update permission; not a claim of a new human statement",
|
|
||||||
"content": "load_from_path failure path stops recording its performance telemetry sample; success load and other operations keep their telemetry; the failure event SAVE_LOAD_FAILED, latest_save_operation_result and save_operation_completed stay; the frozen E3 rule (S/K/C unchanged across a rejection) is unchanged; option A (excluding telemetry from E3 K) is not adopted",
|
|
||||||
"unapproved_criterion_change": false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+30
-23
@@ -1,56 +1,63 @@
|
|||||||
{
|
{
|
||||||
"at_jst": "2026-10-22T11:17:04.576266+09:00",
|
"at_jst": "2026-10-22T16:15:16.268339+09:00",
|
||||||
"actual_Opus_governor_session": "local_a7f85421-3eed-4482-8030-c0dca669573a",
|
"actual_Opus_governor_session": "local_a7f85421-3eed-4482-8030-c0dca669573a",
|
||||||
"scope": "P28-02-OPT registration documents r03 (decision D1 = option B); docs only; original P28-02 conditions and the frozen EQ unchanged; original credit zero",
|
"scope": "P28-02-OPT registration documents r04 (Root decision option 1: new continuing registration the-tree-p28-02-opt-r04 / P28-02-OPT-R04; decision D1 extended to the save sample of the migration attempt of a rejected load_from_path); docs only; original P28-02 conditions and the frozen EQ unchanged; original credit zero",
|
||||||
"source_manifest": {
|
"source_manifest": {
|
||||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p28-02-root-control-r01/opt-registration-proposal-r03/MANIFEST.json",
|
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p28-02-root-control-r01/opt-registration-proposal-r04-final/MANIFEST.json",
|
||||||
"sha256": "2d556634012cc6c717358eb3f472ee704242b285372ce4a0e9b72fa64f729b75"
|
"sha256": "eb439554794a1e7b78d4f77a220dd43eb9036614909efaff646ffce3a3e4c302"
|
||||||
},
|
},
|
||||||
|
"candidate_manifest_sha256": "21f18ae1937df87cf5095bce5d42d55bdb8b814c694f9e7e641b01411b52e78b",
|
||||||
"kept_candidates": [
|
"kept_candidates": [
|
||||||
"opt-registration-proposal-r01",
|
"opt-registration-proposal-r01",
|
||||||
"opt-registration-proposal-r02"
|
"opt-registration-proposal-r02",
|
||||||
|
"opt-registration-proposal-r03",
|
||||||
|
"opt-registration-proposal-r04"
|
||||||
],
|
],
|
||||||
|
"replaces_in_main": {
|
||||||
|
"r03_commit": "a916841bfcd92b7d2ebc016d0b183e3f52ef6485",
|
||||||
|
"r03_task": "the-tree-p28-02-opt / P28-02-OPT (repair_pending, kept)"
|
||||||
|
},
|
||||||
"copies": [
|
"copies": [
|
||||||
{
|
{
|
||||||
"target": "docs/plans/original-completion-2026-10-02/execution/p28-02/opt/SPEC.md",
|
"target": "docs/plans/original-completion-2026-10-02/execution/p28-02/opt/SPEC.md",
|
||||||
"source": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p28-02-root-control-r01/opt-registration-proposal-r03/SPEC.md",
|
"source": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p28-02-root-control-r01/opt-registration-proposal-r04-final/SPEC.md",
|
||||||
"bytes": 20639,
|
"bytes": 25627,
|
||||||
"sha256": "6441437c73ad6d224def596653c3638df947efc3efd1162590149d6591b2b0f0",
|
"sha256": "f76d0610922ddd9eb7f360bdb3c7e2dd878fd87d798b7eede5589d4e52c1a965",
|
||||||
"byte_identical": true
|
"byte_identical": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"target": "docs/plans/original-completion-2026-10-02/execution/p28-02/opt/TASK_INSTRUCTIONS.md",
|
"target": "docs/plans/original-completion-2026-10-02/execution/p28-02/opt/TASK_INSTRUCTIONS.md",
|
||||||
"source": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p28-02-root-control-r01/opt-registration-proposal-r03/TASK_INSTRUCTIONS.md",
|
"source": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p28-02-root-control-r01/opt-registration-proposal-r04-final/TASK_INSTRUCTIONS.md",
|
||||||
"bytes": 5639,
|
"bytes": 6424,
|
||||||
"sha256": "6d0f2b38bb15d00e3e96bd1b269569df5961841fb1d9b82df89b249f1ec9c6b7",
|
"sha256": "862a46bcd3b0248c634d0a71fd91c3f89de570c466e7a0dc8c249159286209a6",
|
||||||
"byte_identical": true
|
"byte_identical": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"target": "docs/plans/original-completion-2026-10-02/execution/p28-02/opt/registration/ACCEPTANCE_BASELINE.json",
|
"target": "docs/plans/original-completion-2026-10-02/execution/p28-02/opt/registration/ACCEPTANCE_BASELINE.json",
|
||||||
"source": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p28-02-root-control-r01/opt-registration-proposal-r03/ACCEPTANCE_BASELINE.json",
|
"source": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p28-02-root-control-r01/opt-registration-proposal-r04-final/ACCEPTANCE_BASELINE.json",
|
||||||
"bytes": 7203,
|
"bytes": 7380,
|
||||||
"sha256": "7fe6146d9ee749bbe9aaeea7b9e9930c9703220a3badbc0ac177878251865b18",
|
"sha256": "1b02ec584a8d5b4005c1b3b049f56ab813b688725cda39fa17723e2d9668015b",
|
||||||
"byte_identical": true
|
"byte_identical": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"target": "docs/plans/original-completion-2026-10-02/execution/p28-02/opt/registration/REGISTRATION_PROPOSAL.json",
|
"target": "docs/plans/original-completion-2026-10-02/execution/p28-02/opt/registration/REGISTRATION_PROPOSAL.json",
|
||||||
"source": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p28-02-root-control-r01/opt-registration-proposal-r03/REGISTRATION_PROPOSAL.json",
|
"source": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p28-02-root-control-r01/opt-registration-proposal-r04-final/REGISTRATION_PROPOSAL.json",
|
||||||
"bytes": 8913,
|
"bytes": 10076,
|
||||||
"sha256": "31390ec5476cbf8e25bbe00966da18a53f5611926f110e366fe0140e07ff9aa7",
|
"sha256": "a3ba7aef20c58f286959986513d5b5902574a9815031b04beb95893c21e84902",
|
||||||
"byte_identical": true
|
"byte_identical": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"target": "docs/plans/original-completion-2026-10-02/execution/p28-02/opt/registration/CONFIG_PROPOSAL.json",
|
"target": "docs/plans/original-completion-2026-10-02/execution/p28-02/opt/registration/CONFIG_PROPOSAL.json",
|
||||||
"source": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p28-02-root-control-r01/opt-registration-proposal-r03/CONFIG_PROPOSAL.json",
|
"source": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p28-02-root-control-r01/opt-registration-proposal-r04-final/CONFIG_PROPOSAL.json",
|
||||||
"bytes": 1230,
|
"bytes": 1234,
|
||||||
"sha256": "f308ba92682f0e1509a3a52aa98634fd80e8a89070a408b1948881f3b4cb1bd9",
|
"sha256": "559cfe41e3168e486cae04e9a5fc8f15debc7ec031e472d54614bdc2368f0775",
|
||||||
"byte_identical": true
|
"byte_identical": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"target": "docs/plans/original-completion-2026-10-02/execution/p28-02/opt/registration/BEFORE_DEFECT_ALLOWED_DIFFERENCES.json",
|
"target": "docs/plans/original-completion-2026-10-02/execution/p28-02/opt/registration/BEFORE_DEFECT_ALLOWED_DIFFERENCES.json",
|
||||||
"source": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p28-02-root-control-r01/opt-registration-proposal-r03/BEFORE_DEFECT_ALLOWED_DIFFERENCES.json",
|
"source": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p28-02-root-control-r01/opt-registration-proposal-r04-final/BEFORE_DEFECT_ALLOWED_DIFFERENCES.json",
|
||||||
"bytes": 160508,
|
"bytes": 179981,
|
||||||
"sha256": "3bd40d64dfacfa1cd81a130e67b278673b4621b9f5face8e71d63042faf2403d",
|
"sha256": "a763f0110284326afa5f9001a72261dcd1b9c729c5dd97f9cd82598b841ac9de",
|
||||||
"byte_identical": true
|
"byte_identical": true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in New Issue
Block a user