acdream/docs/plans
Erik 5d247d5518 fix(chat): CH4 re-review fixes — dialog-queue reentrancy, settings option-bit chokepoint
Should-fix 1: RetailDialogFactory.CloseDialog's queued branch removed the
active DialogInfo, ran DialogDone (whose callback can synchronously open a
new dialog under the SAME queue key — the two-stage house-abandon
confirmation does exactly this), then called OpenNextDialog, which did an
unconditional Dictionary.Add on a key the reentrant dialog had already
re-occupied. Retail's HashTable::add tolerates the duplicate; Dictionary
throws. OpenNextDialog now returns early when the queue key is already
active — the reentrant dialog's own eventual close drains the queue.

Should-fix 2: @join/@leave wrote the local RuntimeCharacterOptionsState bit
before sending, but the Settings Chat toggles reached a second binding
(SendSingleCharacterOption) that only sent the wire message, leaving the
Turbine membership gate stale until the next PlayerDescription.
LiveSessionRuntimeFactory.CreateCommandBindings now has one shared local
function for both entrances.

Should-fix 3: corrected TS-68/#360 wording again — retail's DoAllegiance
dispatcher table EXECUTES boot/ban/officer/title/motd/name/lock/house/
chat/broadcast locally through their own handlers; acdream shows the
unrecognized-subcommand refusal for all nine pending the #360 port. What
matches retail is the ownership rule (the verb never reaches
DoChannelCommand/the server), not the subcommand behavior itself. Removed
the inaccurate "matching retail, not merely harmless" / "now matches
this" claims from both the register row and the issue.

Nits: corrected the HouseAbandonDialogCallback_First citation (0x00580E1A
is DoHouse's load site for the callback pointer, not the function entry —
the entry is 0x00580240, with the stage-2 confirmation string built at
0x005802D8) in both ClientCommandController.cs and the mirrored test
comment; added an InlineData case pinning "@clist allegiance" to
RequestChannelList(0x02000000); converted RetailClientCommandCatalog.
KnownVerbs from a plain array to a FrozenSet<string> with
StringComparer.OrdinalIgnoreCase, matching the file's other lookup tables.

