Skip to content

Consumption contract: how jess integrates relay's flight components (WASM on all 3 cores) #167

Description

@avrabe

Why now

falcon-flight is now a published, cosign-signed WASM OCI component on ghcr + indexed on wasm.directory (ghcr.io/pulseengine/falcon-flight:1.128.0). But what's published today is a sealed demo — its world exports two no-arg scalar digests (run-stabilization: func() -> f32), with the plant sim inside the component. Nothing real crosses the boundary. Good for "look, the verified core runs in wasmtime"; useless for jess to actually wire sensors→core→motors.

With a WASM Component Model runtime now on all three cores, the deployment substrate is settled (WASM everywhere, incl. F100), so it's time to pin down the real consumption contract before relay mints interfaces the wrong shape.

The two-level structure relay proposes

Level 1 — fine-grained verified stream components (where verification + reuse live; the relay thesis — small stream<T> transformers):
falcon-iekf-stream, falcon-position-stream, falcon-attitude-stream, falcon-rate-stream, falcon-mixer-stream, relay-fsafe. These stay fine-grained — we don't collapse them.

Level 2 — per-core meld-fused bundles (what jess deploys), mapped to the agreed 3-core partition (jess#144):

Core Bundle Composed of Build status
M4 estimator falcon-iekf-stream (+ sensor fusion) single stage, exists
M7 cascade position → attitude → rate → mixer, meld_fused falcon-cascade-stream-fused already exists
F100 failsafe relay-fsafe verified crate; wasm-wrap TBD

meld is the bridge (develop/verify small at Level 1, deploy fused-per-core at Level 2) — meld_fuse is already in the BUILD.

What relay needs jess to decide (the discussion)

  1. Granularity: do you want the 3 per-core fused wasm bundles delivered as OCI artifacts (M4/M7/F100), or the fine-grained Level-1 set + a wiring manifest and jess runs meld + placement itself?
  2. Interface shape at the seam: per-cycle step(sensor-sample) -> actuator-cmd (synchronous, mirrors FlightCore::step) vs P3 stream<sensor-sample> -> stream<actuator-cmd> (relay-native, composable). Which fits the runtime's integration model on each core?
  3. Seam types: the sensor-sample / actuator-cmd WIT will be spar-generated from the AADL (as the DroneCAN node / param service / secure-channel WIT already are). Should these align 1:1 with the HAL peripheral seams in jess#62 / relay#214, so the same types flow driver → estimator?
  4. F100 failsafe specifically: wasm-in-runtime like M4/M7, or does its safety role argue for gale-native? (You said WASM on all cores — confirming for the failsafe given F100's role.)
  5. Delivery/versioning: OCI tag per relay release (like falcon-flight:1.128.0), one ghcr repo per bundle? This also ties into jess#91 (witness + scry gates on the falcon wasm).

Proposed next step

relay will prototype falcon-rate with a real interface (wrap the verified relay-rate::RatePid in a step/stream seam via spar-generated types, re-verify the boundary, publish as a second OCI entity) as a worked example — so this discussion reacts to a concrete component shape rather than a hypothetical. It's one stage of the M7 cascade bundle.

Refs: jess#62 (HAL contract), jess#144 (first-flight arc), jess#91 (wasm CI gates), relay#214 (peripheral seams). Published component: ghcr.io/pulseengine/falcon-flight · https://wasm.directory/pulseengine/falcon-flight/1.128.0

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions