Skip to content

Commit ba7d1d5

Browse files
authored
Merge pull request #26 from ZDOSS/codex/post-july-flow-correctness
Fix post-July user flow correctness gaps
2 parents d10dc4c + dc6ea19 commit ba7d1d5

15 files changed

Lines changed: 350 additions & 54 deletions

AI.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ The core domain in `packages/core/src/domain/` covers the entities the plan call
8989
- the browser adapter now repairs older browser-local saves whose metadata index is missing by falling back to the raw `localStorage` project blob and reconstructing the saved-project index entry on load
9090
- the active project session is now persisted in `localStorage` (`gph.active.project`) and restored on startup through `restoreLastProjectSession()`, so reloads in both web and desktop shells reopen the last project instead of dropping the user into an empty shell
9191
- session restore now treats corrupt or invalid persisted bundles as stale state: failed import/validation clears `gph.active.project` instead of bubbling an unhandled rejection through the startup hook
92+
- session restore treats folder-backed active sessions as folder-backed only when the adapter exposes `loadFolderProject()`: if that folder-aware loader is missing or cannot read the project, it clears the active session and returns to the launcher/recent-project reconnect path instead of silently opening the browser-local recovery copy as browser mode
9293
- the web runtime now installs the same `WebLocalStorageAdapter` instance into both `window.__gph_store` and `WebStorageAdapter.adapter`, preventing auto-save and startup restore from drifting onto different adapter instances if adapter-local state is added later
9394
- the desktop runtime now installs the same `DesktopStorageAdapter.adapter` instance into `window.__gph_store`; folder-backed desktop saves/loads/existence checks/deletes call `save_project`, `load_project`, `project_exists`, and `delete_project`
9495
- `useProjectStore.setBundle()` and `markSaved()` normalize `bundle.projectSettings.storageTrust` to the runtime storage trust, so overview/settings/header storage surfaces do not keep showing browser-local after a folder save or open
@@ -183,7 +184,8 @@ The core domain in `packages/core/src/domain/` covers the entities the plan call
183184
- `/overview` is now the default in-project landing route; `OverviewView` derives health summaries from the active bundle, including active work, milestone progress, blocking relationships, future-only upcoming dates/reminders, triage-lane bug intake, recent activity, and the current storage trust/save state without adding new persisted overview state
184185
- `ProjectRouter` keeps `/board` pinned to `projectSettings.defaultViewId` when that view is a board, even if saved board views have earlier ordering, and only mounts the work-item modal overlay route while the current path is `/item/:itemId`
185186
- saved board/backlog/table views keep multi-value filter arrays intact when hydrated into the current single-select toolbar controls; selecting a concrete value intentionally narrows that one dimension, while untouched imported/command-created multi-value filters remain multi-value on update
186-
- create-item entry points now carry view context through `CreateItemPrefill` in `palette-bus.ts`; the shared dialog can receive and expose `typeId`, `statusId`, `priorityId`, and `assigneeId`, so board, bug triage, and my-work creates no longer drop the context that made the user click that surface's action in the first place
187+
- create-item entry points now carry view context through `CreateItemPrefill` in `palette-bus.ts`; the shared dialog can receive and expose `typeId`, `statusId`, `priorityId`, `assigneeId`, `milestoneId`, `startDate`, and `dueDate`, so board, bug triage, my-work, backlog, table, and calendar creates no longer drop the context that made the user click that surface's action in the first place
188+
- `createItemPrefillFromFilter()` in `views/planning/view-helpers.ts` is the shared adapter from active single-value planning filters into create-dialog defaults; board creation uses first-column status as a fallback, then lets active type/status filters override it, while backlog and table creation inherit active type/status/priority/assignee/milestone filters
187189
- the create-item dialog derives type defaults from dependency-tracked type-registry inputs while open, and its form-opening reset is split from derived default refreshes so a settings-level type default change can update selects without clearing a user's typed title or description
188190
- modal-style work item detail at `/item/:id` with full edit, checklist conversion, inline comment editing, subtasks, relationships, attachments, reminders, custom fields, readable activity, and pinned action footer; `WorkItemModal.tsx` is now the owning implementation and routes through the shared `Modal` primitive with `size="work-item"`, while `WorkItemDrawer.tsx` is only a compatibility wrapper that renders `WorkItemModal`
189191
- work item detail interactions avoid browser-native modal APIs for persisted edits/destructive work: comment edits use inline local state and `comment.edit`, permanent deletion uses shared `ConfirmDialog`, and relationship add/remove controls route through `relationship.create` / `relationship.delete` so duplicate/cycle validation remains in `@gph/core`
@@ -563,6 +565,14 @@ The core domain in `packages/core/src/domain/` covers the entities the plan call
563565
- refusing to silently open stale browser recovery when a selected folder does not contain the recorded `.pms.json`
564566
- replacing the misleading "could not be found in local storage" error with a reconnect message that names the recorded `.pm-suite` file
565567
- adding focused ProjectsListView regressions for reconnect-and-open, rejected/null folder-load recovery, and missing-folder-file behavior
568+
- fixed the post-July flow-correctness gaps by:
569+
- preventing folder-backed startup restore from silently downgrading to browser recovery when `loadFolderProject()` cannot read the project
570+
- tightening that guard so a folder-trust active session also clears when an adapter lacks `loadFolderProject()` entirely, rather than falling back through recovery-capable `load()`
571+
- extending the create dialog with milestone prefill and `item.create` submission support
572+
- making board, backlog, and table New item actions inherit active planning filters through `createItemPrefillFromFilter()`
573+
- adding the missing table-level New item action so table users do not have to leave the surface to create matching work
574+
- hardening the command-palette keyboard regression to wait for the palette focus effect before asserting `aria-activedescendant` movement in the full parallel UI suite
575+
- adding focused regressions for folder-session restore, create-dialog milestone defaults, and board/backlog/table filter-aware creation
566576

