DishTTY HPACK flapping fix + universal2 fleet deploy
Host: rdmsm4x · When: 2026-09-12 03:59–05:15 EDT · Agent: Claude Code (Opus 5 → Opus 4.8)
One-line
Fixed the reported "connects/disconnects repeatedly" bug (DishTTY's HPACK decoder lacked a dynamic table; the Starlink link was healthy throughout), verified 20/20 against the real terminal, and deployed the universal2 build to 5 fleet Macs.
What changed, by system
DishTTY
(~/dev/apps/DishTTY)
- HPACK dynamic table
(
Sources/DishTTYCore/Transport/HTTP2HPACKCodec.swift): newHPACKDecoder(RFC 7541 §2.3/§4.1/§4.4/§6.x).DishyHTTP2Transportholds one per connection, reset with the connection. Commit8038d65. - build.sh: stage
starlink_constellation.jsoninto the bundle + gate on ≥100 records. Commitf7da8b1. - New
ISSUES.md(12 open, 3 resolved),SESSION-STATE.md;CLAUDE.md/AGENTS.mdrewritten. - Tests 547 → 553, 0 failures.
Fleet network (site 18a)
18a-rdpi5b(Tailscale 100.103.136.116): wlan0 joinedstarlink18a(NM profile, never-default, static route192.168.100.0/24 via 10.0.4.1).socatunitstarlink-dish-relay.serviceexposes the UT at100.103.136.116:9200. eth0 remains default route.
New project
~/dev/apps/xcpe(xcpe.app) seeded fromDishTTY@a82f8cb; builds, 553 tests pass.
Deploy (ad-hoc signed — see caveat)
Installed /Applications/DishTTY.app on: rdmsm4x,
rdmbair15m5, rdmbair13m5 (arm64 27.0), rdmpw3265m, rdmpw3275m (Intel
x86_64 26.7). Each verified: universal2 (x86_64 arm64), 146
constellation records, minos 15.0, binary execs alive on its arch.
jdmbair13m5 NOT deployed — SSH timeout, unreachable
this session.
Verification evidence
- Live probe (DishTTY's own LiveDishyService vs terminal ut01000000-00000000-001b340b): before fix 8/15 (perfect OK/FAIL alternation), after fix 20/20.
swift test: 553 passed, 0 failures.- Per-host:
lipo -archs= x86_64 arm64; constellation JSON = 146; exec test = ALIVE, no "Bad CPU type"/dyld errors on both architectures.
Backups / reversibility
- App installs are additive; previous DishTTY (if any) overwritten in
place. Reversible by removing
/Applications/DishTTY.appper host. - Pi:
starlink-dish-relay.service+ NM profilestarlink18aare additive; disable/delete to revert.
Secrets (names only)
STARLINK18A_WIFI_PSKadded to~/.secrets/global.env(0600). No secret values in this file.
Outstanding owner actions
- Unlock login keychain → signed + notarized rebuild (DEC-20260909-03); current deploy is ad-hoc.
- jdmbair13m5 offline — redeploy when reachable.
- To see live data on a fleet host, point DishTTY at the relay
100.103.136.116:9200, or run it on a Mac joined tostarlink18a. Default endpoint 192.168.100.1 is not the dish off-site. - CM3000 admin password, Ubee mgmt address, eero login, UniFi local account — pending for XCPE adapters.
Addendum 2026-09-12 06:04 EDT — post-deploy feature work
Continued after the deploy (all committed, all suites green):
DishTTY (563 tests, 0 failures)
f8c2b95dish identity by hardware serial + safe duplicate collapse (archive, never delete). Real store measured 42 profiles → 4. Cleans the fixture-leak ghosts.940cb43Space Blue dark mode + Classic/Midnight Amber profiles + System/Light/Dark triad. Default System, so light mode is unchanged. Closes the §13 theme-triad gap.
XCPE (551 tests, 0 failures)
2817b6cCPEDeviceAdapter foundation — device-neutral protocol + types; StarlinkAdapter wraps the existing service (no rewrite), fingerprints by decoding get_status. The all-CPE-types basis.
Delegated PRDs (committed in their repos)
- updateRoo
60a3d65fleet-update tool PRD; XEntropyefe0131Apple Keychain CLI research + PRD.
Fleet build status
Deployed build is f7da8b1 (flap fix only). Identity +
Space Blue are committed but NOT yet on the fleet — pending the
signing/redeploy decision (login keychain unreachable from a Background
session).
Still pending Rich (unblocks the CPE adapters + FiOS)
CM3000 password (non-default), eero one-time login, UniFi local account, 14e Pi SSH conversion, signing approach, agent-rec approval, colour-profile taste.