Skip to content

blog(draft): the architecture no single repo owns — cross-repo checks - #122

Merged
avrabe merged 15 commits into
mainfrom
blog/architecture-cross-repo
Jul 18, 2026
Merged

blog(draft): the architecture no single repo owns — cross-repo checks#122
avrabe merged 15 commits into
mainfrom
blog/architecture-cross-repo

Conversation

@avrabe

@avrabe avrabe commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

A 4th blog draft (standalone, after the Sat/Sun/Mon drip), grounded in a parallel cross-repo ingestion audit of the actual repos.

Thesis

The toolchain became a graph this month — those new edges span repositories, so no single repo's CI owns them:

  • ordeal is now synth's default translation-validation solver (Z3 demoted to differential oracle); a repo is the shared verification substrate.
  • loom → synth is proof-carrying (wsc.facts invariants ingested as codegen premises).
  • agora → rivet — agent coordination mirrored as typed coordination-fact artifacts.
  • gust composes 5 repos (gale+kiln+synth+meld+loom) bit-identical on 3 real chips; kiln-builtins now exists.

That graph creates a drift class per-repo CI structurally can't catch — and this week's sweep found it: ordeal#53 (README vs shipped proof), scry#97 (README undersells working code), sigil#186 (missing MIT attribution). Cross-repo architecture checks by an agent fleet are the answer.

Grounded, honest (agora spike, loom not yet migrated to ordeal, some invariant edges design-phase). draft = true, held for review. ~1,200 words.

🤖 Generated with Claude Code

avrabe and others added 15 commits July 11, 2026 15:24
New draft grounded in a parallel cross-repo ingestion audit. Thesis: the toolchain
became a graph this month (loom→synth proof-carrying wsc.facts; ordeal as the shared
default solver, Z3 demoted; agora coordination mirrored into rivet; gust composing
5 repos bit-identical on 3 chips; kiln-builtins now real) — those edges span repos,
so no single repo's CI owns them, and that's where drift hides (ordeal#53 README vs
shipped proof, scry#97 README undersells code, sigil#186 missing attribution).
draft=true, held.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… kiln no_std-interpreter direction

- sigil: the attestation sink meant to ingest from loom/synth/witness/scry and feed
  rivet, but most edges are designed-not-wired and #164 (can't sign wasip2) blocks the
  org-wide rollout + keeps agora's sigs stubbed — a perfect cross-repo-architecture point.
- kiln: this week's direction to give the interpreter a no_std on-board mode (a 2nd
  runtime path beside synth AOT; keeps a compiler out of the embedded cert TCB) — the
  graph is still growing edges.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Grounding: one-line 'what PulseEngine is' up top; noun-glosses for synth/loom.
- Diagram honesty (the drift the post warns about): kiln→gale was factually wrong
  today (interpret-on-target is roadmap) → dashed 'on-target planned'; sigil edges
  marked 'designed' (not wired); loom→ordeal 'slated'; colour legend added.
- Composition made legible AS components: new CM section + diagram showing app
  imports gale:kernel, gale-kiln exports it, drivers import gust:hal/mmio → meld
  resolves imports↔exports + flattens to one core module → loom/synth → native.
  (Real interface names verified against the gale repo.)
- Foreshadow the drift examples so they read as evidence, not housekeeping.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…deal machinery

You were right: the overview echoed how-it-works. Now it goes under the hood of two
edges, with real detail (verified against the repos):

- Edge one — the OS composed: the full gust component table (gale-app-demo, gale-kiln
  provides gale:kernel, 7 thin-seam drivers importing only gust:hal/mmio, each Kani-
  proven with harness counts), the ~77-line / 5-atom TCB ('0 new atoms per driver'),
  the exact meld→loom→synth fusion command-chain with sizes (fused.o 668 B → 3.5 KB
  image, fits F100 8 KB), run-demo()=53 as a differential equivalence check (honest:
  tested not proven), and the silicon ratios.
- Edge two — proofs that flow: loom translation-validates each pass and emits wsc.facts
  (value-range/divisor-nonzero/shift-bound); synth ingests them to elide guards LLVM
  must keep (0.45× floor, flag-gated) and selects via 40 Rocq-verified rules; synth-
  verify checks WASM≡ARM per-rule via ordeal; ordeal emits an LRAT certificate a Lean-
  verified checker validates (accept ⇒ UNSAT); Z3 kept as differential oracle (141/141).
  Honest edges named (Charon/Aeneas trusted; 64-bit mul/div Kani at width 8).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…acked component model

- Fix: the 'follow one function' Mermaid crashed (mermaid 11.16) on unquoted <, [], ≠
  in edge labels — all special-char labels now quoted.
- Add: a stacked component-model diagram (verified-wasm layers above the trust line;
  the thin gust:hal/mmio seam; the ~77-line native TCB; silicon below).
- Reframe as an architecture document: replaced the drift-issues section (ordeal#53/
  scry#97/sigil#186) and the fleet-review narrative with a clean 'Status quo, and where
  it's heading' (live / deepening / next / being-wired), describing the architecture
  and its direction rather than the issue findings.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…nned bits)

Per feedback (overloaded). Now a single concrete piece: how gust composes from ~10
verified WebAssembly components into a ~3.5 KB native image on 3 real chips, over a
~77-line trusted base. One diagram (the stack), the component table, the fusion chain,
run-demo()=53 differential check, silicon ratios. Dropped: the loom/synth/ordeal
pipeline, the 'no single repo owns' meta-thesis, and the planned/aspirational (kiln
interpreter, sigil, agora). Renamed slug → verified-os-on-silicon.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…kiln/sigil issues)

Read the gale gust_os_roadmap.yaml + REQ-OS-* artifacts and the gale/kiln/sigil issues
to ground the PLANNED architecture, not just today's snapshot. Added 'The architecture,
and where it's headed': the North Star (general multi-tenant verified OS, MPU-isolated
over one thin TCB), the honest release ladder v0.1→v1.0 (driver breadth → the gust:os
capability seam with an io_uring-shaped submit/complete queue composed from gale::msgq
+ kiln + the driver seam + dma-own's own<buffer> → MPU multi-tenancy, blocked on synth
multi-memory → v1.0 cut), the 0-new-trusted-atoms invariant (nm atom-count kill-check),
and the scry→sigil→kiln reject-at-load trust chain for on-target loading. Kept focused
on the OS; still honest (v0.3–v1.0 not built; dissolve tested not proven).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- New diagram: the v1.0 target stack with shipped-vs-planned marked (green = running
  today at v0.2: composition, uart+dma, semaphore, on silicon; dashed = planned: the
  gust:os syscall seam v0.4, mutually-distrusting tenants under MPU v0.5). Shows the
  1.0 architecture and how far it is at a glance.
- Tightened throughout (drivers, compose tail, run-demo notes, the close).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The 'fuse→optimize→compile' code block read awkwardly. Now a boxed flowchart: the two
typed components (gale-app-demo, gale-kiln) fuse via meld into one core module, then
loom (240 B) → synth (668 B .text) → link+TCB (~3.5 KB, fits F100 8 KB). Sizes on each
box; native artifacts marked distinct from the wasm ones.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…-options diagram

- Stack (layers) diagram split more: the lumped 'OS' → kiln scheduler + gale primitives
  (sem/msgq/mutex/event); drivers → serial buses (uart/spi/i2c) + digital&timing
  (gpio/timer/dma/adc). Five verified-wasm layers instead of three.
- Added 'Two ways to run it, both signed': the compile-to-native (synth, today) vs
  on-target interpreter (kiln no_std, planned) options, with sigil signing + scry-bounds
  reject-at-load, as a diagram.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…dictions

- credit flattening to loom/synth (meld yields a composed component), and
  justify the 1.8KB→240B drop (canonical-ABI adapters strip once seam is internal)
- fix gale:kernel bare-package identifier → gale:kernel/* interfaces throughout
  (incl. gale::msgq Rust-syntax → gale:kernel/msgq WIT-syntax)
- resolve the 5-atoms vs 'fourth atom' contradiction (→ 'a new atom')
- align reject-at-load prose to future tense (diagram already marks it planned)
- group kiln+primitives as one gale-kiln component in the stack (keeps the layer
  split but fixes the one-vs-two-component ambiguity)
- glosses: HAL, MPU, own<buffer>, Kani; qualify 'shared memory' as single-memory
- compress 'What it buys' (third thesis restatement)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The idealized stack (D1) portrayed the full app+scheduler+primitives+drivers
composition as shipped, but only the semaphore demo composes and runs today.
The v1.0 diagram already carries the trusted-base shape with honest
shipped(green)/planned(dashed) coloring, so nothing is lost. Reworked the
section intro so it no longer references 'the line'.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…acts

Read the actual gale/kiln/sigil issues, rivet artifacts, and gale src/mpu.rs.
Corrections:
- TCB is a 4-atom base (mmio r/w, irq, dma), not 5; breadth node is 3-atom
  (source: gale gust_os_roadmap.yaml 4-item TCB shim)
- New "Isolation, honestly" scene: real Verus-verified validate_region from
  gale src/mpu.rs, with the honest line that it is a proven region *model*,
  not hardware programming/fault-trapping (that is v0.5, blocked on synth#404)
- Fix the interpreter motivation: NOT "keep compiler out of cert base" (gust
  rejects that framing — dissolve keeps both compiler AND interpreter off the
  device); the real driver is migratable/dynamically-loaded tenants
- Ground reject-at-load in the real mechanism: scry bounds host-side ->
  kiln.resource_limits section -> sigil signs whole module -> kiln no_std
  loader verifies as one admission step (kiln#415, kiln#421, sigil#187)
- v0.3 drivers are proven (Kani 4/4,3/3,6/6; 4 fused to ~2.4KB @ 3 atoms),
  not merely "next"; name the real rivet release-status query

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…omponent

kiln the interpreter is a no_std wasm component that synth dissolves to native
via the same one pipeline as everything else (kiln#415 / PR #416: wasm is the
universal IR, synth the single build-time compiler in the TCB). The on-device
kiln then loads and interprets the migratable tenant components at runtime.
Not two parallel routes to silicon — one compiler pipeline; the difference is
only dissolve-ahead-of-time vs load-and-interpret-on-device. Reworked prose +
diagram accordingly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Not ready to ship; keep it held (draft + explicit ready=false) while the
architecture content is still being reviewed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@avrabe
avrabe merged commit f6c2be1 into main Jul 18, 2026
1 check passed
@avrabe
avrabe deleted the blog/architecture-cross-repo branch July 18, 2026 11:41
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