Pass 1 landed in #12: Signage 0.1.2 builds as a canonical linux-x64-glibc Module Package against Ekklesia 0.2.3 (manifest v8, database ABI v1, Sharp 0.35.5).
This Pass 2 change restores the external-package integration job and proves the package in a generic Ekklesia installation:
builds the real Signage package from this standalone repository
fetches an immutable Core harness commit through refs/pull/90/head
builds Core's generic image with no bundled Signage source
rejects an invalid package, then verifies and installs the valid package into persistent module storage
plans, applies, re-plans, and idempotently reapplies Signage's existing migration
discovers and activates Signage through the generic module framework
loads the split-origin Dashboard UI from the API origin and exercises authenticated Signage API requests
uploads three PNG slides, creates and activates a three-slide timeline, pairs a kiosk, renders playback, and runs all configured resilience scenarios
proves module files, UI/API availability, migration history, database rows, uploaded content, playback state, and the paired kiosk credential survive an API restart and API container recreation
proves disable/re-enable, removal with retained migration history, and reinstall of the exact same package
recognizes storage errors across separately bundled SDK copies and bounds native rendition work under runner load
Core dependency
Depends on River_of_Glory_Church/Ekklesia#90. That PR is generic integration support only and contains no Signage registration. This branch pins its exact commit 40ef0ff802c124ae5a3a0b9aa51a1502a7b72644; the pull ref keeps that object fetchable without a moving branch or workspace dependency.
Package/runtime compatibility
Signage: 0.1.2
Ekklesia: 0.2.3
manifest: v8
database ABI: v1
target: linux-x64-glibc
final CI artifact: 9,240,171 bytes, 133 files, sha256 e73a6fffa18ee823489ffc9a94b82ad07bc62f21c9c0736da6f998fe197c3719
runtime package verification and native Sharp loading: passed
The deployment starts with empty module storage. The generic image contains no Signage checkout, the package has no pnpm workspace link, and runtime loading occurs only from the verifier-extracted module directory mounted read-only into the API.
Validation
Local gates:
pnpm lint — passed
pnpm typecheck — passed
pnpm test — 262 passed
pnpm build — passed
pnpm validate — 20 checks passed
bash ci/check-cleanup.sh — passed
full external-package integration — passed
Final Gitea Actions run 253: lint, typecheck, test, build, and integration all passed. Integration job 1189 verified package → install → migrate → discover/load → Dashboard/API/display → process restart → API container recreation → lifecycle/remove/reinstall persistence, then ended with Reference deployment smoke test passed.
Display scenarios:
two-pages — both displays stayed live for 120 seconds without remount or offline state
session-blip — recovered from a failed viewer-session request without reload
stream-failure — re-established realtime after a refused stream without reload
stream-recycle — stayed live for 120 seconds with one mount and bounded object URLs
Limitations
Validation used real headless Chromium and a persistent kiosk browser profile; no physical TV/device validation is claimed. Incompatible-package and intentionally failed-migration cases remain covered by Core's verifier/migration suites rather than by mutating the valid Signage release.
## Summary
Pass 1 landed in #12: Signage 0.1.2 builds as a canonical `linux-x64-glibc` Module Package against Ekklesia 0.2.3 (manifest v8, database ABI v1, Sharp 0.35.5).
This Pass 2 change restores the external-package integration job and proves the package in a generic Ekklesia installation:
- builds the real Signage package from this standalone repository
- fetches an immutable Core harness commit through `refs/pull/90/head`
- builds Core's generic image with no bundled Signage source
- rejects an invalid package, then verifies and installs the valid package into persistent module storage
- plans, applies, re-plans, and idempotently reapplies Signage's existing migration
- discovers and activates Signage through the generic module framework
- loads the split-origin Dashboard UI from the API origin and exercises authenticated Signage API requests
- uploads three PNG slides, creates and activates a three-slide timeline, pairs a kiosk, renders playback, and runs all configured resilience scenarios
- proves module files, UI/API availability, migration history, database rows, uploaded content, playback state, and the paired kiosk credential survive an API restart and API container recreation
- proves disable/re-enable, removal with retained migration history, and reinstall of the exact same package
- recognizes storage errors across separately bundled SDK copies and bounds native rendition work under runner load
## Core dependency
Depends on River_of_Glory_Church/Ekklesia#90. That PR is generic integration support only and contains no Signage registration. This branch pins its exact commit `40ef0ff802c124ae5a3a0b9aa51a1502a7b72644`; the pull ref keeps that object fetchable without a moving branch or workspace dependency.
## Package/runtime compatibility
- Signage: 0.1.2
- Ekklesia: 0.2.3
- manifest: v8
- database ABI: v1
- target: `linux-x64-glibc`
- final CI artifact: 9,240,171 bytes, 133 files, sha256 `e73a6fffa18ee823489ffc9a94b82ad07bc62f21c9c0736da6f998fe197c3719`
- runtime package verification and native Sharp loading: passed
The deployment starts with empty module storage. The generic image contains no Signage checkout, the package has no pnpm workspace link, and runtime loading occurs only from the verifier-extracted module directory mounted read-only into the API.
## Validation
Local gates:
- `pnpm lint` — passed
- `pnpm typecheck` — passed
- `pnpm test` — 262 passed
- `pnpm build` — passed
- `pnpm validate` — 20 checks passed
- `bash ci/check-cleanup.sh` — passed
- full external-package integration — passed
Final Gitea Actions run 253: lint, typecheck, test, build, and integration all passed. Integration job 1189 verified package → install → migrate → discover/load → Dashboard/API/display → process restart → API container recreation → lifecycle/remove/reinstall persistence, then ended with `Reference deployment smoke test passed.`
Display scenarios:
- `two-pages` — both displays stayed live for 120 seconds without remount or offline state
- `session-blip` — recovered from a failed viewer-session request without reload
- `stream-failure` — re-established realtime after a refused stream without reload
- `stream-recycle` — stayed live for 120 seconds with one mount and bounded object URLs
## Limitations
Validation used real headless Chromium and a persistent kiosk browser profile; no physical TV/device validation is claimed. Incompatible-package and intentionally failed-migration cases remain covered by Core's verifier/migration suites rather than by mutating the valid Signage release.
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.
Summary
Pass 1 landed in #12: Signage 0.1.2 builds as a canonical
linux-x64-glibcModule Package against Ekklesia 0.2.3 (manifest v8, database ABI v1, Sharp 0.35.5).This Pass 2 change restores the external-package integration job and proves the package in a generic Ekklesia installation:
refs/pull/90/headCore dependency
Depends on River_of_Glory_Church/Ekklesia#90. That PR is generic integration support only and contains no Signage registration. This branch pins its exact commit
40ef0ff802c124ae5a3a0b9aa51a1502a7b72644; the pull ref keeps that object fetchable without a moving branch or workspace dependency.Package/runtime compatibility
linux-x64-glibce73a6fffa18ee823489ffc9a94b82ad07bc62f21c9c0736da6f998fe197c3719The deployment starts with empty module storage. The generic image contains no Signage checkout, the package has no pnpm workspace link, and runtime loading occurs only from the verifier-extracted module directory mounted read-only into the API.
Validation
Local gates:
pnpm lint— passedpnpm typecheck— passedpnpm test— 262 passedpnpm build— passedpnpm validate— 20 checks passedbash ci/check-cleanup.sh— passedFinal Gitea Actions run 253: lint, typecheck, test, build, and integration all passed. Integration job 1189 verified package → install → migrate → discover/load → Dashboard/API/display → process restart → API container recreation → lifecycle/remove/reinstall persistence, then ended with
Reference deployment smoke test passed.Display scenarios:
two-pages— both displays stayed live for 120 seconds without remount or offline statesession-blip— recovered from a failed viewer-session request without reloadstream-failure— re-established realtime after a refused stream without reloadstream-recycle— stayed live for 120 seconds with one mount and bounded object URLsLimitations
Validation used real headless Chromium and a persistent kiosk browser profile; no physical TV/device validation is claimed. Incompatible-package and intentionally failed-migration cases remain covered by Core's verifier/migration suites rather than by mutating the valid Signage release.