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 under2>&1to 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/healthzevery 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; taskclaude-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),-PrebuiltExefleet 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) withSystem.Net.HttpListenerand runclaude-mem-client-setup.ps1against 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
-DryRunflag) forclaude-mem-standby-setup.ps1so its happy path becomes testable without a real Docker daemon.