Skip to content

Release v1.7.1: error messages, bug reporting, test suite & automated publishing - #131

Merged
Seismix merged 8 commits into
mainfrom
dev
Jun 21, 2026
Merged

Release v1.7.1: error messages, bug reporting, test suite & automated publishing#131
Seismix merged 8 commits into
mainfrom
dev

Conversation

@Seismix

@Seismix Seismix commented Jun 21, 2026

Copy link
Copy Markdown
Owner

Summary

Promotes the accumulated dev work to main, bumping the extension from 1.5.0 → 1.7.1. This is the first merge that will trigger the new automated store-publishing workflow (#128), which submits to the Firefox Add-ons and Chrome Web Store and creates the v1.7.1 tag + GitHub release.

Changes

8 commits, 62 files changed (+3942 / −984).

Testing

  • Verified the publish pipeline via a local dry run (DRY_RUN=true pnpm wxt submit ...) — both Chrome and Firefox authenticated successfully; no upload/publish occurred
  • Confirmed no v1.7.1 tag exists, so the publish job will proceed (not skip) on merge
  • Tested on Chrome/Edge
  • Tested on Firefox
  • Tested on Android (if applicable)

Related Issues

Closes #95
Closes #125

* feat: add zip configuration to exclude .env files

* feat: exclude playwright dirs from firefox sources zip
* fix: refactor enableJump handling in defaults and migrations

* fix: update import paths for consistency in Options.svelte

* fix: improve messaging for reduced motion settings in BasicSettings.svelte

* refactor: update scroll behavior settings to Auto/Instant

- change existing "Animated" option to "Auto (Recommended)" in UI
- remove complex first-install Reduced Motion detection logic
- allow users to select Auto scroll even if Reduced Motion is enabled (with info message)
- simplify default settings handling

* feat: update version to 1.6.0 and add release notes for enhanced scrolling options and accessibility improvements

* feat: refactor migration from v1 to v2 for smoothScroll settings and add corresponding tests

* chore: format

* fix: remove unused import for devLog in defaults.ts
* fix: update screenshot in readme

* chore: update dependancies

* refactor: update icons to fix svelte and build warnings

* chore: format code

* chore: update pull request branches to include dev
This is to align with the rest of the codebase.
* feat: add FlagIcon component

* feat: add ReportButton component

Opens a pre-filled Google Form with the chapter URL and current date
for users to report broken recaps.

* feat: show report button in popup on chapter pages

Detects the active tab URL and conditionally renders the ReportButton
in the popup header when the user is on a RoyalRoad chapter page.

* feat: wire up Google Form for popup report button

Replace placeholder form URL and field IDs with actual Google Form.
Remove date field since Google Sheets adds a timestamp automatically.

* feat: add openUrl message handler to background script

* feat: add report broken recap link to chapter pages

Inject a report link into the chapter page sidebar that opens
a pre-filled Google Form with the current chapter URL.

* chore: bump version to 1.7.0 and add patch notes

Add patch notes for bug reporting feature release.

* style: pnpm format

* refactor: extract shared report form config and remove unused handler

Move Google Form URL and builder to shared report-form.ts config.
Remove unused openUrl message handler from background script.

* chore: split host_permissions out of permissions in wxt.config

Required for proper MV3 compliance. Note: existing users will be
prompted to re-approve the royalroad.com host permission on update.

* feat: enrich broken-report with version/browser/type and blurb support

Extend buildReportFormUrl to prefill version, browser, and content type
alongside the chapter URL, and support reporting broken blurbs in
addition to recaps. Introduce a shared ContentType ("recap" | "blurb")
type, extract isChapterUrl into dom-utils, and expose the report link
placement in advanced settings. Adds unit tests for URL building.

NOTE: version/browser/type Google Form entry IDs are still placeholders
(entry.PLACEHOLDER_*) and must be replaced with real field IDs before
those prefills will populate.

* feat: wire real Google Form entry IDs for version/browser/type prefill

Replace placeholder entry IDs with the real field IDs from the report
form (Version, Browser type, Content Type), so all four values now
prefill correctly.

* chore: pin pnpm build-script approvals

Record approved dependency build scripts (esbuild enabled, spawn-sync
disabled) via pnpm approve-builds so contributors and CI share the same
build policy.

* chore: add .gitattributes to normalize line endings to LF

Pin text files to LF in the repo and working trees so Windows
core.autocrlf no longer produces phantom CRLF-only diffs. Mark binary
asset types so their bytes are left untouched.

* docs: update v1.7.0 patch notes date and content

Set release date to 2026-06-21 and reflect what actually shipped: blurb
reporting in addition to recaps, and auto-included version/browser
diagnostics.

* ci: prevent needrestart hang and add timeout to CSS Selectors workflow

Set NEEDRESTART_MODE=a / NEEDRESTART_SUSPEND=1 so `playwright install
--with-deps` no longer hangs on the needrestart prompt on Ubuntu 24.04,
and add timeout-minutes: 15 so any future hang fails fast instead of
squatting a runner. Closes #127.

* ci: upgrade @playwright/test to 1.61.0 to fix browser-install hang

@playwright/test 1.57.0 is affected by a regression (Playwright
1.55.1 to <1.60.0) where `playwright install` downloads Chromium then
hangs indefinitely on system-deps, stalling the CSS Selectors workflow
until the runner times out. Upgrade to 1.61.0, which includes the fix.

Ref: microsoft/playwright#40998
Publishes to the Chrome Web Store and Firefox Add-ons on merge to main
(or via manual dispatch). Builds the zips, runs wxt submit, then tags
the version and creates a GitHub release. Idempotent: skips if the
version is already tagged. Chrome activates once a refresh token secret
is present; Firefox publishes independently.

Closes #96
* feat: add loading state for recap and blurb fetches

Show a centered "Loading…" indicator while a fetch is in flight, scroll
to it as soon as it appears (rather than waiting for content), and
disable the toggle to ignore repeat clicks during an in-flight fetch.

Loading and error states reuse RoyalRoad's Bootstrap utility classes
(text-muted/text-danger) so they inherit the page theme on light and
dark backgrounds instead of fighting it with inline overrides.

* feat: make recap fetching resilient to timeouts and cache misses

Abort fetches that hang past 15s so a stuck connection surfaces a real
error instead of an indefinite loading state, and map HTTP/network
failures to reader-friendly messages.

When a word-count change misses the cache (expired TTL), re-fetch the
chapter instead of silently leaving stale content on screen. Pass the
fetcher's messages straight through rather than double-wrapping them.

* refactor: clarify user-facing error messages and guard sanitization

Reword selector-failure messages to plain language and point readers to
the Report button when RoyalRoad's layout has likely changed. Guard
against the sanitizer silently swallowing all content, surfacing an
explicit error instead of an empty recap.

* chore: bump version to 1.7.1
… e2e) (#130)

* test: configure Vitest runner and split Playwright projects

Add Vitest (happy-dom) via WXT's WxtVitest plugin for fast unit/component
tests, with @testing-library/svelte and an explicit Svelte transform.
Separate the two runners: Vitest collects *.unit.test.ts / *.svelte.test.ts,
while Playwright is split into an `e2e` project (mocked) and a `canary`
project (live), with testIgnore so neither runner double-collects.

* test: add unit and component test suites

Cover the core logic with Vitest: ContentProcessor (word-count selection
from the end, truncation marker, sanitization, error branches), ContentCache
TTL/expiry, ContentManager cache hit/miss, dom-utils URL resolution, plus the
recap-state runes and the ToggleButton/RecapContainer/ReportLink components.
Port the migrations and report-form tests off the Playwright runner onto
Vitest and remove their old copies.

* test: add mocked Playwright e2e suite and fixtures

Drive the real built extension while fulfilling all royalroad.com requests
from hand-built HTML fixtures via page.route, so the e2e suite is fast and
offline: recap injection/render, the blurb path, and the fetch-error state.
Fix the extension-loading fixture to point at .output/chrome-mv3 and load the
unpacked extension via channel: "chromium".

* test: skip live selector canary when RoyalRoad is unreachable

Distinguish a third-party outage from a real selector regression: on a
network/DNS/timeout failure the canary skips with a "re-run once the site is
back up" message instead of failing, while a loaded-but-missing selector
still fails loudly.

* ci: split test workflows and isolate live selector canary

Run fast Vitest unit/component tests (unit.yaml) and mocked Playwright e2e
tests (e2e.yaml) on every non-draft PR into dev/main. Repurpose the existing
css-selectors workflow as the live canary: PR-triggered with a source path
filter and draft guard, plus manual dispatch.
@Seismix
Seismix merged commit d1d4df4 into main Jun 21, 2026
5 checks passed
Seismix added a commit that referenced this pull request Jul 23, 2026
PR #131 landed on main as a squash commit, so git lost the ancestry link
between the two branches and every dev->main merge re-applied changes main
already had. This merge records main as an ancestor without changing any
files (dev is already a content superset of main).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEATURE] Add way to submit broken recaps Implement and test user-facing error messages

1 participant