Drives the reply flow through the browser: existing comment is
quoted via the Reply action, the prefilled blockquote round-trips
to the saved reply, the chevron jumps back to the original and
applies the brief highlight.
Route the create flow through taskStore.createNewTask so titles typed
into the related-task input get parsed for labels, priority, assignees,
due dates and cross-project targets - matching the main add-task input.
Also surface the quick-add-magic hint next to the field.
The home route's beforeEnter guard redirects to the last visited project
when defaultPage is LAST_VISITED (the new default). This caused the
second test to never reach Home.vue after visiting projects, since
page.goto('/') triggered a fresh page load where the redirect guard
was not yet primed.
Navigate to '/' first to set the sessionStorage redirect flag, then use
the Overview menu link (SPA navigation) to return home.
Made-with: Cursor
Replace waitForLoadState('networkidle') with waitForResponse on the
GET /api/v1/user call so assertions run after the auth store has
processed the updated showLastViewed setting.
Made-with: Cursor
Resolve conflicts in router/index.ts (keep all store imports) and
General.vue (convert defaultPage setting to new FormField/FormSelect
components, keep both defaultPage fallback and quickAddDefaultReminders
clone in settings init).
Made-with: Cursor
CI shard 4 hit a ~996ms skew between the JS-constructed originalDue and
the backend's advanced due date, enough to bust the <500ms precision
bound. Bump precision to -4 (<5s) — still tight enough to confirm the
regeneration advanced by ~1 day, loose enough to absorb sub-second
round-tripping through Date → ISO → Go time.Time → JSON.
Covers #2546: a logged-in user navigating to a public link share URL
used to bounce infinitely between /share/:hash/auth and the project
view, stranding the user on an empty NoAuthWrapper shell. Two distinct
issues in checkAuth() produced the same symptom:
1. The 1-minute debounce skipped re-parsing the new link share JWT
when the user was already authenticated.
2. The "same user, skip setUser" fast path compared only `id`, so a
logged-in user whose id collided with the link share's id kept
the USER `info.value.type` and `authLinkShare` never flipped.
The test pins both the logged-in user and the link share to the same
numeric id so it exercises the collision path, which catches both
regressions at once.
The anonymous link share tests don't use the authenticatedPage fixture
(which implicitly calls setupApiUrl via login()), so the browser was
falling back to the default `window.API_URL = '/api/v1'` baked into
index.html. That relative path resolved against the preview server port
and never reached the API, causing the tests to hang on the NoAuth
"Welcome Back" page waiting for elements that never rendered.
Adding a beforeEach that calls setupApiUrl() restores these tests.