Skip to content

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 21 Sep 23:51
· 451 commits to main since this release
v0.7.0
8a75f13

What's Changed

🐛 Fixes

  • fix(release): sign Maven artifacts with loopback pinentry, and a per-channel Java route by @orieg in #753

🔧 CI & Tooling

  • fix(ci): a negated path filter matched everything, so no job was ever skipped by @orieg in #778

📚 Documentation

  • docs(citation): record the v0.6.0 archive identifier by @orieg in #761
  • docs: code of conduct, contributing guide, and issue forms by @orieg in #776

Other Changes

  • bench: order the HOT concurrent sweep last, and refuse a cargo that cannot parse the workspace by @orieg in #752
  • bench(method): insertion order is a declared workload dimension by @orieg in #754
  • fix(bench): a contaminated miss shape behind a published claim, and three checks that could not fail by @orieg in #767
  • fix(bindings): who owns a pointer, and what enforces it — Go, Python, Java and PHP by @orieg in #765
  • fix(rocksdb): Get dropped versions past 32, and ScanBatch counted slots it never wrote by @orieg in #766
  • ci: gate the dependency graph, and fix a Pages guard that published empty package repos by @orieg in #764
  • fix(docs,tooling): claims that were not true, and a test that could not fail by @orieg in #768
  • fix(rocksdb): the iterator cursor kept a slot index a writer had already moved by @orieg in #769
  • bench(comparative): the withheld figures, re-measured on the reference host by @orieg in #770
  • bench(hot): hits were drawn from the sorted population's prefix, not across it by @orieg in #771
  • perf(strmap): hold a suffix leaf's bytes and value in one allocation by @orieg in #773
  • feat(strmap): an ordered cursor that walks without allocating per element by @orieg in #775
  • bench(python): the concurrency figures re-measured, pinned, and a second defect found by @orieg in #777
  • ci(bench): the core pin now reaches harnesses no runner wraps by @orieg in #780
  • bench(counters): the string lookup gap is memory-latency-bound, measured by @orieg in #781
  • bench(counters): huge pages remove the translation misses and not the gap by @orieg in #782
  • bench(hot): the integer 50/50 cells re-measured, and a disclosure that was wrong by @orieg in #784
  • docs(bench): a within-run interval does not bound between-run spread by @orieg in #785
  • test: the 64-bit node ladder gets a behavioural test, and the 32-bit engine an oracle by @orieg in #786
  • bench(callgrind): the string lookup has no hot spot, per-function ranking by @orieg in #787
  • bench(hot): the string insertion-order rows, re-measured by @orieg in #788
  • bench: the concurrent arms re-measured, two runs each, per rule 18 by @orieg in #790
  • feat(occ): diagnostic counters for lock handoffs and reclamation, a layout report, and padding / advance-interval features by @orieg in #789
  • fix(wasm): the three BTreeMap shims say so, and BlobMap stops discarding chunk_size by @orieg in #791
  • test(strmap): put the cursor's raw path stack under the per-PR Miri filter by @orieg in #792
  • fix(packaging): the release job builds the glibc-hwcaps variants it advertises by @orieg in #793
  • fix(api): withdraw a hole in ExpanseBlobMap's encapsulation, make the domain brand honest by @orieg in #796
  • test(loom): model the node bracket through the production functions by @orieg in #799
  • docs(domain): state that the ordinal is a read handle and the write path is by key by @orieg in #800
  • ci(api): gate the public Rust API surface against a committed snapshot by @orieg in #801
  • docs(rocksdb): give the read-path forward reference an issue to resolve to by @orieg in #803
  • bench(concurrency): #568 Step 0 — the instruments that attribute the two write-load declines, and their first measurement by @orieg in #804
  • fix(occ): mark a replaced branch node obsolete before its slot changes by @orieg in #806
  • bench(capi): Callgrind arms for JudySLIns and JudySLGet by @orieg in #807
  • feat(strmap)!: NulFreeStr carries the key domain, so chunk_at stays lean by @orieg in #810
  • docs(strmap): chunk_at's doc described a rule the code no longer uses by @orieg in #811
  • bench(capi): JudySL arms in the vs-stock comparison by @orieg in #812
  • perf(occ): bracket every store by the version of the node containing it (#568 Stage A) by @orieg in #809
  • design(occ): Stage B multi-writer OLC protocol specification, contention bounds, and PR 5 gate by @orieg in #814
  • feat(occ): Stage B multi-writer OLC primitives, NodeLock guard, and Loom models by @orieg in #815
  • feat(occ): Stage B multi-writer optimistic lock coupling for SyncExpanseSet and SyncExpanseMap (Refs #568) by @orieg in #816
  • feat(occ): Stage B OLC contention instruments and ancestor obsolete invariant (Refs #568) by @orieg in #817
  • feat(occ): anchor OLC parent locks with version CAS and hoist writer registration (Refs #568) by @orieg in #818
  • feat(occ): make tree_pop isolable under lock-padded, allocator invariant fixes, and fallback attribution (Refs #568) by @orieg in #819
  • bench(concurrency): the fallback composition is a curve, not a number (Refs #568) by @orieg in #820
  • fix(occ): recover from obsolete ancestors via optimistic re-descent (Refs #568) by @orieg in #821
  • feat(occ): zero-sharing common write path and lazy branch pop0 rollup (Refs #568) by @orieg in #822
  • fix(ci): an allow-regression reason must name the arms it approves by @orieg in #824
  • feat(benchmarks): re-derive OLC bounds and calibrate USL physical-core gate (Refs #568) by @orieg in #825
  • feat(leaf): tail-only geometric leaf ladder (Refs #568) by @orieg in #826
  • bench(concurrency): regenerate the fallback-maturity artifact for the coarsened ladder (Refs #568) by @orieg in #828
  • feat(occ): BranchU null-slot concurrent insertion (Refs #568) by @orieg in #827
  • ci(perf): require an allow-regression citation to measure the code under review by @orieg in #829
  • fix(occ): use a strong CAS in SeqVersion::try_lock by @orieg in #831
  • feat(bench): Expanse-native multi-writer scaling instrument (Refs #568, Phase 1.5D) by @orieg in #830
  • bench(concurrency): upload the writer_scaling artifact and attribute fallbacks by cause (Refs #568) by @orieg in #832
  • docs(concurrency): publish the Phase 1.5D writer-scaling sweep (Refs #568) by @orieg in #833
  • fix(docs-lint): sweep committed JSON artifacts for home-directory paths by @orieg in #834
  • fix(bench): fit_usl.py loads single-commit writer_scaling artifacts (Refs #568) by @orieg in #835
  • fix(usl): bootstrap refits use the point fit's estimator; reject degenerate intervals by @orieg in #836
  • feat(occ): instrument contention subsets and gate waits (Refs #568, Step 4.0) by @orieg in #837
  • docs(agents): pin structural attribution and decision-point invariants (Refs #568, #837) by @orieg in #838
  • docs(concurrency): publish the Step 4.0 writer-scaling sweep (Refs #568) by @orieg in #839
  • fix(occ): fall back on remove under compressed parents; remove fallbacks see the true population (Refs #816) by @orieg in #841
  • feat(occ): concurrent BranchB subarray growth (Refs #568) by @orieg in #840
  • ci(test): run every occ-stats-gated test, and fail on an empty binary (Refs #568) by @orieg in #842
  • fix(ci): admit a failure run whose regression guard tripped (Refs #829) by @orieg in #843
  • docs(concurrency): publish the Phase 4D writer-scaling sweep (Refs #568) by @orieg in #844
  • docs(agents): add concurrency diagnostics, time budget, and EBR striping rules (Refs #568) by @orieg in #845
  • ci: path-filtered CodeQL workflow, least-privilege CI token, bench trigger hardening by @orieg in #847
  • ci(bench): pass the benchmark report through a file, not GITHUB_ENV by @orieg in #849
  • ci(codeql): analyse Java from a traced Maven build on JDK 22 by @orieg in #850
  • fix(scripts): close the last CodeQL alerts; repair and run tests/test_perf_report.py by @orieg in #852
  • test(map): drive the warm insert-path branches of the slot entry points by @orieg in #851
  • feat(benchmarks): multi-writer OLC diagnostic instrumentation (Refs #568) by @orieg in #846
  • fix(occ): count in-flight writers per slot and acquire on the drain (Refs #568) by @orieg in #853
  • feat(occ): diagnostic interventional ablations for shared allocator state (Refs #568) by @orieg in #848
  • feat(occ): partition leaf capacity expansion fallbacks into granular sub-causes (Refs #568) by @orieg in #854
  • test(sync): model enter_writer and quiesce_writers under loom (Refs #568) by @orieg in #855
  • fix(alloc): enforce the per-tree freelist single-writer invariant (Refs #568) by @orieg in #856
  • docs(benchmarks): commit Step 4.1 allocator ablation sweep results (Refs #568) by @orieg in #857
  • feat(occ): implement concurrent leaf capacity expansion (Refs #568) by @orieg in #858
  • fix(alloc): catch the freelist pop's load-side race, and census the stores (Refs #568) by @orieg in #859
  • docs(concurrency): sync architecture, visualizer, man pages, and writer scaling baseline for Phase 4C (Refs #568) by @orieg in #860
  • chore(occ): drop the leaf-expansion classifier left dead by Phase 4C (Refs #568) by @orieg in #861
  • docs(agents): record what the Hypothesis D arms measured in §2.6 (Refs #568) by @orieg in #862
  • bench(concurrency): confirm Phase 4C and close Hypothesis D with arm (c) (Refs #568) by @orieg in #864
  • feat(occ): implement concurrent immediate-to-leaf conversion & expansion (Refs #568) by @orieg in #863
  • fix(scripts): gate the ablation artifacts for provenance, not just baseline_* by @orieg in #866
  • fix(scripts): treat the writer-scaling sweeps as the concurrent artifacts they are (Refs #568) by @orieg in #869
  • ci(lint): add ruff over the repository's Python, and fix what it finds (Refs #568) by @orieg in #870
  • ci(perf): run the writer-scaling instrument's self-test (Refs #568) by @orieg in #865
  • bench(concurrency): measure frequency droop at every writer count (Refs #568) by @orieg in #871
  • bench(rocksdb): derive the locate-phase mutex bound; unbreak gate.sh on Python 3.14 (Refs #802) by @orieg in #872
  • bench(rocksdb): pre-register the concurrent read-scaling arm (Refs #802) by @orieg in #875
  • ci: declare the inputs each job actually reads, and test the filter table by @orieg in #874
  • fix(rocksdb): ScanBatch did not re-anchor, so the batch-scan loop never terminated (Refs #769) by @orieg in #877
  • fix(gate): refuse when the gate's Python deps are missing; remove the write-only prefix_map_ (Closes #867) by @orieg in #878
  • bench(rocksdb): land the concurrent read-scaling arm and its driver (Refs #802) by @orieg in #879
  • feat(occ): implement concurrent linear leaf full split and branch conversion (Refs #568) by @orieg in #873
  • fix(rocksdb): run the concurrent bench from the integration directory (Refs #802) by @orieg in #881
  • fix(rocksdb): size the concurrent writer's key supply from the cell, not a constant (Refs #802) by @orieg in #887
  • fix(ci): a docs-only PR matches no filter, and that is not a failure by @orieg in #885
  • fix(concurrency): stop asserting that two writers must collide (Refs #865) by @orieg in #886
  • docs(concurrency): document Phase 4B and Phase 4E OLC paths and zero fallback floor by @orieg in #884
  • bench(concurrency): publish the Phase 4E writer sweep on the reference host by @orieg in #883
  • refactor(scripts): one BCa implementation, and let it report degradation by @orieg in #882
  • bench(ci): let a bare-metal run choose its CPU pin by @orieg in #889
  • fix(concurrency): recover the frequency-droop measurement, and unbreak the self-test by @orieg in #890
  • bench(rocksdb): publish the concurrent read-scaling outcomes (Refs #802) by @orieg in #888
  • bench(concurrency): carry the c2c shared-cache-line table into the artifact by @orieg in #891
  • bench(concurrency): capture the c2c per-line detail, not just the addresses by @orieg in #892
  • bench(concurrency): record untruncated symbols beside the contended lines by @orieg in #893
  • bench(concurrency): the post-4E plateau is EBR epoch-bin contention by @orieg in #895
  • feat(occ): implement concurrent remove-side capacity shrink and demotion (Refs #568) by @orieg in #894
  • bench(instructions): add sync_set_remove and sync_set_churn Callgrind arms (Refs #568) by @orieg in #896
  • docs(agents): record how contention was localised, and that ablation verdicts expire by @orieg in #899
  • feat(occ): promote slot-striped epoch bins with thread-exit slot recycling (Refs #568) by @orieg in #897
  • perf(occ): keep the writer slot in a Drop-free thread-local by @orieg in #901
  • docs(concurrency): the str arm's W=8 cell is pin-sensitive, not a regression by @orieg in #903
  • refactor(bench): every new interval names the construction that produced it (Refs #880) by @orieg in #904
  • bench(rocksdb): drive the single-threaded memtable rounds from Python (Refs #868) by @orieg in #902
  • docs(concurrency): the two arms' β differ; a finite N_max cannot come from β = 0 by @orieg in #905
  • fix(rocksdb): pin the concurrent read-scaling driver and compile its bench in CI (Refs #802) by @orieg in #906
  • refactor(occ): bound the advance's stripe scan by the claimed-slot high-water mark (candidate) by @orieg in #907
  • docs(rocksdb): disclose the concurrent arm's pin deviation and defer its verdicts (Refs #802) by @orieg in #908
  • docs(rocksdb): correct two expanse_memtable.cc line citations in METHODOLOGY section 5 by @orieg in #909
  • bench(rocksdb): re-run the concurrent arm under the pre-registered pin; H1 is not gated (Refs #802) by @orieg in #910
  • bench(rocksdb): amend the H1 gate for a short paced writer, and re-run under it (Refs #802) by @orieg in #911
  • bench(rocksdb): commit the §5.9 verdict evaluator, report the paced writer per R, count ci pairs as intervals (Refs #802) by @orieg in #913
  • bench(rocksdb): per-thread counters mode, cells and suite for the concurrent arm (Refs #802) by @orieg in #914
  • fix(bench): launch counters workloads under the benchmark pin, and verify it every round (Refs #802) by @orieg in #915
  • bench(rocksdb): per-thread counters and perf c2c on the concurrent arm, two runs per pin (Refs #802) by @orieg in #916
  • bench(rocksdb): sample where a read's time goes inside the #802 locked region (Refs #802) by @orieg in #917
  • fix(bench): locate_profile excludes PLT stubs, and pins the reference host's own report rows (Refs #802) by @orieg in #918
  • fix(bench): locate_profile sums identically named report rows, and refuses only distinct ones (Refs #802) by @orieg in #919
  • bench(rocksdb): fix the idle-curve model check and its held-out cells before measuring them (Refs #802) by @orieg in #920
  • bench(rocksdb): the held-out model check rejects all six idle-curve shapes (Refs #802) by @orieg in #921
  • feat(rocksdb): a seek lock scope around the trie call, and the pre-registered narrowed-mutex arm (Refs #802) by @orieg in #922
  • docs(agents): attribute regressions before fixing them; keep concurrency-only code out of shared paths by @orieg in #923
  • bench(rocksdb): the narrowed-mutex arm passes its pre-registered gate under both pins (Refs #802) by @orieg in #924
  • test(occ): instruments that see an ordered read's wrong predecessor, and the nav Callgrind arms (Refs #900) by @orieg in #925
  • bench(olc): read-set size, cost model and restart projection for ordered reads (Refs #900) by @orieg in #926
  • docs(concurrency): pre-register optimistic ordered reads on the concurrent map (Refs #900) by @orieg in #927
  • fix(sync): validate each branch after loading the child edge in OLC writer descents (Refs #568) by @orieg in #931
  • fix(sync): validate a bitmap branch before an optimistic remove reports a key absent (Refs #568) by @orieg in #932
  • test(occ): run the writer-slot recycling test in a process of its own (Refs #568) by @orieg in #933
  • feat(occ): promote per-stripe collector freelists to production standard (Refs #568) by @orieg in #912
  • fix(concurrency): VOID the P5.1 and P5.2 verdicts whose base half sits outside the 10cd755 union (Refs #568) by @orieg in #934
  • bench(concurrency): make benches/concurrency.rs an instrument and add its BCa driver (Refs #568) by @orieg in #935
  • fix(assets): regenerate the stale density sawtooth chart and re-derive the figures that quote it (Refs #675) by @orieg in #936
  • docs(concurrency): compare arms only within a key type, and date the HOT and Masstree comparison (Refs #568) by @orieg in #937
  • docs(mutate): state which insert-path entries may dangle and why they are never dereferenced (Refs #568) by @orieg in #938
  • fix(hot-bench): build each feature set into its own target dir (Refs #660, #692) by @orieg in #939
  • refactor(sync): write the optimistic read protocol once, as Shared::optimistic_read (Refs #900) by @orieg in #928
  • fix(hot-bench): validate string keys once at construction, not inside timed loops by @orieg in #941
  • feat(sync): validated ordered reads on the 64-bit map reader handles (Refs #900) by @orieg in #940
  • bench(hot): re-measure the integer-key single-threaded pillars at ae9e716, two runs by @orieg in #942
  • docs(hot): count Arm A's memory winner changes from the data (Refs #660) by @orieg in #944
  • bench(concurrency): P5 two-commit gate against the registered base 10cd755 (Refs #568) by @orieg in #943
  • bench(masstree, hot): re-measure Masstree single-threaded and HOT string arms at b868fb2, two runs by @orieg in #946
  • bench(hot, masstree): concurrent arms re-measured on the multi-writer engine at b868fb2 (Refs #568) by @orieg in #947
  • docs(concurrency): state the writer model per wrapper, fix HOT §5, keep Step 0 out of the publication (Refs #568) by @orieg in #948
  • feat(sync32): validated ordered reads on the 32-bit map reader and writer (Refs #900) by @orieg in #945
  • fix(sync): inline walk_validated so the reader root never crosses a stack argument block (Refs #928) by @orieg in #949
  • docs(concurrency): pre-register #568 Steps 1–2, the single-writer baseline and the 50/50 16-thread gate by @orieg in #950
  • bench(concurrency): ordered-reader and two-build gate instruments for #900 step 7 and #568 Step 2 by @orieg in #951
  • bench(hot, masstree): concurrent arms re-measured after #949 (Refs #928, #568) by @orieg in #952
  • bench(concurrency): #568 Step 2 gate met and #900 step 7 outcomes, two runs each by @orieg in #953
  • docs(hot): generate README §7.1, §7.2 and §7.6 and enforce them in check_readme_tables (Refs #733) by @orieg in #954
  • test(sync32): extend the G12.5 writer churn until readers reach the coverage floor by @orieg in #955
  • feat(capi, bindings): ordered reads on the sync map reader handles (Refs #900) by @orieg in #956
  • fix(concurrency): record the writer_scaling perf c2c pass over the measured window only by @orieg in #960
  • bench(concurrency): arm (a) and lock-padded re-run at 726b01f; supersede arm (a)'s REJECTED in place (Refs #930) by @orieg in #961
  • feat(sync, capi): reader handles freed cross-thread, sync map mem_used (#959 P1, P2) by @orieg in #962
  • perf(strmap): eliminate redundant terminal contains_key in ins_slot (Refs #813) by @orieg in #957
  • fix(concurrency): run every timed writer_scaling cell in its own harness process by @orieg in #964
  • bench(concurrency): arm (a), lock-padded and their combination, one process per cell at bad1bd3 (Refs #930) by @orieg in #965
  • fix(bench): one load window per compared arm; no busy-CPU figure below 10 jiffies by @orieg in #966
  • fix(bench): difference load snapshots on unrounded readings by @orieg in #967
  • bench(concurrency): pre-register #930 writer throughput >= 20 M ops/s at W = 8 by @orieg in #958
  • bench(rocksdb): pre-register the optimistic-seek arm, METHODOLOGY §5.16 (Refs #802, #900) by @orieg in #959
  • bench: string-wrapper instruments — #730 retraction, reader-scaling bounds, readers-only and #929 writer and Callgrind arms by @orieg in #968
  • bench(concurrency): perf c2c contention ranking at ac8f1c6, README §11.9 (Refs #930) by @orieg in #969
  • fix(rocksdb): deliver each Get entry once across a concurrent split by @orieg in #970
  • bench(concurrency): single-threaded Callgrind profiles of the string and blob wrappers' mutations (Refs #929) by @orieg in #971
  • bench(rocksdb): amend METHODOLOGY §5.16 — atomic TSan handoff, mutations 9–12 by @orieg in #972
  • bench(concurrency): string-wrapper baselines at 170a4bc, both pins, two runs each — README §15 (Refs #730, #929) by @orieg in #974
  • fix(rocksdb): anchor the iterator on the entry its validated scan read by @orieg in #975
  • bench(concurrency): PMU and c2c passes accept the bytes and blob writer arms (Refs #929) by @orieg in #973
  • docs(concurrency): pre-register the #730 readers-only gate (Refs #730) by @orieg in #976
  • docs(agents, ci): record the plan-facing facts a reviewer kept supplying by @orieg in #977
  • feat(rocksdb): the kOptimistic seek lock scope, its soundness gates and its Ir bound by @orieg in #978
  • bench(concurrency): perf c2c contention ranking of the string, bytes and blob writer wrappers at 0c6b783 (Refs #929, #930) by @orieg in #979
  • feat(bench): generate the Callgrind arm inventory and gate it against the ops maps by @orieg in #980
  • docs(concurrency): pre-register the SyncExpanseStrMap multi-writer design (Refs #929) by @orieg in #982
  • perf(core): eliminate dead stack zeroing in flat insert walks (Refs #813) by @orieg in #983
  • docs(agents): mutation-tested structural scanners, per-clause negative controls, and closing-verb protocol by @orieg in #984
  • bench(rocksdb): the optimistic-seek arm's four runs and their outcomes (Refs #802, #900) by @orieg in #986
  • test(core): comment-strip the ancestor-pairing scanners before matching (Refs #813) by @orieg in #987
  • docs(algorithms): record the JudySL non-terminal double descent as a known cost by @orieg in #988
  • docs(concurrency): pre-register the #730 readers-only measurement (Refs #730) by @orieg in #989
  • feat(strmap): give StrNode its own OCC cover word and implement RootState (Refs #929) by @orieg in #985
  • bench(concurrency): commit the #930 four-cell, gated-sweep and Callgrind cell artifacts by @orieg in #991
  • fix(concurrency): aggregate the #930 Callgrind cells over reproducible arms only by @orieg in #992
  • bench(concurrency): measure the deferred-gated design at the 0-15 pin, and read #930's gate at both by @orieg in #993
  • docs(concurrency): correct §11.10.1's reading, and re-state §2.6's verdict on its measured basis by @orieg in #994
  • docs(agents): add §8.22, pre-flight discipline for hot-path optimization by @orieg in #995
  • bench(concurrency): measure what the multi-writer gain is made of, and close the rearrangement space by @orieg in #996
  • fix(ci): the RocksDB bound step died on -e before it could report by @orieg in #999
  • perf(core): promote the deferred-gated allocator shards and the padded writer state by @orieg in #997
  • bench(wasm): re-baseline the fuel counts at the promoted default by @orieg in #1000
  • docs(rocksdb): the §5.3 deferral no longer reads as pending on a closed issue by @orieg in #1002
  • test(bench): judge the rocksdb driver's artifact by the provenance gate's own code (Refs #868) by @orieg in #1004
  • test(occ): a loom model reproduces the shared reader handle hazard (Refs #963) by @orieg in #1003
  • eval(concurrency): the #929 str head at 23425a7 — §17 not met, and two diagnostic runs (Refs #929) by @orieg in #1007
  • docs(concurrency): §19 — a second #929 gate that prices the single-writer cost, locked at F = 0.90 (Refs #929) by @orieg in #1008
  • docs(concurrency): §19.10 — two drafting errors in the second #929 gate, corrected before any admissible run (Refs #929) by @orieg in #1009
  • bench(ycsb): harness, driver and doc status for the single-threaded YCSB re-measure (Refs #1005) by @orieg in #1011
  • feat(sync): the per-node optimistic write path for SyncExpanseStrMap (Refs #929) by @orieg in #1001
  • refactor(alloc): candidate — remove the plain-tree cost the #930 promotion excused (Refs #998) by @orieg in #1010
  • test(sync32): the ordered-read churn test stops on counters that bound its replayed floors by @orieg in #1013
  • bench(concurrency): bounds and the locked pre-registration of a concurrent YCSB suite (Refs #1006) by @orieg in #1012
  • fix(occ)!: reader handles are Send and no longer Sync (Refs #963) by @orieg in #1014
  • bench(wasm): re-baseline fuel after #1010, and record the 26 excused arms from main's runs (Refs #998) by @orieg in #1017
  • bench(hot, masstree): concurrent arms re-measured at 929574b under two pins (Refs #930, #929) by @orieg in #1016
  • bench(instructions): Callgrind arms for the bytes and blob map paths (Refs #929) by @orieg in #1018
  • feat(sync): SyncExpanseMap::compare_exchange, a conditional publish of a value word (Refs #929, #1006) by @orieg in #1015
  • docs(agents): §2.6 states the allocator layout and residual cost after 929574b (Refs #998) by @orieg in #1019
  • perf(blobmap): eliminate double descent in insert (Refs #929) by @orieg in #1021
  • perf(bytesmap): eliminate double hash and descent in insert (Refs #929) by @orieg in #1020
  • bench(hot, masstree): concurrent cells confirmed at c746f9a after #1014 and #1015 (Refs #930, #929) by @orieg in #1022
  • poc(concurrency): concurrent YCSB harness and driver (Refs #1006) by @orieg in #1023
  • docs(benchmarks): pre-register multi-writer SyncExpanseBlobMap gate (Refs #929) by @orieg in #1025
  • refactor(blobmap): candidate — multi-writer optimistic insert path (Refs #929) by @orieg in #1024
  • bench(concurrency): implement G4 (overwrite under skew) for the #929 blob gate (Refs #929) by @orieg in #1026
  • eval(concurrency): METHODOLOGY §21 is not met at 378fe3a — the blob wrapper is retrograde past two writers (Refs #929) by @orieg in #1027
  • bench(ycsb): concurrent harness and driver fixes for §20 admissibility (Refs #1006) by @orieg in #1028
  • test(sync): make test_arena_section_hold_time report-only (Refs #929) by @orieg in #1029
  • perf(blobmap): promote per-writer private arenas to default (Refs #929) by @orieg in #1030
  • eval(concurrency): METHODOLOGY §21 is met at 7feac60 (Refs #929) by @orieg in #1031
  • bench(ycsb): latency role, monotonicity pass, node census and self-tests for §20 (Refs #1006) by @orieg in #1032
  • eval(concurrency): METHODOLOGY §20 evaluated on reference host across two pins and two runs (Refs #1006) by @orieg in #1033
  • fix(concurrency): retract compare_exchange claim, document §20 readings, guard stale locators (Refs #1006, #929) by @orieg in #1035
  • feat(blobmap): configurable arena capacity ceiling for large datasets (Refs #1005) by @orieg in #1034
  • eval(ycsb): standardize single-threaded YCSB re-measurements (Refs #1005) by @orieg in #1036
  • bench(concurrency): implement G4 and pre-register #929 bytes gate (Refs #929) by @orieg in #1037
  • feat(bytesmap): multi-writer SyncExpanseBytesMap via CAS bucket replacement (Refs #929) by @orieg in #1038
  • fix(bytesmap): route serial-writer ablation through Shared::write (Refs #929) by @orieg in #1039
  • eval(concurrency): evaluate #929 bytes multi-writer gate at 5d017fe (Refs #929) by @orieg in #1040
  • docs(concurrency): name the measurement machine by its hardware in §21 and ARCHITECTURE (Refs #929) by @orieg in #1042
  • perf(core): monomorphize root-leaf paths over OCC to eliminate plain-tree overhead (Refs #998) by @orieg in #1041
  • perf(bytesmap): publish an overwrite's value in place, not by bucket replacement (Refs #929) by @orieg in #1043
  • bench(concurrency): W = 8 re-measured at 0b08dd5 after the deferred-allocator change (Refs #998, #930) by @orieg in #1045
  • eval(concurrency): the #929 G3 single-writer price is the validated walk, not the allocator (Refs #929) by @orieg in #1046
  • bench(concurrency): mixed read/write re-measured at e7c9758 (Refs #998, #1047) by @orieg in #1048
  • eval(concurrency): the aarch64 plain-path residue is gone at a517ea9, and the deficit moved to x86 (Refs #998) by @orieg in #1049
  • fix(concurrency): regenerate the chart and visualizer blocks the mixed re-measure left stale (Refs #998) by @orieg in #1051
  • bench(rocksdb): the single-threaded suite re-measured at 7cd5140, and the batch-scan ratio is a loss (Refs #868) by @orieg in #1050
  • bench(concurrency): the #730 readers-only sweep re-measured at 7cd5140 — a baseline (Refs #730) by @orieg in #1052
  • fix(sync): reopen the writer gate when a serialised section unwinds by @orieg in #1053
  • fix(bytesmap): the optimistic removal, so a mixed workload stops quiescing the tree (Refs #1047) by @orieg in #1055
  • docs(readme): state features and results plainly, link the suite docs for detail by @orieg in #1056
  • docs(math): formulas GitHub rendered as errors, as text, or silently wrong by @orieg in #1060
  • feat(release): publish a Homebrew formula and a MacPorts Portfile by @orieg in #1058
  • docs(benchmarking): YCSB takeaway 4 states its cause as unmeasured (Refs #1005) by @orieg in #1059
  • docs(concurrency): #730 retired — §16 dated note, §18 withdrawn, pending cells re-pointed to #1061 (Refs #730) by @orieg in #1062
  • docs(readme): an Install section and a jump bar at the top by @orieg in #1063
  • fix(packaging): the RPM spec packages the glibc-hwcaps variants it installs by @orieg in #1064
  • perf(sync): always inline enter_writer_blocking (Refs #1047) by @orieg in #1057
  • fix(release): the Homebrew archive smoke ran nothing and reported success by @orieg in #1065
  • docs(concurrency): the bytes 100%-read drop does not reproduce within one session (Refs #1047) by @orieg in #1066
  • bench(counters): a read-path profile of the readers-only string cell, and two counting failures the driver now names (Refs #1061) by @orieg in #1067
  • docs(concurrency): the readers-only cell's two level families are disclosed, not pending (Refs #1061) by @orieg in #1068
  • fix(sync): validate the leaf copy before a concurrent split builds from it by @orieg in #1069

Full Changelog: v0.6.0...v0.7.0