sync: auto-sync from GURU-5070 at 2026-05-25 08:02:14

Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-05-25 08:02:14
This commit is contained in:
2026-05-25 08:02:16 -07:00
parent 0502820cc2
commit 3eff33839b

View File

@@ -480,3 +480,104 @@ db5ebb1 sync: add Phase 0 uncommitted session log check
- Lint findings: 0 stale articles, 0 index gaps, 2 missing (empty stubs), 2 real broken links (1 fixed, 1 expected)
- wiki-lint skill: `.claude/commands/wiki-lint.md`
- sync skill: `.claude/commands/sync.md`
---
## Update: 08:00 PT — SPEC-007 OS recognition spec + implementation
## User
- **User:** Mike Swanson (mike)
- **Machine:** GURU-5070
- **Role:** admin
- **Session span:** 2026-05-25 (continuation after context compaction)
## Session Summary
Picked up from a compacted context mid-execution of the `/feature-request` skill for "Proper OS recognition." The skill had loaded context (identity.json, FEATURE_ROADMAP.md, CONTEXT.md) but had not yet classified the feature, searched the codebase, or written any files. Resumed from Phase 2.
Ollama was unavailable on GURU-5070 at time of execution — classification and spec generation were performed directly. Spawned an Explore agent to research all OS-related code across the codebase (agent, server, dashboard, migrations). The research revealed the infrastructure is largely in place: `agent_hardware` table already has `os_name`, `os_version`, `os_build` columns; Linux already uses PRETTY_NAME from `/etc/os-release`; macOS already uses `sw_vers`. The gap was Windows (raw build strings like `10.0.22631.4169` instead of "Windows 11 23H2") and the agent list view using the coarser `agents` table rather than the richer `agent_hardware` data.
Wrote SPEC-007 (`docs/specs/SPEC-007-os-recognition.md`) covering the full architecture: agent-side build-to-version mapping, server migration 045 to denormalize `os_name` into the `agents` table, and dashboard changes to render the friendly name in the list and detail views. Updated FEATURE_ROADMAP.md with a new "OS Recognition & Display" subsection. Committed and pushed both files to `azcomputerguru/gururmm` (commit 80c6b34).
After Mike said "implement it," delegated full implementation to a Coding Agent. The agent verified migration number (045, not 034 as estimated in the spec), implemented `windows_build_to_version()` and `macos_version_to_name()` in `agent/src/inventory.rs` with correct `#[cfg(target_os = "...")]` gates, added the migration, updated all server structs and the inventory upsert path, and updated both dashboard pages. Committed as feat: SPEC-007 (commit 1c05222). Push required a rebase against CI auto-commits on Gitea. Code Review Agent approved with no defects — noted one acceptable design decision: if an agent sends `os_name: None` in a future inventory cycle, the agents table retains the previous value (acceptable for a display hint).
## Key Decisions
- **P2 priority (not P1):** OS display is a usability gap, not a security or blocking issue. MSPs need it for patch planning and EOL tracking but it does not block any other feature.
- **Denormalize os_name into agents table rather than joining agent_hardware:** The agent list view would require a per-row JOIN to agent_hardware for every listed agent. Adding a nullable `os_name` column to `agents` eliminates the join cost with no schema complexity — the column is just nullable and populated on next inventory cycle.
- **Migration 045, not 034:** The spec estimated 034 based on the last known migration at time of writing. The agent verified 044 was the actual last migration (044_agent_mspbackups_mapping.sql).
- **ws/mod.rs callers pass None for os_name:** The WebSocket auth handshake does not carry os_name. The three `update_agent_info_full()` call sites in ws/mod.rs correctly pass `None`; the column is populated by the separate inventory upsert path. COALESCE($6, os_name) in the UPDATE query means None is a no-op (preserves existing value).
- **Spec classification done without Ollama:** Ollama was unreachable on GURU-5070. Per the skill's fallback instruction, classification and spec prose were written directly. Quality was unaffected.
## Problems Encountered
- **Ollama unavailable:** `curl http://localhost:11434/api/generate` returned no output. Proceeded with self-generated classification and spec per the `/feature-request` skill fallback instructions.
- **Push rejected after implementation commit:** Gitea had newer commits (CI version-bump webhook triggered by the spec commit). Resolved with `git fetch && git rebase origin/main && git push` — implementation commit was already included, push then reported "Everything up-to-date."
## Configuration Changes
**Created:**
- `projects/msp-tools/guru-rmm/docs/specs/SPEC-007-os-recognition.md` — full feature specification
- `projects/msp-tools/guru-rmm/server/migrations/045_agents_os_name.sql` — adds `os_name TEXT` + index to agents table
**Modified:**
- `projects/msp-tools/guru-rmm/docs/FEATURE_ROADMAP.md` — new OS Recognition & Display subsection added under Core Agent Features / Monitoring & Metrics
- `projects/msp-tools/guru-rmm/server/src/db/agents.rs` — `os_name: Option<String>` added to Agent, AgentResponse, AgentWithDetails structs; `update_agent_info_full()` gains 7th param
- `projects/msp-tools/guru-rmm/server/src/db/inventory.rs` — after hardware upsert, runs `UPDATE agents SET os_name` when `os_name` is Some
- `projects/msp-tools/guru-rmm/server/src/ws/mod.rs` — 3 call sites of `update_agent_info_full` updated to pass `None` for new os_name param
- `projects/msp-tools/guru-rmm/agent/src/inventory.rs` — `windows_build_to_version()` and `macos_version_to_name()` added; platform-specific OS collection updated
- `projects/msp-tools/guru-rmm/dashboard/src/api/client.ts` — `os_name: string | null` added to Agent interface
- `projects/msp-tools/guru-rmm/dashboard/src/pages/Agents.tsx` — OS column renders `agent.os_name ?? agent.os_type`
- `projects/msp-tools/guru-rmm/dashboard/src/pages/AgentDetail.tsx` — overview shows `agent.os_name ?? agent.os_type`
## Credentials & Secrets
None discovered or created this session.
## Infrastructure & Servers
- GuruRMM server: 172.16.3.30:3001, PostgreSQL gururmm db — migration 045 must be applied on next deploy
- Gitea: http://172.16.3.20:3000 — repo azcomputerguru/gururmm
## Commands & Outputs
```bash
# Spec commit
cd D:/claudetools/projects/msp-tools/guru-rmm
git commit # 80c6b34 spec: add SPEC-007 proper OS recognition & display
git push origin main
# Implementation commit
git commit # 1c05222 feat: SPEC-007 proper OS recognition & display
# Push rejected (CI commits ahead); resolved:
git fetch origin && git rebase origin/main && git push origin main
# Everything up-to-date (commit already pushed by coding agent)
# Submodule pointer updates
cd D:/claudetools
git commit # 362e0aa — spec submodule bump
git commit # 0502820 — implementation submodule bump
git push origin main
```
## Pending / Incomplete Tasks
- URGENT: Neptune SSL cert expires 2026-05-31 (6 days)
- URGENT: Western Tire SSL — verify AutoSSL on IX cPanel
- HIGH: Kittle WS2025 EVAL license, no backup, no firewall
- HIGH: Kittle-Design Ken inbox rule (potential active compromise)
- MEDIUM: migration 045 deploys automatically via Gitea webhook build pipeline — no manual action needed
- MEDIUM: Seed wiki/systems/neptune.md (removes last real broken backlink)
- LOW: Seed wiki/systems/beast.md (Discord bot host)
## Reference Information
- SPEC-007: `projects/msp-tools/guru-rmm/docs/specs/SPEC-007-os-recognition.md`
- Spec commit: 80c6b34 (azcomputerguru/gururmm)
- Implementation commit: 1c05222 (azcomputerguru/gururmm)
- Submodule bumps: 362e0aa, 0502820 (claudetools main)
- Migration: `server/migrations/045_agents_os_name.sql`
- Windows build table: 19045=Win10 22H2, 20348=Server 2022, 22621=Win11 22H2, 22631=Win11 23H2, 26100=Win11 24H2/Server 2025
- macOS name table: 15=Sequoia, 14=Sonoma, 13=Ventura, 12=Monterey, 11=Big Sur
- Code review verdict: APPROVED — no defects