84 lines
5.5 KiB
Markdown
84 lines
5.5 KiB
Markdown
# 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 1–3 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.
|