sync: auto-sync from GURU-5070 at 2026-06-07 08:15:08
Author: Mike Swanson Machine: GURU-5070 Timestamp: 2026-06-07 08:15:08
This commit is contained in:
@@ -1,20 +0,0 @@
|
|||||||
# Howard Bootstrap — Project State
|
|
||||||
|
|
||||||
> Last updated: 2026-04-20
|
|
||||||
|
|
||||||
**Status:** STALLED
|
|
||||||
**Last Activity:** 2026-04-16
|
|
||||||
|
|
||||||
Bootstrap/onboarding setup for Howard's workstation and ClaudeTools integration. The directory contains only a README.txt, keys.txt, and setup.bat — minimal scaffolding. No substantive development has occurred.
|
|
||||||
|
|
||||||
## What Was Done
|
|
||||||
|
|
||||||
- Basic directory structure created
|
|
||||||
- setup.bat and keys.txt staged for Howard's initial machine setup
|
|
||||||
- No session logs recorded
|
|
||||||
|
|
||||||
## If Resuming
|
|
||||||
|
|
||||||
- Check `README.txt` for any setup instructions captured
|
|
||||||
- Determine what Howard still needs configured (vault access, git config, identity.json on his machine)
|
|
||||||
- Follow ONBOARDING.md process in `.claude/` for any new-machine setup steps
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
AZ Computer Guru - ClaudeTools Setup
|
|
||||||
=====================================
|
|
||||||
|
|
||||||
This package sets up the Claude Code workspace on your machine.
|
|
||||||
|
|
||||||
WHAT'S INCLUDED:
|
|
||||||
setup.bat - Run this first. It installs everything.
|
|
||||||
keys.txt - Vault decryption key (if Mike included it)
|
|
||||||
README.txt - This file
|
|
||||||
|
|
||||||
WHAT IT DOES:
|
|
||||||
1. Checks for prerequisites (git, claude, python, sops)
|
|
||||||
- Auto-installs missing ones via winget
|
|
||||||
2. Clones the shared ClaudeTools repo from Gitea
|
|
||||||
3. Clones the encrypted credential vault
|
|
||||||
4. Sets up the decryption key for vault access
|
|
||||||
5. Creates a "ClaudeTools" shortcut on your desktop
|
|
||||||
|
|
||||||
HOW TO RUN:
|
|
||||||
1. Extract this zip to any drive (e.g., D:\)
|
|
||||||
2. Double-click setup.bat
|
|
||||||
3. Follow the prompts (you'll be asked for your Gitea
|
|
||||||
password on first clone - ask Mike)
|
|
||||||
4. After setup, double-click "ClaudeTools" on your desktop
|
|
||||||
5. Claude will introduce itself and walk you through everything
|
|
||||||
|
|
||||||
YOUR GITEA ACCOUNT:
|
|
||||||
URL: https://git.azcomputerguru.com
|
|
||||||
Username: howard
|
|
||||||
Password: Ask Mike (you'll change it on first login)
|
|
||||||
|
|
||||||
IF SOMETHING GOES WRONG:
|
|
||||||
- Close and re-run setup.bat (it's safe to run multiple times)
|
|
||||||
- If git clone fails: check network/VPN/Tailscale connection
|
|
||||||
- If vault fails: make sure keys.txt is at
|
|
||||||
%APPDATA%\sops\age\keys.txt
|
|
||||||
- Ask Mike or ask Claude (once it's running)
|
|
||||||
|
|
||||||
AFTER SETUP:
|
|
||||||
Your workspace lives at <drive>:\claudetools
|
|
||||||
Credentials vault at <drive>:\vault
|
|
||||||
Everything syncs to Gitea automatically via /sync command
|
|
||||||
@@ -1,168 +0,0 @@
|
|||||||
@echo off
|
|
||||||
setlocal EnableExtensions
|
|
||||||
title AZ Computer Guru - ClaudeTools Laptop Fix
|
|
||||||
color 0B
|
|
||||||
|
|
||||||
rem ============================================================
|
|
||||||
rem ClaudeTools - Laptop Fix (Howard)
|
|
||||||
rem ------------------------------------------------------------
|
|
||||||
rem 1) Installs the programs Claude needs (git, node, claude,
|
|
||||||
rem python, sops).
|
|
||||||
rem 2) Stops the "Claude hangs then closes when opened from the
|
|
||||||
rem claudetools folder" bug by disabling the grepai MCP
|
|
||||||
rem server (its binary, grepai.exe, is missing on this PC).
|
|
||||||
rem 3) Makes a desktop launcher that stays open on errors.
|
|
||||||
rem
|
|
||||||
rem Safe to run more than once. Targets C:\claudetools.
|
|
||||||
rem ============================================================
|
|
||||||
|
|
||||||
set "BASE=C:\claudetools"
|
|
||||||
set "SCRIPT_DIR=%~dp0"
|
|
||||||
set "NEEDS_RESTART=0"
|
|
||||||
|
|
||||||
echo ============================================
|
|
||||||
echo ClaudeTools - Laptop Fix
|
|
||||||
echo ============================================
|
|
||||||
echo.
|
|
||||||
echo Installs required programs and stops the
|
|
||||||
echo hang-then-close problem when opening Claude.
|
|
||||||
echo.
|
|
||||||
echo Press any key to start, or close to cancel.
|
|
||||||
pause >nul
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo [1/4] Installing required programs...
|
|
||||||
|
|
||||||
where winget >nul 2>&1
|
|
||||||
if errorlevel 1 echo [WARNING] winget missing. Install "App Installer" from the Microsoft Store, then re-run.
|
|
||||||
|
|
||||||
rem --- git (also provides Git Bash, used by the repo) ---
|
|
||||||
where git >nul 2>&1
|
|
||||||
if errorlevel 1 (
|
|
||||||
echo [..] installing git...
|
|
||||||
winget install --id Git.Git -e --accept-package-agreements --accept-source-agreements
|
|
||||||
set "NEEDS_RESTART=1"
|
|
||||||
) else (
|
|
||||||
echo [OK] git
|
|
||||||
)
|
|
||||||
|
|
||||||
rem --- node (Claude Code runs on Node) ---
|
|
||||||
where node >nul 2>&1
|
|
||||||
if errorlevel 1 (
|
|
||||||
echo [..] installing Node.js LTS...
|
|
||||||
winget install --id OpenJS.NodeJS.LTS -e --accept-package-agreements --accept-source-agreements
|
|
||||||
set "NEEDS_RESTART=1"
|
|
||||||
) else (
|
|
||||||
echo [OK] node
|
|
||||||
)
|
|
||||||
|
|
||||||
rem --- python ---
|
|
||||||
where py >nul 2>&1
|
|
||||||
if errorlevel 1 (
|
|
||||||
where python >nul 2>&1
|
|
||||||
if errorlevel 1 (
|
|
||||||
echo [..] installing Python...
|
|
||||||
winget install --id Python.Python.3.12 -e --accept-package-agreements --accept-source-agreements
|
|
||||||
set "NEEDS_RESTART=1"
|
|
||||||
) else (
|
|
||||||
echo [OK] python
|
|
||||||
)
|
|
||||||
) else (
|
|
||||||
echo [OK] python
|
|
||||||
)
|
|
||||||
|
|
||||||
rem --- sops (vault decryption) ---
|
|
||||||
where sops >nul 2>&1
|
|
||||||
if errorlevel 1 (
|
|
||||||
echo [..] installing SOPS...
|
|
||||||
winget install --id Mozilla.sops -e --accept-package-agreements --accept-source-agreements
|
|
||||||
) else (
|
|
||||||
echo [OK] sops
|
|
||||||
)
|
|
||||||
|
|
||||||
if "%NEEDS_RESTART%"=="1" (
|
|
||||||
echo.
|
|
||||||
echo ============================================
|
|
||||||
echo New programs were installed. CLOSE this
|
|
||||||
echo window and RUN THIS SCRIPT AGAIN so they
|
|
||||||
echo are on PATH. The second run finishes up.
|
|
||||||
echo ============================================
|
|
||||||
echo.
|
|
||||||
pause
|
|
||||||
exit /b 0
|
|
||||||
)
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo [2/4] Installing / updating Claude Code...
|
|
||||||
call npm install -g @anthropic-ai/claude-code
|
|
||||||
if errorlevel 1 (
|
|
||||||
echo [WARNING] Claude Code install reported an error - continuing.
|
|
||||||
) else (
|
|
||||||
echo [OK] Claude Code installed/updated
|
|
||||||
)
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo [3/4] Installing grepai + configuring MCP ^(stops the hang^)...
|
|
||||||
if not exist "%BASE%" (
|
|
||||||
echo [WARNING] %BASE% not found. Make sure ClaudeTools is at %BASE%, then re-run.
|
|
||||||
goto :launcher
|
|
||||||
)
|
|
||||||
|
|
||||||
rem --- install grepai.exe shipped alongside this script ---
|
|
||||||
if exist "%SCRIPT_DIR%grepai.exe" (
|
|
||||||
copy /Y "%SCRIPT_DIR%grepai.exe" "%BASE%\grepai.exe" >nul
|
|
||||||
echo [OK] grepai.exe copied to %BASE%
|
|
||||||
) else (
|
|
||||||
echo [..] grepai.exe not in this package - will disable the MCP server instead
|
|
||||||
)
|
|
||||||
|
|
||||||
if not exist "%BASE%\.claude" (
|
|
||||||
echo [WARNING] %BASE%\.claude not found.
|
|
||||||
echo Make sure ClaudeTools is at %BASE%, then re-run.
|
|
||||||
goto :launcher
|
|
||||||
)
|
|
||||||
|
|
||||||
set "SL=%BASE%\.claude\settings.local.json"
|
|
||||||
if exist "%SL%" copy /Y "%SL%" "%SL%.bak" >nul
|
|
||||||
|
|
||||||
if exist "%BASE%\grepai.exe" (
|
|
||||||
> "%SL%" echo {
|
|
||||||
>>"%SL%" echo "env": { "CLAUDETOOLS_ROOT": "C:/claudetools" }
|
|
||||||
>>"%SL%" echo }
|
|
||||||
echo [OK] grepai.exe present - left enabled
|
|
||||||
) else (
|
|
||||||
> "%SL%" echo {
|
|
||||||
>>"%SL%" echo "env": { "CLAUDETOOLS_ROOT": "C:/claudetools" },
|
|
||||||
>>"%SL%" echo "disabledMcpjsonServers": ["grepai"]
|
|
||||||
>>"%SL%" echo }
|
|
||||||
echo [OK] grepai MCP server disabled - Claude will no longer hang
|
|
||||||
)
|
|
||||||
if exist "%SL%.bak" echo ^(old settings backed up to settings.local.json.bak^)
|
|
||||||
|
|
||||||
:launcher
|
|
||||||
echo.
|
|
||||||
echo [4/4] Creating desktop launcher...
|
|
||||||
set "SHORTCUT=%USERPROFILE%\Desktop\ClaudeTools.bat"
|
|
||||||
> "%SHORTCUT%" echo @echo off
|
|
||||||
>>"%SHORTCUT%" echo title ClaudeTools - AZ Computer Guru
|
|
||||||
>>"%SHORTCUT%" echo cd /d C:\claudetools
|
|
||||||
>>"%SHORTCUT%" echo claude %%*
|
|
||||||
>>"%SHORTCUT%" echo if errorlevel 1 (
|
|
||||||
>>"%SHORTCUT%" echo echo.
|
|
||||||
>>"%SHORTCUT%" echo echo [WARNING] Claude exited with an error - window kept open so you can read it.
|
|
||||||
>>"%SHORTCUT%" echo pause
|
|
||||||
>>"%SHORTCUT%" echo ^)
|
|
||||||
echo [OK] created %SHORTCUT%
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo ============================================
|
|
||||||
echo Done
|
|
||||||
echo ============================================
|
|
||||||
echo.
|
|
||||||
where claude >nul 2>&1 && claude --version || echo [WARNING] claude not on PATH yet - open a NEW window.
|
|
||||||
echo.
|
|
||||||
echo Open a NEW window, then double-click "ClaudeTools"
|
|
||||||
echo on your Desktop. It should open without hanging.
|
|
||||||
echo.
|
|
||||||
pause
|
|
||||||
endlocal
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# created: 2026-03-30T13:53:19-07:00
|
|
||||||
# public key: age1qz7ct84m50u06h97artqddkj3c8se2yu4nxu59clq8rhj945jc0s5excpr
|
|
||||||
AGE-SECRET-KEY-1DE3V6V0ZLLZ45A7GA77M79CTN4LZQMTRCURP8VRGNLV6T2FSZEEQXUW2EU
|
|
||||||
@@ -1,176 +0,0 @@
|
|||||||
@echo off
|
|
||||||
setlocal EnableDelayedExpansion
|
|
||||||
title AZ Computer Guru - ClaudeTools Setup
|
|
||||||
color 0A
|
|
||||||
|
|
||||||
echo ============================================
|
|
||||||
echo AZ Computer Guru - ClaudeTools Bootstrap
|
|
||||||
echo ============================================
|
|
||||||
echo.
|
|
||||||
echo This sets up the Claude Code workspace on
|
|
||||||
echo this machine. Takes about 5 minutes.
|
|
||||||
echo.
|
|
||||||
echo Press any key to start, or Ctrl+C to cancel.
|
|
||||||
pause >nul
|
|
||||||
|
|
||||||
:: Determine target drive (same drive as this script)
|
|
||||||
set "DRIVE=%~d0"
|
|
||||||
set "BASE=%DRIVE%\claudetools"
|
|
||||||
set "VAULT=%DRIVE%\vault"
|
|
||||||
set "AGE_DIR=%APPDATA%\sops\age"
|
|
||||||
set "SCRIPT_DIR=%~dp0"
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo [1/7] Checking prerequisites...
|
|
||||||
|
|
||||||
:: Check git
|
|
||||||
where git >nul 2>&1
|
|
||||||
if %ERRORLEVEL% neq 0 (
|
|
||||||
echo [!] git not found. Installing via winget...
|
|
||||||
winget install --id Git.Git -e --accept-package-agreements --accept-source-agreements
|
|
||||||
echo [!] Please close and reopen this script after git installs.
|
|
||||||
pause
|
|
||||||
exit /b 1
|
|
||||||
)
|
|
||||||
echo [OK] git found
|
|
||||||
|
|
||||||
:: Check claude
|
|
||||||
where claude >nul 2>&1
|
|
||||||
if %ERRORLEVEL% neq 0 (
|
|
||||||
echo [!] Claude Code not found. Installing...
|
|
||||||
winget install --id Anthropic.ClaudeCode -e --accept-package-agreements --accept-source-agreements 2>nul
|
|
||||||
if %ERRORLEVEL% neq 0 (
|
|
||||||
echo [!] winget install failed. Try: npm install -g @anthropic-ai/claude-code
|
|
||||||
echo OR download from https://claude.ai/download
|
|
||||||
pause
|
|
||||||
exit /b 1
|
|
||||||
)
|
|
||||||
)
|
|
||||||
echo [OK] Claude Code found
|
|
||||||
|
|
||||||
:: Check sops
|
|
||||||
where sops >nul 2>&1
|
|
||||||
if %ERRORLEVEL% neq 0 (
|
|
||||||
echo [!] SOPS not found. Installing via winget...
|
|
||||||
winget install --id Mozilla.sops -e --accept-package-agreements --accept-source-agreements
|
|
||||||
)
|
|
||||||
echo [OK] SOPS found
|
|
||||||
|
|
||||||
:: Check python
|
|
||||||
where python >nul 2>&1
|
|
||||||
if %ERRORLEVEL% neq 0 (
|
|
||||||
echo [!] Python not found. Installing via winget...
|
|
||||||
winget install --id Python.Python.3.12 -e --accept-package-agreements --accept-source-agreements
|
|
||||||
echo [!] Please close and reopen this script after Python installs.
|
|
||||||
pause
|
|
||||||
exit /b 1
|
|
||||||
)
|
|
||||||
echo [OK] Python found
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo [2/7] Setting up age decryption key...
|
|
||||||
|
|
||||||
if not exist "%AGE_DIR%" mkdir "%AGE_DIR%"
|
|
||||||
if exist "%SCRIPT_DIR%keys.txt" (
|
|
||||||
copy /Y "%SCRIPT_DIR%keys.txt" "%AGE_DIR%\keys.txt" >nul
|
|
||||||
echo [OK] Age key installed from bootstrap package
|
|
||||||
) else if exist "%AGE_DIR%\keys.txt" (
|
|
||||||
echo [OK] Age key already present
|
|
||||||
) else (
|
|
||||||
echo [!!] Age decryption key not found!
|
|
||||||
echo.
|
|
||||||
echo Ask Mike for the keys.txt file and place it at:
|
|
||||||
echo %AGE_DIR%\keys.txt
|
|
||||||
echo.
|
|
||||||
echo Without this file, credential vault access won't work.
|
|
||||||
echo Setup will continue but vault commands will fail until
|
|
||||||
echo the key is in place.
|
|
||||||
echo.
|
|
||||||
pause
|
|
||||||
)
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo [3/7] Cloning ClaudeTools repo...
|
|
||||||
|
|
||||||
if not exist "%BASE%\.git" (
|
|
||||||
git clone https://howard@git.azcomputerguru.com/azcomputerguru/claudetools.git "%BASE%"
|
|
||||||
if %ERRORLEVEL% neq 0 (
|
|
||||||
echo [!] Clone failed. Check your Gitea credentials.
|
|
||||||
echo Username: howard
|
|
||||||
echo Password: ask Mike for initial password
|
|
||||||
pause
|
|
||||||
exit /b 1
|
|
||||||
)
|
|
||||||
echo [OK] Cloned to %BASE%
|
|
||||||
) else (
|
|
||||||
echo [OK] Already exists, pulling latest...
|
|
||||||
cd /d "%BASE%" && git pull
|
|
||||||
)
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo [4/7] Cloning Vault repo...
|
|
||||||
|
|
||||||
if not exist "%VAULT%\.git" (
|
|
||||||
git clone https://howard@git.azcomputerguru.com/azcomputerguru/vault.git "%VAULT%"
|
|
||||||
if %ERRORLEVEL% neq 0 (
|
|
||||||
echo [!] Vault clone failed. Check credentials.
|
|
||||||
pause
|
|
||||||
exit /b 1
|
|
||||||
)
|
|
||||||
echo [OK] Cloned to %VAULT%
|
|
||||||
) else (
|
|
||||||
echo [OK] Already exists, pulling latest...
|
|
||||||
cd /d "%VAULT%" && git pull
|
|
||||||
)
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo [5/7] Configuring git identity...
|
|
||||||
|
|
||||||
cd /d "%BASE%"
|
|
||||||
git config user.name "Howard Enos"
|
|
||||||
git config user.email "howard@azcomputerguru.com"
|
|
||||||
cd /d "%VAULT%"
|
|
||||||
git config user.name "Howard Enos"
|
|
||||||
git config user.email "howard@azcomputerguru.com"
|
|
||||||
echo [OK] Git identity set to Howard Enos
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo [6/7] Creating desktop shortcut...
|
|
||||||
|
|
||||||
set "SHORTCUT=%USERPROFILE%\Desktop\ClaudeTools.bat"
|
|
||||||
(
|
|
||||||
echo @echo off
|
|
||||||
echo title ClaudeTools - AZ Computer Guru
|
|
||||||
echo cd /d "%BASE%"
|
|
||||||
echo claude
|
|
||||||
) > "%SHORTCUT%"
|
|
||||||
echo [OK] Created: %SHORTCUT%
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo [7/7] Verifying setup...
|
|
||||||
|
|
||||||
echo Repo: %BASE%
|
|
||||||
echo Vault: %VAULT%
|
|
||||||
echo Age key: %AGE_DIR%\keys.txt
|
|
||||||
if exist "%AGE_DIR%\keys.txt" (
|
|
||||||
echo Vault: [OK] key present
|
|
||||||
cd /d "%BASE%"
|
|
||||||
bash "%VAULT%/scripts/vault.sh" list 2>nul | find /c ".sops.yaml" >nul 2>&1 && echo Decrypt: [OK] vault accessible || echo Decrypt: [!] vault test failed
|
|
||||||
) else (
|
|
||||||
echo Vault: [!] key missing - ask Mike
|
|
||||||
)
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo ============================================
|
|
||||||
echo Setup Complete!
|
|
||||||
echo ============================================
|
|
||||||
echo.
|
|
||||||
echo Next steps:
|
|
||||||
echo 1. Double-click "ClaudeTools" on your desktop
|
|
||||||
echo 2. Claude will ask who you are - say "Howard"
|
|
||||||
echo 3. Claude will walk you through the system
|
|
||||||
echo.
|
|
||||||
echo If you need the vault key, ask Mike.
|
|
||||||
echo Your Gitea login: howard / (ask Mike for password)
|
|
||||||
echo.
|
|
||||||
pause
|
|
||||||
@@ -163,3 +163,67 @@ Ran the **3-way Multi-AI review** (Gemini via `agy` + Grok + Claude Code Review
|
|||||||
- Real second-model backends: `@google/gemini-cli` (`gemini` npm, v0.45.2, Google OAuth) via `ask-gemini.sh`; grok 0.2.22 via `ask-grok.sh`. Both verified `OK`.
|
- Real second-model backends: `@google/gemini-cli` (`gemini` npm, v0.45.2, Google OAuth) via `ask-gemini.sh`; grok 0.2.22 via `ask-grok.sh`. Both verified `OK`.
|
||||||
- Memory added: `reference_antigravity_agy_not_headless.md`.
|
- Memory added: `reference_antigravity_agy_not_headless.md`.
|
||||||
- ff.py: `.claude/scripts/ff.py`, daemon `localhost:9333`, profile `~/.claude/ff-profile`.
|
- ff.py: `.claude/scripts/ff.py`, daemon `localhost:9333`, profile `~/.claude/ff-profile`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Update: 2026-06-07 08:13 PDT — GuruRMM beta dashboard: alert-count fix (prod) + 3 sidebar features (rail expand, light-mode theming, resizable spine)
|
||||||
|
|
||||||
|
### Summary
|
||||||
|
|
||||||
|
Merged the prior session's infra-spine hitbox + pin branch to gururmm `main` (auto-built to beta). Mike then reported the Alerts page summary chips disagreed with the lists they open. Diagnosed TWO predicate mismatches making the list >= the chip: (1) the Critical/Warning chips counted `status != 'resolved'` but clicked `status:""` (all statuses incl. resolved), and (2) `get_alert_summary` scoped counts to the last 7 days while the alert list has NO time window. Fixed both — chips now click `status:"unresolved"`, and dropped the 7-day window from the summary SQL so all four chips deterministically equal their lists. Code Review APPROVED. Merged `6b4cee4`: the dashboard half to beta, the server `get_alert_summary` change to the SHARED API (= prod immediately).
|
||||||
|
|
||||||
|
Mike reported Warning still wrong post-deploy. Diagnosed via the live API + a `gururmm` RMM-agent tail of `/var/log/gururmm-build.log` as DEPLOY TIMING, not a bug: the fast Vite dashboard deployed first while the slow Rust server didn't restart with the dropped window until **14:31:33 UTC** (after he looked). Confirmed corrected: `summary.warning` 2->4, `total` 104->152 (the 2 "missing" warnings were just >7 days old; 0 resolved).
|
||||||
|
|
||||||
|
Built three sidebar features (Howard/Mike requests), each Coding-Agent-built + reviewed, each on its own branch -> build-verify -> merge to beta:
|
||||||
|
- **Rail expand** (`a6d355f`): the far-left FunctionRail gets a persistent toggle (localStorage `gururmm.rail.expanded`, cross-tab) widening it w-12->w-52 with inline labels; expanded mode inlines the "More" items; collapsed unchanged. Code Review APPROVED.
|
||||||
|
- **Sidebar light-mode theming** (`d2c9236`): the left panes were hardcoded always-dark. Gave the light theme a soft-grey `--sidebar-bg` (95%) / border (88%) and swapped sidebar-surface `text-white/N` -> `text-foreground/N` (1:1 opacity) across FunctionRail/InfrastructureSpine/ContextTree, PRESERVING the white-on-red alert badges + the dark hover tooltip. Dark mode unchanged.
|
||||||
|
- **Resizable spine** (`3c210e0`): drag the spine's right edge (180-480px, persisted `gururmm.spine.width`); width via inline style, transition off mid-drag; `setPointerCapture` + a teardown ref close the release-outside-window and unmount-mid-drag edge cases; keyboard arrows on the handle. Code Review APPROVED + the 2 robustness fixes applied.
|
||||||
|
|
||||||
|
### Key Decisions
|
||||||
|
|
||||||
|
- **Alert fix Part 2 = Option B (drop the 7-day window), Mike-approved despite prod impact** (the summary SQL is on the shared API; there is no separate beta API server). `status:"unresolved"` == the summary's `status != 'resolved'` because only 3 statuses exist (active/acknowledged/resolved — verified against schema + every write path).
|
||||||
|
- **Each sidebar feature is self-contained in its component** (FunctionRail/InfrastructureSpine self-manage state; no Layout.tsx change), reflowing via the existing flex row.
|
||||||
|
- **Theming preserves white-on-colored** (badge, tooltip) — only sidebar-surface text/bg/border became `foreground` tokens.
|
||||||
|
- **Did NOT promote beta -> prod** (Mike still reviewing); only the unavoidable server alert-count change is live on prod.
|
||||||
|
- Deferred the review's FunctionRail DRY (hoist PRIMARY_ITEMS) + `aria-current` nits to a future sidebar touch.
|
||||||
|
|
||||||
|
### Problems Encountered
|
||||||
|
|
||||||
|
- **Warning chip stale post-deploy** — deploy timing (slow Rust server restart at 14:31:33 UTC after the fast dashboard), not a logic bug. Confirmed via live API + RMM build-log tail.
|
||||||
|
- **First RMM dispatch failed** (`jq: Invalid numeric literal`) from nested JSON escaping in the command payload; rebuilt with `jq -n --arg` per the /rmm skill.
|
||||||
|
- Every feature branch needed a rebase onto `main` (CI version-bump commits advance `main` after each merge); each was a clean ff/rebase.
|
||||||
|
|
||||||
|
### Configuration Changes (submodule `projects/msp-tools/guru-rmm`, repo `azcomputerguru/gururmm` — NOT the claudetools repo)
|
||||||
|
|
||||||
|
- `dashboard/src/pages/Alerts.tsx` + `server/src/db/alerts.rs` — `6b4cee4` (alert chips + drop 7-day window)
|
||||||
|
- `dashboard/src/components/FunctionRail.tsx` — `a6d355f` (rail expand)
|
||||||
|
- `dashboard/src/index.css` + `FunctionRail.tsx`/`InfrastructureSpine.tsx`/`ContextTree.tsx` — `d2c9236` (theming)
|
||||||
|
- `dashboard/src/components/InfrastructureSpine.tsx` — `3c210e0` (resizable)
|
||||||
|
- All on `origin/main` (gururmm), deployed to beta; the `alerts.rs` change also on prod. The claudetools submodule pointer is left at pinned `226ba9f` (lagging — expected; not bumped).
|
||||||
|
|
||||||
|
### Infrastructure & Servers
|
||||||
|
|
||||||
|
- gururmm server `172.16.3.30:3001`; webhook build pipeline -> version bumps -> dashboard (beta web root `/var/www/gururmm/dashboard-beta`) + server (shared API restart). Server restarted **14:31:33 UTC** for the alert fix.
|
||||||
|
- `gururmm` RMM agent id `5e5a7ebc-95ea-40c8-b965-6ec15d63e157` (the server's own agent; used to tail the build log with no SSH).
|
||||||
|
- Alert data snapshot (2026-06-07): total 152, critical 23, warning 4 (3 active + 1 acknowledged), 0 resolved warnings.
|
||||||
|
|
||||||
|
### Commands & Outputs
|
||||||
|
|
||||||
|
- Alert diag: `GET /api/alerts/summary`, `GET /api/alerts?severity=warning&status=unresolved&limit=500` (JWT from vault `infrastructure/gururmm-server.sops.yaml credentials.gururmm-api.*`).
|
||||||
|
- RMM build-log tail: `POST /api/agents/<id>/command` with a `jq -n --arg`-built shell payload, then poll `/api/commands/<id>`.
|
||||||
|
- Per feature: `git checkout -b` -> Coding Agent -> Code Review Agent -> `npm run build` (exit 0) -> `git push origin <branch>:main` (ff) -> beta.
|
||||||
|
|
||||||
|
### Pending / Incomplete Tasks
|
||||||
|
|
||||||
|
- **Promote dashboard beta -> prod** (`sudo /opt/gururmm/promote-dashboard.sh --confirm` on `.30`) when Mike's happy — ships the whole redesign + these 4 dashboard changes. The server alert-count change is already on prod.
|
||||||
|
- FunctionRail DRY refactor (hoist `PRIMARY_ITEMS`) + `aria-current` (deferred review nits).
|
||||||
|
- Light-sidebar shade (95%) is a default — tweak after Mike's visual review on beta.
|
||||||
|
- `ff.py` visual verification of the light-mode sidebar offered (needs that Firefox profile logged into beta).
|
||||||
|
- Alert list `limit:200` pagination edge (a bucket >200 would show a chip number larger than the visible list) — pre-existing, noted.
|
||||||
|
- Carried: dev_admin re-login for credential reveal; Robert Wolkin printer type; vault GuruRMM `DATABASE_URL`; SPEC-018 errors; rotate MSP360 key.
|
||||||
|
|
||||||
|
### Reference Information
|
||||||
|
|
||||||
|
- gururmm `origin/main` this segment: `6b4cee4` alerts, `a6d355f` rail expand, `d2c9236` theming, `3c210e0` resizable spine (on top of prior `fa495ed`/`82e91c8` spine pin/hitbox, also merged this segment).
|
||||||
|
- New localStorage keys: `gururmm.rail.expanded`, `gururmm.spine.width` (+ `gururmm.spine.pins` from prior).
|
||||||
|
- beta `https://rmm-beta.azcomputerguru.com`; prod `https://rmm.azcomputerguru.com`.
|
||||||
|
|||||||
Reference in New Issue
Block a user