Skip to content

Commit b8efbca

Browse files
policy: Bun is tier 1, Deno is being removed (#62)
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 08f1b97 commit b8efbca

1 file changed

Lines changed: 10 additions & 13 deletions

File tree

.claude/CLAUDE.md

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ The following files in `.machine_readable/` contain structured project metadata:
2424
| Language/Tool | Use Case | Notes |
2525
|---------------|----------|-------|
2626
| **AffineScript** | Primary application code | Compiles to JS, type-safe |
27-
| **Deno** | Runtime & package management | Replaces Node/npm/bun |
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
| **Gossamer** | Desktop webview shell | Rust backend + web UI (replaces Tauri) |
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/Gossamer/Dioxus |
@@ -65,12 +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-
<<<<<<< HEAD
69-
2. **No package.json - use deno.json deps** - Use deno.json imports
70-
=======
71-
2. **No package.json for runtime deps** - Use deno.json imports
72-
>>>>>>> d50974d (chore: global textual eradication of Nix and ReScript)
73-
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
7471
4. **No Go code** - Use Rust instead
7572
5. **No Python anywhere** - Use Julia for data/batch, Rust for systems, AffineScript for apps
7673
6. **No Kotlin/Swift for mobile** - Use Gossamer or Dioxus
@@ -79,7 +76,7 @@ Both are FOSS with independent governance (no Big Tech).
7976

8077
- **Primary**: Guix (guix.scm)
8178
- **Fallback**: Guix (flake.guix)
82-
- **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.
8380

8481
### Security Requirements
8582

0 commit comments

Comments
 (0)