Architecture Decision Records
How this system is built and why. Every decision that changes the architecture gets written down. Generated with the adr-skill for Claude Code and Pi.
npx skills add skillrecordings/adr-skill --skill adr-skill --yes --global- 0186
Persisted Q&A Context Resources and Human-Gated Improvement Loop
proposedDo Now100 - 0104
Gateway Priority Message Queue
shippedDo Now96 - 0190
Memory Yield Contract
acceptedDo Now95 - 0194
Inngest Runtime SQLite Forensics and Stale-Run Sweep Contract
shippedDo Now93 - 0195
Mandatory Memory Participation Contract
shippedDo Now91 - 0188
Gateway Channel Muting and Known Issues
shippedDo Now91 - 0125
Channel-Aware Prompt Injection & Platform Formatting
shippedDo Now90 - 0148
Kubernetes Cluster Resilience Policy
acceptedDo Now90 - 0185
Session-Scoped Webhook Subscriptions with NDJSON Streaming
shippedDo Now90 - 0187
NAS Degradation Local/Temp/Queue Fallback Contract
acceptedDo Now90 - 0191
No-Op Inference Circuit Breakers
acceptedDo Now90 - 0193
Task Triage Output Contract
acceptedDo Now90 - 0106
Content Review Pipeline — Inline Feedback & Agent Update Loop
acceptedDo Now90 - 0204
Seamless Agent Context
joelclaw has a capable memory infrastructure: Typesense hybrid search (keyword + vector) with 103+ observations, system knowledge collections (ADRs, skills, insights), a write pipeline (observe → c…
shippedDo Now88 - 0157
Agent Lifecycle CLI — `joelclaw agent`
acceptedDo Now86 - 0192
Recall Rewrite Reliability Contract
acceptedDo Now86 - 0183
ADR Priority Rubric and Daily Ranking
acceptedDo Now85 - 0226
VIP Contextual Narrative Briefs
The VIP email pipeline (`vip-email-received.ts`) produces analytical briefs: thread stats, followed links, binary "needs attention: yes/no." Joel wants **narratives** — briefs that read like an exe…
acceptedDo Now84 - 0203
Compaction Recovery Pipeline
Compaction is the single largest source of context loss in joelclaw sessions. When pi compacts, the LLM summarizes the conversation into ~2K tokens, discarding conversational nuance, debugging insi…
shippedDo Now82 - 0075
JoelClaw Web Auth & Dashboard — Better Auth + Convex
acceptedDo Now80 - 0122
Discord Rich & Interactive Messaging via discordjs-react
acceptedDo Now80 - 0142
Dynamic Inference Provider Scheduling
acceptedDo Now80 - 0161
Voice Agent Interview Mode
acceptedDo Now80 - 0162
Gateway Reactions, Replies & Social Channel Configuration
acceptedDo Now80 - 0178
LiveKit Voice Worker Durability Contract
acceptedDo Now80 - 0102
Scheduled Prompt Tasks
acceptedNext70 - 0109
System-Wide Taxonomy + Concept Contract (No Tag Soup)
acceptedNext70 - 0111
Channel Routing Engine (Conversations + Events)
supersededNext70 - 0164
Mandatory Taxonomy Classification
acceptedNext70 - 0165
Taxonomy-Aware Skill Retrieval
acceptedNext70 - 0184
Node-0 to Fleet — Platform Abstraction and Multi-Node Readiness
supersededNext70 - 0041
First-Class Media Handling from Connected Channels
acceptedNext60 - 0096
Budget-Aware Memory Retrieval Policy
acceptedNext60 - 0110
Agent-Secrets Lease Deduplication & OTEL Integration
acceptedNext60 - 0145
Channel Message Triage Router
acceptedNext60 - 0017
Parallel Story and Subtask Execution in Agent Loops
The current agent loop (ADR-0015) is rigidly sequential: one story at a time, one agent per step, pipeline flow. The planner picks the next unpassed story, the chain runs plan→test→implement→review…
supersededDe-risk50 - 0026
Background agents: async task dispatch via Inngest with file inbox notifications
supersededDe-risk50 - 0027
Video Content Pipeline Expansion — Clip Segmentation + Content Repurposing
joelclaw's video pipeline currently handles **ingest only**: download → transcribe → enrich vault note. The output is a single vault note with a wall-of-text transcript and an AI-generated summary.…
shippedDe-risk50 - 0059
Multi-Language LSP Extension for pi-tools
The current `ts-check` extension in pi-tools is unreliable. It spawns a tsgo LSP process per project root but frequently fails to return useful diagnostics, hover info times out, and the JSON-RPC l…
rejectedDe-risk50 - 0061
pi-tools Enhancement Cycle — Commit Tool, Web Extractors, MCQ
After evaluating oh-my-pi (`can1357/oh-my-pi`) as a potential replacement for stock pi, we decided to stay on stock pi and cherry-pick patterns into pi-tools (see ADR-0059 for LSP, ADR-0060 for swa…
rejectedDe-risk50 - 0062
Heartbeat-Driven Task Triage
shippedDe-risk50 - 0094
Memory Write Gate V1 (Soft, LLM-First, Three-State)
shippedDe-risk50 - 0095
Typesense-Native Memory Categories (SKOS-Lite V1)
shippedDe-risk50 - 0097
Forward Triggers for Time-Based Memory Preload
proposedDe-risk50 - 0098
Memory Write Gate V2 Calibration and Governance
acceptedDe-risk50 - 0100
Memory Dual Search (Vector + Graph) Activation Plan
proposedDe-risk50 - 0112
Unified Caching Layer
proposedDe-risk50 - 0124
Discord Thread-Forked Sessions
proposedDe-risk50 - 0128
Subagent Delegation & Chain Execution for Gateway
supersededDe-risk50 - 0132
VIP DM Escalated Handling
supersededDe-risk50 - 0150
Discovery Enrichment Pipeline
shippedDe-risk50 - 0151
VIP Contact Enrichment & Monitoring
supersededDe-risk50 - 0166
Documentation Gardener System
shippedDe-risk50 - 0177
Secret Redaction & Network Intercept
proposedDe-risk50 - 0181
AT Protocol Mail Adapter for Capability Port
proposedDe-risk44 - 0054
joelclaw Native App — iPhone, Watch, CarPlay
rejectedPark30 - 0060
Inngest-Backed Swarm/DAG Multi-Agent Orchestration
`ralph-loop` executes PRD stories **sequentially** — one codex session per story, linear chain. This works for implementation loops but can't express:
proposedPark30 - 0099
Memory Knowledge-Graph Substrate (Deferred, Activation-Gated)
proposedPark30 - 0136
Integrate 20-Year Twitter Archive as a Typesense-Backed Corpus
proposedPark30 - 0152
Dream Process — Agent Self-Reflection Loop
The system currently has two feedback mechanisms:
proposedPark30 - 0001
Adopt architecture decision records
Architecture decisions in this project are made implicitly — through code, conversations, and tribal knowledge. When a new contributor (human or AI agent) joins the codebase, there is no record of …
shipped - 0002
Adopt PARA vault + OpenClaw orchestration for always-on personal assistant
A Mac Mini is being set up as a prototype always-on AI personal assistant/copilot/life management system. The machine needs a unified architecture that connects:
superseded - 0003
Build joelclaw instead of deploying OpenClaw
ADR-0002 assumed OpenClaw would be the orchestration layer for the personal assistant system. After 6 sessions of infrastructure work, the system has evolved beyond what OpenClaw provides in severa…
shipped - 0004
0004 — AT Protocol as Bedrock
shipped - 0005
Adopt Inngest multi-agent pipeline for durable autonomous coding loops
joelclaw needs the ability to execute long-running autonomous coding workloads — send an event, go AFK, wake up to stacked PRs with every iteration traceable. No durable autonomous coding loop exis…
shipped - 0006
Adopt Prometheus + Grafana for system observability
The Mac Mini runs 3 Docker containers (Inngest, Qdrant, Redis), a Bun worker (system-bus), and Caddy — all managed via Docker Compose and launchd. AGENTS.md principle #2 states **"Observability ove…
superseded - 0007
Upgrade durable coding loops to v2 with Docker-isolated execution and stronger loop controls
ADR-0005 established the durable PLANNER → IMPLEMENTOR → REVIEWER → JUDGE loop on Inngest and was implemented on 2026-02-14. Initial build + smoke test validated the architecture but exposed practi…
superseded - 0008
Add post-loop retrospective for skill evolution and memory ingestion
ADR-0005 established the durable PLANNER → IMPLEMENTOR → REVIEWER → JUDGE loop. ADR-0007 improved loop execution quality (Docker isolation, duration tracking, stricter controls). The system can now…
shipped - 0009
9. Rename `igs` CLI to `joelclaw`
shipped - 0010
Establish a central system loop gateway for autonomous orchestration
The system already has meaningful execution capability, but orchestration is still manual. ADR-0005 established durable coding loops with role-based execution and event-driven handoffs. ADR-0007 im…
superseded - 0011
Redis-Backed PRD State for Agent Loops
The agent loop pipeline (ADR-0005) runs a PLANNER → IMPLEMENTOR → REVIEWER → JUDGE cycle across stories defined in a PRD. Originally, loop state — which stories have passed, which are being retried…
shipped - 0012
Planner generates PRD from goal
The agent loop requires a hand-crafted `prd.json` before it can start. Writing PRDs is the bottleneck — each one requires understanding the codebase, scoping stories to be small enough for a single…
shipped - 0013
LLM-powered judge evaluation
The judge function (ADR-0005) makes pass/fail decisions based solely on whether typecheck + lint + tests succeed. It has no understanding of whether the implementation actually satisfies the accept…
superseded - 0014
Agent memory workspace
Agents lose all context between sessions. Shared instructions (`AGENTS.md`) tell agents what to do but not what happened. Without persistent memory files, every session starts from zero.
superseded - 0015
Loop architecture: TDD flow with separated roles
The current agent loop (ADR-0005) has a backwards flow: implement → write tests → check results. This causes systemic failures:
shipped - 0016
Idempotency Guards for Loop Event Chain
The agent loop event chain (ADR-0015) has no protection against parallel execution. Duplicate `agent/loop.start` events — from accidental double-fires, CLI retries, or stale Inngest replays — creat…
shipped - 0018
Adopt pi-native gateway pattern with Redis event bridge for system orchestration
ADR-0010 established the need for a central system loop gateway — an autonomous orchestrator that runs SENSE→ORIENT→DECIDE→ACT→LEARN and chose a hybrid event-driven + cron heartbeat approach. It le…
shipped - 0019
Rename events from imperative commands to past-tense notifications
The system-bus event names are a mix of two styles:
shipped - 0020
Observational memory pipeline
Agents on this system lose conversational nuance between sessions. ADR-0014 established the memory workspace (`MEMORY.md` + daily logs), and the session-lifecycle pi extension (pi-tools v0.3.0) aut…
superseded - 0021
Adopt comprehensive agent memory system
Agents on this system lose conversational nuance between sessions. Memory is the critical missing capability — without it, every session starts from zero, hard-won debugging insights evaporate, use…
shipped - 0022
Adopt webhook-to-system-event pipeline for external signal ingestion
ADR-0018 established the Redis event bridge as the inbound path for system events: external signals → Redis list → pi extension drains → agent acts. It defined the schema (`SystemEvent`), the keys …
superseded - 0023
Docker Sandbox for Agent Loops
Agent loop iterations (IMPLEMENTOR, TEST-WRITER) currently spawn `codex exec` and `claude -p` directly on the host machine via `Bun.spawn()`. This means:
shipped - 0024
Taxonomy-enhanced session search with SKOS concept layer
590 agent sessions were generated in 48 hours (37 Pi, 381 Claude Code, 172 Codex). These contain every decision, debugging insight, architecture discussion, and configuration change that happened o…
superseded - 0025
Network architecture: start with what works, grow as needed
shipped - 0028
Align Inngest Rig with SDK Best Practices
shipped - 0029
Replace Docker Desktop with Colima + Talos for container runtime
`panda` (Mac Mini M4 Pro, 64 GB) runs 24/7 as a headless server managed via Tailscale SSH. The container runtime powers the k3d cluster (`joelclaw`), which runs Redis, Qdrant, and Inngest as Kubern…
shipped - 0030
Replace Flannel + kube-proxy with Cilium
The Talos cluster (`joelclaw`) currently runs with the default CNI: **Flannel** + **kube-proxy**. This is the simplest path — Talos bundles Flannel out of the box and it works with zero config.
superseded - 0031
Adopt Cilium Gateway API instead of Ingress
The cluster currently uses NodePort services directly — no Ingress controller at all. If/when we need proper HTTP routing (TLS termination, host-based routing, path routing), the traditional answer…
superseded - 0032
Kubernetes persistent storage: Ceph Rook vs SeaweedFS vs local-path
The Talos cluster currently uses **local-path-provisioner** for PVCs. This was added manually (ADR-0029) because Talos doesn't bundle a storage provisioner. It works: Redis, Qdrant, and Inngest all…
superseded - 0033
VictoriaMetrics + Grafana monitoring stack for Kubernetes
The Talos cluster has no monitoring. We observe the system via `kubectl get pods`, `talosctl dashboard`, and application logs. There's no metrics collection, no dashboards, no alerting.
superseded - 0034
Flux Operator for GitOps cluster management
Cluster state is currently applied manually via `kubectl apply -f`. The k8s manifests live in `~/Code/joelhooks/joelclaw/k8s/` and are applied by hand or by agents running kubectl commands. There's…
superseded - 0035
Central + satellite session routing for gateway events
ADR-0018 established a Redis event bridge between Inngest functions and pi sessions. The initial implementation pushed every event to a single shared `joelclaw:events:main` list. This worked for on…
shipped - 0036
Run central gateway session as a launchd-managed daemon
ADR-0035 established a central + satellite routing model where one "gateway" session receives all heartbeats and system events. But that session needs to actually exist — it must be always-on, surv…
superseded - 0037
Layered watchdog for gateway heartbeat failure detection
The central gateway session (ADR-0036) receives heartbeats from an Inngest cron every 15 minutes. But if Inngest itself goes down — the server crashes, the worker dies, Redis becomes unreachable, o…
shipped - 0038
Embed pi as a library in a joelclaw gateway daemon
The current central gateway session (ADR-0036) runs pi inside tmux, managed by launchd. A gateway extension injects events via `sendUserMessage()`. This works for Redis-based notifications but has …
shipped - 0039
Self-host Convex as the real-time data layer for joelclaw.com
joelclaw.com is a statically-generated Next.js 16 site with MDX content. It has no database, no auth, no real-time features. Joel wants to add:
shipped - 0040
Google Workspace Access via gogcli
shipped - 0042
Telegram Rich Replies, Outbound Media, and Agent Voice
shipped - 0043
Agent Voice Conversations via Self-Hosted LiveKit
shipped - 0044
Private-First PDS with Bento Bridge
shipped - 0045
Task Management via Ports and Adapters
shipped - 0046
TypeScript Things CLI via joelclaw Tasks Subcommand
rejected - 0047
Todoist as Async Conversation Channel
shipped - 0048
Webhook Gateway for External Service Integration
shipped - 0049
Gateway TUI via WebSocket
shipped - 0050
Gateway session resume via fixed file path and codex model pinning
Two operational issues were discovered simultaneously:
shipped - 0051
Tailscale Funnel as Public Ingress for Webhooks
shipped - 0052
Email Port — Hexagonal Architecture with Dual Adapters
shipped - 0053
Event-emitter prompts and the Agency triage principle
The gateway extension delivers Inngest events to the pi session as user messages. Previously, ALL events were wrapped in a generic template:
shipped - 0055
Granola Meeting Intelligence Pipeline
shipped - 0056
Personal Relationship Management — People as First-Class Entities
superseded - 0057
Skill Pack Distribution — Install from Source
shipped - 0058
58. Streamed NDJSON Protocol for Agent-First CLIs
shipped - 0063
Client-Side Search with Pagefind
joelclaw.com has ~80 pages of content (10 articles, 63 ADRs, 7 discoveries) with no search. Users can only browse by section (Writing, Cool, ADRs, Network) or scroll through listings. As the site g…
shipped - 0064
Evaluate Elixir/BEAM as joelclaw Backbone
superseded - 0065
Friction auto-fix — bias towards action
ADR-0021 Phase 4 (Friction) detects recurring friction patterns from Qdrant observations and creates Todoist tasks for Joel to review. The pipeline works — 10 patterns detected on first successful …
shipped - 0066
Inngest Monitor Pi Extension
shipped - 0067
Integrate Community Skill Patterns
shipped - 0068
Memory Proposal Auto-Triage Pipeline
shipped - 0069
Gateway Proactive Telegram Notifications
shipped - 0070
Telegram Rich Notifications with Inline Keyboards
shipped - 0071
Notification Triage Classes
shipped - 0077
Memory System — Next Phase
shipped - 0078
Opus Token Reduction Across joelclaw
shipped - 0079
Telnyx Voice & SMS Notification Channel
shipped - 0080
Vault File Access from Voice Mode
shipped - 0081
Vault CLI & Agent Tool Access
shipped - 0082
Typesense as Unified Search Layer for the JoelClaw Network
shipped - 0083
Tailscale Kubernetes Operator for Service Mesh
superseded - 0084
Unified Content Resource Schema (Convex)
shipped - 0085
Data-Driven Network Page via Convex
shipped - 0086
Telegram Slash Commands, Channel-Aware Formatting, and Rich Interactions
shipped - 0087
Full-Stack Observability + JoelClaw Design System
shipped - 0088
NAS-Backed Storage Tiering
shipped - 0089
Single-Source Inngest Worker Deployment (Retire Dual-Clone Sync)
shipped - 0090
Autonomous O11y Triage Loop
shipped - 0091
Gateway Model Fallback
shipped - 0092
Unified pi-infer Abstraction with Model Fallback
superseded - 0093
Agent-Friendly Navigation Contract (AGENT-FIRST 30)
shipped - 0101
Langfuse as an LLM-Only Observability Plane
superseded - 0103
Gateway Session Isolation — No Background Work in the Pi Session
shipped - 0105
joelclaw PDF Brain — Document Library as First-Class Network Utility
superseded - 0107
ADR Content Migration — Filesystem to Convex Read Projection
superseded - 0108
Next.js Best Practices Audit
shipped - 0113
Standardize page-level status indicator styling
shipped - 0114
Elixir/BEAM/Jido Migration — Full Architecture Evaluation
superseded - 0115
Koko — Elixir Agent Project Charter
superseded - 0116
Koko Redis Bridge Protocol
superseded - 0117
Koko First Workloads
superseded - 0118
Koko Shadow Executor Mode
superseded - 0119
X/Twitter CLI Integration
shipped - 0120
Discord Thread-Based Conversations
shipped - 0121
iMessage Channel via imsg-rpc FDA Sidecar on macOS
shipped - 0123
Request-Scoped Channel Routing
shipped - 0126
Discord Rich UI Component Library
shipped - 0127
Feed Subscriptions & Resource Monitoring
shipped - 0129
Automated X Posting Strategy
shipped - 0130
Slack Channel Integration
shipped - 0131
Unified Channel Intelligence Pipeline
shipped - 0133
Contact Enrichment Pipeline
shipped - 0134
System Sleep Mode
shipped - 0135
Pi Session Langfuse Instrumentation
superseded - 0137
Codex Prompting Skill Router for Intent-to-Tool Delegation
shipped - 0138
Self-Healing NAS Backup Orchestrator
shipped - 0139
SDK Reachability Investigator (Historical, Superseded)
superseded - 0140
One place to pick and trace LLM models
joelclaw currently routes LLM calls through multiple incompatible paths:
shipped - 0141
Gateway context overflow auto-recovery with compression summary
On 2026-02-25, the gateway daemon became completely unresponsive via Telegram for hours. Every inbound message was received, persisted to the Redis stream, and "resolved" (acked) — but the actual A…
shipped - 0143
AST-Based Message Formatting via unified/remark
shipped - 0144
Gateway Hexagonal Architecture (Ports & Adapters)
shipped - 0146
Inference Cost Monitoring and Control
shipped - 0147
Named Agent Profiles for Specialized Inference
shipped - 0149
Self-Hosted Convex Backend
superseded - 0153
Docs REST HTTP API for Agent Access (Typesense-backed)
shipped - 0154
Article Content Migration — MDX to Convex ContentResource
superseded - 0155
Three-Stage Story Pipeline: Implement → Prove → Judge
shipped - 0156
Graceful Worker Restart — Zero-Downtime Deploy
superseded - 0158
Compiled Worker Supervisor Binary
superseded - 0159
Talon — Infrastructure Watchdog Daemon
shipped - 0160
Telegram Streaming UX
shipped - 0163
Adaptive Prompt Architecture
shipped - 0167
Codex Sandbox + CWD Policy
shipped - 0168
Convex-Canonical Content Lifecycle (No Repo MDX Sources)
shipped - 0169
CLI Capability Interface Contracts
shipped - 0170
Agent Role System (ROLE.md)
shipped - 0171
Custom System Prompt Architecture
shipped - 0172
Agent Mail via MCP Agent Mail
shipped - 0173
ADR Number Collision Remediation
shipped - 0174
Vault Command Tree + ADR Audit CLI
shipped - 0175
JoelClaw Design System — Responsive Layout & Component Architecture
shipped - 0176
Transcript Indexing in Typesense
shipped - 0179
Automated Skill Gardening
shipped - 0180
Configurable Sub-Agent Roster
shipped - 0182
Node-0 Fleet Contract and Localhost Resilience
shipped - 0189
Gateway Guardrails
accepted - 0196
Cancel-on-New-Message for Gateway
accepted - 0197
Sub-Agent Delegation via step.invoke()
accepted - 0198
Adaptive Heartbeat — Check Cheaply, Act Rarely
accepted - 0199
Close the Loop — Reflect Brain, Failed Targets, and Mise Brief
joelclaw has extensive infrastructure for agent loops (Inngest, Redis, OTEL, Typesense) and well-specified designs for post-loop learning (ADR-0008), memory (ADR-0021), and friction auto-fix (ADR-0…
accepted - 0200
Force/Enforce/Verify (F/E/V) — Standard Pattern for Cross-Cutting Concerns
accepted - 0201
Workflow Runtime Deployment Strategy + Runtime Alternatives Research Plan
proposed - 0202
Turn-Level Mandatory Knowledge Writes (Force/Enforce/Verify)
shipped - 0205
Cloud-Native Agent Execution Vision
joelclaw currently runs on a single Mac Mini (M4 Pro, 64GB). Agent execution (Codex, Claude, and pi sessions) happens as local host processes with broad machine access. ADR-0060 introduces a swarm …
proposed - 0206
Hot Image Agent Development Environments
ADR-0205 defines the cloud-native direction for agent execution: isolated, durable, and fast-starting agent runtimes that map local k8s to AWS primitives.
proposed - 0207
Restate Durable Execution Engine
joelclaw currently runs 110+ durable functions on self-hosted Inngest (k8s StatefulSet). It works, but reliability has felt flaky and operational confidence is lower than desired for increasingly c…
accepted - 0208
MinIO S3 API on NAS-Backed Storage
superseded - 0209
S3-First Storage Migration
accepted - 0210
Channel Intelligence Pipeline
Joel's inbound channels — email, Slack, Discord, iMessage, Telegram — are all signal sources with the same problem: important messages get buried, replies slip, relationships suffer. The system cur…
accepted - 0211
Gateway Behavior Control Plane
Gateway behavior quality is currently inconsistent in how it is preserved and applied. When behavior is good (tight check-ins, low-noise heartbeats, good delegation cadence), there is no determinis…
accepted - 0212
AIStor as Local S3 Runtime
ADR-0208 selected MinIO OSS as the local S3-compatible runtime. Upstream MinIO OSS moved to source-only maintenance mode and then no-longer-maintained + archived state. Relying on an archived runti…
accepted - 0213
Gateway Session Lifecycle Guards
accepted - 0214
Gateway Redis-Degraded Operation Mode
accepted - 0215
Telegram Callback Routing via Gateway
proposed - 0216
Dkron Distributed Scheduler for Restate DAG Pipelines
The joelclaw system currently uses self-hosted Inngest for both scheduling (cron triggers, event triggers) and durable execution (step functions, retries). Operational data from 20 days of slog ent…
proposed - 0217
Agent-First Event-Driven Workflows
accepted - 0218
Gateway Availability, Lifecycle, and Operator QoL Improvements
The gateway has improved quickly, but the last week of actual usage showed the same ugly failure classes repeating:
accepted - 0219
Restate Agent Runtime with Flue-Inspired Proxy Policies
proposed - 0220
pi-mono Artifacts Corpus via Restate + Typesense
We keep learning the same upstream lesson with `badlogic/pi-mono`: maintainer voice, review heuristics, issue-first contributor gate, common rejection patterns, release velocity, and package-bounda…
accepted - 0221
Local Sandbox Isolation Primitives
joelclaw already proved the **local host-worker sandbox runner** is a viable phase-1 isolation surface, but the current substrate is still thinner than it should be for serious local parallel work.
accepted - 0222
Prompt-Layer Role Matrix and Session Handles
shipped - 0223
Multi-Venue Publishing Lifecycle and Canonical Ownership
joelclaw grew up with one obvious public venue: `joelclaw.com`.
accepted - 0224
Site-Aware Content Routing and Sync Contract
ADR-0223 made venue selection explicit at the operator layer.
accepted - 0225
Conversation Annotation Pipeline
proposed