From c762be12c4d253ade89fa56062980fb63caf9784 Mon Sep 17 00:00:00 2001 From: Aaron Stainback Date: Tue, 28 Apr 2026 16:14:03 -0400 Subject: [PATCH 1/3] =?UTF-8?q?memory(CURRENT-aaron=20=C2=A730):=20TypeScr?= =?UTF-8?q?ipt/Bun=20default=20+=20step-out-carefully=20discipline?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per the same-tick CURRENT-update discipline (CLAUDE.md 'CURRENT files win on conflict with older raw memories' + 'edit CURRENT in the same tick'), surfacing the new §30 TypeScript/Bun default rule that landed in PR #685's substrate batch. Mirrors the pattern of §29 (threading lineage) — full verbatim quote + discipline rules + operational pickup notes + pointer back to the standalone memory file. Cross-references B-0086 (port candidates) for concrete follow-up. --- memory/CURRENT-aaron.md | 68 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/memory/CURRENT-aaron.md b/memory/CURRENT-aaron.md index 7a129649e..c6cdb76a7 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` ++ B-0086 (port candidates). + ## How this file stays accurate - When a new memory updates a rule here, I update this From 7811e5b722d7db277712678c0ff3ddd327c44a96 Mon Sep 17 00:00:00 2001 From: Aaron Stainback Date: Tue, 28 Apr 2026 16:19:49 -0400 Subject: [PATCH 2/3] =?UTF-8?q?memory(MEMORY.md):=20paired-edit=20marker?= =?UTF-8?q?=20for=20CURRENT-aaron=20=C2=A730=20update?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Required by .github/workflows/memory-index-integrity.yml — any memory/*.md edit (including CURRENT-*.md) must be paired with a MEMORY.md touch in the same PR. Marker bumped to reference PR #688; CURRENT-aaron section count description updated to include §30 TypeScript/Bun-default discipline. --- memory/MEMORY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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." From bfb801b2db27432047d47aa396b5224ddc511c16 Mon Sep 17 00:00:00 2001 From: Aaron Stainback Date: Tue, 28 Apr 2026 16:32:32 -0400 Subject: [PATCH 3/3] =?UTF-8?q?fix(CURRENT-aaron):=20Copilot=20review=20?= =?UTF-8?q?=E2=80=94=20refresh=20blurb=20=C2=A726-29=20=E2=86=92=20=C2=A72?= =?UTF-8?q?6-30=20+=20drop=20list-marker=20'+'=20on=20pointer=20line?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two Copilot P2 findings on PR #688: 1. Line 1433: '+' starts list marker; markdown lint may trip. Replaced with 'and' (rephrases the pointer cleanly). 2. Line 1460: 'sections 26-29 added' is stale post-§30 add. Updated range + appended §30 TypeScript-default summary. --- memory/CURRENT-aaron.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/memory/CURRENT-aaron.md b/memory/CURRENT-aaron.md index c6cdb76a7..272984b7b 100644 --- a/memory/CURRENT-aaron.md +++ b/memory/CURRENT-aaron.md @@ -1430,7 +1430,7 @@ not as emergency cleanup): **Pointer:** `feedback_typescript_bun_default_step_out_carefully_aaron_2026_04_28.md` -+ B-0086 (port candidates). +and B-0086 (port candidates). ## How this file stays accurate @@ -1457,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