super-productivity/tools
Johannes Millan a9932f9f71
fix(theme): polish, atomic activation, and validator hardening (#9157)
* docs(agents): require reviews to ask if a feature earns its place

* build: add output folder to gitignore because of playwright writing there

* style(themes): polish built-in visual states

* fix(theme): make stylesheet activation atomic

* fix(theme): harden custom theme contracts

* fix(theme): reject unterminated url() and exempt commented keywords

Two validator correctness fixes found in review of the theme-polish branch:

- Reject any url()/src() that runs to end-of-input without a closing ')'.
  The CSS tokenizer still emits a fetchable url-token at EOF (Syntax
  §4.3.6), so a theme file ending mid-url (e.g. `background:url(http://x`)
  beaconed on every load — the argument regex requires the ')' and missed
  it. Proven to fetch in Chromium.

- Move the @import / image() / image-set() keyword-presence bans onto the
  comment-stripped view. Scanning the unstripped source rejected benign
  themes that merely mention these tokens in a comment; because stored
  themes are re-validated on every load, such a theme silently reverted to
  Default after updating. url()/src() stay on the unstripped view so a
  disguised token can never hide a later live fetch.

Docs and specs updated (+5 cases: EOF-fetch payloads, line reporting,
comment exemption, and real-rule-next-to-comment still rejects).

* fix(theme): restore plainspace board-panel header underline

The token-model pass removed the data:-URL `--underline-hand` mask and
migrated its consumers to `clip-path: var(--underline-hand-shape)`, but the
board-panel `header::after` consumer was missed. Its `mask: var(--underline-
hand)` then resolved to an undefined variable, collapsing the hand-drawn
ribbon to a solid 10px bar. Convert it to the shared clip-path polygon like
the other two consumers; the percentage-based polygon scales to the box.
2026-07-18 18:49:00 +02:00
..
lighthouse ci(lighthouse): raise script-count budget to 220, align warn to 210 (#8740) 2026-07-03 18:13:23 +02:00
test-data feat(shortcuts): add optional shortcuts for scheduling #8093 (#8189) 2026-06-09 22:01:00 +02:00
add-missing-i18n-variables.js feat(tools): enhance translation management script (#6171) 2026-01-25 18:08:06 +01:00
afterPack.js fix(electron): retry Wayland idle helper startup (#7527) 2026-05-10 22:35:33 +02:00
android-dev-version-code.js ci(android): publish per-push dev builds to the Play internal track 2026-07-03 15:45:33 +02:00
android-dev-version-code.test.js ci(android): publish per-push dev builds to the Play internal track 2026-07-03 15:45:33 +02:00
build-wayland-idle-helper.js fix(electron): retry Wayland idle helper startup (#7527) 2026-05-10 22:35:33 +02:00
bump-android-version.js build(release): add automated release notes 2026-05-10 00:24:47 +02:00
check-file.js fix(security): address CodeQL security alerts 2025-12-23 13:42:57 +01:00
clean-translations.js build: better organize stuff 2025-06-27 09:03:16 +02:00
cleanup-unused-translations.js chore(i18n): remove 228 unimplemented feature translation keys 2026-01-09 15:00:36 +01:00
decompress.js build: add decompress script 2021-12-21 00:28:45 +01:00
execCommand.js build: try changing env variables 2024-09-22 21:20:16 +02:00
extract-i18n-single.js chore: add custom watch task for translation extraction 2019-07-17 14:42:32 +02:00
extract-i18n-watch.js refactor(i18n): translation var script #33 2019-07-17 15:46:13 +02:00
extract-i18n.js refactor: format everything with prettier 2021-05-06 22:37:37 +02:00
extract-material-icon-names.js feat: add new icon names and icon name extraction script 2021-12-13 12:38:25 +01:00
extract-material-symbols-names.js feat(icons): upgrade from Material Icons to Material Symbols 2026-01-21 15:30:19 +01:00
find-unused-translations.js chore(i18n): add unused translation scanner and remove orphaned keys 2026-01-09 14:59:05 +01:00
gen-perf-metrics.js build: update configuration files 2025-06-27 10:25:00 +02:00
generate-ios-icon.js fix(build): remove sharp from deps to fix F-Droid build 2026-03-29 19:57:10 +02:00
generate-mac-icon.js fix(build): remove sharp from deps to fix F-Droid build 2026-03-29 19:57:10 +02:00
git-version.js build: change way to extract version 2 2021-09-23 18:19:48 +02:00
load-env.js feat(sync): add OneDrive sync provider with PKCE auth (#7523) 2026-05-26 15:31:06 +02:00
notarizeMacApp.js build: try changing env variables 2024-09-22 21:20:16 +02:00
prepare-appstore-release-notes.js fix(release-notes): strip non-Apple platform references from App Store What's New 2026-06-25 16:10:33 +02:00
prepare-appstore-release-notes.test.js fix(release-notes): strip non-Apple platform references from App Store What's New 2026-06-25 16:10:33 +02:00
release-notes.js fix(release): read release-notes prompt from /dev/tty to avoid EAGAIN 2026-05-16 13:23:29 +02:00
release-notes.test.js build(release): add automated release notes 2026-05-10 00:24:47 +02:00
remove-woff.js fix(build): update glob API and remove unused Angular imports 2026-02-04 18:30:51 +01:00
test-file.js feat: add npm commands for single file operations with minified output 2025-07-12 10:48:51 +02:00
test-lng-files.js build: auto check language files for json errors 2023-01-05 15:07:07 +01:00
theme-assets.test.js fix(theme): polish, atomic activation, and validator hardening (#9157) 2026-07-18 18:49:00 +02:00
verify-electron-requires.js build(electron): exclude uuidv7 and guard against future asar regressions 2026-05-13 21:22:59 +02:00