567577
## Open follow-on planning
568578

Readme.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ A free, open source, hybrid day-one project management suite for practical softw
66

77
The MVP implementation is in place. The current build supports:
88

9-
- **Workspace** with new/open/demo project flow, immediate folder-backed project creation when a folder is selected, recent-project reopen, browser-vs-folder storage guidance, inline delete/remove confirmation, an explicit `/projects` launcher route, and automatic restore of the last active project after reload
9+
- **Workspace** with new/open/demo project flow, immediate folder-backed project creation when a folder is selected, recent-project reopen, browser-vs-folder storage guidance, inline delete/remove confirmation, an explicit `/projects` launcher route, and automatic restore of the last active project after reload without silently downgrading folder sessions to browser recovery
1010
- **Shared UI foundation** with reusable buttons, icon buttons, fields, page headers, surfaces, toolbars, empty states, inline alerts, focus-restoring modal/dialog primitives, data tables, work-item metadata components, and responsive shell navigation that owns Escape while open
1111
- **Overview** as the default project landing view for created, opened, imported, demo, and restored projects, summarizing active work, milestone progress, blocked items, future upcoming dates/reminders, triage-lane bug intake, recent activity, and the current storage/save state
12-
- **Board** with drag-and-drop, WIP limits (warn + hard modes), explicit hard-limit feedback, column-based status grouping, context-aware item creation that starts in the first board lane, and whole-card link navigation that keeps visible card metadata available to assistive technology
13-
- **Backlog** with priority-sorted items, saved working views, shared text/type/status/priority/assignee/milestone filters, custom-field metadata tags, a shared toolbar, and a visible new-item entry point
14-
- **Table** with accessible sortable header buttons, corrected priority/updated sorting, saved working views, shared filters, column visibility and saved column order, row selection that survives filter changes, bulk status/priority/assignee edits, inline status/priority/assignee/milestone/due-date edits, custom-field columns, and shared metadata badges
12+
- **Board** with drag-and-drop, WIP limits (warn + hard modes), explicit hard-limit feedback, column-based status grouping, context-aware item creation that starts in the first board lane or active type/status filters, and whole-card link navigation that keeps visible card metadata available to assistive technology
13+
- **Backlog** with priority-sorted items, saved working views, shared text/type/status/priority/assignee/milestone filters, custom-field metadata tags, a shared toolbar, and a visible new-item entry point that inherits active planning filters
14+
- **Table** with accessible sortable header buttons, corrected priority/updated sorting, saved working views, shared filters, column visibility and saved column order, row selection that survives filter changes, bulk status/priority/assignee edits, inline status/priority/assignee/milestone/due-date edits, custom-field columns, shared metadata badges, and a filter-aware new-item entry point
1515
- **Docs** with Markdown editing, sanitized rendering, internal embeds, command-backed sections, reusable document templates, in-surface doc search, linked-work and backlink context panels, router-safe in-app navigation for preview links, stale document-route recovery, correct pane updates when switching documents, draft-preserving editor resets, shared confirmation for document deletion, and safe navigation to the next active document after deleting the open one
1616
- **Roadmap / timeline** with date drag/resize, milestone lanes, milestone progress and target dates, dependency indicators, explicit date controls that clear each side of a range independently, milestone reassignment, invalid-range feedback, and shared zoom/anchor controls
1717
- **Calendar** with accessible month navigation controls, month grid, date-based item visibility, explicit day-level scheduled-work creation through the shared work-item dialog, and an agenda for upcoming start/due dates and timezone-aware reminders that stay visible around UTC/local day boundaries
@@ -22,7 +22,7 @@ The MVP implementation is in place. The current build supports:
2222
- **Consistent settings editing** for members, statuses, priorities, types, and plugin trust with explicit edit or save/cancel flows instead of always-live row inputs
2323
- **Shared navigation config** so sidebar navigation and left-panel visibility toggles stay in sync
2424
- **Saved planning views** in the project view bar, with board/backlog/table save, update, delete, and reorder flows backed by validated shared filters that preserve multi-value saved filters
25-
- **Command palette** with `Ctrl/Cmd+K`, collision-safe combobox/listbox keyboard semantics, and `C` to create items through a draft-preserving dialog with view-aware defaults
25+
- **Command palette** with `Ctrl/Cmd+K`, collision-safe combobox/listbox keyboard semantics, and `C` to create items through a draft-preserving dialog with view-aware type/status/priority/assignee/milestone/date defaults
2626
- **Trash** with restore and confirmed permanent deletion for work items, documents, and attachments, including inline feedback when a recovery action cannot be completed
2727
- **Modal-style work item detail** backed by the shared modal primitive, with full edit, checklist (with convert-to-subtask), inline comment editing, an accessible comment composer, subtasks, relationship add/remove controls, custom fields, attachment upload/preview/delete, reminder create/update/delete, readable activity, app-owned permanent-delete confirmation, archive/trash/delete, and a pinned action footer
2828
- **Local full-text search** with structured filters
@@ -65,6 +65,7 @@ Note: This is a static client-side demo only. All data lives in the browser (loc
6565
- Creating a new project after selecting a folder writes the initial `.pm-suite/<project-id>.pms.json` file before the app enters the project, so the folder-backed copy exists immediately.
6666
- Opening from a selected folder reads the listed `.pms.json` file directly, even if that project has never been recorded in the browser-local recent-project index, and folder metadata wins over stale browser-local trust saved inside older project files.
6767
- PWA folder saves also keep a browser-local recovery copy so the project still reopens if the browser cannot restore folder access after reload; until the folder is selected again, that recovery load reports as browser-local because the app no longer has write access to the folder.
68+
- Automatic last-project restore for a folder-backed session reconnects through the folder-aware load path; if that path is unavailable or the folder project cannot be read, the app returns to the launcher/recent-project reconnect flow instead of quietly opening stale browser recovery as browser-local.
6869
- Opening a folder-backed PWA recent from the launcher reconnects the selected folder before loading the `.pms.json`; if a remembered folder cannot read the project, the launcher asks for the folder once more. If that reconnect is cancelled or unavailable, the browser-local recovery copy can still open, but if a selected folder is missing the recorded project file, the app asks for the folder that contains that `.pm-suite` path instead of silently opening stale recovery data.
6970
- If you edit that browser-local recovery copy and then select the folder again, opening the folder project promotes the newer recovery copy back into `.pm-suite` before returning to folder-backed mode.
7071
- If the folder file changed externally while the app was using browser recovery, the folder version is loaded instead of being overwritten by stale browser recovery data.
@@ -104,7 +105,7 @@ The UI/UX overhaul planning package lives in `docs/superpowers/specs/2026-07-02-
104105
| Suite | Count | Notes |
105106
| --- | --- | --- |
106107
| `packages/core` | 57 | Domain, storage, dispatcher, document sections/templates, automation rules, export, import |
107-
| `packages/ui` | 111 | AppShell, ProjectRouter, OverviewView, shared button/surface/modal primitives, WorkItemModal attachment/reminder/custom-field coverage, TrashView, BoardView, saved planning views, BacklogView, BugTriageView, MyWorkView, TableView, RoadmapView, CalendarView, CommandPalette, CreateItemDialog, launcher, docs, settings, automation settings |
108+
| `packages/ui` | 117 | AppShell, ProjectRouter, OverviewView, shared button/surface/modal primitives, WorkItemModal attachment/reminder/custom-field coverage, TrashView, BoardView, saved planning views, BacklogView, BugTriageView, MyWorkView, TableView, RoadmapView, CalendarView, CommandPalette, CreateItemDialog, launcher, docs, settings, automation settings |
108109
| `apps/web` | 4 | PWA storage adapter folder-picker create/list/load flow, reload recovery when folder-handle persistence is unavailable, recovered-edit promotion, and external folder-change protection |
109110
| `apps/desktop` | 2 | Desktop storage adapter command wiring |
110111
| `tests/e2e` | 10 | Hybrid parity, project workflow, theme, palette, export, search, calendar scheduled-work creation, docs edit/preview, mobile navigation |

0 commit comments

Comments
 (0)