diff --git a/docs/plans/original-completion-2026-10-02/execution/p24-02-evlog/PROVENANCE.json b/docs/plans/original-completion-2026-10-02/execution/p24-02-evlog/PROVENANCE.json new file mode 100644 index 0000000..dcfaf84 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/p24-02-evlog/PROVENANCE.json @@ -0,0 +1,177 @@ +{ + "by": "Claude Opus 5.5 Desktop (local_a7f85421-3eed-4482-8030-c0dca669573a), the commander that wrote SPEC.md r01; before registration; read only", + "unit": "P24-02-EVLOG", + "auxiliary_of": "P24-02", + "original_credit": 0, + "original_completed": 24, + "original_total": 88, + "packages_completed": 4, + "packages_total": 30, + "spec": { + "path": "docs/plans/original-completion-2026-10-02/execution/p24-02-evlog/SPEC.md", + "sha256": "a08bf2455cbfe01433655544edc578de7eb67bc17eaa313d3dac891b6b5ef206", + "bytes": 10654 + }, + "main_read": "50207e9e6e41e361dab5397ecdff8417b98b5dfc", + "human_decision_required": false, + "human_decision_note": "No new game rule, value or human decision. The two Japanese titles are a presentation choice of the implementer (to be recorded at implementation); the weather words reuse the existing HUD words. Not a new human approval.", + "original_text": { + "path": "docs/traceability/original/BASELINE.txt", + "sha256": "75e4bdbdeb379c9269553f0c776bdb9cc96e01f2d6aa5ca650d132c63a8aeb1a", + "lines": { + "223": "## 11.4 建設・通知UX", + "224": " * **建設:** グリッドスナップ、接続ライン警告表示。", + "225": " * **通知:** ユニット頭上のフキダシ(Zzz、怒り、ハート)、イベントログ。", + "226": " * **カットイン:** 「NTR侵食開始」などの重要警告、決闘発生、防衛戦開始演出。" + }, + "cited": { + "225": " * **通知:** ユニット頭上のフキダシ(Zzz、怒り、ハート)、イベントログ。" + }, + "requirement_group": "B-11.4" + }, + "original_package": { + "id": "P24", + "title": "インスペクター・通知・操作完成", + "requirement_ids": [ + "B-11.1", + "B-11.2", + "B-11.3", + "B-11.4", + "B-13.4" + ], + "work": "シフトのドラッグ配置、欲求/思考ログ、感情/盾、料金内訳、稼働阻害理由、接続線、フキダシ、カットインを接続。クリックによる代替操作も用意。", + "acceptance": "無効ドロップで状態を壊さず理由を表示。保存後も対象選択を回復。ログの説明と実際の選択が一致。モーダル/停止/再開の入力を検証。", + "depends_on": [ + "P09", + "P15", + "P16", + "P18", + "P23", + "P19" + ], + "decisions": [ + "D09" + ], + "state": "in_progress", + "cross_cutting_acceptance": [ + "原本条件とUI操作が一致", + "Runtimeの実利用・会計・行動へ接続", + "途中保存・再起動で再現", + "異常/境界/中断を検証", + "関連回帰PASS", + "要件別ログとソースハッシュを保存", + "Windows部分実機確認。不可なら未検証を残す" + ], + "cross_cutting_acceptance_scope": "Completion requirements only, not achieved results. Apply each to relevant slices; non-applicable views require a recorded reason.", + "package_dependencies_scope": "integration prerequisites; a vertical slice may start once its own required contracts are accepted" + }, + "original_unit": { + "id": "P24-02", + "title": "操作と通知", + "work": "配置、無効ドロップ、モーダル、停止、再開、フキダシ、ログ、カットインを整える。", + "acceptance": "無効操作を説明し、クリック代替と日本語入力・表示倍率を確認する。", + "state": "in_progress", + "remaining_gap_event_log": "event_log: Current native event-log suite passed. Real production sequence, Japanese amounts/time/reasons and pause/load nonduplication remain; legacy evidence stays original-version unless applicability proven." + }, + "known_residual_closed_by_this_unit": { + "from": "P07-01 residuals_outside_unit_acceptance", + "text": "Event log shows the daily WEATHER_FORECAST_DRAWN as 未識別の記録 (scripts/ui/event_log_dialog.gd outside the WX allowed_paths); proposed as a separate unit" + }, + "cross_cutting_application": { + "原本条件とUI操作が一致": "F2-F4 and F7: the event log rows of the existing published facts read in Japanese, opened and selected by viewport input in the real Main", + "Runtimeの実利用・会計・行動へ接続": "F2-F4: rows of the real 06:00 weather draw, real warp travel (with the mana fare) and real elevator trips; presentation only, the Runtime is not changed (F5)", + "途中保存・再起動で再現": "F6: same-process and separate-process loads give the same rows once", + "異常/境界/中断を検証": "F1 unknown-kind fallback kept, F4 unresolvable-target fallback kept, F5 no state change", + "関連回帰PASS": "F8: narrow roster, restart pair and one final S full roster", + "要件別ログとソースハッシュを保存": "registered validation p24-evlog with source-hashed suites and markers (SPEC section 9)", + "Windows部分実機確認。不可なら未検証を残す": "not performed in this unit; the same Windows device, IME and OS scaling stay unverified and are disclosed (SPEC section 10)" + }, + "U1": "Disclosure of what stays unmet: SPEC sections 8 and 10 (the rest of P24-02, the P24 package, Windows/IME/OS scaling)", + "U2": "Evidence applicability: all measurements on the submitted S; local diagnostics and earlier evidence are not formal evidence", + "accepted_upstream": [ + { + "what": "domain event stream and the event log dialog", + "paths": [ + "scripts/core/domain_event_stream.gd", + "scripts/ui/event_log_dialog.gd" + ], + "existing_suite": "tests/ui/test_event_log_ui.gd (in the full roster)" + }, + { + "what": "natural weather and the 06:00 forecast draw (WEATHER_FORECAST_DRAWN)", + "runner": { + "project": "the-tree-p07-01-wx", + "task": [ + "P07-01-WX", + "completed", + "db87270972c9b243e3a1fccdf2c1fa96975dffc1", + "9b5b09b35e888e5ac1a49174b8a7f73e51c502d2", + 2 + ] + }, + "ledger": "P07-01-WX auxiliary formally completed, Q 9b5b09b" + }, + { + "what": "warp travel and fare (WARP_TRAVELED) and elevator trips", + "ledger": { + "P14_package_state": "completed", + "units": { + "P14-01": "completed", + "P14-02": "completed", + "P14-03": "completed" + } + } + } + ], + "upstream_not_needed": "The P24 package dependencies (P09, P15, P16, P18, P23, P19) are for the inspector, thought logs, bubbles and cut-ins; this unit only presents facts the product already publishes, so it registers only the range whose upstream is accepted (package_dependencies_scope).", + "held_not_in_scope": [ + "The whole original P24-02 and the P24 package (placement and invalid drop, modal and pause/resume, bubbles, cut-ins, click alternatives, Japanese input and scale, the failure reasons in the event log)", + "Important-warning cut-ins of P18/P19/P21 wait for their natural occurrence", + "IME, OS scaling and the same Windows device conditions stay unmet", + { + "earlier_runner_project_not_resumed_or_merged": "the-tree-p24-02-operations", + "task": [ + "P24-02", + "submitted", + "fe44f550750acbf5c510346e7cacbea2ccbdd184", + null, + 6 + ] + }, + "P28 speed and appearance work and the P16-01-DISMISS low 5 reinforcement are not in this unit" + ], + "relation_to_P16_01_RECRUIT": "Recruitment waits for the human answer and is unregistered and unimplemented. One implementer, no concurrent implementation. The allowed paths can overlap in the future (scenes/main/main.gd, tests/**, suite-policy, marker contract), so whichever is registered later takes the latest main as its base.", + "source_pins_note": "SPEC.md says the read sources are in SOURCE_PINS.json in the same folder; that file is in the registration folder artifacts/original-completion-2026-10-02/p24-02-evlog-registration-r01/, and its content is copied here.", + "source_pins": { + "file_sha256": "6c85d349832402902aca0086a5b54941a15adcc26825ca1c56a3467fb2290522", + "main": "50207e9e6e41e361dab5397ecdff8417b98b5dfc", + "read_only": true, + "files": { + "docs/traceability/original/BASELINE.txt": "75e4bdbdeb379c9269553f0c776bdb9cc96e01f2d6aa5ca650d132c63a8aeb1a", + "docs/plans/original-completion-2026-10-02/work_packages.json": "dfd1bb4adf29178379bdd189bcf5cea9c7906bbd1aa59dd5e4136da7398ab38f", + "docs/plans/original-completion-2026-10-02/atomic_requirements.json": "44530bb929fcc8c68c06d0d94da66dd04b8db7680af731b5037cd44677502938", + "scripts/ui/event_log_dialog.gd": "62000f559c49c3a58b244b991c10c1738add10702bfa66cb7cb40798cb559290", + "scenes/main/main.gd": "0fded7badf0a125fb04c6b98488f8a590312765c199daf5920b84849aecda3ef", + "autoload/simulation_runtime.gd": "f1135eeea519a3f1146605fc2b471e79658043d90da5d6760fdee6d095d6e391", + "scripts/core/domain_event_stream.gd": "f9b57a4b4b53cf7d67132a159ea90378c633b4f19d8de28dbe7a33ebce8e3d79", + "scripts/core/domain_event.gd": "cc9a903c366d9f889134561694b0c7fd52da260e97236a7b60830d7a68947bd4", + "scripts/transport/warp_service.gd": "7602c6b8a9672a703bfa98a1424c2cf68cf50184f87f72349d564af6a5ca9d41", + "scripts/transport/elevator_service.gd": "6f2b9cac49970b80fbfb0f71da38dee3431d78df3d361c9233e763e1bf6a8cd4", + "scripts/environment/natural_weather_policy.gd": "7b5ff916554bc63497d55b2008d34a7a658db53b642fcd1645a4a9f353b7729e", + "tests/ui/test_event_log_ui.gd": "9b1d7cb112790bb58969338ab1dc0bbe2a1c26b4307c4bfcd37491cf950c557b", + "tests/transport/test_runtime_warp.gd": "cfbb69e63aca12d9d198393fd853c76be63df95e8d1e777e7a14194dbd181234", + "tests/environment/test_p07_weather_runtime.gd": "e34b52ba3511f7391de1435c2f907997dd10235742ebc029831808af969c68e0", + "tools/regression/suite-policy.json": "bc0539529f53fd6e5f9ad62ed83d7b75c537243a7d65781e37b9f2ac0b8125f0", + "tools/run_p16_dismiss_tests.py": "39ef80e42feabc9841b64e7e35b0855626e7a7e8b868466d0a14e56ba8ccf2a5" + }, + "blob_equals_worktree": true + }, + "registration_material_sha256": { + "acceptance_baseline.json": "6d02aea176e5c37c9abfec973dfc0043a954382091292df9c781860d9cd5ad38", + "validations.json": "e7fc20221c7727888ba9b7fb1eb1df4f571107ad849c037f8db591c7eee14a22", + "policy.json": "4f2536fa12ff29fc085d63645a4fe46e40bcce9b997fef708d1a688fe510d653", + "task_contract.template.json": "9959af23862cb341fa28ed6721046fa9794bfb1bcae3a1e513bf92dc3b82bb24", + "REGISTRATION_STEPS.md": "35d89c88b55819970841c745e059c57537edb9e7776eee7dbbbd8ebc42e37f08" + }, + "not_done": "No product change, no registration, no commander RUN. Root does init/add/prepare and the delegation; the implementer records its RUN afterwards." +} diff --git a/docs/plans/original-completion-2026-10-02/execution/p24-02-evlog/SPEC.md b/docs/plans/original-completion-2026-10-02/execution/p24-02-evlog/SPEC.md new file mode 100644 index 0000000..2c4de27 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/p24-02-evlog/SPEC.md @@ -0,0 +1,85 @@ +# P24-02-EVLOG 出来事の一覧で読めない記録をなくす 仕様(登録の前の版 r01。P24-02 の補助の作業) + +- 状態: 登録の前の仕様(実 Opus の commander、2026-10-25)。人の新しい決定は要らない。Root が main に `docs/plans/original-completion-2026-10-02/execution/p24-02-evlog/SPEC.md` として固定し、その commit を `base_commit` に通常の登録をする。製品は登録まで変えない。読んだ source は同じフォルダの `SOURCE_PINS.json`(main `50207e9`)。 +- 原本への加算: 0。原単位 P24-02 の原 work・原 AC は、この作業では閉じない(§8)。 +- 表示だけの作業: Runtime の状態・記録の流れ・保存の形は変えない。変えるのは、出来事の一覧の画面の文の組み立てだけ。 + +## 1. 原本の条件(原文。変えない) + +- `docs/traceability/original/BASELINE.txt` 223〜225 行(11.4 建設・通知UX): 225 行 `* **通知:** ユニット頭上のフキダシ(Zzz、怒り、ハート)、イベントログ。` +- package P24「インスペクター・通知・操作完成」の acceptance の一部: 「ログの説明と実際の選択が一致。」 +- 原単位 P24-02「操作と通知」の work「配置、無効ドロップ、モーダル、停止、再開、フキダシ、ログ、カットインを整える。」と acceptance「無効操作を説明し、クリック代替と日本語入力・表示倍率を確認する。」の、「ログ」の部分。 +- 台帳の P24-02 の残件 `event_log`: 「実際の記録の流れ、日本語の金額・時刻・理由、停止と読み込みで重複しないこと」が残る。 +- 既知の残件: P07-01-WX の残件「出来事の一覧で毎日の `WEATHER_FORECAST_DRAWN` が『未識別の記録』と出る」(`work_packages.json` の P07-01 の `residuals_outside_unit_acceptance`)。 + +## 2. 今の製品の欠落(main `50207e9`、読むだけで確かめた) + +- `scripts/ui/event_log_dialog.gd` の `EVENT_NAMES`(88 種類)に無い種類は、題が「未識別の記録」になる。製品の source が出す種類のうち、名前が無いのは次の2つ。 + - `WEATHER_FORECAST_DRAWN`(毎朝 06:00 の天候の抽選。`autoload/simulation_runtime.gd` の天候の抽選の箇所。対象の ID は無い) + - `WARP_TRAVELED`(ワープの移動と料金。`_charge_warp_fare`。対象は connector の ID と乗った人の経路の actor の ID) +- 一覧の文は、記録の中身(payload)を出さない。そのため、予報の行は「未識別の記録 — 対象の指定なし」とだけ出て、天候と時刻が分からない。 +- 対象の名前の解決(`_entity_name`)は、候補・施設・来客の ID だけを知る。次の ID の形は「名称を確認できない対象」になる。 + - 経路の actor の ID(`staff:<職員の ID>`・`guest:<来客の ID>`): ワープと昇降機の記録の対象 + - ワープの connector の ID(`warp.connector:<施設の ID>|<施設の ID>`) + - 昇降機の shaft の ID(`transport.shaft.<層>...<幅>`) +- 種類の全数の取り方(実装の時に試験で固める): + - `SimulationDomainEvent.new(` の2つ目の引数の文字の種類 + - `_publish_actor_event(` の1つ目の引数の文字の種類 + - `_complete_save_operation(` の2つ目の引数の文字の種類 + - 変数で種類を渡す2か所(保存の終わり・検査の到着と遮断)の式の中の文字の種類 + - main `50207e9` では、これで出す種類の全てが `EVENT_NAMES` の 88 種類と上の2つに入る。 + +## 3. 挙動(この作業で作るもの) + +1. 名前: `WEATHER_FORECAST_DRAWN` と `WARP_TRAVELED` に、日本語の題を足す(例「その日の天候が決まった」「ワープで移動」。文言は実装で決めて記録する)。未知の種類の「未識別の記録」の守りは残す。 +2. 予報の行: 天候の名前を、上部の表示と同じ語(晴れ・雨・嵐・マナ霧)で出す。雨などは始まりと終わりの時刻(`HH:MM〜HH:MM`)を、晴れは変化が無いことを出す。語は1か所にまとめ、上部の表示と一覧で同じものを使う。 +3. ワープの行: 出発と到着の施設の名前、乗った人の名前と人数、払ったマナ(payload の `mana`)を出す。 +4. 対象の名前: 経路の actor の ID は、職員の名前(候補の表示の名前)または「来客」に、ワープの connector は両端の施設の名前に、昇降機の shaft は、その位置の昇降機の施設の名前に解決する。名前を確認できない対象は、今の守り(「名称を確認できない対象(n件)」)のまま。 +5. 一覧を開く・読む・選ぶ・文を組み立てることは、Runtime の状態を変えない(今と同じ)。 + +## 4. 変えないもの + +- Runtime の記録の流れ(`DomainEventStream`)、記録の種類・中身・順序、保存の形と照合。 +- 他の画面(上部の天候の表示の文は、語を共有するだけで変えない)。 +- 未知の種類と未知の対象の守り。 + +## 5. 比べ方 + +- 画面の操作と文の組み立ての前後で、Runtime の snapshot の全体が bytes で同じ(今の `tests/ui/test_event_log_ui.gd` と同じ比べ方)。 + +## 6. 受入条件 + +- P24-02-EVLOG-F1 名前の全数: §2 の取り方で集めた、製品の source が出す全ての記録の種類に、日本語の題がある。新しい種類が題なしで足されると、試験が止まる。未知の種類は「未識別の記録」のまま。 +- P24-02-EVLOG-F2 天候の予報: 本物の Runtime の毎朝 06:00 の抽選の行が、上部の表示と同じ語の天候の名前と、時刻(雨・嵐・マナ霧は始まり〜終わり、晴れは変化なし)を出す。4つの天候の全てで確かめる。 +- P24-02-EVLOG-F3 ワープ: 本物のワープの移動の行が、出発と到着の施設の名前、乗った人の名前と人数、払ったマナを出す。客の移動と、職員の移動(救護の2人を含む)で確かめる。 +- P24-02-EVLOG-F4 対象の名前: 経路の actor の ID(職員・来客)、ワープの connector、昇降機の shaft を、今の名前に解決する。昇降機の記録の行(依頼・乗車・到着・救護の依頼)でも確かめる。名前を確認できない対象は今の守りのまま。 +- P24-02-EVLOG-F5 状態を変えない: 一覧を開く・読む・選ぶ・文を組み立てる前後で、Runtime の snapshot の全体が bytes で同じ。 +- P24-02-EVLOG-F6 保存と読み込み: 予報とワープの行を含む保存を、同じ process と別の process で読むと、行は重複せず、同じ文で出る(読み込みの記録の1行が足されるだけ)。 +- P24-02-EVLOG-F7 通常の画面: ゲームの本物の Runtime と Main で、viewport の入力(`root.push_input`。キーとボタンの押しと離しを local の座標で送る)で出来事の一覧を開き、予報とワープの行を選ぶと、その文が一覧と詳細に出る。OS の入力の受入は主張しない。 +- P24-02-EVLOG-F8 回帰: 関連の回帰(狭い roster と再開の2段)と最終の S の全 roster が PASS。既存の試験の期待値の変更は `EXPECTATION_CHANGES.json` に変更前後と根拠を一覧にする。 + +## 7. 実装の範囲(allowed_paths) + +- `scripts/ui/event_log_dialog.gd`(題・文・対象の名前の解決) +- `scenes/main/main.gd`(上部の天候の語を共有する場合だけ。上部の表示の文は変えない) +- `tests/**`、`tools/run_p24_evlog_tests.py`、`tools/regression/suite-policy.json` +- `docs/plans/original-completion-2026-10-02/execution/p24-02-evlog/**`、`docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json` +- `autoload/simulation_runtime.gd` と他の製品の file は変えない。新しい `.gd` の file を足すなら、import が作る `.uid` も同じ範囲(`tests/**`)の中に限る。製品の側に新しい file が要るなら、登録の前に Root と範囲を見直す。 + +## 8. 原単位との差(開示) + +- P24-02 の残りは未達のまま: 配置・無効ドロップ・モーダル・停止と再開・フキダシ・カットイン・クリックの代替・日本語の入力と表示の倍率、`event_log` のうち「理由」(操作の失敗の理由を日本語で出す)と、長い通常の記録の流れ。 +- P24 の package の上流(P09・P15・P16・P18・P19・P23)は、インスペクター・思考の記録・フキダシ・カットインなどに要る。この作業は、今の製品が出す記録の表示だけを扱うので、その上流を要らない。P24 の package の完了には数えない。 +- P07-01-WX の残件「予報が未識別の記録と出る」は、この作業の受入で解消する。P07-01 の原単位は、この作業では変わらない。 + +## 9. 検証 + +- validation `p24-evlog`(`tools/run_p24_evlog_tests.py --output {build_dir}/p24-evlog-evidence`。`tools/run_p16_dismiss_tests.py` と同じ guarded の段の手順を、名前・名簿・再開の段・handoff・protocol 名の明示の置き換えで作る)。 +- 狭い roster: 新しい suite `tests/ui/test_event_log_readable.gd`(F1〜F7)と、既存の `tests/ui/test_event_log_ui.gd`・`tests/transport/test_runtime_warp.gd`・`tests/environment/test_p07_weather_runtime.gd`・`tests/staff/test_rescue_elevator.gd`・`tests/s6/test_runtime_snapshot_serialization.gd`・`tests/s6/test_runtime_save_lifecycle.gd`。再開の2段 `tests/ui/test_event_log_readable_restart_1_write.gd`(予報とワープの行を含む保存。唯一の生成ファイルは handoff)と `..._2_read.gd`(別の process で読み、行と文が同じで重複しないことを確かめる)。 +- その後: 正式の validation → 最終の S の全 roster を1回 → fresh な独立レビュー(この補助の作業の範囲。原単位の whole-unit の受入ではない)。速度の調整の作業と、微小な変更ごとの全回帰はしない。 + +## 10. 開示 + +- UI は今の部品のまま(完成の見た目ではない)。Windows 実機・IME・OS の倍率は後。 +- 題の文言(§3 の 1)は実装の選択で、人の新しい承認ではない。天候の語は上部の表示の既存の語を使う。 +- 試験の入力は viewport の入力で、OS の入力ではない。