Skip to content

Commit 8c14882

Browse files
policy: Bun is tier 1, Deno is being removed (#116)
Bun becomes the tier 1 JS runtime and package manager; Deno is removed rather than grandfathered, per the owner ruling of 2026-08-26. Two static-analysis findings were addressed before merge: - ReScript was absent from the BANNED table although canon bans it (destination AffineScript), so the table read as permitting it. - Enforcement Rule 3 said `bun install --production` with no `--frozen-lockfile`, so a lockfile mismatch silently re-resolved instead of failing, defeating the point of committing bun.lock. Enforcement Rule 1 is deliberately untouched: standards#655 records that collision as not resolvable unilaterally. Verified before merge: the failing checks on these PRs are repo-specific CI (cargo/clippy, shell lint, K9 contract and A2ML manifest validators, build) that a Markdown policy file cannot reach, and they fail on main independently. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent 689be4f commit 8c14882

1 file changed

Lines changed: 11 additions & 10 deletions

File tree

.claude/CLAUDE.md

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ The following files in `.machine_readable/` contain structured project metadata:
2323

2424
| Language/Tool | Use Case | Notes |
2525
|---------------|----------|-------|
26-
| **AffineScript** | Primary application code | Affine-typed, compiles to typed-wasm or Deno-ESM |
27-
| **Deno** | Runtime & package management | Replaces Node/npm/bun |
26+
| **AffineScript** | Primary application code | Affine-typed, compiles to typed-wasm or ESM |
27+
| **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. |
2828
| **Rust** | Performance-critical, systems, WASM | Preferred for CLI tools |
2929
| **Tauri 2.0+** | Mobile apps (iOS/Android) | Rust backend + web UI |
3030
| **Dioxus** | Mobile apps (native UI) | Pure Rust, React-like |
3131
| **Gleam** | Backend services | Runs on BEAM or compiles to JS |
3232
| **Bash/POSIX Shell** | Scripts, automation | Keep minimal |
33-
| **JavaScript** | Only where AffineScript cannot | MCP protocol glue, Deno APIs |
33+
| **JavaScript** | Only where AffineScript cannot | MCP protocol glue, Bun APIs |
3434
| **Nickel** | Configuration language | For complex configs |
3535
| **Guile Scheme** | State/meta files | .machine_readable/6a2/STATE.a2ml, .machine_readable/6a2/META.a2ml, .machine_readable/6a2/ECOSYSTEM.a2ml |
3636
| **Julia** | Batch scripts, data processing | Per RSR |
@@ -42,10 +42,11 @@ The following files in `.machine_readable/` contain structured project metadata:
4242
| Banned | Replacement |
4343
|--------|-------------|
4444
| TypeScript | AffineScript |
45-
| Node.js | Deno |
46-
| npm | Deno |
47-
| Bun | Deno |
48-
| pnpm/yarn | Deno |
45+
| ReScript | AffineScript |
46+
| Deno | Bun |
47+
| Node.js | Bun |
48+
| npm | Bun |
49+
| pnpm/yarn | Bun |
4950
| Go | Rust |
5051
| Python | Julia/Rust/AffineScript |
5152
| Java/Kotlin | Rust/Tauri/Dioxus |
@@ -65,8 +66,8 @@ Both are FOSS with independent governance (no Big Tech).
6566
### Enforcement Rules
6667

6768
1. **No new TypeScript files** - Convert existing TS to AffineScript
68-
2. **No package.json - use deno.json deps** - Use deno.json imports
69-
3. **No node_modules in production** - Deno caches deps automatically
69+
2. **Use `package.json` + `bun.lock` for JS runtime deps** - Bun is npm-compatible; a manifest is REQUIRED
70+
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
7071
4. **No Go code** - Use Rust instead
7172
5. **No Python anywhere** - Use Julia for data/batch, Rust for systems, AffineScript for apps
7273
6. **No Kotlin/Swift for mobile** - Use Tauri 2.0+ or Dioxus
@@ -75,7 +76,7 @@ Both are FOSS with independent governance (no Big Tech).
7576

7677
- **Primary**: Guix (guix.scm)
7778
- **Fallback**: Nix (flake.nix)
78-
- **JS deps**: Deno (deno.json imports)
79+
- **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.
7980

8081
### Security Requirements
8182

0 commit comments

Comments
 (0)