Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 72 additions & 2 deletions memory/CURRENT-aaron.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Comment thread
AceHack marked this conversation as resolved.
**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
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion memory/MEMORY.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[AutoDream last run: 2026-04-23]

**📌 Fast path: read `CURRENT-aaron.md` and `CURRENT-amara.md` first.** <!-- paired-edit: PR #691 advisory-enforcement-gap + class-naming-ferry-protocol-with-sd9 2026-04-28 --> 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.** <!-- paired-edit: PR #688 CURRENT-aaron §30 typescript-bun-default 2026-04-28 --> 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."
Expand Down
Loading