Release Checklist: Dark Mode Toggle v1.4.0
Date: 2026-06-19 Plan: prd.md Go / No-Go: GO Deployed by: Notes web team Blocking items: none
Produced by release-checklist from tasks.md and prd.md.
Stage 1: Pre-Release Gates
Section titled “Stage 1: Pre-Release Gates”Task Completion
Section titled “Task Completion”- All P0 tasks are
[x]complete (none in[ ],[~], or[!]) - No
[-]skipped tasks to confirm (none were skipped) - No tasks are
[~]in progress
Task state confirmed with
python3 ../../skills/_shared/scripts/plan-metrics.py tasks.mdandplan-validate.py tasks.md: 11/11 complete, 0 in-progress, no validation flags.
Quality Gates
Section titled “Quality Gates”-
bun run checkpasses -
bun run formatpasses -
bun run lintpasses -
bun run testpasses (42 tests, 100% passing) -
bun run buildpasses (build output:dist/)
PRD Success Criteria
Section titled “PRD Success Criteria”- Switch themes in one interaction — verified by: integration test + manual smoke
- Persists across reloads/sessions — verified by: persistence test (Task 1.7)
- No flash of wrong theme — verified by: FR-5 regression test (Task 2.3) + manual on fresh profile
- OS default on first visit — verified by:
resolveThemeunit tests + manual on a dark-set OS - Dark theme meets WCAG AA contrast — verified by: contrast audit (Task 2.2)
Stage 2: Deployment Prerequisites
Section titled “Stage 2: Deployment Prerequisites”Environment Variables
Section titled “Environment Variables”- None introduced by this release.
Database Migrations
Section titled “Database Migrations”- None — the feature is client-only.
Feature Flags
Section titled “Feature Flags”- None — shipping on for all users (additive, defaults to current OS theme).
External Services
Section titled “External Services”- None added.
Stage 3: Deployment Steps
Section titled “Stage 3: Deployment Steps”- 1. Tag the release:
git tag v1.4.0 && git push --tags - 2. Deploy the static build:
bun run buildthen publishdist/via the existing CI deploy - 3. Confirm the deployment is live: load the app and check the build hash
- 4. Invalidate the CDN cache for
index.html(the inline theme script changed)
Stage 4: Smoke Tests
Section titled “Stage 4: Smoke Tests”New Features (from this release)
Section titled “New Features (from this release)”- Toggle to dark — Steps: click the toggle — Expected: UI switches immediately to dark
- Persistence — Steps: toggle dark, reload — Expected: still dark, no flash
- OS default — Steps: clear storage on an OS set to dark, load — Expected: app renders dark
Existing Critical Paths (regression check)
Section titled “Existing Critical Paths (regression check)”- Create a note — Steps: open editor, type, save — Expected: note saved, readable in both themes
- Search — Steps: search a known note — Expected: results render correctly in the active theme
Stage 5: Rollback Plan
Section titled “Stage 5: Rollback Plan”Decision criteria: Roll back if:
- Any client error rate exceeds baseline +1% within 30 minutes of deploy
- A P0 smoke test fails and cannot be fixed within 30 minutes
- The theme script breaks first paint on a supported browser
Rollback steps:
- Re-publish the previous build artifact (tag
v1.3.x) - Invalidate the CDN cache for
index.html - Notify the team in the release channel
Time to rollback: Estimated < 10 minutes. No data migration, so rollback is clean.
Stage 6: Post-Release Verification
Section titled “Stage 6: Post-Release Verification”- Client error rate is at baseline (check: error tracker)
- No spike in console errors referencing
localStorageordata-theme(check: log aggregator) - Theme toggle works on the top 3 supported browsers (manual)
- Notify the team that v1.4.0 is live
Changelog Entry (for CHANGELOG.md)
Section titled “Changelog Entry (for CHANGELOG.md)”## [1.4.0] — 2026-06-19
### Added- **Dark mode.** Notes now has a light and dark theme with a toggle on every page. Your choice is remembered on this device, and if you haven't picked one, Notes follows your system's appearance setting. The page no longer flashes the wrong colors while loading, and the dark theme meets WCAG AA contrast.