fix(ui-14): unify index.html <title> with manifest name — closes Finding #2#119
Merged
Conversation
…ing #2 Phase-4 dogfood Finding #2 (Cosmetic, Low): PWA standalone window title bar rendered "Karasu UI" while the manifest identity (`name` + `short_name`) is both sealed at "Karasu" per §3-A. The OS title bar and the launcher tile disagreed on what to call the app. Operator picked path 1 of the two paths offered in the dogfood log (unified identity). `src/karasu/ui/static/index.html` line 8 now reads `<title>Karasu</title>`. The other static HTML titles (login.html, design-system.html, offline.html) were already consistent with the manifest convention; no ripple changes needed. Tests: - `tests/test_ui_server.py::test_index_html_served_at_root` — existing route-wired assertion updated in lockstep with the HTML change. - `tests/test_ui_manifest.py::test_index_html_title_matches_manifest_name` — NEW cross-check (Layer 2 identity grouping) that parses index.html, extracts the `<title>` content, and asserts it equals `manifest["name"]`. Catches any future drift between the OS window chrome and the launcher tile at test time, the same way the existing `test_tokens_css_bg_0_matches_manifest` catches color drift between tokens.css and the manifest. No brief amendment needed — the UI-14 brief never sealed `<title>`. Tests: 60/60 in the affected files (manifest 19/19 + ui_server 41/41 of non-Windows-CRLF tests); 1 pre-existing Windows-only CRLF failure in test_ui_server.py is unrelated and also fails on main. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
name+short_name) is sealed at "Karasu" per §3-A. Operator picked path 1 of the two paths offered in the dogfood log: unified identity, drop the "UI" suffix.Files
src/karasu/ui/static/index.html—<title>Karasu UI</title>→<title>Karasu</title>. The other static HTML titles (login.html,design-system.html,offline.html) were already consistent with the manifest convention; no ripple needed.tests/test_ui_server.py::test_index_html_served_at_root— existing route-wired assertion updated in lockstep.tests/test_ui_manifest.py::test_index_html_title_matches_manifest_name— NEW cross-check in the Layer 2 identity grouping that parses index.html, extracts the<title>content, and asserts it equalsmanifest["name"]. Same pattern as the existingtest_tokens_css_bg_0_matches_manifestcross-check between tokens.css and the manifest.docs/phase-4-dogfood.md— Finding ci: add GitHub Actions workflow running pytest on push and PRs #2 marked resolved with path-1 rationale.What's NOT in this PR
screenshots[]) — operator decided to honor the original dogfood deferral. The shell empty-state is minimalist and the preview value in the install dialog is currently low; revisit when there are visuals worth showing.<title>. The cross-check test is the new binding.Relation to other Phase 4 PRs
Independent of PR #116 (
origin_matches), PR #117 (manifestid: "/"), and PR #118 (VAPID docs). The newINDEX_HTML_PATHconstant intest_ui_manifest.pydoesn't conflict with PR #117's Layer 2.5 grouping; landing order does not matter.Test plan
pytest tests/test_ui_manifest.py::test_index_html_title_matches_manifest_name— passespytest tests/test_ui_server.py::test_index_html_served_at_root— passestest_valid_asset_under_static_dir_is_servedis unrelated (also fails on main).🤖 Generated with Claude Code