From 973f842d42065881edb10fb527fb96dc9b8be91d Mon Sep 17 00:00:00 2001 From: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com> Date: Sat, 30 May 2026 14:25:08 +0100 Subject: [PATCH 1/3] =?UTF-8?q?docs(claude-md):=20flip=20ReScript=E2=86=92?= =?UTF-8?q?AffineScript=20across=203=20CLAUDE.md=20files=20per=202026-05-2?= =?UTF-8?q?5=20estate=20language=20policy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The .claude/CLAUDE.md language-policy tables in this repo (and the vendored cadre-router/ + cadre-router/tea-router-pkg/) still cited ReScript as the primary application language. Per the 2026-05-25 estate-wide policy and standards#252 (ReScript→AffineScript umbrella), flip the ALLOWED + BANNED tables and enforcement rules to reflect AffineScript as the target. Tauri/Dioxus references intentionally left alone — separate concern. Refs: hyperpolymath/standards#239 Refs: hyperpolymath/standards#281 Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/CLAUDE.md | 9 +++++---- cadre-router/.claude/CLAUDE.md | 13 +++++++------ cadre-router/tea-router-pkg/.claude/CLAUDE.md | 2 +- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index 66437328..d15e3b41 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -19,14 +19,14 @@ The following files in `.machine_readable/` contain structured project metadata: | 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 Deno-ESM | | **Deno** | Runtime & package management | Replaces Node/npm/bun | | **Rust** | Performance-critical, systems, WASM | Preferred for CLI tools | | **Tauri 2.0+** | Mobile apps (iOS/Android) | Rust backend + web UI | | **Dioxus** | Mobile apps (native UI) | Pure Rust, React-like | | **Gleam** | Backend services | Runs on BEAM or compiles to JS | | **Bash/POSIX Shell** | Scripts, automation | Keep minimal | -| **JavaScript** | Only where ReScript cannot | MCP protocol glue, Deno APIs | +| **JavaScript** | Only where AffineScript cannot | MCP protocol glue, Deno APIs | | **Nickel** | Configuration language | For complex configs | | **Guile Scheme** | State/meta files | .machine_readable/6a2/STATE.a2ml, .machine_readable/6a2/META.a2ml, .machine_readable/6a2/ECOSYSTEM.a2ml | | **Julia** | Batch scripts, data processing | Per RSR | @@ -37,7 +37,8 @@ The following files in `.machine_readable/` contain structured project metadata: | Banned | Replacement | |--------|-------------| -| TypeScript | ReScript | +| TypeScript | AffineScript | +| ReScript | AffineScript | | Node.js | Deno | | npm | Deno | | Bun | Deno | @@ -53,7 +54,7 @@ The following files in `.machine_readable/` contain structured project metadata: For developer tools: - **Rust** preferred for CLI tools, git operations -- **ReScript** for web dashboards (git-hud) +- **AffineScript** for web dashboards (git-hud) - **Deno** for automation scripts - **Julia** for batch analysis (oikos metrics) diff --git a/cadre-router/.claude/CLAUDE.md b/cadre-router/.claude/CLAUDE.md index c8782595..a680b5a1 100644 --- a/cadre-router/.claude/CLAUDE.md +++ b/cadre-router/.claude/CLAUDE.md @@ -19,14 +19,14 @@ The following files in `.machine_readable/` contain structured project metadata: | 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 Deno-ESM | | **Deno** | Runtime & package management | Replaces Node/npm/bun | | **Rust** | Performance-critical, systems, WASM | Preferred for CLI tools | | **Tauri 2.0+** | Mobile apps (iOS/Android) | Rust backend + web UI | | **Dioxus** | Mobile apps (native UI) | Pure Rust, React-like | | **Gleam** | Backend services | Runs on BEAM or compiles to JS | | **Bash/POSIX Shell** | Scripts, automation | Keep minimal | -| **JavaScript** | Only where ReScript cannot | MCP protocol glue, Deno APIs | +| **JavaScript** | Only where AffineScript cannot | MCP protocol glue, Deno APIs | | **Nickel** | Configuration language | For complex configs | | **Guile Scheme** | State/meta files | STATE.scm, META.scm, ECOSYSTEM.scm | | **Julia** | Batch scripts, data processing | Per RSR | @@ -37,7 +37,8 @@ The following files in `.machine_readable/` contain structured project metadata: | Banned | Replacement | |--------|-------------| -| TypeScript | ReScript | +| TypeScript | AffineScript | +| ReScript | AffineScript | | Node.js | Deno | | npm | Deno | | Bun | Deno | @@ -53,18 +54,18 @@ The following files in `.machine_readable/` contain structured project metadata: **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). ### Enforcement Rules -1. **No new TypeScript files** - Convert existing TS to ReScript +1. **No new TypeScript files** - Convert existing TS to AffineScript 2. **No package.json for runtime deps** - Use deno.json imports 3. **No node_modules in production** - Deno caches deps automatically 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 diff --git a/cadre-router/tea-router-pkg/.claude/CLAUDE.md b/cadre-router/tea-router-pkg/.claude/CLAUDE.md index 7a2634e2..8c76e578 100644 --- a/cadre-router/tea-router-pkg/.claude/CLAUDE.md +++ b/cadre-router/tea-router-pkg/.claude/CLAUDE.md @@ -8,7 +8,7 @@ It wraps `cadre-router` with TEA-specific primitives (`Tea.Cmd.t`, `Tea.Sub.t`). ## Language Policy Same as cadre-router - see the Hyperpolymath Standard: -- **ReScript** for all source code +- **AffineScript** for all source code (currently .res/.resi; ReScript→AffineScript migration tracked at standards#252) - **Deno** for runtime (not Node.js) - No TypeScript From 328cc48ddce465694e7cba82b875ed1dd24184f5 Mon Sep 17 00:00:00 2001 From: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com> Date: Sat, 30 May 2026 14:34:17 +0100 Subject: [PATCH 2/3] ci: declare .hypatia-ignore for 6 vendored ReScript unicode test fixtures MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The package-anti-pattern gate flagged 6 .res files under rescript-ecosystem/.../unicode/src// — vendored upstream rescript-compiler test fixtures (not project source, not migration candidates). Add a top-level .hypatia-ignore to declare them as exemptions so the gate can pass on this docs-only PR. Unblock condition: removal happens only if rescript-ecosystem/ is itself dropped from the vendor tree. Co-Authored-By: Claude Opus 4.7 (1M context) --- .hypatia-ignore | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .hypatia-ignore diff --git a/.hypatia-ignore b/.hypatia-ignore new file mode 100644 index 00000000..1f50dee8 --- /dev/null +++ b/.hypatia-ignore @@ -0,0 +1,26 @@ +# SPDX-License-Identifier: MPL-2.0 +# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) +# +# .hypatia-ignore — declared exemptions from hyperpolymath/standards +# governance-reusable.yml policy rules. Format: +# +# : +# +# Lines starting with `#` and blank lines are ignored. +# +# ─── Vendored ReScript compiler test fixtures (rescript-ecosystem/) ─ +# +# These 6 .res files are unicode-name test inputs for the upstream +# ReScript compiler build_tests/unicode/ corpus. They live under +# vendored copies of the rescript-compiler repository and exist only +# to exercise the compiler's handling of emoji-named directories. +# Migration target N/A — they are third-party test fixtures, not +# project source. Removal would happen only if rescript-ecosystem/ +# is itself dropped from the vendor tree. +# +cicd_rules/banned_language_file:rescript-ecosystem/packages/core/compiler-source/tests/build_tests/unicode/src/📕annotation/a.res +cicd_rules/banned_language_file:rescript-ecosystem/packages/core/compiler-source/tests/build_tests/unicode/src/📗block/b.res +cicd_rules/banned_language_file:rescript-ecosystem/packages/core/compiler-source/tests/build_tests/unicode/src/📙inline/c.res +cicd_rules/banned_language_file:rescript-ecosystem/rescript/tests/build_tests/unicode/src/📕annotation/a.res +cicd_rules/banned_language_file:rescript-ecosystem/rescript/tests/build_tests/unicode/src/📗block/b.res +cicd_rules/banned_language_file:rescript-ecosystem/rescript/tests/build_tests/unicode/src/📙inline/c.res From 8206d6f2b03571c266bab84026e6d31cac237feb Mon Sep 17 00:00:00 2001 From: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com> Date: Sat, 30 May 2026 14:40:54 +0100 Subject: [PATCH 3/3] fix(.hypatia-ignore): use git ls-files quoted form for emoji paths The previous .hypatia-ignore entries used literal UTF-8 emoji in the paths, but `git ls-files '*.res'` (used by the anti-pattern gate) returns these paths in core.quotepath form: surrounded by double-quotes with non-ASCII bytes escaped as \nnn octal. The gate's exact-match `grep -qxF` therefore did not match the literal-UTF8 entries. Update the 6 emoji-fixture entries to use the quoted/escaped form that `git ls-files` actually emits. Co-Authored-By: Claude Opus 4.7 (1M context) --- .hypatia-ignore | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/.hypatia-ignore b/.hypatia-ignore index 1f50dee8..1202155a 100644 --- a/.hypatia-ignore +++ b/.hypatia-ignore @@ -8,6 +8,12 @@ # # Lines starting with `#` and blank lines are ignored. # +# Note: paths must match the form emitted by `git ls-files`, which +# quotes non-ASCII bytes with octal escapes by default (see +# `core.quotepath`). Below, emoji directory names are encoded as the +# literal "\nnn" octal sequences `git ls-files` produces, with the +# surrounding double-quotes. +# # ─── Vendored ReScript compiler test fixtures (rescript-ecosystem/) ─ # # These 6 .res files are unicode-name test inputs for the upstream @@ -18,9 +24,9 @@ # project source. Removal would happen only if rescript-ecosystem/ # is itself dropped from the vendor tree. # -cicd_rules/banned_language_file:rescript-ecosystem/packages/core/compiler-source/tests/build_tests/unicode/src/📕annotation/a.res -cicd_rules/banned_language_file:rescript-ecosystem/packages/core/compiler-source/tests/build_tests/unicode/src/📗block/b.res -cicd_rules/banned_language_file:rescript-ecosystem/packages/core/compiler-source/tests/build_tests/unicode/src/📙inline/c.res -cicd_rules/banned_language_file:rescript-ecosystem/rescript/tests/build_tests/unicode/src/📕annotation/a.res -cicd_rules/banned_language_file:rescript-ecosystem/rescript/tests/build_tests/unicode/src/📗block/b.res -cicd_rules/banned_language_file:rescript-ecosystem/rescript/tests/build_tests/unicode/src/📙inline/c.res +cicd_rules/banned_language_file:"rescript-ecosystem/packages/core/compiler-source/tests/build_tests/unicode/src/\360\237\223\225annotation/a.res" +cicd_rules/banned_language_file:"rescript-ecosystem/packages/core/compiler-source/tests/build_tests/unicode/src/\360\237\223\227block/b.res" +cicd_rules/banned_language_file:"rescript-ecosystem/packages/core/compiler-source/tests/build_tests/unicode/src/\360\237\223\231inline/c.res" +cicd_rules/banned_language_file:"rescript-ecosystem/rescript/tests/build_tests/unicode/src/\360\237\223\225annotation/a.res" +cicd_rules/banned_language_file:"rescript-ecosystem/rescript/tests/build_tests/unicode/src/\360\237\223\227block/b.res" +cicd_rules/banned_language_file:"rescript-ecosystem/rescript/tests/build_tests/unicode/src/\360\237\223\231inline/c.res"