You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+58Lines changed: 58 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,64 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
5
6
6
---
7
7
8
+
## [2.3.0] - 2026-08-28
9
+
10
+
### Added
11
+
12
+
-**Skin Studio** — added separate local background images for the TimeLens app and widget windows, with live preview, clear/reset actions, `cover` / `contain` / `stretch` fit modes, configurable overlay strength, and per-widget skin overrides.
13
+
-**Built-in skin palettes** — added Default, Ocean, Forest, Sunset, and Monochrome palettes that update surface, text, border, and accent colors across the app and widgets.
14
+
-**Widget layout presets** — save, apply, replace, delete, import, and export named widget layouts; built-in Work, Focus, Break, Coding, and Review presets are created automatically.
15
+
-**Backup-compatible layout settings** — layout presets are included in Backup & Restore packages and restored with the backup payload.
16
+
-**Scheduled layout switching** — switch layouts automatically by local time or focus state without relying on a cloud service.
17
+
-**Widget health center** — added heartbeat, memory, CPU time, consecutive failure, pause, suspension, last error, and recovery information for installed widgets.
-**Widget diagnostics** — added redacted skin snapshot export, contrast checking, reduced-motion support, compact widget mode, and Widget Dev Harness diagnostics with capability simulation, hash inspection, logs, and auto-reload.
20
+
-**Update flow tests** — added coverage for update checking, download confirmation, download progress, install confirmation, and unavailable updater states.
21
+
22
+
### Changed
23
+
24
+
-**Widget refresh orchestration** — refresh now targets only the selected or event-affected widget, with a polling fallback when no event is available.
25
+
-**Permission revocation behavior** — revoked widget permissions now clear active subscriptions and emit a `widget-permission-revoked` event so external widgets can enter a degraded state.
26
+
-**Skin asset handling** — selected images are validated and copied into the managed application `skins` directory instead of retaining arbitrary source paths.
27
+
-**Third-party widget recovery** — failed widgets now show recovery guidance and a real remount/retry action.
28
+
-**Update confirmation policy** — automatic and manual update checks now use the same explicit flow: confirm download first, then confirm installation after download completes.
29
+
-**Cross-window events** — todo, focus, active-window, goal, interruption, skin, and widget-refresh events now update relevant windows without requiring a full app restart.
-**Local API scope escalation** — widget local API requests are now limited by both route scope and the widget's granted permissions; payload-declared scopes cannot expand access.
39
+
-**CodeQL Rust extraction** — changed the Rust CodeQL job to `manual` build mode and moved the Cargo build after CodeQL initialization.
40
+
-**Cryptographic value detection** — changed Argon2 output-buffer initialization so CodeQL no longer reports the derived-key buffer as a hard-coded cryptographic value.
41
+
-**Manual update notification** — fixed Settings > About so a manually detected update opens the same confirmation dialog used by automatic checks.
42
+
43
+
### Security
44
+
45
+
-**Managed local resources** — image imports enforce allowed extensions, file signatures, size limits, managed-directory boundaries, and traversal protection.
46
+
-**Gateway request governance** — network, media, local API, and notification requests continue through permission checks, audit logging, timeouts, response limits, and normalized errors.
47
+
-**Dependency audit** — `npm audit --audit-level=high` reports zero vulnerabilities for the v2.3.0 dependency tree.
48
+
49
+
### Tests
50
+
51
+
- Frontend tests: **69 passed**.
52
+
- TypeScript typecheck: passed.
53
+
- ESLint: 0 errors; 8 existing warnings remain.
54
+
- Rust `cargo check`: passed.
55
+
- Rust unit tests compile successfully, but execution is blocked on the current Windows environment by `0xc0000139 STATUS_ENTRYPOINT_NOT_FOUND` during test-process startup.
56
+
-`git diff --check`: passed.
57
+
58
+
### Known Limitations
59
+
60
+
- Java/JVM widget hosting is not enabled yet and is explicitly rejected by the registry.
61
+
- The bundled neutral texture catalog remains optional follow-up work; built-in color palettes are available.
62
+
- Some legacy widgets still use compatibility APIs while migration to the Gateway continues.
0 commit comments