Commit graph

4620 commits

Author SHA1 Message Date
Erik
01b98ca30c feat(plugin-ui): Slice A - movable, collapsible plugin shelf
Owner request (docs/plans/2026-09-06-plugin-shelf-and-dat-icons.md, Slice A):
the plugin shelf was pinned to the right screen edge every tick, had no drag
or hide affordance, and never persisted position. It is now a registered
retained window ("plugin-shelf") that gets drag, the UI lock, and
RetailWindowLayoutPersistence position/visibility/collapsed persistence for
free, the same way every other retained window does.

Design decisions where the plan left room:

- Grip + collapse toggle are drawn, not child elements. A real child for the
  toggle would have to live outside any WindowMoveHandle grip subtree (nesting
  it inside lets UiRoot's drag-handle promotion swallow the press before the
  button ever sees a click - `handleWindow is not null` outranks
  `HandlesClick` in UiRoot.OnMouseDown), and a grip element as a plain sibling
  changes UiElement.Children's shape, which the pre-existing single-button
  shelf tests assert directly (`Assert.Single(shelf.Children)`). Keeping the
  whole shelf Draggable=true and excluding just the toggle's pixel rect from
  an overridden HandlesClick (computed live from UiRoot.MouseX/MouseY, the
  only call site) gets grip-drags/buttons-and-toggle-don't without adding any
  child or touching the existing tests' shape assumptions.
- Availability (has plugin windows) vs the user's requested-visible intent
  are split the same way PluginWindowVisibilityController already splits it
  for individual plugin windows, but applied SYNCHRONOUSLY (not via
  VisibleSource) so Visible updates immediately after Add()/unregister with
  no dependency on a Tick ever running - required to keep the pre-Slice-A
  unregistered-shelf test (ShelfAndMinimizeButtonsHideAndRestoreWithoutUnregisteringWindow)
  green, since it never calls root.Tick().
- "The shelf was moved" (drag or a differing restored layout) is tracked via
  the shelf's own RetailWindowHandle.Moved event, captured through
  WindowManager.WindowRegistered the moment MountPlugins registers it - so
  unregistered/legacy use (the two other pre-existing tests) never sets this
  and behaves exactly as before.
- The one-time right-edge dock (no saved layout) fires on the first OnTick
  with a real parent width, replacing the old per-tick pin; Reflow's
  anchor math then preserves the top-right corner while still docked or the
  top-left corner once positioned, on any width change (entry add/remove,
  collapse, or a parent-height-driven column rewrap).

Caption finding: the Configure Keyboard row for InputAction.TogglePluginManager
resolves its label live from the installed DAT's action-map string table
(KeyboardConfigController.BuildActionRow, RetailActionMapRow.LabelHash) -
there is no "Plugin Manager" string literal anywhere in our code to rename to
"Plugin Shelf". The row keeps showing retail's own authored name; only the
acdream-side action semantics changed.

Tests added to PluginSidePanelTests.cs (all 7 fail to even compile against
the pre-Slice-A PluginSidePanel, verified by temporarily reverting the source
files and re-running): default right-edge dock; top-right corner preserved
across a Reflow-driven width change while docked; grip drag moves the shelf
and top-left survives the next reflow once positioned; drag refused under
UiLocked; collapse via the real toggle click round-trips through
CaptureWindowState/RestoreWindowState; Show/Hide toggle sequence and a hidden
shelf staying hidden when a new plugin window registers; a full
RetailWindowLayoutPersistence round trip of X/Y/Visible/Collapsed onto a
fresh shelf instance. All 3 pre-existing tests remain green unmodified.

