Proposal. After this merges, tag v0.1.2 on the merge commit, then bump the instance with scripts/pin.sh module signage v0.1.2. You create every tag; I create none.
What 0.1.2 fixes, from the first production deployment
One object URL per cached slide, released when done
The media cache leaked a blob per slide per refresh until the browser refused the display's own requests, so it showed offline on a working network. This is the likely cause of the two-tab flapping
CI: every change runs inside a pinned Ekklesia, end to end in a real browser, and cleans up even when the runner kills a job
Signage had no CI
Compatibility
compatibility.platform stays ^0.1.0. Every fix is module-side, and CI ran it against platform v0.1.1 (plus test-only scripts, at 874deab). It runs on the deployed v0.1.1 and on a future v0.1.2.
No migration and no new dependency. The manifest changes only in its version.
Changes in this PR
Version 0.1.1 → 0.1.2 in the manifest, package.json, both UI artifacts, the server runtime (twice), and the test expectations. No other 0.1.1 remains.
README: no longer calls Signage unreleased or undeployed.
Verification
In the CI layout: test 233, typecheck, lint, build, and modules:validate (reports [email protected]), all pass.
main (e6c6553, with #6 and #8 combined) is green in CI, including integration with two-pages, session-blip, stream-failure and stream-recycle.
On the kiosk, after the bump
The roster should show the screen Online, with offline ready and a cached-image count. Before, it went Offline after 90 s.
A restart while the network is still coming up should recover by itself.
The kiosk guide (systemd unit, no session restore) is still to come as platform work. Meanwhile, the duplicate-tab case is harmless to the display, because the leak is gone.
## chore: release signage 0.1.2
**Proposal.** After this merges, tag `v0.1.2` on the merge commit, then bump the instance with `scripts/pin.sh module signage v0.1.2`. You create every tag; I create none.
### What 0.1.2 fixes, from the first production deployment
| PR | Fix | Production symptom |
|---|---|---|
| #4 | Display and server share one message schema (`src/shared/display-protocol.ts`); nullable fields accept `null` | Every heartbeat from an image slide was refused with a `400`. The roster said **Offline** 90 s after a screen opened, and never recorded **offline ready** |
| #5 | Every display request (registration, state refresh, realtime) retries with backoff and never gives up | After a restart, a screen whose first request failed showed "Offline — continuing from the last update" until reloaded |
| #6 | One object URL per cached slide, released when done | The media cache leaked a blob per slide per refresh until the browser refused the display's own requests, so it showed offline on a working network. This is the likely cause of the two-tab flapping |
| #7, #8 | CI: every change runs inside a pinned Ekklesia, end to end in a real browser, and cleans up even when the runner kills a job | Signage had no CI |
### Compatibility
- `compatibility.platform` stays **`^0.1.0`**. Every fix is module-side, and CI ran it against platform v0.1.1 (plus test-only scripts, at `874deab`). It runs on the deployed v0.1.1 and on a future v0.1.2.
- No migration and no new dependency. The manifest changes only in its version.
### Changes in this PR
- Version `0.1.1` → `0.1.2` in the manifest, `package.json`, both UI artifacts, the server runtime (twice), and the test expectations. No other `0.1.1` remains.
- README: no longer calls Signage unreleased or undeployed.
### Verification
- In the CI layout: `test` 233, `typecheck`, `lint`, build, and `modules:validate` (reports `[email protected]`), all pass.
- `main` (`e6c6553`, with #6 and #8 combined) is green in CI, including `integration` with `two-pages`, `session-blip`, `stream-failure` and `stream-recycle`.
### On the kiosk, after the bump
- The roster should show the screen **Online**, with **offline ready** and a cached-image count. Before, it went Offline after 90 s.
- A restart while the network is still coming up should recover by itself.
- The kiosk guide (systemd unit, no session restore) is still to come as platform work. Meanwhile, the duplicate-tab case is harmless to the display, because the leak is gone.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
0.1.2 fixes what the first production Signage deployment found:
- #4: the display and server share one message schema; every heartbeat
from an image slide used to be refused with a 400;
- #5: every display request retries with backoff and never gives up, so
a display that failed one request no longer stays offline until
reloaded;
- #6: one object URL per cached slide, released when done; the leak
exhausted the browser within minutes;
- CI (#7, #8): every change runs inside a pinned Ekklesia, end to end
in a real browser, and cleans up even when killed.
compatibility.platform stays ^0.1.0: every fix is module-side, and CI
tested it against platform v0.1.1 plus test-only scripts. The README no
longer says Signage is unreleased or undeployed.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
chore: release signage 0.1.2
Proposal. After this merges, tag
v0.1.2on the merge commit, then bump the instance withscripts/pin.sh module signage v0.1.2. You create every tag; I create none.What 0.1.2 fixes, from the first production deployment
src/shared/display-protocol.ts); nullable fields acceptnull400. The roster said Offline 90 s after a screen opened, and never recorded offline readyCompatibility
compatibility.platformstays^0.1.0. Every fix is module-side, and CI ran it against platform v0.1.1 (plus test-only scripts, at874deab). It runs on the deployed v0.1.1 and on a future v0.1.2.Changes in this PR
0.1.1→0.1.2in the manifest,package.json, both UI artifacts, the server runtime (twice), and the test expectations. No other0.1.1remains.Verification
test233,typecheck,lint, build, andmodules:validate(reports[email protected]), all pass.main(e6c6553, with #6 and #8 combined) is green in CI, includingintegrationwithtwo-pages,session-blip,stream-failureandstream-recycle.On the kiosk, after the bump
🤖 Generated with Claude Code