Files
TheTree_mock/docs/IMPLEMENTATION_STATUS.md
T

217 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 実装状況
この文書は仕様書そのものではなく、現在のコードがどこまで到達しているかを記録する。ゲームルールの正本は `GAME_SPECIFICATION.md`、System境界と不変条件の正本は `SYSTEM_SPECIFICATION.md` とする。
更新日: 2026-09-09。ドット断面版の基準コミットは `423fd6dd2e75da926e38b35ac8c435e462b168d9`。復旧方法は [RECOVERY_GUIDE.md](RECOVERY_GUIDE.md)、承認済み制作計画の課題と検証残は [DEVELOPMENT_BACKLOG.md](DEVELOPMENT_BACKLOG.md) を参照する。
以下のSystem別一覧は既存の実装・試験記録を引き継いでいる。直前のドット版変更では起動とUI・カメラの359項目、その後の配属APIでは103項目の個別確認記録がある。P1追加後に `make check` と `make test` の全構成ターゲットを2群に分けて実行し、全件が成功終了した。追加の配属API103項目、スタッフ画面44項目、通常開業35項目も合格。対象と制約は [P1単日検証記録](qa/P1_FIRST_OPERATING_DAY.md) に記録した。通常初期予算での最小宿は単日受入・保存復元を確認したが、14日MVP、Windows実機性能、通常操作だけによる3営業日は別の完成条件として残る。
## 実装・自動検証済み
### S0: 決定的Simulation基盤
- 1ゲーム分固定Tickと11段階の処理順
- Command Queue、priority、予約時刻、処理後も保持する受理ID/idempotency対応、旧Queue Snapshot移行
- 原子的State Transaction
- subsystem別の決定的RNG Stream
- Stable ID、全件検証後に一括Commitする再入安全なDomain Event Batch、Simulation Digest
- Directory単位のAtomic Save、Checksum、backup、Load直後の時刻維持
- 同一Seed・Command列を24時間再生したDigest一致
### S1: 世界・建設
- `(x, y, layer)` Cell、ZoneとFRONT/BACKの分離
- Rank 1〜7の非破壊World拡張
- Occupancy、掘削、構造支持Component
- 決定的A*、Path Cache、明示Connectorと利用権限
- セル容量・密度・動的Cost、Soft Collision、混雑回避
- Cost低下・通行再開時のCache失効、権限別の正確な経路Cost、無関係な障害を除いた不到達理由
- Elevator稼働状態と有限Queue、Request/Unit二重登録防止、停止時迂回、30分停滞検知と安全復旧候補
- Placement検証、ConstructionJob、取消、完成、撤去
- 建設完了通知の保留・確定・破棄境界。完成処理の検証中は外部通知を出さず、成功時だけ順序を保って一度ずつ公開する
- 硬度別の地下掘削Job、入口までの接続、支保条件、中断再開、FRONT/BACK同時解放
- 地下施設の全Footprint掘削済み検証と、Zoneを跨ぐFootprintの拒否
- 境界施設はanchorを境界へ固定し地上側へのFootprint展開を許可、地上/地下施設は全Footprintを指定Zoneへ厳格固定
- 主要施設占有と独立して同一Cellへ共存できるROUTE/DECORATION/UTILITYの3種subslot、複数Cell横断、Path投影用query、厳密Snapshot
- ROUTE subslotの追加・置換・撤去とPath graphを原子的に同期し、失敗時の双方復元、revision/stale判定、冪等再送、隔離まで扱うAdapter
- 完成した客用通路/業務用通路を実ROUTEへ、従業員ドアを職員専用FRONT↔BACK Connectorへ原子的に投影・撤去する境界。安定ID、crosslink、exact rollback、隔離、厳密Snapshotを含む
- Runtime v6で掘削、subslot、Path投影、施設投影を1分Tick・Rank拡張・建設完了・撤去・Saveへ統合。Runtime v5の旧代理施設を決定的に実ROUTEへ移行する
- World、Path、Constructionを含むSnapshot往復
### S2: 施設・在庫・物流・Mana・経済
- Facility状態の優先評価と複数reason
- 営業時間、Policy Snapshot、priority Queue、Capacity Slot
- Service開始・進行・中断・完了Callback
- owner別Inventory Stack、FEFO Reservation、期限切れ、監査修復、既定IDの再利用を防ぐTombstone
- 入力fingerprint付き冪等性、競合する一括操作の事前拒否、全件原子rollback
- Logistics Request、貨物所有権移転、決定的Dispatcher、候補外になった運搬人の予約積載保持
- 歩行Graphと独立したMana Network、優先供給、蓄電、Brownout、復旧保持
- Goldを直接代入しない複式Ledger、逆仕訳、部分返金、日次照合
- 建設費・撤去返金とLedgerの原子的Adapter
- 原料予約から施設Serviceと売上記帳までの統合Cycle
- Cycle途中のSave→Load→再実行でDigest完全一致
- §7.6のMVP施設16種をStable ID付きDefinitionとして登録・Schema検証
- 施設詳細Schema version 2を追加。静的Definitionと可変Instance/日次履歴の境界、Access、Upgrade、営業時間、Policy、環境・リスク、客層、解禁、統計、サービス種別ごとの時間・品質・価格・処理単位・欲求効果を定義し、Registryで厳密検証
- 受付、厨房、成人向け個室を詳細Schemaへ先行移行し、複数接客・BACK生産・夜間成人向け営業の3類型を自動検証。その他MVP 13施設と拡張16施設は互換Schema version 1で段階移行可能
- MVP互換性を保つ拡張施設16種を`data/facilities/expansion/`へ分離して定義。地上一般向け5種、地下FRONT5種、BACK6種についてZone/Layer、建設費、Footprint、人員、容量、時間、価格、在庫、Risk Tagを固定し、通常建築パレットへの解放前に個別検証できるCatalog境界を追加
### S3: 客・従業員
- 6種のGuest Need(Hunger/Sleep/Hygiene/Medical/Leisure/Intimacy)、Utility、状態遷移、実経路を1セル/分で移動
- 旧5欲求Saveだけの決定的移行、現行経路での旧Need名・欠落・混在拒否、成人確認付き昼夜Intimacy
- 所持金と未決済予約を考慮した施設選択
- Queue、Service、退出、経路失敗の安全な復旧
- Staffの複数Shift、Task Dispatcher、実移動、疲労と危険作業制約
- 雇用区分、人物別日給、ID順の日次給与入力、当日発生と繰越債務を分けた部分清算、退職者の未払給与別台帳、旧Saveの互換移行
- 清算ID/日付/入力fingerprintによる二重発生防止と、派生合計まで照合する給与履歴Snapshot
- 勤務終了、施設人員喪失、Service猶予と失敗の連動
- Guest/Staffのnamespaced Path投影、密度同期、固定小数点混雑速度、30分停滞復旧
- Guest/Staff/Facility/Inventory/Ledgerの24時間決定的再生
- 破損Snapshotと孤児参照を副作用なしで拒否
### S4: 関係・Event
- Affection、Trust、Fear、Corruption、Rival Bond、Shield
- Shield攻撃、反復Penalty、段階閾値、Route Lock確認境界
- データ駆動Condition/Action/Choice
- foreground Event排他、Actor Lock、Cost escrow
- Content FilterのFADE/REPLACE/DISABLE
- 選択二重送信、Actor欠落、Action失敗、Save途中再開の安全な復旧
- Threshold発火と24時間exact replayのRuntime統合
- 配置確定前に共有施設・重複時間、Shield攻撃候補、発火可能Event、Route Lock警告、施設/時間の回避案を決定的に比較する読み取り専用Preview
### S5: 行政・監査
- Heat、Suspicion、Incident重複排除、日次減衰とactive-case下限
- Evidenceの位置、視線、到達、証言、既知施設による発見根拠
- 監査予告、専用RNG、監査官の実Path巡回、到達不能時の安全退出
- 証拠点による処分、罰金の複式台帳反映、`resolution_id`二重適用防止
- Authority全Command、Domain Event、Snapshot、原子的RestoreのRuntime統合
- 毎日06:00評価、途中Save、24時間exact replay
- Raid Wave、明示参加者と画面外戦力、扉・設備・目的物のラウンド更新
- 防衛Score、疲労・奇襲・複数入口、Active Skill、撤退方針、複数Wave
- Round再送、操作種別付き解決ID、外部効果/RNG rollback、厳密な時刻契約
- Cancel終了の原子反映、Wave別侵入口、防具軽減、途中Save、JSON輸送、破損Snapshot拒否
- Defense全10 Command、専用RNG、Skill費用、Staff/Facility損害、Raid排他LockのRuntime統合
- 終了Raidの履歴化と後続治療/修理、scheduled Command時刻、Runtime v1からDefense付きv2への決定的移行
### S6: 保存・運用の基礎
- 正式Saveを維持する3世代Autosave
- Checksum付きRecovery候補と明示的Recovery Load
- N→N+1の連続Migration RegistryとMigration前backup
- Migration/Autosave回転中断の自己修復とRecovery候補
- 保存root・親directory・非package・package内symlink越境を全Load入口で拒否するパス安全性
- 通常Saveのrename中断マーカーと自己復旧、Autosave世代縮小時の検証済み候補だけを安全に整理
- 安定Save ID、完全Manifest既定値、Thumbnail生成と上書き時のidentity保持
- 実行画面だけが有効化する本番Autosave policyと、Test/独立Runtimeの保存先分離
- 毎日06:00の固定境界Checkpoint、3世代回転、手動保存Queue、復旧候補の検査・明示Load
- Load直後の時刻保持と、壊れたTask/終了Event Lockだけを対象とする原子的なRecovery限定修復
- 正式、backup、移行前、Autosaveの各候補をRuntime全Domainへ隔離復元し、ゲームとして成立する最初の候補だけを採用する復旧fallback
- Saveより厳しいContent FilterをLoadで弱めない安全な統合と、不明enumの厳密拒否
- Simulation、Path、Save、Load、stallの実測付き性能予算Collector
- PERF-MVP-001の正確なFixtureと24時間Harness。完全条件を3回連続24/24合格(x4 P95 8.14~8.45ms、最大停止予算も合格)。これは独立Service合成の論理負荷であり、Runtime全Domainや実描画Frameの計測とは区別する
### 14日運営Coordinator基盤
- 暦日は00:00に更新し、06:00に前営業日の日次締めと朝運用境界を固定順で一度だけ実行
- 需要の60分更新と30分ごとの来客計画、fixed-point carry、収容・来客上限
- DaySummary、前日差、7日移動平均、施設別損益、未払解消と3回連続破綻
- 外部Domainのcapture/validate/apply/rollback境界、14日間の省略なしexact replay、Snapshot v3と旧版移行
### MVP人物・進行データ境界
- 客8クラスと種族4種を別軸にした32通りの成人確認済みGuestDefinition生成
- 自由雇用候補20人の固定ID、成人確認、役割、契約費、日給、4技能、許可業務
- ヒロイン`heroine_anri`とライバル`rival_rai`の相互参照、固有効果、通常売却禁止タグ
- 不明field/tag、重複ID、成人未確認、18歳未満、孤児参照、型の暗黙変換を全体fail-closedで拒否
- Rank 1~7の逐次条件、累計Faith/客、地上・地下稼働条件、派生MapBounds、冪等昇格Request
- World拡張用capture/apply/rollback境界、rollback失敗時の隔離、厳密Snapshot往復
- 32 Guest定義のRuntime登録、候補雇用時の契約費・日給・Shift・Pathの一括確定、重複雇用防止
- 累計Faith/累計客の実取引連動、Rank昇格とWorld/Path/GameStateの原子的確定、旧Runtime Rank 1保存の安全な移行
### 操作画面:現在のドット断面版
- The Tower SPを参考にした世界樹の断面を中央へ広く表示する。空、幹、枝葉、床、部屋を手続き的なドット描画で構成し、受付のカウンター、客室のベッド、食堂の卓、厨房などを施設IDに応じて描き分ける。
- Kenney Tiny Dungeon/Tiny Townの16×16px素材を人物、小物、庭木へ接続。Packed Atlas、Nearest、Mipmap無効を使用し、公式配布元・CC0原文・取得ZIPのSHA-256を `assets/kenney/` に保存する。
- 客と従業員はRuntimeに存在する人物を表示する。移動の補間、左右反転、足のずらしと上下動、待機・利用・作業の状態表示を行い、一時停止中はアニメーションも停止する。専用の食事・清掃・運搬フレームは未制作。
- サービス中の客は施設内の利用位置へ描画上だけ投影する。シミュレーションの権威セル、経路、占有、保存形式は維持する。
- 濃緑、クリーム、木色のコンパクトUI。上部HUD、左の細い管理カテゴリ、中央マップ、下部操作バーを常設し、右の運営詳細と下部の建築パレットは必要なときに開く。起動時は両パネルを閉じる。
- 上部HUDに営業日、時刻、時間帯、来客、宿泊予定、所持金、Mana、資材、Faith、Heat、停止、x1/x2/x4を表示する。
- 実World Cell、占有、工事、施設、Guest、StaffをFRONT/BACK別に描く。ホイールでカーソル基準ズーム、中ボタンドラッグでパン、Homeで全体表示、Gで格子と実混雑表示を切り替える。
- PathServiceの密度/容量を緑・黄・赤の経路に、FacilityServiceの待機人数を小さなBadgeに表示する。施設クリックで右パネルを開き、状態、reason、待機列、Service、配置人員を確認する。
- MVP施設16種を選べる下部の横スクロール建築パレット、回転、配置Preview、失敗理由、建設Commandを接続。客用/業務用昇降機は安全な階間Topologyが未統合のため、現在は建設を拒否する。
- 掘削モードでは費用、入口接続、支保、Rank/運営gate、進捗を表示し、FRONT/BACK同時解放Commandへ接続する。
- 雇用候補20人の氏名、役割、勤務帯、契約金、日給、4技能を表示。原子的な雇用、未払/破綻gate、二重クリック防止、予約実行結果、保存したCommand履歴との整合を扱う。その後のP1追加で、雇用済み人物の配属・再配属、DAY/NIGHTの継続勤務計画、未配属、反映予定と変更不可理由を通常UIへ接続した。配属先までの経路を検証するが、実通勤して到着してから稼働する経路は未統合。
- 本番運営の明示起動、個人AP、未払給与、前日損益、要確認/破綻、失敗境界の再試行表示、foreground Eventの日本語Choice、下部の手動Save/Loadを接続する。P1追加で6段階の「開業の手引き」と、営業日選択、現金入出金、建築出金、確定損益、給与・未払、施設別損益、照合を示す帳簿を接続した。建築出金と営業利益を分け、内部のcost_of_goodsは雇用契約金等を含むため「運営費」と表示する。
- 商品は有料仕入れ・厨房設定・実配送の3タブへ接続済み。探索・投資等の管理カテゴリは入口または準備中の案内に留まる。すべてのカテゴリを製品機能の完成として数えない。
- 従来の大きな生成背景、施設アイコンによるマップ表現、人物Bust Marker、装飾Skinは現マップ表示に使用しない。小型の建築・管理・資源・操作アイコンは `VisualThemeProfile` の既存参照を残す。
- 基準解像度1440×810、HiDPI、`canvas_items`/`expand`/fractional stretchは維持。Pixelの元画像にはMipmapを生成しない。旧UIの解像度別Layout試験と現在のPixel・カメラ試験は、実描画Frame性能とは別に評価する。
### 見学・制作基準
- `make preview-pixel` は実施設7件、通路、従業員4人、自然来客を組み立てる専用見学。食堂へ食材32個を明示的に支給し、保存・読込・自動保存を無効にする。通常ゲームの初期状態や完成した経営ループの代用ではない。
- `make capture-pixel` は時間差PNG 2枚と状態JSONを `artifacts/pixel-tower/` に再生成する。生成物はGit管理対象外。
- ローカル制作版をGitへ記録し、基準コミットの完全履歴bundleを作成・検証済み。`.godot/`、`build/`、`artifacts/`、ゲームの `user://` 保存はbundleに含めない。
- 旧V3モックと `ART_ASSET_PRODUCTION_SPECIFICATION.md` は過去のアート資産として保持する。現在の画面実装の基準は [PIXEL_TOWER_VISUALS.md](PIXEL_TOWER_VISUALS.md) と実描画であり、旧モックへの再一致を要求しない。
## P1:通常開業の最小ループを単日確認
- 通常の初期Gold 5,000・資材50から、UIのCommand経路で受付1件、一般客室2件、通路7セルを建築し、アカネを雇用・受付へ日勤配属する。見学Fixture、客やServiceの直接挿入、無料在庫支給は使用しない。
- 自然来客による宿泊売上320G、翌06:00の給与120G、未払0G、帳簿照合一致を確認。専用 `user://tests/first_operating_day_<process_id>/restore-check` から決算・配属・開業達成を復元する。
- 受付売上6,020G、全体営業利益6,040Gという現結果はバランス合格ではない。受付の会計上の役割、価格、宿泊料金の決済・売上記帳タイミングは仕様との差を調整する必要がある。
- 配属は繰返し計画をStaffService v4へ保存し、過去の勤務区間を保持してShiftを分割する。旧v3は計画なしで互換復元する。設計判断はD-032を参照。
- `make test-opening` で単日受入、`make capture-opening` で `artifacts/first-operating-day/{opening,staffed,first-close}.png` を生成する。自動受入は通常UI処理を呼び出すもので、初見プレイヤーの試遊合格とは区別する。
- P1全体は未合格。供給経路は下記へ追加した。価格・営業方針は下記へ追加した。宿泊精算・維持費の会計統一、初見プレイヤーの3営業日試遊は残る。配属は経路存在の事前検証と論理確定であり、人物位置を変えず、職場到着後の稼働はMOVEへ追加する。
### P1追加:仕入れから食堂まで
- 商品パネルから完成倉庫へ調理用食材を1個3Gで有料購入し、現物と台帳費用を一括確定する。支払い失敗時は両方を戻す。
- KitchenProductionService は客の注文なしで原料4→料理4を15稼働分で生産。自動ON/OFF、目標4/8/12/16、予約・期限・容量・職員・魔力・接続の待機を扱う。
- SupplyLogisticsBridge は勤務中のporterへ実Taskを割り当て、荷元への歩行→積込→納品先への歩行→納品を実行する。満杯・経路断・担当不能では貨物を保持し、部分腐敗時は残った品を実際に荷元へ返す。
- 配送中の保存、無効参照の拒否、厨房counterの再使用防止を含むRuntime v7を追加。旧v6以下は生産計画なしとして復元し、既存の物流Commandは維持する。供給配送の到着確認は手動advanceで迂回できない。
- 倉庫の担当職種を実catalogのporterへ補正し、食堂はattendantも配属可能にした。設定値・正本の料理ポイント/食器等との差はD-033へ記録。
- 初期5,000G・資材50、通常建設と採用5人、有料食材120個で3営業日を45項目確認。食堂売上4,200G、実配送81便、3日とも給与645G・未払0・帳簿一致。配送途中のディスク保存と最終Snapshotを復元した。
- 部品・UI・通常運営の検証範囲は [供給検証記録](qa/P1_SUPPLY_CHAIN.md)。`make test-supply`、`make capture-supply` で再現する。
## 統合済みの運営縦断
- 14日運営CoordinatorをEconomy/Guest/Staff/Facility/Authority/Eventへ接続し、06:00の営業日締め・朝処理、給与、未払、3回連続支払不能による破綻までRuntimeから実行する
- 人物カタログを使った自動来客・雇用時の日給と、累計客/Faith/稼働施設によるRank条件を日次運営へ接続する
- 実Simulation Tickによる24時間連続運転、選択待ち停止再開、Save復元、部分給与、破綻後no-opを受入試験で確認する
- 14日20,160分については運営境界を加速した連続/Day 7復元の一致を確認する。全Actor AIを含む20,160回の実Tick受入とは区別する
- 掘削と客用通路/業務用通路/従業員ドアをRuntime v6へ統合し、完成失敗時のConstruction・World・Path・通知を一括で戻す
## MVP垂直スライスとして残る範囲
現在は、安全に保存・再生できる「操作可能なSystem縦断」であり、14日MVPの内容完成ではない。次の範囲は引き続き必要となる。
- 全Actor AI、全Event、監査、経路移動を含む20,160分の実TickによるS14-CORE受入
- ユニーク2人の配置・接触判定と、そこから生成する14日Event列
- 通常隣接Edgeを安全に抑制する垂直Topologyと、客用/業務用昇降機
- 配置と同一Shiftから関係Event候補を生成する接触判定と事前リスクPreview
- 夕方混雑、FRONT/BACK比較、健全/地下収支を直接比較するScenario Test
- 100客・30従業員の実描画Frame試験
- 供給込み3営業日の自動受入を踏まえた、価格・営業Policy操作と欠品・人手不足・経路不足の改善比較、初見プレイヤーの継続試遊
- 専用ドット動作、製品用アート、音響、物語本文、完全なチュートリアル、バランス調整
## 実行方法
make test
make check
make run
試遊の手順は `PLAYTEST_GUIDE.md`、仕様とTestの対応は `TEST_MATRIX.md` を参照する。各Systemのテストは画面Nodeに依存せずheadlessで実行でき、新しいSystemを追加する際はSnapshot、Atomic Restore、決定性Testを同じ変更に含める。
14日受入の共通Fixtureと数値境界は `MVP_ACCEPTANCE_SCENARIOS.md` に固定する。
## P1 営業設定とDigest軽量化(2026-09-09)
- 「営業」パネル、価格5段階、見積の固定、客の選択・満足への反映、休業と待機客の再判断、稼働中サービスの継続を接続した。厨房・物流は既存operator_openへ同期する。
- 新設受付0G/20分、客室120G、食堂25G/45分。旧施設の基準値と受付済み見積はD-034に従って保存互換を維持する。
- Snapshot全項目・履歴を保持したまま、Digestの呼出し内辞書キー再利用と型付き文字列配列を最適化。旧v1出力との一致を検証し、模擬履歴5,000件のSHA計算中央値は281.294→133.455msだった。
- 合格範囲、通常運営の再検証、残る精算・性能・試遊課題は [営業設定QA](qa/P1_BUSINESS_MANAGEMENT.md)。この追加をP1全体や昇降機の完成とはしない。
新料金の供給込み3営業日は49項目合格。受付収入0G、食堂3,000G・宿泊1,200G、給与未払0・照合差0、残金2,895G。営業・休業・配送中の保存と再開、既存回帰も成功終了。実装コミット `b3b82ef`。