# 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)
