Files
felhom-controller/REPORT.md
T

84 lines
5.5 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.
# REPORT — v0.167.0: outlined logo + favicon (completes v0.166.0 Part 4)
**Date:** 2026-07-24 · **Deployed & verified live on guest 9201.** This is the follow-up that finishes
the mobile-nav task — Parts 13 shipped as **v0.166.0**; Part 4 (the outlined-logo swap) was gated then
and shipped now as **v0.167.0** once Viktor pushed the outlined asset.
## 1. Baselines
| Repo | consumed @ hash | version |
|------|-----------------|---------|
| felhom-controller | `dbd1ff0` (post-v0.166.0) → committed `e9a365e` | v0.166.0 → **v0.167.0** |
| felhom.eu (asset source) | live `main` = **`be9edb443cab1d2581fa022537e7113f45c3fd92`** ("updated logo") | — |
felhom.eu asset commit **consumed: `be9edb4`**`website/assets/logo.svg`, the text-outlined master.
## 2. What was wrong, and what shipped
Viktor ran Inkscape **Object→Path** and pushed. The pushed file rendered the wordmark as **17 real
`<path>` glyphs** (good) but still tripped the §3a gate because Inkscape left cruft:
- **2 empty `<text …/>` shells** (self-closed, zero glyph content) wrapping empty tspans, and
- **`style="…font-family:'Vremena Grotesk'/'M+ 2c'…"` copied onto the outlined `<path>`s** (inert on a
path, but carries the font name → 7 `font-family` total).
A search for `svg:text` missed all of it — the elements are `<text>` (default namespace, no `svg:`
prefix). The correct needles are `<text` and `font-family` (what the gate checks).
Per your decision ("strip the cruft, ship now"), CC did **node-level cleanup only — no text-to-path
conversion** (glyphs already outlined by Viktor):
- **`FelhomLogoSVG`** replaced with the outlined master; via an lxml DOM pass removed the 2 `<text>`
elements, stripped `font-*`/`-inkscape-font-specification`/`text-align`/`text-anchor` declarations from
every `style` (kept `fill`/`stroke`/`stroke-width`/gradients), and dropped the editor-only
`<sodipodi:namedview>`. **Glyph `d`-geometry and palette untouched.**
- **`FelhomFaviconSVG`** vestigial empty `<text>` nodes + their `font-family` removed (cloud icon only).
Both constants now contain **zero `<text`, zero `font-family`, zero backticks** (safe in the Go raw
string). Served by the unchanged handlers (`serveLogoHandler`/`serveFaviconHandler` — note they serve a
hub-synced file first and fall back to the constant; on 9201 the constant is what's live).
## 3. viewBox — unchanged (Scenario E requirement)
| Constant | old viewBox | new viewBox | paths | palette |
|----------|-------------|-------------|-------|---------|
| FelhomLogoSVG | `0 0 645.30703 408.36403` | **`0 0 645.30703 408.36403`** (identical) | 17 | `#ffffff` glyphs, `#008ddf` `.eu`, `#051343` artwork, 14 gradients |
| FelhomFaviconSVG | `0 0 437.307 296.36403` | **`0 0 437.307 296.36403`** (identical) | 11 | cloud icon only |
## 4. Files modified · commits
- `controller/internal/web/templates.go` — both SVG constants (bodies + doc comments).
- `controller/internal/web/mobile_nav_test.go` — added `TestLogoSVG_NoLiveText` (the v0.166.0 gated
red-proof, now committed green).
- `CHANGELOG.md`, `CONTEXT.md`, `REPORT.md`.
- Commit `e9a365e` (implementation + docs) + this REPORT commit. Clean tree, HEAD == origin/main.
## 5. Tests + RED proof
- `TestLogoSVG_NoLiveText`: asserts both constants free of `<text`/`font-family`. **RED proof recorded**
(v0.166.0 Phase 1, 2026-07-24): ran against the pre-swap constants → FAILED (`FelhomLogoSVG` and
`FelhomFaviconSVG` both contained `<text` + `font-family`). Now PASS.
- Full repo green: `go build ./... && go vet ./... && go test ./...` — 25 pkgs pass, 0 fail. All 3
mechanical gates (template_id / emoji / mojibake) OK. Cleaned SVGs validated well-formed (lxml).
- The v0.166.0 suite (mobile drawer / CSS strip-removed / no-customer-name / versioned URLs / nav
accordion invariants) still passes unchanged.
## 6. Deploy + live validation (guest 9201)
Built `felhom-controller:0.167.0` (145M) from the clean pushed tree; deployed via the bootstrap
service → `Up (healthy)`. Endpoint-level checks (in-guest curl to `172.17.0.2:8080`):
| Surface | Assertion | Result |
|---------|-----------|--------|
| `/static/felhom-logo.svg` | 0 `<text`, 0 `font-family`, 17 `<path>`, viewBox `0 0 645.30703 408.36403` | ✅ |
| `/static/favicon.svg` | 0 `<text`, 0 `font-family`, 11 `<path>`, viewBox `0 0 437.307 296.36403` | ✅ |
| `/login` | logo URL `felhom-logo.svg?v=0.167.0` — cache-bust now carries the new version, so CF re-fetches the outlined logo (defeats the 4h edge cache) | ✅ |
Confirms the embedded constant (not a stale hub-synced file) is what serves on 9201.
## 7. Awaiting Viktor — visual acceptance
- **Android/desktop visual check of the outlined wordmark** in the sidebar, top-bar (mobile), login
page, and browser-tab favicon — the endpoint checks prove the bytes are font-free and geometrically
valid, but final "looks right" is your eyes. (Mobile browsing itself already confirmed good by you.)
## 8. Observations (out of scope — documented only)
- **Website + hub still serve their own non-outlined logo copies** (`felhom.eu` website `logo.svg`
consumers, the hub's `felhom-logo.svg`, `logo_favicon*.svg`). Propagating the outlined master there is
a separate follow-up in those repos.
- **`serveLogoHandler` prefers a hub-synced file** over the embedded constant — if a synced
`felhom-logo.svg` ever lands on a guest's disk it would override this constant; worth keeping in mind
when the outlined asset is propagated hub-side.
- `login.html`'s **stylesheet** link is still unversioned (`/static/style.css`, no `?v=`) — minor,
carried over from v0.166.0.