Suite: 12,221 passed / 4 skipped / 0 failed (Release), up from CH4's
12,216/4/0 — net +5 tests, no removals.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-09 22:24:43 +02:00
..
2026-04-10-phase-1-terrain-and-plugin-scaffold.md docs: phase 1 implementation plan 2026-04-10 09:17:49 +02:00
2026-04-10-phase-2-static-meshes-design.md docs(phase-2): refine design after DatReaderWriter spike 2026-04-10 17:18:43 +02:00
2026-04-10-phase-2-static-meshes-plan.md docs: phase 2 implementation plan (tasks 1-10 full, 11-18 sketch) 2026-04-10 17:27:53 +02:00
2026-04-10-phase-2b-design.md docs: phase 2b design — atlas textures, neighbors, dual cameras, plugin api 2026-04-10 20:00:23 +02:00
2026-04-10-phase-2b-plan.md docs: phase 2b implementation plan (9 tasks) 2026-04-10 20:13:03 +02:00
2026-04-10-phase-3c-terrain-blending-plan.md docs(plan): Phase 3c terrain blending plan 2026-04-10 23:43:04 +02:00
2026-04-10-phase-4-networking-design.md docs(plan): Phase 4 networking design 2026-04-10 22:31:26 +02:00
2026-04-10-plugin-architecture-design.md docs: plugin architecture design 2026-04-10 09:11:52 +02:00
2026-04-11-roadmap.md fix(chat): CH3 review fixes — phantom UN-9, allegiance-broadcast echo, /a legacy fallback 2026-08-09 20:24:29 +02:00
2026-04-13-rendering-rebuild.md fix(movement): jump works locally (airborne velocity preserved) 2026-04-14 00:12:11 +02:00
2026-04-23-sky-weather-lightning-port.md docs(sky): port plan for PhysicsScript/fog/lightning/crossfade 2026-04-24 10:53:46 +02:00
2026-04-24-ui-framework.md docs(ui): align architecture with retained runtime 2026-07-10 16:57:44 +02:00
2026-04-27-phase-c1-pes-particles.md feat(vfx): Phase C.1 — PES particle renderer + post-review fixes 2026-04-28 22:47:11 +02:00
2026-04-29-movement-collision-conformance.md docs(phys L.2g): slice 1 shipped handoff + B.4 gap discovery + plan-of-record 2026-05-12 23:17:05 +02:00
2026-04-30-sky-pes-port.md docs(plans): #36 sky-PES dispatch port plan + .gitignore for retail-debugger scratch 2026-04-30 23:00:46 +02:00
2026-05-08-phase-n5-perf-baseline.md phase(N.5): retirement amendment — InstancedMeshRenderer + StaticMeshRenderer + WbFoundationFlag deleted 2026-05-08 22:01:36 +02:00
2026-05-09-phase-n5b-perf-baseline.md docs(N.5b T10): roadmap + ISSUES + CLAUDE.md + perf baseline updates 2026-05-09 13:03:14 +02:00
2026-05-10-perf-tiers-2-3-roadmap.md docs(perf): roadmap for Tier 2 + Tier 3 entity-dispatcher optimizations 2026-05-10 09:38:38 +02:00
2026-05-11-phase-n6-perf-baseline.md docs(perf #N6.1): apply final-review fixes — spec, baseline doc, issue #55 2026-05-11 12:51:10 +02:00
2026-05-12-milestones.md docs: hand off placement campaign finish 2026-08-03 12:54:47 +02:00
2026-05-12-phase-c1.5b-handoff.md docs(vfx #C.1.5b): handoff for next slice (issue #56 + EnvCell statics) 2026-05-11 18:22:01 +02:00
2026-06-11-building-render-port-plan.md docs: T5 comprehensive gate verdict - PARTIAL PASS; #108/#109/#97 closed, #117-#120 filed 2026-06-11 15:46:30 +02:00
2026-07-02-retail-motion-animation-rewrite.md fix(motion): restore retail object manager order 2026-07-19 21:40:14 +02:00
2026-07-20-automated-world-lifecycle-gate.md docs(runtime): close deterministic world lifecycle gate 2026-07-21 00:00:31 +02:00
2026-07-21-gamewindow-slice-1-selection-interaction.md docs(architecture): close selection extraction slice 2026-07-21 09:04:31 +02:00
2026-07-21-gamewindow-slice-2-live-animation-presentation.md docs(architecture): close live animation slice 2026-07-21 10:03:20 +02:00
2026-07-21-gamewindow-slice-3-live-session.md docs(architecture): close live-session ownership slice 2026-07-21 12:44:48 +02:00
2026-07-21-gamewindow-slice-4-live-entity-integration.md docs(plan): complete GameWindow slice 4 2026-07-21 19:29:04 +02:00
2026-07-21-gamewindow-slice-5-landblock-presentation.md docs(architecture): close GameWindow slice 5 2026-07-21 23:45:45 +02:00
2026-07-21-gamewindow-slice-6-update-frame-orchestration.md docs(architecture): close GameWindow slice 6 2026-07-22 03:54:11 +02:00
2026-07-22-gamewindow-slice-7-render-frame-orchestration.md docs(architecture): close GameWindow render slice 2026-07-22 08:40:52 +02:00
2026-07-22-gamewindow-slice-8-checkpoint-g-runtime-settings.md refactor(settings): own two-phase runtime settings 2026-07-22 13:30:22 +02:00
2026-07-22-gamewindow-slice-8-checkpoint-h-resource-ownership.md refactor(lifetime): own render resource prefixes 2026-07-22 14:42:14 +02:00
2026-07-22-gamewindow-slice-8-checkpoint-i-ordered-composition.md refactor(app): close ordered startup composition 2026-07-22 19:20:20 +02:00
2026-07-22-gamewindow-slice-8-checkpoint-i6-ui-live-presentation.md refactor(app): compose live presentation startup 2026-07-22 17:55:15 +02:00
2026-07-22-gamewindow-slice-8-checkpoint-i7-session-player.md refactor(app): compose session and player startup 2026-07-22 18:28:32 +02:00
2026-07-22-gamewindow-slice-8-checkpoint-i8-frame-roots-session-start.md refactor(app): make session start terminal 2026-07-22 19:06:00 +02:00
2026-07-22-gamewindow-slice-8-checkpoint-j-lifetime-shutdown.md refactor(app): extract focused window lifetime 2026-07-22 19:43:52 +02:00
2026-07-22-gamewindow-slice-8-checkpoint-k-canonical-soak.md docs(architecture): record GameWindow automated closeout 2026-07-22 20:52:25 +02:00
2026-07-22-gamewindow-slice-8-checkpoint-l-closeout.md docs(architecture): record GameWindow automated closeout 2026-07-22 20:52:25 +02:00
2026-07-22-gamewindow-slice-8-composition-lifecycle.md docs(architecture): record GameWindow automated closeout 2026-07-22 20:52:25 +02:00
2026-07-23-world-interaction-completion.md docs: world-interaction program CLOSEOUT — all six slices complete, vendors user-accepted end to end 2026-08-08 17:56:42 +02:00
2026-07-24-modern-runtime-architecture.md docs: reconcile project state and refresh README 2026-07-27 12:53:31 +02:00
2026-07-24-modern-runtime-slice-b-envcell-dedup.md docs(perf): close Slice B with full-bake evidence 2026-07-24 14:10:50 +02:00
2026-07-24-modern-runtime-slice-c-prepared-assets.md perf(content): close prepared asset cutover 2026-07-24 15:49:24 +02:00
2026-07-24-modern-runtime-slice-d-unified-residency.md docs(render): close unified residency slice 2026-07-24 17:06:17 +02:00
2026-07-24-modern-runtime-slice-e-cost-budgeted-streaming.md fix(streaming): preserve portal destination ownership 2026-07-25 08:35:12 +02:00
2026-07-24-modern-runtime-slices-f-g-render-scene.md docs(rendering): close retained-scene G5 2026-07-25 13:55:38 +02:00
2026-07-25-modern-runtime-slice-h.md fix(streaming): preserve portal destination ownership 2026-07-25 08:35:12 +02:00
2026-07-25-modern-runtime-slice-i.md fix(physics): traverse prepared indoor portal topology 2026-07-27 00:02:44 +02:00
2026-07-25-modern-runtime-slice-j.md docs(runtime): close Slice J and activate Slice K 2026-07-27 01:01:41 +02:00
2026-07-25-modern-runtime-slice-j2.md docs(runtime): close J2 session lifetime gate 2026-07-25 19:46:47 +02:00
2026-07-25-modern-runtime-slice-j3-object-table.md docs(runtime): close J3.4 and plan J3.5 2026-07-26 06:09:28 +02:00
2026-07-25-modern-runtime-slice-j3-projection-store.md docs(runtime): close J3.3 and hand off J3.4 2026-07-25 22:29:34 +02:00
2026-07-25-modern-runtime-slice-j3.md docs(runtime): close canonical entity object lifetime 2026-07-26 07:35:42 +02:00
2026-07-26-modern-runtime-slice-j3-delta-stream.md docs(runtime): close J3.5 and plan J3.6 2026-07-26 06:54:47 +02:00
2026-07-26-modern-runtime-slice-j3-hardening.md docs(runtime): close canonical entity object lifetime 2026-07-26 07:35:42 +02:00
2026-07-26-modern-runtime-slice-j4.md docs(runtime): close gameplay-state ownership 2026-07-26 10:17:39 +02:00
2026-07-26-modern-runtime-slice-j5.md docs(runtime): close simulation ownership 2026-07-26 16:29:28 +02:00
2026-07-26-modern-runtime-slice-j6.md docs(runtime): close exact world host ownership 2026-07-26 18:41:24 +02:00
2026-07-26-modern-runtime-slice-j7.md docs(runtime): close the accepted J7 visual gate 2026-07-27 00:12:26 +02:00
2026-07-26-modern-runtime-slice-j8.md docs(runtime): close Slice J and activate Slice K 2026-07-27 01:01:41 +02:00
2026-07-26-modern-runtime-slice-k.md docs(headless): close modern runtime slice K 2026-07-27 11:31:19 +02:00
2026-07-26-modern-runtime-slice-l.md docs(linux): park Slice L at L1 checkpoint 2026-07-27 12:35:47 +02:00
2026-07-27-vulkan-campaign.md docs(render): Campaign V is closed - the deferred reruns pass on the GL-free tree 2026-07-29 07:49:29 +02:00
2026-07-29-network-transport-campaign.md docs: Campaign N CLOSED - user-accepted; #260 closed; #262 filed 2026-07-29 17:48:45 +02:00
2026-07-29-physics-parity-campaign.md test(physics): harden TS-4 production chronology 2026-07-31 14:08:51 +02:00
2026-07-29-post-vulkan-work-intake.md docs: VTank requirements research - the plugin-automation milestone model 2026-07-29 16:29:49 +02:00
2026-07-30-physics-parity-visual-matrix.md docs(physics): close Campaign P visual matrix 2026-07-31 10:20:48 +02:00
2026-08-02-placement-cutover.md docs: close the placement cutover ledger — #280 user-passed, remaining gates NOT RUN 2026-08-06 11:05:49 +02:00
2026-08-03-recent-regression-cleanup.md docs: close the recent-regression cleanup plan 2026-08-03 14:34:07 +02:00
2026-08-06-collision-fidelity-campaign.md test(physics): S6 — the camera provably reaches both PerfectClip TOI tails; contained, not dormant 2026-08-07 09:21:40 +02:00
2026-08-07-morning-gate-checklist.md docs: morning gate G1 user-passed — AD-65 downhill slope feel accepted 2026-08-07 06:50:58 +02:00
2026-08-08-audio-parity-campaign.md feat(audio): Ctrl+M instant mute + inn-chatter investigation closed as server content 2026-08-09 14:09:24 +02:00
2026-08-09-chat-parity-campaign.md fix(chat): CH4 re-review fixes — dialog-queue reentrancy, settings option-bit chokepoint 2026-08-09 22:24:43 +02:00
animation-system-audit.md docs(anim): Phase L.1a animation system audit 2026-04-28 10:38:58 +02:00