Skip to content

docs(release): rethink v0.7.0 — CM drivers, three hardware targets, ARINC with component tenants - #243

Open
avrabe wants to merge 2 commits into
mainfrom
docs/v0.7.0-replan
Open

docs(release): rethink v0.7.0 — CM drivers, three hardware targets, ARINC with component tenants#243
avrabe wants to merge 2 commits into
mainfrom
docs/v0.7.0-replan

Conversation

@avrabe

@avrabe avrabe commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Replaces the first v0.7.0 sketch ("Run It"). That scoped depth on a single claim — execute the composite — which was right before v0.6.0 delivered and is too narrow now that it has.

Where v0.6.0 actually left us

state
the OS one signed component, residual exactly gust:hal/mmio + app task poll, verified from outside
the drivers still core modules with raw env mmio imports
hardware ARM only — M4 (G474), M3 (F100)
RISC-V 8/8 drivers lower under synth 0.53, none has run
ARINC-653 switch proofs FULL (Verus 1095/0, Kani 4/4), 3-partition demo on Renode
the composite never executed

A — Component-model drivers, all the way down

The composition is typed from app to OS and then falls off a cliff: drivers import env.mmio_read32. gust:hal already declares nine interfaces (mmio, irq, gpio, spi, timer, dma, uart, uart-byte, uart-block) and nothing speaks them.

app (component) -> OS (component) -> drivers (components) -> gust:hal -> silicon

Proven transformation — exec-provider did exactly this in v0.6.0, including the dissolved object's symbol-shape change. This is the precondition for C: you cannot put a driver in a partition as a component if it isn't one.

B — Three hardware targets, one wasm

M4 and M3 are done. RV32 is the gap, and it's now ours rather than the compiler's — synth 0.53 lowers 8/8 with counts identical to ARM. What's missing: an RV32 targets/ model, and at least one driver against real ESP32-C3 registers. The existing eight carry STM32 maps; lowering those for RV32 proves the toolchain crosses and would be meaningless to run.

Absorbs the old execution rung — running on three chips is executing. The host-engine run stays first because it's the cheapest thing that can refute v0.6.0's structural claims.

C — ARINC-653: components in the partitions, on silicon

The switch is not the gap. Its proofs are complete, VER-OS-SWITCH-001 verified: window-end preemption un-maskable by inner code, region-swap always applied before the entering partition's first instruction.

Missing: (1) it has only ever run on Renode; (2) its partitions host native code, not components. Partitioning native code is well-understood. Partitioning signed gust:os-importing component tenants, with isolation supplied by the region-swap the switch already proves ordered, is what this stack is for.

Kill-criterion: a partition running past its window on silicon, a region-swap applied after resume, or a component tenant reaching another partition's memory or scheduler state.

Sequencing

A (drivers -> components)  ──┬─>  C (components in partitions, then silicon)
                             │
B1 (host engine) ─> B2 (RV32 target + ESP32 driver) ─> B3 (all three dies)

A gates C. B1 first regardless — cheap, independent, can refute. B2 has the only real unknowns, so start its target model early.

One consequence worth flagging: C makes a Research Day ask urgent rather than academic. If partitions host components and meld fuse --memory shared has flattened their memories, the isolation argument has to come from the region-swap, not from the component model.

🤖 Generated with Claude Code

https://claude.ai/code/session_011QG86sovTbfnPNY9SfhSmo

avrabe and others added 2 commits July 30, 2026 13:52
…, signed, and checked from outside

v0.6.0's gale-nano is live on ghcr, signed keyless, and tools/verify-published-component.sh
run outside any gale checkout confirms it: cosign validated the claims, found the
transparency-log entry, and verified the certificate against trusted CAs; the pulled
bytes are a valid component whose residual imports are exactly gust:hal/mmio and
gust:os/taskdisp, with gust:sched absent and five gust:os exports. All six packages
verify signed.

That is the first time the delivery invariant has been checked on what was actually
delivered rather than on a local build, which is what the decision always meant. So
DD-OS-DELIVERY-001 moves implemented -> verified.

REQ-OS-PUBLISH-001 carries the delivery half as its own requirement rather than widening
REQ-OS-DELIVERY-001, keeping the split that made the earlier honesty possible: while the
publish had no evidence, nothing claimed it did.

VER-OS-PUBLISH-001 also records how this went, because the failures are the useful part.
Three publish attempts failed, each a defect in a path no PR gate could reach — the job
is tag-gated, so every PR skipped it and its first execution was the release itself: a
missing wac, a `wkg oci login` that never existed, and cosign left without credentials
when that login was removed. The third attempt pushed gale-nano-exec and failed to sign
it, leaving an unsigned artifact in the registry until the successful run signed the same
digest in place.

  rivet validate: PASS
  check-v-closure: OK — 24 REQ/VER pairs

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011QG86sovTbfnPNY9SfhSmo
…re targets, ARINC with component tenants

The first v0.7.0 sketch ("Run It") scoped depth on one claim: execute the composite. That
was the right question before v0.6.0 delivered and is too narrow now that it has. With the
OS shipping as one signed, externally-verified component, the live question is how far
DOWN the component model reaches and whether it holds on more than one chip.

Three axes, each of which v0.6.0 left open in a stated way:

A — the drivers are still core modules importing raw env.mmio_read32. gust:hal already
declares nine interfaces and nothing speaks them. Componentizing the eight thin drivers
closes the typed graph from app through OS through drivers to the hardware seam. The
transformation is already proven on exec-provider, including its consequence for the
dissolved object's symbol shape.

B — two of three hardware targets are done for drivers (M4, M3). RV32 is the real gap and
it is now ours, not the compiler's: synth 0.53 lowers 8/8 with counts identical to ARM, so
what is missing is an RV32 target model and at least one driver against REAL ESP32-C3
registers. The existing eight carry STM32 maps; lowering them for RV32 proves the
toolchain crosses and would be meaningless to run. This axis absorbs the old execution
rung — running on three chips IS executing, and the host-engine run stays first because it
is the cheapest thing that can refute v0.6.0's structural claims.

C — the ARINC-653 outer switch is NOT the gap: its proofs are complete and
VER-OS-SWITCH-001 is verified. What is missing is that it has only ever run on Renode, and
that its partitions host native code rather than component tenants. Partitioning native
code is well-understood; partitioning signed gust:os-importing components, with spatial
isolation supplied by the region-swap the switch already proves ordered, is what this stack
is for. C depends on A.

Also notes why C makes one of the Research Day asks urgent rather than academic: if
partitions host components and meld fuse --memory shared has flattened their memories, the
isolation argument must come from the region-swap, not from the component model.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011QG86sovTbfnPNY9SfhSmo
@codecov

codecov Bot commented Jul 30, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

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