Reject invalid and stale history cursors - #1549
Conversation
258700e to
f5c0af3
Compare
f5c0af3 to
6072d2a
Compare
|
Merge queue CI: cancelled — run 35141021695, attempt 1.
The run summary lists reused suites and executed checks. A green PR check alone does not mean queue validation has passed. |
|
Merge queue CI: success — run 35175036706, attempt 1. The run summary lists reused suites and executed checks. A green PR check alone does not mean queue validation has passed. |
|
Merge queue CI: success — run 35175248413, attempt 1. The run summary lists reused suites and executed checks. A green PR check alone does not mean queue validation has passed. |
Scope
Keep the existing
created_at|idhistory cursor format while rejecting malformed and stale cursors explicitly.HISTORY_CURSOR_INVALIDandHISTORY_CURSOR_INVALIDATEDv4 errors.Windows CI follow-ups capture expected Goal observer warnings without rendering tracebacks inside the test deadline, preserve native Win32 error metadata for the existing bounded private-path contention handling, and use the current Python executable in execution fixtures. Two SQLite/install startup contracts run in the existing serial phase; the probe cancellation test always releases and drains its worker. Existing timeout limits, external-thread cancellation, durable-state assertions, and ACL/identity checks remain enforced.
Compatibility and Upgrade
No database, configuration, session, or desktop profile migration is required. Valid cursors retain their ordering behavior. Null/blank inputs remain compatible. Malformed or stale non-empty cursors now return explicit errors; Web clients recover through the current Session Read boundary. CLI error propagation requires no change.
Branch
Base branch: main
Target exception: N/A
Issue
Linked issue: None
If None, reason: Standalone history consistency fix without a linked public issue.
Release Note
Release note: History pagination rejects malformed and stale cursors and Web retries safely from the latest page.
Tests
942a6ee5a: CI run 35157339327 passed all 38 executed jobs (2 conditional skips), including all Linux/Windows shards, WebUI validation/recovery, cross-platform Desktop E2E, and Windows Contract determinism. The Windows gateway-sqlite shard passed 10,284 parallel tests and 25 serial tests. Protected merge-queue validation runs separately. A later main update introduced generated aggregate conflicts; headb4df90f2bmerges main and regenerates both aggregates from the combined schemas. Two independent generator passes agree; Python history/provider/SQLite checks pass 283 tests (1 skip), forced SQLite fallback passes 14 tests, six WebUI files pass 278 tests, and full WebUI typecheck passes. Fresh CI run 35169835119 passed all 39 executed jobs (2 conditional skips), including all Windows shards and cross-platform Contract determinism; protected queue validation remains separate.Local checks use synthetic data and isolated test state. No credentialed provider run or released installer acceptance was performed.
Maintainer Live Check
Maintainer live check: no
Surface: gateway, browser
Safety
No secrets, local paths, private prompts/transcripts, channel identifiers, or private fixtures are included.
Third-Party Origin
Third-party origin: none
Details if non-none: N/A.
Documentation Changes