Add typed append-only scrollback output - #54
Conversation
Add bounded callback-completed append work with typed-control validation, retained-frame relocation, Kitty identity isolation, lifecycle-safe completion, and shared JVM/Native coverage.
AI-assisted review feedbackI reviewed the latest implementation at The implementation addresses the earlier architectural concerns: six-category fair scheduling, the bounded 64-operation queue, collision-safe Kitty ID allocation, permanent restricted-context revocation, resize retry yielding, serialized lifecycle completion, and retained-iTerm2 rejection. I did not find a core append-path correctness blocker, and both current CI checks plus strict OpenSpec validation are green. A few cleanup items remain before merge:
Overall, the append-only implementation itself looks coherent and thoroughly covered; the remaining feedback is primarily merge-readiness, scope, documentation, and test robustness. Disclosure: this feedback was produced with AI-assisted code review and verified against the current PR diff and CI state. |
|
Addressed the merge-readiness feedback in
Validation: focused JVM append suite, focused Scala Native append suite with Clang 22, all-module compilation, Scalafmt, Scalafix, strict OpenSpec validation (14/14), and |
AI-assisted re-reviewRechecked the PR at Two merge-readiness items remain:
I found no new core append-path correctness issue. Disclosure: this re-review was AI-assisted and verified against commit |
|
Addressed the re-review items in
Validation: focused JVM and Clang-22 Scala Native append suites, Scalafmt, Scalafix, strict OpenSpec validation (14 promoted specs), |
Summary
TUI.appendToScrollbackoutput for detached typed componentsNormalResizeClearPolicy.PreserveScrollbackwith a committed retained frameflushRender()contractOpenSpec
openspec/changes/archive/2026-08-02-add-append-only-output-api/append-only-outputspecification and the updatedcomponent-renderingandterminal-runtimerequirementsValidation portability dependencies
Three adjacent changes are intentionally included because they were required to validate the append implementation on every promised surface:
build.millsupportsSIGLYPH_NATIVE_CLANG/SIGLYPH_NATIVE_CLANGPPso all Native modules and tests can use Clang 16+, avoiding the older-toolchain runtime defects warned about by Scala Native.TerminalInputParserkeeps fixed sequences in a validated vector rather than eagerly building an immutable hash trie. Full Native concurrency testing exposed unstable first-use hash-trie initialization on a callback thread; the vector keeps initialization stack-bounded while preserving parser behavior.scripts/test-terminal-pty.shinvokes BSDscript(1)directly on macOS because it does not support GNU-e/-c. This is required for the new append PTY conformance test to run in macOS CI while preserving child exit status.These changes add no runtime dependency or new terminal-control authority.
Validation
Test and package jars— passedmacOS terminal conformance— passedmill core.testmill coreNative.test.testOnly scalatui.core.AppendOutputSuite scalatui.core.TUIConcurrencySuitewith Clang 22mill __.compilescripts/test-terminal-pty.shmill scalafmtCheckmill scalafixCheckopenspec validate --all --strict— 14 passed, 0 failedgit diff --check