Refactor
- simplify BsoQueryParam extractors (da840e1a)
- table-drive method_tag and scope the GCS attribution note (8515c49e)
- simplify w/ from_fn (38db116e)
- extract and share common code between transaction_http{,_then} (#2520) (bd857e79)
- convert BsoBodies extractor to async await (#2469) (570fe7ce)
Features
- delete last-seen BQ rows as part of record purge (#2672) (f2154b8f)
- write account last-seen timestamp in a BigQuery table (#2663) (a62d063e)
- require header to confirm collection deletion, optionally (#2667) (3606b838)
- time every request by route, method and status (8c7efa15)
- add reconciler finalize lag and run telemetry (#2584) (59a3f131)
- emit timing metrics for offloading (#2585) (f5331162)
- track offloaded payload sizes in spanner (#2572) (1eac2c96)
- update off-loaded gcs object name format (#2564) (534000a0)
- hard limit payload reads in extractors (#2552) (b293bb56)
- add metrics for gcs payload cleanup on failed db transactions (#2528) (6ea5e37b)
- tag the batch commit transaction so the reconciler keeps its payloads (#2518) (6417c0be)
- support the metadataTableName option (#2543) (a40f1a95)
- support assuming a spanner database role in payload-link-dataflow (#2519) (e1a2314d)
- use statsd with tags in the payload link reconciler (#2509) (de2417cb)
- add a fine grained access role for reading the change stream (#2507) (0d4b14c3)
- implements
allow_new_userssetting (#2304) (3a673696) - allow per collection overrides for max_request/post_bytes (#2484) (dc5afd0f)
- upload/download to/from gcs concurrently (#2476) (37a63b73)
- restrict gcs offload to spanner (#2471) (de108fda)
- attempt deleting gcs objects if db transaction failed (#2460) (6835a6b7)
- use per-collection limits in the load tester (#2461) (27785fb4)
- add compose e2e stack for payload-link reconciliation pipeline (#2442) (b1f1891e)
- loadtest expanded payloads (#2453) (3bfef9e6)
- add the change stream pipeline (#2441) (8e57355f)
- payload column nullable expanded storage (#2451) (bd52fb37)
- add optional per-collection storage limit overrides (#2450) (48e01c2f)
- ssdlc security scan workflow (#2445) (dc690714)
- add payload offloading to GCS read/write paths (#2407) (a22fc76a)
- combine dependabot PRs via github/combine-prs (#2401) (9237698c)
- allow quota enforcement for all db backends (#2381) (d7b89112)
- ci:
Chore
- update per RUSTSEC-2026-0382/3 (#2677) (7cfb418d)
- add zip advisories to ignore list (#2673) (e9527008)
- bump rust to 1.98.1 (#2660) (5242608d)
- upgrade rustls (RUSTSEC-2026-{0346,0347,0348,0349}) (#2664) (f4fe64bd)
- bump quinn-proto (#2655) (01aeaf96)
- bump to latest beam (#2536) (cb53e282)
- update h2@0.4.x per RUSTSEC-2026-0258 (#2534) (e56dfe4a)
- warn when gcs endpont override is active in a release build (#2494) (ba5244cc)
- quiet reconciliation e2e emulator logging (#2481) (826b7e39)
- pilot parallel install steps in postgres CI job (#2413) (8910a865)
- remove account event SQS processor and tests (#2434) (cb0e6496)
- default spanner mysql config (#2383) (521013d5)
- bump quin-proto per RUSTSEC-2026-0185 (#2408) (17e3228f)
- tag 0.23.3 (#2404) (3b1c50f3)
- deps:
- bump certifi in /tools/tokenserver (#2679) (a65a5167)
- bump certifi in /tools/payload-reconciler (#2678) (cc9eae1c)
- bump aiohttp in /tools/syncstorage-loadtest (#2675) (c7f18891)
- bump urllib3 (#2661) (b0d78b81)
- bump urllib3 in /tools/integration_tests (#2662) (402370cd)
- bump webob from 1.8.10 to 1.8.11 in /tools/hawk (#2658) (7d1d42a8)
- bump webob in /tools/syncstorage-loadtest (#2657) (530d0f05)
- bump urllib3 in /tools/payload-reconciler (#2641) (dd0b0fbe)
- bump soupsieve in /tools/integration_tests (#2656) (29279d3c)
- bump urllib3 from 2.7.0 to 2.8.0 (#2654) (d12c150c)
- bump urllib3 from 2.7.0 to 2.8.0 in /tools/spanner (#2642) (31bb7f5b)
- bump pyjwt in /tools/syncstorage-loadtest (#2640) (ba84480f)
- bump urllib3 in /tools/syncstorage-loadtest (#2637) (0c81764f)
- bump pyjwt in /tools/integration_tests (#2636) (8b1a302a)
- bump urllib3 in /tools/tokenserver/loadtests (#2604) (3a5abd9e)
- bump pyjwt in /tools/tokenserver/loadtests (#2605) (33845d4f)
- bump werkzeug in /tools/tokenserver/loadtests (#2608) (d085b1a2)
- bump multidict in /tools/syncstorage-loadtest (#2609) (d7faf1ac)
- bump urllib3 from 2.7.0 to 2.8.0 in /tools/tokenserver (#2606) (c345829e)
- bump cryptography in / (#2602) (609c27a4)
- bump the actions-deps group with 7 updates (#2603) (d1978b9a)
- bump cryptography in / (#2563) (9d31fcf4)
- bump webob from 1.8.9 to 1.8.11 in /tools/integration_tests (#2566) (55427c90)
- bump the actions-deps group with 6 updates (#2562) (8eef8e3f)
- bump the prod-deps group with 11 updates (#2561) (7cc5620f)
- bump webob from 1.8.10 to 1.8.11 (#2554) (1a1c9ed7)
- bump webob from 1.8.9 to 1.8.11 in /tools/tokenserver (#2555) (1089c4af)
- bump sqlparse from 0.5.5 to 0.6.0 in /tools/spanner (#2531) (d29a0d75)
- bump sqlparse (#2532) (44c0a20f)
- combine dependabot pull requests (#2511) (c800a6a1)
- bump cryptography from 49.0.0 to 50.0.0 in /tools/spanner (#2508) (cf00f93b)
- bump cryptography in / (#2488) (cbbb626b)
- bump com.fasterxml.jackson.core:jackson-databind (#2456) (6d2863b6)
- bump aiohttp in /tools/syncstorage-loadtest (#2498) (ff7fb8ec)
- bump the actions-deps group across 1 directory with 2 updates (#2496) (13cac2e7)
- bump the actions-deps group with 8 updates (#2487) (3e4128ca)
- bump pyasn1 in /tools/payload-reconciler (#2490) (d8ec45a9)
- bump the prod-deps group with 14 updates (#2489) (2c7172dd)
- bump pyasn1 (#2465) (db7bfd83)
- bump pyasn1 from 0.6.3 to 0.6.4 in /tools/spanner (#2467) (4b6253cd)
- bump soupsieve in /tools/integration_tests (#2452) (848212c3)
- bump python deps in tools/ (#2443) (b68ca463)
- bump cmov from 0.5.3 to 0.5.4 (#2446) (dd210251)
- bump the prod-deps group across 1 directory with 7 updates (#2440) (bd3275e1)
- bump the actions-deps group across 1 directory with 5 updates (#2438) (616cc7eb)
- deps-dev:
Doc
- clarify SYNC_TOKENSERVER__INIT_NODE_URL behavior (#2668) (4bb83cf3)
- add a load testing runbook for payload offload (#2594) (bee6d7a1)
- remove x-weave-quota-remaining references (#2590) (89402054)
- point docker image references at syncserver-* (#2589) (d4ca1203)
- refresh the payload offload docs (#2560) (8910064d)
- diagram and document the change stream system (#2538) (bfca3c39)
- add the df job's metadata db to the arch diagram (#2525) (1bc2c823)
- add payload offload infrastructure map (#2493) (8ca1e89d)
- run clippy and tests after rust changes (#2472) (88c5e73b)
- show CI's main workflow status (#2412) (b2eb45e5)
Test
- fix test per DELETE collection change (5883caa1)
- docker rig for offloaded payload load tests (#2553) (c07a4fc7)
- retry flaky spanner unit tests in ci (#2567) (01bddc73)
- retry raw posts in e2e storage tests (#2557) (d2bb23c5)
- stop skipping the offload usage tests (#2477) (bffd64f0)
Bug Fixes
- treat DELETE collection w/ empty ids as an error (05de5012)
- backdate created_at in flaky purge test (#2635) (7477d64f)
- ignore escaped braces and character classes in route_tag (7776fab0)
- read the request.duration status from the rendered error response (fa3139c9)
- bound the request.duration method tag and correct the GCS timing note (4fe35a7f)
- don't overflow GCS custom-time (#2541) (3f0f985c)
- SpannerIO requires the v2 runner (#2522) (ad555240)
- stop the reconciler deleting live payload files on batch commit (#2486) (615c4ecd)
- add explicit hamcrest dep (#2514) (68e1dd5a)
- use beam's provided jackson-databind (#2512) (b5f9be6c)
- auth: scope info/collections expiry exemption to its exact route (#2435) (e480bb90)
- ci: publish payload-link spec as the dedicated tmpl-pub SA (#2516) (1b215f7d)
- sentry: redact sensitive request header values in captured events (#2432) (8ee7d02d)
- tokenserver: return generic description for db errors in responses (#2425) (b49c10f8)