fix(website): neutral wording for every game name in players' issue titles, so they can't block deployment #731

Merged
HumanBean merged 1 commit from HumanBean/Longshot:fix/website-issue-titles into main 2026-11-15 18:25:46 +00:00
Owner

Type: fix · Risk: low · Tested on: Linux (the wording rules replayed by hand; no Node here) · Needs: the website's npm run build && npm run check (CI or any PC with Node 24)

Why

longshot.magicbean.dev hasn't updated since the newest settings and help pages were merged: every deployment fails at the last step. The site check refuses to publish while the progress feed shows the game's names, and the feed takes issue titles from the forge exactly as players type them. Two open issues name a river in the game without the apostrophe the wording rules expected, #603 and #615, so the check fails on them and the site stays as it was. Any future title with a name the rules don't know would do the same.

How to reproduce

Seen on: the website workflow, run https://git.magicbean.dev/MagicBeanDev/Longshot/actions/runs/15309 (main @ 5274fb72)
Settings and switches: defaults
Steps: cd website && npm ci && npm run build && npm run check while issue 603 or 615 is open
Expected: the check passes and the site deploys
Actual: Progress issue:603: game branding remains in public copy, the same for 615, and the job fails before deploying (astro build itself completes)

What changed

The wording rules now cover the names players actually type, and anything the rules still miss is replaced by "in-game" instead of blocking the deployment. The list of names the check rejects moves next to the rules, so the two read the same list.

  • website: publicGameText() in website/src/lib/public-copy.ts:
    • "Zora River(s)", "Zora's Domain" and the like, with or without the apostrophe, become "the water region";
    • Zora, Goron, Ganon(dorf) and Deku on their own get neutral words;
    • the last rule replaces any remaining match of the check's list with "in-game".
  • website: the list is now GAME_BRANDING in public-copy.ts, and website/scripts/check-site.ts imports it instead of keeping its own copy. The page-prose check is unchanged, so hand-written page text that names the game still fails the build.
  • website: a test in website/tests/public-copy.test.ts: the two issue titles come out as neutral text, and none of a set of names (Zora River, Gorons, Ganondorf, lowercase navi, EPONA, …) leaves anything the check matches.
  • docs: website/README.md: the list and the catch-all.

Measurements

Verdict: Nothing to measure: a fix to the website's text rules, checked by its tests.

Flags and settings

None

Testing

Tested: The rule chain from public-copy.ts, replayed with Python's re (the same patterns) on the two issue titles, the new test's names and the existing tests' expected strings. Every output is free of the check's names, and the existing tests' expected outputs are unchanged (for example "Hyrule, then Hyrule Field and Hyrule Castle" and "Auto, Switch, Xbox"). Nothing was run on the author's PC, and Node wasn't available on the lab.

