Repository navigation
feat(launcher): add Help, News and the player Guide on one launcher design system - #537
Merged
Merged
Conversation
The hero showed a finished event as "Upcoming event". The post stays on the website. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zaishen, Shining Blade, Vanguard, and Nicholas Sandford rotations follow from fixed cycles anchored on Guild Wars Wiki dates, so Dailies need no network. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Help replaces Known Issues and Feedback: open ArenaNet client issues with what players can do now, where to report a problem, and a feedback form that Basin receives through main. The funding bar and its remote funding.json are removed; support is a quiet Ko-fi pill in the title bar. The launcher now names every colour, radius, and type size once in the :root tokens of style.css and uses one button vocabulary. Two policy tests reject raw colours and undefined tokens. Eyebrow labels are gone, nav labels stay visible, the title bar shows the gwonmac icon and name, news rows carry a source mark, and Dailies show the real rotations. The unscoped title-bar nav rule no longer breaks the Settings sidebar. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Issue #98 is an open defect in ArenaNet's client and was missing from the list. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
News is now a tab: every story opens as a full page instead of a modal. Guild Wars Wiki updates load their full page source, and the installed version's release notes open once after an update as What's new. Help shows the website's Known issues, Troubleshooting and eight new feature pages, bundled at build time so they match this version and work offline. Guide links open Settings controls, other Guide pages, or an allowlisted website. A shared Markdown subset parser serves news and the Guide; ::media-placeholder blocks mark screenshots and videos still to make. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4 tasks done
The layout spec still clicked the old Known issues and Feedback nav buttons, which the Help page replaced. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ginko-content's render policy refuses any link that is not https, mailto,
tel, or relative, so every page with a `settings:` link failed to
prerender. Settings are now the inline component
`:setting[Label]{to="section/control"}`, which the launcher's parser reads as
before. Both Guide components are declared in the site's component policy,
mapped through `content.markdown.tags`, and registered globally; the ProseA
override never took effect and is deleted.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…at/launcher-guide
The Help page's feedback form added window.launcherNative.feedback; the shell spec's list of bridge namespaces did not have it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With News added, the tabs spilled under the Support pill at 900×640 and 200% zoom, so Help could not be clicked. The brand column now takes the icon's width, and below 480px the tabs drop their icons; the labels stay. The layout spec now walks Report a problem and a Guide page too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…at/launcher-guide
Mat4m0
added a commit
that referenced
this pull request
Nov 3, 2026
## What changed - Raise Electron to `^43.8.1`; it resolves to 43.8.6 (GHSA-jr5w-w6x2-84p9). This replaces #536. - Move the undici overrides to the patched 7.30.1 and 8.12.2. - Raise happy-dom to `^21.0.4` in the launcher and tools test setups. It is a test-only DOM, and no app bundle ships it. - Update the website's lockfile to patched vue-i18n / `@intlify` 11.4.17 and node-forge 1.4.2. These are named lockfile updates, so no new overrides. The i18n build plugins stay at their current versions: `@intlify/unplugin-vue-i18n` 11.2.8 breaks the website type check. - Pin zod 4.6.7 and body-parser 2.4.0 through overrides. Nuxt DevTools pins zod 4.4.3 exactly, and express keeps body-parser on 2.3.0. - Remove the node-forge exception GHSA-86w9-cpqp-85rv from the audit config and its policy test. node-forge 1.4.2 fixes it, which is the removal condition the exception named. ## Why Since these advisories were published, `runtime / static` fails at `pnpm audit --audit-level=high` on `main` and on every open pull request (#537, #539, #540, #541 and others). No code on `main` changed. Once this lands, a PR only needs an update from `main`. ## Verification - `pnpm audit --audit-level=high --ignore-registry-errors` exits 0. The remaining high and critical findings are only the documented exceptions. - `pnpm verify:static` passed: check, build, both kernel verifiers, integration and release tests (1907 unit, 188 policy, 283 tools, 92 launcher, 120 integration, 30 release). - `pnpm test:website` (type check, build, release-output invariants) passed on a fresh install of this commit. - `pnpm test:electron` locally: 182 of 184 passed on the first run. The 2 failures were focus-sensitive specs (`character-switch-background`, `input-clipboard`) that fought my desktop for focus. On reruns `input-clipboard` passed, and `character-switch-background` passed 18 of 18 with `--repeat-each=3`. The CI Electron and Hub e2e shards are the authority here. ## Rollout The shipped app changes only by the Electron patch release (43.7.6 → 43.8.6, same major). Everything else is test or website tooling. It goes out with the next release (2026.11.0); no separate Beta is needed. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Mat4m0
added a commit
that referenced
this pull request
Nov 4, 2026
## What changed - New workflow `Retry runner shortages` (`.github/workflows/retry-runner-shortage.yml`). When an Application verification, client canary or client recertification run fails, it checks why. If every failed or cancelled job was either cancelled with "not acquired by Runner" or is the `verify / verify` gate that fails as a result, it reruns the failed jobs. It stops after three attempts in all. - A short note under "GitHub enforcement" in `docs/development-workflow.md`. ## Why GitHub's macOS arm64 pool is short of machines. A job that waits too long is cancelled, and `verify / verify` turns red although no test ran. Since Nov 1 this has hit #539 (three manual reruns), #544, #537, #541, both main runs (d6d046f, 70cb19f) and the client recertification. Every case needed a manual `gh run rerun --failed`. ## Safety - It never reruns a real failure. A failed test, a failed audit, a failed install, or a cancellation for another reason (such as a newer push) stops the retry. - It reads job results and annotations only. It does not check out or run PR code, so fork PRs are safe. Its permissions are `actions: write` and `checks: read`. - Versioned release is not covered; a release rerun stays a manual decision. ## Verification - `actionlint` passes. `pnpm test:policy` passes (188 tests). - The run script was replayed against real runs from today, with the rerun call replaced by an echo: | Run | Situation | Result | |---|---|---| | 41663036291 (#544) | 3 jobs not acquired | rerun | | 41622716010 (recertification) | derive not acquired | rerun | | 41634472759 (#537) | 3 jobs not acquired | rerun | | 41631535647 (#537) | audit + Electron shard failed | no rerun | | 41612162024 (#537) | cancelled by a newer push | no rerun | | 41643011855 (Dependabot) | install failed | no rerun | | 41635280475 (#540) | audit failed + 1 not acquired | no rerun | | invalid run ID | API 404 | step fails | - Not verifiable before merge: a `workflow_run` workflow runs only from the default branch. The first real shortage after merge is the live test. If GitHub does not trigger `workflow_run` for a rerun started by the workflow token, the limit is effectively two attempts instead of three. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Mat4m0
enabled auto-merge (squash)
November 4, 2026 14:26
…ands Wiki news dropped only complete tags, so a tag that continues on the next line, or an HTML comment over several lines, left markup in the article text (CodeQL: incomplete multi-character sanitization). Comments are now removed before the split, and an unclosed tag is dropped to the line end. The built-preload release test did not call feedback.send or external.openUrl, so it failed once the audit step passed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…f the page CodeQL flagged that an unclosed <!-- could stay in the news text. MediaWiki hides everything after such a comment, so the launcher does too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mat4m0
added a commit
that referenced
this pull request
Nov 5, 2026
…lectron download in CI (#546) ## Why Main went red after #537 (run 41991775466): `tests/electron/multiple-accounts.spec.ts:180` looked up the Play button by substring, and a live news row ("GWonMac 2026.8.8 …") matched too. Every Electron test launch fetched the real news feed, so role lookups depended on the latest release notes and on network timing. Separately, the website moved to gwonmac.com and the app still pointed at the old vercel.app address. ## What changes - **Tests stay off live news.** `tests/electron/fixtures.mts` starts Electron with `--host-resolver-rules` that fail DNS for the two news hosts (derived from `PROJECT_NEWS_URL` and `WIKI_UPDATES_URL`). `app.spec.ts` uses the same switch; `live.spec.ts` stays online on purpose. The launcher shell test asserts news ends `offline` with no stories, so a new unblocked news host fails every run instead of some. - **Play lookup is exact**, like `tests/helpers/packaged-enhancement-fixture.ts`. - **www.gwonmac.com everywhere.** `gwonmac.com` redirects to `www.gwonmac.com`, and the app compares origins exactly, so the news feed URL, the trusted link origin, the Guide's website links and the website's canonical URL use `https://www.gwonmac.com`. No `vercel.app` remains in the repository. - **Feed links are relative.** Released 2026.10 betas fetch the feed from the old address and trust only that origin; `/blog/<slug>` resolves against whichever address the app used, so their news keeps working. - **Electron download retries.** The first run of this PR failed in `pnpm install`: GitHub answered 504 for `electron-v43.8.6-darwin-arm64.zip` (run 41998706328, electron (2)). `postinstall` now runs `scripts/install-electron.mjs`, which retries Electron's own `install-electron` twice (10 s, 30 s) and still fails on a lasting outage. It covers every workflow that installs. - **Less Electron downloading in CI.** The second run hit 504s for over 40 s on `hub-e2e (2)` (run 41999227783). The Hub suite runs in Chromium and never starts Electron, so its install skips the binary (`ELECTRON_SKIP_BINARY_DOWNLOAD=1`, honoured by the postinstall because Electron 43's installer dropped it). Mac jobs in `macos-verify.yml` cache `~/Library/Caches/electron` per locked Electron version. Retries wait 10, 30 and 60 s. ## Checks - Local: typecheck, eslint, `check:links`, `check:launcher-news`, launcher-ui vitest (93), `tests/unit/launcher-news.test.ts`, `tests/unit/no-game-traffic-is-uploaded.test.ts`, `tests/release/launcher-preload-behaviour.test.ts` (12). - `pnpm install --frozen-lockfile` and `pnpm run postinstall` with Electron present: no-op, exit 0. A fake always-failing `install-electron` gives 3 attempts, then its exit code. - `pnpm test:policy` (190, includes action pinning); `ELECTRON_SKIP_BINARY_DOWNLOAD=1` exits 0 without calling the installer. - Electron suites run in CI only. Run 41999227783 already passed both Electron shards with the news host block. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Mat4m0
added a commit
that referenced
this pull request
Nov 5, 2026
Prepare `2026.11.0-beta.1` from green main commit `9c2c107bb68c42b02023cb6951c91ae13963ba73`. This changes only the application version and targets the new planned release branch `release/2026.11.0`. Includes everything merged on main up to #541: the launcher Help, News and player Guide (#537), released Stable notes backfill (#538), held-modifier release (#535), the www.gwonmac.com move with offline Electron test news and CI download hardening (#546), and Build Library template import/export (#541). No features are added during release preparation. Validation: `pnpm run check` passed for this version change (unit 1918, policy 190, tools 283, launcher 93). Full main Application verification passed, including package: https://github.com/Mat4m0/gwonmac/actions/runs/42005431996. Require this PR and the release branch commit to pass Application verification before signing. Versioned release (`dry_run=false`) runs only on Matthias's explicit request. Exact signed-draft live QA remains required before publication. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 <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.
This PR now also carries #540 (News tab and the player Guide in Help), which was stacked on it. Both land as one squash commit after one CI round. Part 1 is the original #537; part 2 is #540.
Part 1: Help page and design system
What changed
The launcher gets one Help page and one design system.
src/shared/funding.jsonand the remote fetch are gone. Support is a quiet Ko-fi pill in the title bar on every page.style.cssnames every colour, radius, and type size once in:root; components use only those tokens and one button vocabulary (.primary,.secondary,.quiet,.small,.icon-button,.chip). Documented inDESIGN.md.src/shared/daily-activities.tscomputes Zaishen, Shining Blade, Vanguard, and Nicholas Sandford rotations offline from Guild Wars Wiki anchors, with a 7-day table and a reset countdown. The placeholdercontentAvailabilityflag is deleted.nav {}rule from the title bar laid out the Settings groups side by side.Why
Pages used different title sizes, five button styles, ~76 distinct colours, and square and round corners side by side. Feedback, known issues, and funding were three surfaces for one job.
Invariant
tests/policy/source-ui-system.test.ts: launcher shell colours come only from:roottokens, and every custom property it reads is defined. Both proven to fail on a probe.tests/unit/launcher-news.test.ts: an event disappears onceendsAthas passed (fails without the fix).tests/unit/daily-activities.test.ts: rotations match the Wiki for today and 2026-11-23; moving one anchor by a day fails 4 of 5 tests.tests/unit/launcher-feedback.test.tsandHelpView.test.ts: a report is confirmed only after it was sent, and the text survives a failed send.Delivery
Target
main. Ships with the next Beta. Installed apps that still fetchfunding.jsonfall back to their bundled figures when the file is gone, so they keep working; they just stop updating the amount.Verification
pnpm run checkpassed (unit, policy, tools 283, launcher 90).Part 2: News tab and Guide (from #540)
What changed
News tab. Every story opens as a full page in the launcher. The news modal is deleted. Home shows the five newest stories with an "All news" link.
Guild Wars Wiki updates load the page source of the five newest
Feedback:Game updates/pages in one request and convert it to Markdown. Before, the API returned full text for only one page per request, so most wiki stories had no body.What's new. The release post whose
launcherIdmatches the installed version is bundled. It opens once in News after an update, but not on a new install.Help is for players who already have the app. The sidebar has two groups:
The pages are the website's Markdown, bundled at build time, so they match this version and work offline. The install and comparison pages stay on the website.
Guide links open a Settings control (
settings:<section>/<control>, checked against the settings catalogue), another Guide page, or one of a short list of allowed websites through the newexternalOpenUrlIPC.Media placeholders.
::media-placeholder{type="image|video"}blocks mark the screenshots and videos still to make. They render as dashed boxes in the launcher and on the website.Reading styles for Guide pages and articles: lines stop at about 75 characters, emphasis is semibold, link underlines are quieter, and key chips are smaller. Troubleshooting now uses one symptom heading per problem, and each fix starts with the action.
2026.11.0 release notes (
draft: true, so hidden on the website and skipped by the news generator until release). They list what changes for Stable users: ⌘R opens the Hub, Xunlai moved to ⌘S, one Settings page, and templates moved to the Build Library.Why
Many players will move from Stable 2026.8.12 to the new launcher. They need to read what changed and how each feature works inside the app. A modal was the wrong place for long text, and the old Help pointed at an install guide they no longer need.
This change deletes
NewsArticle.vueand the hand-written known-issues list inHelpView.vue. The website's7.known-issues.mdis now the only source for that list. News and the Guide share one Markdown subset parser (src/shared/launcher-markdown.ts).Invariant
news-link-*ID, orguide:,settings:orurl:with the origin allowlist re-checked in main byparseLauncherGuideUrl.guide.test.tsfails if any Guide page is missing, or if any of its links or images does not resolve.Delivery
Folded in from #540. Recommend shipping with 2026.11.0 (Beta, then Stable). Before Stable, remove
draft: truefrom13.gwonmac-2026-11-0.md.5.templates.mdand the release notes describe Template files in the Build Library. That feature is in #541, which should land in the same release.Verification
pnpm run checkpassed. After the last change, which only touched reading styles and Troubleshooting copy, the launcher vitest suite (93) andtests/policy/source-ui-system.test.tspassed again.settings:links resolve, and claims found only in older docs were dropped.MediaPlaceholderandProseA. No live game QA.Fold check
Main (with docs(news): backfill Stable release notes in one changelog format #538's release-notes backfill) merged in without conflicts.
check:links, the launcher vitest suite (93, includingguide.test.ts) andtypecheckpassed on the merged tree.I kept this pull request focused.
I ran the relevant checks.
I did not add game binaries, credentials, diagnostics, or private traffic.
I updated documentation when behavior or an invariant changed.
🤖 Generated with Claude Code