Skip to content

feat(canvas): extract reusable graph model#562

Merged
dowdiness merged 1 commit into
mainfrom
issue-485-canvas-graph
Jun 7, 2026
Merged

feat(canvas): extract reusable graph model#562
dowdiness merged 1 commit into
mainfrom
issue-485-canvas-graph

Conversation

@dowdiness

Copy link
Copy Markdown
Owner

Summary

  • Extract examples/canvas/graph_model into reusable lib/canvas-graph module (dowdiness/canopy-canvas-graph).
  • Update examples/canvas to depend on the new graph model via path dependency.
  • Move graph operation JSON/replay tests with the library and trim helper-only exports from the public API.

Closes #485.

Reuse check

Existing APIs considered:

API Location Reused? Reason if not
apply_action(CanvasState, WorkflowAction) lib/canvas-graph/graph_model Yes Tests now use SelectNodes through the reducer instead of exporting set_selection.
WorkflowAction::SelectNodes lib/canvas-graph/graph_model Yes Keeps selection changes on the existing action/reducer path.
Array::iter().any(...) MoonBit core Array/Iter APIs Yes Replaces the public node_id_in_array helper at downstream call sites.

New helpers added (if any):

  • workflow_node_kind_from_key in examples/canvas/main/canvas_update.mbt: example-local FFI/menu glue; moved out of the reusable library to avoid exporting UI-specific string-key mapping.

Test plan

  • NEW_MOON_MOD=0 moon check passes
  • NEW_MOON_MOD=0 moon test passes
  • git diff *.mbti reviewed for unintended API surface changes
  • JS rebuild run if web is affected (cd examples/canvas/web && npm run build)

Validation

moon update && moon check
moon info
moon test
moon check --deny-warn
moon fmt --check examples/canvas/main lib/canvas-graph/graph_model
cd examples/canvas && MOON_WORK=off moon check --target js && MOON_WORK=off moon test --target js
cd examples/canvas/web && npm run build && npm run test:e2e

@coderabbitai

coderabbitai Bot commented Jun 7, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@dowdiness, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 18 minutes and 41 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 9e13c603-1042-4d47-a428-6a50908c6def

📥 Commits

Reviewing files that changed from the base of the PR and between 44002f2 and 280574e.

