fix(brand): capitalize "Punktfunk" in user-facing text; name the legal copyright holder #81

Merged
enricobuehler merged 2 commits from worktree-docs-title-casing into main 2026-08-06 21:33:39 +00:00
Owner

Two independent, low-risk changes. Reviewable commit-by-commit.

1. b0ec759f — capitalize "Punktfunk" in user-facing text

The docs site's page title read "punktfunk docs". Fixed that and swept the rest of the tree for the same defect: the brand is capitalized wherever it is shown to a human, and left lowercase wherever it is a technical identifier.

30 files, 44 lines.

  • docs-site — page title → Punktfunk Docs; the API reference title, meta description and branded-bar aria-label; the BrandMark/Wordmark SVG accessible names.
    The web console already had these capitalized — docs-site/src/components/{BrandMark,Wordmark}.tsx were copied from it and had drifted. Worth diffing the two UIs against each other in future brand work.
  • Android — 6 strings of live UI copy: the local-network permission dialog (ConnectDialogs.kt, GamepadDialogs.kt), the connect-screen error banner (ConnectScreen.kt), the no-controller explainer (ControllersScreen.kt).
  • Apple — the "No Hosts" empty-state text, and the fallback display name for a host that advertises no instance name.
  • Windows client — the --discover progress line.
  • KWin fake-input — the application name passed to authenticate(). The grant is cached per-exe, so this string is display-only.
  • THIRD-PARTY-NOTICES — shown in the apps' license screens. This file is generated, so the fix went into both generators (about.hbs, scripts/gen-third-party-notices.py) and was applied to the three checked-in outputs so they match what a regeneration now produces.

