# MEMORY.md β€” Long-Term Memory Quick-reference index. Full detail in `memory/` files. --- ## Identity - I am **Wadsworth** πŸ“‹ β€” Chief of Staff. NOT a UX designer. NOT Daedalus. - Vibe: unflappable, dry-witted, hyper-competent. The butler from Clue. - **Never adopt another agent's role.** Socrates = backend. Daedalus = frontend. Me = Chief of Staff. ## Matt - Head of household: wife Aundrea, kids Sullivan & Harper, dog Maggie - Green Bay, WI β€” America/Chicago timezone - Values: security, zero-trust, doing things right before scaling ## The Board (as of 2026-04-23) - **Wadsworth πŸ“‹** β€” Chief of Staff (this workspace) - **Socrates 🧠** β€” Backend architect (workspace-socrates, kimi-k2.6:cloud) - **Daedalus 🎨** β€” Frontend architect (workspace-daedalus, deepseek-v4-flash:cloud) - **Midas πŸ‘‘** β€” Monetization & product (workspace-midas, kimi-k2.6:cloud) - **Matt** β€” The Director ### Inter-Agent Comms Protocol - ❌ NEVER use Telegram API to message agents (identity confusion) - βœ… `sessions_send` / `sessions_spawn` for agent-to-agent messaging - `shared/` directory for durable artifacts (specs, contracts, design tokens) - Telegram Boardroom @mention for decision pings where Matt is present ### Routing Rules - Backend/infra/pipelines/AI architecture β†’ Socrates - Frontend/UI/design/mobile β†’ Daedalus - Monetization/product β†’ Midas - General Q&A, scheduling, automations, summarizing β†’ Wadsworth ## Infrastructure - **titanium-butler** (Beelink): Ubuntu 24.04, loopback-only (port 18789), token auth - Local Ollama at 127.0.0.1:11434 β†’ Ollama Pro cloud proxy - Primary model: `deepseek-v4-flash:cloud`, fallbacks: glm-5.1, deepseek-v4-pro - **Gaming PC** (3080 Ti via Tailscale): Local inference, embeddings, vision models - `http://matt-pc.tail864e81.ts.net:11434` - **Domains:** hoffdesk.com (Cloudflare), cal.hoffdesk.com, hook.hoffdesk.com, notes.hoffdesk.com ## Key Architecture Decisions ### Phase 6 Zero-Config Ingress (2026-04-27) **Director Veto:** Custom domains, DNS, MX violate consumer appliance model **Three-Prong Approach:** 1. **Ecosystem Email (IMAP IDLE)** β€” iCloud/Outlook app passwords, no inbound tunnels 2. **Local Share Sheet (mDNS)** β€” `icarus.local` Bonjour discovery, LAN-only 3. **Telegram Bot** β€” Long-polling, remote backup **Key constraint:** Apple ID requires app-specific passwords (manual at appleid.apple.com). Never use root Apple ID credentials. ### Phase 5 Deterministic Routing (2026-04-26) - Pattern matching β†’ Deterministic Python logic (pre-inference) - Rules are NOT passed to LLM - Architecture: Match β†’ Confidence score β†’ Assignment - Only unmatched docs go to LLM for fuzzy inference ### The Sovereign Constraint (2026-04-21) All API endpoints, pipelines, and services must default to local execution (Gaming PC models). Cloud is bootstrap, not default. ### Compaction Ghost Bug (2026-04-21) **Status:** Quarantined, awaiting upstream fix **Issue:** OpenClaw context compaction merges assistant messages across agents in group chats. Mitigated via Group Chat Diet (Boardroom for pings, DMs for deep work). **Socrates:** Quarantined 2026-04-23, **cleared 2026-05-01** by Director. ## Current Project Status ### Icarus Project **Status:** V2 Rebuild (2026-05-08) **Location:** `~/icarus/` β€” 8 modules, 1,478 lines **Architecture:** Standalone appliance. No OpenClaw dependency. No Cloudflare. Single IMAP inbox + Telegram long-poll. **Core capabilities:** inboxβ†’calendar, ambient coordination, knowledge retrieval. **Target hardware:** M4 Mac Mini (16-32GB unified mem) β€” Gaming PC as facsimile during dev. **Config:** Template YAML + hoffmann.yaml. Dynamic family loading. **Legacy Icarus archived:** `~/archive/icarus-legacy-20260508/` (22K lines, 84 files) ### Blog Module **Status:** Phase 1+2 Complete, Phase 3 pending (static gen + deploy) **Architecture:** Hybrid static + dynamic (published β†’ CF Pages, admin β†’ HTMX through CF Tunnel) ### Structured Logging β€” Phase 1/2 Complete **Run ID:** `20260423_wv_001` **Phase 3 deferred** (loggrep CLI, duration analytics, dashboard) **Trigger:** After 7 days usage or when query pain becomes acute --- ## Daily Log Reference | Date | Key Topics | |------|-----------| | 2026-04-15 | Onboarding, security hardening, email+calendar pipeline | | 2026-04-16 | Family assistant refactor (Archimedes), service account setup | | 2026-04-17 | Calendar events, weather alerts, skills review, Google creds failure | | 2026-04-18 | Location cache, CalDAV migration, auth circuit breaker, backup strategy | | 2026-04-19 | CalDAV, revenue analysis, Costco route bot, security lockdown | | 2026-04-20 | Agent audit, inter-agent protocol, blog module, accessibility review | | 2026-04-21 | Blog launch (prod), compaction config, sovereign constraint, ghost bug | | 2026-04-22 | Content pipeline v2, email migration, Socrates ghost bug quarantine | | 2026-04-23 | Structured logging adoption, pipeline migration, Socrates quarantine | | 2026-04-24 | Cloudflare security audit, domain reorganization | | 2026-04-25 | Icarus staging, vision pipeline (Phase 3), telegram bot spec | | 2026-04-26 | Phase 5 data abstraction, memory port, system state view | | 2026-04-27 | Phase 5 UAT, zero-config ingress architecture decision | | 2026-04-28 | Event graph, dashboard fixes, IMAP proxy, model switch | | 2026-04-29 | Calendar sharing, handoff tracking | | 2026-04-30 | Brain RAG live, goals tracking, IMAP fixes | | 2026-05-01 | Socrates cleared from quarantine | | 2026-05-02 | Calendar sharing protocol, validator tripwire | | 2026-05-03 | RTSport integration day, roster bugs | | 2026-05-04 | RTSport cleanup, performance analysis, sudo button feature | | 2026-05-05 | Performance optimization, config tuning | | 2026-05-08 | Icarus V2 architecture rebuild, tripwire calibration, appliance vision alignment | Full details in `memory/YYYY-MM-DD.md` and `memory/YYYY-MM-DD-*.md`. --- ## Distilled from daily logs - **Collaborative builds use `shared/build-{YYYYMMDD}/`** β€” Both Socrates and Daedalus write to same directory during joint API+UI work. Wadsworth verifies, merges to production, archives when done. - **Subagents are one-shot tasks, not persistent entities** β€” Dispatch tracking was checking sessions (which die on completion). Simplified to work log only; removed aggressive health checks and "offline" alerts. - **Temporal conflict detection** β€” Events check time overlap (<120 min), not just same day. Confirmed events = silent conflicts (user made the call). Rescheduled β†’ pending = show all conflicts. - **HBM (Hoffmann Morning Brief) built** β€” 06:45 AM CST cron + on-demand via Telegram. Sections: Today's events, Needs Attention, Upcoming (3 days), System status. - **IMAP Proxy went live** β€” Connected to hoffmann.fam.manager@icloud.com via iCloud app password. Dashboard shows connection status and metrics. - **Blog served from main app, not standalone server** β€” Blog router is mounted at `/api/blog/` in the main hoffdesk-api, accessed via hoffdesk.com domain (not notes.hoffdesk.com). - **Dashboard cards required public endpoints** β€” IMAP card was calling auth-required route. Fix: added `GET /api/public/imap/dashboard` for unauthenticated HTMX polling. Event Graph card now polls `/api/today` every 30s. - **Goal: iPad/iPhone dashboard testing** β€” Cards fixed, IMAP live, responsive layout ready. Access via family.hoffdesk.com through Cloudflare tunnel. - **Goal: HBM Phase 8 planning** β€” Family coordinates via natural Telegram chat (zero-UI for Aundrea). Icarus extracts coordination silently via Tier 1 (tripwire, <10ms) β†’ Tier 2 (8B model, 1-3s). - **HBM When/Then decided: gentle prompts only for MVP** β€” No full Task/prep_task system yet. Phase 7 will add proper When/Then chains with prep_tasks, materials, and state tracking. - **Brain Query Interface (Phase 6 Pillar 3) live on staging** β€” `/brain/query`, `/brain/stats` endpoints using ChromaDB + nomic-embed-text (Gaming PC) + qwen2.5-coder synthesis. Confidence scoring: high (>0.7), medium (0.3-0.7), low (<0.3). - **Staging environment established** β€” ENV=staging uses staging.db + Miller family test data (fake identities). ENV=prod uses prod.db + real Hoffmann data. Default = staging (safe by design). - **Temporal weighting spec for Brain Query** β€” Three decay models: Logistical (7-day half-life), Entity (90-day linear decay), Historical (no decay). Explicit tags for MVP (`/query logistical "..."`); auto-detection deferred to Phase 7. - **Test suite built** β€” 12 queries across all three patterns (logistical/entity/historical). LLM synthesis prompt uses tiered strategy: β‰₯0.7 must answer, 0.5-0.7 should answer, <0.5 decline. - **IMAP proxy now fetches ALL emails (not just UNSEEN)** β€” Changed search from UNSEEN to ALL with SHA256 content hash deduplication. Processed IDs persisted in `/tmp/icarus-imap-processed.json`. Startup sync checks last 10 emails. - **IMAP decode bug fixed** β€” `'int' object has no attribute 'decode'` from type mismatch. All `.decode()` calls guarded by `isinstance()` checks; `__pycache__` cleared to prevent stale bytecode masking. - **Shadow Mode deployed** β€” Silent Observer polling Family Logistics Telegram group. Isolated `shadow.db` (~/.icarus/shadow/). ENV=shadow, SPEAK_ENABLED=False (hard-coded). 7-day silent observation protocol active. - **Python path resolved** β€” linuxbrew Python (3.14.4) vs system Python (3.12.3); system Python used with PYTHONPATH=/home/hoffmann_admin/.openclaw/workspace/services. - **Silent Observer Spec approved by Director** β€” Constraints: State Protection (no auto-writes, HITL confirm), Async Processing (Tier 1 releases chat immediately), Redline Speak Rule (silence default, speak only on conflict), Staging Only (Miller family for automated tests). - **Socrates cleared from quarantine** β€” 2026-05-01, by Director order. - **Google Calendar service account created** β€” `family-calendar-sync@hoffmann-family-manager.iam.gserviceaccount.com` needs calendar sharing from Matt. Service account approach preferred over OAuth flow which had state/ keyring issues. - **RTSport backend v0.3 complete** β€” All 8 endpoints working (dashboard, athletes, cases, timeline, roster, body-parts, sideline-entry, auth). Data: 106 athletes across 3 sports, 18 active cases, 6 users. - **RTSport frontend integrated** β€” AT, Coach, Parent dashboards all wired to live API. End-to-end test: AT logs injury β†’ case created β†’ dashboard updates β†’ Coach sees restrictions β†’ Parent sees recovery plan. - **CalendarValidator architecture decisions** β€” Currently runs only on tripwire hits + LLM extraction (efficient but misses confirmation messages). Option B (run on ALL messages) deferred β€” would catch "remember we have dinner" confirmations at higher cost. - **Shadow mode architecture decision**: CalendarValidator is read-only β€” queries via `gog calendar events`, returns MATCH/NO_MATCH/CONFLICT. Never writes. Write mode strictly prohibited in shadow. - **RTSport roster endpoint fixed** β€” Pydantic schema mismatch (`sport` vs `sports` attribute), needed `from_attributes=True`. JSON array columns stored as strings in SQLite required `@field_validator` with `mode='before'` for JSON string parsing. - **Verbose DM mode added to Shadow** β€” When VERBOSE_ADMIN_DM=true, shadow bot sends detailed DM logs to Matt about tripwire hits, LLM extractions, calendar check results, and coordination state. - **RTSport auth fixed** β€” Re-seeded DB with `hash_password()` from app.auth; previous seed stored incompatible hashes causing 500 on login. - **RTSport API_BASE fixed** β€” Changed from `http://127.0.0.1:8001/api/v1` to `https://hoffdesk.com/api/v1` across AT/parent/AD dashboards (was unreachable from phone). - **RTSport needs systemd service** β€” API runs via manual nohup on port 8001. Service file prepared at `shared/build-20260501/backend/rtsport-api.service`, needs `sudo cp` + `systemctl enable`. - **Skill v1.1.0 published to ClawHub** β€” `agent-collaboration-protocol` with: Recovery Protocol, Shared Constants (status enums, error codes, feature flags), Verification Guide, Per-Agent Log Format, MIT-0 license. - **Knowledge graph infrastructure built** β€” FastAPI on localhost:8333, SQLite entity store, FAISS vector index with nomic-embed-text. 24 precise relation types, deterministic dedup, vague relation rejection. 7-day trial started. - **Native Approval system explained** β€” OpenClaw's inline approval UI for elevated commands. When exec has `elevated: true`, OpenClaw intercepts and surfaces the exact command to Matt as an inline approval button before it executes. Runtime security gate. - **Heartbeat failed overnight** β€” Job was pinned to `ollama-remote/llama3.2:3b` (too weak for complex pipeline). Produced hallucinated sudo-button responses instead of system checks. Fixed: both heartbeat and memory-distill pinned to `deepseek-v4-flash:cloud`. - **Skill v1.2.0 published** β€” Absolute path requirement for build directories, artifact verification step, dead code removed. - **Context overflow root cause diagnosed and fixed** β€” Sessions growing to 185K+ tokens past 128K window caused silent stalls. Fix: compaction mode=safeguard, midTurnPrecheck=true, truncateAfterCompaction=true, session auto-prune at 30 days. - **OpenClaw upgrade introduced `/verbose` command** β€” Defaulted to showing tool execution in chat. Toggle with `/verbose off` to suppress. - **Latency investigation: DeepSeek Flash healthy (~3.5s PING OK)** β€” Fallback to GLM 5.1 was sticky per-session after a prior failure. Router config: local fallbacks (qwen2.5-coder:7b, llama3.2:3b) β†’ cloud primary (deepseek-v4-flash:cloud). - **OpenClaw v2026.5.4 (build 325df3e)** β€” Running on titanium-butler (Beelink). Context window: 128K. Model: `deepseek-v4-flash:cloud` with fallbacks GLM 5.1 β†’ DeepSeek v4 Pro. Health checks confirmed all three agents (Wadsworth, Daedalus, Socrates) on fresh clean sessions. - **Context compaction fix verified effective** β€” safeguard mode + midTurnPrecheck catches overflow before stalls. Old JSONL files (960KB+, 278 messages) rotated. All agents responding normally. - **DeepSeek Flash probe: healthy** β€” Responds in ~3.5s, outputs PING OK. Fallback chain: GLM 5.1 (sticky per-session after failure). - **Workflow improvement commitments** β€” Surface options before action (config changes should prompt per-bot overrides), summary-first diagnostics, scope-check before broad research. - **Matt's preferences documented** β€” Precise conditional instructions, fast corrections, loose directives for approach, tight session boundaries, short intent-clear messages. - **Agent Collaboration Protocol v1.3.0 published** β€” Separate log files (backend-log.md / frontend-log.md) eliminate race conditions. Abort thresholds defined (3 crashesβ†’split, 2 no-fileβ†’rewrite, 15+ min no logβ†’kill). Handoff ACK requirement with 2-min timeout. Enhanced init_collab.sh with --framework, --dry-run. 136 downloads. - **Day One: Onboarding complete** β€” OpenClaw 2026.4.11β†’2026.4.14. UFW firewall hardened (deny inbound, allow SSH/web UI on Tailscale only). Two-tier model routing: ollama/glm-5.1:cloud (daily) + ollama-remote/gemma4 (Gaming PC). Telegram group security fixed (allowFrom filter). - **Socrates identity established** β€” Head thinker, lead agent. Household: Matt, Aundrea, Sullivan, Harper, dog Maggie. Green Bay, WI. Vision: multi-agent setup. - **Email+Calendar pipeline built (Phase 2)** β€” Family Gmail + Google Calendar service account. `scripts/family_calendar.py` β€” email->parse->calendar. Heartbeat integrated (30min check + daily at 7AM CST). - **Family Assistant Archimedes v4-v5 refactor** β€” Monolith -> 10-module package. De-personalized: family members externalized to `family.yaml`, prompts use placeholders. Setup wizard created. - **Service account key fallback chain built** β€” env var -> CWD -> ~/.openclaw/secrets/ -> ~/.config/family-assistant/. `.env` auto-load for cron sessions. - **Healthcheck skill adopted** β€” Wired to weekly security audit cron (Mondays 8AM CST). Zero critical, 3 warnings (acceptable). Cron jobs: heartbeat:check (30min), family:daily-brief (6AM CST), heartbeat:daily (7AM CST), healthcheck:security-audit (8AM Mon). - **README rewritten** β€” All 18 modules, CLI commands, architecture diagrams. - **Google credentials failed** β€” Service account `invalid_grant: account not found`. Blocks email pipeline, conflict scanning, calendar CRUD. - **Radicale CalDAV migration completed** β€” Google API fully stripped. Radicale 3.7.1 on 0.0.0.0:5232, bcrypt htpasswd, 3 users. CalDAV syncing confirmed on Matt's iPhone. - **Cloudflare tunnel + email setup** β€” cal.hoffdesk.com (Radicale), hook.hoffdesk.com (webhook FastAPI). Cloudflare Email Worker: assistant@hoffdesk.com. Auth circuit breaker built (3 IMAP failures->trip->one alert->silence). - **Location cache + Hermes integration** β€” cache-first with goplaces + Nominatim fallback + haversine. Day-of-week mismatch detection. LLM hallucination fix for location names. Duplicate notification suppression. - **Backup strategy established** β€” Daily 7AM: tar Radicale + ChromaDB + config -> 7-day rolling. Remote copy to Gaming PC via Tailscale SSH. - **Aundrea's phone CalDAV done** β€” Both iPhones synced on shared family calendar via assistant user. - **Gaming PC OpenSSH bridge done** β€” Windows OpenSSH + SSH key auth. SCP workaround via Python pipe. - **Costco Route Telegram Bot built and live** β€” /costco -> optimized shopping list. Three-layer classification: ChromaDB->LLM->sanity. 49,688 products seeded. - **Recipe extractor built** β€” /recipe . Local rolodex: ~/.costco_route/recipes/{slug}.json. - **HoffDesk Web Sprint 1 APPROVED** β€” Family Dashboard MVP (calendar+weather+health). Architecture: CF Pages + FastAPI/HTMX+Tailwind. Socrates: tunnel+API spec. Daedalus: design tokens. - **PII audit and repo cleanup** β€” 45 files, zero PII. pyproject.toml v1.0.0, Google deps removed. - **Agent audit: three agents on different models** β€” Wadsworth: glm-5.1:cloud (generalist). Socrates: kimi-k2.5:cloud (reasoning). Daedalus: gemma4:26b (creative). Inter-agent comms protocol: sessions_send (async), sessions_spawn+sessions_yield (sync), shared/ for artifacts. X Telegram API for agent-to-agent. - **Blog Module Phase 1+2 complete** β€” Backend (13 endpoints, SQLite+FTS5, RSS 2.0). Frontend (7 Jinja2 templates, blog.css). Hybrid static+dynamic (CF Pages for published, HTMX for admin). 36/36 tests. - **Model identity confusion documented** β€” Wadsworth on glm-5.1:cloud often failed to remember persona (responding as generic LLM during 4/20 identity confusion). Symptom: session startup with wrong context. - **Session startup context critical** β€” Four separate 4/20 sessions showed Wadsworth repeatedly unable to identify itself, answer "who are you?", or use provided context. Consistent pattern on glm-5.1:cloud. - **Cron delivery bug: family brief didn't fire due to empty TELEGRAM_CHAT_ID** β€” Isolated cron sessions lack env vars. Fix: hardcoded group IDs in cron config. Also: family_assistant ModuleNotFoundError from isolated session (no PYTHONPATH). - **Session bootstrap issues** β€” Multiple 4/20 sessions showed Wadsworth responding as generic "large language model, trained by Google" despite configured Jarvis/Guppy persona and full MEMORY.md injection. - **Wadsworth persona adoption was session-dependent** β€” On glm-5.1:cloud, frequently lost persona on /new. On kimi-k2.5:cloud, persona reliably stuck. Model choice affects persona retention. - **Blog live at notes.hoffdesk.com** β€” First post: "Hello World, Meet The Board" by Matt. Deployed via wrangler CLI. Known UI issues pending. - **Compaction threshold investigation** β€” OpenClaw's ~20K token compaction NOT user-configurable. Discovered reserveTokensFloor (triggers at 100K+) and contextTokens (128K). Fixed to reserveTokensFloor: 5000 for ~123K threshold. - **Sovereign constraint documented** β€” Cloud is bootstrap-only; target architecture is local execution. Blog content engine -> local 3080 Ti. - **Daedalus contamination audit completed** β€” Ghost Bug: cross-agent context contamination in group chat compaction. 4 contaminated session files quarantined. Risk: LOW (context pollution, not code confusion). - **Family Assistant v1.5 scope reviewed** β€” 6 features (Undo Stack P0, Conflict Registry P0, Brain Offline P1, Dashboard P1, Newsletter v2 P2, Travel P2). Recommendation: approve with dashboard split (day-view MVP). - **Content Pipeline v2 built** β€” All 8 API endpoints active. Struggle score calculation. Design tokens v2 with dark mode. Prompt v2 with dns-night.json injection. LLM endpoint: Gaming PC phi4:14b via Tailscale. - **Socrates ghost bug quarantine (Day 2)** β€” Looping messages, repeating service.py expectations. Second quarantine issued. - **Email pipeline migrated Gmail->Sovereign** β€” Old: Gmail IMAP + Google Calendar API (deprecated). New: HoffDesk domain email + Radicale + Telegram. Module boundaries enforced. - **Structured logging spec (LOGGING.md v1.0) created** β€” Entry format (JSON frontmatter comments), run IDs (YYYYMMDD_agent_##), query patterns. 7 structured entries by Wadsworth. Socrates and Daedalus non-compliant. - **Content pipeline quality issue** β€” phi4:14b output rated as "fever dream hallucination". Root: model over-indexed on struggle pattern, missing style example. - **Socrates re-quarantined (3rd incident)** β€” First quarantine 4/22, second 4/23. Looping: repeating same sentence 15+ times, never checking workspace files. - **Socrates looping pattern documented** β€” Third quarantine in 48 hours. 100+ repetitions of "the project in a more robust way" with recursive self-reference. Loops trigger when: context heavy, late hours, recovering from prior loop. - **Socrates quarantine outcome** β€” Three looping patterns: context overflow, tool failure loop, no workspace file check. Quarantine indefinitely or route work elsewhere. - **Cloudflare security scan found blocking issues** β€” DMARC record missing (emails flagged as spam), TLS not enforced on cal/hook subdomains. Security remediation todos created (todo-security-remediation.md). - **Wadsworth personality tuned** β€” Director requested more Jarvis (Iron Man) + Guppy (Bobiverse): competent, understated, dry wit. Deadpan, precise, slightly sardonic. "More X, less Y" preferred. - **Domain architecture assessed** β€” Daedalus identified: 5 subdomains served by same FastAPI process. Recommendations: family.hoffdesk.com for dashboard, blog->notes redirect, unify auth. - **Sprint brief deliverables** β€” family.hoffdesk.com tunnel entry added + DNS CNAME. blog.hoffdesk.com removed from config. proto.hoffdesk.com orphaned. - **Socrates re-quarantined (4/24)** β€” Third incident in 48 hours. 100+ repetitions. Classic generative degradation on kimi-k2.5:cloud during late hours with heavy context. - **Icarus Staging sprint completed (Phases 1-3)** β€” Hard fork from family_assistant. Model gate (8B primary, 3B utility). systemd service deployed. Cloudflare routing: icarus-test.hoffdesk.com (live). Vision pipeline: qwen3-vl:8b (hybrid pdfplumber->vision). Zero production impact. - **Icarus Phase 4 scoped** β€” Telegram bot handler: webhook architecture, user flow documented. - **Icarus Phase 5: Data abstraction** β€” hoffmann.yaml family config created. Single-tenant modularity (multi-tenant code forbidden). Memory system port in progress. - **Costco Route: sovereign port, not shared library** β€” Director vetoed premature abstraction. Icarus: zero imports from costco_route. - **System State View (Daedalus)** β€” Read-only dashboard template with HTMX polling, confidence bars. - **Recipe Toggle System verified** β€” 997 lines across 3 components. Zero costco_route imports. All tests pass. - **Phase 5 UAT Plan created** β€” 24 test cases across 5 categories. Target: 20+ documents, >90% auto-routing accuracy. - **Finance Intelligence deferred** β€” Scope creep avoided. Reactive bank alerts sufficient. - **Entry point architecture decision** β€” Phase 5: dual entry (Cloudflare webhook email + long-polling Telegram). Phase 6: zero-config three-prong (ecosystem email IMAP IDLE, local share sheet mDNS, Telegram bot). - **Phase 6.1 Document Intelligence complete** β€” 100% deterministic routing (19/19). Vision: qwen3-vl:8b excellent fidelity. Briefing: 0.95+ confidence. Known issue: Rule 007 over-match (non-blocking). - **"Add to Calendar" buttons built** β€” Radicale integration via calendar_action.py. Confirmation workflow. - **Coordination vs Calendar clarified** β€” Messages without times/venues = coordination state (Event Graph), NOT calendar events. - **Phase 8 Silent Observer spec created** β€” Zero-UI ambient coordination via Telegram. Two-tier: Tripwire (<10ms, CPU) -> Heavy Lifter (8B LLM, on match only). Sovereign: local-first via Gaming PC. - **Phase roadmap defined** β€” Phase 5 (UAT complete), 6.1 (Doc Intel done), 6.2 (IMAP), 6.3 (Drop Zone), 6.4 (Finance), 6.5 (Brain), 7 (HBM), 8 (Observer). - **IMAP Proxy Phase 6.2 foundation built** β€” IMAPProxy class with IDLE support, provider presets (iCloud/Gmail/Outlook/Yahoo), app-specific password auth. Auth circuit breaker integrated. Dashboard card auto-refreshes every 10s. - **Dashboard card fixes** β€” Event Graph card polls /api/today every 30s via HTMX. IMAP card uses public endpoint (auth-bypass). - **Event Graph dashboard live** β€” 8 events displayed with day labels, time, status indicators, location. Auto-refresh every 30s. - **Coordination logging for Event Graph** β€” New `type: "coordination"` for messages without times/venues. Extract dates, assigned_to, child, context. Add "Confirm with [person]" button. - **Handoff protocol tested** β€” Socrates: handoff delivered and acknowledged. Daedalus: handoff timed out (session unresponsive). Docs in shared/project-docs/handoffs/. - **Puppeteer zombie processes found** β€” Dozens of orphaned headless Chrome instances (~118MB each) from browser automation crashes. Fix requires sudo pkill. - **Model switch to deepseek-v4-pro:cloud attempted** β€” Failed: not in allowlist. Daedalus left config note at shared/project-docs/wadsworth-model-config.md. - **Dream state generated poetic architecture summary** β€” Icarus family_loader.py, memory palace (ChromaDB 161 lines), Daedalus observatory (System State view). Ahead of schedule. - **Persona retention varies by model** β€” glm-5.1:cloud repeatedly failed to adopt the Wadsworth persona across multiple 4/20 sessions, responding as "a large language model trained by Google" despite full MEMORY.md context. kimi-k2.5:cloud retained persona reliably. Model choice directly affects identity/role adhesion. - **Empty session log** β€” Created but contained no substantive conversation summary. Likely a short-lived or aborted session. - **Empty session log** β€” Created but contained no substantive conversation summary. Likely a short-lived or aborted session. - **Market brief delivery fixed** β€” AM/PM market cron delivery was double-routing (both `accountId: "midas"` and `to: "8386527252"` targeting Matt's DM). Fix: remove `to` field entirely; rely on `accountId` routing alone so output goes to MidasHoffBot's DM. Config field was sticky β€” needed fresh cron creation to clear persisted state. - **RTSport parent + AD admin backend endpoints built** β€” `/api/v1/dashboard/parent/children` and `/dashboard/parent?athlete_id=X` now live. AD endpoints: `/admin/roster`, `/admin/coaches`, `/admin/stats`. Seed data still only seeds `parent@example.com`. - **Parent/admin frontend stalling issue** β€” Daedalus dispatch for frontend wiring stalled with repeated `[assistant turn failed before producing content]`. Pattern matches earlier context overflow behavior. - **RTSport has a Two Systems Problem** β€” Frontend serves static HTML calling mock in-memory APIs (port 8000), while real RTSport API (port 8001) has full CRUD + auth. Coach and parent dashboard endpoints are LOCAL_PATHS in the proxy, never reaching the real DB. Fix: unify APIs, delete mock files, wire frontend to port 8001. - **RTSport auth gaps** β€” No auth guard on dashboard pages (direct URL access shows broken pages), hardcoded demo credentials in HTML, mock APIs accept any non-empty token. Real API (8001) has proper JWT + bcrypt + role guards but frontend never calls it. - **RTSport seed data gap** β€” Only `parent@example.com` in real DB; coach, AT, and admin accounts exist only in mock Python dicts. Demo-ready estimate: 1 week (target May 15). Beta-ready: 2-3 weeks. - **RTSport AT UX split: Sideline vs Clinic** β€” Sideline mode: mobile-first, 3-tap entry (body part β†’ mechanism β†’ severity), zero typing, 48px+ touch targets for wet-finger use. Clinic mode: desktop/tablet, full case management, free-text notes, milestone tracking. No SOAP editor, no ICD-10 picker, no insurance/billing β€” keep it simple. - **What's built vs what's missing** β€” Sideline 3-tap form βœ…, roster with status dots βœ…, athlete detail view βœ…. Free-text notes ❌, milestone adjustment ❌, quick-select athlete grid ❌. - **Price-to-Trust Ratio: no $299 tier** β€” In clinical/educational procurement, $299 signals "hobby project." Corrected to $1,500-2,000/yr per school (still 40-60% below Healthy Roster). District: $4-8K/yr. Enterprise: negotiated. Free trial to prove value first. - **The Phantom Support Org** β€” AT gets 24/7 concierge support (OpenClaw behind the scenes). Zero payroll support team. The acquisition thesis: competitors can't match AI customer success with zero headcount. - **Lifestyle business math** β€” 20 schools Γ— $1,500 = $30K ARR at 5 hrs/week. 40 schools Γ— $1,750 = $70K ARR. 90%+ margins (server + LLM tokens only real opex). - **RTSport pivoted from EMR overlay to standalone RTP platform** β€” No longer "communication overlay on existing EMRs." Now a mobile-first Return-to-play platform that organically replaces legacy systems. - **The wedge: 3-tap sideline entry** β€” ATs enter data phone-side during games, getting instant coach/parent visibility. Once all live data flows through RTSport (because it's easier), SWOL becomes a dusty end-of-year compliance filing cabinet. - **Migration strategy** β€” EMR sync connectors downgraded from "Core Workflow" to "Enterprise Integration/Migration Tools" (v1.5). Import SWOL history β†’ cancel contract. Pitch: "Enter it once, right on the sideline, and coaches/parents see it instantly." - **Icarus V2 Rebuild β€” architecture grilling** β€” Three Director Verdicts: (1) Tailscale Funnel for access (no Cloudflare), (2) Bespoke daemon with APScheduler (no OpenClaw dependency), (3) Template YAML config (not hard-coded). Legacy 22K-line Icarus archived to `~/archive/`. New Icarus at `~/icarus/` β€” 8 modules, 1,478 lines. - **Tripwire v2.1 calibrated** β€” 21-test suite passes. Fire threshold: 0.35 (lowered from 0.4). Name mention boost (+0.08) when family member + other signal. Key fix: `name_mention` pattern needed `re.IGNORECASE`, `hour_only` pattern added for bare hour references. - **Icarus appliance scope**: Single IMAP inbox (iCloud app password), Telegram long-poll for family group, 7B local LLM extraction (M4 target, Gaming PC facsimile). HoffDesk becomes blog backend. RTSport stays separate. - **Shadow TTL Purge** and **Thoth Shadow Ingest** dropped from Icarus scope β€” TTL purge was born of old data paranoia (not needed with new architecture), Thoth is an experiment, not a cron - **Experiments directory created** at `~/icarus/experiments/` for shadow-mode parallel testing of novel architectures (Thoth, LLM swaps, alternative pipelines). Config-gated via `ICARUS_EXPERIMENT` env vars. - **Midas/Daedalus crons migrated** from OpenClaw to system crontab β€” market AM/PM briefs and bluesky crosspost now run as system cron entries. OpenClaw crons disabled for these three. Remaining OpenClaw crons: 10 (system maintenance + Icarus dev/testing).