WFDASH-WEBAPP/src/lib
Dave d55e54680b perf(search): narrow the recency window 90d -> 60d
Operator request. Bigger effect than expected.

THREE constants, not one

"90" appeared in three places, and two of them are load-bearing:

  universal-search-service.ts   UNIVERSAL_SEARCH_WINDOW_DAYS  orders scope
  quotes-search-service.ts      SEARCH_RECENT_WINDOW_DAYS     quotes pushdown
  quotes-service.ts             SEARCH_RECENT_WINDOW_DAYS     exported; shared
                                with the /quotes page + archive

The last two must stay equal — the /quotes page renders "Show recent
(last N days)" from the exported constant while the server filters on
the private one, so moving them apart desyncs the label from the
behaviour with no error anywhere. All three moved together. Universal
search calls searchQuotes without `includeOlder`, so it inherits the
quotes window; changing only the universal constant would have left
global search reading 60 days of orders and 90 days of quotes behind a
single "last 60 days" label.

The UI label reads windowDays straight off the service, so it follows.

MEASURED

Order candidate set collapses — the window was carrying far more than
the linear slice it looks like:

  90d -> 5,394 orders / 16,640 items / 6,696ms scope scan
  60d ->   972 orders /  3,307 items / 1,606ms scope scan

Cold search "tiaan": 17-22s -> 4.6s measured. That is most of the
mitigation the TTL bump was papering over, so the long-deferred pushdown
rewrite is now worth less than it was this morning.

Quotes genuinely drop, and it is real rather than a regression: Tiaan's
own quotes go 22 -> 6 between a 90- and 60-day window, because that
band is where most of his quotes sit. Verified against PB directly.

ALSO