Prose under docs-site/content/** was already correct — a casing report about "the docs" was not a docs-only bug.

Deliberately left lowercase (technical identifiers): the punktfunk CLI binary, the punktfunk:// scheme, the Log.i("punktfunk", …) logcat tag, the [punktfunk] SDK console prefix, config paths (~/.config/punktfunk, %ProgramData%\punktfunk), the Windows PnP enumerator w!("punktfunk"), TLS SNI ServerName::try_from("punktfunk"), the _punktfunk._udp service type, TENANT = 'punktfunk', and punktfunk* package globs.

The virtual monitor's EDID name was already Punktfunk; only packaging/windows/README.md misquoted it. pf-win-display doc comments quote a measured (257, "punktfunk", HDMI) — recorded evidence, left alone.

2. e6bcac87 — copyright holder is unom - Enrico Bühler

"unom" alone is not the legal entity name. Updated the copyright line in all nine first-party license files: the root MIT/Apache pair plus the hand-maintained copies under clients/apple/…/Resources/, clients/decky/, packaging/windows/drivers/ and packaging/windows/pf-vkhdr-layer/.

No script syncs those copies (unlike THIRD-PARTY-NOTICES.txt), so each was edited directly. The Linux and Windows About screens pick this up automatically — both include_str! the root files at compile time.

Untouched by design:

  • All third-party license texts (Geist OFL, FFmpeg, VB-CABLE, the vendored pyrowave/Granite tree, KDE protocol XMLs, os-icon licenses) — other parties' copyrights.
  • Publisher / author / maintainer metadata, which is identity rather than license text and stays plain unom (owner's call): Cargo.toml authors, flatpak metainfo <developer>, winget locale Publisher:, punktfunk-host.iss AppPublisher=, both PKGBUILD # Maintainer:.
  • ⚠️ MSIX Publisher="{PUBLISHER}" (AppxManifest.xml:28) is a build-time placeholder that must equal the code-signing certificate subject — changing it breaks installation. It moves only when the cert does.

Verification

  • Commit 1 is provably case-only: lowercasing every added line and every removed line yields identical sets, so line lengths are unchanged and no formatter width rule can newly trigger.
  • Commit 2: all nine files decode as valid UTF-8, with ü correctly encoded as \xc3\xbc (not Latin-1). Nothing in the tree asserts on the old copyright string.
  • cargo fmt --all --check passes.
  • docs-site/package.json still validates as JSON.

⚠️ Not build-verified: docs-site does not build standalone in this checkout (@unom/app-ui and @scalar/api-reference-react are not installed locally; CI builds it). The docs-site edits are string literals inside existing JSX attributes and object literals, and the case-only proof above covers structural risk — but CI is the real gate here.

Two independent, low-risk changes. Reviewable commit-by-commit. ## 1. `b0ec759f` — capitalize "Punktfunk" in user-facing text The docs site's page title read **"punktfunk docs"**. Fixed that and swept the rest of the tree for the same defect: the brand is capitalized wherever it is shown to a human, and left lowercase wherever it is a technical identifier. **30 files, 44 lines.** - **docs-site** — page title → `Punktfunk Docs`; the API reference title, meta description and branded-bar `aria-label`; the `BrandMark`/`Wordmark` SVG accessible names. ⭐ The web console *already* had these capitalized — `docs-site/src/components/{BrandMark,Wordmark}.tsx` were copied from it and had drifted. Worth diffing the two UIs against each other in future brand work. - **Android — 6 strings of live UI copy**: the local-network permission dialog (`ConnectDialogs.kt`, `GamepadDialogs.kt`), the connect-screen error banner (`ConnectScreen.kt`), the no-controller explainer (`ControllersScreen.kt`). - **Apple** — the "No Hosts" empty-state text, and the fallback display name for a host that advertises no instance name. - **Windows client** — the `--discover` progress line. - **KWin fake-input** — the application name passed to `authenticate()`. The grant is cached per-exe, so this string is display-only. - **THIRD-PARTY-NOTICES** — shown in the apps' license screens. This file is generated, so the fix went into **both** generators (`about.hbs`, `scripts/gen-third-party-notices.py`) and was applied to the three checked-in outputs so they match what a regeneration now produces. Prose under `docs-site/content/**` was already correct — a casing report about "the docs" was *not* a docs-only bug. **Deliberately left lowercase** (technical identifiers): the `punktfunk` CLI binary, the `punktfunk://` scheme, the `Log.i("punktfunk", …)` logcat tag, the `[punktfunk]` SDK console prefix, config paths (`~/.config/punktfunk`, `%ProgramData%\punktfunk`), the Windows PnP enumerator `w!("punktfunk")`, TLS SNI `ServerName::try_from("punktfunk")`, the `_punktfunk._udp` service type, `TENANT = 'punktfunk'`, and `punktfunk*` package globs. The virtual monitor's EDID name was already `Punktfunk`; only `packaging/windows/README.md` misquoted it. `pf-win-display` doc comments quote a *measured* `(257, "punktfunk", HDMI)` — recorded evidence, left alone. ## 2. `e6bcac87` — copyright holder is `unom - Enrico Bühler` "unom" alone is not the legal entity name. Updated the copyright line in all **nine** first-party license files: the root MIT/Apache pair plus the hand-maintained copies under `clients/apple/…/Resources/`, `clients/decky/`, `packaging/windows/drivers/` and `packaging/windows/pf-vkhdr-layer/`. No script syncs those copies (unlike `THIRD-PARTY-NOTICES.txt`), so each was edited directly. The Linux and Windows About screens pick this up automatically — both `include_str!` the root files at compile time. **Untouched by design:** - All third-party license texts (Geist OFL, FFmpeg, VB-CABLE, the vendored pyrowave/Granite tree, KDE protocol XMLs, os-icon licenses) — other parties' copyrights. - Publisher / author / maintainer metadata, which is identity rather than license text and stays plain `unom` (owner's call): `Cargo.toml` `authors`, flatpak metainfo `<developer>`, winget locale `Publisher:`, `punktfunk-host.iss` `AppPublisher=`, both `PKGBUILD` `# Maintainer:`. - ⚠️ MSIX `Publisher="{PUBLISHER}"` (`AppxManifest.xml:28`) is a build-time placeholder that **must** equal the code-signing certificate subject — changing it breaks installation. It moves only when the cert does. ## Verification - Commit 1 is provably **case-only**: lowercasing every added line and every removed line yields identical sets, so line lengths are unchanged and no formatter width rule can newly trigger. - Commit 2: all nine files decode as valid UTF-8, with `ü` correctly encoded as `\xc3\xbc` (not Latin-1). Nothing in the tree asserts on the old copyright string. - `cargo fmt --all --check` passes. - `docs-site/package.json` still validates as JSON. ⚠️ **Not build-verified:** `docs-site` does not build standalone in this checkout (`@unom/app-ui` and `@scalar/api-reference-react` are not installed locally; CI builds it). The docs-site edits are string literals inside existing JSX attributes and object literals, and the case-only proof above covers structural risk — but CI is the real gate here.
enricobuehler added 2 commits 2026-08-06 21:20:42 +00:00
The docs site's page title read "punktfunk docs". Fixed that and swept the
rest of the tree for the same defect, capitalizing the brand wherever it is
shown to a human and leaving it lowercase where it is a technical identifier
(CLI/package names, `punktfunk://` scheme, PnP enumerator, TLS SNI, logcat
tag, config paths, CMS tenant id).

User-visible fixes:

- docs-site: page title -> "Punktfunk Docs"; API reference title, meta
  description and the branded bar's aria-label; the BrandMark/Wordmark SVG
  accessible names (the web console already had these capitalized -- the
  docs site had drifted from it).
- Android: six strings of live UI copy -- the local-network permission
  dialog (x2), the connect-screen error banner, and the no-controller
  explainer.
- Apple: the "No Hosts" empty-state text and the fallback display name for
  a host that advertises no instance name.
- Windows client: the `--discover` progress line.
- KWin fake-input: the application name passed to `authenticate()` (the
  grant is cached per-exe, so the string is display-only).
- THIRD-PARTY-NOTICES: fixed in both generators (about.hbs and
  gen-third-party-notices.py) and applied to the three checked-in outputs
  so they match what a regeneration now produces.

Every changed line differs from the original only by letter case, so line
lengths are unchanged and no formatter width rule is affected.
`cargo fmt --all --check` passes.
chore(license): name the copyright holder "unom - Enrico Bühler"
apple / swift (pull_request) Successful in 1m34s
apple / screenshots (pull_request) Skipped
ci / web (pull_request) Successful in 1m6s
ci / rust-arm64 (pull_request) Successful in 1m31s
ci / bun-nix (pull_request) Successful in 21s
ci / docs-site (pull_request) Successful in 1m23s
android / android (pull_request) Successful in 3m58s
ci / rust (pull_request) Successful in 8m28s
nix / flake (pull_request) Successful in 13m20s
windows-drivers / probe-and-proto (pull_request) Successful in 2m56s
windows-drivers / driver-build (pull_request) Successful in 10m19s
windows / build (aarch64-pc-windows-msvc) (pull_request) Successful in 18m19s
windows / build (x86_64-pc-windows-msvc) (pull_request) Successful in 24m1s
e6bcac8770
"unom" alone is not the legal entity name. Updated the copyright line in
all nine first-party license files -- the root MIT/Apache pair and the
hand-maintained copies under clients/apple, clients/decky,
packaging/windows/drivers and packaging/windows/pf-vkhdr-layer (there is
no script that syncs these, so each is edited directly).

The Linux and Windows clients' About screens pick this up automatically:
both `include_str!` the root LICENSE-MIT / LICENSE-APACHE at compile time.

Deliberately untouched:
- Third-party license texts (Geist OFL, FFmpeg, VB-CABLE, the vendored
  pyrowave/Granite tree, KDE protocol XMLs, the os-icon licenses) -- those
  are other parties' copyrights.
- Publisher/author/maintainer metadata, which is identity rather than
  license text and is reported separately for a decision.
enricobuehler merged commit f34f311c69 into main 2026-08-06 21:33:39 +00:00
enricobuehler deleted branch worktree-docs-title-casing 2026-08-06 21:33:58 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: unom/punktfunk#81