mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-07-19 01:17:31 +00:00
* feat(project): add project completion with celebration + trophy view
Completing a project marks it done and archives it, with a celebration
dialog (confetti + live stats) and a prompt to resolve unfinished tasks
(move to Inbox / mark done). Completed projects show a trophy badge and
a Reopen action on the archived-projects page.
isDone stays distinct from isArchived; selectArchivedProjects is left
intact so completed projects' tasks stay filtered out of Today/Overdue.
Append/merge deferred to #8032. Plan: docs/plans/2026-06-05-project-completion.md
* refactor(project): drop Archive menu item; Complete is the retire path
Archive and Complete produced near-identical end states; collapse to one
user-facing action. Removes the 'Archive project' menu item and handler so
Complete is the single way to retire a project. The archiveProject action,
reducer and ProjectService.archive() stay (needed for op-log replay of
historical archive ops and the legacy unarchive/restore path). Wiki updated;
menu specs cover the Complete flow.
* fix(project): keep completion dialog open for the active project
MatDialog closeOnNavigation (default true) dismissed the celebration the
moment completing the currently-active project navigated to '/'. Navigate
first, then open the dialog.
* test(project): e2e for completion flow (complete, celebrate, reopen)
Covers the resolve-unfinished-tasks prompt, the celebration dialog with
stats, the trophy badge on the archived page, and reopening. Adds an
openProjectContextMenu page-object helper.
* feat(project): confirm project completion
* feat(project): show completion celebration fullscreen
* fix(project): harden completion celebration flow
* style(project): use spacing tokens in completion dialog
* fix(project): align completion screen with project context
* style(project): soften completion screen coloring
* style(project): reuse completion screen surfaces
* fix: refine project completion dialog actions
* fix: complete projects with atomic task resolution
* fix: restore archive path in project completion UI
* refactor(project): remove dead completion code
The project-level completeProject action (OpType.Update) was never
dispatched — completion goes exclusively through the atomic
TaskSharedActions.completeProject (OpType.Batch) meta-reducer. Drop the
dead action, its reducer case, the PROJECT_COMPLETE enum member and the
immutable 'PCO' op-log code (which would otherwise be permanently
reserved for an op that can never be produced); enum count 147->146.
Also remove the unused selectCompletedProjects / selectPlainArchivedProjects
selectors (no consumers) and the misspelled, unused 'angel' confetti
field, keeping the regression tests that guard selectArchivedProjects.
* fix(project): make project completion non-reversible
Completion resolves a project's open tasks (move-to-inbox / mark-done),
which reopen cannot truly restore, so the "Reopen"/"Undo" affordances on
the completion path were misleading. Drop the celebration dialog's Reopen
button and the post-complete undo snack; the fullscreen celebration is
the feedback and deliberate reactivation still lives on the
archived-projects page (Project.reopen kept for it).
Also restore the project title param on the archive confirm dialog (it
was rendering a raw {{title}} placeholder), remove the now-unused
moveTasksToInbox / markTasksDone resolution helpers (the meta-reducer
resolves tasks atomically), and drop the orphaned UNDO / S.COMPLETED
i18n keys. Updates the completion e2e to the close flow and asserts the
resolution props are forwarded to the atomic action.
* fix(tasks): cancel native reminders for project-completed tasks
Completing a project marks its unfinished tasks done inside the
meta-reducer (no per-task updateTask), so unscheduleDoneTask$'s
native-reminder cancellation is bypassed and an OS-scheduled Android
notification could still fire for a now-done task. Add a local-only
effect that cancels native reminders for the force-completed task ids.
Local-only by design: it dispatches no actions (the persistent
dismissReminderOnly/clearDeadlineReminder would each be an extra synced
op), and done tasks are already filtered from reminders$ on all
platforms — only the native Android notification needs explicit removal.
* test(project): drop TaskService spies orphaned by helper removal
getByIdWithSubTaskData$/moveToProject/setDone/setUnDone were only used
by the removed moveTasksToInbox/markTasksDone helpers and their deleted
tests.
* feat(sync): affectedEntities multi-entity conflict detection for atomic completion
WIP checkpoint of the atomic completeProject approach. The Batch op declares
every touched entity (PROJECT, INBOX, TASKs, TODAY_TAG) via a new
affectedEntities field threaded through op-log capture, conflict detection,
the sync server (+Prisma migration) and shared-schema. Per-effect
completeProject handlers (issue two-way-sync, time-block, repeat-cfg)
re-derive the task changes the atomic op bypasses.
* revert(sync): remove affectedEntities multi-entity conflict detection
Reverts
|
||
|---|---|---|
| .. | ||
| assets | ||
| 0.-Meta-Diataxis.md | ||
| 0.00-Wiki-Structure-and-Organization.md | ||
| 0.01-Style-Guide.md | ||
| 0.02-Wiki-QA-and-Maintenance.md | ||
| 1.00-Quickstarts.md | ||
| 1.01-First-Steps.md | ||
| 1.02-Configure-Data-Synchronization.md | ||
| 2.00-How_To.md | ||
| 2.01-Downloads and Install.md | ||
| 2.02-Restore-Data-From-Backup.md | ||
| 2.03-Add-Tasks.md | ||
| 2.04-Manage-Subtasks.md | ||
| 2.05-Manage-Scheduled-Tasks.md | ||
| 2.06-Manage-Repeating-Tasks.md | ||
| 2.07-Manage-Task-Integrations.md | ||
| 2.08-Choose-Sync-Backend.md | ||
| 2.09-Configure-Sync-Backend.md | ||
| 2.10-Configure-Obsidian-for-Wiki-Contributions.md | ||
| 2.11-Run-the-Development-Server.md | ||
| 2.12-Package-the-App.md | ||
| 2.13-Run-with-Docker.md | ||
| 2.14-Build-for-Android.md | ||
| 2.15-Develop-a-Plugin.md | ||
| 2.16-Set-Up-Development-Environment.md | ||
| 2.17-Add-a-New-Issue-Integration.md | ||
| 2.18-Contribute-Translations.md | ||
| 3.00-Reference.md | ||
| 3.01-API.md | ||
| 3.02-Settings-and-Preferences.md | ||
| 3.03-Keyboard-Shortcuts.md | ||
| 3.04-Short-Syntax.md | ||
| 3.05-Web-App-vs-Desktop.md | ||
| 3.06-User-Data.md | ||
| 3.07-Issue-Integration-Comparison.md | ||
| 3.08-Sync-Integration-Comparison.md | ||
| 3.09-Theming.md | ||
| 3.97-Obsidian-Linter-Config-MD.md | ||
| 3.98-Obsidian-Linter-Config-YAML.md | ||
| 3.99-Other.md | ||
| 4.00-Concepts.md | ||
| 4.01-The-Today-View.md | ||
| 4.02-Inbox-View.md | ||
| 4.03-Planner-View.md | ||
| 4.04-Schedule-View.md | ||
| 4.05-Board-View.md | ||
| 4.06-Project-View.md | ||
| 4.07-Tag-View.md | ||
| 4.07a-Tags_Eat-the-Frog.md | ||
| 4.07b-Tags_Ordinal-Priorities.md | ||
| 4.08-Time-Estimates.md | ||
| 4.09-Task-Attributes.md | ||
| 4.10-Task-Notes.md | ||
| 4.11-Subtasks.md | ||
| 4.12-Scheduled-Tasks.md | ||
| 4.13-Repeating-Tasks.md | ||
| 4.14-How-Time-Is-Logged.md | ||
| 4.15-Timers-and-Focus-Mode.md | ||
| 4.16-Break-Reminders.md | ||
| 4.17-Idle-Time.md | ||
| 4.18-Reflection.md | ||
| 4.19-Metrics.md | ||
| 4.20-Task-Archiving.md | ||
| 4.21-Worklog.md | ||
| 4.22-Quick-History.md | ||
| 4.23-Managing-Your-Data.md | ||
| 4.24-Integrations.md | ||
| _Footer.md | ||
| _Sidebar.md | ||
| Home.md | ||