Fix #318: cross-page cache invalidation #321
No reviewers
Labels
No labels
actions
bug
cli
duplicate
enhancement
fork
forum
git storage
help wanted
insights
invalid
issues
moderation
oidc
ownership transfer
packages
pr/merge protection rules
projects
pull requests
question
releases
sponsorships
tags
webhooks
wiki
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
crueber/walhub!321
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/issue-318"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixes #318 — milestone reassignment showed stale membership in milestone-filtered issue lists until reload (client cache-invalidation gap; server path already correct).\n\nRoot cause: the useData promise cache is global across Solid-router navigations, but invalidation rode per-page SSE subscriptions — the issue page's num accept filter gated the shared
issues:{full}:*invalidation, and the milestones page subscribed to noissueframes at all.\n\nChanges (no new endpoints, no polling, no new deps):\n-web/src/lib/data.js: newinvalidateIssueLists(full)— mutation-site reconcile of theissues:{full}:prefix (Issues.jsx windows +issues:{full}:milestone:{id}entries) plusmilestones:{full}counts.\n-web/src/pages/Issue.jsx: all 8 thread-mutation tails route throughafterMutation()(pinned thread reconcile +invalidateIssueLists);useCollabStreamaccept filter dropped (frame keys are self-scoping —issue:{full}:{num}names the frame's own thread — so the filter only suppressed shared-prefix invalidation).\n-web/src/pages/Milestones.jsx: subscribes toissueframes (Issues.jsx pattern) so inline lists + counts self-heal while mounted.\n-web/src/lib/collab.js:issueframe map gainsmilestones:{full}(reassignment/close move counts without touching any milestone object).\n- Tests: newweb/test/unit/issue-invalidation.test.js(frame→key set, prefix coverage of both stale surfaces, mutation-site refetch scoping);collab-lib.test.jsframe-table pin updated.\n- Docs: decision appended todocs/features/08_ui_sdk.mdDecisions (law 12).\n\nOut of scope (noted in decision): pull pages keep their num filters — same latent pattern, follow-up.\n\nVerification: targeted node --test green (issue-invalidation, collab-lib, data-guard: 14/14); every other unit file green per-file;smoke.test.jshangs identically on clean main (pre-existing environmental — needs a live server, skip probe itself stalls); vite build passes (JSX compiles). Browser check: open (shared obscura daemon blocks loopback; no daemon started per instructions).Milestone reassignment showed stale membership in milestone-filtered lists until reload: the promise cache is global across Solid-router navigations but invalidation rode per-page SSE subscriptions. The issue page reconciles every thread mutation at the mutation site via invalidateIssueLists (issues: prefix + milestones counts), the milestones page subscribes to issue frames, the issue frame map gains milestones:{full}, and the issue page drops its num accept filter (frame keys are self-scoping). Decision appended to 08 Decisions.