Verified: dotnet build src/AcDream.App (Release) green; the full App test
suite passes 7294/97 skipped/36 pre-existing unrelated failures (identical
failure set confirmed present on HEAD before this change - installed-DAT
live-mount probes, Linux-only pacing/credential tests, and known alpha-flush
COUNT-only conformance divergences, none touching plugin UI).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-06 13:11:43 +02:00
Erik
0275b4ca5a fix #485: isolate console capture and align Gitea portable test lanes
All checks were successful
CI / linux-portable (push) Successful in 3m40s
CI / windows-gate (push) Successful in 6m16s
CI / release (push) Successful in 2m13s
2026-09-06 11:41:27 +02:00
Erik
3ebb120dd2 fix #483: restore far terrain and close OVERHAUL with #484 deferred
Some checks failed
CI / linux-portable (push) Successful in 3m36s
CI / windows-gate (push) Failing after 6m52s
CI / release (push) Has been skipped
2026-09-06 10:22:51 +02:00
Erik
e0ba3e7f2c docs(overhaul): bound far-terrain repair and owner-first test order 2026-09-06 09:21:02 +02:00
Erik
c775eea166 docs(overhaul): prepare owner G4 checklist and reconcile active status 2026-09-05 21:46:06 +02:00
Erik
64d7a3981a docs(overhaul): seal final visual controls and retain shutdown failure 2026-09-05 21:40:59 +02:00
Erik
89a9a7f2ac docs(overhaul): verify final lifecycle reconnect and R6 stability gates 2026-09-05 21:16:26 +02:00
Erik
cf1bc84033 docs(overhaul): record final C1a gates and live execution bounds 2026-09-05 20:56:33 +02:00
Erik
eea83ac884 test(overhaul): pin verified cathedral geometry and membership 2026-09-05 20:44:30 +02:00
Erik
00ea65a164 docs(overhaul): seal matching cathedral capture and mutation release 2026-09-05 20:33:19 +02:00
Erik
66825e0bb8 test(overhaul): integrate guarded cathedral geometry witness 2026-09-05 20:29:32 +02:00
Erik
1e645ee404 fix(physics): port ordered part-array building transit 2026-09-05 20:28:52 +02:00
Erik
4e4e8e8253 docs(overhaul): bound nonempty geometry witness integration
Prepare the original unpinned witness with an explicit cathedral-shell non-vacuity gate. Write-only while the separate production bridge owns test execution; preserve the scratch and its failed diagnostics.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-09-05 20:17:35 +02:00
Erik
4c3aafcd07 docs(overhaul): resolve malformed building reciprocal guard
Use the existing InvalidDataException content-integrity boundary for a loaded destination's out-of-range positive reciprocal index. Preserve negative/unavailable skips; record the managed guard with AP-159 at implementation landing.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-09-05 20:14:34 +02:00
Erik
f72d471a31 docs(overhaul): bound retail part-array building bridge repair
Port the proven missing box admission and immediate destination transit, preserving sphere callers and separate registered source/equality residuals. Keep the failed authored-input diagnostic and original golden untouched.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-09-05 20:12:31 +02:00
Erik
846cdd94b3 docs(overhaul): establish cathedral ramp bridge rejection evidence
Preserve the three explicit diagnostic outcomes and all18 outgoing edges. Native box containment rejects the extra room; five later-part sphere-input alarms remain red and nondecisive for these edge results. Correct AD-117's disproven widening guarantee. No production geometry or golden change, FPS remains deferred, G4 unpassed.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-09-05 20:11:17 +02:00
Erik
f9bb47ec63 feat(diagnostics): retain bounded local crash reports (#477)
Project the original Run failure with loaded build, cached GPU and cell context before unwind. Preserve crash status and rethrow; contain report failures and omit arbitrary messages, source paths and session data.

Focused 19/19, narrow production/privacy review and default Release 17044/0/0 pass. Preserve the wrong-package smoke failure and real emitted report; corrected recipe10 smoke exits gracefully with two provisional PNG passes. AMD initiating cause and G4 remain open; FPS deferred. No new retail behavior deviation.
2026-09-05 19:49:22 +02:00
Erik
9baef7c507 docs(overhaul): record extended stability and bound ramp diagnostic 2026-09-05 19:24:41 +02:00
Erik
051db2e3bb docs #477: record active extended cathedral reproduction 2026-09-05 19:00:31 +02:00
Erik
f4da814af6 fix #477: preserve fatal swapchain operation and result
Native-boundary injection: old code 9 pass / 6 expected Assert.Throws failures. Separate acquire and present sabotage each fail their 3 fatal cases; restored focused gate 82/82. One independent API/production review PASS. Lead locked Release 0W0E; literal-hermetic 17051/0/0, manifest32/32. No retirement, recovery, normal result policy or retail behavior changes. This is first-failure evidence preservation, not an AMD reset fix; extended reproduction and G4 remain open.
2026-09-05 18:57:08 +02:00
Erik
c8ec04e97d docs #477: bound first-failure reporting and extended reproduction 2026-09-05 18:49:22 +02:00
Erik
cd888a4932 fix #482: restore neighboring outdoor wall collision
Retain building and object collision for available neighboring landcells when the terrain polygon does not cover the sphere center. Verified against named and paired retail dispatch. Add prepared-flat regressions and installed cathedral repro with sabotage proof. Full Release gate 17036/0/0 and graphical wall blocking, overlap correction and escape pass provisionally. Owner accepts functional collision; exact retail settle coordinates are not claimed. Retire UN-10; keep AP159, AMD stability and final G4 open.
2026-09-05 18:42:31 +02:00
Erik
508c6014ec docs(overhaul): capture retail cathedral ramp membership 2026-09-05 18:01:10 +02:00
Erik
620540aba2 docs(overhaul): record cathedral GPU recurrence and isolated checks 2026-09-05 17:01:44 +02:00
Erik
f4bf5ffab8 Record C1a bridge scope finding without changing production or golden 2026-09-05 15:37:23 +02:00
Erik
b7cb6886c5 Record final lighting correctness lanes and unchanged remaining gates 2026-09-05 15:33:49 +02:00
Erik
b2bdb09ccb Align final test expectations with reviewed lighting repair 2026-09-05 15:29:17 +02:00
Erik
6349f0911e Record final lighting and portal gates; bound stale test expectations 2026-09-05 15:24:41 +02:00
Erik
0ae2666ef0 Finish bounded lighting-observer cleanup and record verification 2026-09-05 15:15:59 +02:00
Erik
2f192570a2 docs(overhaul): reconcile owner issue status and FPS deferral 2026-09-05 15:07:01 +02:00
Erik
1772c1a5a2 docs(overhaul): record repaired lighting gate and activate observer cleanup 2026-09-05 15:05:11 +02:00
Erik
a5debaca2b fix(overhaul): integrate reviewed room-light selection repair
Exact26 code/test/architecture/register blobs from621b41fa3; campaign ledger and lead verification included. Independent retail and production/lifetime/ABI reviews PASS. Lead69Core/176App/2actualshader pixels, viewer/clear/NaN negative controls fail as intended, exact restoration69PASS. AP68retired; AP16/35/85 residuals honest. Fresh campaign Release and graphical lighting proof still owed; temporary observer cleanup contract conditional. FPS deferred; no G4 or main merge.
2026-09-05 14:57:52 +02:00
Erik
e8efe1131f test(overhaul): prepare the bounded dungeon lighting controls 2026-09-05 14:18:56 +02:00
Erik
4bc208b574 docs(overhaul): contract the observed dungeon room-light repair 2026-09-05 14:14:24 +02:00
Erik
c42f66f167 docs(overhaul): flag obsolete Town Network light-flood fix guidance 2026-09-05 14:05:41 +02:00
Erik
491e8adefa docs(overhaul): confirm dungeon static-light starvation in live frame 2026-09-05 14:02:10 +02:00
Erik
59b0b6e72f test(overhaul): integrate reviewed consumed-light checkpoint observation 2026-09-05 13:56:49 +02:00
Erik
ad866b7f65 docs(overhaul): verify light insertion order against retail binary 2026-09-05 13:46:14 +02:00
Erik
6c3ffd79ec docs(overhaul): bound consumed-light observation for dark dungeons 2026-09-05 13:43:01 +02:00
Erik
7724b63116 docs(overhaul): record graphical passes and remaining owner findings 2026-09-05 13:41:25 +02:00
Erik
1e376c244b fix(overhaul): integrate reviewed resize capture sequencing 2026-09-05 13:26:06 +02:00
Erik
58185285d3 docs(overhaul): bound resize automation frame-boundary correction 2026-09-05 13:18:36 +02:00
Erik
f6285e0edb docs(overhaul): record held-item pass and failed first-resize gate 2026-09-05 13:17:00 +02:00
Erik
0ca10cf249 fix(overhaul): integrate completed-frame capture and host visibility 2026-09-05 13:09:55 +02:00
Erik
0bd2ee7c22 docs(overhaul): bound ramp building-bridge diagnostic 2026-09-05 12:59:42 +02:00
Erik
9c33535e45 docs(overhaul): defer FPS work by owner direction 2026-09-05 12:55:02 +02:00
Erik
25e2702d33 docs(overhaul): record C1c integrated gate and activate real geometry witness 2026-09-05 12:40:49 +02:00
Erik
42afec6141 test(overhaul): land reviewed C1c replay correction and retire AD-118 2026-09-05 12:35:45 +02:00
Erik
744b1b0efb docs(overhaul): bound capture host-visibility fix and preserve first-frame gate 2026-09-05 12:33:24 +02:00
Erik
4b9242d00f fix(render): integrate reviewed equipped geometry publication and ledger (#480) 2026-09-05 12:27:48 +02:00