feat: add module runtime lifecycle
CI / verify (push) Successful in 2m14s
CI / infrastructure-smoke (push) Failing after 1m36s

This commit is contained in:
ekklesia
2026-07-12 22:49:51 -05:00
parent 57552a21a4
commit 7b448d8706
28 changed files with 1382 additions and 203 deletions
+12 -5
View File
@@ -1,8 +1,8 @@
# Ekklesia module template
This is the smallest supported backend-only Ekklesia module. It proves the manifest, package,
Module SDK, discovery, capability, permission, and logical storage-bucket contracts without
pretending that the later runtime, API, or Drizzle registration layers already exist.
This is the smallest supported backend-only Ekklesia module. It proves the static manifest,
compiled runtime entrypoint, capability registration, and logical storage-bucket declarations
without pretending that API, Drizzle, or storage provisioning already exist.
To create a module inside this repository:
@@ -10,7 +10,14 @@ To create a module inside this repository:
2. Rename the package in `package.json` and remove `private` when it is ready for publication.
3. Update the ID, name, version, namespaces, compatibility ranges, and bucket requests in
`ekklesia.module.json`.
4. Replace the example server entrypoint with backend behavior only.
5. Run `pnpm install`, `pnpm modules:validate`, and `pnpm verify` from the repository root.
4. Keep the manifest capability versions and dependency ranges aligned with the contracts the
module actually implements and consumes.
5. Replace `src/server/index.ts` with backend behavior only. Its `defineModuleRuntime` ID and version
must match the manifest; do not duplicate the rest of the manifest in TypeScript.
6. Run `pnpm install`, `pnpm build`, `pnpm modules:validate`, and `pnpm verify` from the repository
root. The declared production entrypoint is the compiled `dist/server/index.js`, not source
TypeScript.
Do not add UI components, styles, renderers, navigation, or layouts. Those belong to surfaces.
Keep imports side-effect-free, register capabilities in `register`, acquire resources in `start`,
and release them in `stop`.