You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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>
|**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.|
28
28
|**Rust**| Performance-critical, systems, WASM | Preferred for CLI tools |
29
29
|**Tauri 2.0+**| Mobile apps (iOS/Android) | Rust backend + web UI |
30
30
|**Dioxus**| Mobile apps (native UI) | Pure Rust, React-like |
31
31
|**Gleam**| Backend services | Runs on BEAM or compiles to JS |
|**Julia**| Batch scripts, data processing | Per RSR |
@@ -42,10 +42,11 @@ The following files in `.machine_readable/` contain structured project metadata:
42
42
| Banned | Replacement |
43
43
|--------|-------------|
44
44
| 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 |
49
50
| Go | Rust |
50
51
| Python | Julia/Rust/AffineScript |
51
52
| Java/Kotlin | Rust/Tauri/Dioxus |
@@ -65,8 +66,8 @@ Both are FOSS with independent governance (no Big Tech).
65
66
### Enforcement Rules
66
67
67
68
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
70
71
4.**No Go code** - Use Rust instead
71
72
5.**No Python anywhere** - Use Julia for data/batch, Rust for systems, AffineScript for apps
72
73
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).
75
76
76
77
-**Primary**: Guix (guix.scm)
77
78
-**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.
0 commit comments