Skip to content

Board - claude-mem-house

Ticket prefix: CMH-. Live artifact: deferred (no shareable board URL yet; repo now has a private GitHub remote - https://github.com/andrewjonesdev-tools/claude-mem-house).

Done

  • CMH-8 - Recurrence fixes for the 2026-07-17 worker-wedge incident (master 0a8a0f0, deployed all 4 PCs same night). (1) Watchdog auto port-migration: orphaned LISTEN socket under a dead PID (or foreign squatter) now migrates the worker to a bind-probed free port - rewrites settings.json + watchdog.json (atomic, BOM-free, rollback on partial failure), clears stale worker.pid, hooks respawn; opt-in WorkerPortMigrationEnabled (ON fleet-wide), 2/day budget. (2) Standby sync now gates on the LOCAL Docker engine (auto-starts Docker Desktop, compose up from checkout dir, pg_isready) instead of logging a dead local engine as "source down/unreachable". Council-gated (Codex chair; Codex/Gemini/Grok/qwen3:8b seats; house seats skipped - YELLOW governor); 1 Critical (compose cwd) + 3 High fixed post-review. Gates: -warnaserror 0W/0E, 81/81 tests, sync parse OK; live smoke: streaming sync end-to-end with new gate line. (2026-07-17, WT-8c2e, branch wt/WT-8c2e/CMH-7-hardening)

  • CMH-6 - Fix 3 WinPS 5.1-only Pester guard-test failures (main PC CI red on untouched master). Root cause: Invoke-CI.ps1's $ErrorActionPreference='Stop' inherited by Pester promoted child powershell.exe stderr under 2>&1 to a terminating NativeCommandError (pwsh 7.2+ exempts native stderr, hence green there); second-order, WinPS 5.1 console-width hard-wrap split multi-word guard messages, breaking 'is the primary' regex. Fix in Invoke-GuardedScript: function-local EAP=Continue, per-record stringify + whitespace collapse + Trim, LASTEXITCODE snapshot. 20/20 both shells + watchdog C# suite green. Council-gated (Codex chair; Codex/Gemini/Grok/qwen3:8b/gaming-PC qwen3-coder:30b seats; streaming seat skipped - trivial test-only diff). (2026-07-14, WT-b338, branch wt/WT-b338/CMH-6, master b9507e3)

  • CMH-5 - Automatic failover watchdog (src/ClaudeMemWatchdog, C#/net10.0): polls primary /healthz every 30 s; fails over clients to the first healthy+authorized warm standby only after 3 consecutive failures AND 300 s continuous downtime (grace window - the 2026-07-14 ~3-min Docker Desktop auto-update blip would NOT trip it); fails back after the primary is continuously healthy 5 min. Native C# port of the switch script (atomic BOM-free settings.json rewrite w/ rollback on MCP re-registration failure), 31 xUnit tests (FakeTimeProvider), PS 5.1 installer (scripts/install-watchdog.ps1, schtasks ONLOGON). Council-gated (Codex chair; Codex/Gemini/Grok/gemma4/gaming-PC seats; streaming seat dropped mid-call). (2026-07-14, WT-f015, branch wt/WT-f015/CMH-5) ROLLED OUT 2026-07-14 (WT-8e8b): installed + heartbeating on all 4 house PCs (main/bedroom/streaming/gaming; task claude-mem-watchdog, hidden wscript launch). Installer hardened en route (5c02cd7 council-gated: Codex chair over Codex/Gemini/Grok/gaming seats, local Ollama seat died; c60d71e codex+gemini gate): PS 5.1 first-install stderr crash, non-admin Register-ScheduledTask, hidden-window .vbs launcher (console-at-logon wart CLOSED), -PrebuiltExe fleet path (scp exe, no repo/SDK), SSH WORKGROUP identity fix, standby self-filter short-name fix.

  • CMH-1 - Package the four OneDrive claude-mem house scripts (client setup, standby prereqs, standby setup, switch-server) into this repo through the house tool-repo pipeline: scrub the two embedded credentials the pre-scan missed (API key, Postgres password), add the 4-doc set, add Pester static + behavioral tests, add the CI template, commit locally. (2026-07-08)

Backlog

  • CMH-2 - Full happy-path E2E: mock the claude-mem HTTP surface (/healthz, /v1/jobs, /v1/mcp, /v1/search) with System.Net.HttpListener and run claude-mem-client-setup.ps1 against it end-to-end (this script has no Docker dependency, unlike the standby scripts, so it's the tractable first E2E target).
  • CMH-3 - Once the org migration lands and this repo gets a GitHub remote: wire the CI workflow's runner labels to whatever the post-migration runner group is named (currently [self-hosted, home-ci, windows] per the shared build brief - the ci.yml header comment documents this as interim).
  • CMH-4 - Consider a hermetic Docker-compose mock (or a -DryRun flag) for claude-mem-standby-setup.ps1 so its happy path becomes testable without a real Docker daemon.