The Complaint Was Never the Parser
A VT emulator is decades of edge cases: glyph fallback, combining marks, iTerm-style image protocols, bracketed paste, the way a Korean IME marks text while you are still composing. That work is real, and it is not the work Dad asked for. The frictions were tabs that did not feel like objects, sessions that died with the window, siblings that could not knock, a phone that could not watch without becoming an owner. Those live above the core.
So Smolder embeds a core and pins it. SwiftTerm, exact version, one terminal view per pane. The core is configured — font, colors, scrollback, Option as Meta, bell — and it is never patched. If a keyboard rule has to exist, it rides an app-level event monitor, not a fork of the emulator.
Why a Pin, Not a Range
A floating version is how a renderer change arrives on a Tuesday and the four-harness window feels different on Wednesday, with no commit in your tree that you can point at. An exact pin makes the core a chosen brick. Moving it is a decision, recorded, not a cargo-cult up.
The same day the pin was chosen, another core was read and left on the table: a faster one whose API was still in flux and whose version was not a version. It is revisited only if measurement of the four-harness lag demands it. Embedding a core does not prove performance. It proves you stopped rewriting the wrong layer.
Two Surfaces, One Core
The Mac host is AppKit. The phone is SwiftUI wrapping a UIKit terminal view. Both attach SwiftTerm. That is not an accident and not a preview of a language course — the language course is a sibling quest that does not exist yet. The product fact is: the emulator is a dependency both surfaces share, so a glyph bug is one pin, not two forks. Your code stays in layout, attachment, leases, chrome.