# 2026-06-01 — Memory store consolidation + resource map ## User - **User:** Mike Swanson (mike) - **Machine:** GURU-BEAST-ROG - **Role:** admin ## Session Summary Multi-hour session focused entirely on the `.claude/memory/` store. Started by running the freshly-pulled `memory-dream` skill in report mode, which surfaced 17 orphan files, 12 broken backlinks, 12 overlap clusters, and 2 profile-only memories drifting outside the repo store. Ran `--apply-safe` to take the additive wins (orphan index lines appended; the two profile-only memories migrated into the repo). The bulk of the session was four sequential consolidation passes against the cluster proposals. **First**, the 19-file Syncro cluster collapsed into three terse topical rule files (`feedback_syncro_api.md`, `_billing.md`, `_workflow.md`) plus a separate on-demand `feedback_syncro_history.md` archive for incident detail, Mike/Howard/Winter quotes, ticket numbers, and the tech/product ID tables. Halfway through, Mike pointed out that the original rule files still carried too much narrative — the rule-vs-history split was the fix. **Second**, four single-pair near-duplicates were merged: Howard paste-safety (`command_formatting` + `no_indented_code_blocks`), Pluto build server (`reference_*` + `project_*`), Howard backend deferral folded into `feedback_rmm_dev_is_mike`, and IX server access (`_ssh` + `_tailscale` → `_access`). **Third**, applied the Syncro-style consolidation to four more clusters Mike asked about: GuruConnect (2→1), Dataforth (3→2), Cascades (7→3), GuruRMM (13→3). Each picked the shape that fit — GuruConnect didn't warrant a history split; Dataforth's 2026-03-27 incident did; Cascades and GuruRMM got the full state/rules/history (or state/rules/reference) split. **Fourth**, built a new auto-loaded cheatsheet `reference_resource_map.md` to solve the recurring "do I have access to X and how do I connect from this machine" problem — an Explore agent inventoried credentials.md + the SOPS vault + every `reference_*` memory + recent session logs, and the synthesized file landed at 264 lines covering servers, services, M365 tenants, internal APIs, and per-machine access gotchas. Net memory store: 104 → 71 files. Broken backlinks 8 → 7 (resolved 5 introduced by renames, lost 1 from a deleted file). Overlap clusters 12 → 5. Orphan files 17 → 0. All committed in `0c00010` and pushed; a follow-up sync auto-commit `66733d4` swept the two memory-dream report artifacts left in `_reports/`. Vault pulled one incoming commit from Howard (`1559267` adding AT Trebesch GuruRMM enrollment key). ## Key Decisions - **Split each consolidated cluster into "rules" vs "history" files** rather than one big merged file. The rules files get auto-loaded into the harness profile; the history files (incident detail, quotes, dated context) only read on-demand. Cuts hot-path tokens without losing the "why" that future-Claude needs for edge-case judgment. - **Single resource map, not multiple per-category files.** The value is having "what do I have access to?" answered in ONE read. Detail stays in the linked `reference_*` files; the map points at them. - **Default + machine-specific exceptions in the resource map, not a full per-machine matrix.** Most resources access the same way from every machine; only the actual divergences (Pluto-from-GURU-5070 missing pubkey, IX-from-GURU-5070 missing pubkey, vault path differing per OS, Windows OpenSSH gotcha) get per-machine notes. - **Stripped Cascades-Meredith-Kuhn from the Syncro workflow rules and into history.** Mike caught that the "Meredith is the wrong default at Cascades" section was just an instance of the universal "leave contact blank" rule. The universal rule is the rule; Cascades is one example of where the rule prevents harm. - **Kept the GuruScan carve-out inside `feedback_gururmm.md`** rather than a separate file. The rule pattern is "Howard defers backend; GuruScan is the exception" — same conceptual unit. Splitting would have created a future drift surface. - **`reference_resource_map.md` is indexed FIRST under `## Reference` in `MEMORY.md`** with a "READ THIS FIRST" prefix. The cheatsheet has zero value if you don't reach for it before searching. - **Trusted the agent's vault inventory rather than verifying every field name manually.** The agent ran `bash $VAULT list` and read the file contents — facts on paper. Flagged in the post-commit summary that specific field names should be verified on first use. ## Problems Encountered - **Edit tool requires Read first.** Tried to batch-fix the five broken backlinks introduced by the cluster renames with parallel Edits — all five failed with "File has not been read yet." Re-issued as parallel Reads followed by parallel Edits. No data lost. - **Initial Syncro consolidation files were too long.** Mike flagged that the consolidated files still carried lots of "on this date" and "Mike said X" detail that bloats every session-start context load. Split into rules + history was the fix. Worth applying that lens proactively for any future consolidation. - **GurUconnect cluster naming collision.** The new consolidated `project_guruconnect.md` could have stomped one of the deleted originals if I hadn't deleted them in a separate step. Pattern: when consolidating, write the new file with a distinct name (or write-then-delete-originals-then-rename if a clean name overlaps) — never let a Write of a new consolidated file land on the same filename as a still-existing original. - **One leftover orphan after `--apply-safe`.** The migration brought `feedback_check_patterns_before_asking.md` and `user_font_preference.md` INTO the repo but didn't index them (the apply-safe pass had run before they existed). Added them to MEMORY.md as a follow-up edit. Worth a flag in the memory-dream skill: re-scan for orphans after the migration step. ## Configuration Changes ### New files - `.claude/memory/reference_resource_map.md` — 264-line cheatsheet (auto-loaded). Servers, services, M365 tenants, internal APIs, per-machine gotchas. - `.claude/memory/feedback_syncro_api.md`, `feedback_syncro_billing.md`, `feedback_syncro_workflow.md`, `feedback_syncro_history.md` (replaces 19 originals) - `.claude/memory/feedback_cascades.md`, `project_cascades.md`, `project_cascades_history.md` (replaces 7 originals) - `.claude/memory/feedback_gururmm.md`, `reference_gururmm.md`, `project_gururmm.md` (replaces 13 originals) - `.claude/memory/project_guruconnect.md` (replaces 2 originals) - `.claude/memory/project_dataforth.md`, `project_dataforth_history.md` (replaces 3 originals) - `.claude/memory/feedback_command_formatting.md` (rewritten to combine paste-safety clauses) - `.claude/memory/reference_ix_server_access.md` (replaces ssh + tailscale) ### Modified - `.claude/memory/MEMORY.md` — full rewrite reflecting the new layout; added `### Syncro`, `### GuruRMM`, `### Cascades` subsections; consolidated and de-duped the Project section. - `.claude/memory/feedback_psa_default_syncro.md`, `feedback_autonomous_infra_setup.md`, `project_versionable_products.md`, `reference_acg_msp_stack.md`, `reference_gitea_api_credential.md`, `reference_guru5070_rust_toolchain.md` — backlink targets repointed at the new consolidated slugs. - `.claude/memory/reference_pluto_build_server.md` — absorbed the project file's unique content (WiX 4 / Azure Trusted Signing / agent-staleness note / `administrators_authorized_keys` ASCII encoding gotcha). - `.claude/memory/feedback_rmm_dev_is_mike.md` (then later absorbed into `feedback_gururmm.md` and deleted) — folded in Howard's general backend-deferral rule. ### Deleted (39 originals) 19 Syncro feedback files, 7 Cascades files, 13 GuruRMM files (6 feedback + 5 reference + 1 project + 1 principles), 2 GuruConnect, 3 Dataforth, plus the four single-pair dedup targets (`no_indented_code_blocks`, `project_pluto_build_server`, `howard_delegation`, `ix_server_ssh`, `ix_access_tailscale`). ## Credentials & Secrets No new credentials created or rotated. Inventoried vault paths into the new resource map — every path mentioned in `reference_resource_map.md` is a pointer to an existing vault entry, no transcribed secrets. Howard added a new vault entry during the session (pulled via sync): `clients/attrebesch/gururmm-site-main.sops.yaml` — AT Trebesch GuruRMM site enrollment key `SWIFT-LION-2892`. Vault commit `1559267`. ## Infrastructure & Servers No infrastructure changes. The resource map captured the current state of: - ACG office VMs/servers: Jupiter (172.16.3.20), gururmm-server (172.16.3.30), Pluto (172.16.3.36), IX (172.16.3.10), Uranus (172.16.3.21), OwnCloud (172.16.3.22), Neptune (67.206.163.124 / 172.16.3.11 — physically at Dataforth's D2 facility despite the `acghosting.com` name), WebSvr (162.248.93.81), pfSense (172.16.0.1, SSH port 2248). - Internal APIs on 172.16.3.30: ClaudeTools main (`:8001`), coord (`:8001/api/coord`, no auth), GuruRMM (`:3001`), GuruConnect (`:3002`). - Per-machine access exceptions documented: GURU-5070 needs sshpass for IX and `/rmm` instead of SSH for Pluto; GURU-BEAST-ROG SSH key deployment pending; Mac vault path differs; all Windows machines must use system OpenSSH (not Git for Windows). ## Commands & Outputs ```bash # Memory dream report (read-only) py "C:/Users/guru/ClaudeTools/.claude/skills/memory-dream/scripts/memory_dream.py" # Apply additive-only fixes py "C:/Users/guru/ClaudeTools/.claude/skills/memory-dream/scripts/memory_dream.py" --apply-safe # Final dream report after consolidation py ".claude/skills/memory-dream/scripts/memory_dream.py" --no-file # memory files: 71 / broken backlinks: 7 / overlap clusters: 5 ``` Final state delta: ``` 75 files changed in commit 0c00010 +1,473 insertions / -1,324 deletions Net: -33 memory files (104 → 71) ``` ## Pending / Incomplete Tasks - **Verify vault field names on first use** for entries newly cataloged in `reference_resource_map.md` — most were taken from the agent's vault scan and not individually exercised this session. Update the map if anything's wrong rather than working around it. - **Mac `install-hooks.sh` setup** still pending on Mikes-MacBook-Air (per `project_gururmm.md`). Action: `cd /Users/azcomputerguru/ClaudeTools/projects/msp-tools/guru-rmm && git pull && bash scripts/install-hooks.sh` before any RMM dev on the Mac. - **GURU-5070 → IX pubkey** not yet authorized — re-verify whether key auth got set up after the Win11 reinstall, or add the workstation's pubkey to IX's `~/.ssh/authorized_keys` to drop the sshpass workaround. - **GURU-5070 → Pluto pubkey** likewise not authorized — add it to `administrators_authorized_keys` (ASCII-encoded) to enable direct SSH instead of going through `/rmm`. - **Memory-dream skill enhancement (low priority):** re-scan for orphans after the `--apply-safe` profile migration step, so newly-migrated files get auto-indexed in the same pass instead of leaving them as orphans for the next run. - **Remaining overlap clusters** flagged by memory-dream (5 left): the four GuruRMM reference files are gone, but `feedback_cascades_folder_redirect` + `feedback_cascades_user_security_group` should consolidate cleanly when next revisiting Cascades; the bypass_permissions + autonomous_infra_setup pair is intentionally kept separate (nuance matters). ## Reference Information - **Memory-cleanup commit:** `0c00010` — `chore(memory): consolidate scattered feedback/project/reference files` - **Sync auto-commit (dream reports sweep):** `66733d4` - **Vault pull:** `1559267` — Howard added AT Trebesch GuruRMM enrollment key - **Dream reports archived:** `.claude/memory/_reports/2026-06-01-1528-dream.md`, `2026-06-01-1529-dream.md` - **New cheatsheet file:** `.claude/memory/reference_resource_map.md` - **Index:** `.claude/memory/MEMORY.md` (rewritten) - **Memory-dream skill:** `.claude/skills/memory-dream/scripts/memory_dream.py` (read-only default; `--apply-safe` for additive fixes only; never destructive)