Skip to content

Add configurable browser tab title (#1055) (replicates mxtommy/Kip #1077) - #63

Merged
mairas merged 4 commits into
mainfrom
replicate/pr-1077-configurable-tab-title
Jul 1, 2026
Merged

Add configurable browser tab title (#1055) (replicates mxtommy/Kip #1077)#63
mairas merged 4 commits into
mainfrom
replicate/pr-1077-configurable-tab-title

Conversation

@mairas

@mairas mairas commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Replicates upstream PR mxtommy/Kip#1077 ("Add configurable browser tab title (#1055)") by dillan.

Adds a persisted browserTabTitle app setting, a "Browser Tab" field under Settings > Display, and an effect in AppComponent that keeps document.title in sync via Angular's Title service — letting users running several instances tell their tabs apart.

Method: commit-by-commit cherry-pick (linear upstream history, original authorship preserved).

⚠️ Conflict resolution applied

  • src/app/core/services/settings.service.ts — Cherry-pick conflict in the profile-config init block. The fork loads isRemoteControl/instanceName from the per-device connectionConfig (not the profile), so those upstream blocks were deliberately removed here. Kept the fork's divergence and added only the new browserTabTitle init block.
  • src/default-config/config.blank.const.ts — Changed the default browserTabTitle from "KIP" to "SKip" so the fork's tab branding is preserved.
  • src/app/core/utils/browser-tab-title.util.ts — Rebranded the empty/whitespace fallback from 'KIP' to 'SKip'.
  • src/app/core/utils/browser-tab-title.util.spec.ts — Updated test expectations to the 'SKip' default.
  • src/app/core/services/settings.service.ts — Rebranded the BehaviorSubject default and init fallback from 'KIP' to 'SKip'.
  • src/app/app.component.ts — Rebranded the toSignal initialValue from 'KIP' to 'SKip'.
  • src/app/core/components/options/display/display.component.ts — Rebranded the form model default from 'KIP' to 'SKip'.
  • src/app/core/components/options/display/display.component.html — Rebranded UI copy and placeholder (KIP instancesSKip instances, Ex. Mast-KIPEx. Mast-SKip).

Without these branding changes the feature would override the fork's existing SKip tab title (set in index.html/manifest.json) with KIP.

Needs a build + review before merge.


This is an experimental replica carried in the fork for evaluation. package-lock.json was not regenerated (no install/build run); a build is required before merge.

dillan and others added 3 commits July 1, 2026 00:08
Adds resolveBrowserTabTitle() plus its spec. The stub returns the raw value, so
the tests fail on purpose: a blank/whitespace value should fall back to "KIP" and
a set value should be trimmed.
resolveBrowserTabTitle() now trims the value and falls back to "KIP" when blank.

Adds a persisted browserTabTitle app setting (mirrors the instanceName pattern in
SettingsService, defaulting to "KIP"), a "Browser Tab" field in Settings > Display,
and an effect in AppComponent that keeps document.title in sync via Angular's Title
service. Lets users running several KIP instances tell their tabs apart.
Preserve SKip's tab branding: the upstream #1055 feature drives
document.title and defaulted to 'KIP', which would override the
fork's 'SKip' title (index.html, manifest). Rebrand all defaults,
the resolver fallback, UI copy, and tests to 'SKip'.
@mairas mairas added the upstream-replica Replica of an upstream mxtommy/Kip PR label Jun 30, 2026
Brings the branch up to date with main. main's display.component.spec.ts
already carries the getBrowserTabTitle/setBrowserTabTitle stubs and the
current SettingsNotifications suite, which the branch's older spec lacked —
the source of the angular-vitest failure. No source changes needed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ETfeXXs8R5ciw6nGxGYj2C
@mairas

mairas commented Jul 1, 2026

Copy link
Copy Markdown
Contributor Author

Content review: accept — clean, one low

Read the settings plumbing, resolver util, and the app.component effect. Correctly wired: the effect syncs document.title, which is a text sink — verified nothing routes the value through an HTML context, so no injection. Config-migration default handled, effect is leak-free.

  • [low · design] the stored value isn't trimmed — only the rendered title is; a whitespace-only or padded value persists as-is.
  • [info · design] the setting lives in shared config, which partially undercuts the "tell multiple instances apart" purpose if instances share a config scope.

Otherwise clean and appropriately scoped.

(Resolution applied earlier: merged main to pick up the settings-mock stubs the branch's older spec lacked; CI green.)

@mairas
mairas merged commit ae2d394 into main Jul 1, 2026
13 checks passed
mairas added a commit that referenced this pull request Jul 1, 2026
Re-lands the trim fix from the content review of #63 (configurable tab
title): #63 merged at its pre-fix head, so this follow-up delivers it.
The setter persisted the raw value; only the resolver trimmed for display,
so a padded/whitespace-only tab title was stored verbatim. Trim on store
and normalize blank to '' (the resolver still falls back to the default).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ETfeXXs8R5ciw6nGxGYj2C
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

upstream-replica Replica of an upstream mxtommy/Kip PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants