Add Projects refresh control#3993
Conversation
|
Hey @TheAngryPit! 👋 Nice write-up — the layered refresh triggers (visibility, focus, 15 s heartbeat, manual button) are well-reasoned and the PR body walks through exactly what a reviewer needs to scope this quickly. I've assigned @mrcfps for code review and added @elihahah666 to take a look at the UX side (new toolbar button + the auto-refresh default behavior change). Once they've weighed in we'll move to merge from there. A couple of things to have handy when review feedback arrives:
💡 To drive this PR to merge hands-free, paste this to your AI coding agent (Claude Code / Codex / opencode / Cursor …): |
mrcfps
left a comment
There was a problem hiding this comment.
@TheAngryPit Thanks for adding the in-app Projects refresh path — I reviewed the changed ranges and found one merge-safe follow-up around failed refresh handling that’s worth tightening up.
🔁 Powered by Looper · runner=reviewer · agent=opencode · An autonomous AI dev team for your GitHub repos.
mrcfps
left a comment
There was a problem hiding this comment.
@TheAngryPit I reviewed the changed ranges on this head, including the App → EntryView/EntryShell wiring, the DesignsTab refresh/failure handling, the analytics union update, and the focused component coverage for manual + active-tab refresh behavior. The unhandled rejection follow-up from the prior review is addressed on this head, and the refresh path now looks internally consistent. Thanks for the quick follow-through on this one 🙌
|
All review feedback has been addressed and the PR is now approved with checks green. I attempted to add it to the merge queue, but GitHub returned Aegis |
|
Hey @TheAngryPit — confirmed, mrcfps's APPROVED review is on the current head and CI is green. 🙌 One remaining gate: @elihahah666 is listed as a reviewer for the product/UX side (new toolbar button + the auto-refresh default). Once she's had a look, a maintainer can queue or merge from there. |
|
Thanks @lefarcen , makes sense. @elihahah666, happy to adjust the UX if you want a different treatment for the toolbar entry point or the default refresh behavior. Current intent was to keep the manual control discoverable while bounding the automatic refresh to the active, visible Projects tab so it does not poll in the background. Pit |
Why
While using Open Design as a local-first workspace, the Projects grid can stay stale after project data changes outside the current web view. The current workaround is to restart or manually reload the app, which is too heavy for a desktop design workflow.
This adds a bounded in-app refresh path for the Projects view so users can resync the list without leaving the app.
What users will see
Projects now has a Refresh button next to search.
When the Projects tab is active and the document is visible, the list also refreshes:
The refresh button shows the existing spinner state while a refresh is in flight, and repeated refreshes are guarded so the view does not stack concurrent requests.
Surface area
apps/webodsubcommand or flag, newtools-dev/tools-pack/tools-prflag, or newOD_*env varrefreshskills/,design-systems/,design-templates/, orcraft/, or change to the skills protocolpackage.jsonScreenshots
Not captured in this environment.
Bug fix verification
apps/web/tests/components/DesignsTab.select-mode.test.tsxmainand green on this branch: no. The bug was observed as stale project cards in the desktop app; this PR adds the missing refresh entry point and covers the new behavior with focused component tests.Validation
pnpm exec vitest run -c vitest.config.ts tests/components/DesignsTab.select-mode.test.tsxfromapps/web: passed, 9 testspnpm --filter @open-design/web typecheck: passedpnpm --filter @open-design/contracts typecheck: passedpnpm --filter @open-design/web... build: passedpnpm guard: passedNotes:
v26.0.0; the workspace emits the existing engine warning because it wants Node~24.pnpm guardand the web build had to run outside the Codex sandbox becausetsxopens a temporary IPC pipe that the sandbox blocks withlisten EPERM.