From 5cd56344d235b9c32cd8af7c249f546b1824280e Mon Sep 17 00:00:00 2001 From: ScreenTinker Date: Tue, 4 Aug 2026 23:40:19 -0500 Subject: [PATCH] =?UTF-8?q?Ship=20brightsign/=20in=20the=20image=20?= =?UTF-8?q?=E2=80=94=20the=20player=20assets=20404=20in=20a=20container?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The player loads /player/st-bridge.js and /player/st-sync.js, both served from ../brightsign so the copy the player runs can never drift from the copy sitting on the player's own storage. That runtime path only exists if the directory is in the image, and the Dockerfile never copied it — so both routes 404 on alpha while working perfectly from a dev checkout. Caught by deploying 1.9.29-rc1 to alpha, which is the whole point of alpha. Worth noting how this fails when the route is absent entirely, as on prod today: the SPA fallback answers 200 with text/html, so the browser gets a page where it expected JavaScript, window.ScreenTinkerBS is never defined, and the player silently falls back to browser behaviour. A missing asset that returns 200 is considerably harder to notice than one that 404s. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01Uaeo9MvzKoyXuN6ZsbhtkL --- Dockerfile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Dockerfile b/Dockerfile index 9c437b8..d3fce32 100644 --- a/Dockerfile +++ b/Dockerfile @@ -39,6 +39,12 @@ COPY VERSION /app/VERSION COPY docs/openapi.yaml /app/docs/openapi.yaml # database.js requires scripts/migrate-multitenancy at boot COPY scripts/ /app/scripts/ +# The BrightSign bridge and sync modules are served to the player from ../brightsign so the copy +# the player loads can never drift from the one on the player's own storage. That RUNTIME path +# does not exist unless the directory is in the image: without this the routes 404 in a container +# while working perfectly from a dev checkout — and a missing player asset fails silently, because +# the SPA fallback answers 200 with HTML where JavaScript was expected. +COPY brightsign/ /app/brightsign/ VOLUME ["/data"] EXPOSE 3001 CMD ["node", "server.js"]