git.lucas.co / cce-ui
GPU-accelerated UI toolkit (Vulkan)
git clone https://git.lucas.co/cce-ui.git

commit079c469b2def289444762d63f1b2c411e42aefc1
parentaa0343fe10
authorLucas Galante <[email protected]>
date2026-07-13 10:27
docs(rfc): the designer event redesign recorded — AppDrag split, deferral closed

Co-Authored-By: Claude Fable 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01N4ajhvVZtyEEEus9bodsj3

 docs/rfc-core-rebuild.md | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/docs/rfc-core-rebuild.md b/docs/rfc-core-rebuild.md
index d1b30bb..383a76b 100644
--- a/docs/rfc-core-rebuild.md
+++ b/docs/rfc-core-rebuild.md
@@ -1888,6 +1888,35 @@ Constraint respected: **each crate still builds standalone** — the new core is
        workspace suite; designer capture pixel-identical to the
        prior slice's (empty 8% mask) + /state live; TI click probe
        canary-silent.
+       **THE DESIGNER EVENT REDESIGN — DONE (2026-07-13), closing the
+       6bd deferral.** The resolution is a design decision, not a
+       router conversion: the designer's event layer IS its own
+       z-ordered windowing system (custom hit shapes with
+       circular-pane overrides, hardcoded pane z, pane-focus
+       derivation, unfocus rituals) and deliberately delivers through
+       `handle_event` directly — the UiContext router's
+       hit-gating/descent/drag tracking cannot own that policy, and
+       mixing the two would double-run drag state machines. What the
+       redesign fixes is the CONFLATION the deferral named:
+       `drag_widget` no longer doubles as app-mode-drag marker. A new
+       `AppDrag` enum (NetworkResize/ParamResize/SpreadsheetResize,
+       each variant carrying its whole gesture state — dir, start
+       rect/width/height, start mouse) owns the floating-pane edge
+       resizes; the three `is_resizing_*` flags and four
+       `drag_start_*` scratch fields are deleted; `drag_widget` only
+       ever names a widget drag driven through the slot's Input drag
+       hooks; exactly one of the two is armed per press. Release
+       teardown, cursor hiding, path-change resets, and the
+       hover-loop gate all read the split state; the hot-path
+       MouseInput debug `println!` died as a rider. Verified: A/B vs
+       stashed baseline — canvas-click and menu-open frames
+       byte-identical (AE=0), id-stripped /state identical, launch
+       frame differs by cursor sprites only (same-binary control
+       AE=0). Held gestures (edge resizes, panel move, node drag) are
+       not headlessly drivable — user spot-check pending. The
+       `draggable`/`is_dragging` trait methods still have this
+       cascade + TI's ControlPanel as dyn consumers — they leave the
+       trait with the CP endgame.
     5. window_runner render plumbing + remaining `as_ptr` sites; then
        the `Element` + `Adapted` endgame (own design pass).
     Stored-pointer state remaining after slices 1–3, all deliberate: