Skip to content

Commit 0fcaee5

Browse files
docs(policy): split-roles language policy (AffineScript general / Ephapax linear core) + stale-status fixes (#95)
## What Reconciles the two language threads colliding in the estate — **AffineScript** (the ReScript-replacement app-code migration) vs **Ephapax** (svalinn's D3, from the Ochránce thread) — as **complementary roles, not competitors**, and aligns three stale status docs with verified ground truth. Maintainer decision on record (this session): **split roles** — - **AffineScript** = primary *general* application language (gateway / UI / app code; typed-wasm; replaces ReScript). - **Ephapax** = *linear security core* (exactly-once tokens, revocation ledgers, secret/handle lifecycle, container-lifecycle invariants, zero-copy IPC). ## Changes - **Language policy** — `container-stack/{svalinn,cerro-torre,vordr}/.claude/CLAUDE.md`: rewrote the migration note to state both roles; added an **Ephapax** row to each ALLOWED-languages table. - **`stapeln.toml`** — svalinn component description + `language` note now reflect the in-flight ReScript → AffineScript (general) + Ephapax (linear core) migration (**11/33 modules ported**). - **`ECOSYSTEM-STATUS.md`** — marked the 2026-01-25 snapshot stale; `selur/ephapax/bridge.eph` + `types.eph` are **implemented** (~300 LOC) — the "NOT EXISTS" line is obsolete. - **`docs/READINESS.adoc`** — Idris2 proofs are **real** (33 `.idr`, no `believe_me`/`postulate`/`sorry`), not "stubs only". ## Verification (ground-truth language inventory) Best-fit per area is **correct** for: backend (Elixir), ffi/zig (Zig), src/abi (Idris2), cerro-torre (Ada/SPARK, 67 files), vordr (Rust+Ada+Idris2 polyglot), selur (Rust + Ephapax IPC). svalinn is mid-migration (right direction). ## Open best-fit calls (NOT in this PR — flagged for decision) 1. **`rokur`** — a *secrets-management gate* written entirely in plain Deno/JS (7 files, untyped). Secrets are the canonical linear resource (exactly-once / must-zeroize); candidate to move to **Ephapax (handle lifecycle) + Rust host**, or at least Rust. 2. **svalinn `auth/*` + `bridge/SelurBridge`** — the migration so far ported auth types to `.affine`; under split-roles the *linear* security invariants (JWT/JTI exactly-once, revocation, the selur bridge) are a better fit for **Ephapax** than AffineScript. Refinement to PR #46, not a reversal. ## Relationship to PR #46 PR #46 (the AffineScript svalinn migration) continues unchanged; this PR aligns the policy/docs with it and adds the Ephapax security-core lane alongside. https://claude.ai/code/session_01EsxEhRW4rDbxMo2c9xaa7Z --- _Generated by [Claude Code](https://claude.ai/code/session_01EsxEhRW4rDbxMo2c9xaa7Z)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 095d494 commit 0fcaee5

6 files changed

Lines changed: 52 additions & 17 deletions

File tree

container-stack/cerro-torre/.claude/CLAUDE.md

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,24 @@ The following files in `.machine_readable/` contain structured project metadata:
1515

1616
## Language Policy (Hyperpolymath Standard)
1717

18-
> **2026 migration: ReScript → AffineScript.** AffineScript is the primary
19-
> application language; ReScript is deprecated estate-wide — the governance
20-
> banned-language gate enforces "use AffineScript instead". Existing `.res`
21-
> files are grandfathered via `.hypatia-baseline.json`; do not add new `.res`.
18+
> **2026 migration: ReScript retired → two successor languages, by role.**
19+
> **AffineScript** is the primary *general application* language (affine-typed,
20+
> compiled to typed-wasm via the OCaml AffineScript compiler) — it replaces
21+
> ReScript for gateway / UI / app code. **Ephapax** owns the *linear security
22+
> core*: exactly-once tokens, revocation ledgers, secret/handle lifecycle,
23+
> container-lifecycle invariants, and zero-copy IPC (see `ephapax-modules/`,
24+
> `container-stack/selur/`). The two are complementary, not competing — reach
25+
> for AffineScript for general logic, Ephapax where linearity *is* the guarantee.
26+
> ReScript is deprecated estate-wide (the governance banned-language gate
27+
> enforces "use AffineScript instead"); existing `.res` are grandfathered via
28+
> `.hypatia-baseline.json` — do not add new `.res`.
2229
2330
### ALLOWED Languages & Tools
2431

2532
| Language/Tool | Use Case | Notes |
2633
|---------------|----------|-------|
27-
| **AffineScript** | Primary application code | Affine-typed; compiled via the OCaml AffineScript compiler. Replaces ReScript. |
34+
| **AffineScript** | Primary *general* application code | Affine-typed; compiled to typed-wasm via the OCaml AffineScript compiler. Replaces ReScript for gateway/UI/app logic. |
35+
| **Ephapax** | *Linear security core* | Linear/affine types: exactly-once tokens, revocation, secret/handle lifecycle, container-lifecycle invariants, zero-copy IPC. See `ephapax-modules/`, `container-stack/selur/`. Complements AffineScript — not a general app language. |
2836
| **Deno** | Runtime & package management | Replaces Node/npm/bun |
2937
| **Rust** | Performance-critical, systems, WASM | Preferred for CLI tools |
3038
| **Tauri 2.0+** | Mobile apps (iOS/Android) | Rust backend + web UI |

container-stack/svalinn/.claude/CLAUDE.md

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,24 @@ The following files in `.machine_readable/` contain structured project metadata:
1515

1616
## Language Policy (Hyperpolymath Standard)
1717

18-
> **2026 migration: ReScript → AffineScript.** AffineScript is the primary
19-
> application language; ReScript is deprecated estate-wide — the governance
20-
> banned-language gate enforces "use AffineScript instead". Existing `.res`
21-
> files are grandfathered via `.hypatia-baseline.json`; do not add new `.res`.
18+
> **2026 migration: ReScript retired → two successor languages, by role.**
19+
> **AffineScript** is the primary *general application* language (affine-typed,
20+
> compiled to typed-wasm via the OCaml AffineScript compiler) — it replaces
21+
> ReScript for gateway / UI / app code. **Ephapax** owns the *linear security
22+
> core*: exactly-once tokens, revocation ledgers, secret/handle lifecycle,
23+
> container-lifecycle invariants, and zero-copy IPC (see `ephapax-modules/`,
24+
> `container-stack/selur/`). The two are complementary, not competing — reach
25+
> for AffineScript for general logic, Ephapax where linearity *is* the guarantee.
26+
> ReScript is deprecated estate-wide (the governance banned-language gate
27+
> enforces "use AffineScript instead"); existing `.res` are grandfathered via
28+
> `.hypatia-baseline.json` — do not add new `.res`.
2229
2330
### ALLOWED Languages & Tools
2431

2532
| Language/Tool | Use Case | Notes |
2633
|---------------|----------|-------|
27-
| **AffineScript** | Primary application code | Affine-typed; compiled via the OCaml AffineScript compiler. Replaces ReScript. |
34+
| **AffineScript** | Primary *general* application code | Affine-typed; compiled to typed-wasm via the OCaml AffineScript compiler. Replaces ReScript for gateway/UI/app logic. |
35+
| **Ephapax** | *Linear security core* | Linear/affine types: exactly-once tokens, revocation, secret/handle lifecycle, container-lifecycle invariants, zero-copy IPC. See `ephapax-modules/`, `container-stack/selur/`. Complements AffineScript — not a general app language. |
2836
| **Deno** | Runtime & package management | Replaces Node/npm/bun |
2937
| **Rust** | Performance-critical, systems, WASM | Preferred for CLI tools |
3038
| **Tauri 2.0+** | Mobile apps (iOS/Android) | Rust backend + web UI |

container-stack/svalinn/ECOSYSTEM-STATUS.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
# Cerro Torre Ecosystem - Implementation Status
22
**Updated:** 2026-01-25
33

4+
> ⚠️ **Stale snapshot (2026-01-25) — superseded by `STATUS.md` (2026-03-29).**
5+
> Corrections verified 2026-06-13: selur `ephapax/bridge.eph` **and** `ephapax/types.eph`
6+
> are now **IMPLEMENTED** (~300 LOC combined) — the "bridge.eph (NOT EXISTS)" line below is
7+
> obsolete. Svalinn is mid-migration ReScript → AffineScript (general) + Ephapax (linear core),
8+
> not pure ReScript. Idris2 proofs are real (no `believe_me`/`postulate`), not stubs.
9+
410
## 🎯 Big Picture: 4-Phase Implementation Plan
511

612
**Original Timeline:** 22-32 weeks total

container-stack/vordr/.claude/CLAUDE.md

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,13 @@ The following files in `.machine_readable/` contain structured project metadata:
1919

2020
## Language Policy (STRICT)
2121

22-
> **2026 migration: ReScript → AffineScript.** AffineScript replaces ReScript
23-
> for the MCP adapter / browser UI; the governance banned-language gate enforces
24-
> "use AffineScript instead". Existing `.res` are grandfathered via
25-
> `.hypatia-baseline.json`; do not add new `.res`.
22+
> **2026 migration: ReScript retired → AffineScript (general) + Ephapax (linear core).**
23+
> **AffineScript** replaces ReScript for the MCP adapter / browser UI (general app
24+
> code, typed-wasm). **Ephapax** owns the linear security core — exactly-once /
25+
> revocation / resource-lifecycle invariants and zero-copy IPC (see `selur`,
26+
> `ephapax-modules/`). The governance banned-language gate enforces "use
27+
> AffineScript instead"; existing `.res` are grandfathered via
28+
> `.hypatia-baseline.json` — do not add new `.res`.
2629
2730
### ALLOWED Languages
2831

@@ -32,7 +35,8 @@ The following files in `.machine_readable/` contain structured project metadata:
3235
| **Rust** | eBPF probes, performance-critical paths, CLI | `src/rust/` |
3336
| **Elixir** | Orchestration, state management, reversibility | `src/elixir/` |
3437
| **Ada/SPARK** | Cryptographic operations, SPARK proofs | `src/ada/` |
35-
| **AffineScript** | MCP adapter, browser UI (replaces ReScript) | `adapters/`, `runtime/` |
38+
| **AffineScript** | MCP adapter, browser UI — general app code (replaces ReScript) | `adapters/`, `runtime/` |
39+
| **Ephapax** | Linear security core — exactly-once / lifecycle invariants, zero-copy IPC | `selur` bridge, `ephapax-modules/` |
3640
| **Guile Scheme** | SCM checkpoint files | `*.scm` |
3741
| **Bash** | Build scripts only | `scripts/` |
3842

docs/READINESS.adoc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,15 @@ This document defines what "production-ready" means for stapeln and tracks the c
88
state of readiness against those criteria. Updated from README.adoc status table
99
(last reviewed 2026-02-13).
1010

11+
[NOTE]
12+
====
13+
Freshness correction (verified 2026-06-13): the *Idris2 proofs* status below
14+
("stubs only / zero proven lemmas") is **stale**. The estate now has 33 `.idr`
15+
files with **no** `believe_me`/`postulate`/`sorry` markers, and cerro-torre's
16+
lifecycle postulates were discharged (see `STATUS.md`, 2026-03-29). Treat the
17+
Idris2 rows below as "real proofs, coverage still expanding," not "stubs."
18+
====
19+
1120
== What "Ready for Production" Means
1221

1322
A production-ready stapeln instance satisfies all of the following:

stapeln.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,9 +314,9 @@ copy-from = [
314314
entrypoint = ["/usr/local/bin/vordr"]
315315

316316
[components.svalinn]
317-
description = "OCI edge gateway — ReScript/Deno with pre-start verification hooks"
317+
description = "OCI edge gateway — migrating ReScript → AffineScript (general app) + Ephapax (linear security core); Deno host. Pre-start verification hooks."
318318
path = "container-stack/svalinn"
319-
language = "rescript"
319+
language = "rescript" # in migration: 11/33 modules ported to .affine; auth/bridge security core targets ephapax (linear). Build still compiles remaining .res.
320320
build-system = "deno"
321321
containerfile = "container-stack/svalinn/Containerfile"
322322

0 commit comments

Comments
 (0)