Public course catalogue — filter state and return handoff Scope: public category, district, sort and numbered pages. Excludes personal queries, login, personalized recommendations and infinite scrolling. Fixture: Design / North / start-date order / page 2 / 20 per page. Open Poster Making in the same tab, then return. Storage: applied public filters belong in the URL. Unapplied edits stay in the screen. Store item identity, position and input method against that particular list visit, never in a shared URL. Ignore absent or mismatched return context. Apply: applying filters or sort resets to page 1 and adds one history entry. Applying the same committed state adds none. Pagination preserves filters and sort. Defaults: all categories, all districts, start-date order, page 1. History traversal: restore the entry URL into both applied and draft controls, then query without adding an entry. Normalize malformed values to documented defaults, explain the change and replace the current entry. Duplicate filter keys take the corresponding default. Return action: use Back only for a verified same-tab immediate list predecessor. Otherwise navigate to a validated list URL. With no list context, offer the default catalogue link. Never use an arbitrary external return URL or blind history.back(). Responses: apply only a response matching the current visit and newest request sequence. A retry for the same conditions has a new sequence. On failure retain conditions and URL, hide previous results and offer Retry. Zero matches is a successful empty result. Position: after rendering current results, reveal the remembered item if it still belongs to that page. For keyboard entry, focus its link. If missing or without return context, use the results heading. Cancel delayed automatic movement if the reader has started another interaction. Browser and app restoration must have one owner. Shrunken page range: retain filters and sort, use the last valid page and replace the current entry. For zero matches use page 1 and the empty state. Explain the change; do not scan every page to chase the old item. Sharing: a new tab opens current results for those conditions from the results heading. Old order, counts and scroll are not guaranteed. Break equal start dates with a stable course-identity order. Ownership: planning decides restoration and exceptions; engineering handles URL validation, history, request sequences and a single restoration owner; design covers state messages and focus; QA uses the 12 acceptance cases; operations checks deletion, closing and reduced-page cases. Release: align the decision sheet, screen transitions and wording, API sort/count contract and QA inputs/expected results. Block release if URL, applied controls and the current response disagree. Verification boundary: a design example based on public browser references and fictional conditions, not a completed integration test of a course service.