Not tested: node --test website/tests/*.test.ts and npm run check under Node; the full tests/run_all.py (nothing outside website/ changed).

Must be tested:

  • CI or any PC with Node 24, by hand: cd website && npm ci && npm run build && npm run check, expecting "Site check passed" and no Progress issue: lines while 603 and 615 are open. After merge, the website workflow on main must deploy, and https://longshot.magicbean.dev/settings/ must show "Custom output size" and "Walk".

Risks

What could break: A title with a game name now shows "in-game" in its place on the progress page, which can read oddly ("in-game Temple"). The original title is still on the forge, one click away.
Turning it off: revert the commit.
Compatibility: Nothing changes for a player's game; only the website's text.

Checklist

Everyone

  • One topic.
  • The title is a Conventional Commit (type(scope): description) of the status line's type.
  • Why gives the reason plainly and links the issues that fit (the tracker searched).
  • Measurements has a verdict, or one line saying why there is nothing to measure.
  • Testing names what was tested, what wasn't, and what must still be tested, where and how.
  • Rebased on current main.
  • python -I -B tests/run_all.py passes (any failure that also fails on main is named). (not run: left to CI; nothing outside website/ changed)
  • No game files, dumps, build output or generated files.
  • third_party/ untouched (a new folder with a PROVENANCE.md instead).
  • The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled.

When it applies

  • AI assistance recorded with Assisted-by: / Co-Authored-By: trailers.
  • A game-free test added for the fix, failing on main and passing here. (added and fails on main by its first assertion; not yet run under Node)
  • Docs updated.

🤖 Generated with Claude Code

https://claude.ai/code/session_017vw8e3MfaADZobPGhWJk77

**Type:** fix · **Risk:** low · **Tested on:** Linux (the wording rules replayed by hand; no Node here) · **Needs:** the website's `npm run build && npm run check` (CI or any PC with Node 24) ## Why longshot.magicbean.dev hasn't updated since the newest settings and help pages were merged: every deployment fails at the last step. The site check refuses to publish while the progress feed shows the game's names, and the feed takes issue titles from the forge exactly as players type them. Two open issues name a river in the game without the apostrophe the wording rules expected, https://git.magicbean.dev/MagicBeanDev/Longshot/issues/603 and https://git.magicbean.dev/MagicBeanDev/Longshot/issues/615, so the check fails on them and the site stays as it was. Any future title with a name the rules don't know would do the same. ## How to reproduce **Seen on:** the website workflow, run https://git.magicbean.dev/MagicBeanDev/Longshot/actions/runs/15309 (main @ 5274fb72) **Settings and switches:** defaults **Steps:** `cd website && npm ci && npm run build && npm run check` while issue 603 or 615 is open **Expected:** the check passes and the site deploys **Actual:** `Progress issue:603: game branding remains in public copy`, the same for 615, and the job fails before deploying (`astro build` itself completes) ## What changed The wording rules now cover the names players actually type, and anything the rules still miss is replaced by "in-game" instead of blocking the deployment. The list of names the check rejects moves next to the rules, so the two read the same list. - website: `publicGameText()` in `website/src/lib/public-copy.ts`: - "Zora River(s)", "Zora's Domain" and the like, with or without the apostrophe, become "the water region"; - Zora, Goron, Ganon(dorf) and Deku on their own get neutral words; - the last rule replaces any remaining match of the check's list with "in-game". - website: the list is now `GAME_BRANDING` in `public-copy.ts`, and `website/scripts/check-site.ts` imports it instead of keeping its own copy. The page-prose check is unchanged, so hand-written page text that names the game still fails the build. - website: a test in `website/tests/public-copy.test.ts`: the two issue titles come out as neutral text, and none of a set of names (Zora River, Gorons, Ganondorf, lowercase navi, EPONA, …) leaves anything the check matches. - docs: `website/README.md`: the list and the catch-all. ## Measurements **Verdict:** Nothing to measure: a fix to the website's text rules, checked by its tests. ### Flags and settings None ## Testing **Tested:** The rule chain from `public-copy.ts`, replayed with Python's `re` (the same patterns) on the two issue titles, the new test's names and the existing tests' expected strings. Every output is free of the check's names, and the existing tests' expected outputs are unchanged (for example "Hyrule, then Hyrule Field and Hyrule Castle" and "Auto, Switch, Xbox"). Nothing was run on the author's PC, and Node wasn't available on the lab. **Not tested:** `node --test website/tests/*.test.ts` and `npm run check` under Node; the full `tests/run_all.py` (nothing outside `website/` changed). **Must be tested:** - CI or any PC with Node 24, by hand: `cd website && npm ci && npm run build && npm run check`, expecting "Site check passed" and no `Progress issue:` lines while 603 and 615 are open. After merge, the website workflow on main must deploy, and https://longshot.magicbean.dev/settings/ must show "Custom output size" and "Walk". ## Risks **What could break:** A title with a game name now shows "in-game" in its place on the progress page, which can read oddly ("in-game Temple"). The original title is still on the forge, one click away. **Turning it off:** revert the commit. **Compatibility:** Nothing changes for a player's game; only the website's text. ## Checklist ### Everyone - [x] One topic. - [x] The title is a Conventional Commit (`type(scope): description`) of the status line's type. - [x] Why gives the reason plainly and links the issues that fit (the tracker searched). - [x] Measurements has a verdict, or one line saying why there is nothing to measure. - [x] Testing names what was tested, what wasn't, and what must still be tested, where and how. - [x] Rebased on current `main`. - [ ] `python -I -B tests/run_all.py` passes (any failure that also fails on `main` is named). (not run: left to CI; nothing outside `website/` changed) - [x] No game files, dumps, build output or generated files. - [x] `third_party/` untouched (a new folder with a `PROVENANCE.md` instead). - [x] The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled. ### When it applies - [x] AI assistance recorded with `Assisted-by:` / `Co-Authored-By:` trailers. - [ ] A game-free test added for the fix, failing on `main` and passing here. (added and fails on main by its first assertion; not yet run under Node) - [x] Docs updated. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_017vw8e3MfaADZobPGhWJk77
fix(website): neutral wording for every game name in players' issue titles, so they can't block deployment
Some checks failed
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 12s
CI / Workflow lint (actionlint) (pull_request) Successful in 18s
Guide screenshots / Guide images and local UI source review (pull_request) Failing after 18s
Third-party parts / As their notes say (pull_request) Successful in 35s
Website / Website on Cloudflare (pull_request_target) Has been skipped
PR description / Description follows the template (pull_request_target) Failing after 3s
8b4618eda5
The site check rejects the progress feed while any item's title names the game, and the feed takes issue titles
from Forgejo as players type them. Two open issues, "... entering Zora River water" (603) and "Watefall to zora
rivers missing textures" (615), got past publicGameText(), which knew only "Zora's River", so every deployment
since has failed in `npm run check`.

publicGameText() now covers Zora with or without the apostrophe, Zora/Goron/Ganon/Deku on their own, and ends with
a catch-all built from the check's own list, which moves into public-copy.ts as GAME_BRANDING so the two can't
drift apart. The page prose check is unchanged.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_017vw8e3MfaADZobPGhWJk77
HumanBean changed title from WIP: fix(website): neutral wording for every game name in players' issue titles, so they can't block deployment to fix(website): neutral wording for every game name in players' issue titles, so they can't block deployment 2026-11-15 18:14:29 +00:00
HumanBean deleted branch fix/website-issue-titles 2026-11-15 18:25:46 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
MagicBeanDev/Longshot!731
No description provided.