Two Glasses, One Contract
Smolder on iPhone and iPad is one universal app, not two products with two contracts. Same gateways, same device permission, same daemon identity, same ember in the chrome. Size class changes how many sessions you can see, not what you are allowed to do in them. iPhone focuses one session. iPad may show two. Two apps would be two places to get the input contract wrong, two TestFlight trains, two pins, two ways for a hangup to mean kill on one glass and detach on the other.
Universal is not a marketing word here. It is a refusal to let iPad become "the real pocket terminal" while iPhone becomes a viewer with a looser brain. The working contract is continue-host-work on both: open a host session and type in it beside the Mac, open a shell or CLI through the host. An iPhone that cannot type because it is "only a viewer" is a second product. An iPad that can do something the iPhone cannot, because it is larger, is a second product too. Both fail the one-contract test.
Two Visible, One Keyboard Focus
An iPad can put two host sessions on screen. That is a projection luxury. Each pane keeps its own state — typing enabled, held, held by someone else, or observing — and exactly one of them has keyboard focus. The focused pane says Keyboard here; the other, on a device approved for control, says it can type but is not where your keys are going. Tapping the other pane moves keyboard focus; it does not take anything from anyone, because under the shared contract nothing is taken.
A hardware keyboard on iPad makes typing feel effortless, and that is exactly why focus has to be unmistakable. Keystrokes go to the one pane that shows Keyboard here — never into whichever pane the cursor last painted, never into both. A device approved only to read types nowhere at all, on either size of glass.
Size Class Never Mints Permission
Rotation, split view, Stage Manager — those change how many rectangles you can see. They do not grant input and they do not resize the host: the grid still follows whoever typed last. If a size-class callback ever changed a pane's permission or sent a size to the daemon, observation would have resized the contract, which is worse than resizing a PTY.
Delivery stays one binary through TestFlight. Track 7 will insist on that pipeline. This lesson insists on why: one contract cannot survive two apps that drift. The destination track's later milestones — checkpoints, direct SSH, keys — are still one app's milestones, not an iPad-only SSH client and an iPhone-only viewer. Mix those and you have taught a family that the pocket is two products. It is not. It is one fire, two sizes of glass, one owner of the keys when keys exist, and one clear keyboard focus today.