From 4fb8312a33cc1d9bfc5915edaa4e47672731e076 Mon Sep 17 00:00:00 2001 From: Takeshi Date: Tue, 13 Oct 2026 00:29:38 +0900 Subject: [PATCH] docs: preserve unapproved mana proposal and independent review findings --- .../mana-proposal-draft-r01/PROPOSAL.md | 77 + .../diagnostic-independent-review.json | 19 + .../mana-proposal-draft-r01/manifest.json | 48 + .../mana-proposal-draft-r01/proposal.json | 2421 +++++++++++++++++ .../review-disposition.json | 28 + .../multi-agent-dev-handoff/README.md | 2 + .../p24-03-next-scope-r01.json | 44 + .../plan_validation.json | 2 +- .../work_packages.json | 9 +- 9 files changed, 2647 insertions(+), 3 deletions(-) create mode 100644 docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/PROPOSAL.md create mode 100644 docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/diagnostic-independent-review.json create mode 100644 docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/manifest.json create mode 100644 docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/proposal.json create mode 100644 docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/review-disposition.json create mode 100644 docs/plans/original-completion-2026-10-02/execution/multi-agent-dev-handoff/p24-03-next-scope-r01.json diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/PROPOSAL.md b/docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/PROPOSAL.md new file mode 100644 index 0000000..ddee2e8 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/PROPOSAL.md @@ -0,0 +1,77 @@ +# 未承認・製品未反映:MP-01 マナ契約候補 + +承認用の候補案です。P06-01の受入や原88成果の完了を意味せず、分母にも加えません。製品・人物・資源・仕様原本・台帳は変更していません。正式試験と別セッションレビューはRunnerが実施します。 + +## 根拠と区別 + +原本 `docs/traceability/original/BASELINE.txt` 9.1は枯渇時の全館停止、10.6はマナ炉6×3・裏地下・奴隷消費を規定します。6.1/6.5の代替不可能・解雇売却不可・原則ロストしない人物は投入から除外します。数値、容量、生成周期、炉の収率は原本にありません。 + +現実装 `autoload/game_state.gd` の初期mana=100は残量です。`autoload/simulation_runtime.gd` のSTARTER_MANA_OUTPUT=100はネットワーク供給能力であり、100 Mana/10分という承認済み生成率ではありません。`maintenance_mana` は完成施設のconsumer需要に登録され、`mana_network_service.gd` の10ゲーム分周期で配電されます。これは現時点で残量から差し引く維持エネルギーではありません。ネットワークの優先配電・75%の縮退・10分の停止保持と、全館のreserve>0ゲートは別です。Runtimeの定期マナ更新はネットワーク評価と電力投影であり、有限残量helperの定期生成消費接続ではありません。 + +`tests/s2/test_mana_reserve_balance.gd` の残量7・容量10・時刻360、時刻370の生成5・需要8→残量4は試験入力です。承認済み製品値ではなく、今回その試験を実行していません。現sourceのSHA256と区分はJSONのsource_pinsに記録しました。候補の来歴はcandidate、原本・実装・fixtureと区別しています。 + +## 承認する候補範囲 + +| 案 | 初期Mana | 容量Mana | 世界樹生成Mana/10ゲーム分 | +|---|---:|---:|---:| +| 推薦 | 100 | 300 | 20 | +| 慎重 | 100 | 200 | 10 | +| 余裕 | 200 | 600 | 40 | + +全て未承認です。推薦は現初期残量100を維持する候補であり、100を原本値と主張しません。容量300は初期の3倍の有限バッファ、生成20は下記の通常需要16を4だけ上回り、全定義一基ずつの需要63には足りない設計上の選択です。周期10は現配電評価境界への整合を理由に提案します。全ゲームのバランス保証ではありません。 + +換算案は各完成・保有施設のmaintenance_manaを1周期のMana消費量とし、D=Σ(基数×定義値)とします。閉店・停止中も維持需要を計上し、枯渇による需要免除と無償復帰の振動を避けます。撤去・破壊済みは除外します。金維持費の承認A01と同一契約ではなく、別途承認するマナ案です。Manaは整数、時刻はゲーム内分、初回は初期時刻360から370までの一周期です。現実時間10秒=ゲーム内1時間との関係を生成量へ重複換算しません。 + +B=直前残量、C=容量、G=その周期の世界樹生成、F=確定した炉生成、D=需要。 + +- available=B+G+F +- consumed=min(available,D) +- shortage=D-consumed +- overflow=max(0,available-consumed-C) +- after=min(C,available-consumed) + +需要を賄ってから余剰を蓄積し、超過は明記して破棄します。after=0では需要ゼロ施設も含め全館停止。供給そのものは停止館外の世界樹から復帰可能とし、次の境界でafter>0かつ局所配電条件成立の場合だけ再開します。ネットワークstorageと残量を二重計上しません。ネットワーク供給100をGとして足すこともしません。供給能力・局所切断と残量の二つのゲートを保ちます。 + +## 需要と計算比較 + +JSONはdata/facilities配下の全37定義を列挙します。省略されたmaintenance_manaはFacilityDefinitionの現default=0と明示し、未定義施設のunknownとは区別します。各行のpath・definition_id・observed_maintenance_manaを入力に、全定義一基ずつの合計は63です。定義の存在を通常登録・稼働とみなしません。 + +歴史監査CURRENT_FACILITY_AUDIT.mdにある対応定義なし13施設(VIPスイート、ドミトリー、レストラン、屋台、カジノ、闘技場、高級ソープ、SM拷問室、覗き部屋、地下牢、マナ炉、ワープ、魔法砲台)は需要unknownです。魔力制御室3×2は原本マナ炉6×3の代替ではありません。現在の定義一覧と歴史監査の登録数も混同しません。 + +比較は候補式の計算のみです。F=0、初期時刻360、10分刻み。低負荷D=2(食堂一基)、通常D=16(食堂・厨房・大浴場・客EV・受付・警備員詰所各一基)、需要超過D=63(全37定義各一基)を120分計算します。zero・capacityは10分、供給喪失復帰は30分。全入力、各周期結果、shortage/overflowはJSONに保存しています。 + +| 条件 | 推薦の結果 | 慎重の結果 | 余裕の結果 | +|---|---:|---:|---:| +| 低負荷120分 | 300 Mana | 196 Mana | 600 Mana | +| 通常120分 | 148 Mana | 28 Mana | 488 Mana | +| 需要超過120分 | 0 Mana | 0 Mana | 0 Mana | +| 初期0・通常需要10分 | 4 Mana | 0 Mana | 24 Mana | +| 初期満容量・低負荷10分 | 300 Mana | 200 Mana | 600 Mana | +| 生成0→0→通常・需要16、30分 | 72 Mana | 62 Mana | 192 Mana | +| 通常10分後、同分再送 | 104 Mana | 94 Mana | 224 Mana | + +推薦の需要超過は100→57→14→0、3周期目にshortage29、その後は毎周期shortage43。通常は100+12×(20−16)=148。供給喪失復帰は100→84→68→72。初期0は生成20−需要16=4で次境界復帰、慎重案は生成10でshortage6、停止を維持します。満容量では需要を支払った余剰のみoverflow。余裕案は復帰しやすい一方、需要63には12周期で枯渇します。 + +同分再送は全案とも保存済み結果の返却だけで残量不変。同じ分で異なる入力は拒否します。局所供給線だけ喪失する場合もpower_available=falseを投影し、残量が正でも停止します。復帰は局所配電の停止保持条件を満たした評価境界で行い、残量が0なら再開しません。これらは設計比較で、実機受入結果ではありません。 + +## 炉の候補 + +原本寸法・裏地下を維持。所有する一般奴隷1名→100 Mana、一炉につき次の10分境界で一回の明示投入を提案します。ユニーク・代替不可能・売却不可・保護対象・ヒロイン・ライバル、客、一般従業員、分類不明な拘束者は除外。適格性が不明なら拒否します。自動投入は行わない案です。 + +投入前に所有・適格性・炉稼働・空き容量100以上を再検証。人物除去、Mana加算、投入IDと境界・対象ID・適格性根拠・前後残量の履歴を一つの保存可能な原子操作として確定する案です。容量不足では投入せず、人物を消費してoverflowを捨てる案にしません。確定前中断は無変更で取消、確定後中断は保存receiptから復帰して再消費しません。枯渇中の炉は稼働しないため世界樹で先に復帰します。これは将来実装契約の候補で、今回は実際の人物消費も資源変更もありません。 + +## 更新順序と保存 + +D05はdecisions.jsonのpendingです。現順序はAPPLY_COMMANDS→TIME_BOUNDARIES→MANA→CONSTRUCTION→LOGISTICS→FACILITY_COMPLETION→VITALS_AND_ENVIRONMENT→INCIDENTS_AND_EVENTS→FACILITY_QUEUES→AI_DECISIONS→PUBLISH_SNAPSHOT。推薦はこのphase列を保持し、MANA内で入力snapshot→生成/炉取引のstage→残量計算→局所配電→全館ゲート→receipt確定とします。 + +00:00の既承認Gold維持費は閉店・停電でも所有時間に応じて精算し、マナ停止を理由に取り消しません。06:00/18:00の勤務境界は保持。マナ評価後の物流・サービス完了・queueは確定電力を参照する案です。未完了サービスを完了として課金せず、EV/搬送は位置・荷物・ID・ルートを保持して停止、復帰で重複搬送しない案。日跨ぎ完了・費用時点・移動中の具体処理はD05承認前に製品へ接続しません。 + +旧GameStateは非負値を復元でき0を許し、get_resourceで欠落も0として参照されます。0は現在の投影では停止であり、無制限・満量の証拠ではありません。ネットワークsnapshot版1、save format1/2は新しい残量容量・生成率契約の承認を意味しません。 + +移行案は適用元版と新domain版を明示し、preview・検証済みbackup後に原子的適用。明示旧0は0・停止を維持。正値は承認容量内のみ保持。欠落、曖昧、負値、非整数、容量超過は拒否して元保存・live状態を保持し、黙って切り詰めません。新保存は残量・容量・最後の境界/flow・炉receipt・配電投影を保持。同境界同入力は再消費・イベント再発行なし、異入力/逆行は拒否。時間飛びは各10分境界を順に処理し、offline生成は別承認なしには行いません。 + +## 不足・承認待ちと検証 + +D04の値と換算、D05の境界処理、炉の対象判定・収率・履歴、新保存domain版と移行元適用条件を承認範囲として分けます。未定義13施設の需要、実際の配置基数、全ゲームの性能・経済バランスは未確定です。原P06-01は未達を維持します。 + +静的に参照sourceと計算を確認した成果です。正式proposal-consistency試験・別Claudeレビュー・承認・統合・完了確定はRunnerに委ね、合格を自己宣言しません。 diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/diagnostic-independent-review.json b/docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/diagnostic-independent-review.json new file mode 100644 index 0000000..452b867 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/diagnostic-independent-review.json @@ -0,0 +1,19 @@ +{ + "job_id": "9d8583a74456470ea73a2bd531feb8ca", + "state": "succeeded", + "project": "the-tree-mana-proposal", + "task_id": "MP-01", + "operation": "commander", + "created": 1791818716.49019, + "pid": 87293, + "started": 1791818716.544184, + "exit_code": 0, + "result": { + "action": "wait", + "task_id": "MP-01", + "reason": "【診断レビュー/Runner正式acceptanceではない】MP-01の全数値は未承認候補、製品未反映、原88成果P06-01は未完のままです。run・再修正・予算拡大・承認・統合は提案しません。source_pinsが配列でschemaの辞書と不一致な点と、raw SHAとnormalized Runner SHAの差は既知のため指摘に含めません。確認できたのはDATAに含まれる範囲だけです。\n(確認済み・誤りなし)\n・原本BASELINE 9.1(枯渇で全館停止)、10.6(マナ炉6x3・裏地下・奴隷消費)、6.1/6.5(代替不可・売却不可・原則ロストなし)との整合は取れています。\n・全37定義の列挙と合計63は再計算で一致しました。通常D=16(2+2+4+5+1+2)と低負荷D=2も一致しました。省略されたmaintenance_manaは4件(chapel・cleaning_room・general_store・infirmary)です。\n・式はmana_reserve_balance.gdの_plan(consumed=min、overflow=max(remaining-cap,0)、after=min)と一致します。fixtureの7+5-8=4も一致します。\n・3案×7シナリオの各周期を再計算しました。推薦は300/148/0/4/300/72/104、慎重は196/28/0/0/200/62/94、余裕は600/488/0/24/600/192/224で、表と全て一致します。\n・Runtime抜粋の_advance_manaは、ネットワーク評価と残量参照の投影だけで残量を差し引きません。_register_facility_mana_consumerもmaintenance_mana>0のときだけ登録します。これはPROPOSALの記述と整合します。\n(指摘)\n[HIGH-1] 炉の空き容量検証と式が矛盾しています。式のoverflowはB+G+F-consumed-Cで、Fと同一境界のGを含みます。一方、投入条件は「空き容量100以上」で、基準時点が不明です。例として推薦案でB=200・G=20・D=2・F=100なら、空き100で投入が通ります。しかしafter=318で、18が捨てられます。これは「人物を消費してoverflowを捨てる案にしない」に反します。訂正案は、検証を同一境界のB+G-D+F<=Cの事前計算に変えることです。複数炉が同一境界にある場合は、決定的な順序で累積して判定すると明記してください。比較表にもF>0の行がなく、この欠陥を検出できていません。F>0でヘッドルーム境界の行を追加してください。\n[HIGH-2] 「after==0で全館停止、復帰はafter>0のみ」の規則では、停止が固着する場合があります。B=0でG=D(例:G=16・D=16)のとき、毎周期shortage=0ですがafter=0のため、永久に停止します。D>Gでも、停止中の施設の需要まで全額計上されるため、残量0から世界樹だけでは復帰できません。かつ「枯渇中の炉は稼働しない」ので炉でも救えません。人手で需要を減らす以外の脱出がありません。訂正案は、停止ゲートをshortage>0(またはB+GDの場合に限ります。\n[MED-1] 余裕案の記述に誤りがあります。PROPOSAL.mdは「需要63には12周期で枯渇」としていますが、JSONの計算では9周期目(440-450)にshortage7で枯渇します(200→177→…→16→0)。「9周期目で枯渇」に訂正してください。\n[MED-2] 「供給喪失復帰」シナリオの定義が不整合です。G=0としながらglobal_stop=falseで、全額16を残量から支払っています。しかし本文は「局所供給線喪失ならpower_available=falseで停止」としています。世界樹生成が止まっただけなのか、ネットワーク供給も落ちたのかを区別し、後者なら停止中の需要計上の扱いと投影をflowに記録してください。\n[MED-3] 炉の経済性が弱く、原本の副作用にも触れていません。100 Manaは、需要超過(不足43/周期)の約2.3周期分に過ぎません。1炉1周期1回の制限もあり、63需要を炉で補うことはできません。意図した設計かをオーナー判断に明記してください。5.5の人身売買で書かれた「他従業員の忠誠度低下」に当たる副作用が、炉の消費でどうなるかも未記載です。対象に4.4の「破産女性客が奴隷化」した者を含めるかも、分類規則として明示してください。\n[LOW-1] 周期境界の仕様が不足しています。Runtime抜粋のadvance_one_minuteは毎分呼ばれます。残量更新を絶対分の10の倍数に固定するか、開始360基準にするかを明記してください。周期途中で完成・撤去した施設の需要の扱い(次境界から計上など)も書いてください。MANAフェーズはCONSTRUCTIONとFACILITY_COMPLETIONより前です。\n[LOW-2] 比較のinputsにB0・C・G・F・開始分が各行に明示されていません。instance_mixは全行同一の文です。再現性のため、各比較行にこれらを持たせてください。\n[LOW-3] 保存の整合に注意が必要です。mana_reserve_balance.gdのrestore_snapshotは厳密な9キーとVERSION=1です。Fや炉receiptを足すにはversion更新が必要です。これはPROPOSALの「別途承認」と整合するので、その旨を明記すれば足ります。旧保存で正値が容量超過だと拒否になります(慎重案は容量200)。拒否か切詰めかは、オーナー判断の一覧に明示してください。\n[LOW-4] infirmary.tresに異常があります。queue_staff_minという存在しないプロパティ、staff_max/capacityの重複、末尾に空行をはさんだmaintenance_gold、という問題です。「省略=default 0」の根拠が壊れた定義にあるため、注記してください。\n[LOW-5] 「風俗個室→adult_private_room」などの歴史監査の対応づけで、13件がunknownとして十分かは未検証です(監査原文が未提供)。\n(今回DATAに含まれず未検証の項目)\nGameState初期mana=100、STARTER_MANA_OUTPUT=100、mana_network_serviceの10ゲーム分周期、75%縮退と10分停止保持、decisions.jsonのD05 pending、CURRENT_FACILITY_AUDITの13件、test_mana_reserve_balance.gdです。\n(残件)\nHIGH-1・HIGH-2・MED-1・MED-2の訂正案を、実装担当(codex)へ渡す修正指示として準備する必要があります。反映後に、Runnerの正式なproposal-consistency検証と別セッションレビューを実施します。承認・統合・数値確定はオーナー判断です。いまは編集もrunもせず、待機します。" + }, + "finished": 1791818827.87073, + "stdout_tail": "{\n \"action\": \"wait\",\n \"task_id\": \"MP-01\",\n \"reason\": \"【診断レビュー/Runner正式acceptanceではない】MP-01の全数値は未承認候補、製品未反映、原88成果P06-01は未完のままです。run・再修正・予算拡大・承認・統合は提案しません。source_pinsが配列でschemaの辞書と不一致な点と、raw SHAとnormalized Runner SHAの差は既知のため指摘に含めません。確認できたのはDATAに含まれる範囲だけです。\\n(確認済み・誤りなし)\\n・原本BASELINE 9.1(枯渇で全館停止)、10.6(マナ炉6x3・裏地下・奴隷消費)、6.1/6.5(代替不可・売却不可・原則ロストなし)との整合は取れています。\\n・全37定義の列挙と合計63は再計算で一致しました。通常D=16(2+2+4+5+1+2)と低負荷D=2も一致しました。省略されたmaintenance_manaは4件(chapel・cleaning_room・general_store・infirmary)です。\\n・式はmana_reserve_balance.gdの_plan(consumed=min、overflow=max(remaining-cap,0)、after=min)と一致します。fixtureの7+5-8=4も一致します。\\n・3案×7シナリオの各周期を再計算しました。推薦は300/148/0/4/300/72/104、慎重は196/28/0/0/200/62/94、余裕は600/488/0/24/600/192/224で、表と全て一致します。\\n・Runtime抜粋の_advance_manaは、ネットワーク評価と残量参照の投影だけで残量を差し引きません。_register_facility_mana_consumerもmaintenance_mana>0のときだけ登録します。これはPROPOSALの記述と整合します。\\n(指摘)\\n[HIGH-1] 炉の空き容量検証と式が矛盾しています。式のoverflowはB+G+F-consumed-Cで、Fと同一境界のGを含みます。一方、投入条件は「空き容量100以上」で、基準時点が不明です。例として推薦案でB=200・G=20・D=2・F=100なら、空き100で投入が通ります。しかしafter=318で、18が捨てられます。これは「人物を消費してoverflowを捨てる案にしない」に反します。訂正案は、検証を同一境界のB+G-D+F<=Cの事前計算に変えることです。複数炉が同一境界にある場合は、決定的な順序で累積して判定すると明記してください。比較表にもF>0の行がなく、この欠陥を検出できていません。F>0でヘッドルーム境界の行を追加してください。\\n[HIGH-2] 「after==0で全館停止、復帰はafter>0のみ」の規則では、停止が固着する場合があります。B=0でG=D(例:G=16・D=16)のとき、毎周期shortage=0ですがafter=0のため、永久に停止します。D>Gでも、停止中の施設の需要まで全額計上されるため、残量0から世界樹だけでは復帰できません。かつ「枯渇中の炉は稼働しない」ので炉でも救えません。人手で需要を減らす以外の脱出がありません。訂正案は、停止ゲートをshortage>0(またはB+GDの場合に限ります。\\n[MED-1] 余裕案の記述に誤りがあります。PROPOSAL.mdは「需要63には12周期で枯渇」としていますが、JSONの計算では9周期目(440-450)にshortage7で枯渇します(200→177→…→16→0)。「9周期目で枯渇」に訂正してください。\\n[MED-2] 「供給喪失復帰」シナリオの定義が不整合です。G=0としながらglobal_stop=falseで、全額16を残量から支払っています。しかし本文は「局所供給線喪失ならpower_available=falseで停止」としています。世界樹生成が止まっただけなのか、ネットワーク供給も落ちたのかを区別し、後者なら停止中の需要計上の扱いと投影をflowに記録してください。\\n[MED-3] 炉の経済性が弱く、原本の副作用にも触れていません。100 Manaは、需要超過(不足43/周期)の約2.3周期分に過ぎません。1炉1周期1回の制限もあり、63需要を炉で補うことはできません。意図した設計かをオーナー判断に明記してください。5.5の人身売買で書かれた「他従業員の忠誠度低下」に当たる副作用が、炉の消費でどうなるかも未記載です。対象に4.4の「破産女性客が奴隷化」した者を含めるかも、分類規則として明示してください。\\n[LOW-1] 周期境界の仕様が不足しています。Runtime抜粋のadvance_one_minuteは毎分呼ばれます。残量更新を絶対分の10の倍数に固定するか、開始360基準にするかを明記してください。周期途中で完成・撤去した施設の需要の扱い(次境界から計上など)も書いてください。MANAフェーズはCONSTRUCTIONとFACILITY_COMPLETIONより前です。\\n[LOW-2] 比較のinputsにB0・C・G・F・開始分が各行に明示されていません。instance_mixは全行同一の文です。再現性のため、各比較行にこれらを持たせてください。\\n[LOW-3] 保存の整合に注意が必要です。mana_reserve_balance.gdのrestore_snapshotは厳密な9キーとVERSION=1です。Fや炉receiptを足すにはversion更新が必要です。これはPROPOSALの「別途承認」と整合するので、その旨を明記すれば足ります。旧保存で正値が容量超過だと拒否になります(慎重案は容量200)。拒否か切詰めかは、オーナー判断の一覧に明示してください。\\n[LOW-4] infirmary.tresに異常があります。queue_staff_minという存在しないプロパティ、staff_max/capacityの重複、末尾に空行をはさんだmaintenance_gold、という問題です。「省略=default 0」の根拠が壊れた定義にあるため、注記してください。\\n[LOW-5] 「風俗個室→adult_private_room」などの歴史監査の対応づけで、13件がunknownとして十分かは未検証です(監査原文が未提供)。\\n(今回DATAに含まれず未検証の項目)\\nGameState初期mana=100、STARTER_MANA_OUTPUT=100、mana_network_serviceの10ゲーム分周期、75%縮退と10分停止保持、decisions.jsonのD05 pending、CURRENT_FACILITY_AUDITの13件、test_mana_reserve_balance.gdです。\\n(残件)\\nHIGH-1・HIGH-2・MED-1・MED-2の訂正案を、実装担当(codex)へ渡す修正指示として準備する必要があります。反映後に、Runnerの正式なproposal-consistency検証と別セッションレビューを実施します。承認・統合・数値確定はオーナー判断です。いまは編集もrunもせず、待機します。\"\n}\n", + "stderr_tail": "" +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/manifest.json b/docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/manifest.json new file mode 100644 index 0000000..305a2e2 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/manifest.json @@ -0,0 +1,48 @@ +{ + "observed_at_jst": "2026-10-13T00:25:48.063475+09:00", + "status": "draft_unaccepted_not_approval_ready", + "original_counts": { + "packages": 30, + "delivery_units": 88, + "completed": 9 + }, + "applied_to_product": false, + "entries": [ + { + "path": "docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/PROPOSAL.md", + "sha256": "95024959e7c301c6a68a24de36dd6629e45b189f9d038f4397757124ba0bb41f", + "bytes": 9918, + "source": "/Users/korizatou114/Projects/TheTree-managed-worktrees/mana-proposal/MP-01-implement/docs/plans/original-completion-2026-10-02/execution/mana-proposal/PROPOSAL.md", + "scope": "unaccepted draft snapshot only; not original unit acceptance" + }, + { + "path": "docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/proposal.json", + "sha256": "aca6d781d5ce730c9f905b5dc817f27548b372b043beea68cf6de73761f6f0d2", + "bytes": 71713, + "source": "/Users/korizatou114/Projects/TheTree-managed-worktrees/mana-proposal/MP-01-implement/docs/plans/original-completion-2026-10-02/execution/mana-proposal/proposal.json", + "scope": "unaccepted draft snapshot only; not original unit acceptance" + } + ], + "root_checks": { + "source_pins_verified": 53, + "arithmetic_flows_verified": 126, + "demand_resources": 37, + "one_each_observed_load": 63, + "scope": "proposal arithmetic/source traceability only; no game or formal Runner acceptance" + }, + "known_formal_gaps": [ + "source_pins list differs from fixed mapping schema", + "formal proposal-consistency not executed", + "formal Runner reviewer not executed", + "managed worker stopped after two correction attempts; no unlimited retries" + ], + "read_only_content_review_job": "9d8583a74456470ea73a2bd531feb8ca", + "diagnostic_review_completed": true, + "content_findings": [ + "HIGH-1 furnace headroom moment ambiguous; same-boundary tree generation can create overflow after consuming actor; furnace F>0 boundary cases absent", + "HIGH-2 restore from zero only possible when generation exceeds retained demand; after==0 stop must preserve original depletion constraint; unconditional recovery claim needs qualification and owner decision", + "MED-1 generous excess demand reaches zero on ninth interval, not twelfth", + "MED-2 distinguish tree generation loss from local distribution loss; stock balance and local power result separate" + ], + "review_disposition": "review-disposition.json" +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/proposal.json b/docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/proposal.json new file mode 100644 index 0000000..64f0a02 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/proposal.json @@ -0,0 +1,2421 @@ +{ + "id": "MP-01", + "linked_original_delivery": "P06-01", + "status": "proposed_unapproved", + "applied_to_product": false, + "counting_scope": "approval artifact only; excluded from original 88; not acceptance of P06-01", + "base_commit": "0bdc4886cf631879792e0c0a873ecf97b98a64ea", + "recommended": { + "initial_amount": 100, + "storage_capacity": 300, + "world_tree_generation_per_interval": 20, + "interval_minutes": 10, + "provenance": "candidate_unapproved", + "unit": "integer Mana per 10 game minutes; stock in Mana", + "demand_conversion": "D=sum(instance_count * observed_maintenance_mana); candidate conversion of allocation demand to interval energy, not existing consumption", + "demand_policy": "completed retained facilities including closed/unpowered facilities; no depletion waiver; destroyed/demolished excluded", + "furnace": { + "input_quantity": 1, + "input_unit": "eligible generic slave actor", + "output_quantity": 100, + "output_unit": "Mana", + "eligibility": "owned generic nonunique slave only; exclude heroes, rivals, unique/irreplaceable/protected/not-sellable actors, visitors, employees, detained unclassified actors; uncertain classification rejects", + "footprint": "6x3 BACK underground", + "timing": "one explicitly confirmed queued transaction per furnace at next 10-minute boundary; no automatic input", + "atomicity": "revalidate eligibility, ownership, furnace readiness and headroom >=100; actor removal, Mana credit and immutable transaction receipt commit together or none", + "history": "persist transaction id, actor id and eligibility evidence, furnace id, boundary, before/after Mana, input/output and committed status in same save", + "interruption": "before commit cancel without removal; after commit restore receipt and never repeat; conflicting retry rejected; depleted furnace cannot initiate until natural generation restores power", + "actual_actor_consumption": false + } + }, + "alternatives": [ + { + "id": "conservative", + "initial_amount": 100, + "storage_capacity": 200, + "world_tree_generation_per_interval": 10, + "interval_minutes": 10 + }, + { + "id": "generous", + "initial_amount": 200, + "storage_capacity": 600, + "world_tree_generation_per_interval": 40, + "interval_minutes": 10 + } + ], + "demand_catalog": [ + { + "definition_id": "adult_private_room", + "path": "data/facilities/adult_private_room.tres", + "observed_maintenance_mana": 3, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "cafeteria", + "path": "data/facilities/cafeteria.tres", + "observed_maintenance_mana": 2, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "black_market", + "path": "data/facilities/expansion/black_market.tres", + "observed_maintenance_mana": 2, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "chapel", + "path": "data/facilities/expansion/chapel.tres", + "observed_maintenance_mana": 0, + "observation": "omitted; FacilityDefinition default 0", + "provenance": "current_implementation" + }, + { + "definition_id": "cleaning_room", + "path": "data/facilities/expansion/cleaning_room.tres", + "observed_maintenance_mana": 0, + "observation": "omitted; FacilityDefinition default 0", + "provenance": "current_implementation" + }, + { + "definition_id": "clinic", + "path": "data/facilities/expansion/clinic.tres", + "observed_maintenance_mana": 3, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "cold_storage", + "path": "data/facilities/expansion/cold_storage.tres", + "observed_maintenance_mana": 4, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "general_store", + "path": "data/facilities/expansion/general_store.tres", + "observed_maintenance_mana": 0, + "observation": "omitted; FacilityDefinition default 0", + "provenance": "current_implementation" + }, + { + "definition_id": "guild_counter", + "path": "data/facilities/expansion/guild_counter.tres", + "observed_maintenance_mana": 1, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "laundry", + "path": "data/facilities/expansion/laundry.tres", + "observed_maintenance_mana": 3, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "maintenance_workshop", + "path": "data/facilities/expansion/maintenance_workshop.tres", + "observed_maintenance_mana": 2, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "mana_control_room", + "path": "data/facilities/expansion/mana_control_room.tres", + "observed_maintenance_mana": 1, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "premium_room", + "path": "data/facilities/expansion/premium_room.tres", + "observed_maintenance_mana": 1, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "private_bath", + "path": "data/facilities/expansion/private_bath.tres", + "observed_maintenance_mana": 4, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "secret_tavern", + "path": "data/facilities/expansion/secret_tavern.tres", + "observed_maintenance_mana": 3, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "staff_dormitory", + "path": "data/facilities/expansion/staff_dormitory.tres", + "observed_maintenance_mana": 1, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "tea_lounge", + "path": "data/facilities/expansion/tea_lounge.tres", + "observed_maintenance_mana": 1, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "underground_guest_room", + "path": "data/facilities/expansion/underground_guest_room.tres", + "observed_maintenance_mana": 1, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "vip_private_salon", + "path": "data/facilities/expansion/vip_private_salon.tres", + "observed_maintenance_mana": 5, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "waste_processing", + "path": "data/facilities/expansion/waste_processing.tres", + "observed_maintenance_mana": 2, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "guest_corridor", + "path": "data/facilities/guest_corridor.tres", + "observed_maintenance_mana": 0, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "guest_elevator", + "path": "data/facilities/guest_elevator.tres", + "observed_maintenance_mana": 5, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "guest_stairs", + "path": "data/facilities/infrastructure/guest_stairs.tres", + "observed_maintenance_mana": 0, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "service_stairs", + "path": "data/facilities/infrastructure/service_stairs.tres", + "observed_maintenance_mana": 0, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "kitchen", + "path": "data/facilities/kitchen.tres", + "observed_maintenance_mana": 2, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "massage_room", + "path": "data/facilities/massage_room.tres", + "observed_maintenance_mana": 2, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "public_bath", + "path": "data/facilities/public_bath.tres", + "observed_maintenance_mana": 4, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "reception", + "path": "data/facilities/reception.tres", + "observed_maintenance_mana": 1, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "infirmary", + "path": "data/facilities/rescue/infirmary.tres", + "observed_maintenance_mana": 0, + "observation": "omitted; FacilityDefinition default 0", + "provenance": "current_implementation" + }, + { + "definition_id": "security_station", + "path": "data/facilities/security_station.tres", + "observed_maintenance_mana": 2, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "service_corridor", + "path": "data/facilities/service_corridor.tres", + "observed_maintenance_mana": 0, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "service_elevator", + "path": "data/facilities/service_elevator.tres", + "observed_maintenance_mana": 6, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "staff_door", + "path": "data/facilities/staff_door.tres", + "observed_maintenance_mana": 0, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "staff_waiting_room", + "path": "data/facilities/staff_waiting_room.tres", + "observed_maintenance_mana": 0, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "standard_room", + "path": "data/facilities/standard_room.tres", + "observed_maintenance_mana": 0, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "tavern", + "path": "data/facilities/tavern.tres", + "observed_maintenance_mana": 2, + "observation": "explicit", + "provenance": "current_implementation" + }, + { + "definition_id": "warehouse", + "path": "data/facilities/warehouse.tres", + "observed_maintenance_mana": 0, + "observation": "explicit", + "provenance": "current_implementation" + } + ], + "demand_catalog_scope": { + "resource_count": 37, + "one_each_sum": 63, + "registration_and_operation_not_assumed": true, + "unknown_original_facilities": [ + "VIPスイート", + "ドミトリー", + "レストラン", + "屋台", + "カジノ", + "闘技場", + "高級ソープ", + "SM拷問室", + "覗き部屋", + "地下牢", + "マナ炉", + "ワープ", + "魔法砲台" + ], + "unknown_demand": "unknown, never zero; not a full-game prediction; mana_control_room is not the original furnace" + }, + "ordering": { + "approval": "D05 pending", + "observed": "APPLY_COMMANDS -> TIME_BOUNDARIES -> MANA -> CONSTRUCTION -> LOGISTICS -> FACILITY_COMPLETION -> VITALS_AND_ENVIRONMENT -> INCIDENTS_AND_EVENTS -> FACILITY_QUEUES -> AI_DECISIONS -> PUBLISH_SNAPSHOT", + "recommended": "retain existing phases; at MANA boundary snapshot inputs, stage natural generation and eligible furnace transaction, calculate reserve once, allocate network once, project global zero gate, commit receipt before dependent phases", + "boundaries": "00:00 existing ownership-based Gold upkeep and settlement timing retained; 06:00/18:00 shift boundary retained. Power change affects subsequent logistics/service completion/queues; no charges or actor departure for uncompleted service. EV/cargo pause in place, retain ids/load/route; resume after restored power without duplicate delivery. Cross-boundary in-flight disposition requires D05 approval.", + "zero": "after==0 stops all facilities including zero-demand ones; world tree natural recovery is external to stopped facilities; next boundary generation pays standing demand first; resume only after>0 and local supply valid", + "replay": "persist minute, input snapshot/hash, full flow, network projection and furnace receipts; identical replay no second mutation/events; conflicting or backwards replay reject; catch up every 10-minute boundary, never one aggregate period" + }, + "legacy_zero": { + "observed": "GameState restore accepts nonnegative resource values including 0; Runtime projects reserve>0 gate; missing mana get_resource returns 0. No approved stock capacity or energy rate migration implied by network snapshot version 1 or save format versions 1/2.", + "recommended": "explicit versioned domain migration preview and verified backup; explicit old mana=0 stays 0 and stopped, never full or unlimited; positive stock preserved only if <= approved capacity; missing/ambiguous/noninteger/negative/overcapacity reject without changing original or live state", + "new_save": "approved new stock schema must persist capacity, amount, last boundary/flow and receipts; numeric domain version and source-version applicability need separate approval", + "recovery": "0 with restored world supply resumes only when boundary after>0; no offline generation unless separately approved" + }, + "open_decisions": [ + "D04: approve candidate initial/capacity/rate/period and maintenance conversion; no original numeric mandate", + "D05: boundary completion/cost, EV/cargo pause/resume and cross-midnight order remain unapproved", + "Approve furnace eligibility predicate, one actor ->100 Mana, timing/headroom rejection, atomic save receipts; actor classifications must be explicit before implementation", + "Approve legacy domain schema/version/applicability and missing/overcapacity rejection", + "Unknown 13 original facilities demand and runtime instance counts; no whole-game forecast", + "Separate network output/flow capacities from energy accounting; do not count reserve/network storage twice" + ], + "source_pins": [ + { + "path": "autoload/game_state.gd", + "sha256": "cf0e884910220e54c56b5875983e53de439af9d893be1e1b65c2121d2a30722f", + "provenance": "current_implementation" + }, + { + "path": "autoload/simulation_runtime.gd", + "sha256": "d52a995ae715542bbc550f68d35889540658275d12e04ae0b21ac276f5843f39", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/adult_private_room.tres", + "sha256": "d8501586416b5c57a8b3b3b2afd1c0143428d8a4fa1df7112e995bd36649df6d", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/cafeteria.tres", + "sha256": "86d540fe2d78b9dcdbe5a0af6e4a001f4cec54934636ed01deb25a943c79128a", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/expansion/black_market.tres", + "sha256": "c209d734c82487f6df4c03714618865d6a5f1d2cf991dc0056fe4bbad8f03a42", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/expansion/chapel.tres", + "sha256": "9b30a7c51712e7bb99c17870d1f03e3429ea9279851d88284545bb2eb5042fcb", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/expansion/cleaning_room.tres", + "sha256": "ae366cf67cbf117db7989c6b76092eb5a65229b93d35999a40d19b8260f95ad8", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/expansion/clinic.tres", + "sha256": "339cf22c68d7ab3cb1514b9e8d2ea63dc0772fe93918d70767c11cf7b6ee0e16", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/expansion/cold_storage.tres", + "sha256": "1aac824147b52b41e124d2ab2ce63c3bac58de2ec7fc447a5806a1cf9fa9ad99", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/expansion/general_store.tres", + "sha256": "76872e0375648b43f05fdc5581ccabe4aa6a166674c3b523980dd1cf0b6e6dc1", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/expansion/guild_counter.tres", + "sha256": "93e8736da4aab8a17b1c8e7831c9a7b8de7f32d0ec251aa9aa5c8cf859c8fd7b", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/expansion/laundry.tres", + "sha256": "2518ea2e5da12cf4f2997502bf50f00dd8145caca153fb3486b44b99881fdab4", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/expansion/maintenance_workshop.tres", + "sha256": "8bd10332a9f45a252febdc626f22f90507317fb4cff5b18b2526aacd1f1a176b", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/expansion/mana_control_room.tres", + "sha256": "55e4c52a049ff61ddf3d081ccb990a8572b64bc7cf37d3a0d52ca5a08cc32f25", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/expansion/premium_room.tres", + "sha256": "6665090e041f36df5809314cd171be228a94bf77d7e93f5b70be648db4705d98", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/expansion/private_bath.tres", + "sha256": "241b807e7fa3a1b9dc4bda0d2495e637155cdaea89a4234e37a121f00098499c", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/expansion/secret_tavern.tres", + "sha256": "f0a1372931078fa0f93dd5b9cec6df6b137975479aa706633fdf6a9be4cf1f62", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/expansion/staff_dormitory.tres", + "sha256": "8d7c7cd6dfe98d137f7fef62e35eb31f82f1ca282216a40df54ac81728101271", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/expansion/tea_lounge.tres", + "sha256": "77d1ace36c5e84f80c0e6d563ae973c7ff1cd12b56956afd4895cdcdd5771a67", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/expansion/underground_guest_room.tres", + "sha256": "cdfd0f8cd21812a9972485926dff27daaa6718af16aac1651894728b087bef9e", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/expansion/vip_private_salon.tres", + "sha256": "1c94a7a70393262fba82112c3f4a0cb67ad22728664f5ca408f450049d3657a7", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/expansion/waste_processing.tres", + "sha256": "9954855c7a07e425376a220c589989beb6ec95da3c5331316ef3615a60b45f1d", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/guest_corridor.tres", + "sha256": "d77ccf267e20a26ed70527d29e8d54e6fcab1df213f02d5a4e28ead4f705276b", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/guest_elevator.tres", + "sha256": "ad4fb3c439ac4ed90fe52f07e29ed7b4ff654c54d1c400c7c8e226da77127af7", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/infrastructure/guest_stairs.tres", + "sha256": "757c687b1ebe2a3f237fb28092cd5f01591f15b2bcd1b4e639042a24635a92c6", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/infrastructure/service_stairs.tres", + "sha256": "637217d867bcc99669d27c54b6d2c391c82a4a17356ab9a80c897ccaee38622c", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/kitchen.tres", + "sha256": "38197aa8a3e90c03a82e9ccdc88bb444af4eeb0349c41a39e0bdd7b188e7d5d3", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/massage_room.tres", + "sha256": "75ecf845fb3cfa8d3150f6b0dc90e901953469af512611384b70cc4878d21e85", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/public_bath.tres", + "sha256": "8ec259f48ed75c8ab2e5154a1caccf19f6be04331adbe774b877f0a2d8b2f778", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/reception.tres", + "sha256": "bed3de120a0e98c539771d1bb189111d095712f8ae25dfdf7cb2983efc0dee9f", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/rescue/infirmary.tres", + "sha256": "c3e861533971e369068ae9e42f71b660fa4ab3893c7c1f798fc367893befd943", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/security_station.tres", + "sha256": "69f3f518df7714d00c8e954e9c7405aa44b683dd274181cc3da832cc956815b3", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/service_corridor.tres", + "sha256": "5d79fbde201d657740efcba924f595bd7075e069b344d708e424dbebbdc2f254", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/service_elevator.tres", + "sha256": "35d552d5b96065413feccb50847e3cd7173e673896ce65afba238f90abc25132", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/staff_door.tres", + "sha256": "a993058bfd809ccdbbb9a61b9850259d7bf6e60003e57ccfa3972f6c29170752", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/staff_waiting_room.tres", + "sha256": "5c7a2f7f7c508102c4ee89401ad6348191b57d1ff65538acb9d450e464a3a46f", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/standard_room.tres", + "sha256": "89f0a3a861d66afa4c1338ff1ec919685cf338b93b8da9a2387ce85e7e5bc336", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/tavern.tres", + "sha256": "eb494ae6ab0d1b9e88ae0a38944609702e43c81a370a29cfb030af9ae46f523c", + "provenance": "current_implementation" + }, + { + "path": "data/facilities/warehouse.tres", + "sha256": "d0fcf0528da66da7b354ab5efaafe2483a7a76e05b324db255700ef73cdfc791", + "provenance": "current_implementation" + }, + { + "path": "docs/plans/original-completion-2026-09-29/execution/CURRENT_FACILITY_AUDIT.md", + "sha256": "cb0fedecc8006bfdb4aed97eb75dfdbae54e44dee4cf36c9149f8c99246008b8", + "provenance": "historical_audit_not_current_acceptance" + }, + { + "path": "docs/plans/original-completion-2026-10-02/decisions.json", + "sha256": "ad0673051b0fa601e525f05128e0b11e2dddd9d4bae6a3e0170bbf47da35efe9", + "provenance": "decision_register" + }, + { + "path": "docs/spec/acceptance/P06-01.json", + "sha256": "823db2a3b74f1582b1c23b2273e3b8262f679f4d5e6c18ad93757375df1d19ca", + "provenance": "original_or_task_contract" + }, + { + "path": "docs/spec/acceptance/P06-mana-proposal.json", + "sha256": "7bc73267db99c06dba7a897d3d6377919c0572acba1057a894accd0afcf1adc4", + "provenance": "original_or_task_contract" + }, + { + "path": "docs/traceability/original/BASELINE.txt", + "sha256": "75e4bdbdeb379c9269553f0c776bdb9cc96e01f2d6aa5ca650d132c63a8aeb1a", + "provenance": "original_or_task_contract" + }, + { + "path": "scripts/core/definition_registry.gd", + "sha256": "e2ce5e0512a92fec6989e1bb5f0e7da1dbb50bd9ee67a07b4624fdc8bc65814f", + "provenance": "current_implementation" + }, + { + "path": "scripts/core/save_migration_registry.gd", + "sha256": "22ac2cce07a02d1a2a9ac2109e7a0ecf9a0fbe675df4dc9d5249aa9ab3583f98", + "provenance": "current_implementation" + }, + { + "path": "scripts/core/save_service.gd", + "sha256": "0c158d3e6ee693b89814bf232c954e4757c5ff91dc9df03bb322c3e593e73617", + "provenance": "current_implementation" + }, + { + "path": "scripts/core/simulation_kernel.gd", + "sha256": "341c0c878c4894adbac628d0db6362ff69fc3347bdd9e61e50936e15dc2d1edb", + "provenance": "current_implementation" + }, + { + "path": "scripts/data/facility_definition.gd", + "sha256": "e90d56f7eab69c2a75238de465925c1c6df57ee6d44b3b81e7f6fcfd069af0a1", + "provenance": "current_implementation" + }, + { + "path": "scripts/mana/mana_network_service.gd", + "sha256": "96f195cf2a28b0966d12cd7c6fab86d13eae97c8342d07d70f52e598fbf49af9", + "provenance": "current_implementation" + }, + { + "path": "scripts/mana/mana_power_projection.gd", + "sha256": "2026467960e857349bcb18fb97b7753189be5f2de2be91a17e73e90146eba69e", + "provenance": "current_implementation" + }, + { + "path": "scripts/mana/mana_reserve_balance.gd", + "sha256": "cd462c279d37cc297466b64d9cf3fd71870df9508c1ff5f7189e22ddbdbef4b3", + "provenance": "current_implementation" + }, + { + "path": "tests/s2/test_mana_reserve_balance.gd", + "sha256": "07fe5f10e665cac3c8aa1b12e0c71878ffccc6d4b409250b317135345e3c8a05", + "provenance": "fixture_not_approved_balance" + } + ], + "comparisons": [ + { + "model": "recommended", + "scenario": "low", + "period_minutes": 120, + "inputs": { + "demand_per_interval": 2, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 100, + "generation": 20, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 118, + "global_stop": false + }, + { + "from_minute": 370, + "to_minute": 380, + "before": 118, + "generation": 20, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 136, + "global_stop": false + }, + { + "from_minute": 380, + "to_minute": 390, + "before": 136, + "generation": 20, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 154, + "global_stop": false + }, + { + "from_minute": 390, + "to_minute": 400, + "before": 154, + "generation": 20, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 172, + "global_stop": false + }, + { + "from_minute": 400, + "to_minute": 410, + "before": 172, + "generation": 20, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 190, + "global_stop": false + }, + { + "from_minute": 410, + "to_minute": 420, + "before": 190, + "generation": 20, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 208, + "global_stop": false + }, + { + "from_minute": 420, + "to_minute": 430, + "before": 208, + "generation": 20, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 226, + "global_stop": false + }, + { + "from_minute": 430, + "to_minute": 440, + "before": 226, + "generation": 20, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 244, + "global_stop": false + }, + { + "from_minute": 440, + "to_minute": 450, + "before": 244, + "generation": 20, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 262, + "global_stop": false + }, + { + "from_minute": 450, + "to_minute": 460, + "before": 262, + "generation": 20, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 280, + "global_stop": false + }, + { + "from_minute": 460, + "to_minute": 470, + "before": 280, + "generation": 20, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 298, + "global_stop": false + }, + { + "from_minute": 470, + "to_minute": 480, + "before": 298, + "generation": 20, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 16, + "after": 300, + "global_stop": false + } + ], + "result_amount": 300, + "replay": null + }, + { + "model": "recommended", + "scenario": "normal", + "period_minutes": 120, + "inputs": { + "demand_per_interval": 16, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 100, + "generation": 20, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 104, + "global_stop": false + }, + { + "from_minute": 370, + "to_minute": 380, + "before": 104, + "generation": 20, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 108, + "global_stop": false + }, + { + "from_minute": 380, + "to_minute": 390, + "before": 108, + "generation": 20, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 112, + "global_stop": false + }, + { + "from_minute": 390, + "to_minute": 400, + "before": 112, + "generation": 20, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 116, + "global_stop": false + }, + { + "from_minute": 400, + "to_minute": 410, + "before": 116, + "generation": 20, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 120, + "global_stop": false + }, + { + "from_minute": 410, + "to_minute": 420, + "before": 120, + "generation": 20, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 124, + "global_stop": false + }, + { + "from_minute": 420, + "to_minute": 430, + "before": 124, + "generation": 20, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 128, + "global_stop": false + }, + { + "from_minute": 430, + "to_minute": 440, + "before": 128, + "generation": 20, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 132, + "global_stop": false + }, + { + "from_minute": 440, + "to_minute": 450, + "before": 132, + "generation": 20, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 136, + "global_stop": false + }, + { + "from_minute": 450, + "to_minute": 460, + "before": 136, + "generation": 20, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 140, + "global_stop": false + }, + { + "from_minute": 460, + "to_minute": 470, + "before": 140, + "generation": 20, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 144, + "global_stop": false + }, + { + "from_minute": 470, + "to_minute": 480, + "before": 144, + "generation": 20, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 148, + "global_stop": false + } + ], + "result_amount": 148, + "replay": null + }, + { + "model": "recommended", + "scenario": "excess", + "period_minutes": 120, + "inputs": { + "demand_per_interval": 63, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 100, + "generation": 20, + "demand": 63, + "consumed": 63, + "shortage": 0, + "overflow": 0, + "after": 57, + "global_stop": false + }, + { + "from_minute": 370, + "to_minute": 380, + "before": 57, + "generation": 20, + "demand": 63, + "consumed": 63, + "shortage": 0, + "overflow": 0, + "after": 14, + "global_stop": false + }, + { + "from_minute": 380, + "to_minute": 390, + "before": 14, + "generation": 20, + "demand": 63, + "consumed": 34, + "shortage": 29, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 390, + "to_minute": 400, + "before": 0, + "generation": 20, + "demand": 63, + "consumed": 20, + "shortage": 43, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 400, + "to_minute": 410, + "before": 0, + "generation": 20, + "demand": 63, + "consumed": 20, + "shortage": 43, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 410, + "to_minute": 420, + "before": 0, + "generation": 20, + "demand": 63, + "consumed": 20, + "shortage": 43, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 420, + "to_minute": 430, + "before": 0, + "generation": 20, + "demand": 63, + "consumed": 20, + "shortage": 43, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 430, + "to_minute": 440, + "before": 0, + "generation": 20, + "demand": 63, + "consumed": 20, + "shortage": 43, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 440, + "to_minute": 450, + "before": 0, + "generation": 20, + "demand": 63, + "consumed": 20, + "shortage": 43, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 450, + "to_minute": 460, + "before": 0, + "generation": 20, + "demand": 63, + "consumed": 20, + "shortage": 43, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 460, + "to_minute": 470, + "before": 0, + "generation": 20, + "demand": 63, + "consumed": 20, + "shortage": 43, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 470, + "to_minute": 480, + "before": 0, + "generation": 20, + "demand": 63, + "consumed": 20, + "shortage": 43, + "overflow": 0, + "after": 0, + "global_stop": true + } + ], + "result_amount": 0, + "replay": null + }, + { + "model": "recommended", + "scenario": "zero", + "period_minutes": 10, + "inputs": { + "demand_per_interval": 16, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 0, + "generation": 20, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 4, + "global_stop": false + } + ], + "result_amount": 4, + "replay": null + }, + { + "model": "recommended", + "scenario": "capacity", + "period_minutes": 10, + "inputs": { + "demand_per_interval": 2, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 300, + "generation": 20, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 18, + "after": 300, + "global_stop": false + } + ], + "result_amount": 300, + "replay": null + }, + { + "model": "recommended", + "scenario": "loss_and_return", + "period_minutes": 30, + "inputs": { + "demand_per_interval": 16, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 100, + "generation": 0, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 84, + "global_stop": false + }, + { + "from_minute": 370, + "to_minute": 380, + "before": 84, + "generation": 0, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 68, + "global_stop": false + }, + { + "from_minute": 380, + "to_minute": 390, + "before": 68, + "generation": 20, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 72, + "global_stop": false + } + ], + "result_amount": 72, + "replay": null + }, + { + "model": "recommended", + "scenario": "same_minute_replay", + "period_minutes": 10, + "inputs": { + "demand_per_interval": 16, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 100, + "generation": 20, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 104, + "global_stop": false + } + ], + "result_amount": 104, + "replay": "same boundary and identical inputs: return stored receipt without changes; conflicting inputs: reject atomically" + }, + { + "model": "conservative", + "scenario": "low", + "period_minutes": 120, + "inputs": { + "demand_per_interval": 2, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 100, + "generation": 10, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 108, + "global_stop": false + }, + { + "from_minute": 370, + "to_minute": 380, + "before": 108, + "generation": 10, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 116, + "global_stop": false + }, + { + "from_minute": 380, + "to_minute": 390, + "before": 116, + "generation": 10, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 124, + "global_stop": false + }, + { + "from_minute": 390, + "to_minute": 400, + "before": 124, + "generation": 10, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 132, + "global_stop": false + }, + { + "from_minute": 400, + "to_minute": 410, + "before": 132, + "generation": 10, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 140, + "global_stop": false + }, + { + "from_minute": 410, + "to_minute": 420, + "before": 140, + "generation": 10, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 148, + "global_stop": false + }, + { + "from_minute": 420, + "to_minute": 430, + "before": 148, + "generation": 10, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 156, + "global_stop": false + }, + { + "from_minute": 430, + "to_minute": 440, + "before": 156, + "generation": 10, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 164, + "global_stop": false + }, + { + "from_minute": 440, + "to_minute": 450, + "before": 164, + "generation": 10, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 172, + "global_stop": false + }, + { + "from_minute": 450, + "to_minute": 460, + "before": 172, + "generation": 10, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 180, + "global_stop": false + }, + { + "from_minute": 460, + "to_minute": 470, + "before": 180, + "generation": 10, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 188, + "global_stop": false + }, + { + "from_minute": 470, + "to_minute": 480, + "before": 188, + "generation": 10, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 196, + "global_stop": false + } + ], + "result_amount": 196, + "replay": null + }, + { + "model": "conservative", + "scenario": "normal", + "period_minutes": 120, + "inputs": { + "demand_per_interval": 16, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 100, + "generation": 10, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 94, + "global_stop": false + }, + { + "from_minute": 370, + "to_minute": 380, + "before": 94, + "generation": 10, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 88, + "global_stop": false + }, + { + "from_minute": 380, + "to_minute": 390, + "before": 88, + "generation": 10, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 82, + "global_stop": false + }, + { + "from_minute": 390, + "to_minute": 400, + "before": 82, + "generation": 10, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 76, + "global_stop": false + }, + { + "from_minute": 400, + "to_minute": 410, + "before": 76, + "generation": 10, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 70, + "global_stop": false + }, + { + "from_minute": 410, + "to_minute": 420, + "before": 70, + "generation": 10, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 64, + "global_stop": false + }, + { + "from_minute": 420, + "to_minute": 430, + "before": 64, + "generation": 10, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 58, + "global_stop": false + }, + { + "from_minute": 430, + "to_minute": 440, + "before": 58, + "generation": 10, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 52, + "global_stop": false + }, + { + "from_minute": 440, + "to_minute": 450, + "before": 52, + "generation": 10, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 46, + "global_stop": false + }, + { + "from_minute": 450, + "to_minute": 460, + "before": 46, + "generation": 10, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 40, + "global_stop": false + }, + { + "from_minute": 460, + "to_minute": 470, + "before": 40, + "generation": 10, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 34, + "global_stop": false + }, + { + "from_minute": 470, + "to_minute": 480, + "before": 34, + "generation": 10, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 28, + "global_stop": false + } + ], + "result_amount": 28, + "replay": null + }, + { + "model": "conservative", + "scenario": "excess", + "period_minutes": 120, + "inputs": { + "demand_per_interval": 63, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 100, + "generation": 10, + "demand": 63, + "consumed": 63, + "shortage": 0, + "overflow": 0, + "after": 47, + "global_stop": false + }, + { + "from_minute": 370, + "to_minute": 380, + "before": 47, + "generation": 10, + "demand": 63, + "consumed": 57, + "shortage": 6, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 380, + "to_minute": 390, + "before": 0, + "generation": 10, + "demand": 63, + "consumed": 10, + "shortage": 53, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 390, + "to_minute": 400, + "before": 0, + "generation": 10, + "demand": 63, + "consumed": 10, + "shortage": 53, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 400, + "to_minute": 410, + "before": 0, + "generation": 10, + "demand": 63, + "consumed": 10, + "shortage": 53, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 410, + "to_minute": 420, + "before": 0, + "generation": 10, + "demand": 63, + "consumed": 10, + "shortage": 53, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 420, + "to_minute": 430, + "before": 0, + "generation": 10, + "demand": 63, + "consumed": 10, + "shortage": 53, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 430, + "to_minute": 440, + "before": 0, + "generation": 10, + "demand": 63, + "consumed": 10, + "shortage": 53, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 440, + "to_minute": 450, + "before": 0, + "generation": 10, + "demand": 63, + "consumed": 10, + "shortage": 53, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 450, + "to_minute": 460, + "before": 0, + "generation": 10, + "demand": 63, + "consumed": 10, + "shortage": 53, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 460, + "to_minute": 470, + "before": 0, + "generation": 10, + "demand": 63, + "consumed": 10, + "shortage": 53, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 470, + "to_minute": 480, + "before": 0, + "generation": 10, + "demand": 63, + "consumed": 10, + "shortage": 53, + "overflow": 0, + "after": 0, + "global_stop": true + } + ], + "result_amount": 0, + "replay": null + }, + { + "model": "conservative", + "scenario": "zero", + "period_minutes": 10, + "inputs": { + "demand_per_interval": 16, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 0, + "generation": 10, + "demand": 16, + "consumed": 10, + "shortage": 6, + "overflow": 0, + "after": 0, + "global_stop": true + } + ], + "result_amount": 0, + "replay": null + }, + { + "model": "conservative", + "scenario": "capacity", + "period_minutes": 10, + "inputs": { + "demand_per_interval": 2, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 200, + "generation": 10, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 8, + "after": 200, + "global_stop": false + } + ], + "result_amount": 200, + "replay": null + }, + { + "model": "conservative", + "scenario": "loss_and_return", + "period_minutes": 30, + "inputs": { + "demand_per_interval": 16, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 100, + "generation": 0, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 84, + "global_stop": false + }, + { + "from_minute": 370, + "to_minute": 380, + "before": 84, + "generation": 0, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 68, + "global_stop": false + }, + { + "from_minute": 380, + "to_minute": 390, + "before": 68, + "generation": 10, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 62, + "global_stop": false + } + ], + "result_amount": 62, + "replay": null + }, + { + "model": "conservative", + "scenario": "same_minute_replay", + "period_minutes": 10, + "inputs": { + "demand_per_interval": 16, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 100, + "generation": 10, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 94, + "global_stop": false + } + ], + "result_amount": 94, + "replay": "same boundary and identical inputs: return stored receipt without changes; conflicting inputs: reject atomically" + }, + { + "model": "generous", + "scenario": "low", + "period_minutes": 120, + "inputs": { + "demand_per_interval": 2, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 200, + "generation": 40, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 238, + "global_stop": false + }, + { + "from_minute": 370, + "to_minute": 380, + "before": 238, + "generation": 40, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 276, + "global_stop": false + }, + { + "from_minute": 380, + "to_minute": 390, + "before": 276, + "generation": 40, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 314, + "global_stop": false + }, + { + "from_minute": 390, + "to_minute": 400, + "before": 314, + "generation": 40, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 352, + "global_stop": false + }, + { + "from_minute": 400, + "to_minute": 410, + "before": 352, + "generation": 40, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 390, + "global_stop": false + }, + { + "from_minute": 410, + "to_minute": 420, + "before": 390, + "generation": 40, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 428, + "global_stop": false + }, + { + "from_minute": 420, + "to_minute": 430, + "before": 428, + "generation": 40, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 466, + "global_stop": false + }, + { + "from_minute": 430, + "to_minute": 440, + "before": 466, + "generation": 40, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 504, + "global_stop": false + }, + { + "from_minute": 440, + "to_minute": 450, + "before": 504, + "generation": 40, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 542, + "global_stop": false + }, + { + "from_minute": 450, + "to_minute": 460, + "before": 542, + "generation": 40, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 0, + "after": 580, + "global_stop": false + }, + { + "from_minute": 460, + "to_minute": 470, + "before": 580, + "generation": 40, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 18, + "after": 600, + "global_stop": false + }, + { + "from_minute": 470, + "to_minute": 480, + "before": 600, + "generation": 40, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 38, + "after": 600, + "global_stop": false + } + ], + "result_amount": 600, + "replay": null + }, + { + "model": "generous", + "scenario": "normal", + "period_minutes": 120, + "inputs": { + "demand_per_interval": 16, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 200, + "generation": 40, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 224, + "global_stop": false + }, + { + "from_minute": 370, + "to_minute": 380, + "before": 224, + "generation": 40, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 248, + "global_stop": false + }, + { + "from_minute": 380, + "to_minute": 390, + "before": 248, + "generation": 40, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 272, + "global_stop": false + }, + { + "from_minute": 390, + "to_minute": 400, + "before": 272, + "generation": 40, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 296, + "global_stop": false + }, + { + "from_minute": 400, + "to_minute": 410, + "before": 296, + "generation": 40, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 320, + "global_stop": false + }, + { + "from_minute": 410, + "to_minute": 420, + "before": 320, + "generation": 40, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 344, + "global_stop": false + }, + { + "from_minute": 420, + "to_minute": 430, + "before": 344, + "generation": 40, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 368, + "global_stop": false + }, + { + "from_minute": 430, + "to_minute": 440, + "before": 368, + "generation": 40, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 392, + "global_stop": false + }, + { + "from_minute": 440, + "to_minute": 450, + "before": 392, + "generation": 40, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 416, + "global_stop": false + }, + { + "from_minute": 450, + "to_minute": 460, + "before": 416, + "generation": 40, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 440, + "global_stop": false + }, + { + "from_minute": 460, + "to_minute": 470, + "before": 440, + "generation": 40, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 464, + "global_stop": false + }, + { + "from_minute": 470, + "to_minute": 480, + "before": 464, + "generation": 40, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 488, + "global_stop": false + } + ], + "result_amount": 488, + "replay": null + }, + { + "model": "generous", + "scenario": "excess", + "period_minutes": 120, + "inputs": { + "demand_per_interval": 63, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 200, + "generation": 40, + "demand": 63, + "consumed": 63, + "shortage": 0, + "overflow": 0, + "after": 177, + "global_stop": false + }, + { + "from_minute": 370, + "to_minute": 380, + "before": 177, + "generation": 40, + "demand": 63, + "consumed": 63, + "shortage": 0, + "overflow": 0, + "after": 154, + "global_stop": false + }, + { + "from_minute": 380, + "to_minute": 390, + "before": 154, + "generation": 40, + "demand": 63, + "consumed": 63, + "shortage": 0, + "overflow": 0, + "after": 131, + "global_stop": false + }, + { + "from_minute": 390, + "to_minute": 400, + "before": 131, + "generation": 40, + "demand": 63, + "consumed": 63, + "shortage": 0, + "overflow": 0, + "after": 108, + "global_stop": false + }, + { + "from_minute": 400, + "to_minute": 410, + "before": 108, + "generation": 40, + "demand": 63, + "consumed": 63, + "shortage": 0, + "overflow": 0, + "after": 85, + "global_stop": false + }, + { + "from_minute": 410, + "to_minute": 420, + "before": 85, + "generation": 40, + "demand": 63, + "consumed": 63, + "shortage": 0, + "overflow": 0, + "after": 62, + "global_stop": false + }, + { + "from_minute": 420, + "to_minute": 430, + "before": 62, + "generation": 40, + "demand": 63, + "consumed": 63, + "shortage": 0, + "overflow": 0, + "after": 39, + "global_stop": false + }, + { + "from_minute": 430, + "to_minute": 440, + "before": 39, + "generation": 40, + "demand": 63, + "consumed": 63, + "shortage": 0, + "overflow": 0, + "after": 16, + "global_stop": false + }, + { + "from_minute": 440, + "to_minute": 450, + "before": 16, + "generation": 40, + "demand": 63, + "consumed": 56, + "shortage": 7, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 450, + "to_minute": 460, + "before": 0, + "generation": 40, + "demand": 63, + "consumed": 40, + "shortage": 23, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 460, + "to_minute": 470, + "before": 0, + "generation": 40, + "demand": 63, + "consumed": 40, + "shortage": 23, + "overflow": 0, + "after": 0, + "global_stop": true + }, + { + "from_minute": 470, + "to_minute": 480, + "before": 0, + "generation": 40, + "demand": 63, + "consumed": 40, + "shortage": 23, + "overflow": 0, + "after": 0, + "global_stop": true + } + ], + "result_amount": 0, + "replay": null + }, + { + "model": "generous", + "scenario": "zero", + "period_minutes": 10, + "inputs": { + "demand_per_interval": 16, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 0, + "generation": 40, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 24, + "global_stop": false + } + ], + "result_amount": 24, + "replay": null + }, + { + "model": "generous", + "scenario": "capacity", + "period_minutes": 10, + "inputs": { + "demand_per_interval": 2, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 600, + "generation": 40, + "demand": 2, + "consumed": 2, + "shortage": 0, + "overflow": 38, + "after": 600, + "global_stop": false + } + ], + "result_amount": 600, + "replay": null + }, + { + "model": "generous", + "scenario": "loss_and_return", + "period_minutes": 30, + "inputs": { + "demand_per_interval": 16, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 200, + "generation": 0, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 184, + "global_stop": false + }, + { + "from_minute": 370, + "to_minute": 380, + "before": 184, + "generation": 0, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 168, + "global_stop": false + }, + { + "from_minute": 380, + "to_minute": 390, + "before": 168, + "generation": 40, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 192, + "global_stop": false + } + ], + "result_amount": 192, + "replay": null + }, + { + "model": "generous", + "scenario": "same_minute_replay", + "period_minutes": 10, + "inputs": { + "demand_per_interval": 16, + "instance_mix": "low: cafeteria x1; normal: cafeteria,kitchen,public_bath,guest_elevator,reception,security_station x1 each; excess: all 37 definitions x1 including definition-only resources" + }, + "flows": [ + { + "from_minute": 360, + "to_minute": 370, + "before": 200, + "generation": 40, + "demand": 16, + "consumed": 16, + "shortage": 0, + "overflow": 0, + "after": 224, + "global_stop": false + } + ], + "result_amount": 224, + "replay": "same boundary and identical inputs: return stored receipt without changes; conflicting inputs: reject atomically" + } + ], + "formula": { + "available": "B+G+F", + "consumed": "min(B+G+F,D)", + "shortage": "D-consumed", + "overflow": "max(0,B+G+F-consumed-C)", + "after": "min(C,B+G+F-consumed)", + "period": "10 game minutes; 120-minute samples have 12 sequential boundaries; F=0 in comparisons", + "network": "local allocation still independently required; stock is accounted once globally, not summed with network stores" + }, + "provenance": { + "original": "BASELINE 9.1 depletion; 10.6 furnace; 6.1/6.5 unique protection; no numerical balance", + "implementation": "GameState stock100; Runtime network source100; maintenance_mana allocation demand every10 game minutes, not reserve debit; reserve helper is caller-driven and not wired into periodic Runtime stock", + "fixture": "test_mana_reserve_balance: initial7/capacity10 at360, generation5/demand8 at370 ->4; purely test inputs", + "candidate": "recommended and alternatives are new unapproved design values; no product writes" + }, + "validation": "static source reading and arithmetic only; formal proposal-consistency and independent review reserved for Runner" +} diff --git a/docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/review-disposition.json b/docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/review-disposition.json new file mode 100644 index 0000000..537d170 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/review-disposition.json @@ -0,0 +1,28 @@ +{ + "observed_at_jst": "2026-10-13T00:29:23.970192+09:00", + "status": "not_approval_ready", + "product_modified": false, + "original_delivery_completed": false, + "diagnostic_review": "diagnostic-independent-review.json", + "accepted_findings": [ + "HIGH-1 furnace headroom moment ambiguous; same-boundary tree generation can create overflow after consuming actor; furnace F>0 boundary cases absent", + "HIGH-2 restore from zero only possible when generation exceeds retained demand; after==0 stop must preserve original depletion constraint; unconditional recovery claim needs qualification and owner decision", + "MED-1 generous excess demand reaches zero on ninth interval, not twelfth", + "MED-2 distinguish tree generation loss from local distribution loss; stock balance and local power result separate" + ], + "review_suggestions_not_auto_adopted": [ + "Replacing depletion stop with shortage-only would change original depletion constraint; do not apply automatically", + "MED-3 assertion that one furnace cannot offset demand63 is numerically incorrect: generation20+furnace100 exceeds63 each interval; actual actor cost and sustainable operation still unapproved", + "Furnace loyalty side effects and bankruptcy actor eligibility remain proposal decisions; do not fabricate original numeric effect" + ], + "other_findings_deferred": [ + "infirmary.tres duplicate properties and unknown queue_staff_min recorded outside proposal scope; no unsolicited fix" + ], + "formal_workflow_gaps": [ + "source_pins list differs from registered mapping schema", + "formal validator and Runner review absent", + "worker correction stopped due forbidden reuse-input reads, despite exact local copy; retry cap respected" + ], + "next_original_candidate": "P24-03", + "proposal_numeric_choices_unapproved": true +} diff --git a/docs/plans/original-completion-2026-10-02/execution/multi-agent-dev-handoff/README.md b/docs/plans/original-completion-2026-10-02/execution/multi-agent-dev-handoff/README.md index f006d05..b77348f 100644 --- a/docs/plans/original-completion-2026-10-02/execution/multi-agent-dev-handoff/README.md +++ b/docs/plans/original-completion-2026-10-02/execution/multi-agent-dev-handoff/README.md @@ -1,3 +1,5 @@ +現状更新(2026-10-13T00:29:23.970192+09:00): 承認用マナ候補はcheckpoint mana-proposal-draft-r01へ原稿同一内容で保存。内容の独立診断レビューで未解決がありnot_approval_ready、製品未反映。正式完了9/88、P06-01未完。修正上限を守り再起動停止。次の独立候補P24-03はp24-03-next-scope-r01.jsonに原契約/既存実装/不足/試験計画を整理済み、実装担当未起動。 + 現状更新(2026-10-13T00:11:39.759932+09:00): P06-01監査は未採用・正式試験なしで終端。元成果はin_progress、正式9/88のまま。人間許可に基づきMP-01承認用マナ候補案を作成する。MP-01は原88成果に加算せず、値の本番反映も承認まで行わない。詳細はp06-audit-terminal-r01.json。以下は履歴。 ## 現在のRunner実行(2026-10-12) diff --git a/docs/plans/original-completion-2026-10-02/execution/multi-agent-dev-handoff/p24-03-next-scope-r01.json b/docs/plans/original-completion-2026-10-02/execution/multi-agent-dev-handoff/p24-03-next-scope-r01.json new file mode 100644 index 0000000..4167fb2 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/multi-agent-dev-handoff/p24-03-next-scope-r01.json @@ -0,0 +1,44 @@ +{ + "id": "P24-03", + "status": "next_scope_proposal_not_started", + "work": "施設・客・職員・レイヤーの選択を撤去、離脱、保存再起動に跨がせる。", + "acceptance": "不在対象を参照せず、有効な選択と画面値が復元される。", + "selection_reason": "既存復元実装と局所試験を再利用でき、P06未承認数値や延期したCtrl保持入力に依存せず、撤去/離脱/別process再開という有限範囲を閉じられる見込み。", + "existing_implementation": [ + "version1 presentation IDs and open flags", + "valid entity/staff/guest existence checks at load", + "GameState active_layer and inspector restore" + ], + "reusable_test_sources": [ + "tests/ui/test_actor_selection.gd", + "tests/ui/test_selection_lifecycle.gd", + "tests/ui/test_selection_autosave.gd" + ], + "current_pass_evidence": [], + "reused_pass_claim": false, + "missing_conditions": [ + "実撤去後の施設選択と表示更新", + "実離脱/解雇後の客・職員選択と表示更新", + "選択とレイヤー/画面値の同一候補版・正式保存・別process再開", + "通常OS入力から選択保存再開までの証拠", + "影響範囲試験と別Claude正式独立レビュー" + ], + "test_scope": [ + "static and local selection checks before broad runs", + "existing actor/lifecycle/autosave tests subject to valid current source/environment", + "only necessary removal/departure/cross-process gaps", + "final exact-candidate required regression and review" + ], + "dependencies": [ + "existing accepted save/current UI contract applicability to be verified", + "package integration dependencies remain; no whole-package completion prerequisite fabricated" + ], + "windows_block_policy": "Only expressly Windows-device-specific conditions blocked; Mac selection gaps remain work, not platform block", + "source_pins": { + "scenes/main/main.gd": "a3d7d7ddd08a8df1f987806e60accf51792d728cf71c06e6b822f5a31d8ed3e3", + "tests/ui/test_actor_selection.gd": "f37a0f4805adce4b538fccde1404c1a417f20639fddf36947f076d88409ba0a3", + "tests/ui/test_selection_lifecycle.gd": "ed68b120f422e1b37b8cf0654b6d6605458fe01c7e5d84decc3ba6f4e9366c47", + "tests/ui/test_selection_autosave.gd": "1d7d267ef171041f77241c4c2f1a1bb55a46253f803d5c496507e934bc8fa815" + }, + "observed_at_jst": "2026-10-13T00:27:34.431543+09:00" +} diff --git a/docs/plans/original-completion-2026-10-02/plan_validation.json b/docs/plans/original-completion-2026-10-02/plan_validation.json index b06b4cb..6c80480 100644 --- a/docs/plans/original-completion-2026-10-02/plan_validation.json +++ b/docs/plans/original-completion-2026-10-02/plan_validation.json @@ -254,6 +254,6 @@ "validate_facility_value_contracts.py": "91640e2a76cd6cc9186f7b85c0bf379b24b6cac0d48962815235ee628e7ae43e", "validate_plan.py": "23678227d9b3c556f1bd903f4b5b3147c4a82ce5085e10055481026803451b80", "validator_update_checks.json": "f997d0f3de2cea29550840b1d5cb23647d64f81329de46758551e2b6c8fecc27", - "work_packages.json": "d6b9cffee3a2f75c39116afb72852ed5472ece9586c1fd5b714cb899df3e4d66" + "work_packages.json": "5d778c852f6ed2d952b98d6c21c4d26c4dc2ec9cbaadd2fed05a74dd42863f63" } } diff --git a/docs/plans/original-completion-2026-10-02/work_packages.json b/docs/plans/original-completion-2026-10-02/work_packages.json index 852c5bf..5226de3 100644 --- a/docs/plans/original-completion-2026-10-02/work_packages.json +++ b/docs/plans/original-completion-2026-10-02/work_packages.json @@ -6175,15 +6175,20 @@ "path": "docs/plans/original-completion-2026-10-02/execution/multi-agent-dev-handoff/p06-audit-terminal-r01.json", "sha256_at_integration": "f4df9d95b5590f9087a2f37140ced59ff9ac6a49668633b7f2ecd6bb92920628", "scope": "terminal unaccepted audit; no formal tests or independent acceptance; proposal remains unapproved" + }, + { + "path": "docs/plans/original-completion-2026-10-02/checkpoints/mana-proposal-draft-r01/manifest.json", + "sha256_at_integration": "fce154c54395be81e875faf76b0ec19f2be3c0e06d097d54e1b87e824b27af60", + "scope": "unapproved proposal draft, root arithmetic/source checks, diagnostic independent review; not formal original delivery acceptance" } ], - "progress_summary": "原契約監査はRunner blockedで終端。未採用3成果と50source pinを保存。有限蓄積Runtime未接続、原本の6x3裏地下マナ炉との差、旧ゼロ/境界証拠不足を確認。検証器にargv/hash比較の欠陥があり、正式試験・正式独立受入・統合なし。人間許可によりMP-01承認用候補案を別契約で作成中。P06-01未完、原30/88の分母・条件を維持。", + "progress_summary": "原契約監査は未採用で終端。承認用マナ候補3案と37施設需要を作成し53source pin・126比較区間を照合。別Claudeの読取専用診断レビューで炉容量判定、枯渇復帰条件、余裕案の文章誤記、供給喪失の区分に未解決を確認。原稿はnot_approval_ready、本番未反映。source_pins形式とRunner提出/読取制限が残り正式検証・正式レビュー・統合なし。修正上限を守り重複再起動しない。原P06-01未完、30/88の分母/条件を維持。次の独立候補P24-03。", "remaining_gaps": [ "生成・蓄積・消費と初期値/係数の原本・承認・実装・試験用値の根拠対応。", "旧ゼロ保存の意味、移行、残量境界の現版証拠と矛盾の有無。", "13source差分を含む既存証拠の適用性、必要検証、独立レビューと全条件台帳反映。" ], - "updated_at_jst": "2026-10-13T00:11:39.759932+09:00" + "updated_at_jst": "2026-10-13T00:29:23.970192+09:00" }, { "id": "P06-02",