From 852b0b6b0b38f3feae83c52397b3ec572a8950aa Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Tue, 4 Aug 2026 23:32:03 +0100 Subject: [PATCH] policy: bun-first runtime order; name the ban's exemption classes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The banned list already carried rescript, yet 71 repos across the estate hold a rescript.json — the policy was declared and never enforced, and it never said WHERE a banned language is legitimately allowed to live, so there was nothing to enforce against. - banned-exempt-repo-classes names the only three homes: -ecosystem, adapter, mcp. Anywhere else a banned language is a defect regardless of how it arrived. (rescript's homes: rescript-ecosystem, and the adapter in proven.) - js-runtime-order makes bun the default. Deno was bought for its Rust implementation and paid for in compatibility tax; bun wins on the thing that actually decides, and Deno's longevity is not a safe bet to build a 400-repo estate on. Deno stays second for existing code, pnpm third, npm last resort. - ruby joins the banned list alongside typescript, rescript, go, python. Co-Authored-By: Claude Fable 5 --- a2ml-templates/AGENTIC.a2ml.template | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/a2ml-templates/AGENTIC.a2ml.template b/a2ml-templates/AGENTIC.a2ml.template index 71677ee5..182b19cd 100644 --- a/a2ml-templates/AGENTIC.a2ml.template +++ b/a2ml-templates/AGENTIC.a2ml.template @@ -60,7 +60,30 @@ documentation = "inline" languages = ["affinescript", "rust", "gleam", "{{PRIMARY_LANGUAGE}}"] # banned: Languages the agent must NEVER use, even if asked. -banned = ["typescript", "rescript", "go", "python", "makefile"] +banned = ["typescript", "rescript", "go", "python", "ruby", "makefile"] + +# banned-exempt-repo-classes: the ONLY places a banned language may appear. +# A ban is about not letting a language spread through the estate — not about +# pretending it does not exist. Interoperating with an ecosystem means writing +# in it, in one bounded, named place: +# -ecosystem — the repo that exists to hold that language's world +# (e.g. rescript-ecosystem) +# adapter — a bounded translation layer to a foreign ecosystem +# (e.g. the ReScript adapter in `proven`) +# mcp — an MCP server for one specific external thing +# Anywhere else, a banned language is a defect regardless of how it got there. +banned-exempt-repo-classes = ["-ecosystem", "adapter", "mcp"] + +# js-runtime-order: preference for anything needing a JS runtime or package +# manager. Take the first that can do the job; drop to the next only when it +# genuinely cannot. +# bun — the default. Compatibility decides, and bun has it. +# deno — second. Kept for existing code; not chosen for new work. Walking +# everything through Deno was a real cost, and its longevity is not +# a safe bet to build on. +# pnpm — third, when a real node_modules layout is unavoidable. +# npm — last resort only. +js-runtime-order = ["bun", "deno", "pnpm", "npm"] # ── Project-Specific Overrides ──────────────────────────────────────────── [agentic-config.project-specific]