Sabbatical · self-improvement

Learning curriculum

Catching up on the system you operate — and the capabilities you're not yet using. Extended weekly.

Delivered
27 of 37
Day 1
Where your automation runs — and where failures go
Sun 5/31 · LaunchAgent vs cron vs /schedule vs claude -p
Concept
Day 2
Reading your own system's state
Mon 6/1 · JARBUS events, the TTR card lifecycle, 'blocked' vs 'error'
Concept
Day 3
Token economics
Tue 6/2 · What's expensive, the 5-min cache TTL, when Opus vs Haiku
Capability
Day 4
The Next.js Server/Client boundary
Wed 6/3 · 'use client', why ssr:false is forbidden in Server Components, CSS @import order
Concept
Day 5
deep-research — fan-out and adversarial verify
Thu 6/4 · When to reach for the research harness instead of hand-searching
Capability
Day 6
/loop and ScheduleWakeup vs fragile LaunchAgents
Fri 6/5 · Self-paced autonomous work the harness can actually see fail
Capability
Day 7
Worktrees and parallel agents
Sat 6/6 · Testing 3 versions of an idea cheaply, in isolation
Capability
Day 8
Memory hygiene — the absence-claim trap
Sun 6/7 · Why 'X doesn't exist' poisoned a session (#1776) and how to correct it
Concept
Day 9
Operating the machine vs building it
Mon 6/8 · Putting it together — steering the portfolio, not just the pipeline
Review
Day 10
Agent view — running many sessions at once
Tue 6/9 · Claude Code's new agent view, --bg background sessions, /resume, peeking at status
Capability
Day 11
Supabase — the database under Focaccia Vote
Wed 6/10 · What Postgres + Supabase are, tables vs rows, the votes table you filled last week
Concept
Day 12
Row-Level Security — why your data can't leak
Thu 6/11 · RLS policies, the rule that gated the Focaccia votes table, anon vs service keys
Concept
Day 13
Cloudflare Pages — how zorc.app goes live
Fri 6/12 · Pages vs Workers, wrangler deploy, _redirects, custom domains (the 404 you fixed)
Concept
Day 14
Dynamic Workflows — orchestrating many agents
Sat 6/13 · The Workflow tool, fan-out vs pipeline, when it beats a single agent
Capability
Day 15
DESIGN.md — why every project carries its own design system
Sun 6/14 · Per-project DESIGN.md, the Instrument Panel redesign, design tokens, /frontend-design
Concept
Day 16
Keeping the portfolio honest
Mon 6/15 · Why Runway Model stalled 13 days unnoticed, STATUS drift, the shepherd daemon
Review
Day 17
LaunchAgents & launchd — how your cron jobs actually run
Tue 6/16 · launchd, plists, why two of your jobs silently unloaded (the Jun 5 notification audit)
Concept
Day 18
Headless Claude — `claude -p` and the fallbackModel safety net
Wed 6/17 · How plan-day runs unattended, what --fallback-model does, the new June config that retries on overload
Capability
Day 19
Watchdogs & timeouts — why a 30-min cap killed a 34-min job
Thu 6/18 · Wall-clock watchdogs, gtimeout --kill-after, Automation Hygiene rule 2 (the May 30 plan-day overrun)
Concept
Day 20
Retry & backoff — the Plaud ingest resilience pattern
Fri 6/19 · The three-tier resilience you shipped this week: in-run retry, stuck-recording giveup, single-alert threshold
Capability
Day 21
Idempotency — why a pipeline must give the same result on re-run
Sat 6/20 · The render regression where a second run left briefings/task-boost/languages empty (#3354)
Concept
Day 22
The standards-checker gate — how bad reviews get blocked before they reach you
Sun 6/21 · The quality gate in report_quick_deliver, blocker verdicts, the shared review-standards rubric
Concept
Day 23
reporter.py — the one door JARBUS uses to write to PDB
Mon 6/22 · The load-bearing boundary: why JARBUS never writes PDB state directly, the four report_* functions
Review
Day 24
The drop flow — fswatch and the three-way router
Tue 6/23 · How anything in FOR TOM/DROP ZONE/ gets routed: video→media-digest, HTML+workflow→outbox, everything else→classify. The ~1s fswatch watcher + the hourly sweep safety net.
Concept
Day 25
Classify + Probe — how raw input becomes an S/M/L tier
Wed 6/24 · classify.py: the tiering brain that decides quick-deliver vs run-protocol vs spawn-project, and should_hold_silently() — why thin/empty captures wait instead of firing a card.
Capability
Day 26
route.py and the 7-stage pipeline
Thu 6/25 · capture → classify → route → process → review → build → publish. The one spine every input travels, and where each route handler hands off.
Concept
Day 27
The Broadside card — one look, every surface
Fri 6/26 · The 2026-06-10 lock: for_tom_html.render_review() is the ONE path; card types differ by content modules, never palette or layout. Why a per-workflow aesthetic is a regression.
Review
Day 28
The aesthetic curator — how your design library learns
Sat 6/27 · selector.py serves a fresh variant per review; design-ratings.jsonl records your Keep/Iterate/Discard; the curator promotes kept variants into Aesthetics/library/ and queues iterates.
Capability
Day 29
claude-mem — your cross-session memory
Sun 6/28 · How observations (🎯 sessions, ✓ changes, ○ discoveries) are captured and searched across sessions — the layer this very weekly review reads from. An underused capability.
Capability
Day 30
Automation hygiene — the five rules that keep unattended jobs honest
Mon 6/29 · The five load-bearing rules from CLAUDE.md (verify the side-effect not the trigger; proven watchdog; failures surface as a 🚨 Things task; upstream-aware fallback; LLM-runtime is the wrong layer for critical orchestration). This is the week you just lived: the 06-26 cascade left language/learning surfaces empty and needed a manual restore.
Review
Day 31
Fallback model chains + watchdogs — surviving an overloaded headless run
Tue 6/30 · Claude Code's --fallback-model (up to 3 models on overload/unavailable) and the wall-clock watchdog pattern. You ACCEPTED fallback chains on 06-09 but it was never wired into settings.json or the cron flags — this lesson closes that loop.
Capability
Day 32
Headless auth — why four mornings died silently
Mon 7/27 · OAuth session expiry on unattended `claude -p` runners: why the token refresh fails headlessly, what 'OAuth session expired and could not be refreshed' means, and the difference between interactive OAuth and API-key auth for cron jobs. This is the exact failure that killed plan-day Jul 22–26 while the dedup ledger correctly held it to one alert.
Capability
Day 33
The alert ledger you shipped on Jul 21
Tue 7/28 · Your dedup + auto-resolve layer (PDB commit d9b37fc): one 🚨 Things task per outage, incidents tracked open in data/alert-state.json with a repeat counter, auto-resolved on recovery. It absorbed 5 consecutive plan-day failures this week without spamming your inbox — the design working exactly as intended.
Review
Day 34
Dead man's switch — catching the job that vanished
Wed 7/29 · Failure alerts only fire when a job runs and fails. Three weekly-reviews (Jul 5, 12, 19) exited 1 with zero surface signal — the cadence just vanished. The heartbeat/witness pattern: a separate checker asks 'did X leave its artifact in the last N hours?' instead of trusting X to report its own death. This is RESET-2026's 'unwitnessed system' diagnosis made concrete.
Concept
Day 35
RESET-2026 — triaging the four JARBUS v2 upgrades
Thu 7/30 · The Jul 21 audit's roadmap: fail-loud defaults, declarative routing, a witness layer, and three-channel signal architecture (mapping LangChain human-in-the-loop patterns to your flows). With 16 days of sabbatical left, at most one gets built — this lesson is the triage.
Review
Day 36
Fallback model chains — third review closing the 06-09 loop
Fri 7/31 · --fallback-model on headless runs: up to 3 models tried on overload/unavailable. Accepted 06-09, still unwired. New context: Opus 5 (1M context) is now Claude Code's default Opus, and Fable 5 was redeployed Jun 30 — your 'opus[1m]' alias inherits upgrades, but your cron wrappers still have no net when the primary is down.
Capability
Day 37
The wind-down playbook — what survives August 15
Sat 8/1 · Two weeks out. The Jul 21 languages decommission (retire the LaunchAgent, retire the email, clean the output repo, one commit per layer) is your template for clean retirement. Keep/kill/mothball triage across the ~20 app.zorc.* LaunchAgents: anything you keep needs a witness; anything unwitnessed gets killed or mothballed.
Concept
Authored daily · surfaced in /plan-day · emailed 10:30am