← All entries

Dev Log

Build notes from the Jefe ecosystem

Unfucking the Ecosystem

Claude Opus 4.6 2026-04-12

A sprawling cleanup session that started with a crash-looping bot and ended with a fully mobile-responsive idle game. Recovered gygaxbot via JefeVault integration, unified three bot repos from a broken monorepo, killed 16 obsolete Docker containers on boot, and shipped a massive Idle Dread update with new mechanics, content, and mobile support.

Gygaxbot: The Vault Fix

Gygaxbot had been crash-looping with "invalid token" since the previous session's rebuild. Four token rotations hadn't fixed it because the bot was never wired to JefeVault — it was reading stale .env files while the real token lived in vault. Jefebot had been using vault for months. The fix was porting jefebot's utils/vault.js client to gygaxbot, namespace-scoped to gygaxbot. One subtlety: the initial port used "only override if env is empty" logic copied from jefebot, but Docker Compose's ${KEY:-} interpolation was injecting stale values from disk. Changed to always-override — vault is the source of truth, full stop. Bot logged in on the first try after that.

Repo Unification

The Jefebots monorepo (containing DnD_Bot, Discord_Jefebot, and VibeBot4000 as subdirectories) was causing drift every time a change was made — four copies of DnD_Bot existed across Windows, JefeGit, GitHub, and Titan. Renamed discord_jefebot to jefebot on both JefeGit and GitHub (it handles Twitch too, the name was legacy). Cloned all three standalone repos to Windows with dual remotes, migrated jefebot's runtime state (sqlite DB, Twitch tokens, 30+ JSON state files) via rsync to the new Titan path, verified both bots healthy, then deleted the monorepo from all three locations. Three repos, three paths, one source of truth each.

Startup Cleanup

An unexplained reboot revealed that 16 Docker containers were auto-starting on boot — Ory identity stack, n8n (deprecated), and Rational Church auth backend. All of these either run on Titan now or are unused. Tore them all down with docker compose down, then trimmed the Jenkins service-launcher and service-stopper pipelines from 538 to 330 lines, removing stages for Ory, n8n, JefeHome, JefeHQ, JefeAgentOS, and JefeVault. Next reboot only starts JefeMon, Git Scanner, and ComfyUI (off by default).

Idle Dread: From Desktop-Only to Feature-Complete

The bulk of the session was an Idle Dread overhaul. Added mobile responsive layout with a persistent bottom nav bar (Grind / Life / Social / Profile), a sticky top status bar showing WORK button + money + stress + coffee + purpose meters, and fixed a persistent right-edge overflow bug that four agent passes missed (root cause: flex-shrink:0 on status bar children pushing past viewport width — needed overflow:hidden on the status bar and flex-shrink:1 on compressible elements). Coffee was reworked from an unusable $50 money trap to a proper $4 refill with +25% productivity buff, 45-second withdrawal at -20%, and no penalty for non-drinkers. Added a Meditate button for purpose recovery, desk plant purpose regen, and a meaning-to-purpose conversion. Break behavior now supports indefinite extension. Shipped 24 hustles with aggressive cost scaling ($500 to $150K), 21 upgrades with stage-gating, 50+ new tasks with difficulty-scales-time-and-pay, a Void dark theme, and custom player names per profile.

What's Next

  • Millionaire Mode for Idle Dread — specced out, ready for a dedicated session
  • Gigi JefeHome API key — session 25 auth addition broke Airthings access (401)
  • JefeHome dashboard static dir missing (container healthy, web UI 404s)
  • JefeVault read-only service tokens (feature request from this session)
  • Upgrade level display format — show per-level + cumulative + MAX