This prepares the coordinated Ekklesia v0.2.6 patch release, following Stage 1 PRs #103, #104, #106, #107, #108, #109 and #110.
Changes
It follows the 0.2.5 release (#95) exactly: the same 16 files in the same shape, and the lockfile is unchanged.
The root package.json, every platform workspace package, and the nine public @ekklesia/* packages go from 0.2.5 to 0.2.6. The module template keeps its own version, 0.1.0.
tests/fixtures/standalone-module/package.json moves to 0.2.6 with its existing range forms preserved: ^0.2.6 ranges, and the exact @ekklesia/module-pack pin.
The deploy/README.md image build example moves to VERSION=0.2.6 and ekklesia:0.2.6.
This is a patch release, so per docs/development/releases.md no compatibility range changes anywhere.
There are no code changes, no manifest-compatibility changes, and no navigation changes. No package is published and no Git tag is created by this PR.
The 0.2.6 public package train (9 packages):@ekklesia/contracts, @ekklesia/design-tokens, @ekklesia/module-database, @ekklesia/module-pack, @ekklesia/module-sdk, @ekklesia/module-ui-build, @ekklesia/module-ui-sdk, @ekklesia/typescript-config, @ekklesia/ui.
Compatibility evidence
Released Signage 0.1.5, real artifacts.
Its released package passes the split deploy smoke on this commit, including display, pairing, kiosk and offline scenarios. (Results below.)
Its v0.1.5 source, exported with git archive and depending on the local 0.2.6 train tarballs (including transitive contracts), passes typecheck, 289 tests, build, and its 20 module-validation checks with no source change.
Manifests.
v8 is still accepted: the byte-exact released Signage manifest fixture, plus discovery tests.
v9 is valid: contracts, discovery, API and template tests, and the v9 template in the split smoke.
Old-style host context. A ModuleUiHostContext with no navigation member still compiles: the module-ui-sdk compatibility test, plus the pre-existing hosts' tests, which are byte-identical to before #110.
Exported names. Comparing each published 0.2.5 tarball's declarations with 0.2.6, nothing exported from any public entry point was removed; 61 names were added.
Per-symbol type check. 505 symbols were checked for 0.2.5 → 0.2.6 assignability (old values accepted by new types; new values usable where old ones were). Seven flagged. All seven come from two intentional, already-merged widenings of output types, not from this PR:
Design-token categories gained motion (#107, ADR 0060, which records it as a consequence). DesignTokenCategory, the DESIGN_TOKEN_CATEGORIES tuple, and registry return types now include it. This only affects code that switches exhaustively over categories or pins the tuple's length.
Manifest output types are now the v8 | v9 union (#110, ADR 0063). parseModuleManifest, safeParseModuleManifest and moduleManifestSchema return the union, and MODULE_MANIFEST_VERSION is now 9 ("the newest version"). This only affects code that treats a parsed manifest's manifestVersion as always 8, or compares against MODULE_MANIFEST_VERSION to accept a manifest. @ekklesia/contracts is documented as an implementation dependency, not a supported direct dependency of modules.
Neither appears in Signage 0.1.5. Nothing exported was removed or had its inputs narrowed.
⚠️For your judgment: I treated these as compatible output widenings consistent with a patch, as the earlier PRs intended. If you'd rather treat output-type widening as breaking, these belong in 0.3.0 instead, and I've changed nothing to hide them.
Validation (on this commit)
pnpm install --frozen-lockfile: passed. The lockfile is unchanged.
pnpm test:package-release: passed. The 9-package 0.2.6 train was rebuilt byte-identically with checksums, then consumed offline by a standalone module, packed, and verified by Core.
pnpm test:package-publication: passed, against a disposable Gitea.
pnpm test:migrations:integration: passed, 428 tests. (The first run had one failure because I rebuilt the package train in parallel, and package-release deletes each package's dist before rebuilding it. Re-run alone it passes completely.)
This prepares the coordinated **Ekklesia v0.2.6 patch release**, following Stage 1 PRs #103, #104, #106, #107, #108, #109 and #110.
## Changes
It follows the 0.2.5 release (#95) exactly: the same 16 files in the same shape, and the lockfile is unchanged.
- The root `package.json`, every platform workspace package, and the nine public `@ekklesia/*` packages go from `0.2.5` to `0.2.6`. The module template keeps its own version, 0.1.0.
- `tests/fixtures/standalone-module/package.json` moves to 0.2.6 with its existing range forms preserved: `^0.2.6` ranges, and the exact `@ekklesia/module-pack` pin.
- The `deploy/README.md` image build example moves to `VERSION=0.2.6` and `ekklesia:0.2.6`.
- This is a **patch** release, so per `docs/development/releases.md` no compatibility range changes anywhere.
There are no code changes, no manifest-compatibility changes, and no navigation changes. No package is published and no Git tag is created by this PR.
**The 0.2.6 public package train (9 packages):** `@ekklesia/contracts`, `@ekklesia/design-tokens`, `@ekklesia/module-database`, `@ekklesia/module-pack`, `@ekklesia/module-sdk`, `@ekklesia/module-ui-build`, `@ekklesia/module-ui-sdk`, `@ekklesia/typescript-config`, `@ekklesia/ui`.
## Compatibility evidence
- **Released Signage 0.1.5, real artifacts.**
- Its released package passes the split deploy smoke on this commit, including display, pairing, kiosk and offline scenarios. *(Results below.)*
- Its **v0.1.5 source**, exported with `git archive` and depending on the local 0.2.6 train tarballs (including transitive `contracts`), passes **typecheck, 289 tests, build, and its 20 module-validation checks** with no source change.
- **Manifests.**
- v8 is still accepted: the byte-exact released Signage manifest fixture, plus discovery tests.
- v9 is valid: contracts, discovery, API and template tests, and the v9 template in the split smoke.
- **Old-style host context.** A `ModuleUiHostContext` with no `navigation` member still compiles: the `module-ui-sdk` compatibility test, plus the pre-existing hosts' tests, which are byte-identical to before #110.
- **Exported names.** Comparing each published 0.2.5 tarball's declarations with 0.2.6, nothing exported from any public entry point was removed; 61 names were added.
- **Per-symbol type check.** 505 symbols were checked for 0.2.5 → 0.2.6 assignability (old values accepted by new types; new values usable where old ones were). Seven flagged. All seven come from two intentional, already-merged **widenings of output types**, not from this PR:
- **Design-token categories gained `motion`** (#107, ADR 0060, which records it as a consequence). `DesignTokenCategory`, the `DESIGN_TOKEN_CATEGORIES` tuple, and registry return types now include it. This only affects code that switches exhaustively over categories or pins the tuple's length.
- **Manifest output types are now the v8 | v9 union** (#110, ADR 0063). `parseModuleManifest`, `safeParseModuleManifest` and `moduleManifestSchema` return the union, and `MODULE_MANIFEST_VERSION` is now 9 ("the newest version"). This only affects code that treats a parsed manifest's `manifestVersion` as always `8`, or compares against `MODULE_MANIFEST_VERSION` to accept a manifest. `@ekklesia/contracts` is documented as an implementation dependency, not a supported direct dependency of modules.
- Neither appears in Signage 0.1.5. Nothing exported was removed or had its inputs narrowed.
⚠️ **For your judgment:** I treated these as compatible output widenings consistent with a patch, as the earlier PRs intended. If you'd rather treat output-type widening as breaking, these belong in 0.3.0 instead, and I've changed nothing to hide them.
## Validation (on this commit)
- `pnpm install --frozen-lockfile`: **passed**. The lockfile is unchanged.
- `TURBO_FORCE=true pnpm ci:verify` (format, lint, boundaries, typecheck, tests, module and migration validation, identity schema check, build, `infrastructure:config`, `deploy:config`): **passed**. contracts 286, design-tokens 144, ui 61, module-ui-sdk 38, module-sdk 5, module-database 26, module-ui-build 40, module-ui-host 47, module-pack 111 (3 skipped), template 22, shell 470, api 573, core 1194.
- `pnpm test:package-release`: **passed**. The 9-package 0.2.6 train was rebuilt byte-identically with checksums, then consumed offline by a standalone module, packed, and verified by Core.
- `pnpm test:package-publication`: **passed**, against a disposable Gitea.
- `pnpm test:migrations:integration`: **passed**, 428 tests. *(The first run had one failure because I rebuilt the package train in parallel, and `package-release` deletes each package's `dist` before rebuilding it. Re-run alone it passes completely.)*
- `scripts/smoke-deploy.sh` same-origin: **passed**, 49 checks.
- `EKKLESIA_SMOKE_TOPOLOGY=split`, with the v9 template: **passed**, 397 checks, including module navigation in real Chromium across all five browser passes.
- `split`, with the **released Signage 0.1.5 package** (`EKKLESIA_SMOKE_MODULE_RELEASE_DIR`, checksum verified): **passed**, 340 checks.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
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.
This prepares the coordinated Ekklesia v0.2.6 patch release, following Stage 1 PRs #103, #104, #106, #107, #108, #109 and #110.
Changes
It follows the 0.2.5 release (#95) exactly: the same 16 files in the same shape, and the lockfile is unchanged.
package.json, every platform workspace package, and the nine public@ekklesia/*packages go from0.2.5to0.2.6. The module template keeps its own version, 0.1.0.tests/fixtures/standalone-module/package.jsonmoves to 0.2.6 with its existing range forms preserved:^0.2.6ranges, and the exact@ekklesia/module-packpin.deploy/README.mdimage build example moves toVERSION=0.2.6andekklesia:0.2.6.docs/development/releases.mdno compatibility range changes anywhere.There are no code changes, no manifest-compatibility changes, and no navigation changes. No package is published and no Git tag is created by this PR.
The 0.2.6 public package train (9 packages):
@ekklesia/contracts,@ekklesia/design-tokens,@ekklesia/module-database,@ekklesia/module-pack,@ekklesia/module-sdk,@ekklesia/module-ui-build,@ekklesia/module-ui-sdk,@ekklesia/typescript-config,@ekklesia/ui.Compatibility evidence
Released Signage 0.1.5, real artifacts.
git archiveand depending on the local 0.2.6 train tarballs (including transitivecontracts), passes typecheck, 289 tests, build, and its 20 module-validation checks with no source change.Manifests.
Old-style host context. A
ModuleUiHostContextwith nonavigationmember still compiles: themodule-ui-sdkcompatibility test, plus the pre-existing hosts' tests, which are byte-identical to before #110.Exported names. Comparing each published 0.2.5 tarball's declarations with 0.2.6, nothing exported from any public entry point was removed; 61 names were added.
Per-symbol type check. 505 symbols were checked for 0.2.5 → 0.2.6 assignability (old values accepted by new types; new values usable where old ones were). Seven flagged. All seven come from two intentional, already-merged widenings of output types, not from this PR:
motion(#107, ADR 0060, which records it as a consequence).DesignTokenCategory, theDESIGN_TOKEN_CATEGORIEStuple, and registry return types now include it. This only affects code that switches exhaustively over categories or pins the tuple's length.parseModuleManifest,safeParseModuleManifestandmoduleManifestSchemareturn the union, andMODULE_MANIFEST_VERSIONis now 9 ("the newest version"). This only affects code that treats a parsed manifest'smanifestVersionas always8, or compares againstMODULE_MANIFEST_VERSIONto accept a manifest.@ekklesia/contractsis documented as an implementation dependency, not a supported direct dependency of modules.⚠️ For your judgment: I treated these as compatible output widenings consistent with a patch, as the earlier PRs intended. If you'd rather treat output-type widening as breaking, these belong in 0.3.0 instead, and I've changed nothing to hide them.
Validation (on this commit)
pnpm install --frozen-lockfile: passed. The lockfile is unchanged.TURBO_FORCE=true pnpm ci:verify(format, lint, boundaries, typecheck, tests, module and migration validation, identity schema check, build,infrastructure:config,deploy:config): passed. contracts 286, design-tokens 144, ui 61, module-ui-sdk 38, module-sdk 5, module-database 26, module-ui-build 40, module-ui-host 47, module-pack 111 (3 skipped), template 22, shell 470, api 573, core 1194.pnpm test:package-release: passed. The 9-package 0.2.6 train was rebuilt byte-identically with checksums, then consumed offline by a standalone module, packed, and verified by Core.pnpm test:package-publication: passed, against a disposable Gitea.pnpm test:migrations:integration: passed, 428 tests. (The first run had one failure because I rebuilt the package train in parallel, andpackage-releasedeletes each package'sdistbefore rebuilding it. Re-run alone it passes completely.)scripts/smoke-deploy.shsame-origin: passed, 49 checks.EKKLESIA_SMOKE_TOPOLOGY=split, with the v9 template: passed, 397 checks, including module navigation in real Chromium across all five browser passes.split, with the released Signage 0.1.5 package (EKKLESIA_SMOKE_MODULE_RELEASE_DIR, checksum verified): passed, 340 checks.🤖 Generated with Claude Code
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.