You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Combining marks, ZWJ emoji, East Asian wide characters, ANSI zero-width state, clipping, wrapping, overlays, and style resets have cross-platform golden tests.
Unsupported OSC/DCS/control input cannot inject terminal commands through rendered content.
ZStack honors alignment and transparent overlays preserve unaffected cells.
Surface construction and compositing are linear in produced cell count for the covered operations.
macOS and Linux produce identical cell layouts under Swift 6.0.
Build, tests, lint, and DocC finish with zero warnings and errors.
Dependencies
Depends on the public-surface decision in #7 and characterization/golden-fixture support from #6. The full surface migration may proceed in parallel with identity and keyed-collection work; only a minimal render-result boundary must be coordinated before integration.
Parallelization
Can run in parallel with structural identity after runtime boundaries are fixed. Reserve FrameBuffer, terminal-width, compositing, and diff-adapter files for this issue.
Commit structure
Split this issue into small, thematic, independently revertible commits wherever the work can remain coherent.
Every commit must build and keep its applicable tests/gates green. Do not commit an intentionally failing regression test; use local/known-issue characterization or land the test with the smallest fix.
Keep characterization/fixtures, mechanical renames or moves, semantic changes, and documentation/migration updates separate when each step remains green.
The issue boundary is not a commit boundary; multiple commits are expected for independently reversible changes.
Problem
Rendering mixes visible content and ANSI control sequences in Strings, so width, clipping, compositing, and performance are inconsistent:
Character.terminalWidthmisclassifies a base character plus combining mark as width 2.String.count, character counts, and terminal-cell width.FrameBuffer.appendVerticallyrepeatedly copies growing arrays inSources/TUIkitCore/Rendering/FrameBuffer.swift:126-140.FrameBuffer.swift:202-240,282-312.Proposed solution
FrameBufferthrough [P0-02] Establish an executable SwiftUI compatibility manifest and API gate #7 before choosing compatibility work. If it remains public, preserveFrameBuffer.linesthrough a reviewed adapter or migration; if it is implementation-only, move it topackage/SPI in [P2-30] Reduce the public implementation surface and namespace TUI-only APIs #35 and avoid a throwaway public adapter.Acceptance criteria
Dependencies
Depends on the public-surface decision in #7 and characterization/golden-fixture support from #6. The full surface migration may proceed in parallel with identity and keyed-collection work; only a minimal render-result boundary must be coordinated before integration.
Parallelization
Can run in parallel with structural identity after runtime boundaries are fixed. Reserve
FrameBuffer, terminal-width, compositing, and diff-adapter files for this issue.Commit structure