fix(app,headless): Campaign CC slice CC4 re-review round — R1 arbiter + R2-R4
CC4 re-review returned NOT CLOSED: R1 (MEDIUM, blocking) is a new residual the F1 fix itself introduced, plus three LOW riders (R2, R3, R4). R1 — nulling UiRoot.FixedCanvasSize on chargen Close() stripped it from character-management, which stays active underneath and only sets the canvas on its own activation edge. Root cause (reviewer-named): two controllers writing one host-global with no owner. Fixed with the root-cause shape (reviewer's option (c)): UiRoot.DeclareFixedCanvas(owner, size)/RevokeFixedCanvas(owner), an owner-scoped arbiter — every declarer must agree on the canvas size (a mismatch throws instead of silently last-writer-wins), and the canvas nulls only once EVERY declarer has revoked. Both CharacterCreationUiController and CharacterManagementUi- Controller now declare/revoke instead of writing FixedCanvasSize directly; grepped for stragglers, none remain in production code (the raw setter stays public only for UiRootFixedCanvasTests' isolated scale-math coverage). New test (reviewer-specified): CharacterScreensFixedCanvasArbiterTests — two controllers sharing one UiRoot, proving the canvas stays set through chargen's Exit-confirm Close while char-management is still active, nulling only once char-management also deactivates, plus the original F1 defect's own covering case (both revoke together at world entry). R3 — HeadlessSessionHostTests.ContentLease_InstallsRealChargenOptions_ SelectHeritageIsAccepted proves F6's install actually opens the gate: a content lease carrying a real hand-built DatCharGen heritage (not ChargenOptions.Empty) is installed, and TrySelectHeritage for it succeeds. R2 — filed docs/ISSUES.md #402 for the pre-existing Streaming.LandblockBuildFactoryTests.Build_UsesTheSuppliedSharedReaderGate full-suite flake (unrelated to Campaign CC). R4 — fixed "unchached" -> "uncached" typo in InteractionRetainedUiComposition.cs. Runtime 1713/0, App 5127/13 skips (+2), Headless 166/0 (+1), full solution Release build green. Live-DAT probes 7/7 under ACDREAM_PROBE_LIVE_MOUNT=1. The known #402 flake did not fire across 3 consecutive full-suite runs this session. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
ec854db045
commit
8add0667a5
9 changed files with 780 additions and 29 deletions
|
|
@ -24,6 +24,36 @@ What does NOT go here:
|
|||
- Every session: scan OPEN issues at start; promote/close anything we touched during the session before ending.
|
||||
- Promoting to a Phase: mark as `DONE (promoted to Phase X)` + commit SHA where the Phase entry landed.
|
||||
|
||||
## #402 — Flaky test: Streaming.LandblockBuildFactoryTests.Build_UsesTheSuppliedSharedReaderGate
|
||||
|
||||
**Status:** OPEN (flake, not a regression)
|
||||
**Severity:** LOW (test-infra noise; no known production defect)
|
||||
**Filed:** 2026-08-15 (Campaign CC slice CC4 review fix round, R2 — noticed
|
||||
while running the full App.Tests suite repeatedly for the F1/R1
|
||||
FixedCanvasSize arbiter gate)
|
||||
**Component:** `tests/AcDream.App.Tests/Streaming/LandblockBuildFactoryTests.cs`
|
||||
|
||||
`Build_UsesTheSuppliedSharedReaderGate` fails intermittently in full-suite
|
||||
runs (observed roughly 2 of 5 runs) but passes reliably when run in
|
||||
isolation (`--filter FullyQualifiedName~Build_UsesTheSuppliedSharedReaderGate`).
|
||||
The test was last touched at `82f8d4f8` (2026-07-25, Slice I7's parsed-
|
||||
collision-graph removal) — unrelated to any Campaign CC/CC4 chargen work,
|
||||
which never touches streaming/collision code. Symptom pattern (passes
|
||||
isolated, flakes under full-suite parallelism) points at shared mutable
|
||||
state or a timing assumption racing another test class rather than the
|
||||
factory logic itself; not yet root-caused.
|
||||
|
||||
**Fix direction:** re-run the full suite a few times to reproduce and
|
||||
capture the failure's actual assertion/exception (not just "sometimes
|
||||
red"), then check `LandblockBuildFactoryTests`'s fixture for anything
|
||||
shared across test classes (static state, a shared reader/gate instance,
|
||||
file-system paths) that a parallel xUnit collection could race.
|
||||
|
||||
**Acceptance:** the flake is reproduced with a captured failure detail,
|
||||
root-caused, and fixed (or the test is isolated into its own collection if
|
||||
the root cause is unavoidable cross-test parallelism); full-suite runs stop
|
||||
intermittently failing on this test.
|
||||
|
||||
## #401 — RetailUi should default ON (opt-out), not per-path forced
|
||||
|
||||
**Status:** OPEN (product-default decision)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue