Skip to content

feat(oci): publish each cascade stage as its own cosign-signed OCI entity (jess#167 decision 5) - #318

Merged
avrabe merged 1 commit into
mainfrom
feat/per-component-oci-publish
Jul 28, 2026
Merged

feat(oci): publish each cascade stage as its own cosign-signed OCI entity (jess#167 decision 5)#318
avrabe merged 1 commit into
mainfrom
feat/per-component-oci-publish

Conversation

@avrabe

@avrabe avrabe commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Why

jess converged on the consumption contract (DD-026) and is waiting on this — the per-component publish is what lets jess wkg oci pull each verified stage and fuse/lower/place per core. Bonus jess flagged: per-stage OCI entities let them measure the per-stage synth-skip inventory (which cascade stage blocks first on the float gate, AFD-035), not just the whole-fused 13.

What

  • release.yml: generalize the ghcr push from falcon-flight-only to a loop over flight + the five composable stages — iekf, position, attitude, rate, mixer. Pushed WASI-free (the build step already builds the bundle with --no-default-features) straight from the bundle dir (no re-download), cosign-signed by immutable digest. Still continue-on-error (a registry hiccup must never fail the signed GitHub Release). Per-component via a SLUGS list, so a later hex airframe or a new stage is a one-line edit, not a fork.
  • wasm/cm/{iekf,position,attitude,rate,falcon-mixer}/Cargo.toml: the full embedded metadata contract (rewritten outside-reader descriptions + keywords/documentation/categories/authors) so each wasm.directory listing is real — same contract falcon-flight got in feat(oci): embed full component metadata for wasm.directory rendering #313.
  • docs/OCI-DISTRIBUTION.md: document the per-component publish set.

Result (on next release / a v1.128 workflow_dispatch)

ghcr.io/pulseengine/falcon-{flight,iekf,position,attitude,rate,mixer}:<version>  (+ :latest)

each cosign-signed by digest, WASI-free, wasm.directory-indexable.

Follow-ups (not in this PR)

  • Register each new component on wasm.directory (existing pulseengine namespace → auto-merge, not maintainer review).
  • Make each new ghcr package public (org policy, one-time — see docs).
  • Note: the non-rate stages still link std (WASI imports) until each gets the same no_std treatment as rate (feat(falcon-rate): WASI-free component + through-wasm closed-loop proof #314); they publish fine and jess's per-stage skip report will tell us which to convert first.

Refs: jess#167 (DD-026), #314 (rate WASI-free), #313 (metadata contract).

🤖 Generated with Claude Code

…tity (jess#167 decision 5)

jess converged on the consumption contract (DD-026) and is waiting on the
per-component publish so it can `wkg oci pull` each verified stage and
fuse/lower/place per core — and measure the per-stage synth-skip inventory
(which stage blocks first on the float gate, AFD-035).

- release.yml: generalize the ghcr push from falcon-flight-only to a loop over
  flight + the five composable cascade stages (iekf/position/attitude/rate/
  mixer). Each is pushed WASI-free (the build step already builds the bundle
  with --no-default-features) straight from the bundle dir (no re-download),
  and cosign-signed by immutable digest. Still continue-on-error (a registry
  hiccup must never fail the signed GitHub Release); per-component so a later
  hex airframe or a new stage is a one-line SLUGS edit, not a fork.
- wasm/cm/{iekf,position,attitude,rate,falcon-mixer}/Cargo.toml: carry the full
  embedded metadata contract (description rewritten for an outside reader +
  keywords/documentation/categories/authors), so each component's wasm.directory
  listing is real, not a bare entry — same contract flight got in the prior PR.
- docs/OCI-DISTRIBUTION.md: document the per-component publish set.

Follow-ups: register each new component on wasm.directory (existing `pulseengine`
namespace → auto-merge, not maintainer review) + make each ghcr package public.
Takes effect on the next release; can be exercised on v1.128 via workflow_dispatch.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG
@avrabe
avrabe enabled auto-merge (squash) July 28, 2026 19:12
@avrabe
avrabe merged commit a83d696 into main Jul 28, 2026
13 checks passed
@avrabe
avrabe deleted the feat/per-component-oci-publish branch July 28, 2026 19:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant