feat: NFR-PERF-MENTION-001 — mention search latency budget #632
Reference in New Issue
Block a user
Delete Branch "%!s()"
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?
Context
The 150 ms debounce in
PersonMentionEditor.svelte(SEARCH_DEBOUNCE_MS) is currently uncited — no explicit NFR anchors it. PR #629's AC table claims "150 ms debounce per NFR" without a referenced NFR ID, which Elicit (#10926, #10962) flagged as Acceptance-Criteria-without-a-spec.Requirement
NFR-PERF-MENTION-001: When the user pauses typing in the @mention search input, the system shall present updated results within 400 ms on a typical broadband connection (95th percentile).
The 400 ms figure follows the Doherty Threshold (interactive systems below 400 ms feel "instant"). Current debounce 150 ms + median backend p95 (~150 ms) + render ~50 ms ≈ 350 ms.
Measurement method
The latency is measured end-to-end in the Playwright @mention E2E suite (filed under #635) — from
t_keystroke_stop(the lastfill()/type()input event on the searchbox) tot_dropdown_render_complete(the first list option becoming visible toexpect.element(...).toBeVisible())./api/personsspan) and via Postgrespg_stat_statements— both already in the observability stack.Failure criteria
/api/personsserver-side latency plus the frontend RUM/Sentry transaction (if/when wired) alarms at p95 > 400 ms sustained for 10 min. Treated as a P2 follow-up, not a release blocker — the CI gate is the hard wall.Out of scope
Acceptance
Reviewer rationale: Elicit on PR #629 comments #10926, #10962, #11058 (round 3 — measurement method + failure criteria gaps).