Skip to content

Fix IP assignment history cursors and page recovery - #507

Open
Kerrycek wants to merge 3 commits into
codex/user-data-api-contractfrom
codex/ip-history-ordered-cursor
Open

Kerrycek wants to merge 3 commits into
codex/user-data-api-contractfrom
codex/ip-history-ordered-cursor

Conversation

@Kerrycek

Copy link
Copy Markdown
Owner

English

Addresses #208 and the IP-history part of #189. The audit used the minimum ID
as its next cursor even though assignments are ordered by time; this can skip
or repeat rows. It now anchors on the last visible row and fetches one hidden
lookahead so a full final page disables Next. Changed earlier pages rebuild
forward cursors; errors offer retry and a first-page restart retaining filters,
and empty cursor pages retain backward navigation.

Dependencies: stacked on UI #496 for its committed-URL history fix. Requires
vpsAdmin API #44,
320af0e15, for (from_date,id) server cursor ordering and scoped invalid-cursor
errors. Do not promote against the old server contract. Actual joint VM/API
pagination remains an explicit beta gate; these browser tests use fixtures.

Validation on the combined current release + #496 + this change:

  • 20 IP audit/exact-filter Playwright cases pass, including both directions,
    three pages with tied dates and nonmonotonic IDs, exact end, history/reload,
    stale forward edges, HTTP400 recovery, empty pages and member route denial.
    The localized cases cover cs/en, desktop/mobile.
  • 14 existing user-data pagination browser cases pass; 4 networking surface
    smoke cases passed before integrating the unchanged Align user-data search and pagination with HaveAPI #496 adapter.
  • 44 targeted unit tests, typecheck, lint, i18n audit and build pass.
  • Earlier validation exposed a history race fixed by reusing Align user-data search and pagination with HaveAPI #496. One test
    wrongly expected member redirects instead of the access-denied page; corrected
    to assert visible denial and zero reads. An ancillary browser invocation lost
    its owned dev server and was rerun with proper server lifecycle. Final suites
    pass without retries; no checks were disabled.

Pages remain separate requests, not an atomic snapshot. No permission changes,
merge or shared deployment. See docs/contracts/ip-assignment-pagination.md.

Česky

Řeší historii IP z #208/#189. Kurzor se nyní bere z posledního zobrazeného
záznamu místo minimálního ID. Jeden skrytý řádek určuje dostupnost další
stránky; poslední plná stránka už nenabízí falešné pokračování. Po změně starší
stránky se obnoví navazující kurzor. Chyby mají opakování i návrat na první
stránku se zachováním filtrů, prázdná stránka ponechá možnost návratu.

PR navazuje na frontend #496 a vyžaduje backend #44. Nesmí se nasadit proti
starému cursor kontraktu; skutečné společné VM/API ověření ještě zbývá.
Prošlo 20 browser scénářů historie IP, 14 user-data scénářů, 44 unit testů,
typecheck, lint, i18n a build. Jde o fixture testy včetně cs/en a mobilu/desktopu,
nikoli certifikaci skutečné API paginace. Předchozí chyby testů i nalezená
navigační chyba jsou popsané výše, finální sady prošly bez retry.

Anchor on the last visible row and use lookahead for the terminal page.
Preserve recovery and filters when cursors expire or requests fail, and
rebuild forward edges when the previous page changes. Requires API44.
Reuse the committed-URL pagination fix from PR496 so browser history
cannot race a local cursor transition.
Make the API44 and UI496 requirements explicit and retain the isolated
API/UI integration gate separately from fixture browser evidence.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant