Files
TheTree_mock/docs/plans/original-completion-2026-10-02/execution/p06-01-a06/IMPLEMENTATION.md
T
TakeshiandClaude Opus 5.5 f247d19325 P06-01: Fix review r01 findings for A06 reserve
Settle Mana raised above capacity between boundaries as recorded overflow
instead of rejecting saves or latching a fault, exclude destroyed facilities
from upkeep demand, and keep the depletion drill's outage sustained.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 20:56:57 +09:00

4.0 KiB
Raw Blame History

P06-01:A06 マナ有限残量契約の実装(2026-10-19)

ユーザーが MP-01-r02 推薦案を採用しました(decisions.json A06)。内容は初期100、容量300、世界樹の生成20/ゲーム内10分です。炉は、自然生成と需要の支払いを済ませた後に判定します。

製品への反映

  • scripts/mana/mana_reserve_cycle.gd:承認値と境界処理です。10分境界ごとに available=B+G+F、consumed=min(available,D)、after=min(C,available−consumed) を計算します。容量を超えた分は overflow として記録し、破棄します。イベント費用の返却などで境界の間に容量を超えた場合も、次の境界で同じく処理します。同じ境界は二度処理しません。境界を飛ばした場合は、各境界を順番に処理します。保存データは検証が通ってから反映し、不正なら何も変えません。炉の受理判定は furnace_offer_accepted(base_after 後の空きが100以上)です。
  • scripts/mana/mana_network_service.gd:get_total_consumer_demand(excluded_ids) を追加しました。登録済みの consumer の需要を合計します。無効化・停止中の consumer も含みます。Runtime の _mana_reserve_demand() が、破壊済み(DESTROYED)施設を除外して呼び出します。撤去済みの施設はネットワークから登録解除されます。
  • autoload/simulation_runtime.gd:MANA phase の最初で残量を確定してから、局所配電と全館ゲートを評価します。phase の順序は変えていません。新しいセーブは mana_reserve を持ちます。Operations の巻き戻し対象にも含めました。
  • 現行セーブは整数の残量を受け付けます。境界の間に容量を超えた値も読み込めます。
  • 旧セーブの移行:mana_reserve が無いセーブは、残量が0〜300の整数であれば、その値を保持して開始します。明示的な0は停止のまま保持します。300超・負値・非整数は拒否し、現在の状態を保持します。

試験

  • 新規:tests/s2/test_mana_reserve_cycle.gd(提案書の比較表の推薦列の値、炉判定の3例、改ざん拒否)、tests/s2/test_runtime_mana_reserve.gd(Runtimeでの境界処理、保存往復、旧0の移行、容量超過の拒否、枯渇と復帰)。
  • 既存の停電試験は「マナを0にすれば停電が続く」前提でした。A06では世界樹が次の境界で復帰させるため、停電を継続させる試験だけ tests/helpers/mana_outage.gd に置き換えました。これは配電を受けない無効 consumer で需要を足す方法です。

未了

  • 炉の人物適格性・収率の実接続、未定義13施設の需要、D05 の詳細は別承認です。
  • 全館の実プレイ、性能、Windows での受入は未実施です。原88の正式完了数は変わりません。

独立レビュー r01 の指摘と修正

候補 65534cf への判定は FAIL でした。修正した内容は次のとおりです。

  1. 境界の間にマナが増えた場合の不整合を直しました。以前は、読込を拒否するか、毎分 INVALID_FLOW を起こして全館が停止していました。現在は、次の境界で overflow として記録・破棄します。
  2. test_runtime_mana_depletion は停電が続く前提でした。ManaOutage に置き換え、旧セーブも mana_reserve を外して作るようにしました。また、Makefile の test-mvp に追加しました。
  3. 需要に破壊済みの施設が含まれていました。提案書の「撤去・破壊済みは除外」に合わせて除外し、A06 の記録文も同じ内容に訂正しました。

未検証として残す点

  • 世界樹の生成を0にする経路が無いため、提案書の比較表にある「生成0→0→通常」は適用外です。
  • 炉の receipt と配電投影の保存は、炉の実接続が別承認なので対象外です。