Files
felhom-controller/REPORT.md
T

6.0 KiB
Raw Blame History

REPORT — v0.167.x: outlined logo + favicon + centered logo (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 as v0.167.0 once Viktor pushed the outlined asset.

v0.167.1 (post-acceptance tweak): .sidebar-logo gained margin: 0 auto so the logo is horizontally centered in the header (was left-aligned) — one CSS line, applies to the desktop sidebar and the mobile drawer alike; pinned by TestSidebarLogo_Centered (red-proof verified). Deployed 0.167.1 to 9201 (Up healthy); served CSS confirms .sidebar-logo { margin: 0 auto 0.25rem; }. The outlined-logo detail below (v0.167.0) is unchanged.

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: be9edb4website/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.