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.tomlauthors, flatpak metainfo <developer>, winget locale Publisher:, punktfunk-host.issAppPublisher=, 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.
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.
"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.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Two independent, low-risk changes. Reviewable commit-by-commit.
1.
b0ec759f— capitalize "Punktfunk" in user-facing textThe 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.
Punktfunk Docs; the API reference title, meta description and branded-bararia-label; theBrandMark/WordmarkSVG accessible names.⭐ The web console already had these capitalized —
docs-site/src/components/{BrandMark,Wordmark}.tsxwere copied from it and had drifted. Worth diffing the two UIs against each other in future brand work.ConnectDialogs.kt,GamepadDialogs.kt), the connect-screen error banner (ConnectScreen.kt), the no-controller explainer (ControllersScreen.kt).--discoverprogress line.authenticate(). The grant is cached per-exe, so this string is display-only.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
punktfunkCLI binary, thepunktfunk://scheme, theLog.i("punktfunk", …)logcat tag, the[punktfunk]SDK console prefix, config paths (~/.config/punktfunk,%ProgramData%\punktfunk), the Windows PnP enumeratorw!("punktfunk"), TLS SNIServerName::try_from("punktfunk"), the_punktfunk._udpservice type,TENANT = 'punktfunk', andpunktfunk*package globs.The virtual monitor's EDID name was already
Punktfunk; onlypackaging/windows/README.mdmisquoted it.pf-win-displaydoc comments quote a measured(257, "punktfunk", HDMI)— recorded evidence, left alone.2.
e6bcac87— copyright holder isunom - 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/andpackaging/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 — bothinclude_str!the root files at compile time.Untouched by design:
unom(owner's call):Cargo.tomlauthors, flatpak metainfo<developer>, winget localePublisher:,punktfunk-host.issAppPublisher=, bothPKGBUILD# Maintainer:.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
ücorrectly encoded as\xc3\xbc(not Latin-1). Nothing in the tree asserts on the old copyright string.cargo fmt --all --checkpasses.docs-site/package.jsonstill validates as JSON.⚠️ Not build-verified:
docs-sitedoes not build standalone in this checkout (@unom/app-uiand@scalar/api-reference-reactare 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.