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

commit376bb54c065e5f0fa55f941cb2070a3e7433e64d
parentd1b8e50801
authorLucas Galante <[email protected]>
date2026-07-09 10:51
docs(rfc): record Phase 6e — cce-colors flips display_list_text; app-side FontSystem hazard

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

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

diff --git a/docs/rfc-core-rebuild.md b/docs/rfc-core-rebuild.md
index 21d4b44..8404a8f 100644
--- a/docs/rfc-core-rebuild.md
+++ b/docs/rfc-core-rebuild.md
@@ -797,8 +797,26 @@ Constraint respected: **each crate still builds standalone** — the new core is
     trees that still contain Layer/Page/etc. — invisible today (text prims unrendered
     without the opt-in), but it means an app can only flip `display_list_text` once its
     tree is embedded-base-free. Consistent with the dissolution plan; revisit per app.
+  - **6e — `cce-colors` flips `display_list_text` (first of the seven adopters). DONE
+    (live-A/B'd; slider drag re-verified via wlrctl).** The whole frame is one
+    `display_list()` — the rebuild check moved off the deleted `view`/`view_rounded_quads`
+    overrides, `rebuild_layout` keeps the flat PageContent text tuples and the list emits
+    them as `text_with` prims; deleted: the app-side `FontSystem`, the `TextItem`
+    assembly, and the `CCE_LEGACY_PAINT` fallback. The A/B exposed a PRE-EXISTING runtime
+    bug this fixes: the app shaped its `TextItem`s with its own
+    `create_font_system_with_system_fonts()`, whose fontdb face IDs don't resolve in the
+    engine's render `FontSystem` — every `font: None` label (slider names, channel
+    values, hex readout) was INVISIBLE at runtime in the baseline (only the bundled-font
+    button labels survived). Shaping through the engine's FontSystem (the dl-text path)
+    is what makes the text render at all. Note for the remaining adopters: an app-side
+    `FontSystem` is not just dead weight, it is a live font-resolution hazard — check
+    each app's text for the same silent invisibility before trusting its baseline
+    capture. cce-colors' safety: no popovers, no paint_tree (flat-list bridge), so
+    neither the popover-occlusion gap nor the 6d embedded-base double-emit applies; its
+    root `Backplate` remains for legacy layout/events (full definition-of-done still
+    pending events + layout).
   - **Still to do (per-app, roughly smallest-first):**
-    the seven display_list() adopters (flip `display_list_text` + drop their TextItem
+    the remaining six display_list() adopters (flip `display_list_text` + drop their TextItem
     assembly, one at a time, each A/B'd — precondition: embedded-base-free tree, see 6d),
     then the widget-tree apps (routed events + scene
     layout + dissolving the embedded-base containers), the demo (`cce-ui/src/main.rs`) as the