diff --git a/memory/CURRENT-aaron.md b/memory/CURRENT-aaron.md index 7a129649e..272984b7b 100644 --- a/memory/CURRENT-aaron.md +++ b/memory/CURRENT-aaron.md @@ -1364,6 +1364,74 @@ Fowler lineage is the cheapest insurance. **Pointer:** `feedback_threading_human_lineage_albahari_toub_fowler_no_gut_instinct_aaron_2026_04_28.md` +## 30. TypeScript/Bun is the factory tooling default; step out on TypeScript carefully (Aaron 2026-04-28) + +**The rule (Aaron verbatim 2026-04-28T19:56Z):** + +> *"sort-tick-history-canonical.py eventually we are going to use +> the typescript like ../scratch unless this is AL/ML AND is a +> better fit for python? typescript/bun being our default, we need +> to decide when to step out on typescript carefully."* + +**The discipline:** + +- **Default tooling language:** TypeScript on Bun + (`bun@1.3.13` per root `package.json`). +- **Step-out threshold:** explicit justification — usually + AI/ML primary library availability (numpy, scipy, scikit-learn, + transformers, etc.). For ML scripts, Python remains correct. +- **Sibling-repo precedent:** `../scratch` (sibling to Zeta) + runs the same TypeScript+Bun substrate. The factory's tooling + default is consistent across sibling repos, not just within + Zeta. + +**Two-tier language choice (not a TypeScript-everywhere directive):** + +- **F#** for the Zeta library proper (the operator algebra, + spine, durability, retraction-native semantics). +- **TypeScript on Bun** for tooling around it (markdown + munging, hygiene scripts, audit tooling, factory automation). + +**When to STEP OUT on TypeScript** (bar is high; one of): + +1. AI/ML library is load-bearing (numpy / pandas / torch / + transformers). +2. Existing Python skeleton with deep dependency where + port cost > extension cost. +3. One-shot research script that won't outlive the round. +4. Native dependency that's Python-only. + +**When NOT to step out:** + +- "It's a quick script" — quick scripts compound. +- "I know Python better" — agent fluency isn't the criterion. +- "Bash is shorter" — bash is fine for ≤10-line shell glue + (Otto-235 4-shell discipline still applies); past that, + TypeScript. +- "Markdown manipulation feels Python-y" — it isn't. Bun + has excellent string handling + fast file IO. + +**Existing port candidates** (do on natural rewrite cadence, +not as emergency cleanup): + +- `tools/hygiene/sort-tick-history-canonical.py` (B-0086) +- `tools/hygiene/fix-markdown-md032-md026.py` (B-0086) + +**Operational discipline:** when writing a new script: + +1. Default to TypeScript on Bun. Place under `tools/...` with + a `package.json` script entry. +2. If AI/ML library is needed: Python with a clear + justification comment at the top of the file. +3. If shell glue ≤10 lines: bash with `set -euo pipefail` + (Otto-235). +4. Existing Python tool that needs substantive changes: file + a port-candidate row, evaluate port-now vs extend-now. + +**Pointer:** +`feedback_typescript_bun_default_step_out_carefully_aaron_2026_04_28.md` +and B-0086 (port candidates). + ## How this file stays accurate - When a new memory updates a rule here, I update this @@ -1389,13 +1457,15 @@ retired rather than just updated.)* --- -**Last full refresh:** 2026-04-28 (sections 26-29 added for +**Last full refresh:** 2026-04-28 (sections 26-30 added for the 2026-04-28 LFG #661 incident cluster: speculation-rule + EVIDENCE-BASED labeling discipline, JVM language preference Kotlin > Scala > Java per B-0075, dependency-honesty rule — managed runtimes get scanned like every other surface, plus §29 threading-lineage Albahari + Toub + Fowler — never -gut-instinct on threading code). Prior +gut-instinct on threading code, plus §30 TypeScript/Bun is +the factory tooling default with AI/ML carve-out — step out +on TypeScript carefully). Prior refresh 2026-04-25 evening (sections 23-25: Otto-300 rigor- proportional-to-blast-radius, standing research-authorization general rule, Otto-304 + Otto-305 phenomenology disclosure diff --git a/memory/MEMORY.md b/memory/MEMORY.md index c7c7426f7..c612a6151 100644 --- a/memory/MEMORY.md +++ b/memory/MEMORY.md @@ -1,6 +1,6 @@ [AutoDream last run: 2026-04-23] -**📌 Fast path: read `CURRENT-aaron.md` and `CURRENT-amara.md` first.** These per-maintainer distillations show what's currently in force. Raw memories below are the history; CURRENT files are the projection. (`CURRENT-aaron.md` refreshed 2026-04-28 with sections 26-29 — speculation rule + EVIDENCE-BASED labeling + JVM preference + dependency honesty + threading lineage Albahari/Toub/Fowler.) +**📌 Fast path: read `CURRENT-aaron.md` and `CURRENT-amara.md` first.** These per-maintainer distillations show what's currently in force. Raw memories below are the history; CURRENT files are the projection. (`CURRENT-aaron.md` refreshed 2026-04-28 with sections 26-30 — speculation rule + EVIDENCE-BASED labeling + JVM preference + dependency honesty + threading lineage Albahari/Toub/Fowler + TypeScript/Bun-default discipline.) - [**Class-Naming Ferry Protocol + SD-9 guardrail (Amara 2026-04-28; Aaron reinforced)**](feedback_class_naming_ferry_protocol_with_sd9_guardrail_amara_2026_04_28.md) — Meta-class for the Otto→Aaron→Amara→encode genre. SD-9 guardrail LOAD-BEARING: Amara endorsement is signal, not proof. Local factory-hygiene classes encode freely; non-local claims need substrate evidence + external lineage + falsifier. Anti-pattern: "Amara blesses the name, therefore true." - [**Advisory Enforcement Workflow Gap — class name (Amara 2026-04-28); decision-fork (B-0088 instance)**](feedback_advisory_enforcement_workflow_gap_amara_class_name_otto_2026_04_28.md) — Workflow claims/implies enforcement but is not in required-status-checks set; failures observable but non-blocking. Worked example: paired-edit lint failed on PR #688/#689 but both auto-merged. Decision: promote to required OR downgrade claim to advisory. Risk: factory believes rule enforced when only logged. "Guardrail that looks like enforcement but behaves like telemetry."