From f0743cf83e482b44bac015cf50809d2842bb082e Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Thu, 27 Aug 2026 06:06:26 +0100 Subject: [PATCH] =?UTF-8?q?policy:=20AffineScript=20is=20primary,=20ReScri?= =?UTF-8?q?pt=20is=20banned=20=E2=80=94=20finish=20the=20migration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This file was left half-migrated. It named **ReScript** as "Primary application code" while, twelve lines below, already saying JavaScript is for use "Only where AffineScript cannot" and describing OCaml as the "AffineScript compiler". The file contradicted itself about which language it targets. The Bun/Deno PR (#90) swapped the runtime and correctly left the language axis alone, so the contradiction survived onto main: a file that bans Deno and mandates Bun, while still directing new application code at a language canon bans. Aligned with ratified canon — ReScript is banned, destination AffineScript: - Primary application code: ReScript -> AffineScript - Banned table: `TypeScript | ReScript` -> `TypeScript | AffineScript`, and ReScript added as its own banned row - `Python | Julia/Rust/ReScript` -> `Julia/Rust/AffineScript` - Tauri web UI: ReScript -> AffineScript - Enforcement Rule 5: "ReScript for apps" -> "AffineScript for apps" The last two were caught by grepping for every remaining mention after the table edits; stopping at the tables would have left ReScript prescribed as a destination in the prose. ReScript now appears exactly once, as a banned row. Enforcement Rule 1 is untouched: standards#655 records that collision as not resolvable unilaterally. Co-Authored-By: Claude Opus 5 --- .claude/CLAUDE.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index e7c53a6..669806b 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -6,7 +6,7 @@ | Language/Tool | Use Case | Notes | |---------------|----------|-------| -| **ReScript** | Primary application code | Compiles to JS, type-safe | +| **AffineScript** | Primary application code | Affine-typed, compiles to typed-wasm or ESM | | **Bun** | JS runtime & package management (tier 1) | Default for all new work. Runs compiled ESM/JS directly — no bundler step. Uses an npm-compatible `package.json` plus `bun.lock` — both are expected, not anti-patterns. | | **Rust** | Performance-critical, systems, WASM | Preferred for CLI tools | | **Tauri 2.0+** | Mobile apps (iOS/Android) | Rust backend + web UI | @@ -24,13 +24,14 @@ | Banned | Replacement | |--------|-------------| -| TypeScript | ReScript | +| TypeScript | AffineScript | +| ReScript | AffineScript | | Deno | Bun | | Node.js | Bun | | npm | Bun | | pnpm/yarn | Bun | | Go | Rust | -| Python | Julia/Rust/ReScript | +| Python | Julia/Rust/AffineScript | | Java/Kotlin | Rust/Tauri/Dioxus | | Swift | Tauri/Dioxus | | React Native | Tauri/Dioxus | @@ -40,7 +41,7 @@ **No exceptions for Kotlin/Swift** - use Rust-first approach: -1. **Tauri 2.0+** - Web UI (ReScript) + Rust backend, MIT/Apache-2.0 +1. **Tauri 2.0+** - Web UI (AffineScript) + Rust backend, MIT/Apache-2.0 2. **Dioxus** - Pure Rust native UI, MIT/Apache-2.0 Both are FOSS with independent governance (no Big Tech). @@ -51,7 +52,7 @@ Both are FOSS with independent governance (no Big Tech). 2. **Use `package.json` + `bun.lock` for JS runtime deps** - Bun is npm-compatible; a manifest is REQUIRED 3. **`bun install --production --frozen-lockfile` for production deps** - resolved from `package.json` and pinned via `bun.lock`; `--frozen-lockfile` makes a lockfile mismatch a build failure rather than a silent re-resolve 4. **No Go code** - Use Rust instead -5. **No Python anywhere** - Use Julia for data/batch, Rust for systems, ReScript for apps +5. **No Python anywhere** - Use Julia for data/batch, Rust for systems, AffineScript for apps 6. **No Kotlin/Swift for mobile** - Use Tauri 2.0+ or Dioxus ### Package Management