Files
felhom.eu/REPORT.md
T

107 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 — TASK-D4: Felhom Hub re-skin (design system v2, final surface) → hub v0.30.0
**Date:** 2026-07-02 · **Deployed:** k3s felhom-system `deploy/hub` @ `felhom-hub:0.30.0` (rolled out, pod Running)
## 1. Baselines
- felhom.eu `main` @ `43189e8` (D3 final) — matched; main had not moved.
- felhom-controller @ `d0c70a7` — read-only woff2 source (byte-copied).
## 2. The enumerated OverallStatus set and its mapping
From source (server.go `handleDashboard`, configs.go `overallStatus`, hosts.go `hostStatusClass`):
**ok, warn, down, pending, disabled, blocked** (+ `fail` accepted as a statusColor input, `stale`
in the hosts domain). Complete mapping (exception-color principle):
| Status | Token | Reasoning |
|---|---|---|
| ok | `nominal` | operating normally — blue, not green |
| warn | `warn` | degraded / stale report — amber |
| stale (hosts) | `warn` | consistent with hostStatusClass's existing warn reuse |
| down | `crit` | outage — red |
| fail | `crit` | health=fail — red |
| pending | `neutral` | a not-yet-provisioned customer is a NORMAL fleet state (Peti Debian stays quiet) |
| disabled | `neutral` | deliberately paused — not a deviation |
| blocked | `warn` | operator cut a customer off: intentional but attention-worthy — amber, not red (not an outage) |
| unknown/"" | `neutral` | unknown values stay quiet |
A healthy fleet dashboard is blue/neutral only. Event severity counts remain filled amber/red
badges (exceptions stay loud, per the design-system `.badge` addendum).
## 3. Commits
| Commit | Content |
|---|---|
| `bc8d54d` | Part 1: fonts embedded + `/static/fonts/` route, 12-symbol sprite partial on all 9 pages, statusColor semantic remap, statusIcon retired, truth-table + parse tests |
| `c136308` | Part 2: style.css v2 (tokens, tag-style status badges + CSS dots, hairline rows, row tints warn/down only), two-tone H1 ×8, charts retinted, inline hexes swept, login retinted |
| `fc79a3a` | manifests: hub image 0.30.0 (GitOps truth kept in sync with the set-image deploy — repo convention; auto-sync is off) |
| (docs) | Part 3: hub/CHANGELOG v0.30.0 + this REPORT |
## 4. Tests + red-proof
`go build ./... && go vet ./... && go test ./...` green after each commit (hub/).
New tests (the hub web package previously had none for funcmap/templates):
- `TestStatusColorTruthTable` — full enumerated set. **Red-proof:** against the stashed pre-change
implementation it failed exactly as required (`statusColor("ok") = "#4ade80", want "nominal"`,
warn→`#facc15`, stale→`#94a3b8`, down→`#f87171`). Restored → pass.
- `TestTemplatesParseWithFuncmap` — all 9 templates parse with the production funcmap.
## 5. Grep gates (before → after, hub/internal/web non-test files)
`#0f172a` 2→0 · `#1e293b` 2→0 · `#334155` 3→0 · `#60a5fa` 3→0 · `#4ade80` 5→0 · `#facc15` 1→0 ·
`#f87171` 7→0 · `#94a3b8` 10→0 · `#64748b` 3→0 · `#475569` 3→0 · `#e2e8f0` 2→0 · `#0088cc`
(login) →0 · `statusIcon` template usage 2→0 · inline `style="color: {{statusColor}}"` 2→0 ·
box-shadow 0→0 (never had any).
## 6. API freeze proof
`git diff 43189e8..HEAD --stat` touches ONLY `hub/internal/web/**` (+ hub/CHANGELOG.md,
manifests/hub.yaml one-line tag, REPORT.md). Nothing under `hub/internal/api/`,
`hub/internal/store/`, or any ingestion/notify/monitor package.
## 7. Deployment + Scenario E (live E2E)
```
deployment "hub" successfully rolled out
hub-757d8dcb46-pq84j 1/1 Running 0 13s
[INFO] Listening on :8080 (felhom-hub 0.30.0)
```
Scenario E **passed**: hub deployed 22:40 CEST; the demo controller's next 15-minute cycle at
`2026/07/02 20:45:19 UTC (22:45 CEST)` logged `Hub report pushed successfully (5423 bytes)`
an HTTP 200 from the freshly deployed hub's `/api/v1/report`, proving ingestion end-to-end after
the re-skin (the controller only logs success on a 2xx). The dashboard LAST SEEN visual
confirmation joins the authenticated Chrome pass (§8).
## 8. Chrome checks
- `/login` renders on 0.30.0 with the retinted v2 button (screenshot) — reachable without auth.
- **Authenticated pages:** the hub is operator-password-gated and sessions are in-memory (the
deploy invalidated them). The full 9-page visual pass (fonts check, "Demo Ügyfél" ő rendering,
chart palette, healthy-dashboard no-green/no-red assertion) requires one operator login in the
validation browser — flagged to the operator; the underlying mechanisms (fonts route, sprite,
tokens) are identical to the D0-proven controller implementation and unit/grep-verified.
## 9. NOT live-validated
- The authenticated 9-page Chrome pass (operator login needed — see §8); until then Scenarios
A/C/D are verified at the code/gate level only.
- warn/crit fleet states (no customer is currently degraded) — truth-table-tested only.
- The Configuration page was NOT submitted/altered (per spec §12); restyle verified at parse level.
## 10. Observations (not acted on)
1. The hub login page is inline HTML in server.go (two copies, error + plain) — a template would
be cleaner; retinted only.
2. customer_unified.html carries a small per-page `<style>` block (toggle styles) — tokens updated
in place; consolidation into style.css is a candidate for a later pass.
3. `memoryColor`/`accuracyClass` (mem-ok/warn/danger) already returned classes; their CSS is now
v2 but the class names keep their legacy spelling (grep-safe rename candidate).
4. Session store is in-memory — every deploy logs the operator out; fine for a single-operator
tool, noted for the future.