This repository currently ships four release surfaces:
- website build in
dist/ - userscript bundle in
dist/userscript/gemini-watermark-remover.user.js - package/sdk source and metadata from
package.json,src/core/, andsrc/sdk/ - Chrome Web Store listing plus fallback package in
release/gemini-watermark-remover-extension-v<version>.zip
Run these locally from the repo root:
pnpm install
pnpm release:preflightExpected result:
- all tests pass
- website artifacts in
dist/are regenerated for the current build dist/userscript/gemini-watermark-remover.user.jsis regenerated- package/sdk entrypoints in
package.jsonstill match the published source layout - generated userscript metadata uses the current
package.jsonversion - Chrome extension release zip, sha256 file, and
latest-extension.jsonare regenerated inrelease/for GitHub Release and manual fallback installs - the internal comparison gate reports
current-gap-known pnpm release:preflightrunspnpm build,pnpm test,pnpm package:extension,pnpm release:quality-gate,pnpm release:goal-audit -- --fail-on-incomplete, andpnpm release:ci-checkin orderpnpm release:quality-gateruns the internal comparison gate beforepnpm release:readiness -- --fail-on-not-readypnpm release:goal-auditreportsgoal achieved: yesfor the scoped RC objectivepnpm release:ci-checkverifies the GitHub Actions CI run for the currentHEAD; if no completed successful run exists, release preflight fails closed and prints the failing job/log summary- broader video quality claims remain blocked unless the video gates are promoted
- release readiness reports
rc-current-image-defaults-with-scoped-claimsbefore publishing a scoped image RC - release notes follow the
Release Claim Matrix: publish onlyallowed,allowed-scoped, orallowed-safety-onlyrows, and keepreview-only,experiment-only, andforbiddenrows out of public capability claims - the unpacked extension in
dist/extensionis a local test build; the official release manifest is written only into the zip inrelease/
- Keep public notes focused on user-visible fixes, supported release surfaces, and scoped capability claims.
- Do not mention internal benchmark names, implementation research notes, or unshipped comparison claims in public release notes.
- For the current gate result, describe video cleanup as review-scoped or experimental unless a later gate explicitly promotes it.
- Do not call the build a full stable/general-availability release while readiness still reports
rc-current-image-defaults-with-scoped-claims.
- bump
package.jsonversion - keep
build.jsuserscript@versionsourced frompkg.version - add dated entries to
CHANGELOG.mdandCHANGELOG_zh.md
- install or update the generated userscript in Tampermonkey/Violentmonkey
- run
pnpm probe:tm:freshnessagainst the fixed profile when validating the local install - verify Gemini page preview replacement works
- verify native Gemini copy/download still returns processed output
- verify preview processing failure leaves the original page image visible
- load the unpacked local Chrome extension from
dist/extensionand verify the popup toggle, Gemini online link, general watermark link, and GitHub feedback link; confirm the extension card is labeledGemini Watermark Remover Local - verify the live Chrome Web Store listing points to:
https://chromewebstore.google.com/detail/gemini-watermark-remover/cjlmnfcfnofnglkphbcdclbpimdjkmdf - if you publish the sdk surface, run a final package smoke check before uploading
- commit release changes
- create a git tag matching the package version, for example
v1.0.1 - create a GitHub Release from that tag and upload the built userscript from
dist/userscript/gemini-watermark-remover.user.js - upload
release/gemini-watermark-remover-extension-v<version>.zip, its.sha256.txtfile, andlatest-extension.jsonto GitHub Release as the manual fallback package - submit the Chrome extension package to Chrome Web Store, or confirm the already-approved listing is serving the intended version
- publish the sdk package only if this release includes package-facing changes
- Check downstream projects for a direct package dependency before bumping them:
rg -n "@pilio/gemini-watermark-remover" --glob package.json --glob pnpm-lock.yaml - Do not treat task routes, processor keys, i18n copy, tests, or docs mentioning
gemini-watermark-removeras evidence that the npm SDK must be bumped. - Only update a downstream project when it directly depends on
@pilio/gemini-watermark-remover. - If a separate public website consumes the npm SDK, update that site's
package.json/pnpm-lock.yaml, then rebuild, test, and deploy the site.
Example GitHub Release command:
gh release create v<version> \
dist/userscript/gemini-watermark-remover.user.js \
release/gemini-watermark-remover-extension-v<version>.zip \
release/gemini-watermark-remover-extension-v<version>.zip.sha256.txt \
release/latest-extension.json \
--repo GargantuaX/gemini-watermark-remover \
--title "v<version>" \
--notes "<release notes>" \
--latestIf you maintain a separate public website for the project, sync it after the GitHub Release is published:
- Run the website's userscript build/sync command.
- This rebuilds this upstream repository.
- It copies
dist/userscript/gemini-watermark-remover.user.jstopublic/userscript/gemini-watermark-remover.user.js.
- If the npm SDK was published for this release and the website still directly depends on it, update
@pilio/gemini-watermark-removerto the released version and refreshpnpm-lock.yaml. - Download the exact Chrome extension fallback assets from the GitHub Release into the website project:
gemini-watermark-remover-extension-v<version>.zipgemini-watermark-remover-extension-v<version>.zip.sha256.txtlatest-extension.json
- Copy those files to
public/downloads/. - Update
src/i18n/chrome-extension-content.tsto keep the primary Chrome extension CTA pointed at the Chrome Web Store and the fallback package metadata matched tolatest-extension.json. - Remove stale older extension zip and checksum files from
public/downloads/. - Run
pnpm testandpnpm run buildin the website project. - Deploy with
pnpm run deploy:cf-workers. - Back in this repository, run
pnpm release:distribution-checkand keep the generated report as the source of truth for release surface status.
pnpm run deploy:cf-workers may finish the Cloudflare deployment successfully and then report a Sentry release finalization error. If Wrangler prints a current version ID and the live site verifies correctly, treat the website deployment as published, then investigate Sentry separately.
- confirm
pnpm release:distribution-checkreportsokfor local package, GitHub Release, release assets, npm latest, website userscript, websitelatest-extension.json, and website extension zip - if the only remaining item is
chrome-web-store-update: waiting, treat the release as distributed everywhere except Chrome Web Store propagation/review; keep the release open only for store follow-up - confirm the installed userscript reports the expected version
- confirm the GitHub Release latest userscript serves the latest bundle:
https://github.com/GargantuaX/gemini-watermark-remover/releases/latest/download/gemini-watermark-remover.user.js - confirm the official website serves the latest userscript bundle:
https://geminiwatermarkremover.io/userscript/gemini-watermark-remover.user.js - confirm the Chrome Web Store listing is reachable:
https://chromewebstore.google.com/detail/gemini-watermark-remover/cjlmnfcfnofnglkphbcdclbpimdjkmdf - confirm the official website points the primary Chrome extension CTA to Chrome Web Store and still serves the latest fallback zip with matching checksum
- confirm
https://geminiwatermarkremover.io/downloads/latest-extension.jsonreports the latest extension version, file, size, and sha256 - update the GitHub Release notes and any directly addressed GitHub issues with the shipped version, verification evidence, and any remaining propagation caveat
- keep any ad hoc verification notes in the release PR or tag notes, not in source docs