## eneskirca/nodeterm — v0.4.1…v0.4.2

_53 commits._

### Features
- **feat(settings): label mobileLiveActivities 'Live updates on phone' (key unchanged)** (6a31c04)
- **feat(ui): platform-neutral phone pairing and store copy via mobileStoreLinks** (ab900b1)
- **feat(links): one store-link helper; Play link gated behind ANDROID_APP_PUBLISHED** (b18ba64)
- **feat(license): accept the google source and explain a Play-bridged Pro** (ced59af)
- **feat(pairing): honour the phone's own name, fall back to 'Phone' (iOS app keeps 'iPhone')** (0cdcc1b)
- **feat(pairing): stamp new phone keys nodeterm-mobile-<id>, keep revoking nodeterm-ios-<id>** (9b3084b)
- **feat(live-links): a pinnable Live chat drawer to follow and answer link chat** (16d667c)
- **feat(live-links): Control and Unlimited in the dialog, typing on the chip, owner controls** (c80ed70)
- **feat(live-links): owner controls, unlimited records and the input seam in both shells** (9c23e20)
- **feat(live-links): a controller types into the pane; the host shows who is typing** (34fbb5f)
- **feat(live-links): unlock a Control link with its password, host-side throttles and lock** (2a1139e)
- **feat(live-links): scrypt control password and the controller/unlimited record** (1ab2c7d)
- **feat(live-links): protocol and types for the Control role and unlimited links** (ff7a42f)
- **feat(live-links): deliver controller input to the pane, never a tmux client** (2799f1b)
- **feat(renderer): a Share live link button in the terminal node header** (ff05e26)

### Fixes
- **fix(pairing): strip invisible/bidi chars from phone names; cap by grapheme; guard doc scope** (096d287)
- **Merge pull request #1102 from probertson/fix/chat-compose-while-working** (bd00dd4)
- **fix(live-links): final review — the brake holds, persisted attempts, remote binding, small edges** (a459df6)
- **fix(live-links): chat drawer keyboard, hold and read-state edges** (d4c0c0f)
- **fix(live-links): chat drawer pinning, Escape and picker labels** (c7cf989)
- **fix(live-links): the right machine for remote nodes, popover focus and small cleanups** (d4162b1)
- **fix(live-links): both warnings for Control, the right machine, a password save survives the popover** (aa9fa3c)
- **fix(live-links): widening owner changes wait for the write; input deadline from hand-over** (ede5b10)
- **fix(live-links): password change loses control like every other path; input hardening** (e1b6842)
- **fix(live-links): unlock hardening from review** (9ca852b)
- **Merge pull request #1108 from eneskirca/fix/pr-1104-review** (9d5572e)
- **Merge pull request #1116 from eneskirca/fix/chat-view-session-fallback** (82f9fb3)
- **Merge pull request #1120 from eneskirca/fix/server-build-cpu-features** (528e578)
- **fix(server): keep ssh2 external in server:build** (f7ecea6)
- **fix(chat): ⌘M chat view falls back to the node's launch session id** (0faab7a)
- **Merge pull request #1115 from eneskirca/fix/md-view-strip-ansi** (59f4f15)
- **fix(md-view): drop terminal control sequences from the ⌘M output view** (9603fab)
- **fix(chat): keep the composer usable while the agent works, and queue for Claude** (ea54913)

### Backend
- **Merge pull request #1127 from eneskirca/feat/mobile-platform-neutral** (52db8d1)
- **Merge pull request #1123 from eneskirca/feat/live-link-control** (ba3ddfc)
- **Merge remote-tracking branch 'origin/main' into feat/live-link-control** (18cdd87)
- **Merge pull request #1119 from eneskirca/feat/header-share-button** (909786b)
- **Merge pull request #1109 from eneskirca/release/v0.4.1** (45e47c2)

### Tests
- **test(live-links): check that secrets stay out of logs with substring checks, not hand-escaped regexes** (1d211ab)
- **test(live-links): name no platform in the NFC note and spell its letters as escapes** (5e53d58)
- **test(live-links): spell the bidi control in the typing-name test as an escape** (ab9f85e)
- **test(brandPulse): check url() quoting with css-tree, not jsdom's capped style setter** (1239be0)

### Docs
- **docs: mobile companion is iOS + Android; platform-neutral pairing invariants** (e7e21e3)
- **docs(live-links): checklist item 92 says which surface shows the unsaved notice** (57ea60e)
- **docs(live-links): checklist gaps and wording from review** (a398233)
- **docs(live-links): the Control role, unlimited links and the chat drawer** (3130fec)
- **docs(live-links): implementation plans for the Control role, unlimited links and the chat drawer** (fd22d36)
- **docs(live-links): unlock is a cast answered by a per-viewer event** (faba466)
- **docs(live-links): an unlimited link re-checks the license daily at mint** (11173bd)
- **docs(live-links): the control warning wording is final** (23ed313)
- **docs(live-links): spec for the Control role, unlimited links and the live chat drawer** (a0b50d9)

### Chore
- **chore(release): v0.4.2** (ebe81b2)
- **chore(deps-dev): bump the dev-dependencies group across 1 directory with 6 updates** (b9623b2)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/eneskirca/nodeterm?utm_source=github-action)._