⛔ Files ignored due to path filters (1)
  • moon.work is excluded by !**/*.work
📒 Files selected for processing (13)
  • examples/canvas/main/canvas_state.mbt
  • examples/canvas/main/canvas_update.mbt
  • examples/canvas/main/canvas_update_wbtest.mbt
  • examples/canvas/main/graph_dsl_adapter.mbt
  • examples/canvas/main/moon.pkg
  • examples/canvas/main/pkg.generated.mbti
  • examples/canvas/moon.mod.json
  • lib/canvas-graph/README.md
  • lib/canvas-graph/graph_model/graph_operation_test.mbt
  • lib/canvas-graph/graph_model/model.mbt
  • lib/canvas-graph/graph_model/moon.pkg
  • lib/canvas-graph/graph_model/pkg.generated.mbti
  • lib/canvas-graph/moon.mod.json
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch issue-485-canvas-graph

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
lambda-editor 280574e Commit Preview URL

Branch Preview URL
Jun 07 2026, 08:37 AM

@github-actions

github-actions Bot commented Jun 7, 2026

Copy link
Copy Markdown

Benchmark Comparison Report

Comparing PR branch against main

Main Module Benchmarks

Base branch:

[dowdiness/btree] bench btree_benchmark.mbt:79 ("bench: build via inserts (100)") ok
time (mean ± σ)         range (min … max) 
  59.19 µs ± 701.85 ns    58.15 µs …  60.57 µs  in 10 ×   1631 runs
[dowdiness/btree] bench btree_benchmark.mbt:84 ("bench: build via from_sorted (100)") ok
time (mean ± σ)         range (min … max) 
   2.86 µs ±  10.34 ns     2.85 µs …   2.88 µs  in 10 ×  38794 runs
[dowdiness/btree] bench btree_benchmark.mbt:91 ("bench: build via inserts (1000)") ok
time (mean ± σ)         range (min … max) 
 924.91 µs ±   6.60 µs   914.41 µs … 933.47 µs  in 10 ×     99 runs
[dowdiness/btree] bench btree_benchmark.mbt:96 ("bench: build via from_sorted (1000)") ok
time (mean ± σ)         range (min … max) 
  24.89 µs ± 309.75 ns    24.59 µs …  25.69 µs  in 10 ×   4089 runs
[dowdiness/btree] bench btree_benchmark.mbt:103 ("bench: build via inserts (10000)") ok
time (mean ± σ)         range (min … max) 
  14.17 ms ±  89.13 µs    14.04 ms …  14.30 ms  in 10 ×      8 runs
[dowdiness/btree] bench btree_benchmark.mbt:108 ("bench: build via from_sorted (10000)") ok
time (mean ± σ)         range (min … max) 
 483.87 µs ±   8.64 µs   471.68 µs … 495.59 µs  in 10 ×    204 runs
[dowdiness/btree] bench btree_benchmark.mbt:115 ("bench: delete_range middle 10% (1000)") ok
time (mean ± σ)         range (min … max) 
  50.16 µs ± 387.27 ns    49.74 µs …  50.79 µs  in 10 ×   1970 runs
[dowdiness/btree] bench btree_benchmark.mbt:124 ("bench: delete_range middle 50% (1000)") ok
time (mean ± σ)         range (min … max) 
  45.18 µs ± 112.88 ns    45.00 µs …  45.36 µs  in 10 ×   2208 runs
[dowdiness/btree] bench btree_benchmark.mbt:133 ("bench: delete_range middle 10% (10000)") ok
time (mean ± σ)         range (min … max) 
 642.66 µs ±   2.51 µs   637.92 µs … 645.47 µs  in 10 ×    156 runs
[dowdiness/btree] bench btree_benchmark.mbt:142 ("bench: delete_range middle 50% (10000)") ok
time (mean ± σ)         range (min … max) 
 651.05 µs ±  10.44 µs   635.61 µs … 666.91 µs  in 10 ×    151 runs
Total tests: 10, passed: 10, failed: 0. [wasm-gc]
node count: 502
node count: 1002
node count: 2502
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:24 ("viewnode serialization (100 defs)") ok
time (mean ± σ)         range (min … max) 
   2.31 ms ±  18.88 µs     2.27 ms …   2.33 ms  in 10 ×     44 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:35 ("viewnode serialization (200 defs)") ok
time (mean ± σ)         range (min … max) 
   5.97 ms ± 200.86 µs     5.65 ms …   6.38 ms  in 10 ×     17 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:46 ("viewnode serialization (500 defs)") ok
time (mean ± σ)         range (min … max) 
  25.62 ms ±   1.50 ms    23.74 ms …  28.16 ms  in 10 ×      4 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:57 ("compute_view_patches (100 defs, single edit)") ok
time (mean ± σ)         range (min … max) 
   1.87 ms ±  60.97 µs     1.81 ms …   1.98 ms  in 10 ×     55 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:98 ("json object - incremental keystroke (20 members)") ok
time (mean ± σ)         range (min … max) 
 998.08 µs ±  50.75 µs   915.33 µs …   1.07 ms  in 10 ×     99 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:103 ("json object - incremental keystroke (100 members)") ok
time (mean ± σ)         range (min … max) 
   3.87 ms ±  68.88 µs     3.80 ms …   4.02 ms  in 10 ×     27 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:108 ("json object - incremental keystroke (500 members)") ok
time (mean ± σ)         range (min … max) 
  25.76 ms ± 123.11 µs    25.61 ms …  25.93 ms  in 10 ×      4 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:113 ("json object - incremental keystroke (1000 members)") ok
time (mean ± σ)         range (min … max) 
  59.18 ms ± 305.17 µs    58.84 ms …  59.70 ms  in 10 ×      2 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:118 ("json array - incremental keystroke (20 elements)") ok
time (mean ± σ)         range (min … max) 
 769.72 µs ± 162.16 µs   534.22 µs … 995.23 µs  in 10 ×    218 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:123 ("json array - incremental keystroke (100 elements)") ok
time (mean ± σ)         range (min … max) 
   1.85 ms ±  49.16 µs     1.77 ms …   1.92 ms  in 10 ×     57 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:128 ("json array - incremental keystroke (500 elements)") ok
time (mean ± σ)         range (min … max) 
  12.52 ms ±  64.94 µs    12.42 ms …  12.58 ms  in 10 ×      8 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:133 ("json array - incremental keystroke (1000 elements)") ok
time (mean ± σ)         range (min … max) 
  31.49 ms ± 807.07 µs    31.05 ms …  33.70 ms  in 10 ×      4 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:38 ("tree refresh unchanged (20 defs)") ok
time (mean ± σ)         range (min … max) 
   6.20 µs ±  53.79 ns     6.16 µs …   6.30 µs  in 10 ×  15756 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:48 ("tree refresh unchanged (80 defs)") ok
time (mean ± σ)         range (min … max) 
  25.81 µs ±  87.15 ns    25.71 µs …  25.96 µs  in 10 ×   3629 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:58 ("tree refresh unchanged (320 defs)") ok
time (mean ± σ)         range (min … max) 
 116.45 µs ± 451.58 ns   115.89 µs … 117.43 µs  in 10 ×    802 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:68 ("tree refresh unchanged (1000 defs)") ok
time (mean ± σ)         range (min … max) 
 497.62 µs ±   2.09 µs   495.14 µs … 500.97 µs  in 10 ×    202 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:80 ("tree refresh 1 changed (20 defs)") ok
time (mean ± σ)         range (min … max) 
  10.95 µs ±  26.19 ns    10.92 µs …  10.99 µs  in 10 ×   9136 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:95 ("tree refresh 1 changed (320 defs)") ok
time (mean ± σ)         range (min … max) 
 220.88 µs ±   2.06 µs   219.04 µs … 225.88 µs  in 10 ×    444 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:110 ("tree refresh 1 changed (1000 defs)") ok
time (mean ± σ)         range (min … max) 
 844.80 µs ±  10.35 µs   830.88 µs … 859.23 µs  in 10 ×    120 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:125 ("tree refresh 1 changed (80 defs)") ok
time (mean ± σ)         range (min … max) 
  46.61 µs ± 338.86 ns    46.28 µs …  47.27 µs  in 10 ×   2023 runs
[dowdiness/canopy] bench projection/reconcile_lcs_benchmark_wbtest.mbt:61 ("reconcile wide-siblings (20 defs)") ok
time (mean ± σ)         range (min … max) 
  11.36 µs ±  28.00 ns    11.34 µs …  11.41 µs  in 10 ×   8829 runs
[dowdiness/canopy] bench projection/reconcile_lcs_benchmark_wbtest.mbt:66 ("reconcile wide-siblings (80 defs)") ok
time (mean ± σ)         range (min … max) 
 102.76 µs ± 492.14 ns   102.33 µs … 104.07 µs  in 10 ×    975 runs
[dowdiness/canopy] bench projection/reconcile_lcs_benchmark_wbtest.mbt:71 ("reconcile wide-siblings (320 defs)") ok
time (mean ± σ)         range (min … max) 
   1.37 ms ±   4.94 µs     1.36 ms …   1.38 ms  in 10 ×     74 runs
[dowdiness/canopy] bench projection/reconcile_lcs_benchmark_wbtest.mbt:76 ("reconcile wide-siblings (1000 defs)") ok
time (mean ± σ)         range (min … max) 
  13.33 ms ±  21.23 µs    13.29 ms …  13.36 ms  in 10 ×      8 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:148 ("fp_incr unchanged (20 defs)") ok
time (mean ± σ)         range (min … max) 
   7.93 µs ±  59.20 ns     7.84 µs …   8.00 µs  in 10 ×  12798 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:157 ("fp_incr unchanged (80 defs)") ok
time (mean ± σ)         range (min … max) 
  48.42 µs ± 285.76 ns    48.13 µs …  48.84 µs  in 10 ×   2072 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:166 ("fp_incr unchanged (320 defs)") ok
time (mean ± σ)         range (min … max) 
 526.92 µs ± 643.86 ns   525.95 µs … 528.13 µs  in 10 ×    188 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:175 ("fp_incr unchanged (1000 defs)") ok
time (mean ± σ)         range (min … max) 
   4.51 ms ±   7.35 µs     4.50 ms …   4.52 ms  in 10 ×     22 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:186 ("fp_incr tail (20 defs)") ok
time (mean ± σ)         range (min … max) 
  16.92 µs ±   1.04 µs    16.39 µs …  18.99 µs  in 10 ×   6087 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:195 ("fp_incr tail (80 defs)") ok
time (mean ± σ)         range (min … max) 
  86.24 µs ± 561.92 ns    85.67 µs …  87.12 µs  in 10 ×   1168 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:204 ("fp_incr tail (320 defs)") ok
time (mean ± σ)         range (min … max) 
 683.93 µs ±   1.81 µs   682.21 µs … 688.45 µs  in 10 ×    147 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:213 ("fp_incr tail (1000 defs)") ok
time (mean ± σ)         range (min … max) 
   5.10 ms ±  13.50 µs     5.07 ms …   5.12 ms  in 10 ×     20 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:224 ("fp_incr shifted (20 defs)") ok
time (mean ± σ)         range (min … max) 
  21.83 µs ±  66.67 ns    21.73 µs …  21.92 µs  in 10 ×   4588 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:230 ("fp_incr shifted (80 defs)") ok
time (mean ± σ)         range (min … max) 
  88.00 µs ± 248.31 ns    87.61 µs …  88.27 µs  in 10 ×   1137 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:236 ("fp_incr shifted (320 defs)") ok
time (mean ± σ)         range (min … max) 
 396.95 µs ±   2.05 µs   394.98 µs … 400.54 µs  in 10 ×    254 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:242 ("fp_incr shifted (1000 defs)") ok
time (mean ± σ)         range (min … max) 
   1.34 ms ±  11.34 µs     1.33 ms …   1.36 ms  in 10 ×     75 runs
Total tests: 36, passed: 36, failed: 0. [js]
Warning: no test entry found.
Total tests: 0, passed: 0, failed: 0. [native]

PR branch:

Registry index updated successfully
Symbols updated successfully
Using cached dowdiness/incr@0.8.0
Using cached dowdiness/rle@0.2.0
Using cached moonbitlang/quickcheck@0.14.0
Using cached moonbitlang/async@0.16.8
Using cached moonbitlang/x@0.4.38
[dowdiness/btree] bench btree_benchmark.mbt:79 ("bench: build via inserts (100)") ok
time (mean ± σ)         range (min … max) 
  59.23 µs ± 781.43 ns    58.02 µs …  60.77 µs  in 10 ×   1619 runs
[dowdiness/btree] bench btree_benchmark.mbt:84 ("bench: build via from_sorted (100)") ok
time (mean ± σ)         range (min … max) 
   2.82 µs ±   5.47 ns     2.82 µs …   2.83 µs  in 10 ×  38953 runs
[dowdiness/btree] bench btree_benchmark.mbt:91 ("bench: build via inserts (1000)") ok
time (mean ± σ)         range (min … max) 
 937.21 µs ±  18.89 µs   918.42 µs … 985.45 µs  in 10 ×    105 runs
[dowdiness/btree] bench btree_benchmark.mbt:96 ("bench: build via from_sorted (1000)") ok
time (mean ± σ)         range (min … max) 
  24.41 µs ± 267.24 ns    24.13 µs …  24.85 µs  in 10 ×   4119 runs
[dowdiness/btree] bench btree_benchmark.mbt:103 ("bench: build via inserts (10000)") ok
time (mean ± σ)         range (min … max) 
  14.11 ms ± 118.60 µs    13.95 ms …  14.29 ms  in 10 ×      7 runs
[dowdiness/btree] bench btree_benchmark.mbt:108 ("bench: build via from_sorted (10000)") ok
time (mean ± σ)         range (min … max) 
 502.36 µs ±  17.38 µs   475.65 µs … 527.25 µs  in 10 ×    213 runs
[dowdiness/btree] bench btree_benchmark.mbt:115 ("bench: delete_range middle 10% (1000)") ok
time (mean ± σ)         range (min … max) 
  48.95 µs ± 549.05 ns    48.52 µs …  50.20 µs  in 10 ×   1950 runs
[dowdiness/btree] bench btree_benchmark.mbt:124 ("bench: delete_range middle 50% (1000)") ok
time (mean ± σ)         range (min … max) 
  44.03 µs ± 286.54 ns    43.66 µs …  44.48 µs  in 10 ×   2281 runs
[dowdiness/btree] bench btree_benchmark.mbt:133 ("bench: delete_range middle 10% (10000)") ok
time (mean ± σ)         range (min … max) 
 641.91 µs ±   6.67 µs   635.41 µs … 657.69 µs  in 10 ×    158 runs
[dowdiness/btree] bench btree_benchmark.mbt:142 ("bench: delete_range middle 50% (10000)") ok
time (mean ± σ)         range (min … max) 
 646.60 µs ±  10.03 µs   632.79 µs … 661.59 µs  in 10 ×    154 runs
Total tests: 10, passed: 10, failed: 0. [wasm-gc]
node count: 502
node count: 1002
node count: 2502
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:24 ("viewnode serialization (100 defs)") ok
time (mean ± σ)         range (min … max) 
   2.41 ms ±  31.07 µs     2.36 ms …   2.45 ms  in 10 ×     43 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:35 ("viewnode serialization (200 defs)") ok
time (mean ± σ)         range (min … max) 
   6.21 ms ± 241.92 µs     5.89 ms …   6.61 ms  in 10 ×     17 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:46 ("viewnode serialization (500 defs)") ok
time (mean ± σ)         range (min … max) 
  26.37 ms ±   2.69 ms    23.91 ms …  31.19 ms  in 10 ×      4 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:57 ("compute_view_patches (100 defs, single edit)") ok
time (mean ± σ)         range (min … max) 
   1.84 ms ±  98.03 µs     1.74 ms …   2.03 ms  in 10 ×     57 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:98 ("json object - incremental keystroke (20 members)") ok
time (mean ± σ)         range (min … max) 
   1.02 ms ±  66.28 µs   942.98 µs …   1.13 ms  in 10 ×     93 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:103 ("json object - incremental keystroke (100 members)") ok
time (mean ± σ)         range (min … max) 
   4.12 ms ± 180.67 µs     3.94 ms …   4.46 ms  in 10 ×     23 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:108 ("json object - incremental keystroke (500 members)") ok
time (mean ± σ)         range (min … max) 
  27.23 ms ±   1.70 ms    26.05 ms …  31.24 ms  in 10 ×      4 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:113 ("json object - incremental keystroke (1000 members)") ok
time (mean ± σ)         range (min … max) 
  60.81 ms ±   1.49 ms    60.08 ms …  65.03 ms  in 10 ×      2 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:118 ("json array - incremental keystroke (20 elements)") ok
time (mean ± σ)         range (min … max) 
 750.77 µs ± 156.01 µs   527.08 µs … 961.24 µs  in 10 ×    218 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:123 ("json array - incremental keystroke (100 elements)") ok
time (mean ± σ)         range (min … max) 
   1.88 ms ±  52.70 µs     1.80 ms …   1.95 ms  in 10 ×     54 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:128 ("json array - incremental keystroke (500 elements)") ok
time (mean ± σ)         range (min … max) 
  12.65 ms ±  82.15 µs    12.55 ms …  12.81 ms  in 10 ×      8 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:133 ("json array - incremental keystroke (1000 elements)") ok
time (mean ± σ)         range (min … max) 
  33.08 ms ±   3.08 ms    31.73 ms …  41.82 ms  in 10 ×      4 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:38 ("tree refresh unchanged (20 defs)") ok
time (mean ± σ)         range (min … max) 
   6.61 µs ±  81.30 ns     6.55 µs …   6.76 µs  in 10 ×  14775 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:48 ("tree refresh unchanged (80 defs)") ok
time (mean ± σ)         range (min … max) 
  26.69 µs ± 313.56 ns    26.46 µs …  27.39 µs  in 10 ×   3551 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:58 ("tree refresh unchanged (320 defs)") ok
time (mean ± σ)         range (min … max) 
 117.14 µs ± 466.74 ns   116.61 µs … 118.16 µs  in 10 ×    795 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:68 ("tree refresh unchanged (1000 defs)") ok
time (mean ± σ)         range (min … max) 
 461.14 µs ±   2.09 µs   458.48 µs … 464.00 µs  in 10 ×    216 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:80 ("tree refresh 1 changed (20 defs)") ok
time (mean ± σ)         range (min … max) 
  11.65 µs ±  28.96 ns    11.60 µs …  11.69 µs  in 10 ×   8408 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:95 ("tree refresh 1 changed (320 defs)") ok
time (mean ± σ)         range (min … max) 
 218.29 µs ±   1.14 µs   217.20 µs … 220.58 µs  in 10 ×    458 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:110 ("tree refresh 1 changed (1000 defs)") ok
time (mean ± σ)         range (min … max) 
 857.02 µs ±   4.91 µs   852.01 µs … 868.89 µs  in 10 ×    118 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:125 ("tree refresh 1 changed (80 defs)") ok
time (mean ± σ)         range (min … max) 
  47.46 µs ± 101.62 ns    47.35 µs …  47.65 µs  in 10 ×   2106 runs
[dowdiness/canopy] bench projection/reconcile_lcs_benchmark_wbtest.mbt:61 ("reconcile wide-siblings (20 defs)") ok
time (mean ± σ)         range (min … max) 
  11.37 µs ±  25.38 ns    11.35 µs …  11.43 µs  in 10 ×   8788 runs
[dowdiness/canopy] bench projection/reconcile_lcs_benchmark_wbtest.mbt:66 ("reconcile wide-siblings (80 defs)") ok
time (mean ± σ)         range (min … max) 
 102.81 µs ± 196.58 ns   102.58 µs … 103.12 µs  in 10 ×    967 runs
[dowdiness/canopy] bench projection/reconcile_lcs_benchmark_wbtest.mbt:71 ("reconcile wide-siblings (320 defs)") ok
time (mean ± σ)         range (min … max) 
   1.35 ms ±   2.56 µs     1.35 ms …   1.36 ms  in 10 ×     74 runs
[dowdiness/canopy] bench projection/reconcile_lcs_benchmark_wbtest.mbt:76 ("reconcile wide-siblings (1000 defs)") ok
time (mean ± σ)         range (min … max) 
  13.30 ms ±  47.97 µs    13.21 ms …  13.35 ms  in 10 ×      8 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:148 ("fp_incr unchanged (20 defs)") ok
time (mean ± σ)         range (min … max) 
   7.88 µs ± 133.90 ns     7.72 µs …   8.03 µs  in 10 ×  12959 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:157 ("fp_incr unchanged (80 defs)") ok
time (mean ± σ)         range (min … max) 
  47.99 µs ± 118.39 ns    47.86 µs …  48.18 µs  in 10 ×   2091 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:166 ("fp_incr unchanged (320 defs)") ok
time (mean ± σ)         range (min … max) 
 534.15 µs ±  15.16 µs   527.14 µs … 576.15 µs  in 10 ×    190 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:175 ("fp_incr unchanged (1000 defs)") ok
time (mean ± σ)         range (min … max) 
   4.50 ms ±   8.89 µs     4.49 ms …   4.52 ms  in 10 ×     22 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:186 ("fp_incr tail (20 defs)") ok
time (mean ± σ)         range (min … max) 
  15.72 µs ±  28.71 ns    15.67 µs …  15.77 µs  in 10 ×   6338 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:195 ("fp_incr tail (80 defs)") ok
time (mean ± σ)         range (min … max) 
  87.75 µs ± 685.62 ns    86.97 µs …  88.72 µs  in 10 ×   1124 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:204 ("fp_incr tail (320 defs)") ok
time (mean ± σ)         range (min … max) 
 704.30 µs ± 914.98 ns   702.93 µs … 705.89 µs  in 10 ×    143 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:213 ("fp_incr tail (1000 defs)") ok
time (mean ± σ)         range (min … max) 
   5.16 ms ±  68.33 µs     5.11 ms …   5.31 ms  in 10 ×     20 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:224 ("fp_incr shifted (20 defs)") ok
time (mean ± σ)         range (min … max) 
  21.09 µs ±  46.42 ns    21.01 µs …  21.17 µs  in 10 ×   4686 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:230 ("fp_incr shifted (80 defs)") ok
time (mean ± σ)         range (min … max) 
  88.93 µs ± 326.51 ns    88.52 µs …  89.51 µs  in 10 ×   1118 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:236 ("fp_incr shifted (320 defs)") ok
time (mean ± σ)         range (min … max) 
 408.83 µs ±   2.33 µs   406.55 µs … 414.58 µs  in 10 ×    245 runs
[dowdiness/canopy] bench projection/module_projection_incremental_benchmark_wbtest.mbt:242 ("fp_incr shifted (1000 defs)") ok
time (mean ± σ)         range (min … max) 
   1.37 ms ±   5.77 µs     1.36 ms …   1.38 ms  in 10 ×     74 runs
Total tests: 36, passed: 36, failed: 0. [js]
Warning: no test entry found.
Total tests: 0, passed: 0, failed: 0. [native]

event-graph-walker Benchmarks

Base branch:

Registry index updated successfully
Symbols updated successfully
[dowdiness/event-graph-walker] bench internal/branch/branch_merge_benchmark.mbt:21 ("merge - concurrent edits (2 agents x 10)") ok
time (mean ± σ)         range (min … max) 
  19.73 µs ± 574.92 ns    19.22 µs …  21.12 µs  in 10 ×   4786 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_merge_benchmark.mbt:59 ("merge - concurrent edits (2 agents x 50)") ok
time (mean ± σ)         range (min … max) 
 102.20 µs ± 570.20 ns   101.84 µs … 103.75 µs  in 10 ×    980 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_merge_benchmark.mbt:97 ("merge - concurrent edits (2 agents x 200)") ok
time (mean ± σ)         range (min … max) 
 458.49 µs ±   1.54 µs   456.36 µs … 460.64 µs  in 10 ×    218 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_merge_benchmark.mbt:135 ("merge - many agents (5 agents x 20)") ok
time (mean ± σ)         range (min … max) 
 130.22 µs ± 824.23 ns   129.38 µs … 132.23 µs  in 10 ×    761 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_merge_benchmark.mbt:184 ("merge - with deletes (50 inserts, 25 deletes)") ok
time (mean ± σ)         range (min … max) 
  97.67 µs ± 341.45 ns    97.28 µs …  98.24 µs  in 10 ×   1030 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_merge_benchmark.mbt:230 ("merge - graph_diff advance (20 ops)") ok
time (mean ± σ)         range (min … max) 
  65.61 µs ± 214.67 ns    65.40 µs …  65.93 µs  in 10 ×   1488 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_merge_benchmark.mbt:303 ("merge - repeated small (10 iterations x 5 ops)") ok
time (mean ± σ)         range (min … max) 
 100.46 µs ± 135.15 ns   100.27 µs … 100.65 µs  in 10 ×    998 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_merge_benchmark.mbt:341 ("merge - retreat concurrent deletes (500 items, 50 deletes)") ok
time (mean ± σ)         range (min … max) 
 198.78 µs ± 733.61 ns   197.83 µs … 199.94 µs  in 10 ×    500 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_merge_benchmark.mbt:408 ("merge - context apply operations (50 ops)") ok
time (mean ± σ)         range (min … max) 
  35.90 µs ±  15.66 µs    26.22 µs …  72.49 µs  in 10 ×   2248 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:6 ("branch - checkout (10 ops)") ok
time (mean ± σ)         range (min … max) 
   3.55 µs ±  25.43 ns     3.52 µs …   3.60 µs  in 10 ×  27825 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:29 ("branch - checkout (100 ops)") ok
time (mean ± σ)         range (min … max) 
  25.44 µs ±  80.37 ns    25.31 µs …  25.58 µs  in 10 ×   3915 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:47 ("branch - checkout (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 363.14 µs ± 715.43 ns   362.04 µs … 364.35 µs  in 10 ×    276 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:65 ("branch - advance (10 new ops)") ok
time (mean ± σ)         range (min … max) 
  11.01 µs ±   3.99 µs     8.42 µs …  20.56 µs  in 10 ×   9108 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:91 ("branch - advance (100 new ops)") ok
time (mean ± σ)         range (min … max) 
  79.75 µs ±  34.36 µs    56.79 µs … 163.68 µs  in 10 ×   1586 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:117 ("branch - checkout with concurrent branches") ok
time (mean ± σ)         range (min … max) 
  34.07 µs ± 257.32 ns    33.83 µs …  34.67 µs  in 10 ×   2930 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:145 ("branch - checkout with deletes") ok
time (mean ± σ)         range (min … max) 
  33.75 µs ±  99.22 ns    33.58 µs …  33.90 µs  in 10 ×   2975 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:176 ("branch - repeated advance steady-state (10 iterations)") ok
time (mean ± σ)         range (min … max) 
  26.41 µs ±   2.04 µs    24.87 µs …  31.66 µs  in 10 ×   3762 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:220 ("branch - repeated advance with oplog mutations (10 iterations)") ok
time (mean ± σ)         range (min … max) 
   7.30 ms ±   3.91 ms     2.60 ms …  13.50 ms  in 10 ×     72 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:246 ("branch - to_text (100 chars)") ok
time (mean ± σ)         range (min … max) 
  11.37 µs ±  42.60 ns    11.33 µs …  11.46 µs  in 10 ×   8857 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:264 ("branch - to_text (1000 chars)") ok
time (mean ± σ)         range (min … max) 
 118.02 µs ±   1.47 µs   116.75 µs … 120.69 µs  in 10 ×    849 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:285 ("branch - single advance (1 new op)") ok
time (mean ± σ)         range (min … max) 
   3.90 µs ± 386.57 ns     3.65 µs …   4.76 µs  in 10 ×  25491 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:311 ("branch - single advance (50 new ops)") ok
time (mean ± σ)         range (min … max) 
  47.35 µs ±  25.49 µs    30.31 µs …  92.16 µs  in 10 ×   2404 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:342 ("branch - realistic typing (50 chars)") ok
time (mean ± σ)         range (min … max) 
  17.13 ms ±   9.25 ms     6.45 ms …  35.83 ms  in 10 ×     30 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:375 ("branch - concurrent merge scenario") ok
time (mean ± σ)         range (min … max) 
  16.43 µs ±   7.72 µs    11.55 µs …  31.86 µs  in 10 ×   7610 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:6 ("walker - linear history (10 ops)") ok
time (mean ± σ)         range (min … max) 
 644.83 ns ±   6.78 ns   636.59 ns … 654.27 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:22 ("walker - linear history (100 ops)") ok
time (mean ± σ)         range (min … max) 
   4.80 µs ±   3.07 ns     4.80 µs …   4.80 µs  in 10 ×  20792 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:38 ("walker - linear history (1000 ops)") ok
time (mean ± σ)         range (min … max) 
  43.20 µs ± 409.82 ns    42.97 µs …  44.35 µs  in 10 ×   2321 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:54 ("walker - concurrent branches (2 agents x 50)") ok
time (mean ± σ)         range (min … max) 
   5.94 µs ±  13.25 ns     5.92 µs …   5.96 µs  in 10 ×  16885 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:79 ("walker - concurrent branches (5 agents x 20)") ok
time (mean ± σ)         range (min … max) 
   5.97 µs ±   7.38 ns     5.96 µs …   5.98 µs  in 10 ×  16761 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:99 ("walker - diamond pattern (50 diamonds)") ok
time (mean ± σ)         range (min … max) 
   7.92 µs ±  10.31 ns     7.91 µs …   7.94 µs  in 10 ×  12627 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:121 ("walker - diff advance only (10 new ops)") ok
time (mean ± σ)         range (min … max) 
   3.36 µs ±   7.17 ns     3.34 µs …   3.37 µs  in 10 ×  29650 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:145 ("walker - diff with concurrent branches") ok
time (mean ± σ)         range (min … max) 
   5.46 µs ±  15.01 ns     5.45 µs …   5.49 µs  in 10 ×  18306 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:176 ("walker - large history (10000 ops)") ok
time (mean ± σ)         range (min … max) 
 446.76 µs ± 382.90 ns   446.15 µs … 447.51 µs  in 10 ×    224 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:196 ("walker - linear history (100000 ops)") ok
time (mean ± σ)         range (min … max) 
   6.80 ms ±  67.09 µs     6.71 ms …   6.91 ms  in 10 ×     15 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:213 ("walker - concurrent branches (100000 ops, 5 agents)") ok
time (mean ± σ)         range (min … max) 
  22.90 ms ±   3.27 ms    19.98 ms …  27.80 ms  in 10 ×      5 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:6 ("version_vector - create (1 agent)") ok
time (mean ± σ)         range (min … max) 
  51.02 ns ±   0.49 ns    50.22 ns …  51.62 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:15 ("version_vector - create (5 agents)") ok
time (mean ± σ)         range (min … max) 
 140.44 ns ±   0.45 ns   139.72 ns … 140.98 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:29 ("version_vector - create (20 agents)") ok
time (mean ± σ)         range (min … max) 
   1.13 µs ±   2.23 ns     1.12 µs …   1.13 µs  in 10 ×  88464 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:42 ("version_vector - compare equal (5 agents)") ok
time (mean ± σ)         range (min … max) 
 170.63 ns ±   0.92 ns   170.00 ns … 172.72 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:63 ("version_vector - compare <= (5 agents)") ok
time (mean ± σ)         range (min … max) 
 118.87 ns ±   0.56 ns   118.26 ns … 119.74 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:84 ("version_vector - compare <= (20 agents)") ok
time (mean ± σ)         range (min … max) 
 468.51 ns ±   1.05 ns   467.20 ns … 470.19 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:100 ("version_vector - merge (5 agents)") ok
time (mean ± σ)         range (min … max) 
 200.93 ns ±   0.42 ns   200.37 ns … 201.48 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:118 ("version_vector - merge (20 agents)") ok
time (mean ± σ)         range (min … max) 
   1.28 µs ±   4.74 ns     1.27 µs …   1.29 µs  in 10 ×  78861 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:134 ("version_vector - includes (5 agents)") ok
time (mean ± σ)         range (min … max) 
 142.07 ns ±   0.65 ns   141.17 ns … 143.11 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:153 ("version_vector - concurrent (5 agents)") ok
time (mean ± σ)         range (min … max) 
 120.91 ns ±   0.57 ns   120.14 ns … 121.83 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:170 ("version_vector - from_frontier (10 ops)") ok
time (mean ± σ)         range (min … max) 
 599.58 ns ±   1.18 ns   598.16 ns … 601.81 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:186 ("version_vector - from_frontier (100 ops, 5 agents)") ok
time (mean ± σ)         range (min … max) 
   4.71 µs ±  28.59 ns     4.69 µs …   4.79 µs  in 10 ×  21270 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:206 ("version_vector - to_frontier (5 agents)") ok
time (mean ± σ)         range (min … max) 
 194.58 ns ±   0.39 ns   193.97 ns … 195.11 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:230 ("version_vector - roundtrip (5 agents)") ok
time (mean ± σ)         range (min … max) 
   4.90 µs ±  21.05 ns     4.89 µs …   4.96 µs  in 10 ×  20402 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:251 ("version_vector - agents (5 agents)") ok
time (mean ± σ)         range (min … max) 
  65.49 ns ±   0.65 ns    64.46 ns …  66.35 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:266 ("version_vector - length (20 agents)") ok
time (mean ± σ)         range (min … max) 
  12.58 ns ±   0.38 ns    12.19 ns …  13.23 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/document/document_benchmark.mbt:20 ("bench: cache invalidate + position query (1000 chars)") ok
time (mean ± σ)         range (min … max) 
 186.15 µs ±   1.80 µs   183.69 µs … 189.51 µs  in 10 ×    494 runs
[dowdiness/event-graph-walker] bench internal/document/document_benchmark.mbt:31 ("bench: cache invalidate + position query (5000 chars)") ok
time (mean ± σ)         range (min … max) 
   2.83 ms ±  61.25 µs     2.77 ms …   2.95 ms  in 10 ×     35 runs
[dowdiness/event-graph-walker] bench internal/document/document_benchmark.mbt:41 ("bench: cache invalidate + position query (10000 chars)") ok
time (mean ± σ)         range (min … max) 
   9.27 ms ± 224.72 µs     9.04 ms …   9.66 ms  in 10 ×     11 runs
[dowdiness/event-graph-walker] bench internal/document/document_benchmark.mbt:57 ("bench: 10 remote inserts + queries (1000-char doc)") ok
time (mean ± σ)         range (min … max) 
   3.34 ms ±  39.56 µs     3.29 ms …   3.40 ms  in 10 ×     29 runs
[dowdiness/event-graph-walker] bench internal/document/document_benchmark.mbt:84 ("bench: 10 remote inserts + queries (5000-char doc)") ok
time (mean ± σ)         range (min … max) 
  29.83 ms ± 821.54 µs    29.04 ms …  31.21 ms  in 10 ×      4 runs
[dowdiness/event-graph-walker] bench internal/document/document_benchmark.mbt:113 ("bench: warm cache position query (1000 chars)") ok
time (mean ± σ)         range (min … max) 
  91.80 ns ±   0.56 ns    91.33 ns …  93.06 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/document/document_benchmark.mbt:120 ("bench: warm cache position query (10000 chars)") ok
time (mean ± σ)         range (min … max) 
  91.48 ns ±   0.36 ns    91.08 ns …  92.05 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/fugue/tree_position_benchmark.mbt:20 ("bench: lv_to_position middle of 10K tree") ok
time (mean ± σ)         range (min … max) 
 551.77 µs ±   2.39 µs   547.02 µs … 554.39 µs  in 10 ×    182 runs
[dowdiness/event-graph-walker] bench internal/fugue/jump_ancestors_benchmark.mbt:2 ("jump - sequential append 1K") ok
time (mean ± σ)         range (min … max) 
 151.88 µs ± 782.89 ns   150.86 µs … 153.10 µs  in 10 ×    658 runs
[dowdiness/event-graph-walker] bench internal/fugue/jump_ancestors_benchmark.mbt:26 ("jump - concurrent insert into 1K doc") ok
time (mean ± σ)         range (min … max) 
 149.47 µs ± 408.22 ns   148.63 µs … 150.02 µs  in 10 ×    667 runs
[dowdiness/event-graph-walker] bench internal/fugue/jump_ancestors_benchmark.mbt:58 ("jump - concurrent insert into 10K doc") ok
time (mean ± σ)         range (min … max) 
   4.28 ms ± 102.06 µs     4.16 ms …   4.45 ms  in 10 ×     24 runs
[dowdiness/event-graph-walker] bench internal/fugue/jump_ancestors_benchmark.mbt:90 ("jump - degenerate chain remote insert") ok
time (mean ± σ)         range (min … max) 
 149.77 µs ± 389.94 ns   149.13 µs … 150.30 µs  in 10 ×    664 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:6 ("oplog - insert (100 ops)") ok
time (mean ± σ)         range (min … max) 
  44.97 µs ± 948.08 ns    44.31 µs …  47.55 µs  in 10 ×   2186 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:20 ("oplog - insert (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 519.53 µs ±   1.43 µs   517.41 µs … 521.00 µs  in 10 ×    193 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:34 ("oplog - insert and delete mix (100 ops)") ok
time (mean ± σ)         range (min … max) 
  62.64 µs ± 198.09 ns    62.28 µs …  62.91 µs  in 10 ×   1595 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:58 ("oplog - apply_remote (50 ops)") ok
time (mean ± σ)         range (min … max) 
  29.60 µs ±  76.38 ns    29.50 µs …  29.76 µs  in 10 ×   3395 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:79 ("oplog - get_op (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 121.61 ns ±   0.36 ns   121.05 ns … 122.04 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:97 ("oplog - get_frontier (single agent)") ok
time (mean ± σ)         range (min … max) 
  23.10 ns ±   0.33 ns    22.66 ns …  23.51 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:112 ("oplog - get_frontier (5 agents)") ok
time (mean ± σ)         range (min … max) 
  24.67 ns ±   0.23 ns    24.28 ns …  25.07 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:134 ("oplog - walk_and_collect (100 ops)") ok
time (mean ± σ)         range (min … max) 
   8.30 µs ±  70.98 ns     8.24 µs …   8.44 µs  in 10 ×  11641 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:150 ("oplog - walk_and_collect (concurrent)") ok
time (mean ± σ)         range (min … max) 
  15.56 µs ±  99.17 ns    15.40 µs …  15.69 µs  in 10 ×   6278 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:177 ("oplog - diff_and_collect (advance 20)") ok
time (mean ± σ)         range (min … max) 
   4.81 µs ±   9.98 ns     4.79 µs …   4.82 µs  in 10 ×  20848 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:202 ("oplog - walk_filtered (inserts only)") ok
time (mean ± σ)         range (min … max) 
   7.23 µs ±  30.11 ns     7.20 µs …   7.28 µs  in 10 ×  14373 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:233 ("oplog - sequential typing (500 chars)") ok
time (mean ± σ)         range (min … max) 
 242.60 µs ± 798.90 ns   241.68 µs … 243.89 µs  in 10 ×    413 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:249 ("oplog - random position inserts (100 ops)") ok
time (mean ± σ)         range (min … max) 
  43.41 µs ± 294.43 ns    42.98 µs …  43.81 µs  in 10 ×   2314 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:270 ("oplog - sequential typing (100000 chars)") ok
time (mean ± σ)         range (min … max) 
 152.77 ms ±  24.03 ms   122.09 ms … 183.44 ms  in 10 ×      1 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:287 ("oplog - diff_and_collect (100000 ops advance)") ok
time (mean ± σ)         range (min … max) 
  56.63 ms ±  13.26 ms    40.46 ms …  69.70 ms  in 10 ×      2 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:10 ("text - insert append (100 chars)") ok
time (mean ± σ)         range (min … max) 
  95.36 µs ± 343.60 ns    94.89 µs …  95.90 µs  in 10 ×    943 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:22 ("text - insert append (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   1.28 ms ±   6.98 µs     1.27 ms …   1.29 ms  in 10 ×     79 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:35 ("text - insert prepend (100 chars)") ok
time (mean ± σ)         range (min … max) 
 155.20 µs ± 481.12 ns   154.65 µs … 155.82 µs  in 10 ×    641 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:51 ("text - delete (100 deletes from 100-char doc)") ok
time (mean ± σ)         range (min … max) 
 234.16 µs ± 502.71 ns   233.48 µs … 234.96 µs  in 10 ×    425 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:70 ("text - text() (100-char doc)") ok
time (mean ± σ)         range (min … max) 
  14.04 µs ±  94.52 ns    13.93 µs …  14.16 µs  in 10 ×   7157 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:83 ("text - text() (1000-char doc)") ok
time (mean ± σ)         range (min … max) 
 145.20 µs ± 517.56 ns   144.33 µs … 145.87 µs  in 10 ×    686 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:96 ("text - len() (1000-char doc)") ok
time (mean ± σ)         range (min … max) 
  12.55 ns ±   0.29 ns    12.15 ns …  13.05 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:113 ("text - sync export_all (100 ops)") ok
time (mean ± σ)         range (min … max) 
  93.62 ns ±   0.52 ns    93.11 ns …  94.84 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:126 ("text - sync export_all (1000 ops)") ok
time (mean ± σ)         range (min … max) 
  92.84 ns ±   0.34 ns    92.33 ns …  93.26 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:139 ("text - sync export_since (50-op delta, 1000-op base)") ok
time (mean ± σ)         range (min … max) 
  32.62 µs ± 178.40 ns    32.38 µs …  32.84 µs  in 10 ×   3042 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:156 ("text - sync apply (50 remote ops)") ok
time (mean ± σ)         range (min … max) 
  47.91 µs ± 451.04 ns    47.43 µs …  48.97 µs  in 10 ×   2095 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:171 ("text - sync apply (500 remote ops)") ok
time (mean ± σ)         range (min … max) 
 601.86 µs ±   2.56 µs   598.19 µs … 605.43 µs  in 10 ×    166 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:186 ("text - bidirectional sync (2 peers, 50 ops each)") ok
time (mean ± σ)         range (min … max) 
  99.88 µs ± 287.49 ns    99.59 µs … 100.56 µs  in 10 ×   1005 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:216 ("text - checkout (midpoint of 100-op doc)") ok
time (mean ± σ)         range (min … max) 
  12.73 µs ±  48.12 ns    12.66 µs …  12.80 µs  in 10 ×   7833 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:233 ("text - checkout (midpoint of 1000-op doc)") ok
time (mean ± σ)         range (min … max) 
 157.44 µs ± 378.40 ns   156.90 µs … 157.98 µs  in 10 ×    635 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:256 ("text - undo record_insert (100 ops, 1 group)") ok
time (mean ± σ)         range (min … max) 
   2.07 µs ±   2.23 ns     2.07 µs …   2.07 µs  in 10 ×  48160 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:269 ("text - undo record_insert (100 ops, 100 groups)") ok
time (mean ± σ)         range (min … max) 
   2.45 µs ±  12.96 ns     2.42 µs …   2.46 µs  in 10 ×  40976 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:281 ("text - undo undo() (10-op group)") ok
time (mean ± σ)         range (min … max) 
  28.81 µs ± 125.35 ns    28.65 µs …  28.98 µs  in 10 ×   3429 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:295 ("text - undo undo() (50-op group)") ok
time (mean ± σ)         range (min … max) 
 458.38 µs ±   1.34 µs   456.71 µs … 460.77 µs  in 10 ×    216 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:309 ("text - undo undo+redo roundtrip (10-op group)") ok
time (mean ± σ)         range (min … max) 
  32.57 µs ± 113.02 ns    32.46 µs …  32.81 µs  in 10 ×   3082 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:324 ("text - undo 10 undo+redo cycles (10-op group)") ok
time (mean ± σ)         range (min … max) 
 280.20 µs ±   1.19 µs   278.89 µs … 282.25 µs  in 10 ×    357 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:17 ("cache - sequential append (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   1.29 ms ±   4.67 µs     1.28 ms …   1.30 ms  in 10 ×     78 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:34 ("cache - alternating pos (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   2.97 ms ±  52.89 µs     2.94 ms …   3.11 ms  in 10 ×     34 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:52 ("cache - jump to pos 0 every 10 chars (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   1.91 ms ±   8.85 µs     1.90 ms …   1.93 ms  in 10 ×     52 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:71 ("cache - jump to middle every 10 chars (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   2.51 ms ±  16.07 µs     2.49 ms …   2.55 ms  in 10 ×     40 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:94 ("cache - single non-seq insert on 1000-char doc") ok
time (mean ± σ)         range (min … max) 
   7.40 µs ±   2.13 µs     6.02 µs …  11.77 µs  in 10 ×  14823 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:108 ("cache - single non-seq insert on 5000-char doc") ok
time (mean ± σ)         range (min … max) 
   6.75 µs ±   1.04 µs     5.91 µs …   9.57 µs  in 10 ×  17759 runs
Total tests: 105, passed: 105, failed: 0.

PR branch:

Registry index updated successfully
Symbols updated successfully
Using cached moonbitlang/quickcheck@0.11.2
Downloading dowdiness/alga@0.3.0
Downloading dowdiness/btree@0.1.0
Downloading dowdiness/order-tree@0.1.0
Using cached dowdiness/rle@0.2.0
[dowdiness/event-graph-walker] bench internal/branch/branch_merge_benchmark.mbt:21 ("merge - concurrent edits (2 agents x 10)") ok
time (mean ± σ)         range (min … max) 
  19.92 µs ± 548.54 ns    19.45 µs …  21.23 µs  in 10 ×   4901 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_merge_benchmark.mbt:59 ("merge - concurrent edits (2 agents x 50)") ok
time (mean ± σ)         range (min … max) 
 102.51 µs ± 287.30 ns   102.00 µs … 102.93 µs  in 10 ×    959 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_merge_benchmark.mbt:97 ("merge - concurrent edits (2 agents x 200)") ok
time (mean ± σ)         range (min … max) 
 455.02 µs ±   1.27 µs   453.11 µs … 456.68 µs  in 10 ×    218 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_merge_benchmark.mbt:135 ("merge - many agents (5 agents x 20)") ok
time (mean ± σ)         range (min … max) 
 130.38 µs ± 513.40 ns   129.71 µs … 131.26 µs  in 10 ×    769 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_merge_benchmark.mbt:184 ("merge - with deletes (50 inserts, 25 deletes)") ok
time (mean ± σ)         range (min … max) 
  96.71 µs ± 382.18 ns    96.20 µs …  97.43 µs  in 10 ×   1022 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_merge_benchmark.mbt:230 ("merge - graph_diff advance (20 ops)") ok
time (mean ± σ)         range (min … max) 
  65.11 µs ± 208.42 ns    64.85 µs …  65.45 µs  in 10 ×   1539 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_merge_benchmark.mbt:303 ("merge - repeated small (10 iterations x 5 ops)") ok
time (mean ± σ)         range (min … max) 
 100.23 µs ± 115.73 ns   100.04 µs … 100.39 µs  in 10 ×    993 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_merge_benchmark.mbt:341 ("merge - retreat concurrent deletes (500 items, 50 deletes)") ok
time (mean ± σ)         range (min … max) 
 198.44 µs ± 445.66 ns   197.84 µs … 199.42 µs  in 10 ×    498 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_merge_benchmark.mbt:408 ("merge - context apply operations (50 ops)") ok
time (mean ± σ)         range (min … max) 
  43.25 µs ±  24.74 µs    26.29 µs …  87.60 µs  in 10 ×   2588 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:6 ("branch - checkout (10 ops)") ok
time (mean ± σ)         range (min … max) 
   3.65 µs ±  21.91 ns     3.63 µs …   3.69 µs  in 10 ×  27282 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:29 ("branch - checkout (100 ops)") ok
time (mean ± σ)         range (min … max) 
  25.25 µs ±  49.78 ns    25.19 µs …  25.33 µs  in 10 ×   3950 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:47 ("branch - checkout (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 391.41 µs ±   2.52 µs   387.56 µs … 395.68 µs  in 10 ×    256 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:65 ("branch - advance (10 new ops)") ok
time (mean ± σ)         range (min … max) 
  12.21 µs ±   4.24 µs     8.57 µs …  19.38 µs  in 10 ×   8619 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:91 ("branch - advance (100 new ops)") ok
time (mean ± σ)         range (min … max) 
  94.80 µs ±  65.02 µs    56.38 µs … 238.93 µs  in 10 ×   1230 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:117 ("branch - checkout with concurrent branches") ok
time (mean ± σ)         range (min … max) 
  33.07 µs ± 130.77 ns    32.92 µs …  33.33 µs  in 10 ×   3029 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:145 ("branch - checkout with deletes") ok
time (mean ± σ)         range (min … max) 
  35.50 µs ± 631.93 ns    35.10 µs …  37.25 µs  in 10 ×   2344 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:176 ("branch - repeated advance steady-state (10 iterations)") ok
time (mean ± σ)         range (min … max) 
  26.94 µs ± 474.90 ns    26.43 µs …  27.92 µs  in 10 ×   3723 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:220 ("branch - repeated advance with oplog mutations (10 iterations)") ok
time (mean ± σ)         range (min … max) 
   7.07 ms ±   3.56 ms     2.61 ms …  12.62 ms  in 10 ×     70 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:246 ("branch - to_text (100 chars)") ok
time (mean ± σ)         range (min … max) 
  11.32 µs ±  77.90 ns    11.25 µs …  11.46 µs  in 10 ×   8795 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:264 ("branch - to_text (1000 chars)") ok
time (mean ± σ)         range (min … max) 
 120.78 µs ± 524.76 ns   120.13 µs … 121.97 µs  in 10 ×    829 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:285 ("branch - single advance (1 new op)") ok
time (mean ± σ)         range (min … max) 
   4.04 µs ± 234.78 ns     3.85 µs …   4.53 µs  in 10 ×  25250 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:311 ("branch - single advance (50 new ops)") ok
time (mean ± σ)         range (min … max) 
  51.79 µs ±  29.14 µs    29.31 µs … 112.30 µs  in 10 ×   2730 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:342 ("branch - realistic typing (50 chars)") ok
time (mean ± σ)         range (min … max) 
  19.30 ms ±   5.77 ms    10.44 ms …  26.69 ms  in 10 ×     19 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:375 ("branch - concurrent merge scenario") ok
time (mean ± σ)         range (min … max) 
  13.81 µs ±   4.23 µs    11.50 µs …  25.53 µs  in 10 ×   7718 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:6 ("walker - linear history (10 ops)") ok
time (mean ± σ)         range (min … max) 
 634.32 ns ±   9.40 ns   623.04 ns … 646.37 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:22 ("walker - linear history (100 ops)") ok
time (mean ± σ)         range (min … max) 
   4.88 µs ±   6.01 ns     4.88 µs …   4.90 µs  in 10 ×  20460 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:38 ("walker - linear history (1000 ops)") ok
time (mean ± σ)         range (min … max) 
  42.97 µs ± 327.16 ns    42.79 µs …  43.86 µs  in 10 ×   2334 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:54 ("walker - concurrent branches (2 agents x 50)") ok
time (mean ± σ)         range (min … max) 
   5.96 µs ±   7.98 ns     5.95 µs …   5.97 µs  in 10 ×  16708 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:79 ("walker - concurrent branches (5 agents x 20)") ok
time (mean ± σ)         range (min … max) 
   5.96 µs ±  34.69 ns     5.93 µs …   6.05 µs  in 10 ×  16802 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:99 ("walker - diamond pattern (50 diamonds)") ok
time (mean ± σ)         range (min … max) 
   7.97 µs ±  15.75 ns     7.95 µs …   8.00 µs  in 10 ×  12551 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:121 ("walker - diff advance only (10 new ops)") ok
time (mean ± σ)         range (min … max) 
   3.38 µs ±   8.38 ns     3.37 µs …   3.39 µs  in 10 ×  28723 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:145 ("walker - diff with concurrent branches") ok
time (mean ± σ)         range (min … max) 
   5.47 µs ±  21.79 ns     5.45 µs …   5.52 µs  in 10 ×  18360 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:176 ("walker - large history (10000 ops)") ok
time (mean ± σ)         range (min … max) 
 450.60 µs ± 732.52 ns   449.88 µs … 451.98 µs  in 10 ×    222 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:196 ("walker - linear history (100000 ops)") ok
time (mean ± σ)         range (min … max) 
   6.69 ms ±  37.65 µs     6.65 ms …   6.75 ms  in 10 ×     15 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:213 ("walker - concurrent branches (100000 ops, 5 agents)") ok
time (mean ± σ)         range (min … max) 
  23.72 ms ±   3.04 ms    21.34 ms …  29.57 ms  in 10 ×      4 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:6 ("version_vector - create (1 agent)") ok
time (mean ± σ)         range (min … max) 
  51.10 ns ±   0.53 ns    50.34 ns …  51.94 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:15 ("version_vector - create (5 agents)") ok
time (mean ± σ)         range (min … max) 
 140.80 ns ±   0.43 ns   139.96 ns … 141.33 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:29 ("version_vector - create (20 agents)") ok
time (mean ± σ)         range (min … max) 
   1.13 µs ±   1.68 ns     1.13 µs …   1.13 µs  in 10 ×  88408 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:42 ("version_vector - compare equal (5 agents)") ok
time (mean ± σ)         range (min … max) 
 169.80 ns ±   0.57 ns   168.95 ns … 171.05 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:63 ("version_vector - compare <= (5 agents)") ok
time (mean ± σ)         range (min … max) 
 124.69 ns ±   0.56 ns   123.90 ns … 125.43 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:84 ("version_vector - compare <= (20 agents)") ok
time (mean ± σ)         range (min … max) 
 467.99 ns ±   0.65 ns   467.17 ns … 469.09 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:100 ("version_vector - merge (5 agents)") ok
time (mean ± σ)         range (min … max) 
 202.06 ns ±   0.33 ns   201.44 ns … 202.61 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:118 ("version_vector - merge (20 agents)") ok
time (mean ± σ)         range (min … max) 
   1.28 µs ±   3.00 ns     1.28 µs …   1.29 µs  in 10 ×  77906 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:134 ("version_vector - includes (5 agents)") ok
time (mean ± σ)         range (min … max) 
 141.20 ns ±   0.72 ns   140.54 ns … 142.36 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:153 ("version_vector - concurrent (5 agents)") ok
time (mean ± σ)         range (min … max) 
 120.47 ns ±   0.52 ns   119.93 ns … 121.47 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:170 ("version_vector - from_frontier (10 ops)") ok
time (mean ± σ)         range (min … max) 
 575.46 ns ±   0.90 ns   574.30 ns … 576.72 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:186 ("version_vector - from_frontier (100 ops, 5 agents)") ok
time (mean ± σ)         range (min … max) 
   4.68 µs ±   4.87 ns     4.68 µs …   4.69 µs  in 10 ×  21283 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:206 ("version_vector - to_frontier (5 agents)") ok
time (mean ± σ)         range (min … max) 
 194.10 ns ±   0.77 ns   193.11 ns … 195.47 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:230 ("version_vector - roundtrip (5 agents)") ok
time (mean ± σ)         range (min … max) 
   4.90 µs ±   8.71 ns     4.89 µs …   4.91 µs  in 10 ×  20397 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:251 ("version_vector - agents (5 agents)") ok
time (mean ± σ)         range (min … max) 
  66.14 ns ±   0.65 ns    65.12 ns …  67.14 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:266 ("version_vector - length (20 agents)") ok
time (mean ± σ)         range (min … max) 
  12.45 ns ±   0.51 ns    12.10 ns …  13.42 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/document/document_benchmark.mbt:20 ("bench: cache invalidate + position query (1000 chars)") ok
time (mean ± σ)         range (min … max) 
 185.88 µs ± 927.83 ns   184.24 µs … 186.82 µs  in 10 ×    499 runs
[dowdiness/event-graph-walker] bench internal/document/document_benchmark.mbt:31 ("bench: cache invalidate + position query (5000 chars)") ok
time (mean ± σ)         range (min … max) 
   2.89 ms ±  62.29 µs     2.82 ms …   2.98 ms  in 10 ×     35 runs
[dowdiness/event-graph-walker] bench internal/document/document_benchmark.mbt:41 ("bench: cache invalidate + position query (10000 chars)") ok
time (mean ± σ)         range (min … max) 
   9.40 ms ± 262.05 µs     9.11 ms …   9.86 ms  in 10 ×     11 runs
[dowdiness/event-graph-walker] bench internal/document/document_benchmark.mbt:57 ("bench: 10 remote inserts + queries (1000-char doc)") ok
time (mean ± σ)         range (min … max) 
   3.32 ms ±  42.13 µs     3.26 ms …   3.37 ms  in 10 ×     28 runs
[dowdiness/event-graph-walker] bench internal/document/document_benchmark.mbt:84 ("bench: 10 remote inserts + queries (5000-char doc)") ok
time (mean ± σ)         range (min … max) 
  30.04 ms ± 681.66 µs    29.25 ms …  31.15 ms  in 10 ×      4 runs
[dowdiness/event-graph-walker] bench internal/document/document_benchmark.mbt:113 ("bench: warm cache position query (1000 chars)") ok
time (mean ± σ)         range (min … max) 
  93.04 ns ±   0.79 ns    92.25 ns …  94.64 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/document/document_benchmark.mbt:120 ("bench: warm cache position query (10000 chars)") ok
time (mean ± σ)         range (min … max) 
  92.75 ns ±   0.29 ns    92.32 ns …  93.17 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/fugue/tree_position_benchmark.mbt:20 ("bench: lv_to_position middle of 10K tree") ok
time (mean ± σ)         range (min … max) 
 534.92 µs ±   2.03 µs   531.39 µs … 538.20 µs  in 10 ×    188 runs
[dowdiness/event-graph-walker] bench internal/fugue/jump_ancestors_benchmark.mbt:2 ("jump - sequential append 1K") ok
time (mean ± σ)         range (min … max) 
 151.88 µs ± 770.16 ns   150.96 µs … 153.00 µs  in 10 ×    654 runs
[dowdiness/event-graph-walker] bench internal/fugue/jump_ancestors_benchmark.mbt:26 ("jump - concurrent insert into 1K doc") ok
time (mean ± σ)         range (min … max) 
 148.69 µs ± 432.89 ns   148.00 µs … 149.54 µs  in 10 ×    674 runs
[dowdiness/event-graph-walker] bench internal/fugue/jump_ancestors_benchmark.mbt:58 ("jump - concurrent insert into 10K doc") ok
time (mean ± σ)         range (min … max) 
   4.27 ms ±  48.76 µs     4.22 ms …   4.38 ms  in 10 ×     23 runs
[dowdiness/event-graph-walker] bench internal/fugue/jump_ancestors_benchmark.mbt:90 ("jump - degenerate chain remote insert") ok
time (mean ± σ)         range (min … max) 
 149.50 µs ± 825.88 ns   148.83 µs … 151.61 µs  in 10 ×    671 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:6 ("oplog - insert (100 ops)") ok
time (mean ± σ)         range (min … max) 
  42.41 µs ± 816.79 ns    41.83 µs …  44.68 µs  in 10 ×   2305 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:20 ("oplog - insert (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 494.34 µs ±   1.10 µs   492.71 µs … 496.15 µs  in 10 ×    203 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:34 ("oplog - insert and delete mix (100 ops)") ok
time (mean ± σ)         range (min … max) 
  60.65 µs ±  96.53 ns    60.50 µs …  60.83 µs  in 10 ×   1646 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:58 ("oplog - apply_remote (50 ops)") ok
time (mean ± σ)         range (min … max) 
  28.99 µs ±  72.99 ns    28.89 µs …  29.13 µs  in 10 ×   3457 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:79 ("oplog - get_op (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 147.48 ns ±   2.68 ns   146.01 ns … 154.92 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:97 ("oplog - get_frontier (single agent)") ok
time (mean ± σ)         range (min … max) 
  20.23 ns ±   0.26 ns    19.92 ns …  20.63 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:112 ("oplog - get_frontier (5 agents)") ok
time (mean ± σ)         range (min … max) 
  24.60 ns ±   0.28 ns    24.11 ns …  25.02 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:134 ("oplog - walk_and_collect (100 ops)") ok
time (mean ± σ)         range (min … max) 
   8.30 µs ±  61.28 ns     8.22 µs …   8.41 µs  in 10 ×  11728 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:150 ("oplog - walk_and_collect (concurrent)") ok
time (mean ± σ)         range (min … max) 
  15.69 µs ±  63.48 ns    15.59 µs …  15.76 µs  in 10 ×   6303 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:177 ("oplog - diff_and_collect (advance 20)") ok
time (mean ± σ)         range (min … max) 
   4.80 µs ±  14.74 ns     4.77 µs …   4.81 µs  in 10 ×  20759 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:202 ("oplog - walk_filtered (inserts only)") ok
time (mean ± σ)         range (min … max) 
   7.26 µs ±  31.26 ns     7.23 µs …   7.33 µs  in 10 ×  14229 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:233 ("oplog - sequential typing (500 chars)") ok
time (mean ± σ)         range (min … max) 
 229.36 µs ±   1.17 µs   228.11 µs … 232.46 µs  in 10 ×    437 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:249 ("oplog - random position inserts (100 ops)") ok
time (mean ± σ)         range (min … max) 
  41.17 µs ±  64.47 ns    41.09 µs …  41.28 µs  in 10 ×   2436 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:270 ("oplog - sequential typing (100000 chars)") ok
time (mean ± σ)         range (min … max) 
 150.38 ms ±  22.06 ms   120.07 ms … 173.05 ms  in 10 ×      1 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:287 ("oplog - diff_and_collect (100000 ops advance)") ok
time (mean ± σ)         range (min … max) 
  59.78 ms ±  18.15 ms    38.38 ms …  78.94 ms  in 10 ×      2 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:10 ("text - insert append (100 chars)") ok
time (mean ± σ)         range (min … max) 
  91.91 µs ± 720.11 ns    91.25 µs …  93.78 µs  in 10 ×    980 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:22 ("text - insert append (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   1.24 ms ±   7.41 µs     1.23 ms …   1.25 ms  in 10 ×     81 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:35 ("text - insert prepend (100 chars)") ok
time (mean ± σ)         range (min … max) 
 152.40 µs ± 528.10 ns   151.63 µs … 153.41 µs  in 10 ×    653 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:51 ("text - delete (100 deletes from 100-char doc)") ok
time (mean ± σ)         range (min … max) 
 227.06 µs ± 508.58 ns   226.42 µs … 227.77 µs  in 10 ×    439 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:70 ("text - text() (100-char doc)") ok
time (mean ± σ)         range (min … max) 
  14.00 µs ±  79.64 ns    13.90 µs …  14.13 µs  in 10 ×   7105 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:83 ("text - text() (1000-char doc)") ok
time (mean ± σ)         range (min … max) 
 142.92 µs ± 307.23 ns   142.51 µs … 143.29 µs  in 10 ×    698 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:96 ("text - len() (1000-char doc)") ok
time (mean ± σ)         range (min … max) 
  12.49 ns ±   0.38 ns    12.17 ns …  13.13 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:113 ("text - sync export_all (100 ops)") ok
time (mean ± σ)         range (min … max) 
  94.62 ns ±   0.43 ns    94.07 ns …  95.34 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:126 ("text - sync export_all (1000 ops)") ok
time (mean ± σ)         range (min … max) 
  94.09 ns ±   0.44 ns    93.55 ns …  95.07 ns  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:139 ("text - sync export_since (50-op delta, 1000-op base)") ok
time (mean ± σ)         range (min … max) 
  33.00 µs ± 295.06 ns    32.70 µs …  33.61 µs  in 10 ×   3007 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:156 ("text - sync apply (50 remote ops)") ok
time (mean ± σ)         range (min … max) 
  47.70 µs ± 274.17 ns    47.31 µs …  48.08 µs  in 10 ×   2082 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:171 ("text - sync apply (500 remote ops)") ok
time (mean ± σ)         range (min … max) 
 598.40 µs ±   5.35 µs   591.62 µs … 607.00 µs  in 10 ×    167 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:186 ("text - bidirectional sync (2 peers, 50 ops each)") ok
time (mean ± σ)         range (min … max) 
  99.65 µs ± 758.07 ns    99.05 µs … 101.04 µs  in 10 ×   1002 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:216 ("text - checkout (midpoint of 100-op doc)") ok
time (mean ± σ)         range (min … max) 
  12.75 µs ±  69.79 ns    12.68 µs …  12.86 µs  in 10 ×   7786 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:233 ("text - checkout (midpoint of 1000-op doc)") ok
time (mean ± σ)         range (min … max) 
 157.84 µs ± 278.27 ns   157.32 µs … 158.12 µs  in 10 ×    633 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:256 ("text - undo record_insert (100 ops, 1 group)") ok
time (mean ± σ)         range (min … max) 
   2.08 µs ±   4.02 ns     2.08 µs …   2.09 µs  in 10 ×  48063 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:269 ("text - undo record_insert (100 ops, 100 groups)") ok
time (mean ± σ)         range (min … max) 
   2.50 µs ±  27.14 ns     2.48 µs …   2.55 µs  in 10 ×  40342 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:281 ("text - undo undo() (10-op group)") ok
time (mean ± σ)         range (min … max) 
  28.65 µs ±  78.50 ns    28.57 µs …  28.79 µs  in 10 ×   3482 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:295 ("text - undo undo() (50-op group)") ok
time (mean ± σ)         range (min … max) 
 458.73 µs ±   1.01 µs   457.04 µs … 460.19 µs  in 10 ×    218 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:309 ("text - undo undo+redo roundtrip (10-op group)") ok
time (mean ± σ)         range (min … max) 
  32.65 µs ±  84.86 ns    32.54 µs …  32.81 µs  in 10 ×   3070 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:324 ("text - undo 10 undo+redo cycles (10-op group)") ok
time (mean ± σ)         range (min … max) 
 279.26 µs ± 878.77 ns   278.14 µs … 280.37 µs  in 10 ×    358 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:17 ("cache - sequential append (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   1.25 ms ±   8.35 µs     1.24 ms …   1.26 ms  in 10 ×     80 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:34 ("cache - alternating pos (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   2.93 ms ±  17.46 µs     2.91 ms …   2.95 ms  in 10 ×     35 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:52 ("cache - jump to pos 0 every 10 chars (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   1.89 ms ±  12.73 µs     1.88 ms …   1.91 ms  in 10 ×     53 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:71 ("cache - jump to middle every 10 chars (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   2.48 ms ±   8.81 µs     2.47 ms …   2.49 ms  in 10 ×     41 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:94 ("cache - single non-seq insert on 1000-char doc") ok
time (mean ± σ)         range (min … max) 
   7.37 µs ±   1.85 µs     5.85 µs …  11.45 µs  in 10 ×  15262 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:108 ("cache - single non-seq insert on 5000-char doc") ok
time (mean ± σ)         range (min … max) 
   6.44 µs ± 901.14 ns     5.80 µs …   8.92 µs  in 10 ×  18036 runs
Total tests: 105, passed: 105, failed: 0.

Benchmarks run with --release flag

@dowdiness dowdiness merged commit b609b39 into main Jun 7, 2026
28 checks passed
@dowdiness dowdiness deleted the issue-485-canvas-graph branch June 7, 2026 08:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Extract reusable canvas graph model library

1 participant