From fee479af8394c8a12ecbfaa81cb46cbd458e4bd1 Mon Sep 17 00:00:00 2001 From: "Claude Opus 5.5 (Desktop)" Date: Sun, 25 Oct 2026 19:22:54 +0900 Subject: [PATCH] docs: freeze the P24-02-EVLOG event log readability specification SPEC r01 and its provenance for the auxiliary P24-02-EVLOG (original credit 0): the event log names every fact kind the product publishes (WEATHER_FORECAST_DRAWN and WARP_TRAVELED had none), shows the weather and times of the daily forecast and the warp riders and fare, and resolves path actor, warp connector and elevator shaft targets. It is presentation only; the Runtime, the event stream and saves do not change. Eight acceptance conditions, the registered validation p24-evlog, one final S full roster and a fresh separate review. No new human decision is needed. Only the range whose upstream is accepted (event stream, weather, warp, elevators) is registered; the whole original P24-02, the P24 package, the earlier the-tree-p24-02-operations task, the important-warning cut-ins and the Windows, IME and OS scaling conditions stay open. No product change, registration or commander run. Co-Authored-By: Claude Opus 5.5 --- .../execution/p24-02-evlog/PROVENANCE.json | 177 ++++++++++++++++++ .../execution/p24-02-evlog/SPEC.md | 85 +++++++++ 2 files changed, 262 insertions(+) create mode 100644 docs/plans/original-completion-2026-10-02/execution/p24-02-evlog/PROVENANCE.json create mode 100644 docs/plans/original-completion-2026-10-02/execution/p24-02-evlog/SPEC.md 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 の入力ではない。