feat: move Signage to the Ekklesia 0.2 module contract (manifest v8, database ABI v1)
Signage moves from the legacy module contract to Ekklesia 0.2.0's, with no behaviour or schema
change:
- manifest version 8, `database: { abi: 1 }`, compatibility ^0.2.0 for platform and module SDK;
the runtime declares the same ABI, as Core requires;
- every store reaches PostgreSQL through the platform's Module Database ABI v1 executor, with
Signage's own Drizzle tables and the module-side adapter (`moduleDrizzle`) from
@ekklesia/module-database. createSignageStore takes the executor, so no call site changes;
- the schema entrypoint exports only plain ABI v1 metadata (table names and foreign-key targets),
derived from tables.ts with moduleDrizzleSchemaMetadata; no Drizzle object reaches Core;
- duplicate-image detection reads SQLSTATE 23505 from the stable Ekklesia database error, found
with findEkklesiaDatabaseError through Drizzle's DrizzleQueryError wrapping. The old
`error.code === "23505"` check never matched a wrapped error, so a duplicate-upload race
surfaced as a 500 instead of the content-hash conflict.
tables.ts declarations, the migration, and its pinned checksum are unchanged.
Tests: an ABI v1 executor double that enforces Core's scope, parameter, and abort rules drives all
13 store transactions, their rollbacks, raw int8/timestamptz/jsonb decoding, and the 23505
regression, including generic and driver-shaped errors that must not count as duplicates.
CI, temporarily: the platform pin moves to v0.2.0 (1788d17) with a regenerated ci/pnpm-lock.yaml.
The integration job is disabled: from 0.2.0 the platform image is generic (ADR 0048) and installs
modules only as Module Packages, which Signage cannot be until its sharp dependency goes through
the native package flow. The job and ci/integration.sh stay, and the job returns in that change.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
86ae907f59
commit
a6d553efbb
@@ -12,14 +12,14 @@ Ekklesia and vendors none of its SDKs.
|
||||
|
||||
- Module id: `signage`
|
||||
- Package: `@ekklesia/signage`
|
||||
- Manifest version: 7
|
||||
- Manifest version: 8, with the Module Database ABI v1 (`database: { abi: 1 }`)
|
||||
|
||||
## Status
|
||||
|
||||
Version 0.1.2 is feature-complete for its declared scope, and Signage has run in production since
|
||||
0.1.1. What exists today:
|
||||
|
||||
- The module package, manifest (v7), four capabilities, six permissions, ten operator settings, and
|
||||
- The module package, manifest (v8), four capabilities, six permissions, ten operator settings, and
|
||||
one logical storage bucket.
|
||||
- Eleven tables and a single initial migration, declared non-destructive.
|
||||
- Native image ingest: one image per streamed request, 25 MiB, content-addressed, with display and
|
||||
@@ -64,18 +64,22 @@ pnpm install
|
||||
```
|
||||
|
||||
`modules/*` is an Ekklesia workspace glob, so the checkout is picked up with no registry edit,
|
||||
no second copy of Ekklesia, and no vendored SDK. `@ekklesia/module-sdk`, `@ekklesia/module-ui-sdk`,
|
||||
`@ekklesia/design-tokens`, `@ekklesia/ui`, and `@ekklesia/module-ui-build` all resolve through the
|
||||
workspace as `workspace:*` dependencies.
|
||||
no second copy of Ekklesia, and no vendored SDK. `@ekklesia/module-sdk`, `@ekklesia/module-database`,
|
||||
`@ekklesia/module-ui-sdk`, `@ekklesia/design-tokens`, `@ekklesia/ui`, and `@ekklesia/module-ui-build`
|
||||
all resolve through the workspace as `workspace:*` dependencies.
|
||||
|
||||
Two consequences worth knowing:
|
||||
|
||||
- Ekklesia uses a shared workspace lockfile, so installing here writes an importer entry for
|
||||
`modules/signage` into Ekklesia's `pnpm-lock.yaml`. That entry belongs to whoever maintains the
|
||||
Ekklesia checkout; it is not committed from this repository.
|
||||
- Signage requires the Ekklesia platform prerequisites for shared design tokens, module stylesheets,
|
||||
browser contributions, bounded streaming request bodies, and display offline code
|
||||
(ADRs 0039–0043). An Ekklesia checkout without them cannot build or validate this module.
|
||||
- Signage requires Ekklesia 0.2: manifest version 8 and the Module Database ABI v1 (platform ADR
|
||||
0050), on top of the prerequisites for shared design tokens, module stylesheets, browser
|
||||
contributions, bounded streaming request bodies, and display offline code (ADRs 0039–0043). An
|
||||
older Ekklesia checkout cannot build or validate this module.
|
||||
- Signage reaches PostgreSQL only through the ABI v1 executor the platform hands it, with its own
|
||||
Drizzle tables and the module-side adapter from `@ekklesia/module-database/drizzle`. Core receives
|
||||
SQL text, bound values, and plain schema metadata, never a Drizzle object.
|
||||
|
||||
### Commands
|
||||
|
||||
|
||||
Reference in New Issue
Block a user