Skip to content

Promote edge to stable: Polis 2.43.2 - #3351

Merged
colinmegill merged 2 commits into
stablefrom
edge
Nov 5, 2026
Merged

colinmegill merged 2 commits into
stablefrom
edge

Conversation

@github-actions

@github-actions github-actions Bot commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

Release plan

Version: 2.43.2

Reason: no new selected migrations

Previous stable: e62b94c1a33477e45e3ddef8343ede009eb1b644

Candidate: 827e5e551d16b18e0202da67a310ff538bf6832d

release.txt additions:

  • none

Merge the reviewed version preparation into edge, then refresh this plan for the resulting edge SHA before merging the promotion with a merge commit.

colinmegill and others added 2 commits November 5, 2026 00:17
…hanged (#3349)

Since pca2 moved to the Rust API, almost every poll was a cache miss: each
cached body expired after three seconds absolutely, and the participation
client polls every five, so each poll reread the math result from Postgres
(933 misses to 11 hits in the first forty minutes; p50 4.7 ms and p99 73 ms
against Node's 2.5 and 38). Node checks the committed generation first and
reuses the body when nothing changed.

After the three seconds the route now reads only the generation (one
indexed query on the route's own bounded read-only pool) and serves the
cached body and ETag when it is unchanged; it rebuilds on a real change. A
failed generation read answers 502 after the statement timeout, never a
stale body. The empty-conversation placeholder and clock-dependent bodies
are never reused; a test pins that a first real generation at tick 0 is
served. The entry count is a setting, POLIS_API_PCA_CACHE_ENTRIES, default
300 as Node has used for years, refused when invalid, and a test checks the
setting reaches the cache. Parsed and compressed bodies are shared
references, no longer deep-copied under the cache lock.

Parity: the full pca2 conformance replay (344 recorded and 64 extra
requests) gives zero differences before and after; a 257-step poll sequence
with cache-busters, a generation bump, a delete and recreate and a locked
math table matches Node byte for byte and ETag for ETag, including the case
where math is rewritten without a new generation, which Node already served
from cache and the Rust route did not. On a large conversation a
revalidated poll costs 0.3 ms against a 16 ms miss.

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@colinmegill
colinmegill marked this pull request as ready for review November 5, 2026 08:49
@colinmegill
colinmegill merged commit 34a2f90 into stable Nov 5, 2026
80 of 81 checks passed

This branch is waiting to be deployed

1 waiting deployment
release — 827e5e55 Waiting Nov 5, 2026 by colinmegill via publish #3
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