Stack crib 2025-2026 — the tour and the tech-radar underneath
Table of Contents
Format note: this is MTV Cribs (2000–2011, MTV) crossed with the Thoughtworks Tech Radar. Cribs is the voice; the radar table at the end is what the tour was really about.
Prior art (brief)
- Thoughtworks Tech Radar — the canonical org-level format. Quadrants (Techniques, Tools, Platforms, Languages & Frameworks) × rings (Adopt, Trial, Assess, Hold). Published semi-annually. Cited by ClearScore, RIO, OneUptime, and dozens of engineering blogs in 2026.
- usesthis.com — the individual-dev equivalent, running since 2010. Interviews about hardware, software, and workflow.
- MTV Cribs for engineering orgs — doesn't exist as a genre. The tour format has been parodied for garages, dorms, homelabs, and terminal setups (mostly on TikTok and YouTube), but there is no established engineering-org version. This note fills the gap and makes it useful by ending in a real radar.
Numbers below come from a 2026-09-08 survey of the jwalsh/* org (86
repos) and aygp-dr/* org (447 repos).
Welcome — front door
You are looking at 533 repositories across two GitHub orgs. Come on in.
There is a Makefile in almost every one of them. 58 in jwalsh, 286
in aygp-dr. Nobody around here has ever heard of just.
Behind the door: a persistent emacs --daemon inside tmux, connected
to a CIDER session, jacked into a Clojure nREPL on
127.0.0.1:42527. Every clj eval, every cljs build, every site query
goes through that one JVM. Twelve seconds of JVM startup per
throwaway clojure -M invocation would burn the entire session
budget. So it doesn't happen.
The kitchen — task tracking
No JIRA. No Trello. No Linear.
beads — a git-backed task store, polyglot (Go core, TypeScript on npm,
Python on PyPI, Ruby). The task DB lives in the repo, versioned like
any other file. bd ready shows unblocked work. bd close <id>
finishes it. bd sync && git push ships it. Merges resolve like any
other conflict; there is no separate SaaS to keep in sync.
Found in 15+ jwalsh repos, 30+ aygp-dr repos. Every mature project
that agents touch has a .beads/ directory next to .git/.
The garage — the deploy target
TRAMP over SSH to DreamHost VPS. The site
deploys through Emacs. org-publish writes files directly to
/ssh:www_wal_sh@vps47738.dreamhostps.com:~/wal.sh/ as if it were a
local path. There is no CI/CD pipeline in the conventional sense; the
laptop is the CI runner and the deploy tool is the text editor.
This is the only place in the two orgs where deploy happens this way. Everywhere else it's rsync-over-SSH, Docker Compose, or GitHub Pages. The wal.sh pattern is a signature, not a convention.
The rec room — the AI agent config
CLAUDE.md in every repo. 27 in jwalsh, 159
in aygp-dr — nearly universal in mature projects. Codebase context,
architecture, path-safety rules, deploy tier classification. When an
agent enters a repo it reads CLAUDE.md first and knows the local
conventions before touching anything.
MCP servers wired up: Atlassian, Gmail, Google Calendar, Google Drive,
Hugging Face, Slack, Uber (yes), plus a self-hosted
claude-in-chrome extension for browser automation. Agent runs at
Sonnet 4.6 by default; Opus 4.7 in /fast mode with a 1M-context
window for research work.
The master bedroom — where it all comes together
org-mode. Everything is literate. The site source is site/*.org.
Diagrams live inline as #+begin_src dot :file <name>.png blocks —
never loose .dot files. Code lives inline as #+begin_src clojure
blocks with #+RESULTS: evidence underneath. Property drawers on
headings carry :VERIFIED_AT:, :VERDICT:, :FINDING: metadata
that turns any assertion into an auditable claim.
The .cljc / .cljs split (pure reducer core, thin browser adapter)
is now the shape for every new interactive artifact — see the TOC
rail highlighter and the poll SPA for two 2026-09 examples on
this repo alone.
The workshop — testing discipline
clojure.test.check property tests against the pure .cljc cores.
pytest for Python work. fast-check for the JS mirrors when they
exist (see agent-federation-harness). cloverage on the Clojure side.
No mutation testing in CI; done ad-hoc when a decision warrants it.
Verification convention that recurs: hash-chain
audit ledger (.verify/chain.jsonl). Every validation appends a block
binding the change hash + the verifier to the previous block's hash;
tamper-evident by construction.
The pattern — spec as truth center
The site wal.sh/tools/*, wal.sh/research/*, wal.sh/current/* is
the source of truth for specs. Other repos in both orgs link back to
wal.sh URLs from their READMEs:
- transform-tool-rs (Rust/WASM impl) →
wal.sh/tools/transform/ - crowsnest (agent observability) →
wal.sh/tools/crowsnest/spec-v3 - wal-sh-adtech-ts-001..002 (TypeScript cleanroom reimplementations) →
wal.sh/research/browser-adtech-infra/
Specs are versioned; implementations pin to a research-site commit hash in their README. The publishing pipeline is deliberately one-way: research site → dependent repos, never the reverse.
The tech radar
The tour is over. Here is the same information in the format an engineering director would actually accept.
Adopt
| Item | Quadrant | Since |
|---|---|---|
GNU Make (via gmake on FreeBSD) |
Tools | forever |
| org-mode + literate blocks | Techniques | forever |
Clojure + ClojureScript (.cljc pure core) |
Languages & Frameworks | 2024 |
clojure.test + test.check PBT |
Techniques | 2025 |
| beads for task tracking | Tools | 2025 |
| CLAUDE.md-per-repo | Techniques | 2025 |
| TRAMP-over-SSH for wal.sh deploy | Platforms | forever |
| Property drawers + verification ledger | Techniques | 2025 |
Trial
| Item | Quadrant | Note |
|---|---|---|
| Rust for systems tools | Languages | transform-tool-rs, crowsnest-rs, formal-methods |
| WASM for spec-portable codecs | Platforms | via transform-tool-rs |
| Nix flakes for reproducible builds | Tools | 3 aygp-dr repos; not sitewide |
| Firecracker-style microVMs | Platforms | Adwankar 2026-09 post; being read, not yet adopted |
| Boot loader + manifest for global JS | Techniques | GH #92 plan; not yet built |
Assess
| Item | Quadrant | Reason |
|---|---|---|
| Automated mutation testing (mull, clojure.test.mutants) | Techniques | Danluu 2026-09 shows agents write weak PBT without pressure |
| Playwright for browser adapter tests | Tools | Currently used only in agent-federation-harness; not standard |
| Dynamic-import boot loader vs static bundle set | Techniques | Blocked on #92 design review |
| Site-tracker consolidation of adtech registry | Techniques | Semantic clean-up in publish.el |
| CDN worker injection (Cloudflare Workers) | Platforms | Rejected for wal.sh; still worth watching for other repos |
Hold
| Item | Reason |
|---|---|
just as a Make replacement |
344 Makefiles already work; churn cost dominates ergonomic gain |
npx shadow-cljs as build entry |
Spawns fresh JVM per invocation; use the persistent CIDER session |
| JIRA / Linear / Trello | Beads is git-backed and merges cleanly across agent branches |
| Static-file per-state HTML | See poll-pushstate — pre-generation scales as combinatorial explosion |
emacsclient -e from agent shells |
Wedges the daemon; use nREPL 42527 instead |
| Mermaid diagrams | No FreeBSD renderer; Graphviz/dot only |
Loose .dot or .rkt files under site/ |
Diagrams and code live inline in org; artifacts only on disk |
Falsification
The crib framing is only worth writing if the radar underneath is honest. Two ways this note is falsifiable:
- If in 6 months any Adopt item has been dropped, that adoption was provisional and the tier was wrong. Re-tier or delete.
- If any Hold item lands anyway, either the reasoning was wrong or the constraint changed. Note the change; leave the crossed-out original for the audit trail.
Related
- docs/dynamic-globals-plan.org — the boot loader plan in Trial
- TOC rail scrollspy note — the
.cljcsplit pattern in the wild - Poll SPA — the deadpan-serious-in-a-joke-frame precedent
- Thoughtworks Radar — the format this ends in
- usesthis.com — the individual-dev sibling of this format