Repository navigation
feat(ui): prototype private computed style normalization - #42
Merged
Merged
Conversation
📦 PR builds ·
|
| Platform | Download |
|---|---|
| 🪟 Windows | hollow-windows-pr-26d2bce |
| 🐧 Linux | hollow-linux-pr-26d2bce |
Build details
| Detail | Value |
|---|---|
| 🧬 Commit | 26d2bce |
| 🕒 Started | 28 Oct 2026, 21:31 UTC |
| ✅ Completed | 28 Oct 2026, 21:42 UTC |
| 🔗 Build run | #65 |
Artifacts expire after 7 days.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Prototype the Phase 1 style contract without migrating live serializers. Stacked on #41, which keeps
ui.styledcanonical andui.themed_styleas a compatibility alias.Add private
shared.compute_style(palette, ...)to separate resolved text, box and spacing properties. Reuse existing box-aware merging and token resolution, preserve absent/false overrides, exclude callbacks/identity, and reject unsupported paint fields. A legacy span adapter keeps identity separate and copies padding to avoid shared mutations. Existing group inheritance and hover remain unchanged; callers select state layers explicitly.Tests compare action span output with the current serializer across four bundled themes and map legacy row paint into the contract. Add a reproducible 25/100/500-node Lua benchmark and document the contract and migration gate.
Validation: 579 Lua tests pass with LuaJIT/Busted; StyLua and git diff --check pass. Zig/native screenshots remain unavailable in this environment.
Performance finding: one run allocated 752 bytes/node in the current path, 1848 when recomputing and adapting, and 720 when adapting a reused snapshot. Recompute timings were higher. Keep the prototype outside the live path; the next component experiment should establish dirty-node reuse or simplify to a flat contract before rollout. These are homogeneous Lua microbenchmarks, not native frame or latency measurements. Phase 1 live adoption is intentionally incomplete.