Skip to content

Commit c0627cf

Browse files
policy: Bun is tier 1, Deno is being removed — correct local CLAUDE.md (#142)
Owner ruling, 2026-08-26: > *"deno is to go and bun is the way we are going, put it first everywhere unless not possible and explain why if not"* This repo's `.claude/CLAUDE.md` is what an agent reads **first**. Correcting `hyperpolymath/standards` (#655) fixes one copy of ~372 — agents read the local one. ## What this PR actually changes Every line below was verified present in this PR's own diff — nothing is claimed that isn't here. | change | in this diff | |---|---| | ALLOWED: Deno row → **Bun**, tier 1 | ✅ | | BANNED: `\| Bun \| Deno \|` row removed | ✅ | | BANNED: **Deno added**, replacement Bun | ✅ | | BANNED: Node.js/npm/pnpm/yarn → Bun | ✅ | | rule: manifest now **required** (`package.json` + `bun.lock`) | ✅ | | rule: `bun install --production` replaces the node_modules rule | ✅ | | pkg mgmt: JS deps → Bun, `bunx --no-install --bun` | ✅ | | repaired blanking scar: `\| \| AffineScript \|` → `\| ReScript \| AffineScript \|` | ✅ | > ⚠ An earlier revision of this description listed blanking-scar repairs generically, including some this repo did not need. `codacy-production` correctly flagged that as a description/diff mismatch. The table above is now generated from the diff itself. ## Review feedback addressed - **No TypeScript at all** (codacy raised the contradiction; the owner then ruled it outright). The Bun row advertised *"Executes `.ts` directly"* inside a file that bans TypeScript. Owner ruling: TypeScript **should not exist at all** — so every `.ts` reference is gone from the row, including **JS/TS** in its label. It now reads *JS runtime*, running compiled ESM/JS. - **Deno missing from BANNED** (codacy): added — the ruling was only half expressed without it. - **Unpinned `bunx`** (coderabbitai, Security & Privacy): a bare `bunx <tool>` can fetch a package outside `bun.lock` and can start Node via a shebang. Guidance now requires a declared devDependency plus `bunx --no-install --bun`. **Not taken:** *"a npm-compatible"* (LanguageTool is wrong — "an" is correct before a vowel sound); *"`--frozen-lockfile` is redundant"* (correct, and no such flag was added); the **Nix → Guix** point (real, but a separate ruling — deliberately not folded into a Deno/Bun change). ## Scope Policy text only — no code, no workflows, no build files. Related: #655 (governing document), #658 (Deno→Bun assessment: 18 repos blocked on `@affinescript/*` npm packages that do not exist), #659 (policy duplicated into ~372 copies).
1 parent 7e3eb14 commit c0627cf

1 file changed

Lines changed: 10 additions & 10 deletions

File tree

‎.claude/CLAUDE.md‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ project metadata (a2ml is TOML-flavoured, not Guile Scheme):
2121
| Language/Tool | Use Case | Notes |
2222
|---------------|----------|-------|
2323
| **AffineScript** | Primary application code | Compiles to JS/WASM, linear/affine type system |
24-
| **Deno** | Runtime & package management | Replaces Node/npm/bun |
24+
| **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. |
2525
| **Rust** | Performance-critical, systems, WASM | Preferred for CLI tools |
2626
| **Tauri 2.0+** | Mobile apps (iOS/Android) | Rust backend + web UI |
2727
| **Dioxus** | Mobile apps (native UI) | Pure Rust, React-like |
@@ -39,11 +39,11 @@ project metadata (a2ml is TOML-flavoured, not Guile Scheme):
3939
| Banned | Replacement |
4040
|--------|-------------|
4141
| TypeScript | AffineScript |
42-
| AffineScript | AffineScript |
43-
| Node.js | Deno |
44-
| npm | Deno |
45-
| Bun | Deno |
46-
| pnpm/yarn | Deno |
42+
| ReScript | AffineScript |
43+
| Deno | Bun |
44+
| Node.js | Bun |
45+
| npm | Bun |
46+
| pnpm/yarn | Bun |
4747
| Go | Rust |
4848
| Python | Julia/Rust/AffineScript |
4949
| Java/Kotlin | Rust/Tauri/Dioxus |
@@ -63,9 +63,9 @@ Both are FOSS with independent governance (no Big Tech).
6363

6464
### Enforcement Rules
6565

66-
1. **No new TypeScript or AffineScript files** - Use AffineScript; meaningfully migrate existing TS/JS to AffineScript when touched (per-language `examples/` references may stay)
67-
2. **No package.json for runtime deps** - Use deno.json imports
68-
3. **No node_modules in production** - Deno caches deps automatically
66+
1. **No new TypeScript or ReScript files** - Use AffineScript; meaningfully migrate existing TS/JS to AffineScript when touched (per-language `examples/` references may stay)
67+
2. **Use `package.json` + `bun.lock` for JS runtime deps** - Bun is npm-compatible; a manifest is REQUIRED
68+
3. **`bun install --production` for production deps** - resolved from `package.json`, pinned via `bun.lock`
6969
4. **No Go code** - Use Rust instead
7070
5. **No Python anywhere** - Use Julia for data/batch, Rust for systems, AffineScript for apps
7171
6. **No Kotlin/Swift for mobile** - Use Tauri 2.0+ or Dioxus
@@ -75,7 +75,7 @@ Both are FOSS with independent governance (no Big Tech).
7575

7676
- **Primary**: Guix (guix.scm)
7777
- **Fallback**: Guix (flake.guix)
78-
- **JS deps**: Deno (deno.json imports)
78+
- **JS deps**: Bun (`package.json` + `bun.lock`). Declare tooling as a devDependency and run `bunx --no-install --bun <tool>` — a bare `bunx <tool>` can fetch an unpinned package and may start Node via its shebang.
7979

8080
### Security Requirements
8181

0 commit comments

Comments
 (0)