diff --git a/.claude/memory/MEMORY.md b/.claude/memory/MEMORY.md index 09d80883..c6300815 100644 --- a/.claude/memory/MEMORY.md +++ b/.claude/memory/MEMORY.md @@ -3,6 +3,7 @@ ## Reference - [ACG resource map](reference_resource_map.md) — **READ THIS FIRST** when a task references a server/service/tenant/API. What we have access to, how to connect from this machine, per-machine exceptions, gotchas. Points at the detail files below. - [MSP360 backup monitoring](reference_msp360_backup_monitoring.md) — Authoritative "is client X actually backing up / last run" source for the whole fleet (NOT B2 bucket contents). MSP360 MBS API `/api/Monitoring`, vault `msp-tools/msp360-api.sops.yaml`. CompanyName also IDs B2 buckets (ACG-PST=Peaceful Spirit, ACG-TCA=Tucson Coin). +- [Backup checks only for billed clients](feedback_backup_check_only_billed.md) — Don't scan backup status for clients with no billed Data Backup line (Syncro schedule qty=0); verify billed clients only. Non-billed-but-backing-up = revenue-leak question for Mike/Winter, not a scan target. - [ALIS (Medtelligent)](reference_alis_medtelligent.md) — Cascades assisted-living EHR. API host api.alisonline.com, community 622; username must be tenant-qualified (howard.enos@cascadestucson). Staff are READ-ONLY via API — create/change staff via web-UI Staff Import .xls. Use the `alis` skill. - [GuruRMM User Manager](reference_gururmm_user_manager.md) — GuruRMM has a built-in per-agent User Manager tab (reset_password/enable/disable/groups for local+domain+AAD endpoint users; domain users only on a DC via `is_dc`). Use it, NOT raw Set-ADAccountPassword via /rmm. Endpoints: /api/agents/{id}/users + /users/action. - [RMM map network drive (err67 double-hop)](reference_rmm_map_network_drive.md) — Pushing a persistent mapped drive to a remote share via /rmm user_session fails with err67/1702 (impersonated token = no network cred/double-hop). Plant HKCU:\Network\ keys + cmdkey; mounts at next interactive logon. Immediate visibility needs the live session (ScreenConnect). diff --git a/.claude/memory/feedback_backup_check_only_billed.md b/.claude/memory/feedback_backup_check_only_billed.md new file mode 100644 index 00000000..bb576df3 --- /dev/null +++ b/.claude/memory/feedback_backup_check_only_billed.md @@ -0,0 +1,20 @@ +--- +name: feedback_backup_check_only_billed +description: Only verify backup status for clients that actually bill a backup line - don't scan non-billed clients +metadata: + type: feedback +--- + +Backup verification is scoped to clients **marked for backups** — i.e. those with a billed +Data Backup line (Syncro recurring-schedule line qty > 0). If a client is NOT billed for +backup, do NOT scan their machines / MSP360 / backends for backup status. (Howard, +2026-07-07, GPS audit — Marty Ryan has Svc = A E only, no backup line, so stop checking.) + +**Why:** "is X backing up" only matters where the client pays for it; scanning non-billed +clients burns time/endpoint calls and produces findings nobody asked for. + +**How to apply:** determine billed-backup status first (Syncro backup line qty — see the +`/syncro schedules`/`schedule` pull, authoritative), then only verify the ones with a seat. +Non-billed clients that happen to be backing up are a separate "revenue leak" question for +Mike/Winter, not a per-machine scan target. Related: [[feedback_backup_targets_never_guessed]], +[[reference_msp360_backup_monitoring]]. diff --git a/.vwp_cmd b/.vwp_cmd new file mode 100644 index 00000000..cdf2c81d --- /dev/null +++ b/.vwp_cmd @@ -0,0 +1 @@ +1b12f383-2e17-428c-8507-aa47c105b63f diff --git a/session-logs/2026-07/2026-07-06-howard-bug024-musl-deploy-scileppi-wifi.md b/session-logs/2026-07/2026-07-06-howard-bug024-musl-deploy-scileppi-wifi.md index d69a4b73..21c515ae 100644 --- a/session-logs/2026-07/2026-07-06-howard-bug024-musl-deploy-scileppi-wifi.md +++ b/session-logs/2026-07/2026-07-06-howard-bug024-musl-deploy-scileppi-wifi.md @@ -67,3 +67,20 @@ Closed the session by reviewing the three bugs touched: marked BUG-024 and BUG-0 - Coord: 4 BUG-024 messages marked read (`cf35bf16`, `20daedf9`, `e2b01835`, `9659c5fc`); sent mike `5f8b33f7` (BUG-024 deploy) + `8c45b4dd` (detector fixed); coord todo `f7382334` (BUG-026, mike/gururmm). - Discord DMs to mike: `1523821940047876146` (Scileppi access), `1523834569760178259` (BUG-026). - Vault also synced an unrelated incoming entry `clients/altschuler/gururmm-site-main.sops.yaml`. + +## Update: 2026-07-07 08:47 PT — bug roadmap close-out + Discord read capability + +Continuation of the same session (spanned past midnight into 2026-07-07). + +**Bug tracking (guru-rmm `docs/FEATURE_ROADMAP.md`):** +- BUG-024 → **FIXED** and BUG-025 (build change-detector excluded `agent/Cargo.toml`) filed **FIXED** (`fe5468e`) — commit `c248214`. +- Dug into why BUG-024's crash-loop never self-recovered → root-caused and filed **BUG-026** (OPEN/HIGH, commit `66152da`): the unix rollback watchdog is spawned via `setsid` inside the `gururmm-agent.service` cgroup; the unit sets no `KillMode` so the default `control-group` SIGKILLs the watchdog during the very restart it guards (`setsid` changes session, not cgroup). It is the only rollback path on unix (`restart_service` does `std::process::exit(0)` before the inline `rollback_binary` arm is reachable). Fix = spawn via `systemd-run --scope --collect` + bounded retry + verify. Per Howard, **flagged for Mike to fix**, not implemented: coord todo `f7382334` + Discord DM `1523834569760178259`. + +**Discord reply visibility gap (resolved):** +- Discovered `discord-dm.sh` was send-only, so replies from mike/winter/rob were invisible (coord/repo sync never carries Discord replies). Confirmed the bot token CAN read DM history via `GET /channels//messages` (Message Content intent only gates gateway events, not REST fetch on channels the bot participates in). +- Added `discord-dm.sh read [limit]` (reuses the same recipient/token/DM-open logic; prints oldest-first, `>>>` = their reply). Updated the SKILL.md + trigger description; added feedback memory `feedback_discord_read_replies`. Synced (skill deployed to global). +- Findings from reading: **Mike has NOT replied** to Scileppi (2026-07-06 22:44) or BUG-026 (23:34) — his last reply was 2026-07-05 (MSP360/Datto backups thread). **Winter** has a stale unanswered ask from 2026-06-24: "mark tickets resolved that have a status of customer reply and also have billing" (Syncro cleanup — not yet actioned, flagged to Howard). + +**Decision:** automated reply-forwarding (a scheduled watcher polling `read`, or a bot-side relay) was scoped but NOT built — Howard opted to check replies manually via `discord-dm.sh read ` when needed. + +**Still waiting on Mike:** (1) Scileppi SL-SERVER access to finish BUG-024's last agent, (2) BUG-026 fix. Check with `discord-dm.sh read mike`.