From 4784098b7a8a6dc0bf873cd8ba0f2bcca89ef006 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 14 Nov 2026 21:41:29 +0000 Subject: [PATCH] chore(policy): deeds not A2ML, no Python at all, Deno as tier 2 Owner rulings of 2026-11-14, applied to this repo's agent instructions: * The descriptile list pointed at .machine_readable/descriptiles/*.a2ml files that no longer exist; it now names the *.deed files that do, and says A2ML is retired. The ALLOWED row for A2ML is replaced by deed. * Python: the SaltStack exception is removed. Python is banned with no exceptions, and enforcement rule 6 says so. * Deno is no longer banned: it is tier 2, used only where Bun cannot do the job, with pnpm tier 3 and npm the last resort, as in standards 3-practice/LANGUAGE-POLICY.adoc. yarn and Node.js stay banned. docs/patch_ecosystem.py, the repo's one Python file, is removed. It was a one-off edit script (recorded as sweep damage in .machine_readable/sessions/2026-07-29-proof-gate-and-rescue.deed: its escaped search strings could never match), and the edits it was meant to make are already in docs/ECOSYSTEM.adoc, so nothing replaces it. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_0136P7ZnvMV5Ghe7LUf3oc6N --- .claude/CLAUDE.md | 28 ++++++++++--------- docs/patch_ecosystem.py | 62 ----------------------------------------- 2 files changed, 15 insertions(+), 75 deletions(-) delete mode 100644 docs/patch_ecosystem.py diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index db61169f..ac3480af 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -29,12 +29,16 @@ https://github.com/hyperpolymath/nextgen-languages/blob/main/docs/disambiguation The following files in `.machine_readable/` contain structured project metadata: -- `.machine_readable/descriptiles/STATE.a2ml` - Current project state and progress -- `.machine_readable/descriptiles/META.a2ml` - Architecture decisions and development practices -- `.machine_readable/descriptiles/ECOSYSTEM.a2ml` - Position in the ecosystem and related projects -- `.machine_readable/descriptiles/AGENTIC.a2ml` - AI agent interaction patterns -- `.machine_readable/descriptiles/NEUROSYM.a2ml` - Neurosymbolic integration config -- `.machine_readable/descriptiles/PLAYBOOK.a2ml` - Operational runbook +- `.machine_readable/descriptiles/STATE.deed` - Current project state and progress +- `.machine_readable/descriptiles/META.deed` - Architecture decisions and development practices +- `.machine_readable/descriptiles/ECOSYSTEM.deed` - Position in the ecosystem and related projects +- `.machine_readable/descriptiles/AGENTIC.deed` - AI agent interaction patterns +- `.machine_readable/descriptiles/NEUROSYM.deed` - Neurosymbolic integration config +- `.machine_readable/descriptiles/PLAYBOOK.deed` - Operational runbook + +A2ML is retired estate-wide: never create, restore or extend a `.a2ml` file. +The descriptiles are deeds (grammar: `metadatastician/standards` +`1-formats/deed/spec/abnf/deed.abnf`; check: `deed_lint.js`). --- @@ -50,14 +54,14 @@ The following files in `.machine_readable/` contain structured project metadata: |---------------|----------|-------| | **AffineScript** (`.affine`) | Primary application code | Affine types, dependent types, row polymorphism, extensible effects; compiles to Wasm | | **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. | +| **Deno** | JS runtime (tier 2) | Permitted, second after Bun: use it only where Bun cannot do the job (owner rulings 2026-10-14 and 2026-11-14). pnpm is tier 3 and npm the last resort (standards `3-practice/LANGUAGE-POLICY.adoc` §1.3); `package-lock.json` is never tracked. | | **Rust** | Performance-critical, systems, WASM | Preferred for CLI tools | | **Tauri 2.0+** | 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 | -| **Python** | SaltStack only | No other Python permitted | | **Nickel** | Configuration language | For complex configs | -| **A2ML** | State/meta files | .machine_readable/descriptiles/STATE.a2ml, .machine_readable/descriptiles/META.a2ml, .machine_readable/descriptiles/ECOSYSTEM.a2ml | +| **deed** | Repo metadata and descriptiles | `.machine_readable/descriptiles/*.deed`; grammar `standards/1-formats/deed/spec/abnf/deed.abnf`. Replaces A2ML, which is retired. | | **Julia** | Batch scripts, data processing | Per RSR | | **OCaml** | AffineScript compiler | Language-specific (compiler-host tooling lives here) | | **Ada** | Safety-critical systems | Where required | @@ -77,12 +81,10 @@ The following files in `.machine_readable/` contain structured project metadata: | ReScript | **AffineScript** | | (new files) | **AffineScript** (migration via #488) | | JavaScript (where the project has been meaningfully migrated to AffineScript) | **AffineScript** | -| Deno | Bun | | Node.js | Bun | -| npm | Bun | -| pnpm/yarn | Bun | +| yarn | Bun | | Go | Rust | -| Python (general) | **AffineScript** / Rust / Julia | +| **Python** (absolute: no exceptions, SaltStack included) | **AffineScript** / Rust / Julia | | Java/Kotlin | Rust / Tauri / Dioxus | | Swift | Tauri / Dioxus | | React Native | Tauri / Dioxus | @@ -107,7 +109,7 @@ Both are FOSS with independent governance (no Big Tech). 3. **Use `package.json` + `bun.lock` for JS runtime deps** - Bun is npm-compatible; a manifest is REQUIRED 4. **`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 5. **No Go code** - Use Rust instead. -6. **Python only for SaltStack** - All other Python must be rewritten. +6. **No Python, no exceptions** - The SaltStack exception is removed (owner ruling 2026-11-14). Any Python must be rewritten or removed. 7. **No Kotlin/Swift for mobile** - Use Tauri 2.0+ or Dioxus. 8. **MPL-1.0 / MPL-1.0-or-later are non-conforming** - Rewrite to MPL-2.0 in SPDX headers and LICENSE files when encountered (Hypatia's `validate_license` flags both). diff --git a/docs/patch_ecosystem.py b/docs/patch_ecosystem.py deleted file mode 100644 index 0436fd67..00000000 --- a/docs/patch_ecosystem.py +++ /dev/null @@ -1,62 +0,0 @@ -import sys - -with open('ECOSYSTEM.adoc', 'r', encoding='utf-8') as f: - content = f.read() - -# Replace block 1 -old1 = '''|ffinescript-dom-loader |scope-deferred |INT-02 substrate (#179) -shipped + closed 2026-05-31 as packages/affine-js/loader.js — already -host-agnostic (Deno/Node/browser parity). Whether the satellite repo -still earns its keep (vs. folding into ffine-js) is the open question -in #489; INT-08 reconciler runtime (#183) is verified end-to-end 2026-07-07 -(ffinescript-dom/e2e/run.sh; #255 fixed via #257) — revisit when it -dictates any DOM-specific loader surface. - -|ffinescript-cadre''' - -new1 = '''|ffinescript-cadre''' - -content = content.replace(old1, new1) - -# Replace block 2 -old2 = '''|INT-02 |Host-agnostic loader bridge (ffinescript-dom-loader) |#179 -**CLOSED 2026-05-31** |loader in packages/affine-js (SAT-02 fixed; -Deno/Node/browser parity, multi-namespace import object, ownership-section -accessor). *PROVEN + regression-locked:* 14 unit tests via pinned -deno task test (was flag-fragile — no run task) + ests/modules/loader-bridge/ -drives the *real* loader API over genuine compiler-emitted cross-module wasm -( eadBytes+uildImportObject link CrossCallee.consume(42)=42; -parseOwnershipSection reads a real Linear-param entry) — closes -INT-01 ↔ INT-02. S1; **unblocked INT-05/08/11**. The ffinescript-dom-loader -satellite shell is downstream — scope question deferred to #489.''' - -new2 = '''|INT-02 |Host-agnostic loader bridge |#179 -**CLOSED 2026-05-31** |loader in packages/affine-js (SAT-02 fixed; -Deno/Node/browser parity, multi-namespace import object, ownership-section -accessor). *PROVEN + regression-locked:* 14 unit tests via pinned -deno task test (was flag-fragile — no run task) + ests/modules/loader-bridge/ -drives the *real* loader API over genuine compiler-emitted cross-module wasm -( eadBytes+uildImportObject link CrossCallee.consume(42)=42; -parseOwnershipSection reads a real Linear-param entry) — closes -INT-01 ↔ INT-02. S1; **unblocked INT-05/08/11**. The ffinescript-dom-loader -satellite repo concept was dropped (#489 closed via Option A: folded into ffine-js).''' - -content = content.replace(old2, new2) - -# Replace block 3 -old3 = '''|INT-11 |Browser host parity (DOM loader + reconciler end-to-end) | -ledger-only |planned (INT-02 dep cleared 2026-05-31 via #179; INT-08 -runtime verified end-to-end 2026-07-07 under Node — browser-host parity -is the remaining leg). Satellite-repo question = #489.''' - -new3 = '''|INT-11 |Browser host parity (ffine-js loader + ffinescript-dom reconciler end-to-end) | -ledger-only |planned (INT-02 dep cleared 2026-05-31 via #179; INT-08 -runtime verified end-to-end 2026-07-07 under Node — browser-host parity -is the remaining leg). Satellite-repo question resolved (#489 closed via Option A: folded into ffine-js).''' - -content = content.replace(old3, new3) - -with open('ECOSYSTEM.adoc', 'w', encoding='utf-8') as f: - f.write(content) - -print(\