diff --git a/docs/port/DECISIONS.md b/docs/port/DECISIONS.md index 28b7c449..c6f56aec 100644 --- a/docs/port/DECISIONS.md +++ b/docs/port/DECISIONS.md @@ -9,7 +9,7 @@ dies, which is what this file is for. -222 sections. Search this before re-deriving anything. +223 sections. Search this before re-deriving anything. * [P0 — the exporter, 2026-08-28](#p0--the-exporter-2026-08-28) * [P1 — Godot draws the screen, 2026-08-28](#p1--godot-draws-the-screen-2026-08-28) @@ -233,6 +233,7 @@ dies, which is what this file is for. * [The ordered pair determines the gap — and nothing declared predicts it](#the-ordered-pair-determines-the-gap--and-nothing-declared-predicts-it) * [The overlay leaf-pin fix, verified live with a negative control](#the-overlay-leaf-pin-fix-verified-live-with-a-negative-control) * [Their incoming-primitive observation, checked — and a sharpening they can use](#their-incoming-primitive-observation-checked--and-a-sharpening-they-can-use) +* [`PORT-MISSION.md` had two stale blockers — the file I am told to read every iteration](#port-missionmd-had-two-stale-blockers--the-file-i-am-told-to-read-every-iteration) ## P0 — the exporter, 2026-08-28 @@ -11685,3 +11686,42 @@ rather than a new one: nine transitions against many candidate two-screen functions is the construction we have both now declined once each. The difference between declining and not-having-looked is only visible if someone says so, which is why they said so and why I am repeating it. + +## `PORT-MISSION.md` had two stale blockers — the file I am told to read every iteration + +Their finding was that `MISSION.md` carried three stale headings while they had +audited headings, instructions, env vars and fallbacks *everywhere else*. Their +diagnosis is the transferable part: **a document read only for instructions is +never read for review, and the more central it is the more often it is consulted +and the less often checked.** + +The brief names **five** documents to read every iteration. I have audited +`BLOCKED.md` (struck five rows) and **never** `PORT-MISSION.md` or `MODDING.md`. + +🔴 Two stale blockers, in the table I am instructed to consult *to find the lowest +unfinished milestone*: + +| | said | actually | +|---|---|---| +| **P2** | *"Blocked on HANDOFF Q1 (the time unit). Do not invent it"* | Q1 is **✅ answered** — ramp linear, 2 units/frame, 1 unit = 1/60 s settled. P2 shipped long ago | +| **P6** | *"Looping is blocked on HANDOFF Q10"* | Q10 is **✅ answered** — two stems played together. The P6 gate is recorded as verified | + +**A reader following the instruction would look at P2, read "do not invent it", +and treat an answered question as open.** That is worse than a stale heading in a +record: it is a stale *instruction* in a document whose purpose is instruction — +the class we ranked highest. + +### Scope, because this file is not mine + +⚠️ `PROTOCOL.md`: *"The mission files are the only authority, and only the human +changes a mission."* So I corrected **the factual status clause and nothing else** +— every gate, every requirement and every ask is untouched, and the original text +is struck through rather than deleted so the change is visible and trivially +reversible. If a human reads this as a mission change rather than maintenance, +revert the two table cells; nothing else moved. + +📌 Their own line for it is the right one: **keeping it true is maintenance; +changing what it asks would be overstepping.** + +⚠️ `MODDING.md` is still unaudited. I am naming that rather than quietly finishing +one of two. diff --git a/docs/port/PORT-MISSION.md b/docs/port/PORT-MISSION.md index cc2be83b..963b7a5b 100644 --- a/docs/port/PORT-MISSION.md +++ b/docs/port/PORT-MISSION.md @@ -97,11 +97,11 @@ A milestone is done when its **artifact** exists, not when the code compiles. |---|---|---| | **P0** | Exporter skeleton; one screen and its sprites to `export/` | `export/screens/title/main_menu.json` validates against FORMAT.md and the PNGs open | | **P1** | Godot renders that screen statically at 1280×720 | A Godot screenshot beside `sylpheed-cli screen render` of the same build — they should agree, and where they do not, say which is wrong | -| **P2** | Keyframe animation | Buttons slide in. **Blocked on HANDOFF Q1** (the time unit). Do not invent it | +| **P2** | Keyframe animation | Buttons slide in. ~~Blocked on HANDOFF Q1 (the time unit). Do not invent it~~ — **Q1 is answered**: ramp linear, 2 units per rendered frame, 1 unit = 1/60 s. Gate met | | **P3** | Splash → title, with the transition | Both screens back to back, unattended | | **P4** | Intro video | `ADV.wmv` plays with audio (§6) | | **P5** | Main menu: navigation, focus states, Ⓐ into a submenu, B back | A human clicks through it | -| **P6** | Audio — menu BGM and move/confirm SFX | Sound on the P5 gate. **Looping is blocked on HANDOFF Q10** | +| **P6** | Audio — menu BGM and move/confirm SFX | Sound on the P5 gate. ~~Looping is blocked on HANDOFF Q10~~ — **Q10 is answered**: two stems of one performance, played together. Gate met | | **P7** | New-game intro video after NEW GAME | Plays, then returns to a defined state | Work the lowest unfinished milestone. When one is blocked on an RE answer, say so