The scan was surfacing every Proxmox container/host as a 'new' device. Filter
the scan against the network_hosts inventory and the Proxmox guest OUI so the
devices band stays IoT/personal-only, per the spec.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Persistent MAC-keyed lan_devices store fed by an hourly arp-scan on CT 311;
diffs new vs known, mirrors the services discovered→promote flow for naming/
editing. Upsert-by-MAC keeps the table bounded. Borrows decoupled-scanner +
MAC-identity lessons from scanopy.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ARP/nmap rescan (2026-06-08) attaches real MACs to the devices band and shows
them in the UI. Reclassifies two flagged "unknowns": .13 = Orbi mesh satellite
(BC:A5:11:.. Netgear; the uhttpd UI made it look like a rogue OpenWrt box) →
Network; .171 = Galaxy Tab S4 (randomized MAC) → Personal. Remaining flags are
.15 (ASUSTek, needs ID) and .34/.35/.51 (offline).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Void 1 (CT 301, .11) is retired/destroyed; remove its inventory seed row so
fresh installs don't list a dead host. Live row already deleted; the migrate
runner is filename-tracked so 023 won't re-run on existing DBs.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Void 2 reaches GA. Void 1 (CT 301) was stopped, fully backed up (vzdump +
off-CT data tarball), and destroyed; CT 310/311 renamed void-db/void-app;
the legacy void1 registry tile removed.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This work (network_hosts inventory + infra_audit MCP tool, /api/cluster +
Sacred Valley cluster card, topbar cluster-health pill + SW self-heal) was
built in an earlier session and DEPLOYED to CT 311 as alpha.24–26, but was
never committed to git — prod was running code absent from the repo. Commits
it as-is (already prod-validated) so git matches the live state, and restores
its alpha.24/25/26 CHANGELOG entries. Files are disjoint from the fold-in
work; both now ship together under alpha.27.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
13 tasks across 3 phases: CF/Traefik provisioning for aiusage.hynesy.com,
Void rail+embed views (TDD), and Phase-1 timelapse restyle.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
A second vitest environment spins up a parallel worker pool that collides with the
DB-backed tests on the shared void_test database (fileParallelism only serializes
within one pool). Provide the DOM via jsdom directly instead.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds a `kind` column to spaces ('project' default, 'docs' for Wiki).
Docs spaces skip projects/tasks fetches and render only the page tree.
Sidebar caret for docs spaces expands to top-level pages (#/page/:id).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Split long page text into 1500-char chunks before calling Ollama, then
mean-pool the per-chunk vectors into one page vector. Removes the hard
6000-char slice that still caused 500s on dense markdown/table pages.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add position column to pages (migration 020), update listBySpace to ORDER BY position, title,
expose position in update(), add to patchSchema, and replace the space view flat table with a
tree renderer grouping pages by parent_id under h4 section headers.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Version + changelog were left at alpha.18 (the cutover) while four
subsequent changes shipped to prod. Bump to alpha.19 and document:
GPU->CPU Whisper fallback + in-container driver, Ollama VRAM unload
before STT, mobile chat Send button, Chaptarr in the service registry.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Chaptarr (Readarr fork, ebooks + audiobooks) now runs on the mediastack
(CT 100), routed at chaptarr.hynesy.com. Added to the media group; probes
healthy. Source-of-truth services.json + inserted into prod monitored_services.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Whisper (CT 311) and Ollama (CT 102) share one A2000. Before loading
Whisper on CUDA, ask Ollama to unload its models (GET /api/ps then POST
/api/generate keep_alive:0) and wait for the card to clear, so the GPU
load has headroom. Best-effort and stdlib-only; Ollama reloads
cooperatively, and the existing CUDA->CPU fallback covers any failure.
Toggle via OLLAMA_FREE_BEFORE_STT; endpoint via OLLAMA_URL.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>