From 9e879003f1b210e4c83c4fc4a72abd3fadedad10 Mon Sep 17 00:00:00 2001 From: Aditya Mukhopadhyay Date: Thu, 29 Oct 2026 18:28:55 +0530 Subject: [PATCH] docs: audit release binary size with measured prototypes (#772) --- docs/audits/772/README.md | 241 ++ docs/audits/772/cli_compare.py | 40 + docs/audits/772/compare.py | 44 + docs/audits/772/dependency-lock.toml | 1690 ++++++++++++ .../772/evidence/additional-artifacts.tsv | 17 + docs/audits/772/evidence/baseline-sizes.tsv | 10 + .../772/evidence/browser-interface-check.txt | 6 + docs/audits/772/evidence/chrono-lock.patch | 4 + docs/audits/772/evidence/cli-runtime.json | 58 + docs/audits/772/evidence/compiler.txt | 8 + .../772/evidence/patches/chrono-serde.patch | 5 + .../evidence/patches/encoded-set-sort.patch | 5 + .../772/evidence/patches/free-sort.patch | 6 + .../772/evidence/patches/import-sort.patch | 5 + .../772/evidence/patches/reader-erasure.patch | 48 + .../772/evidence/patches/string-sorts.patch | 10 + .../evidence/patches/value-order-sort.patch | 7 + .../772/evidence/probe-sizes-final.json | 37 + .../772/evidence/reader-point-runtime.json | 2402 +++++++++++++++++ docs/audits/772/evidence/reader-runtime.json | 1702 ++++++++++++ docs/audits/772/evidence/sections.txt | 39 + docs/audits/772/evidence/set-sizes.tsv | 10 + docs/audits/772/evidence/sort-base-0.csv | 48 + docs/audits/772/evidence/sort-base-1.csv | 48 + docs/audits/772/evidence/sort-base-2.csv | 48 + docs/audits/772/evidence/sort-base-3.csv | 48 + docs/audits/772/evidence/sort-candidate-0.csv | 48 + docs/audits/772/evidence/sort-candidate-1.csv | 48 + docs/audits/772/evidence/sort-candidate-2.csv | 48 + docs/audits/772/evidence/sort-candidate-3.csv | 48 + docs/audits/772/evidence/verification.txt | 100 + docs/audits/772/evidence/wasm-sections.jsonl | 2 + docs/audits/772/matrix.sh | 33 + docs/audits/772/prototypes.py | 85 + docs/audits/772/sort_probe.rs | 64 + docs/audits/772/symbol-summary.txt | 55 + docs/audits/772/wasm_sections.py | 30 + 37 files changed, 7147 insertions(+) create mode 100644 docs/audits/772/README.md create mode 100644 docs/audits/772/cli_compare.py create mode 100644 docs/audits/772/compare.py create mode 100644 docs/audits/772/dependency-lock.toml create mode 100644 docs/audits/772/evidence/additional-artifacts.tsv create mode 100644 docs/audits/772/evidence/baseline-sizes.tsv create mode 100644 docs/audits/772/evidence/browser-interface-check.txt create mode 100644 docs/audits/772/evidence/chrono-lock.patch create mode 100644 docs/audits/772/evidence/cli-runtime.json create mode 100644 docs/audits/772/evidence/compiler.txt create mode 100644 docs/audits/772/evidence/patches/chrono-serde.patch create mode 100644 docs/audits/772/evidence/patches/encoded-set-sort.patch create mode 100644 docs/audits/772/evidence/patches/free-sort.patch create mode 100644 docs/audits/772/evidence/patches/import-sort.patch create mode 100644 docs/audits/772/evidence/patches/reader-erasure.patch create mode 100644 docs/audits/772/evidence/patches/string-sorts.patch create mode 100644 docs/audits/772/evidence/patches/value-order-sort.patch create mode 100644 docs/audits/772/evidence/probe-sizes-final.json create mode 100644 docs/audits/772/evidence/reader-point-runtime.json create mode 100644 docs/audits/772/evidence/reader-runtime.json create mode 100644 docs/audits/772/evidence/sections.txt create mode 100644 docs/audits/772/evidence/set-sizes.tsv create mode 100644 docs/audits/772/evidence/sort-base-0.csv create mode 100644 docs/audits/772/evidence/sort-base-1.csv create mode 100644 docs/audits/772/evidence/sort-base-2.csv create mode 100644 docs/audits/772/evidence/sort-base-3.csv create mode 100644 docs/audits/772/evidence/sort-candidate-0.csv create mode 100644 docs/audits/772/evidence/sort-candidate-1.csv create mode 100644 docs/audits/772/evidence/sort-candidate-2.csv create mode 100644 docs/audits/772/evidence/sort-candidate-3.csv create mode 100644 docs/audits/772/evidence/verification.txt create mode 100644 docs/audits/772/evidence/wasm-sections.jsonl create mode 100644 docs/audits/772/matrix.sh create mode 100644 docs/audits/772/prototypes.py create mode 100644 docs/audits/772/sort_probe.rs create mode 100644 docs/audits/772/symbol-summary.txt create mode 100644 docs/audits/772/wasm_sections.py diff --git a/docs/audits/772/README.md b/docs/audits/772/README.md new file mode 100644 index 000000000..faf4a4b78 --- /dev/null +++ b/docs/audits/772/README.md @@ -0,0 +1,241 @@ +# Release binary size audit (#772) + +Audit date: 2026-10-29. Baseline: `3d19abbce5dd8d5244641ff0d7ba8bad5424d07f` +on `v3`. This is an investigation with disposable prototypes, not a production +optimization patch. No public API, format, error policy, feature, size cap or +coverage threshold is changed. + +## Reproduction and measurement boundaries + +Measurements run on `s1c44t88`, Linux x86-64, two Intel Xeon E5-2696 v4 CPUs +(44 physical cores, 88 threads), with Rust/Cargo 1.99.1 and LLVM 23.1.1. +The release profile uses `opt-level="z"`, full LTO, one codegen unit, +`panic="abort"`, and symbol stripping. `dist` inherits release but uses thin +LTO. `envelope` inherits release but uses opt-level 3 and keeps symbols. + +The native target is `x86_64-unknown-linux-gnu`; browser is +`wasm32-unknown-unknown` with `browser`; WASI is `wasm32-wasip1` with default +features. The `wasm` feature is deprecated and does nothing. Native `browser` +enables a dependency but does not expose the browser implementation. + +The issue's historical cap was 1,259,520 bytes, with 736 bytes free after #771. +At this audit's baseline the checked-in cap is 1,263,616 bytes (#723), with +only **24 bytes free**. Both numbers are recorded rather than silently +comparing different revisions. This audit does not propose raising either cap. + +Use the attached dependency lock snapshot as `Cargo.lock` in a fresh checkout +of the baseline. It is intentionally named `dependency-lock.toml`, since the +repository does not track its root Cargo.lock. The lock SHA-256 is +`08a1495662974810709834e9a3530faa0f1f63656020f868767a75bc20fd625f`. + +```sh +git checkout --detach 3d19abbce5dd8d5244641ff0d7ba8bad5424d07f +cp /path/to/audit/dependency-lock.toml Cargo.lock +bash /path/to/audit/matrix.sh /tmp/772-results +python3 /path/to/audit/prototypes.py "$PWD" /tmp/772-work /tmp/772-probes +``` + +Use Rust 1.99.1 for numerical reproduction. Do not inherit `RUSTFLAGS`, profile +overrides or a different target. The scripts record compiler, feature tree, +manifest, artifact hashes and exact sizes. Prototype output directories must +not already exist. Each prototype starts from the baseline, uses `--locked`, +and restores its source before the next build. The Chrono feature-only probe +uses offline resolution because removing its serde edge requires a lockfile +update; no package versions changed. Savings are not additive. + +The `rlib` (15,064,724 bytes) is an intermediate archive containing linkable +code and compiler metadata. The native `cdylib` (311,112 bytes) has no exported +database ABI (`nm -D --defined-only` is empty). Neither is a useful estimate +of an embedded application's linked database cost. The existing +`perf_envelope` example is used as a reproducible library consumer, with its +harness cost included, under both size and speed profiles. + +Browser measurements include both raw Cargo Wasm modules and the result of +`wasm-bindgen 0.2.129 --target web --out-name minigraf` (no wasm-opt or +compression). The official tool archive checksum is +`82d12bb940e2d4e72e0d5605387fc1b8ca179044e012b620f0ce4e7440e8320e`. +The packaged baseline is 994,445 bytes of Wasm plus 44,633 bytes of JavaScript; +the JavaScript and TypeScript declaration files retain their sizes, with +linker-assigned internal function indices changed in both probes. Their +contents are identical after normalizing those function indices and the +`shim_idx` numbers in generated comments. WASI's CLI uses an in-memory +database; it does not exercise the native file backend. macOS, Windows, ARM, +binding package sizes and browser execution were not measured here. + +## Attribution and code review + +For attribution only, rebuild with `CARGO_PROFILE_RELEASE_STRIP=none`, then +run `nm -S --size-sort -C` and `size -A`. Keep the optimization settings fixed. +The stripped gate artifact remains the authoritative size measurement. + +The attribution build contains 893,646 bytes of `.text`, 101,440 of `.rodata`, +150,848 of `.eh_frame`, 21,060 of `.eh_frame_hdr`, and 33,688 of `.data.rel.ro`. +Symbol-name grouping assigns 166,846 text bytes to query engine names, 151,178 +to Datalog, 107,207 to storage, 39,907 to graph types/store, and 384,370 to +other runtime/dependency names. This is attribution by symbol spelling, not +an exclusive source-level accounting: inlining, generic arguments, aliases, +padding and linker decisions prevent that interpretation. + +| Area inspected | Finding and disposition | +| --- | --- | +| Parser, expressions, recursive execution, optimizer, aggregate/window engine | Large functions are real supported semantics. Keep exact summation, recursion, error checks, and stable selectivity/cost sorting. Window ordering already shares one comparator; error construction is already cold and out of line. | +| Query plan imports, prepared slot names, set ordering | Isolated sort probes below. Unique names and byte-identical values offer safer opportunities than semantic query tie order. Import-slot uniqueness needs explicit confirmation before shipping that probe. | +| Graph pending indexes and value representations | Pending and committed encodings have different layouts and semantics. Unifying them for size risks compatibility, signed-zero/NaN behavior and query correctness. No speculative container replacement. | +| B+tree, node codec, DICT, reader, cache, COW/free list | Tree operations already mostly accept `dyn StorageBackend`; reader wrappers still specialize for file and memory backends. Preserve checked decoding, CRCs, pinning, quarantine, and cache locking. Probe reader type erasure and free-ID sorting separately. | +| Persistence, migration, large transactions, WAL, fact log, log writer | Keep legacy readers, stable same-transaction replay ordering, recovery checks, durability syncs and streaming bounds. These are required behavior, not removable size overhead. Legacy sorting is already shared across backend types. | +| CLI/REPL and public library entry points | Inspect actual linked consumers, not archive sizes. Main includes inlined initialization work; its symbol size is not solely argument parsing. Release and distribution profiles produce materially different artifacts. | +| Browser buffer, IndexedDB, bindings and UDF conversion | Delete lists already use unstable integer sorts. Promise callbacks have different IDB lifecycle/error responsibilities. Removing JSON trees or sharing callbacks needs a separate compatibility/performance design; no unmeasured savings claimed. | +| WASI and platform backend code | Native locking/fsync/WAL are cfg-excluded from Wasm. Keep portability paths and platform-specific error behavior. Native savings cannot simply be assigned to WASI. | +| Dependencies and generated runtime code | Chrono feature probe below. `regex-lite` implements public predicates; backtrace machinery supports diagnostics. Removing regex, chrono, formatting or backtraces is not accepted merely because their symbols are large. | +| Tests, examples, Kani/grammar/model-checking support | Test-only code and dev dependencies do not justify production deletions. Keep all test and coverage gates. Consumer examples do unify dev-dependency features, so their sizes are reported separately. | + +## Rejected directions without prototypes + +- Remove stable legacy fact ordering: same-transaction replay must preserve + input order; a smaller binary cannot justify changing stored history. +- Replace optimizer stable sorts with unstable sorts: tied clause order is a + documented behavior and can affect planning and error precedence. +- Merge pending and persisted key formats, remove migrations, relax corruption + checks, or remove fsync/locking: violates reliability and stability. +- Disable backtraces or unwind metadata with private dependency cfgs or build + flags: changes diagnostics and portability, and creates unsupported build + coupling. Their large attribution is not an actionable saving under #772. +- Hand-write timestamp/JSON/regex replacements: no measured safe saving; + substantially larger semantic and maintenance burden than reusing primitives. + +## Evidence and follow-ups + +Each source probe is independent. Positive savings mean fewer bytes than the +1,263,592-byte native default release baseline. + +| Probe | Native bytes | Saving | Runtime, memory and maintenance tradeoff | +| --- | ---: | ---: | --- | +| Share `OnDiskReader` through a boxed backend trait object | 1,256,144 | 7,448 | One extra heap allocation per reader, trait-object dispatch; no new public API or storage algorithm. Test hot reads and reader creation before adoption. | +| Use existing unstable byte-vector sort in `keys::set_elements` | 1,260,568 | 3,024 | Equal byte vectors are indistinguishable and immediately deduplicated. Removes stable-sort scratch storage; same worst-case O(n log n), but distribution-dependent constants still need measurement. | +| Unstable sort for plan imports by slot | 1,262,936 | 656 | Removes stable scratch storage; verify that ties are identical imports, not distinct aliases, before adoption. Small saving. | +| Unstable sorts for unique prepared/branch variable names | 1,263,240 | 352 | Names come from sets/maps; equal entries have no observable tie identity. Removes scratch storage; small saving and possible distribution-dependent timing differences. | +| Ascending free-ID sort followed by reverse | 1,263,256 | 336 | **Reject:** adds an O(n) pass and measured 175% slower on 100K already-descending IDs; 336 bytes does not justify the regression. | +| Unstable set-value comparison sort | 1,263,688 | **-96** | Reject: increases binary size even though stability is unnecessary for equal values. | +| Disable Chrono's serde feature | 1,263,592 | **0** | Reject as a binary-size optimization: no shipped-byte reduction. Dependency-edge cleanup is separate work. | + +The profile comparison is separate: switching the `dist` CLI from thin to full +LTO yields the existing release artifact, saving **239,296 bytes (15.9%)** from +the 1,502,888-byte distribution baseline. This is not 239 KB of headroom in +the current gate: that gate already uses full LTO. Build-time and runtime +tradeoffs require their own review. + +| Artifact | Baseline | Set-encoding probe | Saving | +| --- | ---: | ---: | ---: | +| Native default CLI | 1,263,592 | 1,260,568 | 3,024 | +| Native `wasm` feature CLI | 1,263,592 | 1,260,568 | 3,024 | +| Native `browser` feature CLI | 1,263,576 | 1,260,552 | 3,024 | +| Distribution CLI, thin LTO | 1,502,888 | 1,498,776 | 4,112 | +| WASI CLI | 879,785 | 878,835 | 950 | +| Raw browser Wasm | 1,525,738 | 1,524,903 | 835 | +| Packaged browser Wasm | 994,445 | 993,569 | 876 | +| Library consumer, release | 1,464,112 | 1,461,072 | 3,040 | +| Library consumer, envelope, original symbols | 4,749,544 | 4,744,624 | 4,920 | +| Library consumer, envelope, stripped for comparison | 2,161,280 | 2,157,120 | 4,160 | + +The reader probe yields 879,687 bytes on WASI (98 saved), 1,524,995 raw +browser bytes (743 saved), 993,809 packaged browser bytes (636 saved), and +2,140,888 stripped envelope-consumer bytes (20,392 saved). The native gain is +larger because both file and memory backends are linked. Do not extrapolate +the native saving to single-backend builds. + +Raw browser sections are dominated by code (1,047,465 bytes), custom metadata +(251,889), exports (107,688) and data (105,632). The matching wasm-bindgen pass +removes packaging-only metadata/exports; those are not production-code +reduction opportunities. WASI has 770,451 code and 105,393 data bytes. + + +## Runtime and memory checks + +`sort_probe.rs`, compiled with `rustc -O` on Rust 1.99.1, compares the exact +sort algorithm choices at 8, 64, 1,024 and +100,000 elements, with deterministic random, ascending, descending and +8-value repeating inputs. Each output is checked against an independently +sorted result. It excludes input cloning/output checking from its timer. +Four paired runs used NUMA nodes 1 and 3, swapping them each round, with no +competing builds/tests. These are algorithm measurements, not query latency +claims. Raw nanoseconds per sort are in `evidence/sort-*.csv`. + +At 100K elements, the byte-vector unstable sort was 27.3% faster for random +input, 22.0% faster for repeated values, 2.1% faster for descending input and +0.8% slower for ascending input (median paired ratios). At 1,024 elements, +random/repeated bytes were 12.7%/35.4% faster. This supports following up the +encoded-set change, while retaining end-to-end set workloads as a shipping +gate. Stable sorting's temporary element storage disappears; these numbers +do not quantify whole-process allocation peaks. + +The free-ID ascending-plus-reverse probe was **174.9% slower** at 100K +already-descending IDs, and 13.2% slower on repeated IDs; at 1,024 descending +IDs it was 66.5% slower. Reject it for a 336-byte saving. Unique-string sorting +was 24.2% faster at 100K random names and within 2.3% on ascending/descending +inputs, supporting a small, separate metadata-sorting follow-up. + +`compare.py` used the existing opt-level-3 envelope consumer against a common +100K-fact fixture in bench tmpfs. It ran 17 warm-read shapes in four paired +rounds, swapping NUMA nodes 1/3, with the harness checking expected counts and +both variants returning the same row count in all 68 comparisons. This is a +query/read comparison, not a storage-write or cold-I/O benchmark. Apart from +the short point probe discussed below, median paired p50 changes ranged from +-1.28% (count) to +2.30% (transaction-counter time travel). These observations +do not establish a universal performance bound. + +The first point-entity result was +5.08%, with individual paired ratios ranging +from 0.980 to 1.177. Because 200 samples of such a short query take only a few +milliseconds, the apparent regression required a focused rerun rather than a +blanket no-regression claim. Raw four-round evidence is in +`evidence/reader-runtime.json`. A focused 32-pair rerun of point, attribute/value +and transaction-counter time travel gave median p50 changes of **+3.91%**, +**+0.84%**, and **+2.02%**, respectively (`evidence/reader-point-runtime.json`). +The point cost is a real concern near the 5% budget, not a clean no-regression +result. Keep reader sharing conditional on a longer point/reader-creation +study and full storage/concurrency validation. An extracted non-generic helper +could be preferable to an allocation per reader. + +`cli_compare.py` compared the existing thin-LTO distribution executable with +the full-LTO release executable in eight socket-swapped pairs. Each process +ingested 2,000 facts and executed 400 counts; every count was checked as 2,000. +Full LTO reduced elapsed time by a median **9.09%** (all eight pairs favored +it). This includes startup, ingestion and printing, and does not represent +all CLI workloads. See `evidence/cli-runtime.json`. Cross-platform build-time +and runtime costs remain gates for #796. + +## Verification boundaries + +- `cargo test --all-features` on the unchanged baseline, with + `TMPDIR=/dev/shm/minigraf-772-tests`: exit 0. Its 80 printed test summaries + total 2,072 passes, zero failures and 20 ignored (includes child-process + test invocations). This is not a replacement for the disk durability gate. +- The initial disk-backed baseline run was interrupted after it spent its + remaining time in filesystem journal waits. It is not counted as passing. +- Set prototype: all 23 `storage::keys::tests` and all 10 + `set_values_test` tests passed; the latter used disk-backed temp fixtures, + covering checkpoint/reopen/WAL, retraction, large transactions, fact-log + copying, plan independence, signed zero and rejected literals/oversize sets. +- Reader prototype: both `storage::reader` unit tests passed (order probing + and UUID batching). Broader storage/transaction/concurrency coverage is a + prerequisite for its implementation PR, not implied by those two tests. +- Both source prototypes passed `cargo +1.89.0 check --all-features --locked`. +- Native/browser/WASI builds and wasm-bindgen packaging succeeded as tabulated. + Browser execution and non-Linux platform tests remain implementation gates. +- No production source is changed by this audit. Coverage floors, CI size caps, + runtime dependency declarations and file format remain untouched. + + +## Independently reviewable follow-ups + +Recommended order: the small set-encoding change first, the distribution +profile review second, conditional reader sharing third, and metadata sorts +last. This ranks safety and measured impact together. + +- [#794: reuse the unstable byte-vector sort for set encoding](https://github.com/project-minigraf/minigraf/issues/794). +- [#795: evaluate smaller sorts for unique query metadata](https://github.com/project-minigraf/minigraf/issues/795). +- [#796: align distribution LTO and size policy with shipped artifacts](https://github.com/project-minigraf/minigraf/issues/796). +- [#797: evaluate shared readers without regressing point lookups](https://github.com/project-minigraf/minigraf/issues/797). + +These are implementation/evaluation issues, not claims that the prototypes are +ready to merge. Each records the measured baseline, tradeoffs and required +shipping checks. The actual release head must be remeasured when implemented. diff --git a/docs/audits/772/cli_compare.py b/docs/audits/772/cli_compare.py new file mode 100644 index 000000000..0d4fa8657 --- /dev/null +++ b/docs/audits/772/cli_compare.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +"""Compare dist thin-LTO and release full-LTO on a fixed CLI workload. + +Usage: cli_compare.py DIST_EXE RELEASE_EXE OUTPUT_JSON +Includes startup, ingestion and printing; not a general query benchmark. +""" +from concurrent.futures import ThreadPoolExecutor +import json +from pathlib import Path +import subprocess +import sys +import time + +base, candidate, output = sys.argv[1:] +ingest = "(transact [" + " ".join(f"[:e{i} :v {i % 20}]" for i in range(2000)) + "])\n" +query = "(query [:find (count ?e) :where [?e :v ?v]])\n" +commands = (ingest + query * 400).encode() + + +def run(binary, node): + start = time.perf_counter() + r = subprocess.run(["numactl", f"--cpunodebind={node}", f"--membind={node}", binary], + input=commands, stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True) + elapsed = time.perf_counter() - start + assert not r.stderr, r.stderr + assert r.stdout.splitlines().count(b"2000") == 400 + return elapsed + + +rows = [] +with ThreadPoolExecutor(max_workers=2) as pool: + for i in range(8): + a_node, b_node = (1, 3) if i % 2 == 0 else (3, 1) + a = pool.submit(run, base, a_node) + b = pool.submit(run, candidate, b_node) + row = {"round": i, "base_node": a_node, "candidate_node": b_node, + "dist_seconds": a.result(), "release_seconds": b.result()} + rows.append(row) + Path(output).write_text(json.dumps(rows, indent=2) + "\n") + print(row, flush=True) diff --git a/docs/audits/772/compare.py b/docs/audits/772/compare.py new file mode 100644 index 000000000..8e4f8ccf4 --- /dev/null +++ b/docs/audits/772/compare.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 +"""Run the existing envelope query probes on opposite sockets, then swap. + +Usage: compare.py BASE_EXE CANDIDATE_EXE FIXTURE OUTPUT_JSON [ROUNDS] [INDICES] +INDICES is a comma-separated subset of the envelope's query-shape indices. +The fixture and adjacent .json metadata must already exist. Run only when +builds/tests have finished. This measures warm read queries, not fsync latency. +""" +from concurrent.futures import ThreadPoolExecutor +import json +from pathlib import Path +import subprocess +import sys + +base, candidate, fixture, output = sys.argv[1:5] +round_count = int(sys.argv[5]) if len(sys.argv) > 5 else 4 +# Representative point, scans, joins, not/or, rules, temporal, grouped/window +# and long-history reads from the pinned perf_envelope source. +indices = [0, 1, 2, 3, 5, 7, 8, 9, 10, 12, 13, 14, 19, 20, 21, 22, 23] +if len(sys.argv) > 6: + indices = [int(i) for i in sys.argv[6].split(",")] + + +def run(binary, node, index): + cmd = ["numactl", f"--cpunodebind={node}", f"--membind={node}", + binary, "__query", fixture, str(index), "2", "30"] + return json.loads(subprocess.check_output(cmd, text=True)) + + +rows = [] +with ThreadPoolExecutor(max_workers=2) as pool: + for round_no in range(round_count): + base_node, candidate_node = (1, 3) if round_no % 2 == 0 else (3, 1) + for index in indices: + a = pool.submit(run, base, base_node, index) + b = pool.submit(run, candidate, candidate_node, index) + a, b = a.result(), b.result() + assert not any(k in r for r in (a, b) for k in ("error", "capped_ms")), (a, b) + assert a["name"] == b["name"] and a["rows"] == b["rows"], (a, b) + row = {"round": round_no, "base_node": base_node, "candidate_node": candidate_node, + "base": a, "candidate": b} + rows.append(row) + Path(output).write_text(json.dumps(rows, indent=2) + "\n") + print(round_no, a["name"], a["p50_ms"], b["p50_ms"], flush=True) diff --git a/docs/audits/772/dependency-lock.toml b/docs/audits/772/dependency-lock.toml new file mode 100644 index 000000000..105062fc5 --- /dev/null +++ b/docs/audits/772/dependency-lock.toml @@ -0,0 +1,1690 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aho-corasick" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloca" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7d05ea6aea7e9e64d25b9156ba2fee3fdd659e34e41063cd2fc7cd020d7f4" +dependencies = [ + "cc", +] + +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + +[[package]] +name = "anstyle" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" + +[[package]] +name = "anyhow" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" + +[[package]] +name = "assoc" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfdc70193dadb9d7287fa4b633f15f90c876915b31f6af17da307fc59c9859a8" + +[[package]] +name = "async-trait" +version = "0.1.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", +] + +[[package]] +name = "atomic-polyfill" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" +dependencies = [ + "critical-section", +] + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "bit-set" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56d87354e4229f54a44f7bf2435906a4656dba36026ab6eaca629a2c436a691c" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5727b15fa97d4f4fee0a3b7c3d550ed0269f54329207b86388de918604e31269" +dependencies = [ + "borsh", + "serde", +] + +[[package]] +name = "bitflags" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" + +[[package]] +name = "bitvec" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddcec3d12c579d40898fe0a9a358a803c23e9c52ca3c425707f81c9436211837" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "borsh" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "553c5d846a6ba5150c65e3b1b8ec073bcf1abc20f9b7220de384a4443ea4e20a" +dependencies = [ + "borsh-derive", + "bytes", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12cdfe656708a01f89b451a7d36466e6fe6c414de0aa18fc54f864f6f9ca9f56" +dependencies = [ + "once_cell", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 3.0.9", +] + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "bytemuck" +version = "1.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" + +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "cc" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86e055fa6e3e40ad6187ba25b6855eeb635d5271f8e0f0e1e9a5826b8d75bea0" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" + +[[package]] +name = "cfg_aliases" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" + +[[package]] +name = "chacha20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" +dependencies = [ + "cfg-if", + "cpufeatures", + "rand_core 0.10.1", +] + +[[package]] +name = "chrono" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" +dependencies = [ + "num-traits", + "serde", +] + +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half", +] + +[[package]] +name = "clap" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" +dependencies = [ + "clap_builder", +] + +[[package]] +name = "clap_builder" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" +dependencies = [ + "anstyle", + "clap_lex", +] + +[[package]] +name = "clap_lex" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" + +[[package]] +name = "cobs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" +dependencies = [ + "thiserror", +] + +[[package]] +name = "const-siphasher" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03efed02df0504d71e44bfd51d3329f401b8303a2fd14254acf05c95a0af0153" + +[[package]] +name = "core_detect" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f8f80099a98041a3d1622845c271458a2d73e688351bf3cb999266764b81d48" + +[[package]] +name = "corosensei" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6886a0c0f263965933c438626e7179139a62b978a33aa18281cbf0cd5a975f34" +dependencies = [ + "autocfg", + "cfg-if", + "libc", + "scopeguard", + "windows-sys 0.59.0", +] + +[[package]] +name = "cpufeatures" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ba106e844045ddc02c20768ac4b0b7cb45f2cc2ecbd833ac9f5dacb183c2055" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "criterion" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "950046b2aa2492f9a536f5f4f9a3de7b9e2476e575e05bd6c333371add4d98f3" +dependencies = [ + "alloca", + "anes", + "cast", + "ciborium", + "clap", + "criterion-plot", + "itertools", + "num-traits", + "oorandom", + "page_size", + "plotters", + "rayon", + "regex", + "serde", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8d80a2f4f5b554395e47b5d8305bc3d27813bacb73493eb1001e8f76dae29ea" +dependencies = [ + "cast", + "itertools", +] + +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "crossbeam-deque" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622f3fc73690be383c7214310406f28a90e6edeadc3cea882f9d71e495b9711a" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc74980687109a3b14c72fd458107bf0baa1da1a1a805e178d15501ba9b86d9d" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "either" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e9c71c2167ca323c882b99918929403426e2373ea17242ff5653e0d5e1058be" + +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + +[[package]] +name = "equivalent" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "fastrand" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" + +[[package]] +name = "find-msvc-tools" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c66915cc5391097de7a2b0b972e8505aa33c0df401fd3a6811dbdb32881ba48" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures-core" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" + +[[package]] +name = "futures-task" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" + +[[package]] +name = "futures-util" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "slab", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "rand_core 0.10.1", +] + +[[package]] +name = "half" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" +dependencies = [ + "cfg-if", + "crunchy", + "zerocopy", +] + +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "heapless" +version = "0.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" +dependencies = [ + "atomic-polyfill", + "hash32", + "rustc_version", + "serde", + "spin", + "stable_deref_trait", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "indexmap" +version = "2.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "js-sys" +version = "0.3.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "libc" +version = "0.2.191" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a" + +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "minicov" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4869b6a491569605d66d3952bcdf03df789e5b536e5f0cf7758a7f08a55ae24d" +dependencies = [ + "cc", + "walkdir", +] + +[[package]] +name = "minigraf" +version = "2.0.5" +dependencies = [ + "anyhow", + "chrono", + "crc32fast", + "criterion", + "js-sys", + "pest", + "pest_derive", + "pest_meta", + "postcard", + "proptest", + "regex-lite", + "serde", + "serde_json", + "shuttle", + "tempfile", + "uuid", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", + "web-sys", + "wide", +] + +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "oorandom" +version = "11.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" + +[[package]] +name = "owo-colors" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c45bb4a6ae1280ec0803b1ef9d3455eb50f01efbbe1447ab020f1d54fba9d8" + +[[package]] +name = "page_size" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d5b2194ed13191c1999ae0704b7839fb18384fa22e49b57eeaa97d79ce40da" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "pest" +version = "2.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8db75153506001cb36ed924f08cadc862eb3f8c4d0d534139f29074769d7660" +dependencies = [ + "memchr", + "pest_stack_guard", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20aa17e11fb35664b67d5214a0afac57a360d231b6ec53d6eba0700b27d933b4" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "626ec5afccf44ccbfeb2b232316510bb55b4bf34d891afcb0fb07d2b17d7fe9d" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 3.0.9", +] + +[[package]] +name = "pest_meta" +version = "2.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3f45b6caa65c1b08186832745159c2529994146340a7bf44168095469720f5d" +dependencies = [ + "pest", +] + +[[package]] +name = "pest_stack_guard" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97e6cd2217057fa86b6eaa512917e58089d875b957a31e35e7ab729977e0a5f2" +dependencies = [ + "psm", + "stacker", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "plotters" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a" + +[[package]] +name = "plotters-svg" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "postcard" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" +dependencies = [ + "cobs", + "embedded-io 0.4.0", + "embedded-io 0.6.1", + "heapless", + "serde", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro-crate" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proptest" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8530004ccb15eae51c7e40009fbe317f341f804db54dc033eec1c50be28cfa0" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags", + "chacha20", + "core_detect", + "num-traits", + "rand 0.10.3", + "rand_xorshift", + "regex-syntax", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "psm" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" +dependencies = [ + "cc", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e058c7de0b26af77780c769414d6257830bb240f3c38477dbc2c16e5f54d6d4c" +dependencies = [ + "libc", + "rand_chacha", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65c9fb96cbc91e3478eaae79a69fcd3f1ae4ad052e471fe6732fff548984b4af" +dependencies = [ + "getrandom 0.4.3", + "rand_core 0.10.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.17", +] + +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + +[[package]] +name = "rand_pcg" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rand_xorshift" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60aa6af80be32871323012e02e6e65f8a7cc7890931ae421d217ad8fe0df2ccf" +dependencies = [ + "rand_core 0.10.1", +] + +[[package]] +name = "rayon" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-lite" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5e76742e5294153d4dde1207dbec5bdd81eef6fabdc0d2118babadabfd858aa" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "rusty-fork" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + +[[package]] +name = "safe_arch" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42c6efa15875e6ecb39ca61fb0b0c1a40b84fac5a5ffe71eef7d1000c8eb3f5f" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", +] + +[[package]] +name = "serde_json" +version = "1.0.154" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "sha1_smol" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "shuttle" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f796ae4996c3fbf039c26d69536f8e112f49fd5e9a25fd353fe4787134b7cb" +dependencies = [ + "bitvec", + "cfg-if", + "const-siphasher", + "corosensei", + "hex", + "owo-colors", + "rand 0.8.8", + "rand_core 0.6.4", + "rand_pcg", + "scoped-tls", + "shuttle-engine", + "shuttle-schedulers", + "shuttle-std", + "tracing", +] + +[[package]] +name = "shuttle-engine" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cf6dad68d0b9d252e56ba6374e05b542b659ee076cf7f319f7c1312d5879d65" +dependencies = [ + "assoc", + "bitvec", + "cfg-if", + "const-siphasher", + "corosensei", + "hex", + "owo-colors", + "rand 0.8.8", + "rand_core 0.6.4", + "rand_pcg", + "scoped-tls", + "smallvec", + "tracing", +] + +[[package]] +name = "shuttle-schedulers" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7673a579e1660404067f5aa1344d6530f15b59f53b0fe98767d7ab117d14067" +dependencies = [ + "rand 0.8.8", + "rand_pcg", + "shuttle-engine", + "smallvec", + "tracing", +] + +[[package]] +name = "shuttle-std" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320b7adce8256548602d4930ef030ac473815a892fd252099702bebcca0d33f8" +dependencies = [ + "assoc", + "owo-colors", + "shuttle-engine", + "smallvec", + "tracing", +] + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.16.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0d5d4b1981b8bbbb7aed204cae5726d683d5d6ac7e74ec54122ea28f315e7c8" + +[[package]] +name = "spin" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" +dependencies = [ + "lock_api", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "stacker" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707f49d46706bacf8a2b00d51dace3f9de527c13eec3778f570c411f89e69967" +dependencies = [ + "cc", + "cfg-if", + "libc", + "psm", + "windows-sys 0.61.2", +] + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom 0.4.3", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "thiserror" +version = "2.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", +] + +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "tokio" +version = "1.54.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b52fd3255258d26fac7264ab5a76b53c13367136dc011d3d6ad4f8ed070396a3" +dependencies = [ + "pin-project-lite", +] + +[[package]] +name = "toml_datetime" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b86d767906c6c42421dcba507eb9d203e779497710a47782a224bb871653053" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.25.17+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3641d5bbb5349a79e1020a242d251efbc546ad8048d133958323ce9c40a9c9c" +dependencies = [ + "indexmap", + "toml_datetime", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.1.5+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baa693a8032d7e1cada7d0041e96126df243179ff061456783ac7f12bda4744c" +dependencies = [ + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unicode-ident" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" + +[[package]] +name = "uuid" +version = "1.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a0e2d11620c50695fe12bbbfde96b3477fe606e7284c22d505c12ce51214514" +dependencies = [ + "getrandom 0.4.3", + "js-sys", + "serde_core", + "sha1_smol", + "wasm-bindgen", +] + +[[package]] +name = "wait-timeout" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cbab34de2d982e9b48e18d216d04c4a6f641066ff19ffb699980f591ee3610e" +dependencies = [ + "js-sys", + "tokio", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 3.0.9", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-bindgen-test" +version = "0.3.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae7499dfd45780a0a91d7ee6bb9ac51970a4479a41a89da443fdda5a39547d42" +dependencies = [ + "async-trait", + "cast", + "js-sys", + "libm", + "minicov", + "nu-ansi-term", + "num-traits", + "oorandom", + "serde", + "serde_json", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test-macro", + "wasm-bindgen-test-shared", +] + +[[package]] +name = "wasm-bindgen-test-macro" +version = "0.3.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b84b5ac638bfb168196a1a461fcc8f46a294a18b1b6be52133b4e0db122cc9f" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", +] + +[[package]] +name = "wasm-bindgen-test-shared" +version = "0.2.129" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f692aa943ccd88363733b77063f32cfed5bc6cbea8e6e8b251b302f881606fe" + +[[package]] +name = "web-sys" +version = "0.3.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88261b9deccee56594c11a3460c462c41f58d148598fe70ad77070126a68aba4" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wide" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d920ac99c3c8edce110cb8d07dbb324d6d026011dce85b1e9355b70f0adacc4f" +dependencies = [ + "bytemuck", + "safe_arch", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" +dependencies = [ + "memchr", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zerocopy" +version = "0.8.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5fe1f8f1b06191a00962174c61aa5005e0bb391a6d80d07e24d115c01a92ed8" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "863ad3ac83293fb4d740aedbfdc9240dd8d1a50c1099acd76ce80ce7c7230c7f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/docs/audits/772/evidence/additional-artifacts.tsv b/docs/audits/772/evidence/additional-artifacts.tsv new file mode 100644 index 000000000..3e93ddd55 --- /dev/null +++ b/docs/audits/772/evidence/additional-artifacts.tsv @@ -0,0 +1,17 @@ +artifact bytes sha256 +reader/consumer-speed.bin 4722720 81b56e10725b71370c0251ffce653c6bf67c729e2c63533667e0c7c0591de064 +reader/browser.bin 1524995 68812f478d8a0fad13fd4d945086c3e375a10ab4f8fc59963f6931172876183a +reader/consumer-speed-stripped.bin 2140888 d4e2d46cbf4ea346050b80c6921aff5ac77ec3ce2ec21bcc78d516c8008d45ed +reader/wasi.bin 879687 374a0764f6602478956c7395ef0e7f880bbd593fa32a837f3e44553485c71366 +browser-package-reader/minigraf.d.ts 10311 52b8c9b6f00c070bb90129b136211986352124e92f3fca15c0795ad5047421db +browser-package-reader/minigraf_bg.wasm.d.ts 2259 4ee0b0c6576a0cb0eacfa609c23d7d79e1d8fe7f4bc25e0958e88ed3e1aaecad +browser-package-reader/minigraf.js 44633 8d65ead5a44829d454a5a9d87ec89feb77972bc9d098606a7822966a94cda2e5 +browser-package-reader/minigraf_bg.wasm 993809 16613521ddfdb65aceda3b8f46618bf9c3ee8fd55420ddfb7351ca84c0e23bdf +browser-package-base/minigraf.d.ts 10311 115ba2e4f4901999736c1c04dfc32432c57f6586da873e97c663927d16e6f618 +browser-package-base/minigraf_bg.wasm.d.ts 2259 3dfa4f2924e4d0ae7dc3b473828598060d7c5ced7d0403960084215d0818b235 +browser-package-base/minigraf.js 44633 1988d821eaef9ec5343b96e8d1b9752df10f50cfd96ce5c31b8d5539d34f50bc +browser-package-base/minigraf_bg.wasm 994445 3438e4e056b9efdd7310f31fce87ad3ba98af49bd7041d126a3b1dd5f7954dbd +browser-package-set/minigraf.d.ts 10311 c092804ca0f6c3ad32d59ee6c130a3659300ed6efb41f67cbb6748156b4ab822 +browser-package-set/minigraf_bg.wasm.d.ts 2259 4aedf35ab91b9413803ed86e7bcf70065dc383c4453a611a9e64c4a341ea2774 +browser-package-set/minigraf.js 44633 e00c1c6439b905c151696dde6a6b4e3f164cfcdda71d9d746c4bf65c602e76bc +browser-package-set/minigraf_bg.wasm 993569 9b475540c4971cb9cd0b1c95c0c56ab4825eb40596468abc61d219a6fb35258d diff --git a/docs/audits/772/evidence/baseline-sizes.tsv b/docs/audits/772/evidence/baseline-sizes.tsv new file mode 100644 index 000000000..1f847b855 --- /dev/null +++ b/docs/audits/772/evidence/baseline-sizes.tsv @@ -0,0 +1,10 @@ +case bytes sha256 +native 1263592 3c3613869291dd177565a7eac46f100f61551931395df577aeeb2d909874beff +native-wasm-feature 1263592 6401a41202d7a2201f03993aad278ac029dcd71969fd9a711aca563cc8382119 +native-browser-feature 1263576 f5f5821fa1b5a42ff081cb16e213b41ef69cf7c156b217cb8de117fb84371cc7 +dist 1502888 9b467c30741cd47a4bb3134539dab3dea4f5ec9f61adb86208645029181c52a0 +wasi 879785 e163ea95028165165e8243c926dcbdd589b8af24e0852244d14f796a12c5b1e4 +browser 1525738 32f0df0a85b1e6a52def5a369f793d7314c30d67a8fcc98730563ad18ad8b8f3 +consumer-size 1464112 d6801c8ac26ed901329ae463a72c22da5fa405969fffcaddbc5906fea018e09c +consumer-speed 4749544 d9e9075750f3ed769ad834c93e614c116c9a17d420d3291881544c02f572ad77 +consumer-speed-stripped 2161280 69f17f8739dc35d34e461213aaa7d267dc4d0cfd5934bae901f2af24e43f72c7 diff --git a/docs/audits/772/evidence/browser-interface-check.txt b/docs/audits/772/evidence/browser-interface-check.txt new file mode 100644 index 000000000..8d7995982 --- /dev/null +++ b/docs/audits/772/evidence/browser-interface-check.txt @@ -0,0 +1,6 @@ +set minigraf.js: identical after normalizing function element indices and shim_idx comments = True +set minigraf.d.ts: identical after normalizing function element indices and shim_idx comments = True +set minigraf_bg.wasm.d.ts: identical after normalizing function element indices and shim_idx comments = True +reader minigraf.js: identical after normalizing function element indices and shim_idx comments = True +reader minigraf.d.ts: identical after normalizing function element indices and shim_idx comments = True +reader minigraf_bg.wasm.d.ts: identical after normalizing function element indices and shim_idx comments = True diff --git a/docs/audits/772/evidence/chrono-lock.patch b/docs/audits/772/evidence/chrono-lock.patch new file mode 100644 index 000000000..7d730e62f --- /dev/null +++ b/docs/audits/772/evidence/chrono-lock.patch @@ -0,0 +1,4 @@ +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -204 +203,0 @@ +- "serde", diff --git a/docs/audits/772/evidence/cli-runtime.json b/docs/audits/772/evidence/cli-runtime.json new file mode 100644 index 000000000..16c4bdfed --- /dev/null +++ b/docs/audits/772/evidence/cli-runtime.json @@ -0,0 +1,58 @@ +[ + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "dist_seconds": 0.9249690969008952, + "release_seconds": 0.8358670680318028 + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "dist_seconds": 0.9138289410620928, + "release_seconds": 0.8395526350941509 + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "dist_seconds": 0.9249248949345201, + "release_seconds": 0.8416663140524179 + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "dist_seconds": 0.9173004371114075, + "release_seconds": 0.8536521592177451 + }, + { + "round": 4, + "base_node": 1, + "candidate_node": 3, + "dist_seconds": 0.9221697959583253, + "release_seconds": 0.8372825500555336 + }, + { + "round": 5, + "base_node": 3, + "candidate_node": 1, + "dist_seconds": 0.9150846709962934, + "release_seconds": 0.8401562829967588 + }, + { + "round": 6, + "base_node": 1, + "candidate_node": 3, + "dist_seconds": 0.9384670939762145, + "release_seconds": 0.8412347189150751 + }, + { + "round": 7, + "base_node": 3, + "candidate_node": 1, + "dist_seconds": 0.9151123089250177, + "release_seconds": 0.8311216931324452 + } +] diff --git a/docs/audits/772/evidence/compiler.txt b/docs/audits/772/evidence/compiler.txt new file mode 100644 index 000000000..b3c1163d2 --- /dev/null +++ b/docs/audits/772/evidence/compiler.txt @@ -0,0 +1,8 @@ +rustc 1.99.1 (58cf8f9c3 2026-10-13) +binary: rustc +commit-hash: 58cf8f9c35b355199727627d07ae34a4e2846d67 +commit-date: 2026-10-13 +host: x86_64-unknown-linux-gnu +release: 1.99.1 +LLVM version: 23.1.1 +cargo 1.99.1 (5f94df478 2026-08-27) diff --git a/docs/audits/772/evidence/patches/chrono-serde.patch b/docs/audits/772/evidence/patches/chrono-serde.patch new file mode 100644 index 000000000..52a80d58b --- /dev/null +++ b/docs/audits/772/evidence/patches/chrono-serde.patch @@ -0,0 +1,5 @@ +--- a/Cargo.toml ++++ b/Cargo.toml +@@ -37 +37 @@ +-chrono = { version = "0.4", features = ["serde", "std"], default-features = false } ++chrono = { version = "0.4", features = ["std"], default-features = false } diff --git a/docs/audits/772/evidence/patches/encoded-set-sort.patch b/docs/audits/772/evidence/patches/encoded-set-sort.patch new file mode 100644 index 000000000..74cc4a92c --- /dev/null +++ b/docs/audits/772/evidence/patches/encoded-set-sort.patch @@ -0,0 +1,5 @@ +--- a/src/storage/keys.rs ++++ b/src/storage/keys.rs +@@ -528 +528 @@ +- encoded.sort(); ++ encoded.sort_unstable(); diff --git a/docs/audits/772/evidence/patches/free-sort.patch b/docs/audits/772/evidence/patches/free-sort.patch new file mode 100644 index 000000000..5755ef7f1 --- /dev/null +++ b/docs/audits/772/evidence/patches/free-sort.patch @@ -0,0 +1,6 @@ +--- a/src/storage/page.rs ++++ b/src/storage/page.rs +@@ -202 +202,2 @@ +- free.sort_unstable_by(|a, b| b.cmp(a)); ++ free.sort_unstable(); ++ free.reverse(); diff --git a/docs/audits/772/evidence/patches/import-sort.patch b/docs/audits/772/evidence/patches/import-sort.patch new file mode 100644 index 000000000..3d23a2f06 --- /dev/null +++ b/docs/audits/772/evidence/patches/import-sort.patch @@ -0,0 +1,5 @@ +--- a/src/query/engine/plan.rs ++++ b/src/query/engine/plan.rs +@@ -1441 +1441 @@ +- imports.sort_by_key(|&(_, s)| s); ++ imports.sort_unstable_by_key(|&(_, s)| s); diff --git a/docs/audits/772/evidence/patches/reader-erasure.patch b/docs/audits/772/evidence/patches/reader-erasure.patch new file mode 100644 index 000000000..82ca1a216 --- /dev/null +++ b/docs/audits/772/evidence/patches/reader-erasure.patch @@ -0,0 +1,48 @@ +--- a/src/storage/reader.rs ++++ b/src/storage/reader.rs +@@ -22,2 +22,2 @@ +-pub struct OnDiskReader { +- backend: MutexStorageBackend, ++pub struct OnDiskReader { ++ backend: Box, +@@ -38,2 +38,2 @@ +-impl OnDiskReader { +- pub fn new(backend: Arc>, cache: Arc, meta: &MetaPage) -> Self { ++impl OnDiskReader { ++ pub fn new(backend: Arc>, cache: Arc, meta: &MetaPage) -> Self { +@@ -41 +41 @@ +- backend: MutexStorageBackend(backend), ++ backend: Box::new(MutexStorageBackend(backend)), +@@ -57 +57 @@ +- DictReader::new(self.dict_root, &self.backend, &self.cache).with_shared(&self.shared) ++ DictReader::new(self.dict_root, &*self.backend, &self.cache).with_shared(&self.shared) +@@ -72 +72 @@ +- prefix_scan(root, prefix, &self.backend, &self.cache)? ++ prefix_scan(root, prefix, &*self.backend, &self.cache)? +@@ -79 +79 @@ +-impl OnDiskReader { ++impl OnDiskReader { +@@ -92 +92 @@ +- LeafCursor::new(self.dict_root, Some(&prefix), &self.backend, &self.cache)?; ++ LeafCursor::new(self.dict_root, Some(&prefix), &*self.backend, &self.cache)?; +@@ -169 +169 @@ +- let mut cursor = LeafCursor::new(root, Some(prefix), &self.backend, &self.cache)?; ++ let mut cursor = LeafCursor::new(root, Some(prefix), &*self.backend, &self.cache)?; +@@ -300 +300 @@ +-impl KeySource for OnDiskReader { ++impl KeySource for OnDiskReader { +@@ -413 +413 @@ +- let mut cursor = LeafCursor::new(root, Some(prefix), &self.backend, &self.cache)?; ++ let mut cursor = LeafCursor::new(root, Some(prefix), &*self.backend, &self.cache)?; +@@ -436 +436 @@ +-impl LogSource for OnDiskReader { ++impl LogSource for OnDiskReader { +@@ -458 +458 @@ +- let mut cursor = LeafCursor::new(root, Some(prefix), &self.backend, &self.cache)?; ++ let mut cursor = LeafCursor::new(root, Some(prefix), &*self.backend, &self.cache)?; +@@ -482 +482 @@ +-impl CommittedReader for OnDiskReader { ++impl CommittedReader for OnDiskReader { +@@ -532 +532 @@ +- let mut cursor = LeafCursor::new(self.eavt_root, None, &self.backend, &self.cache)?; ++ let mut cursor = LeafCursor::new(self.eavt_root, None, &*self.backend, &self.cache)?; diff --git a/docs/audits/772/evidence/patches/string-sorts.patch b/docs/audits/772/evidence/patches/string-sorts.patch new file mode 100644 index 000000000..cf19a7956 --- /dev/null +++ b/docs/audits/772/evidence/patches/string-sorts.patch @@ -0,0 +1,10 @@ +--- a/src/query/engine/plan.rs ++++ b/src/query/engine/plan.rs +@@ -1399 +1399 @@ +- own.sort(); ++ own.sort_unstable(); +--- a/src/query/datalog/prepared.rs ++++ b/src/query/datalog/prepared.rs +@@ -260 +260 @@ +- result.sort(); ++ result.sort_unstable(); diff --git a/docs/audits/772/evidence/patches/value-order-sort.patch b/docs/audits/772/evidence/patches/value-order-sort.patch new file mode 100644 index 000000000..c6b875e27 --- /dev/null +++ b/docs/audits/772/evidence/patches/value-order-sort.patch @@ -0,0 +1,7 @@ +--- a/src/query/datalog/aggregate.rs ++++ b/src/query/datalog/aggregate.rs +@@ -60,2 +60,2 @@ +- xs.sort_by(cmp); +- ys.sort_by(cmp); ++ xs.sort_unstable_by(cmp); ++ ys.sort_unstable_by(cmp); diff --git a/docs/audits/772/evidence/probe-sizes-final.json b/docs/audits/772/evidence/probe-sizes-final.json new file mode 100644 index 000000000..a0ab58fd5 --- /dev/null +++ b/docs/audits/772/evidence/probe-sizes-final.json @@ -0,0 +1,37 @@ +[ + { + "candidate": "free-sort", + "exit": 0, + "bytes": 1263256 + }, + { + "candidate": "encoded-set-sort", + "exit": 0, + "bytes": 1260568 + }, + { + "candidate": "value-order-sort", + "exit": 0, + "bytes": 1263688 + }, + { + "candidate": "string-sorts", + "exit": 0, + "bytes": 1263240 + }, + { + "candidate": "import-sort", + "exit": 0, + "bytes": 1262936 + }, + { + "candidate": "chrono-serde", + "exit": 0, + "bytes": 1263592 + }, + { + "candidate": "reader-erasure", + "exit": 0, + "bytes": 1256144 + } +] diff --git a/docs/audits/772/evidence/reader-point-runtime.json b/docs/audits/772/evidence/reader-point-runtime.json new file mode 100644 index 000000000..734215e62 --- /dev/null +++ b/docs/audits/772/evidence/reader-point-runtime.json @@ -0,0 +1,2402 @@ +[ + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.046104, + "name": "point_entity", + "p50_ms": 0.018304, + "p99_ms": 0.040911, + "peak_rss_kb": 5264, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.034907, + "name": "point_entity", + "p50_ms": 0.019273, + "p99_ms": 0.028706, + "peak_rss_kb": 5296, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.047319, + "name": "attribute_value", + "p50_ms": 0.018428, + "p99_ms": 0.044212, + "peak_rss_kb": 5268, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.051911, + "name": "attribute_value", + "p50_ms": 0.020795, + "p99_ms": 0.043585, + "peak_rss_kb": 5248, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.061374, + "name": "as_of", + "p50_ms": 0.019927, + "p99_ms": 0.044548000000000004, + "peak_rss_kb": 5320, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.037614, + "name": "as_of", + "p50_ms": 0.021095, + "p99_ms": 0.029297, + "peak_rss_kb": 5196, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.038349, + "name": "point_entity", + "p50_ms": 0.020713, + "p99_ms": 0.031093000000000003, + "peak_rss_kb": 5244, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.060838, + "name": "point_entity", + "p50_ms": 0.019473, + "p99_ms": 0.038317, + "peak_rss_kb": 5292, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.07964, + "name": "attribute_value", + "p50_ms": 0.019171999999999998, + "p99_ms": 0.060597000000000005, + "peak_rss_kb": 5268, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.071314, + "name": "attribute_value", + "p50_ms": 0.021427, + "p99_ms": 0.06938799999999999, + "peak_rss_kb": 5296, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.034837, + "name": "as_of", + "p50_ms": 0.020968999999999998, + "p99_ms": 0.028118999999999998, + "peak_rss_kb": 5236, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.048510000000000005, + "name": "as_of", + "p50_ms": 0.021266, + "p99_ms": 0.039987999999999996, + "peak_rss_kb": 5288, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.037659, + "name": "point_entity", + "p50_ms": 0.017753, + "p99_ms": 0.034926, + "peak_rss_kb": 5276, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.030391, + "name": "point_entity", + "p50_ms": 0.019655000000000002, + "p99_ms": 0.028309, + "peak_rss_kb": 5192, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.062915, + "name": "attribute_value", + "p50_ms": 0.019655000000000002, + "p99_ms": 0.040627, + "peak_rss_kb": 5276, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.030007, + "name": "attribute_value", + "p50_ms": 0.018896999999999997, + "p99_ms": 0.029204, + "peak_rss_kb": 5248, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.053378, + "name": "as_of", + "p50_ms": 0.020514, + "p99_ms": 0.049326999999999996, + "peak_rss_kb": 5264, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.043142999999999994, + "name": "as_of", + "p50_ms": 0.021337, + "p99_ms": 0.031359000000000005, + "peak_rss_kb": 5208, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.028804, + "name": "point_entity", + "p50_ms": 0.018131, + "p99_ms": 0.024415, + "peak_rss_kb": 5264, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.044808, + "name": "point_entity", + "p50_ms": 0.019233999999999998, + "p99_ms": 0.037569, + "peak_rss_kb": 5308, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.045058, + "name": "attribute_value", + "p50_ms": 0.02022, + "p99_ms": 0.041997, + "peak_rss_kb": 5284, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.049463, + "name": "attribute_value", + "p50_ms": 0.019020000000000002, + "p99_ms": 0.03927, + "peak_rss_kb": 5248, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.039625, + "name": "as_of", + "p50_ms": 0.019633, + "p99_ms": 0.03216599999999999, + "peak_rss_kb": 5268, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.064274, + "name": "as_of", + "p50_ms": 0.021486, + "p99_ms": 0.041623, + "peak_rss_kb": 5204, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 4, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.06872600000000001, + "name": "point_entity", + "p50_ms": 0.018118, + "p99_ms": 0.049563, + "peak_rss_kb": 5220, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.039369, + "name": "point_entity", + "p50_ms": 0.019230999999999998, + "p99_ms": 0.031622000000000004, + "peak_rss_kb": 5212, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 4, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.09528400000000001, + "name": "attribute_value", + "p50_ms": 0.03721, + "p99_ms": 0.064438, + "peak_rss_kb": 5280, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.033888, + "name": "attribute_value", + "p50_ms": 0.018695, + "p99_ms": 0.031552, + "peak_rss_kb": 5300, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 4, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.048182, + "name": "as_of", + "p50_ms": 0.020805, + "p99_ms": 0.039564, + "peak_rss_kb": 5276, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.033059000000000005, + "name": "as_of", + "p50_ms": 0.020661000000000002, + "p99_ms": 0.026984, + "peak_rss_kb": 5300, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 5, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.052503999999999995, + "name": "point_entity", + "p50_ms": 0.018099, + "p99_ms": 0.032386, + "peak_rss_kb": 5324, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.086814, + "name": "point_entity", + "p50_ms": 0.019949, + "p99_ms": 0.050998999999999996, + "peak_rss_kb": 5280, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 5, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.044780999999999994, + "name": "attribute_value", + "p50_ms": 0.018584, + "p99_ms": 0.034733, + "peak_rss_kb": 5280, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.050867, + "name": "attribute_value", + "p50_ms": 0.018293, + "p99_ms": 0.049341, + "peak_rss_kb": 5252, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 5, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.048555, + "name": "as_of", + "p50_ms": 0.020173, + "p99_ms": 0.036819000000000005, + "peak_rss_kb": 5324, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.045065, + "name": "as_of", + "p50_ms": 0.019754, + "p99_ms": 0.038933999999999996, + "peak_rss_kb": 5248, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 6, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.079286, + "name": "point_entity", + "p50_ms": 0.018954, + "p99_ms": 0.060145000000000004, + "peak_rss_kb": 5268, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.029587, + "name": "point_entity", + "p50_ms": 0.021418, + "p99_ms": 0.028538, + "peak_rss_kb": 5248, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 6, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.080385, + "name": "attribute_value", + "p50_ms": 0.019468, + "p99_ms": 0.052244000000000006, + "peak_rss_kb": 5244, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.057716, + "name": "attribute_value", + "p50_ms": 0.019895, + "p99_ms": 0.048, + "peak_rss_kb": 5244, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 6, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.072516, + "name": "as_of", + "p50_ms": 0.019502000000000002, + "p99_ms": 0.059852999999999996, + "peak_rss_kb": 5252, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.046142, + "name": "as_of", + "p50_ms": 0.021048, + "p99_ms": 0.044514, + "peak_rss_kb": 5252, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 7, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.038493, + "name": "point_entity", + "p50_ms": 0.020578, + "p99_ms": 0.035023, + "peak_rss_kb": 5268, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.05133, + "name": "point_entity", + "p50_ms": 0.018488, + "p99_ms": 0.035642999999999994, + "peak_rss_kb": 5288, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 7, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.035552, + "name": "attribute_value", + "p50_ms": 0.018572, + "p99_ms": 0.028427, + "peak_rss_kb": 5228, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.052395000000000004, + "name": "attribute_value", + "p50_ms": 0.020034000000000003, + "p99_ms": 0.04366, + "peak_rss_kb": 5192, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 7, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.051945, + "name": "as_of", + "p50_ms": 0.021954, + "p99_ms": 0.045809, + "peak_rss_kb": 5264, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.068231, + "name": "as_of", + "p50_ms": 0.021324000000000003, + "p99_ms": 0.051553, + "peak_rss_kb": 5216, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 8, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.042003, + "name": "point_entity", + "p50_ms": 0.017836, + "p99_ms": 0.035972000000000004, + "peak_rss_kb": 5264, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.030001, + "name": "point_entity", + "p50_ms": 0.018258999999999997, + "p99_ms": 0.025400000000000002, + "peak_rss_kb": 5252, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 8, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.058048999999999996, + "name": "attribute_value", + "p50_ms": 0.020515, + "p99_ms": 0.039245, + "peak_rss_kb": 5272, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.050225, + "name": "attribute_value", + "p50_ms": 0.019514, + "p99_ms": 0.038794999999999996, + "peak_rss_kb": 5240, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 8, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.044265, + "name": "as_of", + "p50_ms": 0.019516000000000002, + "p99_ms": 0.037771, + "peak_rss_kb": 5292, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.035407999999999995, + "name": "as_of", + "p50_ms": 0.019726999999999998, + "p99_ms": 0.029876999999999997, + "peak_rss_kb": 5204, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 9, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.054917, + "name": "point_entity", + "p50_ms": 0.017564, + "p99_ms": 0.037963000000000004, + "peak_rss_kb": 5280, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.044263, + "name": "point_entity", + "p50_ms": 0.018113999999999998, + "p99_ms": 0.037973, + "peak_rss_kb": 5288, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 9, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.02568, + "name": "attribute_value", + "p50_ms": 0.01797, + "p99_ms": 0.024273999999999997, + "peak_rss_kb": 5280, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.047108, + "name": "attribute_value", + "p50_ms": 0.01993, + "p99_ms": 0.040556999999999996, + "peak_rss_kb": 5252, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 9, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.044079, + "name": "as_of", + "p50_ms": 0.020648, + "p99_ms": 0.035923000000000004, + "peak_rss_kb": 5292, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.067292, + "name": "as_of", + "p50_ms": 0.020447, + "p99_ms": 0.056115, + "peak_rss_kb": 5256, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 10, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.048913, + "name": "point_entity", + "p50_ms": 0.017558, + "p99_ms": 0.042104, + "peak_rss_kb": 5252, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.046241, + "name": "point_entity", + "p50_ms": 0.018597000000000002, + "p99_ms": 0.040443, + "peak_rss_kb": 5208, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 10, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.051917, + "name": "attribute_value", + "p50_ms": 0.020424, + "p99_ms": 0.043369, + "peak_rss_kb": 5236, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.043407, + "name": "attribute_value", + "p50_ms": 0.018118, + "p99_ms": 0.027892999999999998, + "peak_rss_kb": 5200, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 10, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.057969, + "name": "as_of", + "p50_ms": 0.019176000000000002, + "p99_ms": 0.050498, + "peak_rss_kb": 5324, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.04904, + "name": "as_of", + "p50_ms": 0.019492, + "p99_ms": 0.041095, + "peak_rss_kb": 5300, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 11, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.041174, + "name": "point_entity", + "p50_ms": 0.017756, + "p99_ms": 0.039706000000000005, + "peak_rss_kb": 5236, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.052112, + "name": "point_entity", + "p50_ms": 0.018141, + "p99_ms": 0.047909, + "peak_rss_kb": 5288, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 11, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.053040000000000004, + "name": "attribute_value", + "p50_ms": 0.01755, + "p99_ms": 0.041017, + "peak_rss_kb": 5284, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.062887, + "name": "attribute_value", + "p50_ms": 0.017626, + "p99_ms": 0.049394999999999994, + "peak_rss_kb": 5248, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 11, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.050847, + "name": "as_of", + "p50_ms": 0.020534, + "p99_ms": 0.035809999999999995, + "peak_rss_kb": 5236, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.052227, + "name": "as_of", + "p50_ms": 0.021404, + "p99_ms": 0.042324, + "peak_rss_kb": 5264, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 12, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.048965, + "name": "point_entity", + "p50_ms": 0.017731999999999998, + "p99_ms": 0.036558, + "peak_rss_kb": 5288, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.045527, + "name": "point_entity", + "p50_ms": 0.021151, + "p99_ms": 0.035793, + "peak_rss_kb": 5280, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 12, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.038581000000000004, + "name": "attribute_value", + "p50_ms": 0.020142, + "p99_ms": 0.035875, + "peak_rss_kb": 5232, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.035543000000000005, + "name": "attribute_value", + "p50_ms": 0.020344, + "p99_ms": 0.031626, + "peak_rss_kb": 5200, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 12, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.045424, + "name": "as_of", + "p50_ms": 0.019015999999999998, + "p99_ms": 0.035536, + "peak_rss_kb": 5320, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.033561, + "name": "as_of", + "p50_ms": 0.021559000000000002, + "p99_ms": 0.032691000000000005, + "peak_rss_kb": 5260, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 13, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.035707, + "name": "point_entity", + "p50_ms": 0.019131, + "p99_ms": 0.032097, + "peak_rss_kb": 5244, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.050121, + "name": "point_entity", + "p50_ms": 0.018227, + "p99_ms": 0.048878000000000005, + "peak_rss_kb": 5300, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 13, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.037144, + "name": "attribute_value", + "p50_ms": 0.019216, + "p99_ms": 0.034159, + "peak_rss_kb": 5280, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.031549, + "name": "attribute_value", + "p50_ms": 0.020024, + "p99_ms": 0.030960999999999995, + "peak_rss_kb": 5300, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 13, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.044167, + "name": "as_of", + "p50_ms": 0.020297, + "p99_ms": 0.036266999999999994, + "peak_rss_kb": 5264, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.060474, + "name": "as_of", + "p50_ms": 0.02006, + "p99_ms": 0.038275, + "peak_rss_kb": 5252, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 14, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.053767999999999996, + "name": "point_entity", + "p50_ms": 0.017683, + "p99_ms": 0.049773, + "peak_rss_kb": 5280, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.050611, + "name": "point_entity", + "p50_ms": 0.018274000000000002, + "p99_ms": 0.045737, + "peak_rss_kb": 5256, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 14, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.048705000000000005, + "name": "attribute_value", + "p50_ms": 0.017805, + "p99_ms": 0.041322000000000005, + "peak_rss_kb": 5272, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.035892, + "name": "attribute_value", + "p50_ms": 0.018411, + "p99_ms": 0.027542, + "peak_rss_kb": 5196, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 14, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.034894, + "name": "as_of", + "p50_ms": 0.024902, + "p99_ms": 0.033191, + "peak_rss_kb": 5268, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.038445999999999994, + "name": "as_of", + "p50_ms": 0.020662999999999997, + "p99_ms": 0.033588, + "peak_rss_kb": 5212, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 15, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.038709, + "name": "point_entity", + "p50_ms": 0.019176000000000002, + "p99_ms": 0.03356, + "peak_rss_kb": 5296, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.061668999999999995, + "name": "point_entity", + "p50_ms": 0.020888, + "p99_ms": 0.036118000000000004, + "peak_rss_kb": 5292, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 15, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.043397, + "name": "attribute_value", + "p50_ms": 0.017668, + "p99_ms": 0.039168999999999995, + "peak_rss_kb": 5256, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.057162, + "name": "attribute_value", + "p50_ms": 0.018269, + "p99_ms": 0.035252, + "peak_rss_kb": 5208, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 15, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.033956, + "name": "as_of", + "p50_ms": 0.021022, + "p99_ms": 0.032833, + "peak_rss_kb": 5264, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.059937, + "name": "as_of", + "p50_ms": 0.019481, + "p99_ms": 0.04114, + "peak_rss_kb": 5196, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 16, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.044606, + "name": "point_entity", + "p50_ms": 0.019504, + "p99_ms": 0.037514, + "peak_rss_kb": 5248, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.034626, + "name": "point_entity", + "p50_ms": 0.020796, + "p99_ms": 0.034045, + "peak_rss_kb": 5216, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 16, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.043253, + "name": "attribute_value", + "p50_ms": 0.017759999999999998, + "p99_ms": 0.038671000000000004, + "peak_rss_kb": 5268, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.043006, + "name": "attribute_value", + "p50_ms": 0.017825, + "p99_ms": 0.033834, + "peak_rss_kb": 5212, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 16, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.050608, + "name": "as_of", + "p50_ms": 0.019255, + "p99_ms": 0.049696, + "peak_rss_kb": 5272, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.053167, + "name": "as_of", + "p50_ms": 0.019935, + "p99_ms": 0.042583, + "peak_rss_kb": 5208, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 17, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.055300999999999996, + "name": "point_entity", + "p50_ms": 0.017494, + "p99_ms": 0.045556, + "peak_rss_kb": 5288, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.054200000000000005, + "name": "point_entity", + "p50_ms": 0.018085, + "p99_ms": 0.040516, + "peak_rss_kb": 5296, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 17, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.06375700000000001, + "name": "attribute_value", + "p50_ms": 0.017601, + "p99_ms": 0.042394, + "peak_rss_kb": 5272, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.054571, + "name": "attribute_value", + "p50_ms": 0.020550000000000002, + "p99_ms": 0.043642, + "peak_rss_kb": 5196, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 17, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.052312000000000004, + "name": "as_of", + "p50_ms": 0.019296999999999998, + "p99_ms": 0.042338, + "peak_rss_kb": 5284, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.066183, + "name": "as_of", + "p50_ms": 0.019728000000000002, + "p99_ms": 0.052737, + "peak_rss_kb": 5256, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 18, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.041569, + "name": "point_entity", + "p50_ms": 0.020488000000000003, + "p99_ms": 0.037011999999999996, + "peak_rss_kb": 5284, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.050004, + "name": "point_entity", + "p50_ms": 0.01804, + "p99_ms": 0.040163000000000004, + "peak_rss_kb": 5296, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 18, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.057017, + "name": "attribute_value", + "p50_ms": 0.017897000000000003, + "p99_ms": 0.048826, + "peak_rss_kb": 5240, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.052500000000000005, + "name": "attribute_value", + "p50_ms": 0.0178, + "p99_ms": 0.049082, + "peak_rss_kb": 5296, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 18, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.084412, + "name": "as_of", + "p50_ms": 0.019405000000000002, + "p99_ms": 0.067044, + "peak_rss_kb": 5248, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.061915000000000005, + "name": "as_of", + "p50_ms": 0.02224, + "p99_ms": 0.037477, + "peak_rss_kb": 5256, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 19, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.047441000000000004, + "name": "point_entity", + "p50_ms": 0.017315, + "p99_ms": 0.039871, + "peak_rss_kb": 5328, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.042166, + "name": "point_entity", + "p50_ms": 0.018427000000000002, + "p99_ms": 0.036600999999999995, + "peak_rss_kb": 5260, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 19, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.037665, + "name": "attribute_value", + "p50_ms": 0.017602, + "p99_ms": 0.026177, + "peak_rss_kb": 5276, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.055730999999999996, + "name": "attribute_value", + "p50_ms": 0.017883000000000003, + "p99_ms": 0.049840999999999996, + "peak_rss_kb": 5284, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 19, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.055751, + "name": "as_of", + "p50_ms": 0.018943, + "p99_ms": 0.043804, + "peak_rss_kb": 5252, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.065638, + "name": "as_of", + "p50_ms": 0.019848, + "p99_ms": 0.054694, + "peak_rss_kb": 5208, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 20, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.056135, + "name": "point_entity", + "p50_ms": 0.019375, + "p99_ms": 0.034761999999999994, + "peak_rss_kb": 5252, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.042941, + "name": "point_entity", + "p50_ms": 0.017918, + "p99_ms": 0.040836, + "peak_rss_kb": 5248, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 20, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.069574, + "name": "attribute_value", + "p50_ms": 0.018827, + "p99_ms": 0.053845, + "peak_rss_kb": 5236, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.024102000000000002, + "name": "attribute_value", + "p50_ms": 0.017932999999999998, + "p99_ms": 0.022166, + "peak_rss_kb": 5244, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 20, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.075182, + "name": "as_of", + "p50_ms": 0.019683000000000003, + "p99_ms": 0.036461999999999994, + "peak_rss_kb": 5288, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.033613, + "name": "as_of", + "p50_ms": 0.020262, + "p99_ms": 0.031464, + "peak_rss_kb": 5260, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 21, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.049704, + "name": "point_entity", + "p50_ms": 0.019315, + "p99_ms": 0.035217, + "peak_rss_kb": 5284, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.0391, + "name": "point_entity", + "p50_ms": 0.018632, + "p99_ms": 0.034746, + "peak_rss_kb": 5284, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 21, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.045978, + "name": "attribute_value", + "p50_ms": 0.018193, + "p99_ms": 0.02579, + "peak_rss_kb": 5288, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.06583, + "name": "attribute_value", + "p50_ms": 0.018630999999999998, + "p99_ms": 0.041804, + "peak_rss_kb": 5276, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 21, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.050086, + "name": "as_of", + "p50_ms": 0.018967, + "p99_ms": 0.043322000000000006, + "peak_rss_kb": 5288, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.052445, + "name": "as_of", + "p50_ms": 0.01991, + "p99_ms": 0.050908, + "peak_rss_kb": 5200, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 22, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.806803, + "name": "point_entity", + "p50_ms": 0.019249000000000002, + "p99_ms": 0.705291, + "peak_rss_kb": 5328, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.809736, + "name": "point_entity", + "p50_ms": 0.020137000000000002, + "p99_ms": 0.71271, + "peak_rss_kb": 5212, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 22, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.044806, + "name": "attribute_value", + "p50_ms": 0.017844000000000002, + "p99_ms": 0.035074, + "peak_rss_kb": 5236, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.043513, + "name": "attribute_value", + "p50_ms": 0.017966, + "p99_ms": 0.039546, + "peak_rss_kb": 5204, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 22, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.060682, + "name": "as_of", + "p50_ms": 0.019147, + "p99_ms": 0.042573, + "peak_rss_kb": 5240, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.036045, + "name": "as_of", + "p50_ms": 0.021772, + "p99_ms": 0.035305, + "peak_rss_kb": 5220, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 23, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.051805000000000004, + "name": "point_entity", + "p50_ms": 0.017795000000000002, + "p99_ms": 0.040545, + "peak_rss_kb": 5320, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.069967, + "name": "point_entity", + "p50_ms": 0.018025, + "p99_ms": 0.050213, + "peak_rss_kb": 5252, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 23, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.06437599999999999, + "name": "attribute_value", + "p50_ms": 0.017657, + "p99_ms": 0.037475, + "peak_rss_kb": 5236, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.055815000000000003, + "name": "attribute_value", + "p50_ms": 0.019004, + "p99_ms": 0.040896, + "peak_rss_kb": 5280, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 23, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.046795, + "name": "as_of", + "p50_ms": 0.020274, + "p99_ms": 0.044917, + "peak_rss_kb": 5236, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.056464, + "name": "as_of", + "p50_ms": 0.022514000000000003, + "p99_ms": 0.046949, + "peak_rss_kb": 5200, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 24, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.042373999999999995, + "name": "point_entity", + "p50_ms": 0.019767, + "p99_ms": 0.034671, + "peak_rss_kb": 5236, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.050267, + "name": "point_entity", + "p50_ms": 0.019767, + "p99_ms": 0.035206999999999995, + "peak_rss_kb": 5304, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 24, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.042568999999999996, + "name": "attribute_value", + "p50_ms": 0.017592, + "p99_ms": 0.035743, + "peak_rss_kb": 5264, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.025301, + "name": "attribute_value", + "p50_ms": 0.017679, + "p99_ms": 0.023031, + "peak_rss_kb": 5236, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 24, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.048109000000000006, + "name": "as_of", + "p50_ms": 0.01907, + "p99_ms": 0.044862, + "peak_rss_kb": 5256, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.048965999999999996, + "name": "as_of", + "p50_ms": 0.019284, + "p99_ms": 0.041766, + "peak_rss_kb": 5260, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 25, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.031792, + "name": "point_entity", + "p50_ms": 0.018689, + "p99_ms": 0.030698000000000003, + "peak_rss_kb": 5280, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.065057, + "name": "point_entity", + "p50_ms": 0.018527000000000002, + "p99_ms": 0.05047, + "peak_rss_kb": 5224, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 25, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.03812, + "name": "attribute_value", + "p50_ms": 0.020061, + "p99_ms": 0.034468000000000006, + "peak_rss_kb": 5256, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.055907, + "name": "attribute_value", + "p50_ms": 0.019961, + "p99_ms": 0.049032, + "peak_rss_kb": 5244, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 25, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.042668, + "name": "as_of", + "p50_ms": 0.020687999999999998, + "p99_ms": 0.032754, + "peak_rss_kb": 5292, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.043781, + "name": "as_of", + "p50_ms": 0.019261, + "p99_ms": 0.040564, + "peak_rss_kb": 5216, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 26, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.052591, + "name": "point_entity", + "p50_ms": 0.017495, + "p99_ms": 0.049742, + "peak_rss_kb": 5324, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.035436999999999996, + "name": "point_entity", + "p50_ms": 0.02046, + "p99_ms": 0.035135, + "peak_rss_kb": 5204, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 26, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.058634, + "name": "attribute_value", + "p50_ms": 0.017694, + "p99_ms": 0.056302, + "peak_rss_kb": 5264, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.031923, + "name": "attribute_value", + "p50_ms": 0.017638, + "p99_ms": 0.023490999999999998, + "peak_rss_kb": 5300, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 26, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.060711, + "name": "as_of", + "p50_ms": 0.019564, + "p99_ms": 0.04748, + "peak_rss_kb": 5272, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.054988999999999996, + "name": "as_of", + "p50_ms": 0.021438, + "p99_ms": 0.04046, + "peak_rss_kb": 5260, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 27, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.033306, + "name": "point_entity", + "p50_ms": 0.017185, + "p99_ms": 0.021651999999999998, + "peak_rss_kb": 5272, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.059595, + "name": "point_entity", + "p50_ms": 0.018324, + "p99_ms": 0.048133, + "peak_rss_kb": 5220, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 27, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.052237, + "name": "attribute_value", + "p50_ms": 0.01764, + "p99_ms": 0.037695, + "peak_rss_kb": 5240, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.050407, + "name": "attribute_value", + "p50_ms": 0.018189, + "p99_ms": 0.045086, + "peak_rss_kb": 5280, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 27, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.040442, + "name": "as_of", + "p50_ms": 0.01901, + "p99_ms": 0.03646, + "peak_rss_kb": 5248, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.062414000000000004, + "name": "as_of", + "p50_ms": 0.019628, + "p99_ms": 0.043768, + "peak_rss_kb": 5284, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 28, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.05701, + "name": "point_entity", + "p50_ms": 0.020381, + "p99_ms": 0.052383000000000006, + "peak_rss_kb": 5292, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.040377, + "name": "point_entity", + "p50_ms": 0.020129, + "p99_ms": 0.035515, + "peak_rss_kb": 5288, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 28, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.049870000000000005, + "name": "attribute_value", + "p50_ms": 0.018615, + "p99_ms": 0.038214, + "peak_rss_kb": 5292, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.055151, + "name": "attribute_value", + "p50_ms": 0.019613, + "p99_ms": 0.035618, + "peak_rss_kb": 5196, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 28, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.052631, + "name": "as_of", + "p50_ms": 0.021922, + "p99_ms": 0.051483999999999995, + "peak_rss_kb": 5252, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.044454, + "name": "as_of", + "p50_ms": 0.02152, + "p99_ms": 0.038213000000000004, + "peak_rss_kb": 5196, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 29, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.051179, + "name": "point_entity", + "p50_ms": 0.017374999999999998, + "p99_ms": 0.040859000000000006, + "peak_rss_kb": 5276, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.057746, + "name": "point_entity", + "p50_ms": 0.018148, + "p99_ms": 0.050682, + "peak_rss_kb": 5200, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 29, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.051253, + "name": "attribute_value", + "p50_ms": 0.018841, + "p99_ms": 0.046176, + "peak_rss_kb": 5232, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.070476, + "name": "attribute_value", + "p50_ms": 0.018036, + "p99_ms": 0.050383000000000004, + "peak_rss_kb": 5192, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 29, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.04218, + "name": "as_of", + "p50_ms": 0.020887, + "p99_ms": 0.035296999999999995, + "peak_rss_kb": 5296, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.052697, + "name": "as_of", + "p50_ms": 0.01989, + "p99_ms": 0.042175000000000004, + "peak_rss_kb": 5308, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 30, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.072256, + "name": "point_entity", + "p50_ms": 0.019690999999999997, + "p99_ms": 0.049786000000000004, + "peak_rss_kb": 5236, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.045169, + "name": "point_entity", + "p50_ms": 0.020593, + "p99_ms": 0.036207, + "peak_rss_kb": 5220, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 30, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.043564, + "name": "attribute_value", + "p50_ms": 0.018127, + "p99_ms": 0.041285, + "peak_rss_kb": 5236, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.041507, + "name": "attribute_value", + "p50_ms": 0.019157999999999998, + "p99_ms": 0.032521999999999995, + "peak_rss_kb": 5280, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 30, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.06117499999999999, + "name": "as_of", + "p50_ms": 0.021307, + "p99_ms": 0.043798000000000004, + "peak_rss_kb": 5284, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.041623, + "name": "as_of", + "p50_ms": 0.021228, + "p99_ms": 0.034247, + "peak_rss_kb": 5204, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 31, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.042317, + "name": "point_entity", + "p50_ms": 0.017578, + "p99_ms": 0.03701, + "peak_rss_kb": 5272, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.05466, + "name": "point_entity", + "p50_ms": 0.017720999999999997, + "p99_ms": 0.048924, + "peak_rss_kb": 5208, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 31, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.048461000000000004, + "name": "attribute_value", + "p50_ms": 0.018009999999999998, + "p99_ms": 0.038749, + "peak_rss_kb": 5224, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.058211, + "name": "attribute_value", + "p50_ms": 0.017478, + "p99_ms": 0.050323, + "peak_rss_kb": 5280, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 31, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.030695999999999998, + "name": "as_of", + "p50_ms": 0.019147, + "p99_ms": 0.024873, + "peak_rss_kb": 5296, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.066592, + "name": "as_of", + "p50_ms": 0.019494, + "p99_ms": 0.052464, + "peak_rss_kb": 5196, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + } +] diff --git a/docs/audits/772/evidence/reader-runtime.json b/docs/audits/772/evidence/reader-runtime.json new file mode 100644 index 000000000..8dd0fb792 --- /dev/null +++ b/docs/audits/772/evidence/reader-runtime.json @@ -0,0 +1,1702 @@ +[ + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.071701, + "name": "point_entity", + "p50_ms": 0.018600000000000002, + "p99_ms": 0.053788, + "peak_rss_kb": 5256, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.027473, + "name": "point_entity", + "p50_ms": 0.018237, + "p99_ms": 0.025604000000000002, + "peak_rss_kb": 5196, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.04324, + "name": "attribute_value", + "p50_ms": 0.018026999999999998, + "p99_ms": 0.037938, + "peak_rss_kb": 5244, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.053658, + "name": "attribute_value", + "p50_ms": 0.017776999999999998, + "p99_ms": 0.039875, + "peak_rss_kb": 5280, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 18.268652, + "name": "attribute_scan", + "p50_ms": 11.091804, + "p99_ms": 12.67076, + "peak_rss_kb": 6628, + "query": "[:find ?e ?a :where [?e :age ?a]]", + "rows": 16666, + "runs": 179 + }, + "candidate": { + "max_ms": 18.402236, + "name": "attribute_scan", + "p50_ms": 11.028915999999999, + "p99_ms": 12.422481000000001, + "peak_rss_kb": 6600, + "query": "[:find ?e ?a :where [?e :age ?a]]", + "rows": 16666, + "runs": 181 + } + }, + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.084872, + "name": "join_2", + "p50_ms": 0.041158999999999994, + "p99_ms": 0.076095, + "peak_rss_kb": 5308, + "query": "[:find ?n :where [:p8333 :follows ?f] [?f :name ?n]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.064157, + "name": "join_2", + "p50_ms": 0.041564, + "p99_ms": 0.057689000000000004, + "peak_rss_kb": 5304, + "query": "[:find ?n :where [:p8333 :follows ?f] [?f :name ?n]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 42.868905999999996, + "name": "join_3_scan", + "p50_ms": 41.218691, + "p99_ms": 42.868905999999996, + "peak_rss_kb": 14636, + "query": "[:find ?e ?n :where [?e :follows ?f] [?f :group 7] [?f :name ?n]]", + "rows": 167, + "runs": 49 + }, + "candidate": { + "max_ms": 42.168762, + "name": "join_3_scan", + "p50_ms": 40.764485, + "p99_ms": 42.168762, + "peak_rss_kb": 14456, + "query": "[:find ?e ?n :where [?e :follows ?f] [?f :group 7] [?f :name ?n]]", + "rows": 167, + "runs": 50 + } + }, + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 3.24956, + "name": "not_probe", + "p50_ms": 2.891074, + "p99_ms": 3.1347929999999997, + "peak_rss_kb": 6328, + "query": "[:find ?e :where [?e :group 7] (not [?e :age 7])]", + "rows": 148, + "runs": 200 + }, + "candidate": { + "max_ms": 3.041267, + "name": "not_probe", + "p50_ms": 2.898525, + "p99_ms": 3.029747, + "peak_rss_kb": 6340, + "query": "[:find ?e :where [?e :group 7] (not [?e :age 7])]", + "rows": 148, + "runs": 200 + } + }, + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 7.8894269999999995, + "name": "not_join_hash", + "p50_ms": 5.876951, + "p99_ms": 6.214638, + "peak_rss_kb": 6536, + "query": "[:find ?e :where [?e :group 7] [?e :age ?a] (not-join [?a] [?f :group 17] [?f :age ?a] [(< ?a 50)])]", + "rows": 72, + "runs": 200 + }, + "candidate": { + "max_ms": 6.874266, + "name": "not_join_hash", + "p50_ms": 5.720798, + "p99_ms": 6.195248, + "peak_rss_kb": 6528, + "query": "[:find ?e :where [?e :group 7] [?e :age ?a] (not-join [?a] [?f :group 17] [?f :age ?a] [(< ?a 50)])]", + "rows": 72, + "runs": 200 + } + }, + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 9.628675, + "name": "or_2", + "p50_ms": 8.485460999999999, + "p99_ms": 9.259275, + "peak_rss_kb": 6652, + "query": "[:find ?e :where [?e :group 7] [?e :age ?a] (or-join [?a] (and [?f :group 17] [?f :age ?a] [(< ?a 30)]) (and [?g :group 27] [?g :age ?a] [(> ?a 60)]))]", + "rows": 111, + "runs": 200 + }, + "candidate": { + "max_ms": 9.747624, + "name": "or_2", + "p50_ms": 8.482564, + "p99_ms": 9.10708, + "peak_rss_kb": 6608, + "query": "[:find ?e :where [?e :group 7] [?e :age ?a] (or-join [?a] (and [?f :group 17] [?f :age ?a] [(< ?a 30)]) (and [?g :group 27] [?g :age ?a] [(> ?a 60)]))]", + "rows": 111, + "runs": 200 + } + }, + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 1.369972, + "name": "recursive_ancestors", + "p50_ms": 1.16123, + "p99_ms": 1.302351, + "peak_rss_kb": 5492, + "query": "[:find ?b :where (boss :p16665 ?b)]", + "rows": 5, + "runs": 200 + }, + "candidate": { + "max_ms": 1.252603, + "name": "recursive_ancestors", + "p50_ms": 1.169238, + "p99_ms": 1.242397, + "peak_rss_kb": 5440, + "query": "[:find ?b :where (boss :p16665 ?b)]", + "rows": 5, + "runs": 200 + } + }, + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.044879, + "name": "as_of", + "p50_ms": 0.020222, + "p99_ms": 0.038581000000000004, + "peak_rss_kb": 5324, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.047936000000000006, + "name": "as_of", + "p50_ms": 0.021016999999999997, + "p99_ms": 0.036371999999999995, + "peak_rss_kb": 5300, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.924772, + "name": "as_of_ts", + "p50_ms": 0.701693, + "p99_ms": 0.897089, + "peak_rss_kb": 5356, + "query": "[:find ?a :as-of \"2026-10-29T12:37:28.213Z\" :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.7620870000000001, + "name": "as_of_ts", + "p50_ms": 0.690071, + "p99_ms": 0.7439560000000001, + "peak_rss_kb": 5364, + "query": "[:find ?a :as-of \"2026-10-29T12:37:28.213Z\" :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 8.576234, + "name": "as_of_ts_scan", + "p50_ms": 7.071273000000001, + "p99_ms": 7.9207600000000005, + "peak_rss_kb": 6272, + "query": "[:find ?e ?a :as-of \"2026-10-29T12:37:28.213Z\" :where [?e :age ?a]]", + "rows": 8400, + "runs": 200 + }, + "candidate": { + "max_ms": 7.776657999999999, + "name": "as_of_ts_scan", + "p50_ms": 6.954146, + "p99_ms": 7.430777, + "peak_rss_kb": 6212, + "query": "[:find ?e ?a :as-of \"2026-10-29T12:37:28.213Z\" :where [?e :age ?a]]", + "rows": 8400, + "runs": 200 + } + }, + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 42.489095999999996, + "name": "count", + "p50_ms": 40.31688, + "p99_ms": 42.489095999999996, + "peak_rss_kb": 6816, + "query": "[:find (count ?v) :where [?e ?a ?v]]", + "rows": 1, + "runs": 50 + }, + "candidate": { + "max_ms": 40.791911, + "name": "count", + "p50_ms": 39.466235000000005, + "p99_ms": 40.791911, + "peak_rss_kb": 6808, + "query": "[:find (count ?v) :where [?e ?a ?v]]", + "rows": 1, + "runs": 51 + } + }, + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 12.893454, + "name": "count_grouped", + "p50_ms": 5.570624, + "p99_ms": 6.289888, + "peak_rss_kb": 5880, + "query": "[:find ?g (count ?e) :where [?e :group ?g]]", + "rows": 100, + "runs": 200 + }, + "candidate": { + "max_ms": 12.923874999999999, + "name": "count_grouped", + "p50_ms": 5.608779999999999, + "p99_ms": 6.3431310000000005, + "peak_rss_kb": 5860, + "query": "[:find ?g (count ?e) :where [?e :group ?g]]", + "rows": 100, + "runs": 200 + } + }, + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 43.516376, + "name": "window", + "p50_ms": 35.619826, + "p99_ms": 43.516376, + "peak_rss_kb": 15584, + "query": "[:find ?e (rank :over (:order-by ?a)) :where [?e :age ?a]]", + "rows": 16666, + "runs": 56 + }, + "candidate": { + "max_ms": 44.104848000000004, + "name": "window", + "p50_ms": 35.132182, + "p99_ms": 44.104848000000004, + "peak_rss_kb": 15648, + "query": "[:find ?e (rank :over (:order-by ?a)) :where [?e :age ?a]]", + "rows": 16666, + "runs": 57 + } + }, + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.3201, + "name": "hot_current", + "p50_ms": 0.23469800000000002, + "p99_ms": 0.298063, + "peak_rss_kb": 5324, + "query": "[:find ?v :where [:hot :counter ?v]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.283132, + "name": "hot_current", + "p50_ms": 0.235263, + "p99_ms": 0.258417, + "peak_rss_kb": 5320, + "query": "[:find ?v :where [:hot :counter ?v]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 0, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.304104, + "name": "hot_as_of", + "p50_ms": 0.22525299999999998, + "p99_ms": 0.278401, + "peak_rss_kb": 5332, + "query": "[:find ?v :as-of 1253 :valid-at :any-valid-time :where [:hot :counter ?v]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.281557, + "name": "hot_as_of", + "p50_ms": 0.225917, + "p99_ms": 0.269029, + "peak_rss_kb": 5352, + "query": "[:find ?v :as-of 1253 :valid-at :any-valid-time :where [:hot :counter ?v]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.030895000000000002, + "name": "point_entity", + "p50_ms": 0.018327, + "p99_ms": 0.02843, + "peak_rss_kb": 5276, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.0626, + "name": "point_entity", + "p50_ms": 0.020033, + "p99_ms": 0.051709000000000005, + "peak_rss_kb": 5300, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.042960000000000005, + "name": "attribute_value", + "p50_ms": 0.020210000000000002, + "p99_ms": 0.033137, + "peak_rss_kb": 5280, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.056660999999999996, + "name": "attribute_value", + "p50_ms": 0.019322, + "p99_ms": 0.039002999999999996, + "peak_rss_kb": 5284, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 18.794292000000002, + "name": "attribute_scan", + "p50_ms": 11.000375, + "p99_ms": 12.475612, + "peak_rss_kb": 6652, + "query": "[:find ?e ?a :where [?e :age ?a]]", + "rows": 16666, + "runs": 181 + }, + "candidate": { + "max_ms": 18.198333, + "name": "attribute_scan", + "p50_ms": 10.904449, + "p99_ms": 12.445248000000001, + "peak_rss_kb": 6600, + "query": "[:find ?e ?a :where [?e :age ?a]]", + "rows": 16666, + "runs": 183 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.058599, + "name": "join_2", + "p50_ms": 0.041392, + "p99_ms": 0.055568, + "peak_rss_kb": 5252, + "query": "[:find ?n :where [:p8333 :follows ?f] [?f :name ?n]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.083874, + "name": "join_2", + "p50_ms": 0.042127, + "p99_ms": 0.07531, + "peak_rss_kb": 5324, + "query": "[:find ?n :where [:p8333 :follows ?f] [?f :name ?n]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 50.602405000000005, + "name": "join_3_scan", + "p50_ms": 40.761238999999996, + "p99_ms": 50.602405000000005, + "peak_rss_kb": 14496, + "query": "[:find ?e ?n :where [?e :follows ?f] [?f :group 7] [?f :name ?n]]", + "rows": 167, + "runs": 49 + }, + "candidate": { + "max_ms": 48.612929, + "name": "join_3_scan", + "p50_ms": 41.007745, + "p99_ms": 48.612929, + "peak_rss_kb": 14632, + "query": "[:find ?e ?n :where [?e :follows ?f] [?f :group 7] [?f :name ?n]]", + "rows": 167, + "runs": 49 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 3.710035, + "name": "not_probe", + "p50_ms": 2.845012, + "p99_ms": 3.562398, + "peak_rss_kb": 6320, + "query": "[:find ?e :where [?e :group 7] (not [?e :age 7])]", + "rows": 148, + "runs": 200 + }, + "candidate": { + "max_ms": 3.776319, + "name": "not_probe", + "p50_ms": 2.867109, + "p99_ms": 3.4205989999999997, + "peak_rss_kb": 6368, + "query": "[:find ?e :where [?e :group 7] (not [?e :age 7])]", + "rows": 148, + "runs": 200 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 13.531626999999999, + "name": "not_join_hash", + "p50_ms": 5.799231, + "p99_ms": 6.6494420000000005, + "peak_rss_kb": 6580, + "query": "[:find ?e :where [?e :group 7] [?e :age ?a] (not-join [?a] [?f :group 17] [?f :age ?a] [(< ?a 50)])]", + "rows": 72, + "runs": 200 + }, + "candidate": { + "max_ms": 13.159405000000001, + "name": "not_join_hash", + "p50_ms": 5.862429, + "p99_ms": 6.254755, + "peak_rss_kb": 6504, + "query": "[:find ?e :where [?e :group 7] [?e :age ?a] (not-join [?a] [?f :group 17] [?f :age ?a] [(< ?a 50)])]", + "rows": 72, + "runs": 200 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 10.367866, + "name": "or_2", + "p50_ms": 8.505614999999999, + "p99_ms": 9.235469, + "peak_rss_kb": 6612, + "query": "[:find ?e :where [?e :group 7] [?e :age ?a] (or-join [?a] (and [?f :group 17] [?f :age ?a] [(< ?a 30)]) (and [?g :group 27] [?g :age ?a] [(> ?a 60)]))]", + "rows": 111, + "runs": 200 + }, + "candidate": { + "max_ms": 10.575227, + "name": "or_2", + "p50_ms": 8.610933, + "p99_ms": 9.727187, + "peak_rss_kb": 6544, + "query": "[:find ?e :where [?e :group 7] [?e :age ?a] (or-join [?a] (and [?f :group 17] [?f :age ?a] [(< ?a 30)]) (and [?g :group 27] [?g :age ?a] [(> ?a 60)]))]", + "rows": 111, + "runs": 200 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 1.221174, + "name": "recursive_ancestors", + "p50_ms": 1.163245, + "p99_ms": 1.218796, + "peak_rss_kb": 5508, + "query": "[:find ?b :where (boss :p16665 ?b)]", + "rows": 5, + "runs": 200 + }, + "candidate": { + "max_ms": 1.348856, + "name": "recursive_ancestors", + "p50_ms": 1.1756419999999999, + "p99_ms": 1.336638, + "peak_rss_kb": 5484, + "query": "[:find ?b :where (boss :p16665 ?b)]", + "rows": 5, + "runs": 200 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.038208, + "name": "as_of", + "p50_ms": 0.020013, + "p99_ms": 0.028508, + "peak_rss_kb": 5240, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.057597999999999996, + "name": "as_of", + "p50_ms": 0.020566, + "p99_ms": 0.036639, + "peak_rss_kb": 5304, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.8919509999999999, + "name": "as_of_ts", + "p50_ms": 0.662487, + "p99_ms": 0.76406, + "peak_rss_kb": 5388, + "query": "[:find ?a :as-of \"2026-10-29T12:37:28.213Z\" :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 1.034524, + "name": "as_of_ts", + "p50_ms": 0.6986950000000001, + "p99_ms": 0.993549, + "peak_rss_kb": 5260, + "query": "[:find ?a :as-of \"2026-10-29T12:37:28.213Z\" :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 14.287125, + "name": "as_of_ts_scan", + "p50_ms": 7.017155, + "p99_ms": 7.760115, + "peak_rss_kb": 6252, + "query": "[:find ?e ?a :as-of \"2026-10-29T12:37:28.213Z\" :where [?e :age ?a]]", + "rows": 8400, + "runs": 200 + }, + "candidate": { + "max_ms": 13.959802, + "name": "as_of_ts_scan", + "p50_ms": 6.978179, + "p99_ms": 7.367126, + "peak_rss_kb": 6288, + "query": "[:find ?e ?a :as-of \"2026-10-29T12:37:28.213Z\" :where [?e :age ?a]]", + "rows": 8400, + "runs": 200 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 49.461755000000004, + "name": "count", + "p50_ms": 40.853365000000004, + "p99_ms": 49.461755000000004, + "peak_rss_kb": 6788, + "query": "[:find (count ?v) :where [?e ?a ?v]]", + "rows": 1, + "runs": 49 + }, + "candidate": { + "max_ms": 46.631401000000004, + "name": "count", + "p50_ms": 39.416173, + "p99_ms": 46.631401000000004, + "peak_rss_kb": 6768, + "query": "[:find (count ?v) :where [?e ?a ?v]]", + "rows": 1, + "runs": 51 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 6.624513, + "name": "count_grouped", + "p50_ms": 5.587349000000001, + "p99_ms": 5.711392, + "peak_rss_kb": 5880, + "query": "[:find ?g (count ?e) :where [?e :group ?g]]", + "rows": 100, + "runs": 200 + }, + "candidate": { + "max_ms": 6.865729, + "name": "count_grouped", + "p50_ms": 5.653452, + "p99_ms": 6.2643830000000005, + "peak_rss_kb": 5872, + "query": "[:find ?g (count ?e) :where [?e :group ?g]]", + "rows": 100, + "runs": 200 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 76.571826, + "name": "window", + "p50_ms": 35.444314999999996, + "p99_ms": 76.571826, + "peak_rss_kb": 15444, + "query": "[:find ?e (rank :over (:order-by ?a)) :where [?e :age ?a]]", + "rows": 16666, + "runs": 56 + }, + "candidate": { + "max_ms": 75.06993000000001, + "name": "window", + "p50_ms": 35.117984, + "p99_ms": 75.06993000000001, + "peak_rss_kb": 15016, + "query": "[:find ?e (rank :over (:order-by ?a)) :where [?e :age ?a]]", + "rows": 16666, + "runs": 56 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.255669, + "name": "hot_current", + "p50_ms": 0.23297800000000002, + "p99_ms": 0.255146, + "peak_rss_kb": 5332, + "query": "[:find ?v :where [:hot :counter ?v]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.304085, + "name": "hot_current", + "p50_ms": 0.23338, + "p99_ms": 0.29713199999999995, + "peak_rss_kb": 5356, + "query": "[:find ?v :where [:hot :counter ?v]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 1, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.24608600000000003, + "name": "hot_as_of", + "p50_ms": 0.22537800000000002, + "p99_ms": 0.243064, + "peak_rss_kb": 5356, + "query": "[:find ?v :as-of 1253 :valid-at :any-valid-time :where [:hot :counter ?v]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.28326399999999996, + "name": "hot_as_of", + "p50_ms": 0.229827, + "p99_ms": 0.27254599999999995, + "peak_rss_kb": 5352, + "query": "[:find ?v :as-of 1253 :valid-at :any-valid-time :where [:hot :counter ?v]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.050158, + "name": "point_entity", + "p50_ms": 0.018453, + "p99_ms": 0.044615, + "peak_rss_kb": 5268, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.06648299999999999, + "name": "point_entity", + "p50_ms": 0.021715, + "p99_ms": 0.052632, + "peak_rss_kb": 5204, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.062758, + "name": "attribute_value", + "p50_ms": 0.018567999999999998, + "p99_ms": 0.05207, + "peak_rss_kb": 5284, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.055401, + "name": "attribute_value", + "p50_ms": 0.019926, + "p99_ms": 0.052636, + "peak_rss_kb": 5212, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 13.269552000000001, + "name": "attribute_scan", + "p50_ms": 11.047321, + "p99_ms": 11.542052, + "peak_rss_kb": 6624, + "query": "[:find ?e ?a :where [?e :age ?a]]", + "rows": 16666, + "runs": 181 + }, + "candidate": { + "max_ms": 12.645662, + "name": "attribute_scan", + "p50_ms": 10.929738, + "p99_ms": 11.464307, + "peak_rss_kb": 6644, + "query": "[:find ?e ?a :where [?e :age ?a]]", + "rows": 16666, + "runs": 183 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.088398, + "name": "join_2", + "p50_ms": 0.040411, + "p99_ms": 0.087132, + "peak_rss_kb": 5308, + "query": "[:find ?n :where [:p8333 :follows ?f] [?f :name ?n]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.058383, + "name": "join_2", + "p50_ms": 0.041628000000000005, + "p99_ms": 0.053897, + "peak_rss_kb": 5272, + "query": "[:find ?n :where [:p8333 :follows ?f] [?f :name ?n]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 48.255925, + "name": "join_3_scan", + "p50_ms": 41.313832000000005, + "p99_ms": 48.255925, + "peak_rss_kb": 14612, + "query": "[:find ?e ?n :where [?e :follows ?f] [?f :group 7] [?f :name ?n]]", + "rows": 167, + "runs": 49 + }, + "candidate": { + "max_ms": 49.954418000000004, + "name": "join_3_scan", + "p50_ms": 40.53212, + "p99_ms": 49.954418000000004, + "peak_rss_kb": 15164, + "query": "[:find ?e ?n :where [?e :follows ?f] [?f :group 7] [?f :name ?n]]", + "rows": 167, + "runs": 49 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 3.517022, + "name": "not_probe", + "p50_ms": 2.9823139999999997, + "p99_ms": 3.4669420000000004, + "peak_rss_kb": 6364, + "query": "[:find ?e :where [?e :group 7] (not [?e :age 7])]", + "rows": 148, + "runs": 200 + }, + "candidate": { + "max_ms": 3.0993850000000003, + "name": "not_probe", + "p50_ms": 2.8784180000000004, + "p99_ms": 3.06238, + "peak_rss_kb": 6356, + "query": "[:find ?e :where [?e :group 7] (not [?e :age 7])]", + "rows": 148, + "runs": 200 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 6.876822000000001, + "name": "not_join_hash", + "p50_ms": 5.879256, + "p99_ms": 6.716883, + "peak_rss_kb": 6516, + "query": "[:find ?e :where [?e :group 7] [?e :age ?a] (not-join [?a] [?f :group 17] [?f :age ?a] [(< ?a 50)])]", + "rows": 72, + "runs": 200 + }, + "candidate": { + "max_ms": 6.25653, + "name": "not_join_hash", + "p50_ms": 5.817247, + "p99_ms": 6.206686, + "peak_rss_kb": 6500, + "query": "[:find ?e :where [?e :group 7] [?e :age ?a] (not-join [?a] [?f :group 17] [?f :age ?a] [(< ?a 50)])]", + "rows": 72, + "runs": 200 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 9.448499, + "name": "or_2", + "p50_ms": 8.611866, + "p99_ms": 9.288912999999999, + "peak_rss_kb": 6604, + "query": "[:find ?e :where [?e :group 7] [?e :age ?a] (or-join [?a] (and [?f :group 17] [?f :age ?a] [(< ?a 30)]) (and [?g :group 27] [?g :age ?a] [(> ?a 60)]))]", + "rows": 111, + "runs": 200 + }, + "candidate": { + "max_ms": 9.381883, + "name": "or_2", + "p50_ms": 8.514282, + "p99_ms": 9.360762, + "peak_rss_kb": 6644, + "query": "[:find ?e :where [?e :group 7] [?e :age ?a] (or-join [?a] (and [?f :group 17] [?f :age ?a] [(< ?a 30)]) (and [?g :group 27] [?g :age ?a] [(> ?a 60)]))]", + "rows": 111, + "runs": 200 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 8.34585, + "name": "recursive_ancestors", + "p50_ms": 1.1776630000000001, + "p99_ms": 1.6112769999999998, + "peak_rss_kb": 5496, + "query": "[:find ?b :where (boss :p16665 ?b)]", + "rows": 5, + "runs": 200 + }, + "candidate": { + "max_ms": 8.265476000000001, + "name": "recursive_ancestors", + "p50_ms": 1.170627, + "p99_ms": 1.5190139999999999, + "peak_rss_kb": 5476, + "query": "[:find ?b :where (boss :p16665 ?b)]", + "rows": 5, + "runs": 200 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.059061999999999996, + "name": "as_of", + "p50_ms": 0.019947, + "p99_ms": 0.035846, + "peak_rss_kb": 5276, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.032944999999999995, + "name": "as_of", + "p50_ms": 0.020314, + "p99_ms": 0.030321999999999998, + "peak_rss_kb": 5288, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.8300080000000001, + "name": "as_of_ts", + "p50_ms": 0.6842210000000001, + "p99_ms": 0.77434, + "peak_rss_kb": 5324, + "query": "[:find ?a :as-of \"2026-10-29T12:37:28.213Z\" :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.766892, + "name": "as_of_ts", + "p50_ms": 0.732688, + "p99_ms": 0.755802, + "peak_rss_kb": 5272, + "query": "[:find ?a :as-of \"2026-10-29T12:37:28.213Z\" :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 8.847873, + "name": "as_of_ts_scan", + "p50_ms": 7.121805, + "p99_ms": 8.65489, + "peak_rss_kb": 6316, + "query": "[:find ?e ?a :as-of \"2026-10-29T12:37:28.213Z\" :where [?e :age ?a]]", + "rows": 8400, + "runs": 200 + }, + "candidate": { + "max_ms": 7.464847, + "name": "as_of_ts_scan", + "p50_ms": 7.0533920000000006, + "p99_ms": 7.410647, + "peak_rss_kb": 6208, + "query": "[:find ?e ?a :as-of \"2026-10-29T12:37:28.213Z\" :where [?e :age ?a]]", + "rows": 8400, + "runs": 200 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 47.439414, + "name": "count", + "p50_ms": 40.050604, + "p99_ms": 47.439414, + "peak_rss_kb": 6812, + "query": "[:find (count ?v) :where [?e ?a ?v]]", + "rows": 1, + "runs": 50 + }, + "candidate": { + "max_ms": 48.155663000000004, + "name": "count", + "p50_ms": 39.87202, + "p99_ms": 48.155663000000004, + "peak_rss_kb": 6768, + "query": "[:find (count ?v) :where [?e ?a ?v]]", + "rows": 1, + "runs": 50 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 12.719709, + "name": "count_grouped", + "p50_ms": 5.602637, + "p99_ms": 6.265726999999999, + "peak_rss_kb": 5868, + "query": "[:find ?g (count ?e) :where [?e :group ?g]]", + "rows": 100, + "runs": 200 + }, + "candidate": { + "max_ms": 12.889302, + "name": "count_grouped", + "p50_ms": 5.61637, + "p99_ms": 6.313156, + "peak_rss_kb": 5840, + "query": "[:find ?g (count ?e) :where [?e :group ?g]]", + "rows": 100, + "runs": 200 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 36.702541, + "name": "window", + "p50_ms": 35.88606, + "p99_ms": 36.702541, + "peak_rss_kb": 15004, + "query": "[:find ?e (rank :over (:order-by ?a)) :where [?e :age ?a]]", + "rows": 16666, + "runs": 56 + }, + "candidate": { + "max_ms": 35.850452999999995, + "name": "window", + "p50_ms": 35.218726, + "p99_ms": 35.850452999999995, + "peak_rss_kb": 14988, + "query": "[:find ?e (rank :over (:order-by ?a)) :where [?e :age ?a]]", + "rows": 16666, + "runs": 57 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.290376, + "name": "hot_current", + "p50_ms": 0.23380800000000002, + "p99_ms": 0.281842, + "peak_rss_kb": 5344, + "query": "[:find ?v :where [:hot :counter ?v]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.262982, + "name": "hot_current", + "p50_ms": 0.235353, + "p99_ms": 0.254785, + "peak_rss_kb": 5272, + "query": "[:find ?v :where [:hot :counter ?v]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 2, + "base_node": 1, + "candidate_node": 3, + "base": { + "max_ms": 0.32704099999999997, + "name": "hot_as_of", + "p50_ms": 0.223779, + "p99_ms": 0.304979, + "peak_rss_kb": 5360, + "query": "[:find ?v :as-of 1253 :valid-at :any-valid-time :where [:hot :counter ?v]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.26689999999999997, + "name": "hot_as_of", + "p50_ms": 0.227046, + "p99_ms": 0.258739, + "peak_rss_kb": 5364, + "query": "[:find ?v :as-of 1253 :valid-at :any-valid-time :where [:hot :counter ?v]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.039525, + "name": "point_entity", + "p50_ms": 0.018216999999999997, + "p99_ms": 0.02928, + "peak_rss_kb": 5260, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.06600199999999999, + "name": "point_entity", + "p50_ms": 0.018371000000000002, + "p99_ms": 0.041835000000000004, + "peak_rss_kb": 5196, + "query": "[:find ?a :where [:p8333 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.043068, + "name": "attribute_value", + "p50_ms": 0.020203, + "p99_ms": 0.03574, + "peak_rss_kb": 5264, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.050233, + "name": "attribute_value", + "p50_ms": 0.020328, + "p99_ms": 0.038118000000000006, + "peak_rss_kb": 5300, + "query": "[:find ?e :where [?e :name \"p8333\"]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 12.457946, + "name": "attribute_scan", + "p50_ms": 11.083101999999998, + "p99_ms": 11.272893000000002, + "peak_rss_kb": 6668, + "query": "[:find ?e ?a :where [?e :age ?a]]", + "rows": 16666, + "runs": 181 + }, + "candidate": { + "max_ms": 12.509592, + "name": "attribute_scan", + "p50_ms": 10.945796000000001, + "p99_ms": 12.09851, + "peak_rss_kb": 6672, + "query": "[:find ?e ?a :where [?e :age ?a]]", + "rows": 16666, + "runs": 182 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.058002, + "name": "join_2", + "p50_ms": 0.041107, + "p99_ms": 0.052775999999999997, + "peak_rss_kb": 5252, + "query": "[:find ?n :where [:p8333 :follows ?f] [?f :name ?n]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.08218, + "name": "join_2", + "p50_ms": 0.041481, + "p99_ms": 0.073129, + "peak_rss_kb": 5236, + "query": "[:find ?n :where [:p8333 :follows ?f] [?f :name ?n]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 50.124232, + "name": "join_3_scan", + "p50_ms": 40.678715, + "p99_ms": 50.124232, + "peak_rss_kb": 14192, + "query": "[:find ?e ?n :where [?e :follows ?f] [?f :group 7] [?f :name ?n]]", + "rows": 167, + "runs": 49 + }, + "candidate": { + "max_ms": 48.786736, + "name": "join_3_scan", + "p50_ms": 40.853193000000005, + "p99_ms": 48.786736, + "peak_rss_kb": 14596, + "query": "[:find ?e ?n :where [?e :follows ?f] [?f :group 7] [?f :name ?n]]", + "rows": 167, + "runs": 49 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 3.0192069999999998, + "name": "not_probe", + "p50_ms": 2.904294, + "p99_ms": 2.937538, + "peak_rss_kb": 6404, + "query": "[:find ?e :where [?e :group 7] (not [?e :age 7])]", + "rows": 148, + "runs": 200 + }, + "candidate": { + "max_ms": 3.0935070000000002, + "name": "not_probe", + "p50_ms": 2.897751, + "p99_ms": 3.07668, + "peak_rss_kb": 6360, + "query": "[:find ?e :where [?e :group 7] (not [?e :age 7])]", + "rows": 148, + "runs": 200 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 6.219322999999999, + "name": "not_join_hash", + "p50_ms": 5.881361, + "p99_ms": 6.177757, + "peak_rss_kb": 6548, + "query": "[:find ?e :where [?e :group 7] [?e :age ?a] (not-join [?a] [?f :group 17] [?f :age ?a] [(< ?a 50)])]", + "rows": 72, + "runs": 200 + }, + "candidate": { + "max_ms": 6.2677510000000005, + "name": "not_join_hash", + "p50_ms": 5.924023, + "p99_ms": 6.222391, + "peak_rss_kb": 6516, + "query": "[:find ?e :where [?e :group 7] [?e :age ?a] (not-join [?a] [?f :group 17] [?f :age ?a] [(< ?a 50)])]", + "rows": 72, + "runs": 200 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 16.13074, + "name": "or_2", + "p50_ms": 8.548563999999999, + "p99_ms": 9.320956, + "peak_rss_kb": 6620, + "query": "[:find ?e :where [?e :group 7] [?e :age ?a] (or-join [?a] (and [?f :group 17] [?f :age ?a] [(< ?a 30)]) (and [?g :group 27] [?g :age ?a] [(> ?a 60)]))]", + "rows": 111, + "runs": 200 + }, + "candidate": { + "max_ms": 14.175062, + "name": "or_2", + "p50_ms": 8.543501000000001, + "p99_ms": 9.660027, + "peak_rss_kb": 6644, + "query": "[:find ?e :where [?e :group 7] [?e :age ?a] (or-join [?a] (and [?f :group 17] [?f :age ?a] [(< ?a 30)]) (and [?g :group 27] [?g :age ?a] [(> ?a 60)]))]", + "rows": 111, + "runs": 200 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 1.237796, + "name": "recursive_ancestors", + "p50_ms": 1.172544, + "p99_ms": 1.232721, + "peak_rss_kb": 5532, + "query": "[:find ?b :where (boss :p16665 ?b)]", + "rows": 5, + "runs": 200 + }, + "candidate": { + "max_ms": 1.287387, + "name": "recursive_ancestors", + "p50_ms": 1.171045, + "p99_ms": 1.271748, + "peak_rss_kb": 5492, + "query": "[:find ?b :where (boss :p16665 ?b)]", + "rows": 5, + "runs": 200 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.035658, + "name": "as_of", + "p50_ms": 0.020947, + "p99_ms": 0.031399, + "peak_rss_kb": 5288, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.07527800000000001, + "name": "as_of", + "p50_ms": 0.021122, + "p99_ms": 0.049162000000000004, + "peak_rss_kb": 5292, + "query": "[:find ?a :as-of 126 :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.7923300000000001, + "name": "as_of_ts", + "p50_ms": 0.713249, + "p99_ms": 0.761373, + "peak_rss_kb": 5300, + "query": "[:find ?a :as-of \"2026-10-29T12:37:28.213Z\" :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.821227, + "name": "as_of_ts", + "p50_ms": 0.69187, + "p99_ms": 0.780672, + "peak_rss_kb": 5364, + "query": "[:find ?a :as-of \"2026-10-29T12:37:28.213Z\" :where [:p2083 :age ?a]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 14.340828, + "name": "as_of_ts_scan", + "p50_ms": 6.988911000000001, + "p99_ms": 8.226687, + "peak_rss_kb": 6256, + "query": "[:find ?e ?a :as-of \"2026-10-29T12:37:28.213Z\" :where [?e :age ?a]]", + "rows": 8400, + "runs": 200 + }, + "candidate": { + "max_ms": 14.170891999999998, + "name": "as_of_ts_scan", + "p50_ms": 6.955367, + "p99_ms": 8.102905, + "peak_rss_kb": 6248, + "query": "[:find ?e ?a :as-of \"2026-10-29T12:37:28.213Z\" :where [?e :age ?a]]", + "rows": 8400, + "runs": 200 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 42.223146, + "name": "count", + "p50_ms": 40.222062, + "p99_ms": 42.223146, + "peak_rss_kb": 6792, + "query": "[:find (count ?v) :where [?e ?a ?v]]", + "rows": 1, + "runs": 50 + }, + "candidate": { + "max_ms": 43.274008, + "name": "count", + "p50_ms": 41.361621, + "p99_ms": 43.274008, + "peak_rss_kb": 6780, + "query": "[:find (count ?v) :where [?e ?a ?v]]", + "rows": 1, + "runs": 49 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 6.468431, + "name": "count_grouped", + "p50_ms": 5.63385, + "p99_ms": 6.268956, + "peak_rss_kb": 5868, + "query": "[:find ?g (count ?e) :where [?e :group ?g]]", + "rows": 100, + "runs": 200 + }, + "candidate": { + "max_ms": 6.240669, + "name": "count_grouped", + "p50_ms": 5.711843, + "p99_ms": 6.1749149999999995, + "peak_rss_kb": 5844, + "query": "[:find ?g (count ?e) :where [?e :group ?g]]", + "rows": 100, + "runs": 200 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 43.157483000000006, + "name": "window", + "p50_ms": 35.174817999999995, + "p99_ms": 43.157483000000006, + "peak_rss_kb": 14908, + "query": "[:find ?e (rank :over (:order-by ?a)) :where [?e :age ?a]]", + "rows": 16666, + "runs": 57 + }, + "candidate": { + "max_ms": 42.480811, + "name": "window", + "p50_ms": 35.325786, + "p99_ms": 42.480811, + "peak_rss_kb": 15364, + "query": "[:find ?e (rank :over (:order-by ?a)) :where [?e :age ?a]]", + "rows": 16666, + "runs": 57 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.257344, + "name": "hot_current", + "p50_ms": 0.23466399999999998, + "p99_ms": 0.249986, + "peak_rss_kb": 5300, + "query": "[:find ?v :where [:hot :counter ?v]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.338331, + "name": "hot_current", + "p50_ms": 0.238283, + "p99_ms": 0.29761099999999996, + "peak_rss_kb": 5268, + "query": "[:find ?v :where [:hot :counter ?v]]", + "rows": 1, + "runs": 200 + } + }, + { + "round": 3, + "base_node": 3, + "candidate_node": 1, + "base": { + "max_ms": 0.248954, + "name": "hot_as_of", + "p50_ms": 0.228181, + "p99_ms": 0.24845299999999998, + "peak_rss_kb": 5340, + "query": "[:find ?v :as-of 1253 :valid-at :any-valid-time :where [:hot :counter ?v]]", + "rows": 1, + "runs": 200 + }, + "candidate": { + "max_ms": 0.281208, + "name": "hot_as_of", + "p50_ms": 0.22632500000000003, + "p99_ms": 0.26222799999999996, + "peak_rss_kb": 5320, + "query": "[:find ?v :as-of 1253 :valid-at :any-valid-time :where [:hot :counter ?v]]", + "rows": 1, + "runs": 200 + } + } +] diff --git a/docs/audits/772/evidence/sections.txt b/docs/audits/772/evidence/sections.txt new file mode 100644 index 000000000..f1bbc1e4b --- /dev/null +++ b/docs/audits/772/evidence/sections.txt @@ -0,0 +1,39 @@ +target/release/minigraf : +section size addr +.interp 28 736 +.note.ABI-tag 32 764 +.note.gnu.build-id 36 796 +.dynsym 1752 832 +.gnu.version 146 2584 +.gnu.version_r 272 2732 +.gnu.hash 28 3008 +.dynstr 1023 3036 +.rela.dyn 47712 4064 +.rela.plt 48 51776 +.gcc_except_table 3940 51824 +.rodata 101440 55776 +.eh_frame_hdr 21060 157216 +.eh_frame 150848 178280 +.text 893646 333232 +.init 27 1226880 +.fini 13 1226908 +.plt 48 1226928 +.tbss 48 1226976 +.fini_array 8 1231072 +.init_array 16 1231080 +.data.rel.ro 33688 1231096 +.dynamic 448 1264784 +.got 592 1265232 +.got.plt 40 1265824 +.relro_padding 3896 1265864 +.tm_clone_table 0 1269960 +.data 2744 1269960 +.bss 208 1272704 +.comment 184 0 +.debug_abbrev 1923 0 +.debug_info 468766 0 +.debug_aranges 7504 0 +.debug_ranges 164912 0 +.debug_str 998009 0 +.debug_line 169863 0 +Total 3074948 diff --git a/docs/audits/772/evidence/set-sizes.tsv b/docs/audits/772/evidence/set-sizes.tsv new file mode 100644 index 000000000..0685a84cc --- /dev/null +++ b/docs/audits/772/evidence/set-sizes.tsv @@ -0,0 +1,10 @@ +case bytes sha256 +native 1260568 48f9aa552680be3e9c3d40f0c09eb3d5722fbd0cc1786eb80436e1cfa2be8da0 +native-wasm-feature 1260568 ad70bff7111c80d28c8876525206b17da68ab139b599e4ed3c5806b6a2a3d708 +native-browser-feature 1260552 c0bce36fa6bf24281ebfc82b722f61eb94dda7286e110bad8941383d3e17d3e8 +dist 1498776 052db74ab9cc367db236d8d40db8111ba4f090df7d05407bccd303d5498c1307 +wasi 878835 b371f740d951b1b8af77c743d2affd08a378a9e9876007102eecf2346d05abc1 +browser 1524903 4749b190493710f9c003944f0ea951d4ce9de3bc8cc817c0a91fa9d78f7fb5a2 +consumer-size 1461072 4aa7742d779b92e09863ac4da24c521a7d7706f96150f44573adc61aee7486e4 +consumer-speed 4744624 e4d89c6ffae3e9cb2718ccc3c6e3d8072973de7212840395ecd9d44c7036a471 +consumer-speed-stripped 2157120 5daf4d447114ae934b274b19c3ca0eb9fdee70eaaa2486519c5963d8b08c72ee diff --git a/docs/audits/772/evidence/sort-base-0.csv b/docs/audits/772/evidence/sort-base-0.csv new file mode 100644 index 000000000..ec35a8ea1 --- /dev/null +++ b/docs/audits/772/evidence/sort-base-0.csv @@ -0,0 +1,48 @@ +free-random,8,false,20000,89 +bytes-random,8,false,20000,264 +strings-random,8,false,20000,322 +free-ascending,8,false,20000,99 +bytes-ascending,8,false,20000,88 +strings-ascending,8,false,20000,50 +free-descending,8,false,20000,20 +bytes-descending,8,false,20000,136 +strings-descending,8,false,20000,157 +free-duplicates,8,false,20000,32 +bytes-duplicates,8,false,20000,46 +strings-duplicates,8,false,20000,50 +free-random,64,false,15625,394 +bytes-random,64,false,15625,2352 +strings-random,64,false,15625,2339 +free-ascending,64,false,15625,62 +bytes-ascending,64,false,15625,261 +strings-ascending,64,false,15625,266 +free-descending,64,false,15625,51 +bytes-descending,64,false,15625,308 +strings-descending,64,false,15625,317 +free-duplicates,64,false,15625,334 +bytes-duplicates,64,false,15625,2277 +strings-duplicates,64,false,15625,2165 +free-random,1024,false,976,8099 +bytes-random,1024,false,976,64714 +strings-random,1024,false,976,85988 +free-ascending,1024,false,976,535 +bytes-ascending,1024,false,976,3566 +strings-ascending,1024,false,976,3955 +free-descending,1024,false,976,395 +bytes-descending,1024,false,976,4679 +strings-descending,1024,false,976,4820 +free-duplicates,1024,false,976,4161 +bytes-duplicates,1024,false,976,52897 +strings-duplicates,1024,false,976,54407 +free-random,100000,false,20,1487122 +bytes-random,100000,false,20,18544741 +strings-random,100000,false,20,17132586 +free-ascending,100000,false,20,102202 +bytes-ascending,100000,false,20,372055 +strings-ascending,100000,false,20,387505 +free-descending,100000,false,20,36132 +bytes-descending,100000,false,20,456489 +strings-descending,100000,false,20,484470 +free-duplicates,100000,false,20,324059 +bytes-duplicates,100000,false,20,3504509 +strings-duplicates,100000,false,20,4266113 diff --git a/docs/audits/772/evidence/sort-base-1.csv b/docs/audits/772/evidence/sort-base-1.csv new file mode 100644 index 000000000..e158d9f50 --- /dev/null +++ b/docs/audits/772/evidence/sort-base-1.csv @@ -0,0 +1,48 @@ +free-random,8,false,20000,91 +bytes-random,8,false,20000,266 +strings-random,8,false,20000,329 +free-ascending,8,false,20000,99 +bytes-ascending,8,false,20000,92 +strings-ascending,8,false,20000,51 +free-descending,8,false,20000,20 +bytes-descending,8,false,20000,140 +strings-descending,8,false,20000,159 +free-duplicates,8,false,20000,32 +bytes-duplicates,8,false,20000,47 +strings-duplicates,8,false,20000,49 +free-random,64,false,15625,391 +bytes-random,64,false,15625,2346 +strings-random,64,false,15625,2389 +free-ascending,64,false,15625,61 +bytes-ascending,64,false,15625,261 +strings-ascending,64,false,15625,265 +free-descending,64,false,15625,51 +bytes-descending,64,false,15625,308 +strings-descending,64,false,15625,317 +free-duplicates,64,false,15625,335 +bytes-duplicates,64,false,15625,2281 +strings-duplicates,64,false,15625,2222 +free-random,1024,false,976,8041 +bytes-random,1024,false,976,63948 +strings-random,1024,false,976,88016 +free-ascending,1024,false,976,539 +bytes-ascending,1024,false,976,3530 +strings-ascending,1024,false,976,4042 +free-descending,1024,false,976,572 +bytes-descending,1024,false,976,4903 +strings-descending,1024,false,976,4985 +free-duplicates,1024,false,976,4113 +bytes-duplicates,1024,false,976,54227 +strings-duplicates,1024,false,976,54925 +free-random,100000,false,20,1485821 +bytes-random,100000,false,20,18566782 +strings-random,100000,false,20,16636061 +free-ascending,100000,false,20,67809 +bytes-ascending,100000,false,20,327945 +strings-ascending,100000,false,20,395393 +free-descending,100000,false,20,37803 +bytes-descending,100000,false,20,459777 +strings-descending,100000,false,20,484614 +free-duplicates,100000,false,20,324650 +bytes-duplicates,100000,false,20,3534516 +strings-duplicates,100000,false,20,4275816 diff --git a/docs/audits/772/evidence/sort-base-2.csv b/docs/audits/772/evidence/sort-base-2.csv new file mode 100644 index 000000000..8fddb0592 --- /dev/null +++ b/docs/audits/772/evidence/sort-base-2.csv @@ -0,0 +1,48 @@ +free-random,8,false,20000,92 +bytes-random,8,false,20000,266 +strings-random,8,false,20000,327 +free-ascending,8,false,20000,101 +bytes-ascending,8,false,20000,92 +strings-ascending,8,false,20000,53 +free-descending,8,false,20000,20 +bytes-descending,8,false,20000,137 +strings-descending,8,false,20000,162 +free-duplicates,8,false,20000,32 +bytes-duplicates,8,false,20000,47 +strings-duplicates,8,false,20000,53 +free-random,64,false,15625,390 +bytes-random,64,false,15625,2351 +strings-random,64,false,15625,2403 +free-ascending,64,false,15625,62 +bytes-ascending,64,false,15625,276 +strings-ascending,64,false,15625,272 +free-descending,64,false,15625,51 +bytes-descending,64,false,15625,309 +strings-descending,64,false,15625,317 +free-duplicates,64,false,15625,335 +bytes-duplicates,64,false,15625,2263 +strings-duplicates,64,false,15625,2150 +free-random,1024,false,976,8019 +bytes-random,1024,false,976,64670 +strings-random,1024,false,976,86133 +free-ascending,1024,false,976,540 +bytes-ascending,1024,false,976,3545 +strings-ascending,1024,false,976,3967 +free-descending,1024,false,976,401 +bytes-descending,1024,false,976,4737 +strings-descending,1024,false,976,4884 +free-duplicates,1024,false,976,4109 +bytes-duplicates,1024,false,976,53252 +strings-duplicates,1024,false,976,59821 +free-random,100000,false,20,1508362 +bytes-random,100000,false,20,18655517 +strings-random,100000,false,20,17128583 +free-ascending,100000,false,20,69306 +bytes-ascending,100000,false,20,330423 +strings-ascending,100000,false,20,376001 +free-descending,100000,false,20,36842 +bytes-descending,100000,false,20,462972 +strings-descending,100000,false,20,488380 +free-duplicates,100000,false,20,326335 +bytes-duplicates,100000,false,20,3928022 +strings-duplicates,100000,false,20,4330557 diff --git a/docs/audits/772/evidence/sort-base-3.csv b/docs/audits/772/evidence/sort-base-3.csv new file mode 100644 index 000000000..8bc310996 --- /dev/null +++ b/docs/audits/772/evidence/sort-base-3.csv @@ -0,0 +1,48 @@ +free-random,8,false,20000,91 +bytes-random,8,false,20000,167 +strings-random,8,false,20000,108 +free-ascending,8,false,20000,32 +bytes-ascending,8,false,20000,47 +strings-ascending,8,false,20000,50 +free-descending,8,false,20000,20 +bytes-descending,8,false,20000,136 +strings-descending,8,false,20000,157 +free-duplicates,8,false,20000,33 +bytes-duplicates,8,false,20000,46 +strings-duplicates,8,false,20000,49 +free-random,64,false,15625,391 +bytes-random,64,false,15625,2301 +strings-random,64,false,15625,2344 +free-ascending,64,false,15625,61 +bytes-ascending,64,false,15625,261 +strings-ascending,64,false,15625,265 +free-descending,64,false,15625,51 +bytes-descending,64,false,15625,306 +strings-descending,64,false,15625,332 +free-duplicates,64,false,15625,334 +bytes-duplicates,64,false,15625,2263 +strings-duplicates,64,false,15625,2152 +free-random,1024,false,976,8014 +bytes-random,1024,false,976,63223 +strings-random,1024,false,976,86025 +free-ascending,1024,false,976,524 +bytes-ascending,1024,false,976,3515 +strings-ascending,1024,false,976,3978 +free-descending,1024,false,976,410 +bytes-descending,1024,false,976,4692 +strings-descending,1024,false,976,4887 +free-duplicates,1024,false,976,4106 +bytes-duplicates,1024,false,976,53335 +strings-duplicates,1024,false,976,54684 +free-random,100000,false,20,1484296 +bytes-random,100000,false,20,19006340 +strings-random,100000,false,20,16719476 +free-ascending,100000,false,20,69179 +bytes-ascending,100000,false,20,327412 +strings-ascending,100000,false,20,375899 +free-descending,100000,false,20,38096 +bytes-descending,100000,false,20,460992 +strings-descending,100000,false,20,487045 +free-duplicates,100000,false,20,324787 +bytes-duplicates,100000,false,20,3578214 +strings-duplicates,100000,false,20,4322966 diff --git a/docs/audits/772/evidence/sort-candidate-0.csv b/docs/audits/772/evidence/sort-candidate-0.csv new file mode 100644 index 000000000..66242997f --- /dev/null +++ b/docs/audits/772/evidence/sort-candidate-0.csv @@ -0,0 +1,48 @@ +free-random,8,true,20000,98 +bytes-random,8,true,20000,265 +strings-random,8,true,20000,327 +free-ascending,8,true,20000,72 +bytes-ascending,8,true,20000,93 +strings-ascending,8,true,20000,52 +free-descending,8,true,20000,36 +bytes-descending,8,true,20000,141 +strings-descending,8,true,20000,160 +free-duplicates,8,true,20000,23 +bytes-duplicates,8,true,20000,46 +strings-duplicates,8,true,20000,50 +free-random,64,true,15625,343 +bytes-random,64,true,15625,1986 +strings-random,64,true,15625,2008 +free-ascending,64,true,15625,63 +bytes-ascending,64,true,15625,258 +strings-ascending,64,true,15625,247 +free-descending,64,true,15625,73 +bytes-descending,64,true,15625,284 +strings-descending,64,true,15625,293 +free-duplicates,64,true,15625,325 +bytes-duplicates,64,true,15625,2560 +strings-duplicates,64,true,15625,2491 +free-random,1024,true,976,7974 +bytes-random,1024,true,976,55877 +strings-random,1024,true,976,66075 +free-ascending,1024,true,976,548 +bytes-ascending,1024,true,976,3407 +strings-ascending,1024,true,976,3873 +free-descending,1024,true,976,679 +bytes-descending,1024,true,976,4103 +strings-descending,1024,true,976,4520 +free-duplicates,1024,true,976,4063 +bytes-duplicates,1024,true,976,34234 +strings-duplicates,1024,true,976,38058 +free-random,100000,true,20,1490410 +bytes-random,100000,true,20,13500134 +strings-random,100000,true,20,12968330 +free-ascending,100000,true,20,98153 +bytes-ascending,100000,true,20,376952 +strings-ascending,100000,true,20,385481 +free-descending,100000,true,20,101067 +bytes-descending,100000,true,20,448149 +strings-descending,100000,true,20,472164 +free-duplicates,100000,true,20,363869 +bytes-duplicates,100000,true,20,2753154 +strings-duplicates,100000,true,20,3240317 diff --git a/docs/audits/772/evidence/sort-candidate-1.csv b/docs/audits/772/evidence/sort-candidate-1.csv new file mode 100644 index 000000000..40a112fad --- /dev/null +++ b/docs/audits/772/evidence/sort-candidate-1.csv @@ -0,0 +1,48 @@ +free-random,8,true,20000,100 +bytes-random,8,true,20000,263 +strings-random,8,true,20000,326 +free-ascending,8,true,20000,68 +bytes-ascending,8,true,20000,91 +strings-ascending,8,true,20000,54 +free-descending,8,true,20000,36 +bytes-descending,8,true,20000,137 +strings-descending,8,true,20000,163 +free-duplicates,8,true,20000,22 +bytes-duplicates,8,true,20000,46 +strings-duplicates,8,true,20000,53 +free-random,64,true,15625,344 +bytes-random,64,true,15625,1979 +strings-random,64,true,15625,2004 +free-ascending,64,true,15625,61 +bytes-ascending,64,true,15625,258 +strings-ascending,64,true,15625,246 +free-descending,64,true,15625,71 +bytes-descending,64,true,15625,282 +strings-descending,64,true,15625,288 +free-duplicates,64,true,15625,324 +bytes-duplicates,64,true,15625,2572 +strings-duplicates,64,true,15625,2496 +free-random,1024,true,976,7990 +bytes-random,1024,true,976,56403 +strings-random,1024,true,976,67192 +free-ascending,1024,true,976,537 +bytes-ascending,1024,true,976,3558 +strings-ascending,1024,true,976,4251 +free-descending,1024,true,976,677 +bytes-descending,1024,true,976,4257 +strings-descending,1024,true,976,4936 +free-duplicates,1024,true,976,4062 +bytes-duplicates,1024,true,976,35929 +strings-duplicates,1024,true,976,40106 +free-random,100000,true,20,1528489 +bytes-random,100000,true,20,13654462 +strings-random,100000,true,20,12654055 +free-ascending,100000,true,20,67276 +bytes-ascending,100000,true,20,329083 +strings-ascending,100000,true,20,369348 +free-descending,100000,true,20,102113 +bytes-descending,100000,true,20,448643 +strings-descending,100000,true,20,474618 +free-duplicates,100000,true,20,370167 +bytes-duplicates,100000,true,20,2795843 +strings-duplicates,100000,true,20,3251631 diff --git a/docs/audits/772/evidence/sort-candidate-2.csv b/docs/audits/772/evidence/sort-candidate-2.csv new file mode 100644 index 000000000..d8c6da172 --- /dev/null +++ b/docs/audits/772/evidence/sort-candidate-2.csv @@ -0,0 +1,48 @@ +free-random,8,true,20000,97 +bytes-random,8,true,20000,264 +strings-random,8,true,20000,326 +free-ascending,8,true,20000,69 +bytes-ascending,8,true,20000,98 +strings-ascending,8,true,20000,52 +free-descending,8,true,20000,36 +bytes-descending,8,true,20000,136 +strings-descending,8,true,20000,158 +free-duplicates,8,true,20000,22 +bytes-duplicates,8,true,20000,47 +strings-duplicates,8,true,20000,50 +free-random,64,true,15625,346 +bytes-random,64,true,15625,2018 +strings-random,64,true,15625,2029 +free-ascending,64,true,15625,61 +bytes-ascending,64,true,15625,268 +strings-ascending,64,true,15625,245 +free-descending,64,true,15625,71 +bytes-descending,64,true,15625,282 +strings-descending,64,true,15625,292 +free-duplicates,64,true,15625,325 +bytes-duplicates,64,true,15625,2574 +strings-duplicates,64,true,15625,2454 +free-random,1024,true,976,8033 +bytes-random,1024,true,976,55640 +strings-random,1024,true,976,66212 +free-ascending,1024,true,976,551 +bytes-ascending,1024,true,976,3399 +strings-ascending,1024,true,976,3872 +free-descending,1024,true,976,675 +bytes-descending,1024,true,976,4111 +strings-descending,1024,true,976,4564 +free-duplicates,1024,true,976,4061 +bytes-duplicates,1024,true,976,34370 +strings-duplicates,1024,true,976,36952 +free-random,100000,true,20,1489661 +bytes-random,100000,true,20,13543721 +strings-random,100000,true,20,12807498 +free-ascending,100000,true,20,99036 +bytes-ascending,100000,true,20,374949 +strings-ascending,100000,true,20,435267 +free-descending,100000,true,20,104747 +bytes-descending,100000,true,20,506537 +strings-descending,100000,true,20,543517 +free-duplicates,100000,true,20,397742 +bytes-duplicates,100000,true,20,2989394 +strings-duplicates,100000,true,20,3526796 diff --git a/docs/audits/772/evidence/sort-candidate-3.csv b/docs/audits/772/evidence/sort-candidate-3.csv new file mode 100644 index 000000000..a47d10674 --- /dev/null +++ b/docs/audits/772/evidence/sort-candidate-3.csv @@ -0,0 +1,48 @@ +free-random,8,true,20000,97 +bytes-random,8,true,20000,207 +strings-random,8,true,20000,115 +free-ascending,8,true,20000,22 +bytes-ascending,8,true,20000,52 +strings-ascending,8,true,20000,49 +free-descending,8,true,20000,36 +bytes-descending,8,true,20000,138 +strings-descending,8,true,20000,158 +free-duplicates,8,true,20000,22 +bytes-duplicates,8,true,20000,48 +strings-duplicates,8,true,20000,49 +free-random,64,true,15625,351 +bytes-random,64,true,15625,1984 +strings-random,64,true,15625,2016 +free-ascending,64,true,15625,61 +bytes-ascending,64,true,15625,259 +strings-ascending,64,true,15625,249 +free-descending,64,true,15625,72 +bytes-descending,64,true,15625,279 +strings-descending,64,true,15625,302 +free-duplicates,64,true,15625,329 +bytes-duplicates,64,true,15625,2606 +strings-duplicates,64,true,15625,2432 +free-random,1024,true,976,7975 +bytes-random,1024,true,976,55913 +strings-random,1024,true,976,66558 +free-ascending,1024,true,976,558 +bytes-ascending,1024,true,976,3419 +strings-ascending,1024,true,976,3916 +free-descending,1024,true,976,675 +bytes-descending,1024,true,976,4120 +strings-descending,1024,true,976,4539 +free-duplicates,1024,true,976,4057 +bytes-duplicates,1024,true,976,34217 +strings-duplicates,1024,true,976,36355 +free-random,100000,true,20,1493666 +bytes-random,100000,true,20,13616933 +strings-random,100000,true,20,12702344 +free-ascending,100000,true,20,67531 +bytes-ascending,100000,true,20,326650 +strings-ascending,100000,true,20,370290 +free-descending,100000,true,20,102694 +bytes-descending,100000,true,20,449866 +strings-descending,100000,true,20,473863 +free-duplicates,100000,true,20,364468 +bytes-duplicates,100000,true,20,2773125 +strings-duplicates,100000,true,20,3259328 diff --git a/docs/audits/772/evidence/verification.txt b/docs/audits/772/evidence/verification.txt new file mode 100644 index 000000000..05dc14809 --- /dev/null +++ b/docs/audits/772/evidence/verification.txt @@ -0,0 +1,100 @@ +baseline-tmpfs-tests.log + Finished `test` profile [unoptimized + debuginfo] target(s) in 2.20s +test result: ok. 1195 passed; 0 failed; 7 ignored; 0 measured; 0 filtered out; finished in 67.96s +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s +test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.08s +test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s +test result: ok. 26 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s +test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s +test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s +test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s +test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s +test result: ok. 12 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.35s +test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.77s +test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s +test result: ok. 19 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s +test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s +test result: ok. 35 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s +test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.44s +test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s +test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.45s +test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s +test result: ok. 62 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.81s +test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s +test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s +test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s +test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s +test result: ok. 25 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.14s +test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.54s +test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s +test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s +test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s +test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s +test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.61s +test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.75s +test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s +test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.96s +test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s +test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 11.92s +test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s +test result: ok. 0 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 0.00s +test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s +test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.16s +test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.11s +test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.17s +test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s +test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s +test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s +test result: ok. 26 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s +test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s +test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s +test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s +test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s +test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.33s +test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s +test result: ok. 32 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s +test result: ok. 27 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s +test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s +test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.50s +test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s +test result: ok. 14 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s +test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.12s +test result: ok. 21 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s +test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s +test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s +test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s +test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s +test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 20.95s +test result: ok. 3 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 6.36s +test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s +test result: ok. 22 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s +test result: ok. 20 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.10s +test result: ok. 14 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s +test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s +test result: ok. 26 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 67.59s +test result: ok. 28 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s +test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s +test result: ok. 14 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s +test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.62s +test result: ok. 15 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 2.23s + +set-key-tests.log + Finished `test` profile [unoptimized + debuginfo] target(s) in 2m 20s +test result: ok. 23 passed; 0 failed; 0 ignored; 0 measured; 1179 filtered out; finished in 0.23s + +set-values-tests.log + Finished `test` profile [unoptimized + debuginfo] target(s) in 19.49s +test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 214.82s + +reader/tests.log + Finished `test` profile [unoptimized + debuginfo] target(s) in 2m 04s +test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 1200 filtered out; finished in 0.12s + +reader/msrv.log + Finished `dev` profile [unoptimized + debuginfo] target(s) in 44.62s + +set-msrv.log + Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.05s diff --git a/docs/audits/772/evidence/wasm-sections.jsonl b/docs/audits/772/evidence/wasm-sections.jsonl new file mode 100644 index 000000000..7c415b618 --- /dev/null +++ b/docs/audits/772/evidence/wasm-sections.jsonl @@ -0,0 +1,2 @@ +{"artifact": "browser.bin", "bytes": 1525738, "sections": [{"section": "type", "bytes": 676}, {"section": "import", "bytes": 5056}, {"section": "function", "bytes": 6128}, {"section": "table", "bytes": 7}, {"section": "memory", "bytes": 3}, {"section": "global", "bytes": 25}, {"section": "export", "bytes": 107688}, {"section": "element", "bytes": 1127}, {"section": "code", "bytes": 1047465}, {"section": "data", "bytes": 105632}, {"section": "custom", "bytes": 251889}]} +{"artifact": "wasi.bin", "bytes": 879785, "sections": [{"section": "type", "bytes": 560}, {"section": "import", "bytes": 298}, {"section": "function", "bytes": 2235}, {"section": "table", "bytes": 7}, {"section": "memory", "bytes": 3}, {"section": "global", "bytes": 14}, {"section": "export", "bytes": 33}, {"section": "element", "bytes": 755}, {"section": "code", "bytes": 770451}, {"section": "data", "bytes": 105393}]} diff --git a/docs/audits/772/matrix.sh b/docs/audits/772/matrix.sh new file mode 100644 index 000000000..434f20205 --- /dev/null +++ b/docs/audits/772/matrix.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +# Run in an isolated source snapshot with the audit Cargo.lock, on the bench. +# Usage: bash matrix.sh /absolute/output/directory +set -euo pipefail +out=${1:?output directory required} +mkdir -p "$out" +out=$(realpath "$out") +rustc -Vv > "$out/compiler.txt" +cargo -V >> "$out/compiler.txt" +sha256sum Cargo.lock > "$out/lock.sha256" +cp Cargo.toml "$out/Cargo.toml" +cargo tree --locked -e features > "$out/dependencies.txt" +printf 'case\tbytes\tsha256\n' > "$out/sizes.tsv" +measure() { + local name=$1 artifact=$2 + shift 2 + cargo build --locked "$@" > "$out/$name.log" 2>&1 + printf '%s\t%s\t%s\n' "$name" "$(stat -c %s "$artifact")" "$(sha256sum "$artifact" | cut -d ' ' -f 1)" >> "$out/sizes.tsv" + cp "$artifact" "$out/$name.bin" +} +measure native target/release/minigraf --release --bin minigraf +measure native-wasm-feature target/release/minigraf --release --bin minigraf --features wasm +measure native-browser-feature target/release/minigraf --release --bin minigraf --features browser +measure dist target/dist/minigraf --profile dist --bin minigraf +measure wasi target/wasm32-wasip1/release/minigraf.wasm --release --target wasm32-wasip1 --bin minigraf +measure browser target/wasm32-unknown-unknown/release/minigraf.wasm --release --target wasm32-unknown-unknown --features browser --lib +measure consumer-size target/release/examples/perf_envelope --release --example perf_envelope +measure consumer-speed target/envelope/examples/perf_envelope --profile envelope --example perf_envelope +# Keep the profile's original artifact above, but compare shipped-code sizes +# without letting its retained symbols dominate the opt-level-3 measurement. +strip --strip-all -o "$out/consumer-speed-stripped.bin" "$out/consumer-speed.bin" +printf 'consumer-speed-stripped\t%s\t%s\n' "$(stat -c %s "$out/consumer-speed-stripped.bin")" "$(sha256sum "$out/consumer-speed-stripped.bin" | cut -d ' ' -f 1)" >> "$out/sizes.tsv" +cat "$out/sizes.tsv" diff --git a/docs/audits/772/prototypes.py b/docs/audits/772/prototypes.py new file mode 100644 index 000000000..21886f377 --- /dev/null +++ b/docs/audits/772/prototypes.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 +"""Make independent, disposable size probes; never edit the baseline checkout. + +Usage: python3 prototypes.py BASE WORK OUTPUT [CANDIDATE ...] +Requires a baseline Cargo.lock. Each patch is measured against BASE, not the +preceding candidate. WORK and OUTPUT must be new directories. +""" +import difflib +import json +from pathlib import Path +import shutil +import subprocess +import sys + +base, work, out = map(lambda p: Path(p).resolve(), sys.argv[1:4]) +work.mkdir() +out.mkdir() +shutil.copytree(base, work / "source", ignore=shutil.ignore_patterns("target", ".git")) +source = work / "source" + + +def replace(path, old, new): + return path, old, new + + +candidates = { + "free-sort": [replace("src/storage/page.rs", + "free.sort_unstable_by(|a, b| b.cmp(a));", + "free.sort_unstable();\n free.reverse();")], + "encoded-set-sort": [replace("src/storage/keys.rs", + "encoded.sort();", "encoded.sort_unstable();")], + "value-order-sort": [replace("src/query/datalog/aggregate.rs", + "xs.sort_by(cmp);\n ys.sort_by(cmp);", + "xs.sort_unstable_by(cmp);\n ys.sort_unstable_by(cmp);")], + "string-sorts": [ + replace("src/query/engine/plan.rs", "own.sort();", "own.sort_unstable();"), + replace("src/query/datalog/prepared.rs", "result.sort();", "result.sort_unstable();")], + "import-sort": [replace("src/query/engine/plan.rs", + "imports.sort_by_key(|&(_, s)| s);", "imports.sort_unstable_by_key(|&(_, s)| s);")], + "chrono-serde": [replace("Cargo.toml", + 'features = ["serde", "std"]', 'features = ["std"]')], + "reader-erasure": [ + replace("src/storage/reader.rs", "pub struct OnDiskReader", "pub struct OnDiskReader"), + replace("src/storage/reader.rs", "backend: MutexStorageBackend,", "backend: Box,"), + replace("src/storage/reader.rs", "impl OnDiskReader", "impl OnDiskReader"), + replace("src/storage/reader.rs", "pub fn new(backend: Arc>,", "pub fn new(backend: Arc>,"), + replace("src/storage/reader.rs", "backend: MutexStorageBackend(backend),", "backend: Box::new(MutexStorageBackend(backend)),"), + *[replace("src/storage/reader.rs", f"impl {trait} for OnDiskReader", f"impl {trait} for OnDiskReader") for trait in ("KeySource", "LogSource", "CommittedReader")], + replace("src/storage/reader.rs", "&self.backend", "&*self.backend")], +} + +results = [] +for name, edits in candidates.items(): + if len(sys.argv) > 4 and name not in sys.argv[4:]: + continue + originals = {p: (base / p).read_text() for p, _, _ in edits} + modified = dict(originals) + for p, old, new in edits: + assert old in modified[p], (name, p, old) + modified[p] = modified[p].replace(old, new) + patch = "" + for p in originals: + (source / p).write_text(modified[p]) + patch += "".join(difflib.unified_diff(originals[p].splitlines(True), + modified[p].splitlines(True), fromfile="a/" + p, tofile="b/" + p, n=0)) + (out / (name + ".patch")).write_text(patch) + with (out / (name + ".log")).open("w") as log: + # Removing a dependency feature changes lockfile dependency edges. + # Offline resolution retains pinned package versions; retain that lock + # for inspection, then restore the baseline for the next candidate. + lock_flag = "--offline" if name == "chrono-serde" else "--locked" + run = subprocess.run(["cargo", "build", "--release", lock_flag, "--bin", "minigraf"], cwd=source, stdout=log, stderr=subprocess.STDOUT) + if name == "chrono-serde": + shutil.copyfile(source / "Cargo.lock", out / "chrono-serde-lock.toml") + shutil.copyfile(base / "Cargo.lock", source / "Cargo.lock") + row = {"candidate": name, "exit": run.returncode} + if run.returncode == 0: + binary = source / "target/release/minigraf" + row["bytes"] = binary.stat().st_size + shutil.copyfile(binary, out / (name + ".bin")) + results.append(row) + (out / "sizes.json").write_text(json.dumps(results, indent=2) + "\n") + print(json.dumps(row), flush=True) + for p, content in originals.items(): + (source / p).write_text(content) diff --git a/docs/audits/772/sort_probe.rs b/docs/audits/772/sort_probe.rs new file mode 100644 index 000000000..a89292de4 --- /dev/null +++ b/docs/audits/772/sort_probe.rs @@ -0,0 +1,64 @@ +// Standalone algorithm probe, not an end-to-end database benchmark. +// rustc -O sort_probe.rs -o sort_probe +use std::{hint::black_box, time::Instant}; + +fn run(label: &str, values: &[T], candidate: bool, descending: bool) { + let loops = (1_000_000 / values.len()).clamp(20, 20_000); + let mut elapsed = 0; + let mut expected = values.to_vec(); + expected.sort(); + if descending { + expected.reverse(); + } + for _ in 0..loops { + let mut data = values.to_vec(); + let start = Instant::now(); + if descending { + if candidate { + data.sort_unstable(); + data.reverse(); + } else { + data.sort_unstable_by(|a, b| b.cmp(a)); + } + } else if candidate { + data.sort_unstable(); + } else { + data.sort(); + } + elapsed += start.elapsed().as_nanos(); + assert!(data == expected, "sort output changed"); + black_box(data); + } + println!( + "{label},{},{candidate},{loops},{}", + values.len(), + elapsed / loops as u128 + ); +} + +fn main() { + let candidate = std::env::args().nth(1).as_deref() == Some("candidate"); + for n in [8, 64, 1024, 100_000] { + for shape in ["random", "ascending", "descending", "duplicates"] { + let mut state = 0x123456789abcdef_u64; + let values: Vec = (0..n) + .map(|i| match shape { + "ascending" => i as u64, + "descending" => (n - i) as u64, + "duplicates" => (i % 8) as u64, + _ => { + state ^= state << 13; + state ^= state >> 7; + state ^= state << 17; + state + } + }) + .collect(); + run(&format!("free-{shape}"), &values, candidate, true); + let bytes: Vec> = values.iter().map(|v| v.to_be_bytes().to_vec()).collect(); + run(&format!("bytes-{shape}"), &bytes, candidate, false); + let strings: Vec = values.iter().map(|v| format!("?slot-{v:020}")).collect(); + run(&format!("strings-{shape}"), &strings, candidate, false); + } + } +} diff --git a/docs/audits/772/symbol-summary.txt b/docs/audits/772/symbol-summary.txt new file mode 100644 index 000000000..b95867691 --- /dev/null +++ b/docs/audits/772/symbol-summary.txt @@ -0,0 +1,55 @@ +Baseline 3d19abbce5dd8d5244641ff0d7ba8bad5424d07f, rustc 1.99.1 +Symbol-name attribution; generic arguments and inlining affect categories. + 384370 dependencies/std + 166846 minigraf::query::engine + 151178 minigraf::query::datalog + 107207 minigraf::storage + 39907 minigraf::graph + 17226 minigraf::main + 12366 minigraf::db + 3343 minigraf::error + 3151 minigraf::wal + 2736 minigraf::temporal + 2032 minigraf::repl + +Largest 40 text symbols (decimal bytes) + 22127 ::open_rule_query + 20124 ::with_global:: + 17226 minigraf::main + 12943 ::next_batch + 12453 ::new + 11456 ::execute + 10863 minigraf::query::datalog::parser::parse_whole_command + 9004 ::next_batch + 8812 , usize>>::new + 8539 ::finish + 8339 ::next_batch + 8181 ::parse_inner + 8064 ::execute + 7670 >>::try_init::<>>::get_or_init<::borrow>::{closure#0}>::{closure#0}, !> + 7656 minigraf::query::engine::plan::plan_rules + 7490 ::clause + 7217 miniz_oxide::inflate::core::decompress + 6388 >::apply_chunk + 6118 ::stratify + 6062 >>::next_entry + 5435 minigraf::storage::btree::update_node + 5378 minigraf::query::datalog::executor::eval_expr + 5370 minigraf::query::engine::plan::plan_with + 5187 minigraf::query::datalog::optimizer::plan_ordered + 5101 minigraf::query::engine::build + 4630 >>::parse_children + 4595 ::next_batch + 4574 minigraf::query::datalog::parser::parse_expr + 4548 chrono::format::parse::parse_internal::, &chrono::format::Item> + 4492 ::from_rules + 4455 core::fmt::float::float_to_decimal_common_exact:: + 4420 >>::read_attribute + 4182 >, gimli::read::Error>>>::try_init::<>, gimli::read::Error>>>::get_or_init<>>::borrow::{closure#0}>::{closure#0}, !> + 3913 minigraf::graph::storage::flush_run + 3902 ::sub + 3745 ::insert + 3488 std::sys::pal::unix::stack_overflow::thread_info::set_current_info + 3320 minigraf::query::datalog::parser::parse_list_as_where_clause + 3320 core::num::imp::flt2dec::strategy::dragon::format_shortest + 3244 ::step diff --git a/docs/audits/772/wasm_sections.py b/docs/audits/772/wasm_sections.py new file mode 100644 index 000000000..36d101c59 --- /dev/null +++ b/docs/audits/772/wasm_sections.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 +"""Print raw Wasm section payload sizes (not a linked-package size estimate).""" +import json +from pathlib import Path +import sys + +names = {0: "custom", 1: "type", 2: "import", 3: "function", 4: "table", + 5: "memory", 6: "global", 7: "export", 8: "start", 9: "element", + 10: "code", 11: "data", 12: "data-count", 13: "tag"} +for arg in sys.argv[1:]: + data = Path(arg).read_bytes() + assert data[:8] == b"\0asm\1\0\0\0", arg + pos = 8 + sections = [] + while pos < len(data): + kind = data[pos] + pos += 1 + size, shift = 0, 0 + while True: + byte = data[pos] + pos += 1 + size |= (byte & 127) << shift + if byte < 128: + break + shift += 7 + assert shift < 35 + assert pos + size <= len(data) + sections.append({"section": names[kind], "bytes": size}) + pos += size + print(json.dumps({"artifact": Path(arg).name, "bytes": len(data), "sections": sections}))