screentinker/docs
ScreenTinker d4d95b6b92 Write down how to run one, not just how to install one
The README covers installing, upgrading, backing up and admin recovery -- the
happy paths. It says nothing about the parts that actually go wrong: which
deployment shape you are on and why the other shape's commands silently do
nothing, how to tell a deploy really took when a version string cannot prove it,
and the handful of traps that have each cost real time at least once.

docs/operations.md is that runbook. The load-bearing entries:

  - the served APK is a bind-mounted FILE, so it must be replaced in place. mv
    or cp gives the host a new inode while the container keeps serving the old
    bytes, with nothing in any log to say so;
  - the advertised apk_size must equal the served bytes or displays download,
    reject and retry forever -- and the OTA query parameter is `version`, where
    the wrong name produces a result that looks identical to a broken OTA;
  - a version string does not prove new code is running, and neither does the
    build hash: it covers the frontend, so a server-only change deploys with an
    unchanged hash and looks exactly like a stale image;
  - ownership before checkout, because a partial checkout leaves VERSION updated
    while the code is the old release and no migrations ran;
  - a service user with no home directory makes npm install nothing while
    appearing to succeed;
  - a prerelease sorts below its own release, and the Android update check
    offers one to any older client on the stable channel;
  - native modules are built for one Node ABI, and the mismatch presents as
    hundreds of unrelated test failures rather than one clear error.

Deliberately generic: no addresses, hostnames, customer names or credentials, so
it is useful to anyone self-hosting rather than a description of one estate.
Every claim was checked against the code or the workflows rather than recalled.
2026-08-12 21:14:33 -05:00
..
104-draft-preview-build-plan.md feat(preview): draft-aware device-free playlist preview via player reuse (#104) 2026-06-15 14:11:05 -05:00
109-android-pip-visibility.md fix(#109): render Android PiP overlay above the YouTube WebView video plane (#135) 2026-06-19 14:49:20 -05:00
134-device-reporting.md fix(#134): quiet false "reconnect" log + report HDMI output and UI render resolution (#136) 2026-06-19 15:32:11 -05:00
146-hardening-fallout.md feat(#146): always-on devices_connected + admin-toggleable /api/status debug block 2026-07-01 18:45:40 -05:00
146-hardening-plan.md docs(#146): event-loop hardening plan — blast-radius audit + failure model + sequenced plan 2026-06-30 20:44:46 -05:00
148-android-duplicate-socket-fix.md docs(#148): android duplicate-socket root-cause fix + verification spec 2026-07-02 19:29:50 -05:00
148-connection-lifecycle-analysis.md docs(#148): mass-disconnect + connection-lifecycle + half-open analyses 2026-07-02 14:59:25 -05:00
148-half-open-fix.md docs(#148): mass-disconnect + connection-lifecycle + half-open analyses 2026-07-02 14:59:25 -05:00
148-mass-disconnect-analysis.md docs(#148): mass-disconnect + connection-lifecycle + half-open analyses 2026-07-02 14:59:25 -05:00
148-server-eviction-storm-analysis.md docs(#148): server eviction-storm analysis (field-safe net spec) 2026-07-02 19:12:46 -05:00
android-troubleshooting.md feat(android): hidden settings menu with multi-tap BACK/ESC detection 2026-07-07 16:57:49 -04:00
billing-authz-plan.md feat(#146): billing:read scoped token — dual-path auth for the Usage Report (Option C) 2026-07-01 21:16:21 -05:00
billing.md feat(#146): owner-only CLI to mint billing:read tokens (scripts/mint-billing-token.js) 2026-07-01 21:31:11 -05:00
device-owner-provisioning.md feat(device-owner): tier foundation + QR provisioning + content-expiry & device enhancements (#168) 2026-07-12 19:41:07 -05:00
local-ai-setup.md docs: local AI setup guide for the Content Designer (#41) 2026-06-09 13:57:02 -05:00
maintenance-device-status-log.md docs(#142): 1.9.2-beta1 changelog + device_status_log VACUUM maintenance note 2026-06-27 19:59:17 -05:00
multi-tenancy-design.md Phase 1: multi-tenancy design doc + migration scripts 2026-05-11 19:37:15 -05:00
openapi.yaml chore(release): v1.9.34-alpha1 2026-08-11 21:54:55 -05:00
operations.md Write down how to run one, not just how to install one 2026-08-12 21:14:33 -05:00
player-parity.md Stop Android panels losing controls when they update 2026-08-10 10:31:33 -05:00
seo-directory-listings.md feat(seo): IndexNow + landing-page optimization (schema, FAQ, CWV, content) (#177) 2026-07-13 11:22:37 -05:00
sso-setup.md Document how to actually set single sign-on up 2026-08-12 15:11:13 -05:00