Commit graph

243 commits

Author SHA1 Message Date
Johannes Millan
4d22a64955
Feat/plugin UI kit (#6362)
* fix(e2e): stabilize undo task delete sync test

Two flakiness sources fixed:
- Click on task element could activate title inline editor, causing
  Backspace to edit text instead of triggering delete. Now clicks the
  drag handle which calls focusSelf() without entering edit mode.
- Replaced deleteTask helper with inline sequence to avoid wasting
  2s of the 5s undo snackbar window on dialog-detection timeout.

* refactor: address code review findings from 2026-02-03

- Extract getBreakCycle helper to replace error-prone `cycle - 1 || 1`
  pattern at 3 call sites
- Add clarifying comment on intentionally broad 'timed out' match
- Reduce Pomodoro E2E test from 9 to 5 sessions (sufficient coverage)
- Remove dead _isTransientNetworkError wrapper from DropboxApi
- Extract stubWindowConfirm helper in task reducer tests

* fix(sync): prevent Formly from clearing provider config on show (#6345)

resetOnHide: true caused Formly to reset field values when provider
fieldGroups transitioned from hidden to visible, discarding user input
if sync was enabled before selecting a provider.

* fix(tasks): fix huge space between emoji and text in tag/project menus

Use matMenuItemIcon attribute on emoji spans so they project into the
icon slot of mat-menu-item instead of the text slot. Update emoji icon
sizing to 24x24px to match mat-icon and add overflow: hidden.

Closes #5977

* fix(tasks): guard against undefined task entities in selectors and archive (#6359)

Prevent TypeError crashes (reading 'dueWithTime', 'dueDay', 'issueProviderId') caused
by orphaned IDs in NgRx state. Fix archive merge to deduplicate IDs, filter orphans,
and use correct entity precedence (young over old). Add defensive null guards to
selectors and archive/task service methods.

* fix(tasks): guard against undefined task in mainListTasksInProject$ (#6360)

* fix(tasks): detect and sanitize orphaned task IDs to prevent startup crashes (#6359, #6360)

Orphaned task IDs (entries in task.ids without matching entities) caused
TypeError on app startup. Fix addresses three layers: validation now
flags orphaned IDs instead of silently skipping them, loadAllData
sanitizes IDs on load as a safety net, and data repair no longer crashes
when encountering orphaned IDs it's trying to fix.

* fix(sync): prevent recurring task duplication across clients

Remove SuperSync special-case that bypassed initial sync wait, causing
repeatable task effects to fire before sync completed. Add post-sync
cleanup effect that detects and removes stale duplicate repeat instances
when multiple active instances exist for the same repeat config.

* fix(sync): restore WebDAV provider compatibility warning text

* feat(sync): mark WebDAV and LocalFile sync options as experimental

* feat(plugins): add UI Kit with inject-first CSS strategy for iframe plugins

Introduce a lightweight CSS reset (UI Kit) that auto-styles basic HTML
elements in plugin iframes to match the host app theme. Injected after
<head> so plugin styles always win by source order.

UI Kit provides: element resets (body, headings, buttons, inputs, tables,
links, code, lists, hr), .btn-primary/.btn-outline button variants, and
.card/.card-clickable components.

All bundled plugins updated to use UI Kit classes, removing redundant
custom CSS (-542 lines net). Pico CSS removed from automations plugin.
sync-md converted from hardcoded colors to host theme variables.

* feat(plugins): extract shared CSS utilities into UI Kit

Move .text-muted, .text-primary, .page-fade and @keyframes fadeIn from
plugin CSS into the UI Kit so all iframe plugins get them automatically.
Add box-shadow focus ring to input:focus for better accessibility.
Remove per-plugin focus overrides now covered by the UI Kit.
2026-02-04 18:18:22 +01:00
Johannes Millan
d1f766d3a3 docs: add new plans 2026-02-04 17:15:14 +01:00
Corey Newton
343fc47d1d docs(wiki): lint style 2026-02-04 14:45:00 +01:00
Corey Newton
5f1dd7ef7f docs(wiki): normalize tables and rework ToC 2026-02-04 14:45:00 +01:00
Corey Newton
ff674fc6c9 docs(wiki): substantial addition of integrations (issue and sync)
Much of these notes will need additional validation prior to v1.0 as I have not yet used supersync and many of the other services.
2026-02-04 14:45:00 +01:00
Corey Newton
8557ce3595 docs(wiki): enhance User Data documentation with backup and import/export details 2026-02-04 14:45:00 +01:00
Corey Newton
daa5cea0f6 docs(wiki): add new notes for Quick History and Worklog 2026-02-04 14:45:00 +01:00
Corey Newton
1bb1b6839e docs(wiki): add Task Archiving section and update references across multiple documents 2026-02-04 14:45:00 +01:00
Corey Newton
f8c4e76c8e docs(wiki): add Metrics 2026-02-04 14:45:00 +01:00
Corey Newton
fd9ee3e421 docs(wiki): add Reflection 2026-02-04 14:45:00 +01:00
Corey Newton
4a8a04ecc3 docs(wiki): add Reminders and Idle Time 2026-02-04 14:45:00 +01:00
Corey Newton
1b52eb8a6b docs(wiki): add Timers and Focus Mode 2026-02-04 14:45:00 +01:00
Corey Newton
73739df285 docs(wiki): add How Time Is Logged section 2026-02-04 14:45:00 +01:00
Corey Newton
9faa3e4bb4 docs(wiki): add Repeating Tasks section and update references across multiple documents 2026-02-04 14:45:00 +01:00
Corey Newton
19a78f42fb docs(wiki): added Scheduled Tasks; updated references in multiple sections 2026-02-04 14:45:00 +01:00
Corey Newton
9a0f1a6000 docs(wiki): add Subtasks section and references in Task Attributes 2026-02-04 14:45:00 +01:00
Corey Newton
86d0242e81 docs(wiki): add Task Notes 2026-02-04 14:45:00 +01:00
Corey Newton
1f8b2504fe docs(wiki): add note about Task Attributes 2026-02-04 14:45:00 +01:00
Corey Newton
cfe8095a82 docs(wiki): create note regarding Time Estimates 2026-02-04 14:45:00 +01:00
Johannes Millan
2a6de0e41f fix(sync): remove dead code, add defensive checks, and clean up vector clock logic
- Remove redundant subset condition in compareVectorClocks
- Add clarifying comment for conservative return in hasVectorClockChanges
- Batch per-key verbose logs into single summary log
- Add defensive warning for negative startingSeq in file-based sync
- Extract magic timeout constant in E2E test
- Update stale doc date
2026-02-02 17:15:13 +01:00
Johannes Millan
192ec62d4a fix(sync): harden vector clock comparison and fix docs
- Replace fragile VectorClockComparison[result] enum lookup with safe cast
- Return CONCURRENT instead of EQUAL when only one side has non-shared
  keys in pruning-aware mode (safe direction: triggers LWW instead of
  silent skip)
- Fix docs claiming clocks "reset" at MAX_SAFE_INTEGER (they throw)
2026-01-30 20:05:48 +01:00
Johannes Millan
495f0fe0d3 fix(sync): improve vector clock pruning awareness and harden tests
Make hasVectorClockChanges pruning-aware by checking clock size before
logging missing keys — downgrade to verbose when pruning is likely,
warn when corruption is likely. Add return value assertion to LWW retry
exhaustion test, asymmetric pruning test cases, server-side pruning
tradeoff documentation, and fix stale "max 50" in docs.
2026-01-30 19:35:51 +01:00
Johannes Millan
361d0e605f refactor(sync): rename "stale" to "superseded" across sync/operation domain
Includes backward compatibility: client accepts both CONFLICT_SUPERSEDED
and CONFLICT_STALE from the server, and the server keeps a deprecated
CONFLICT_STALE alias. Remove after all deployments are updated.
2026-01-30 16:59:40 +01:00
Johannes Millan
4ab86ba0fe docs(sync): document archive-wins rule, singleton LWW, and stale op handling
Document 6 gaps found during documentation audit:

- Archive-wins conflict resolution rule (moveToArchive always wins
  over field-level updates regardless of timestamps)
- Two-level archive resurrection prevention (ConflictResolutionService
  + bulkOperationsMetaReducer pre-scan filtering)
- Singleton entity LWW update handling (adapter vs singleton vs
  unsupported storage patterns)
- Stale moveToArchive operation preservation with merged vector clocks
- Fix upload batch size from 100 to 25 in operation-rules.md and
  operation-log-architecture.md
- Update meta-reducer chain from simplified 7-phase to accurate
  8-phase, 15-entry structure matching meta-reducer-registry.ts
2026-01-30 16:59:40 +01:00
Johannes Millan
bfdac6d19a refactor(op-log): merge LWWOperationFactory into ConflictResolutionService
- Consolidate LWWOperationFactory methods (createLWWUpdateOp, mergeAndIncrementClocks)
  into ConflictResolutionService to reduce service count
- Remove redundant caching in SuperSyncProvider (SyncCredentialStore already caches)
- Remove _onBlurWhenNotTracking$ sync trigger from SyncTriggerService
- Add documentation for dueDay/dueWithTime mutual exclusivity pattern
- Change docker-compose postgres port to 55432 to avoid conflicts
2026-01-29 18:24:15 +01:00
Corey Newton
3aa21d751a
docs/wiki content v0.4 (#6257)
* docs(wiki): enhance keyboard shortcuts documentation

Added detailed descriptions of functional grouping for keyboard shortcuts, including categories such as Global, Navigation, Task management, and UI panels. Updated the Global Shortcuts section for clarity and included platform-specific differences, configurable vs reserved shortcuts, context-dependent behavior, and storage definitions. This improves user understanding of the shortcut system and its configuration.

* docs(wiki): add reference to Web App vs Desktop differences

Updated the 3.00-Reference and 3.02-Settings-and-Preferences documentation to include a new section on differences between the Web app and Desktop app, linking to the newly created [[3.05-Web-App-vs-Desktop]] page. This enhances clarity and provides users with a direct reference for understanding the distinctions.

* docs(wiki): expand short syntax documentation

Enhanced the 3.04-Short-Syntax.md file by detailing the four main short syntax forms for task metadata: tags, projects, time estimates, and due dates. Each syntax form now includes its purpose, grammar, valid and invalid examples, and additional parsing rules. This update improves user understanding of how to effectively utilize short syntax in task management.

* docs(wiki): add User Data reference to documentation

Included a new reference to [[3.06-User-Data]] in both the 3.00-Reference and _Sidebar.md files. This addition enhances navigation and provides users with direct access to information regarding user data management.

* docs(wiki): expand API documentation for Sync Server and Plugin API

Added comprehensive details on the Sync Server REST API and Plugin API, including authentication methods, endpoint descriptions, request/response schemas, error codes, rate limits, and data retention policies. This update significantly enhances the documentation, providing users with a clearer understanding of the APIs available for data synchronization and plugin development.
2026-01-29 17:35:38 +01:00
Corey Newton
8118f7cada
docs/wiki content v0.3 (#6231)
* docs(wiki): add "views"

* docs(wiki): fix MD compliance (inline HTML)

* docs(wiki): local style linting
2026-01-28 16:11:22 +01:00
Johannes Millan
e6fba6b3ed docs(sync): document protected client IDs mechanism and update tests
Add documentation explaining why all vectorClock keys must be protected
during SYNC_IMPORT/BACKUP_IMPORT operations to prevent incorrect
CONCURRENT comparisons after vector clock pruning.

Update tests to verify multi-key vectorClock protection.
2026-01-27 18:43:22 +01:00
Serif
bc3df77e3f
feat(tools): enhance translation management script (#6171)
- Add extract and merge modes to manage missing translations
- Implement functions to extract missing keys and merge WIP files
- Create usage documentation for the translation management script
2026-01-25 18:08:06 +01:00
Johannes Millan
c3db97b0e8 docs: add plan 2026-01-25 13:49:30 +01:00
Corey Newton
c5f99f3bf8
docs/fix broken links (#6158)
* docs(wiki): update use of aliases

* docs(wiki): fix broken links from aliases

Removed aliases from Wiki-style links, exclamation marks for image embedding, and recombine the Installation instructions.
This is also a test of the new permissions for the GitHub Action.
2026-01-25 10:08:09 +01:00
Johannes Millan
ec847ce897 fix(sync): use manual code entry for Dropbox auth on all platforms
- Force dialog to show input field instead of OAuth redirect spinner
- Remove platform-specific OAuth redirect URI logic
- Ensures reliable copy/paste auth flow on Android, web, and Electron
2026-01-24 21:14:57 +01:00
Corey Newton
db5f927062
docs(wiki) v0.2: refactor and populate meta notes (#6134)
Substantial re-work and addition of meta notes. Still many stub notes
and incomplete placeholders but the majority of the structure is
established and filling out the actual content is now a priority.
2026-01-24 21:14:29 +01:00
Johannes Millan
8931759745 docs(supersync): add CORS wildcard support design 2026-01-24 12:56:11 +01:00
Johannes Millan
683600799f docs: add plans 2026-01-23 22:16:31 +01:00
Johannes Millan
f6a7c28f43 feat(build): add SignPath code signing integration for Windows
- Add SignPath signing step to windows-bin job in build workflow
- Configure signing for all Windows executables (NSIS installers and portable .exe)
- Disable auto-release in electron-builder to allow signing before release
- Add manual GitHub Release upload after signing completes
- Add comprehensive documentation for SignPath setup and configuration
- Document required GitHub secrets and workflow configuration
- Include verification steps and troubleshooting guide

The integration is ready but signing steps will be commented out initially
until the SignPath certificate is fully issued (currently CSR PENDING).
2026-01-23 14:31:24 +01:00
Johannes Millan
b20db79f1d docs(supersync): fix critical issues in encryption-at-rest plan
Address all critical findings from Codex AI security review:

Critical Fixes:
- Fix AES-256 key size (256→512 bits for XTS mode)
- Fix rollback procedure to restart container before restore
- Add mount guards to prevent data loss from unmounted volumes
- Add prerequisites section with verification script
- Add Docker naming clarification with discovery scripts

Security Enhancements:
- Switch to OpenSSL streaming encryption (no temp files)
- Add MD5 checksum verification to migration
- Add LUKS header backup/restore procedures
- Add passphrase complexity validation

Operational Improvements:
- Add monitoring integration (Prometheus, Nagios, email)
- Implement backup rotation script (7d/4w/12m retention)
- Add systemd mount integration option
- Enhance unlock script with data verification

Scores updated:
- Security: 75/100 → 92/100
- GDPR Compliance: 80/100 → 95/100
- Confidence: 85% → 92%

Plan is now production-ready with all critical issues resolved.
2026-01-23 14:31:24 +01:00
Johannes Millan
eb1bee33d7 docs(security): add SuperSync encryption at rest implementation plan
Add comprehensive plan for implementing LUKS volume encryption to meet
GDPR compliance requirements. Includes:

- Dual-key LUKS setup (operational + emergency recovery)
- Encrypted backup procedures with GPG
- Complete migration runbook with rollback procedures
- Key management and rotation procedures
- Audit logging for GDPR compliance
- Performance benchmarking criteria

Addresses primary GDPR compliance gap (database encryption at rest).
Reviewed by technical and security agents with 85% confidence level.
2026-01-22 13:34:54 +01:00
Johannes Millan
73c1848ba9 fix(docs): resolve markdown linting errors in all wiki files
- Add top-level headings to all wiki files (MD041)
- Fix heading spacing and blank line issues (MD022, MD012)
- Convert HTML badges to markdown format (MD033)
- Add alt text to images (MD045)
- Fix list indentation and numbering (MD005, MD029, MD032)
- Remove trailing punctuation from headings (MD026)
- Convert emphasis to proper headings (MD036)
- Fix heading level increments (MD001)
- Add trailing newlines to all files (MD047)

This ensures the wiki-sync.yml GitHub Action will pass linting.
All changes maintain the same visual appearance and functionality.

Fixes the lint failures reported in GitHub Action run #21212863659
2026-01-21 18:03:05 +01:00
Johannes Millan
0b266bebc5 docs: add plan 2026-01-21 14:30:24 +01:00
Johannes Millan
dab0172a48
Merge pull request #6071 from zenoprax/pr/wiki-sync
docs(wiki): initial revision (v0.1)
2026-01-21 12:22:34 +01:00
Johannes Millan
955a3e13c5 docs: add plan 2026-01-20 17:07:23 +01:00
Corey Newton
f9a328022d
docs(wiki): initial revision (v0.1)
Contains both a first-draft of content as well as
a comprehensive GH Action to replicate from
docs/wiki to the `.wiki` sub-repo. The linting is
non-blocking at the moment.

- the existing markdown linking appears reliably
rendered in GH but more testing needed.
- style guide for contributions/expectations needs
to be added to the wiki
- **a significant re-work of the README** to
re-direct users to the Wiki is needed to avoid
doc duplication
- updates to the PR templates and contributor
guidelines to emphasize the importance of adding
documentation is still needed
2026-01-20 03:04:08 -08:00
johannesjo
9d19a481c8 fix(ios): use correct bundle ID com.super-productivity.app 2026-01-16 16:07:33 +01:00
johannesjo
d58f5eb6b7 docs: add iOS App Store build and publish notes 2026-01-16 16:02:13 +01:00
Johannes Millan
038a722ed8 style: apply prettier formatting 2026-01-10 17:09:14 +01:00
Johannes Millan
150fd074ab Merge branch 'master' into feat/operation-logs
Integrate master branch updates into operation-logs feature branch:
- Add heatmap components and scheduled date group pipe
- Add task delete confirmation dialog and tests
- Update Android focus mode and sound configuration
- Add GitLab PAT authentication support
- Merge translation keys and i18n updates
2026-01-09 16:57:25 +01:00
Johannes Millan
af4e622f91 chore(i18n): remove additional 86 orphan translation keys
Remove keys that are duplicates, never implemented, or obsolete:
- F.SAFETY_BACKUP.* (32) - orphan duplicate of F.SYNC.SAFETY_BACKUP
- F.PROCRASTINATION.* (32) - feature never implemented
- GCF.PAST.* (11) - orphan duplicate of GLOBAL_RELATIVE_TIME.PAST
- GCF.TIMELINE.* (10) - settings form never implemented
- WW.HELP_PROCRASTINATION (1) - related to unimplemented feature

Total unused keys reduced: 350 → 264
Remaining 264 keys need case-by-case review (planned features,
dynamic object access patterns, edge cases).

Add docs/unused-translations-analysis.md with detailed findings.
2026-01-09 14:59:05 +01:00
Johannes Millan
9605177fc0 docs: enhance SuperSync vs file-based comparison with detailed diagrams
Add comprehensive comparison diagrams:
- Side-by-side architecture showing upload/download flows
- Key conceptual differences (source of truth, sequencing, etc.)
- Detailed feature comparison table with "winner" column
- Trade-offs visualization (bandwidth, setup, history, etc.)
- Concurrent edit scenario showing gap detection vs piggybacking
2026-01-08 11:31:07 +01:00
Johannes Millan
c7bc9d4978 docs: add detailed master architecture diagram for file-based sync
Replace simple "Complete System Flow" with comprehensive diagram showing:
- Client-side sync loop, download flow, upload flow
- Conflict management with LWW auto-resolution
- First-sync conflict dialog and snapshot hydration
- Piggybacking mechanism on upload
- File provider layer with adapter methods
- Remote storage structure

Also add Quick Reference Tables for:
- File operations (download/upload methods)
- sync-data.json structure
- Key implementation details
2026-01-08 11:12:42 +01:00