docs: Campaign CC gate round 1 closeout — register/ISSUES/ledger bookkeeping (F3, F12, F15)

Doc-only findings from the round review, plus the register rows the
three code commits' own bookkeeping notes reference:

- F3: AP-229 amended with the dialog-as-sibling z-order addendum — the
  same flat-sibling-list mechanism that motivates AP-229's own screen-
  layering row also covers RetailDialogFactory's open dialogs, which was
  GF-15's actual root cause (now fixed, but the underlying divergence —
  dialogs and screens sharing one z-order list at all — remains and
  could reintroduce the same failure class via a future sibling's own
  unconditional per-tick BringToFront).
- F5/F6: AP-230 amended with the second narrow-honor addendum (the
  LayoutImporter carve-out fix landed in the Group 3 code commit); the
  findings doc's "CHAT INPUT" label corrected to "chat transcript" in
  both places it appeared (0x2100006F/0x10000011 is the transcript
  display, not the input textbox).
- F12: the AD section header recounted 77 -> 79 (a direct physical count
  found it undercounted by 2); the AP section header's own "one high"
  drift-direction note corrected to "one low" — verified against the
  actual commit history (Batch A ended with 165 physical rows but a 164
  header; Batch B's recount correctly landed on 164, the header was
  never overcounting).
- F15: ISSUES.md #406 gains the crash-vs-incomplete-shutdown precedence
  sentence — ReportExited's _runFailure check runs first and returns
  immediately, so a crash always wins over a subsequently-failed
  shutdown for the same session's reported reason.
- AP-231 filed (the Group 2 commit's own ComposeFormula connector-text
  approximation — referenced in that commit's message but the register
  row itself was missed until this pass; 161 active AP rows).
- Campaign CC plan ledger gains a "Gate round 1" row with the full
  commit list for batches A-G plus this session's three closeout
  commits, superseding the ledger's stale "sole remaining acceptance
  step" framing (written before the connected gate ran and found the
  GF-1..GF-16 / R2-1..R2-8 findings this whole round fixed).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-16 15:37:46 +02:00
parent bd359d5181
commit 9efcd80e34
4 changed files with 34 additions and 10 deletions

View file

@ -188,7 +188,18 @@ free-text `reason` field (§LA1's `exited{code,reason}` vocabulary pins
the EVENT name, not an enum of `reason` strings — `StatusEventParser`
already round-trips any string there) so no wire-contract amendment was
needed. Pinned as a source-shape test (`GameWindowCrashStatusTests`) since
`GameWindow` cannot be constructed without a live GPU/window.
`GameWindow` cannot be constructed without a live GPU/window. **Precedence
(F15, gate round 1 closeout, 2026-08-16):** `ReportExited`'s `_runFailure`
check runs FIRST and returns immediately, so a crash ALWAYS wins over an
incomplete shutdown for the same session: if `Run()` observed an
exception AND the resource-shutdown transaction subsequently failed to
converge (`report.Status != Complete`), the reported reason is still
`"crashed"`, never `"shutdown-incomplete"`. The teardown failure itself is
not lost -- `Console.Error.WriteLine` still logs the blocked stage and
every cleanup failure right before `ReportExited` runs -- but the ONE
terminal status event a launcher/monitoring consumer reads only ever
carries one reason per session, and a crash is judged the more actionable
of the two.
Sibling gap fixed in the same commit: the launcher previously discarded
the child's stdout/stderr entirely, which is why diagnosing this exact

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -270,7 +270,7 @@ tint" halves stay open, judged disproportionate to add alongside this
batch's ~10 other fixes), (2) a CLIENT-WIDE `LayoutImporter` fix
un-consuming media-bearing dat children on `UiText`/`UiField` (37 distinct
(layout, element) pairs across 15 layouts, independently re-derived —
includes MAIN GAME UI and CHAT INPUT, closing the build half of pre-filed
includes MAIN GAME UI and the chat transcript, closing the build half of pre-filed
issue #366), (3) the Summary how-to text
(`gmCGSummaryPage::SetHowToText`) plus the scrollbar-to-text-scroll
linkage Commit 2 left unbound. Fixture + live-DAT tests only (no
@ -632,11 +632,25 @@ ISSUES.md; this doc is the six-page batch.
as before. Independently re-derived blast radius: **37 distinct
(layout, element) pairs across 15 layouts** (see the commit message for
the full enumeration), including MAIN GAME UI (`0x21000005/0x1000059A`)
and CHAT INPUT (`0x2100006F/0x10000011` — closing the BUILD half of
and the chat transcript (`0x2100006F/0x10000011` — closing the BUILD half of
pre-filed issue #366's own "fix shape" recommendation, which proposed
this EXACT carve-out). Full App suite (5304 tests): zero regressions.
**The user's own visual check of chat + the main game UI is still owed**
— automated coverage cannot catch a purely visual placement regression.
**Closeout Group 3 (F5/F6, 2026-08-16):** one of this carve-out's
media-bearing children — the chat new-text indicator, `0x1000048C`,
live-DAT-confirmed authored `Invisible=true` on every layout it appears
in (`0x21000005`/`0x21000006`/`0x2100005B`/`0x2100006F`) — was building as
a visible phantom element retail never shows. Fixed with a NARROW honor
scoped to exactly this carve-out (`LayoutImporter.BuildWidget`'s
`UiText or UiField` branch sets a built child's `Visible = false` when its
own `AuthoredInvisible` flag is set), not the general #408 client-wide
honor. Verified in both directions: the invisible chat indicator now
builds hidden, and the eight chargen/main-game-UI gold-frame pieces
(`0x100002DE-E3`/`0x100000E8`/`0x100000EA`) do NOT author `Invisible` and
stay visible — confirmed both by a live-DAT sweep
(`MediaBearingChildSweep_EnumeratesWhichAffectedChildrenAuthorInvisible`)
and a fixture regression test.
- **GF-14 Summary paperdoll backdrop black — FIXED (Campaign CC gate round
1, Batch D, same fix as GF-7 above — both pages call the identical
`gmCG3DView::Update` on their own `gmCG3DView` instance).** **Summary