Repository navigation
Description
This is the plan and the gates for 26.11.1.post4, the release of all the glue work that follows 26.11.1.post3. The scope is all glue, not only the paths of the benchmark cells: every JSON text that crosses between Java and Python on a bulk or per-row path (#388), and the small per-call overheads that the CRUD audit found. The engine stays byte-identical to 26.11.1, as in post1 to post3.
Candidates, all drafts from the tag 26.11.1.post3, tests first, none of them measured yet: #389 native count(), #390 native create_vertices as a frame, #391 JVM graph_batch typed columns, #392 JVM insert_many typed columns, #393 native async create_record batch, #394 frame kinds for RID and number lists, #395 JVM get_rid readers, #396 JVM new_edge, #397 native reply tail and the dead entry, #398 native approximate vector search by pointer. #390 and #391 come first because the graph loads of the benchmark cells (create_vertices) run through them. I dropped the native columnar head frame (rank 4 of #388): by sizing it saves 0.03 to 0.34 ms per call and needs an API change.
What post3 taught me, and what changes for post4: its timed study had no figure for the exact shape of the benchmark cell that regressed (#400: a single-record UPDATE through command() in a begin and commit pair is about 26 percent slower than on 26.11.1), and it labelled one figure with the wrong auto-transaction mode. So the post4 study has a figure for the operation shape of every benchmark cell that a PR can touch, on both wheels, next to the figures of the PRs, and every figure is checked against the code path that it runs before it is credited to a PR.
Gates, all of them before a tag:
- every candidate that goes in is green on the full CI matrix of its own branch (all legs, both wheels)
- a parity digest per figure: the stored data and the returned values are identical between the arms
- a pre-registered timed A/B per candidate against the released post3 wheel (ABBA, A/A control, latency and peak memory), and the figures of the benchmark cells as a regression guard; a candidate with a figure that is slower than post3 stays out
- the integration branch from the tag with the candidates that passed, its CI-built wheels measured as a whole (the gate run, as for post3)
- the engine identity guard on the CI-built and on the published wheels
- Native: single-record UPDATE through command() is about 26 percent slower on post3 than on 26.11.1 in the l1tpc paper cells #400 is understood, and fixed in post4 or named as open in the release notes
- the docs describe what the tag contains and only the figures that were measured
Resources: CI is the authority for the full matrix. The laptop timed lane runs the A/B studies. The mini builds and tests the branches with Docker while it is idle (the first Java compile does not wait for the shared runner pool) and runs the benchmark cells solo. More timed lanes on the laptop and the mini come after their qualification (tracked in the control plane).
Schedule (estimates, not promises): first compile and test fixes of the candidates on 2026-11-15 and 16; the A/B studies on 2026-11-16 to 18; go or no-go on 2026-11-19; the tag on 2026-11-19 or 20; the mini reruns of the affected benchmark cells (graph loads on both wheels, about 8 hours) on 2026-11-20 and 21; landing on the page and in the paper notes on 2026-11-22 and 23; the paper deadline is 2026-11-24. A candidate that is not ready on the 19th goes into a later release.
Activity
tae898 commentedon Nov 14, 2026
Status of the ten candidates on 2026-11-14, evening. Every branch now has a CI-built wheel at its final head and a pre-registered per-candidate A/B in the timed queue. They wait for the A/A study, which is in its last rounds; it runs the released
26.11.1.post3wheel on both sides and validates the figures, the path probes and the scorer, not any candidate.Five branches had never run their new code in a full CI matrix, and the first matrix found real problems. #391 failed on a stale
tests/test_import_database.pyfrom the tag against the movinglatestengine image (it now takes the file frommain). #392 had a real parity gap: a row holding a NaN, an infinity or a subnormal double stored its whole numbers asIntegerwhere the old route storesLong; fixed in85332a9. #395 called the bridge class in the new getters without the fallback that every other reader has; fixed in84849b5. #393 and #396 had mistakes in their own tests, and the code of both is unchanged. #394 is green on the JVM wheel and on every Linux and macOS job of the native build; its Windows image build failed on a Maven Central fetch and I will re-run it before any merge. A JVM dispatch for an A/B now passes-f arcadedb-tag=26.11.1: the default takes the jars from thelatestimage, which is another engine.One change to the plan comes from #404. The native wheel on PyPI is a rebuild, and two builds of one commit differed by about 32 percent on the single-record
UPDATEin the cell's process state. So the A arm of every native run is the CI-builtpost3wheel, not the published one. A native guard figure that moves by 15 percent or more while the candidate's own figures are flat is flagged BUILD-SUSPECT, and the same commit is built again before the candidate is judged. The release gets a canary on the publishedpost4wheel too, with the cell shape as the figure.The schedule is as before: the per-candidate runs take about eight hours after the A/A study, the integration run follows, and the go or no-go is on 2026-11-19. Related: #404, #400.