Migrate lunacycle to celilo_contract 2.0 #74

Merged
forgejo-admin merged 2 commits from fix/contract-2 into main 2026-09-27 02:18:34 +00:00

Three files, branched from current main. This is the mergeable one — see the note about #73 at the bottom.

celilo-mgr runs CLI 5.1.0, which retired celilo_contract 1.0, so this module is currently undeployable: any deploy fails at on_install with

Unsupported celilo_contract version '1.0'. Supported: 2.0

The bump was not safe on its own

on_install minted an authentik API token and returned it as a hook output, relying on celilo to persist it as the module secret smoketest_bot_token. Contract 2.0 retires exactly that channel: the value is persisted nowhere and the deploy still reports success. Bumping the line alone would have shipped precisely the silent loss the retirement exists to surface.

The correct port is deletion, not secrets.set:

  • nothing reads the secret — health-check.ts, smoke-handler.ts and scripts/smoke/authentik-token.ts each document why an authentik API token cannot drive the smoke path, which authenticates by OIDC login instead
  • the name was never declared in the manifest, so there was nothing to persist it against

The mint and its log line are kept; removing those is a behavioural change beyond this migration.

version: 1.6.0 → 1.6.1, celilo_contract: "1.0" → "2.0".

Gates: typecheck:hooks 0, test:hooks 67 pass / 0 fail. The test now asserts the hook returns {} — on the parallel branch this same assertion was verified to fail when the write is re-introduced (11 pass → 10 pass / 1 fail).

About #73

I opened #73 first from fix-e2e-seed-unique (the WIP branch). It cannot merge: that branch and main have unrelated histories — git merge refuses outright — and its manifest reads 1.4.3 against main's 1.6.0, so merging it would also be a version downgrade. Treat #73 as a review vehicle for the feature work, not a merge candidate, and take the contract migration from here instead.

After merge

Publishing needs a site build: site/dist is gitignored and the module ships its built site, which is also why lunacycle currently reads ERROR on the fleet (no built site at /var/celilo/modules/lunacycle/site/dist).

Part of the fleet-wide migration: celilo#1419, bead ce-h2w0, lu-ku2.

Three files, branched from current `main`. **This is the mergeable one** — see the note about #73 at the bottom. celilo-mgr runs CLI 5.1.0, which retired `celilo_contract` 1.0, so this module is currently undeployable: any deploy fails at `on_install` with ``` Unsupported celilo_contract version '1.0'. Supported: 2.0 ``` ## The bump was not safe on its own `on_install` minted an authentik API token and **returned it** as a hook output, relying on celilo to persist it as the module secret `smoketest_bot_token`. Contract 2.0 retires exactly that channel: the value is persisted nowhere and the deploy still reports success. Bumping the line alone would have shipped precisely the silent loss the retirement exists to surface. The correct port is **deletion, not `secrets.set`**: - nothing reads the secret — `health-check.ts`, `smoke-handler.ts` and `scripts/smoke/authentik-token.ts` each document why an authentik API token cannot drive the smoke path, which authenticates by OIDC login instead - the name was never declared in the manifest, so there was nothing to persist it against The mint and its log line are kept; removing those is a behavioural change beyond this migration. `version: 1.6.0 → 1.6.1`, `celilo_contract: "1.0" → "2.0"`. Gates: `typecheck:hooks` 0, `test:hooks` 67 pass / 0 fail. The test now asserts the hook returns `{}` — on the parallel branch this same assertion was verified to fail when the write is re-introduced (11 pass → 10 pass / 1 fail). ## About #73 I opened #73 first from `fix-e2e-seed-unique` (the WIP branch). **It cannot merge**: that branch and `main` have *unrelated histories* — `git merge` refuses outright — and its manifest reads 1.4.3 against main's 1.6.0, so merging it would also be a version downgrade. Treat #73 as a review vehicle for the feature work, not a merge candidate, and take the contract migration from here instead. ## After merge Publishing needs a site build: `site/dist` is gitignored and the module ships its built site, which is also why lunacycle currently reads ERROR on the fleet (`no built site at /var/celilo/modules/lunacycle/site/dist`). Part of the fleet-wide migration: celilo#1419, bead `ce-h2w0`, `lu-ku2`.
fix(celilo-module): migrate to celilo_contract 2.0, dropping a dead persist-by-return
Some checks failed
pr-validate / validate (pull_request) Failing after 39s
15a97dd9f8
celilo-mgr runs CLI 5.1.0, which retired celilo_contract 1.0, so this module
is undeployable: any deploy fails at on_install with 'Unsupported
celilo_contract version 1.0. Supported: 2.0'.

The bump is NOT safe on its own. on_install minted an authentik API token and
returned it as a hook output, relying on celilo to persist it as the module
secret smoketest_bot_token. Contract 2.0 retires that channel: the value is
persisted nowhere and the deploy still reports success, which is the silent
loss the retirement exists to surface.

The correct port is deletion, not secrets.set. Nothing reads the secret —
health-check.ts, smoke-handler.ts and scripts/smoke/authentik-token.ts each
document why an authentik API token cannot drive the smoke path, which
authenticates by OIDC login. The name was never declared in the manifest, so
there was nothing to persist it against. The mint and its log are kept.

Gates: typecheck:hooks 0, test:hooks 67 pass / 0 fail.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
chore: add the changeset, and let it own the version
All checks were successful
pr-validate / validate (pull_request) Successful in 43s
e6de6ca4c5
lunacycle is version_source: changeset — `celilo module version` stamps
manifest.yml#version from pending changesets, so hand-editing it was wrong.
Reverted 1.6.1 back to 1.6.0 and added a `"lunacycle": minor` changeset
instead; the release workflow stamps the real version.

Kept the celilo_contract 2.0 change itself, which is module content rather
than a version field.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign in to join this conversation.
No description provided.