Conversation
* 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
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).
3 tasks
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
Promotes the accumulated
devwork tomain, 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 thev1.7.1tag + GitHub release.Changes
8 commits, 62 files changed (+3942 / −984).
Testing
DRY_RUN=true pnpm wxt submit ...) — both Chrome and Firefox authenticated successfully; no upload/publish occurredv1.7.1tag exists, so the publish job will proceed (not skip) on mergeRelated Issues
Closes #95
Closes #125