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

commitdd587180a1253ef520b29e2e83ec74c5ecff6e9c
parentc83e133b78
authorLucas Galante <[email protected]>
date2026-07-10 09:02
docs(rfc): record Phase 6w — settings SectionContainer dissolved; app embedded-base-free

Co-Authored-By: Claude Fable 5 <[email protected]>

 docs/rfc-core-rebuild.md | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/docs/rfc-core-rebuild.md b/docs/rfc-core-rebuild.md
index 58e76cc..5175acb 100644
--- a/docs/rfc-core-rebuild.md
+++ b/docs/rfc-core-rebuild.md
@@ -1071,9 +1071,29 @@ Constraint respected: **each crate still builds standalone** — the new core is
     the focused border tint shows through the translucent bg as a green wash
     (legacy did this too, darker under its doubled bg). Not headlessly drivable,
     user spot-check pending: held thumb drag, arrow/PageUp/Down over a hovered list.
+  - **6w — settings' SectionContainer dissolved; cce-system-settings is
+    embedded-base-FREE. DONE (A/B render dumps: all nine pages byte-identical
+    modulo live data — the sections never painted; live-verified — notifications
+    spinbox + menu open/select with in-frame occlusion, audio spinbox round trip
+    through pactl and the watcher, processes filter-box click-to-focus, services
+    list wheel).** The per-rebuild section clones were pure event/focus plumbing:
+    propagate roots whose `container` children were the pages' widgets, plus the
+    ctrl-nav focus targets. `AppPage::section_widgets()` (one widget-pointer group
+    per section, old count/order) replaces `get_section_containers` +
+    `link_children` + `clear_children`; the widgets dispatch directly as propagate
+    roots flattened in the legacy order, and section-level keyboard focus is an
+    app-side index, single-slot with the global widget focus exactly as when both
+    lived in `FOCUSED_WIDGET` (entry → section 0; ctrl+j/k cycle; ctrl+i descends
+    to the section's first widget — the legacy walk went through the
+    header/container intermediates; ctrl+u ascends from a widget to its section;
+    a focus-taking click and page switches drop the highlight). Also killed a
+    latent use-after-free of exactly the class this rebuild targets: the focused
+    section clone was dropped and reallocated EVERY rebuild while the global
+    focus pointer kept aiming at it — it survived only because same-size Vec
+    reallocation tends to reuse the freed block. Ctrl-nav is not headlessly
+    drivable (no virtual-keyboard protocol) — user spot-check pending.
   - **Still to do:**
-    settings' SectionContainer (the last embedded base there — the
-    sections are thin [header, container] dispatch shells now); data-editor +
+    data-editor +
     text-editor off the engine popup path, then delete the popup surface machinery;
     files' internal containers (splitters/BrowseContainer/List) and data-editor's
     SplitBox/TreeList when their turns come; routed events + scene layout for the