Skip to content

feat(gust): publish gust:os provider components (OCI + wasm.directory) — first demonstrator (gale#223) - #226

Merged
avrabe merged 1 commit into
mainfrom
feat/gustos-component-publish
Jul 23, 2026
Merged

feat(gust): publish gust:os provider components (OCI + wasm.directory) — first demonstrator (gale#223)#226
avrabe merged 1 commit into
mainfrom
feat/gustos-component-publish

Conversation

@avrabe

@avrabe avrabe commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

First concrete step of DD-OS-DELIVERY-001 (gale#223/#224): gust's OS-as-wasm-component-model made distributable — publish gale's gust:os providers as cosign-signed wasm components to the two channels a consumer pulls from.

What

  • build-gustos-components.sh — builds each gust:os provider as a wasm component (wasm-tools component new) and asserts the delivery invariant: it exports gust:os/* and imports nothing outside gust:hal/*. A leaking scheduler/env/heap import (the core-module shape the release tarball ships) fails the gate.
  • .github/workflows/gustos-publish.yml — a verify job gates the invariant on every PR; a publish job (tag/dispatch only) cosign-signs (keyless OIDC, same flow as release.yml) and pushes each component to ghcr OCI (ghcr.io/pulseengine/gale-nano-*) and wasm.directory (gated on WASM_DIRECTORY_TOKEN so it skips cleanly until the org sets it up).

First demonstrator — the time provider (verified locally)

world root {
  import gust:hal/mmio@0.1.0;   // residual = exactly gust:hal
  export gust:os/time@0.1.0;    // exports the gust:os capability world
}

build-gustos-components.shok: exports gust:os (1 iface), residual import = gust:hal only. This is a real, signed, multi-consumer gust:os component — any downstream that imports gust:os pulls it and fuses it for its target (jess#167 is the first of several consumers).

Scope / honest notes

  • The shape oracle (build + invariant) runs and passes locally + on every PR now. The publish step (cosign + ghcr + wasm.directory) runs in CI on a release tag where the OIDC/registry creds exist — wired here, exercised at the next tag.
  • This is the minimal provider demonstrator; the full fused gale-nano runtime component (executor + all providers, residual gust:hal only) is gale#224, bound to the v0.6 cut.

Refs: gale#223, gale#224, DD-OS-DELIVERY-001, jess#167.

🤖 Generated with Claude Code

…) — first demonstrator (gale#223/#224)

The OS-as-wasm-component-model made distributable (DD-OS-DELIVERY-001): each
gust:os provider is a wasm COMPONENT that exports a gust:os capability interface
and imports only gust:hal. build-gustos-components.sh builds them and asserts the
delivery invariant (export gust:os, import ONLY gust:hal — a leaking scheduler/env
import fails); the gustos-publish.yml verify job gates it on every PR, and on a
release tag the publish job cosign-signs (keyless OIDC) + pushes to ghcr OCI and
wasm.directory (the two channels a consumer pulls from, matching the sibling
flight component).

First demonstrator = the time provider: verified locally as
  world root { import gust:hal/mmio@0.1.0; export gust:os/time@0.1.0; }
— a real, signed, multi-consumer gust:os component. The full fused gale-nano
runtime component is gale#224.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@codecov

codecov Bot commented Jul 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@avrabe
avrabe merged commit 25e7d36 into main Jul 23, 2026
63 checks passed
@avrabe
avrabe deleted the feat/gustos-component-publish branch July 23, 2026 22:22
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