Pinned the clock in the age-chip test. It asserted "4d" against a
fixture dated four days before the wall clock, so it expired the day
the date rolled past — it failed on this run for exactly that reason.
2026-10-15 16:02:34 +02:00
..
pdf fix(delivery-note): signed copy invisible, and a bigger QR in the corner 2026-10-04 17:00:30 +02:00
reports feat(audit): implement audit trail for delivery notes and orders 2026-09-30 01:48:44 +02:00
scan fix(scan): speed up QR recognition and keep scanning 2026-10-05 09:43:53 +02:00
server perf(search): narrow the recency window 90d -> 60d 2026-10-15 16:02:34 +02:00
audit-fetch.test.ts feat(audit): implement audit trail for delivery notes and orders 2026-09-30 01:48:44 +02:00
audit-fetch.ts feat(audit): implement audit trail for delivery notes and orders 2026-09-30 01:48:44 +02:00
audit-format.test.ts feat(audit): implement audit trail for delivery notes and orders 2026-09-30 01:48:44 +02:00
audit-format.ts feat(audit): implement audit trail for delivery notes and orders 2026-09-30 01:48:44 +02:00
delivery-note-stage.test.ts fix(delivery-notes): merge cancelled into completed, and fix the search 2026-10-04 23:29:48 +02:00
delivery-note-stage.ts fix(delivery-notes): merge cancelled into completed, and fix the search 2026-10-04 23:29:48 +02:00
dev-identity.test.ts
dev-identity.ts
file-fields.test.ts fix(delivery-note): signed copy invisible, and a bigger QR in the corner 2026-10-04 17:00:30 +02:00
file-fields.ts fix(delivery-note): signed copy invisible, and a bigger QR in the corner 2026-10-04 17:00:30 +02:00
geo.test.ts feat(visits): batch pin tool — tag every customer on a shaft at once 2026-09-07 08:30:23 +02:00
geo.ts feat(visits): batch pin tool — tag every customer on a shaft at once 2026-09-07 08:30:23 +02:00
giellie-image.ts feat(giellie): chat UI, approval card, photo/file composer, sidebar rename 2026-10-01 00:06:50 +02:00
giellie-sse.test.ts fix(giellie): stale-tab approval guard, size guard, SSE heartbeat, shared in-flight set 2026-10-01 00:36:55 +02:00
giellie-sse.ts feat(giellie): shared types and SSE codec 2026-09-30 23:34:53 +02:00
giellie-types.ts fix(giellie): args-aware tool policy, deny quotes.re_run_ai, harden bridge and agent 2026-10-01 00:36:54 +02:00
item-status-ui.test.ts
item-status-ui.ts Revert "feat(orders): add Duplicates tab surfacing flagged duplicate orders" 2026-08-31 16:34:37 +02:00
letterhead.test.ts
letterhead.ts fix(pdf): render through renderToBuffer, not pdf().toString() 2026-10-04 13:14:59 +02:00
order-age.test.ts feat(orders): add order-age util with bucket thresholds 2026-09-01 01:58:46 +02:00
order-age.ts feat(orders): add order-age util with bucket thresholds 2026-09-01 01:58:46 +02:00
order-color.test.ts
order-color.ts
order-invoices.test.ts feat(audit): implement audit trail for delivery notes and orders 2026-09-30 01:48:44 +02:00
order-invoices.ts feat(audit): implement audit trail for delivery notes and orders 2026-09-30 01:48:44 +02:00
order-item-qty.test.ts fix(orders): bill the customer quantity, not the supplier order_qty 2026-08-30 18:28:33 +02:00
order-item-qty.ts fix(orders): bill the customer quantity, not the supplier order_qty 2026-08-30 18:28:33 +02:00
order-rep.test.ts
order-rep.ts
pb-helpers-duplicate.test.ts
pb-helpers.ts feat(delivery-notes): one linear flow control, and fix the quote lookup 2026-10-05 18:21:19 +02:00
pin-model.test.ts
placeholder-customers.ts
pocketbase.ts
pos-cart-quantity.test.ts fix(pos): dead discount toggle + stale discount figure, lift dark palette 2026-10-12 23:17:57 +02:00
pos-inline-handlers.test.ts fix(pos): revive the dead "Print cash-up" button, add 20c/10c denominations 2026-09-19 07:30:11 +02:00
pos-search.test.ts feat(pos): tiered catalog search — word order, plurals, glued SKUs 2026-10-06 23:36:12 +02:00
price-list-search.ts
quote-pricing.test.ts feat(delivery-notes): lock the cost price, markup stays the only input 2026-10-15 15:44:24 +02:00
quote-pricing.ts feat(delivery-notes): lock the cost price, markup stays the only input 2026-10-15 15:44:24 +02:00
quote-status.test.ts
quote-status.ts feat(quotes): allow resubmit from any post-submit status, not just rejected 2026-09-07 16:51:55 +02:00
rep-visibility.test.ts feat: add isRepUser helper for rep-scoped list filtering 2026-08-31 23:24:25 +02:00
rep-visibility.ts feat: add isRepUser helper for rep-scoped list filtering 2026-08-31 23:24:25 +02:00
repair-document-stage.test.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
repair-document-stage.ts feat(stock): update pricing logic and transform script for fasteners 2026-09-21 12:32:44 +02:00
safe-next-path.ts fix: preserve destination through the login redirect 2026-09-01 15:47:27 +02:00
sops.ts feat: implement discount functionality in POS system 2026-09-03 12:19:21 +02:00
stock-fulfillment.test.ts
stock-fulfillment.ts
stock-low-stock.ts
stock-match.ts
stock-status.test.ts
stock-status.ts
supplier-color.test.ts
supplier-color.ts
theme-types.ts
themes.ts
tracker-parsing.test.ts feat(rep-visits): FleetAI tracker adapter, nearby-customer matching, stop detection 2026-09-06 14:22:28 +02:00
tracker-parsing.ts feat(rep-visits): FleetAI tracker adapter, nearby-customer matching, stop detection 2026-09-06 14:22:28 +02:00
types.ts feat(pos): ex-VAT totals, ad-hoc custom lines, fixed discount tiers 2026-10-12 22:54:09 +02:00
use-boolean-preference.ts
use-split-ratio.test.ts
use-split-ratio.ts
use-theme-id.ts
user-color.ts
utils.test.ts
utils.ts
visit-matching.test.ts feat(rep-visits): FleetAI tracker adapter, nearby-customer matching, stop detection 2026-09-06 14:22:28 +02:00
visit-matching.ts feat(rep-visits): FleetAI tracker adapter, nearby-customer matching, stop detection 2026-09-06 14:22:28 +02:00
visit-stops.test.ts feat(rep-visits): FleetAI tracker adapter, nearby-customer matching, stop detection 2026-09-06 14:22:28 +02:00
visit-stops.ts feat(rep-visits): FleetAI tracker adapter, nearby-customer matching, stop detection 2026-09-06 14:22:28 +02:00
working-days.ts