# felhom.eu — task reports > **Overwrite** this file with a summary of the most recent task only (uniform with the other repos; not cumulative). The cumulative hub history lives in [hub/CHANGELOG.md](hub/CHANGELOG.md); the scripts history lives in [scripts/CHANGELOG.md](scripts/CHANGELOG.md). --- # REPORT — hub v0.31.0 critical-severity fix + Felhom skills + CLAUDE.md refresh (consolidated) **Date:** 2026-07-03 · **Class:** implementation (hub v0.31.0, deployed) + docs/skills across all repos ## 1. Baselines & commits All four repos matched the task's expected baselines (pulled clean). | Repo | Baseline | Commits pushed to `main` | |---|---|---| | felhom.eu | `d331eb26d1` | `b5f0050` (fix+tests+REUSE), `4a18306` (manifest→0.31.0), `ad61e96` (render test), + the docs/skills commit carrying this REPORT | | felhom-controller | `eda33400da` | `a518023` (CLAUDE.md refresh) | | felhom-agent | `2a024b6039` | `3e760a5` (CLAUDE.md refresh) | | app-catalog-felhom.eu | `c5a3d1b15b` | `15cdf7b` (CLAUDE.md expansion) | ## 2. Part 1 — hub v0.31.0 (the critical-severity fix) **Change:** `handleEvent` severity switch gains `"critical"` (unknown values still coerce to `"info"`, exact-match lowercase); `severityLabels["critical"] = "Kritikus hiba"` added; dashboard consumer gains `EventCriticals`; critical badge renders FIRST in dashboard + customer-page count chains; `style.css` defines the previously-referenced-but-undefined `.severity-critical` (`--crit` tokens) and `.severity-ok` (neutral). Frozen legacy `/notify` path and `allowedEventTypes` untouched. **Tests (new `hub/internal/api/event_test.go` — first tests on /event):** - A: critical preserved to store — **companion red-proof run:** with the one-line fix reverted the test FAILED with `stored severity = "info", want "critical"`; fix restored → PASS. - B: severity `"banana"` → stored `"info"`. C: unknown event_type → 400 + store empty. Auth: 401. - D: `TestTemplates_DashboardCriticalBadge` (render_test.go) asserts the rendered HTML contains the `severity-critical` count badge ordered before the error badge. **Method note:** UI verification used the Go render test — Chrome verification stopped at the operator login (password entry is out of CC's scope). - Green gate: `go build ./... && go vet ./... && go test ./...` — all green. **Deploy (GitOps):** image `felhom-hub:0.31.0` built+pushed on 180; `manifests/hub.yaml` bumped; ArgoCD app `felhom` hard-refresh + sync → `Synced`/`Healthy`, rollout complete, pod image `...felhom-hub:0.31.0`, clean startup logs. **Live probe (real pipeline):** POSTed one `event_type:"test"`, `severity:"critical"` event from guest 9201 using its own controller.yaml credentials (key never echoed — length-only). Result: HTTP 200; hub log `Event from demo-felhom: test (critical)` (stored severity critical, not info); dispatcher sent the operator email (`Test email sent to nagyfenyvesi.viktor@gmail.com`). **REUSE.md** §1 gotcha + §3 trap row updated in the same commit as the fix; `reuse_refs_check.py` → `OK [felhom.eu]: 31 cited paths, all exist`. ## 3. Part 2 — skills Three skills authored in `felhom.eu/skills/` (each SKILL.md ≤160 lines, pushy trigger descriptions): `felhom-build-deploy`, `felhom-ui-design`, `felhom-testing`. Content verified against live source/infra before writing (see §5). New `scripts/install_skills.py`: idempotent, junction-first (`mklink /J`) with copy fallback + re-run reminder. **Install mode: JUNCTION** — created for all three; second run detected them and no-op'd. **Discovery (Scenario E):** fresh `claude -p` session listed all three: ``` felhom-build-deploy felhom-testing felhom-ui-design ``` Bonus trigger probe: "which skill to deploy a new hub version?" → answered `felhom-build-deploy` with the correct first command (`./build.sh --push` on 180). ## 4. Part 3 — CLAUDE.md refresh Standing rule adopted everywhere: **CLAUDE.md carries no version-pinned current state** (that lives in CONTEXT/CHANGELOG/REUSE); deep runbooks live in the skills, CLAUDE.md keeps a summary table + pointer. | File | Diffstat | Headlines | |---|---|---| | felhom-controller/CLAUDE.md | +119/−294 (338→~160 lines) | full 30-package map (was 7); stale `/opt/docker` demo deploy replaced with verified 9201 bootstrap flow; hub build section deleted; patterns pruned to 6 invariants | | felhom-agent/CLAUDE.md | +86/−71 | "Current: v0.31.0" narrative + slice history deleted (30 versions stale); layout completed (+8 packages, opsign); deploy facts re-verified on felhom-pve | | felhom.eu/CLAUDE.md | +73/−58 | "Hub — current state (v0.7.x)" (23 versions stale) → version-free architecture section; GitOps rules kept incl. live-image-lag note; skills section added | | app-catalog CLAUDE.md | +26/−5 | stub → ~30-line proper file (purpose, deploy contract, pointers) | | E:\git\CLAUDE.md (local) | +8 | Skills section only | ## 5. Commands/facts re-verified against live infra (stale findings) - Guest 9201 deploy mechanism confirmed live (`/etc/felhom-controller-image` = 0.98.3 tag, `felhom-controller-bootstrap.service` enabled, container healthy) — the OLD controller CLAUDE.md still documented the pre-re-platform `/opt/docker` compose deploy for node 1: **stale, replaced**. - Agent service confirmed on felhom-pve: `User=felhom-agent`, `ExecStart=/usr/local/bin/felhom-agent --config /etc/felhom-agent/agent.json`, live 0.61.0 — the OLD agent CLAUDE.md claimed v0.31.0 current: **stale, removed**. - Build dirs on 180 confirmed: `~/build/{felhom-agent,felhom-controller,felhom-hub}` + `~/git` clones; Go present. - Design tokens confirmed byte-identical across website site.css / hub style.css / controller style.css `:root` blocks (values inlined in the ui-design skill). - Hub GitOps flow re-verified by executing it (this deploy). Red-proof citation (`dispatcher_test.go` ~L27–49) verified in source. - Website displays no hub version anywhere (checked) — no website change needed. ## 6. Observations (noticed, NOT acted on) - The hub severity badge classes predating this task (`.severity-error/-warning/-info`) use legacy raw hexes, not the v2 `--warn/--crit` tokens — left alone per the no-restyle rule; a token migration is a candidate D-series follow-up. - The hub login page appears unstyled relative to the v2 design system (default-blue button, white background) — pre-existing, out of scope. - `manifests/felhom.secret.yaml` inline credentials (from the REUSE report) remain an open operator follow-up. - The controller currently emits no `critical`-severity events; the fix future-proofs the channel (hub-internal `host_disk_critical`/`storage_fill_critical` already flow at critical severity — they bypass ingest).