diff --git a/.claude/memory/MEMORY.md b/.claude/memory/MEMORY.md index f2a8e1f..71e4379 100644 --- a/.claude/memory/MEMORY.md +++ b/.claude/memory/MEMORY.md @@ -109,3 +109,4 @@ - [jq on Windows emits CRLF](feedback_jq_crlf_windows.md) — winget jq outputs CRLF; trailing \r silently breaks `for x in $(jq ...)` loops + read-from-@tsv. Override `jq(){ command jq "$@"|tr -d '\r'; }`. Windows-build-specific (passes on Mac/Linux). - [ScreenConnect RESTful API auth](reference_screenconnect_api.md) — CTRLAuthHeader = raw api_secret (no Basic/b64) + Origin header; only method is GetSessionsByName; matches blank-for-agents Name field so it cannot enumerate full inventory. - [No manufactured guardrails on our products](feedback_no_manufactured_guardrails.md) — At Mikes request on GuruRMM/GuruConnect/ClaudeTools, just execute; stop only for genuinely irreversible/destructive ops (with a heads-up). Read the actual code/state before claiming something is disallowed or a security hole. +- [Stream-of-thought design convos](feedback_stream_of_thought_design.md) — Mike brainstorms features free-form, adding requirements iteratively; Claude validates/sharpens as a design partner but does NOT build until an explicit go, then captures parked threads durably (PARKED_*.md + todos) for a later /shape-spec. diff --git a/.claude/memory/feedback_stream_of_thought_design.md b/.claude/memory/feedback_stream_of_thought_design.md new file mode 100644 index 0000000..52329b1 --- /dev/null +++ b/.claude/memory/feedback_stream_of_thought_design.md @@ -0,0 +1,24 @@ +--- +name: feedback-stream-of-thought-design +description: Mike prefers free-form stream-of-thought design conversations; Claude captures and decomposes them into specs only if/when he decides to build. +metadata: + type: feedback +--- + +Mike likes to brainstorm features as free-form, stream-of-thought conversations, +adding and refining requirements iteratively across several messages. He wants Claude +to absorb the discussion, validate and sharpen the ideas (surface architectural +trade-offs, name the real decisions, push back when an instinct fights the +architecture), and then break it into implementable parts (a `/shape-spec`) only +if/when he explicitly decides to build it. + +**Why:** He thinks out loud and trusts Claude to do the structuring later. Forcing +premature structure, or jumping to implementation mid-brainstorm, gets in his way. + +**How to apply:** During these conversations, engage as a design partner, not an +order-taker — but do NOT start building. When he says to park it, capture the +discussion durably (e.g. a `PARKED_*.md` doc in the relevant repo, plus coord todos) +with the decided shape + open decisions, so a future session can spec it cleanly. The +2026-06-07 alert-lifecycle redesign + tiered telemetry cadence threads are an example: +parked to `projects/msp-tools/guru-rmm/docs/PARKED_alert-lifecycle-and-telemetry-cadence.md`. +Related: [[feedback-dashboard-beta-first]]. diff --git a/session-logs/2026-06-07-mike-gururmm-offline-alerting-mute.md b/session-logs/2026-06-07-mike-gururmm-offline-alerting-mute.md index 8c47d9a..80874e7 100644 --- a/session-logs/2026-06-07-mike-gururmm-offline-alerting-mute.md +++ b/session-logs/2026-06-07-mike-gururmm-offline-alerting-mute.md @@ -168,3 +168,29 @@ works from GURU-5070). status `muted`; new tables `alert_mutes`; new columns `agents.role_override`. - Test box: WIN-TG2STMODJG8 agent id b6c715df-09fe-4e97-b09a-82a1b535f041 (offline eval server, used for live verification). + +--- + +## Update: 00:44 PT — alert-mute dashboard shipped, beta->prod promotion, MSI dedup cleanup, parked design + +### Completed since the initial save +- **Alert ignore/mute dashboard (Task 5) — shipped + deployed** (commit `63d7c5d`). Reused the existing Radix Dialog for the required-reason prompt; shared `AlertRow` so both the alerts page and the agent Alerts tab get Ignore/Un-ignore + the Muted filter; muted rows show Un-ignore (not Ack/Resolve) + reason/who/when; status badge labels `muted` as "Ignored". Code Review APPROVED; `npm run build` clean. The alert-mute feature is now complete end-to-end (server `a120e71` + dashboard `63d7c5d`). +- **Roadmap entries** (commit `5f1d9f0`): both offline alerting and alert ignore/mute added to FEATURE_ROADMAP.md Alerting section; specs' roadmap tasks marked DONE. +- **Dashboard beta -> production promotion.** Prod (`/var/www/gururmm/dashboard`, rmm.azcomputerguru.com) was stuck at the 2026-06-04 build. Ran `sudo /opt/gururmm/promote-dashboard.sh --confirm` on 172.16.3.30 (the sanctioned promote: backs up prod first, keeps 10 backups, rsync beta->prod, `--rollback` to undo). Backup `dashboard-20260608-000926`; prod now byte-identical to beta. This shipped ALL accumulated beta work to prod: this session's offline triage + role-override + alert mute UI, plus other sessions' credential-inheritance mgmt + clickable alert badges. Coord component gururmm/dashboard -> deployed. +- **MSI BSOD duplicate cleanup.** MSI (Safesite/Glendale, agent a685af29...) had 4 BSOD VIDEO_TDR_FAILURE (0x116) alerts, all with `dedup_key = NULL` (legacy, from the early-June BSOD implementation before the dedup key was added). Mike had muted one; the other 3 active duplicates could not be spanned by the mute (NULL key falls back to single-row). Resolved the 3 duplicates (final: 0 active, 1 muted "Client to replace unit", 3 resolved). Two resolve calls hit transient HTTP 000; retried clean. + +### Parked design conversation (NOT approved — captured for later) +A stream-of-thought design discussion produced two parked features, captured in +`projects/msp-tools/guru-rmm/docs/PARKED_alert-lifecycle-and-telemetry-cadence.md` +(commit `82a7b14`) + two coord todos (`eb14a4d2`, `bacc4f12`): +1. **Stateful alert lifecycle + occurrence history** (server): one alert per dedup_key spanning all statuses; re-fire reopens only when "substantively different" (severity escalation or re-fire after clear; not per-1%); occurrence count+first/last on the row, dated history via existing agent_events (no new table); ack reopens on substantive change, mute is absolute; server-side per-condition cooldown (~15min default, escalations bypass, recovery always prompt); subsumes BSOD per-bugcheck dedup + mute-across-refire + legacy null-key cleanup. Root cause it fixes: dedup currently matches only status='active', so ack/resolve breaks dedup and spawns duplicates. +2. **Tiered agent telemetry cadence** (agent): per-collector collection intervals (live/on-demand ~5-10s only when watched; standard ~30-60s; slow ~5-15min; daily). Disk consumption (slow) vs disk I/O (fast) are different collectors; fast diagnostics as on-demand/live mode; cadence config in policy, server-pushed; cross-platform scheduler. Larger, separate agent-side feature. + +Saved a feedback memory (`.claude/memory/feedback_stream_of_thought_design.md`): Mike +prefers free-form design conversations; Claude sharpens as a design partner but does +not build until an explicit go, then decomposes into specs. + +### Still open / parked +- Jupiter VM `ACG-DWP-X-BB` no-DHCP (diagnosed, paused for Mike's DHCP-vs-static call; see wiki/systems/jupiter.md). +- Offline classification overrides (SIF-SERVER/Server2013/WIN-TG2STMODJG8) — taggable from the agent detail role-override control; held. +- The two parked design features above; MSP360 console todos (3) from the morning.