-
-
Notifications
You must be signed in to change notification settings - Fork 0
policy: Bun is tier 1, Deno is being removed — correct local CLAUDE.md #103
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
2963041
742c2e2
d130ee8
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
|
|
@@ -23,13 +23,13 @@ The following files in `.machine_readable/` contain structured project metadata: | |||||||
|
|
||||||||
| | Language/Tool | Use Case | Notes | | ||||||||
| |---------------|----------|-------| | ||||||||
| | **Deno** | Runtime & package management | Replaces Node/npm/bun | | ||||||||
| | **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. | | ||||||||
| | **Rust** | Performance-critical, systems, WASM | Preferred for CLI tools | | ||||||||
| | **Gossamer** | 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 AffineScript cannot | MCP protocol glue, Deno APIs | | ||||||||
| | **JavaScript** | Only where AffineScript cannot | MCP protocol glue, Bun APIs | | ||||||||
| | **Nickel** | Configuration language | For complex configs | | ||||||||
| | **6a2 Scheme** | State/meta files | STATE.a2ml, META.a2ml, ECOSYSTEM.a2ml, PLAYBOOK.a2ml, AGENTIC.a2ml, NEUROSYM.a2ml | | ||||||||
| | **Julia** | Batch scripts, data processing | Per RSR | | ||||||||
|
|
@@ -41,10 +41,11 @@ The following files in `.machine_readable/` contain structured project metadata: | |||||||
| | Banned | Replacement | | ||||||||
| |--------|-------------| | ||||||||
| | TypeScript | AffineScript | | ||||||||
| | Node.js | Deno | | ||||||||
| | npm | Deno | | ||||||||
| | Bun | Deno | | ||||||||
| | pnpm/yarn | Deno | | ||||||||
| | ReScript | AffineScript | | ||||||||
| | Deno | Bun | | ||||||||
| | Node.js | Bun | | ||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🟡 MEDIUM RISK Suggestion: Since Deno is being replaced by Bun as the primary runtime, it should be explicitly added to the BANNED table to ensure the AI assistant does not use it as a fallback.
Suggested change
|
||||||||
| | npm | Bun | | ||||||||
| | pnpm/yarn | Bun | | ||||||||
|
Comment on lines
+46
to
+48
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win Update the conflicting README guidance.
🤖 Prompt for AI Agents |
||||||||
| | Go | Rust | | ||||||||
| | Python | Julia/Rust/AffineScript | | ||||||||
| | Java/Kotlin | Rust/Gossamer/Dioxus | | ||||||||
|
|
@@ -64,8 +65,8 @@ Both are FOSS with independent governance (no Big Tech). | |||||||
| ### Enforcement Rules | ||||||||
|
|
||||||||
| 1. **No new TypeScript files** - Convert existing TS to AffineScript | ||||||||
| 2. **No package.json - use deno.json deps** - Use deno.json imports | ||||||||
| 3. **No node_modules in production** - Deno caches deps automatically | ||||||||
| 2. **Use `package.json` + `bun.lock` for JS runtime deps** - Bun is npm-compatible; a manifest is REQUIRED | ||||||||
| 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 | ||||||||
| 4. **No Go code** - Use Rust instead | ||||||||
| 5. **No Python anywhere** - Use Julia for data/batch, Rust for systems, AffineScript for apps | ||||||||
| 6. **No Kotlin/Swift for mobile** - Use Gossamer or Dioxus | ||||||||
|
|
@@ -74,7 +75,7 @@ Both are FOSS with independent governance (no Big Tech). | |||||||
|
|
||||||||
| - **Primary**: Guix (guix.scm) | ||||||||
| - **Fallback**: Guix (flake.guix) | ||||||||
| - **JS deps**: Deno (deno.json imports) | ||||||||
| - **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. | ||||||||
|
|
||||||||
| ### TypeScript Exemptions (Approved) | ||||||||
|
|
||||||||
|
|
||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win
🔎 Supported by static analysis
🏁 Script executed:
Repository: hyperpolymath/betlang
Length of output: 284
🏁 Script executed:
Repository: hyperpolymath/betlang
Length of output: 9221
🌐 Web query:
Bun official documentation --frozen-lockfile missing bun.lock behaviour💡 Result:
When using the --frozen-lockfile flag with Bun, the behavior regarding a missing bun.lock file depends on your specific Bun version, as this behavior has seen updates to address regressions and consistent functionality [1][2]. In general, the --frozen-lockfile flag is designed to ensure reproducible installs by preventing any updates to the lockfile [3]. If the lockfile is missing, Bun's default behavior is to attempt to install dependencies from your package.json [3]. Regarding the generation of a new bun.lock file: 1. Standard Behavior: Historically, and in many contexts, running --frozen-lockfile should not create a new lockfile if one does not already exist [3][2]. It is intended to fail or operate strictly based on existing information rather than generating new artifacts [3]. 2. Bug/Regression Context: There have been documented issues where running --frozen-lockfile erroneously created a bun.lock file even when one was missing or when a different lockfile (like package-lock.json) was present [1]. 3. Fixes: Updates, such as those addressed in pull request
#17481, were introduced to ensure that --frozen-lockfile does not save or generate a new lockfile, bringing the tool back to its intended behavior of strictly forbidding lockfile modification or creation [2]. If you are encountering unexpected creation of a bun.lock file while using this flag, ensure you are on the latest version of Bun, as this was specifically targeted as a fix [1][2]. Additionally, note that bun ci is equivalent to running bun install --frozen-lockfile, which also enforces this strict, non-updating behavior [3].Citations:
Define whether existing JavaScript packages are in scope.
.claude/CLAUDE.mdrequirespackage.jsonplusbun.lockand Bun commands, buteditors/vscode/package.jsonhas npm scripts, an emptydevDependencies, and nobun.lock. State an explicit exemption, or migrate the package to the Bun contract with a committed lockfile and declared tooling. A missing lockfile does not unconditionally make--frozen-lockfilefail because Bun's behaviour is version-dependent.🧰 Tools
🪛 LanguageTool
[misspelling] ~26-~26: Use “a” instead of ‘an’ if the following word doesn’t start with a vowel sound, e.g. ‘a sentence’, ‘a university’.
Context: ...ESM/JS directly — no bundler step. Uses an npm-compatible
package.jsonplus `bun...(EN_A_VS_AN)
[misspelling] ~26-~26: This word is normally spelled as one.
Context: ...lus
bun.lock— both are expected, not anti-patterns. | | Rust | Performance-critical, s...(EN_COMPOUNDS_ANTI_PATTERNS)
🤖 Prompt for AI Agents