Skip to content

feat(editor): semantic Before/After drop + fix Memo::get outside tracked context#179

Merged
dowdiness merged 3 commits intomainfrom
feat/semantic-drop-before-after
Apr 15, 2026
Merged

feat(editor): semantic Before/After drop + fix Memo::get outside tracked context#179
dowdiness merged 3 commits intomainfrom
feat/semantic-drop-before-after

Conversation

@dowdiness
Copy link
Copy Markdown
Owner

Summary

  • Semantic Before/After drop: replaces raw text splice with AST-level operations — source expression replaced with Renderable::placeholder(), inserted text extracted from source map (whitespace-aware, like Exchange). Prevents invalid syntax like let id = with empty RHS.
  • Fix Memo::get outside tracked context: all projection accessors (get_proj_node, get_source_map, get_registry, etc.) and LambdaCompanion memo reads now use rt.read(memo) instead of memo.get(). Fixes pre-existing abort that broke 14 editor unit tests and crashed the ideal editor web app on load.
  • Playwright E2E tests: 7 tests covering drag-drop Before/After/Inside/self-drop in Structure mode.

Test plan

  • moon test — 879 passed, 0 failed (was 829/50 before the Memo fix)
  • moon check — clean
  • Playwright E2E: 7/7 pass (npx playwright test e2e/drag-drop.spec.ts)
  • CI green

🤖 Generated with Claude Code

dowdiness and others added 2 commits April 15, 2026 18:53
Picks up loom PRs #79 and #80:
- Migrate ReactiveParser to use get_result()/Signal::get() for dual-context reads
- Fix dependency tracking regression (rt.read() dropped tracking in derived memos)
- Add regression test for derived memo invalidation through term()

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…get outside tracked context

Before/After drop was using raw text splice (delete source + insert unparse),
which left invalid syntax (e.g. `let id = ` with empty RHS). Now mirrors
Exchange: extracts expression text from source map, replaces source with
placeholder via Renderable::placeholder(), preserving valid syntax.

Also fixes pre-existing Memo::get() abort when called outside tracked context
(broke editor unit tests and ideal editor web app). All projection accessors
now use rt.read(memo) which is safe in both contexts.

Adds Playwright E2E tests for drag-drop Before/After/Inside/self-drop.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 15, 2026

Warning

Rate limit exceeded

@dowdiness has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 20 minutes and 5 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 20 minutes and 5 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, 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 have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 6574466c-cc67-42c1-84f4-365cf6eaedfd

📥 Commits

Reviewing files that changed from the base of the PR and between b8f7332 and 90502ae.

📒 Files selected for processing (6)
  • docs/TODO.md
  • editor/projection_memo.mbt
  • editor/sync_editor_tree_edit.mbt
  • examples/ideal/web/e2e/drag-drop.spec.ts
  • lang/lambda/companion/lambda_editor.mbt
  • loom
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/semantic-drop-before-after

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.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 15, 2026

Benchmark Comparison Report

Comparing PR branch against main

Main Module Benchmarks

Base branch:

node count: 402
node count: 802
node count: 2002
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:24 ("viewnode serialization (100 defs)") ok
time (mean ± σ)         range (min … max) 
   2.32 ms ±  71.04 µs     2.21 ms …   2.44 ms  in 10 ×     42 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:35 ("viewnode serialization (200 defs)") ok
time (mean ± σ)         range (min … max) 
   5.70 ms ± 200.32 µs     5.50 ms …   6.08 ms  in 10 ×     18 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:46 ("viewnode serialization (500 defs)") ok
time (mean ± σ)         range (min … max) 
  26.26 ms ±   1.05 ms    25.02 ms …  28.18 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.49 ms ±  67.17 µs     1.41 ms …   1.61 ms  in 10 ×     67 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:98 ("json object - incremental keystroke (20 members)") ok
time (mean ± σ)         range (min … max) 
 584.04 µs ± 115.13 µs   432.88 µs … 748.46 µs  in 10 ×    245 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:103 ("json object - incremental keystroke (100 members)") ok
time (mean ± σ)         range (min … max) 
   1.35 ms ±  29.67 µs     1.30 ms …   1.40 ms  in 10 ×     80 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:108 ("json object - incremental keystroke (500 members)") ok
time (mean ± σ)         range (min … max) 
  11.27 ms ± 262.44 µs    11.04 ms …  11.89 ms  in 10 ×     10 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:113 ("json object - incremental keystroke (1000 members)") ok
time (mean ± σ)         range (min … max) 
  44.92 ms ±   5.76 ms    40.12 ms …  54.62 ms  in 10 ×      3 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:118 ("json array - incremental keystroke (20 elements)") ok
time (mean ± σ)         range (min … max) 
 593.07 µs ± 163.96 µs   367.89 µs … 825.96 µs  in 10 ×    339 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:123 ("json array - incremental keystroke (100 elements)") ok
time (mean ± σ)         range (min … max) 
 849.64 µs ±  78.08 µs   756.16 µs … 973.02 µs  in 10 ×    145 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:128 ("json array - incremental keystroke (500 elements)") ok
time (mean ± σ)         range (min … max) 
   7.88 ms ±  89.28 µs     7.75 ms …   7.98 ms  in 10 ×     13 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:133 ("json array - incremental keystroke (1000 elements)") ok
time (mean ± σ)         range (min … max) 
  37.19 ms ±   3.54 ms    32.40 ms …  42.90 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) 
   5.08 µs ±   0.07 µs     5.04 µs …   5.23 µs  in 10 ×  19245 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:48 ("tree refresh unchanged (80 defs)") ok
time (mean ± σ)         range (min … max) 
  18.30 µs ±   0.16 µs    18.18 µs …  18.70 µs  in 10 ×   5434 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:58 ("tree refresh unchanged (320 defs)") ok
time (mean ± σ)         range (min … max) 
  79.84 µs ±   1.22 µs    79.15 µs …  83.22 µs  in 10 ×   1249 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:68 ("tree refresh unchanged (1000 defs)") ok
time (mean ± σ)         range (min … max) 
 288.84 µs ±   2.29 µs   286.89 µs … 294.08 µs  in 10 ×    344 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:80 ("tree refresh 1 changed (20 defs)") ok
time (mean ± σ)         range (min … max) 
   8.60 µs ±   0.05 µs     8.54 µs …   8.69 µs  in 10 ×  11741 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:95 ("tree refresh 1 changed (320 defs)") ok
time (mean ± σ)         range (min … max) 
 144.78 µs ±   0.61 µs   143.86 µs … 145.74 µs  in 10 ×    694 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:110 ("tree refresh 1 changed (1000 defs)") ok
time (mean ± σ)         range (min … max) 
 509.00 µs ±   2.50 µs   505.82 µs … 512.98 µs  in 10 ×    197 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:125 ("tree refresh 1 changed (80 defs)") ok
time (mean ± σ)         range (min … max) 
  30.73 µs ±   0.16 µs    30.58 µs …  31.04 µs  in 10 ×   3262 runs
Total tests: 20, passed: 20, failed: 0.

PR branch:

Registry index cloned successfully
Symbols updated successfully
Downloading moonbitlang/x@0.4.38
Downloading moonbitlang/async@0.16.8
Downloading moonbitlang/quickcheck@0.11.2
node count: 402
node count: 802
node count: 2002
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:24 ("viewnode serialization (100 defs)") ok
time (mean ± σ)         range (min … max) 
   2.21 ms ±  24.38 µs     2.18 ms …   2.25 ms  in 10 ×     45 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:35 ("viewnode serialization (200 defs)") ok
time (mean ± σ)         range (min … max) 
   5.68 ms ± 192.69 µs     5.43 ms …   5.98 ms  in 10 ×     18 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:46 ("viewnode serialization (500 defs)") ok
time (mean ± σ)         range (min … max) 
  26.03 ms ±   2.12 ms    23.86 ms …  30.85 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.43 ms ±  42.88 µs     1.37 ms …   1.51 ms  in 10 ×     66 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:98 ("json object - incremental keystroke (20 members)") ok
time (mean ± σ)         range (min … max) 
 578.78 µs ± 108.07 µs   437.36 µs … 774.34 µs  in 10 ×    249 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:103 ("json object - incremental keystroke (100 members)") ok
time (mean ± σ)         range (min … max) 
   1.18 ms ±  34.99 µs     1.13 ms …   1.23 ms  in 10 ×     79 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:108 ("json object - incremental keystroke (500 members)") ok
time (mean ± σ)         range (min … max) 
  10.74 ms ± 404.11 µs    10.45 ms …  11.75 ms  in 10 ×     10 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:113 ("json object - incremental keystroke (1000 members)") ok
time (mean ± σ)         range (min … max) 
  47.66 ms ±   5.85 ms    41.31 ms …  59.60 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) 
 572.34 µs ± 138.22 µs   388.89 µs … 782.10 µs  in 10 ×    330 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:123 ("json array - incremental keystroke (100 elements)") ok
time (mean ± σ)         range (min … max) 
 811.37 µs ±  74.42 µs   708.87 µs … 914.69 µs  in 10 ×    151 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:128 ("json array - incremental keystroke (500 elements)") ok
time (mean ± σ)         range (min … max) 
   7.38 ms ±  72.86 µs     7.32 ms …   7.55 ms  in 10 ×     14 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:133 ("json array - incremental keystroke (1000 elements)") ok
time (mean ± σ)         range (min … max) 
  32.81 ms ±   3.41 ms    28.88 ms …  39.37 ms  in 10 ×      3 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:38 ("tree refresh unchanged (20 defs)") ok
time (mean ± σ)         range (min … max) 
   4.82 µs ±   0.07 µs     4.77 µs …   4.97 µs  in 10 ×  20305 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:48 ("tree refresh unchanged (80 defs)") ok
time (mean ± σ)         range (min … max) 
  17.31 µs ±   0.20 µs    17.17 µs …  17.82 µs  in 10 ×   5742 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:58 ("tree refresh unchanged (320 defs)") ok
time (mean ± σ)         range (min … max) 
  75.80 µs ±   1.63 µs    74.26 µs …  78.84 µs  in 10 ×   1331 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:68 ("tree refresh unchanged (1000 defs)") ok
time (mean ± σ)         range (min … max) 
 281.06 µs ±   0.80 µs   280.05 µs … 282.23 µs  in 10 ×    359 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:80 ("tree refresh 1 changed (20 defs)") ok
time (mean ± σ)         range (min … max) 
   8.52 µs ±   0.02 µs     8.47 µs …   8.54 µs  in 10 ×  11737 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:95 ("tree refresh 1 changed (320 defs)") ok
time (mean ± σ)         range (min … max) 
 145.02 µs ±   0.74 µs   144.00 µs … 145.92 µs  in 10 ×    693 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:110 ("tree refresh 1 changed (1000 defs)") ok
time (mean ± σ)         range (min … max) 
 473.48 µs ±   4.59 µs   469.05 µs … 484.89 µs  in 10 ×    211 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:125 ("tree refresh 1 changed (80 defs)") ok
time (mean ± σ)         range (min … max) 
  31.39 µs ±   0.13 µs    31.27 µs …  31.65 µs  in 10 ×   3189 runs
Total tests: 20, passed: 20, failed: 0.

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) 
  22.73 µs ±   0.67 µs    21.96 µs …  24.21 µs  in 10 ×   4035 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) 
 116.50 µs ±   0.50 µs   115.82 µs … 117.59 µs  in 10 ×    864 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) 
 515.58 µs ±   6.35 µs   508.08 µs … 526.57 µs  in 10 ×    192 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) 
 149.80 µs ±   0.47 µs   149.06 µs … 150.41 µs  in 10 ×    661 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) 
 113.18 µs ±   0.84 µs   112.13 µs … 114.45 µs  in 10 ×    878 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) 
  71.97 µs ±   0.39 µs    71.39 µs …  72.62 µs  in 10 ×   1358 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) 
 111.69 µs ±   0.68 µs   111.00 µs … 112.92 µs  in 10 ×    896 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) 
 201.90 µs ±   5.45 µs   197.52 µs … 214.46 µs  in 10 ×    496 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) 
  42.17 µs ±  22.20 µs    25.86 µs …  84.71 µs  in 10 ×   2583 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:6 ("branch - checkout (10 ops)") ok
time (mean ± σ)         range (min … max) 
   3.76 µs ±   0.03 µs     3.73 µs …   3.84 µs  in 10 ×  26273 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:29 ("branch - checkout (100 ops)") ok
time (mean ± σ)         range (min … max) 
  27.49 µs ±   0.07 µs    27.40 µs …  27.60 µs  in 10 ×   3624 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:47 ("branch - checkout (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 395.67 µs ±   5.41 µs   388.56 µs … 405.50 µs  in 10 ×    248 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:65 ("branch - advance (10 new ops)") ok
time (mean ± σ)         range (min … max) 
  11.79 µs ±   4.48 µs     8.83 µs …  22.38 µs  in 10 ×   8461 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:91 ("branch - advance (100 new ops)") ok
time (mean ± σ)         range (min … max) 
  95.85 µs ±  49.87 µs    58.01 µs … 198.88 µs  in 10 ×   1108 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:117 ("branch - checkout with concurrent branches") ok
time (mean ± σ)         range (min … max) 
  29.76 µs ±   0.19 µs    29.55 µs …  30.06 µs  in 10 ×   3399 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:145 ("branch - checkout with deletes") ok
time (mean ± σ)         range (min … max) 
  37.96 µs ±   0.25 µs    37.65 µs …  38.36 µs  in 10 ×   2656 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) 
  24.83 µs ±   0.59 µs    24.06 µs …  25.80 µs  in 10 ×   4011 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.38 ms ±   4.03 ms     2.63 ms …  14.12 ms  in 10 ×     68 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:246 ("branch - to_text (100 chars)") ok
time (mean ± σ)         range (min … max) 
  10.51 µs ±   0.06 µs    10.43 µs …  10.61 µs  in 10 ×   9410 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:264 ("branch - to_text (1000 chars)") ok
time (mean ± σ)         range (min … max) 
 108.73 µs ±   0.76 µs   107.64 µs … 109.73 µs  in 10 ×    913 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.71 µs ±   0.20 µs     3.55 µs …   4.12 µs  in 10 ×  27536 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.61 µs ±  27.30 µs    30.79 µs … 107.31 µs  in 10 ×   2154 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:342 ("branch - realistic typing (50 chars)") ok
time (mean ± σ)         range (min … max) 
  16.99 ms ±   4.80 ms     9.99 ms …  23.63 ms  in 10 ×     20 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:375 ("branch - concurrent merge scenario") ok
time (mean ± σ)         range (min … max) 
  13.79 µs ±   3.80 µs    12.35 µs …  24.51 µs  in 10 ×   7477 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:6 ("walker - linear history (10 ops)") ok
time (mean ± σ)         range (min … max) 
   0.64 µs ±   0.01 µs     0.64 µs …   0.65 µs  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.78 µs ±   0.01 µs     4.77 µs …   4.79 µs  in 10 ×  20891 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.31 µs ±   0.43 µs    42.99 µs …  44.36 µs  in 10 ×   2322 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) 
   6.27 µs ±   0.01 µs     6.25 µs …   6.29 µs  in 10 ×  16151 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) 
   6.16 µs ±   0.01 µs     6.14 µs …   6.17 µs  in 10 ×  16329 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.96 µs ±   0.02 µs     7.94 µs …   8.01 µs  in 10 ×  12623 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.41 µs ±   0.01 µs     3.40 µs …   3.45 µs  in 10 ×  28540 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.66 µs ±   0.01 µs     5.65 µs …   5.68 µs  in 10 ×  17640 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:176 ("walker - large history (10000 ops)") ok
time (mean ± σ)         range (min … max) 
 444.48 µs ±   1.44 µs   442.98 µs … 447.17 µs  in 10 ×    226 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:196 ("walker - linear history (100000 ops)") ok
time (mean ± σ)         range (min … max) 
   7.24 ms ± 172.00 µs     7.06 ms …   7.57 ms  in 10 ×     14 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.41 ms ±   3.03 ms    21.26 ms …  29.11 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) 
   0.06 µs ±   0.00 µs     0.06 µs …   0.06 µs  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) 
   0.33 µs ±   0.00 µs     0.33 µs …   0.33 µs  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.45 µs ±   0.00 µs     1.45 µs …   1.46 µs  in 10 ×  68905 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) 
   0.26 µs ±   0.00 µs     0.26 µs …   0.26 µs  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) 
   0.15 µs ±   0.00 µs     0.15 µs …   0.15 µs  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) 
   0.62 µs ±   0.01 µs     0.62 µs …   0.64 µs  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) 
   0.49 µs ±   0.03 µs     0.47 µs …   0.56 µs  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) 
   2.36 µs ±   0.00 µs     2.35 µs …   2.36 µs  in 10 ×  42371 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) 
   0.24 µs ±   0.00 µs     0.24 µs …   0.26 µs  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) 
   0.16 µs ±   0.00 µs     0.16 µs …   0.16 µs  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) 
   0.55 µs ±   0.00 µs     0.55 µs …   0.55 µs  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.36 µs ±   0.01 µs     4.35 µs …   4.37 µs  in 10 ×  22977 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) 
   0.24 µs ±   0.00 µs     0.24 µs …   0.24 µs  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.63 µs ±   0.01 µs     4.63 µs …   4.64 µs  in 10 ×  21563 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) 
   0.05 µs ±   0.00 µs     0.04 µs …   0.05 µs  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) 
   0.01 µs ±   0.00 µs     0.01 µs …   0.01 µs  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) 
 178.07 µs ±   1.06 µs   176.25 µs … 179.67 µs  in 10 ×    563 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.73 ms ±  44.14 µs     2.68 ms …   2.81 ms  in 10 ×     37 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) 
   8.94 ms ± 195.47 µs     8.77 ms …   9.40 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) 
   4.06 ms ±  19.95 µs     4.04 ms …   4.10 ms  in 10 ×     24 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) 
  34.38 ms ± 622.05 µs    33.59 ms …  35.51 ms  in 10 ×      3 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) 
   0.09 µs ±   0.00 µs     0.09 µs …   0.09 µs  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) 
   0.09 µs ±   0.00 µs     0.08 µs …   0.09 µs  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/fugue/jump_ancestors_benchmark.mbt:2 ("jump - sequential append 1K") ok
time (mean ± σ)         range (min … max) 
 150.38 µs ±   0.76 µs   149.38 µs … 151.60 µs  in 10 ×    663 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) 
 146.60 µs ±   0.92 µs   145.62 µs … 147.87 µs  in 10 ×    682 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.40 ms ± 149.68 µs     4.22 ms …   4.60 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) 
 147.83 µs ±   0.63 µs   147.10 µs … 149.08 µs  in 10 ×    678 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:6 ("oplog - insert (100 ops)") ok
time (mean ± σ)         range (min … max) 
  49.45 µs ±   1.17 µs    48.63 µs …  52.22 µs  in 10 ×   1906 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:20 ("oplog - insert (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 584.62 µs ±  20.20 µs   572.40 µs … 623.83 µs  in 10 ×    175 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) 
  73.38 µs ±   0.19 µs    73.16 µs …  73.70 µs  in 10 ×   1362 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:58 ("oplog - apply_remote (50 ops)") ok
time (mean ± σ)         range (min … max) 
  33.87 µs ±   0.24 µs    33.69 µs …  34.52 µs  in 10 ×   2957 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:79 ("oplog - get_op (1000 ops)") ok
time (mean ± σ)         range (min … max) 
   0.12 µs ±   0.00 µs     0.12 µs …   0.12 µs  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) 
   0.02 µs ±   0.00 µs     0.02 µs …   0.02 µs  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) 
   0.02 µs ±   0.00 µs     0.02 µs …   0.02 µs  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) 
   9.06 µs ±   0.04 µs     9.00 µs …   9.12 µs  in 10 ×  11043 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:150 ("oplog - walk_and_collect (concurrent)") ok
time (mean ± σ)         range (min … max) 
  11.18 µs ±   0.07 µs    11.10 µs …  11.33 µs  in 10 ×   8825 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.90 µs ±   0.01 µs     4.88 µs …   4.91 µs  in 10 ×  20307 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:202 ("oplog - walk_filtered (inserts only)") ok
time (mean ± σ)         range (min … max) 
   7.91 µs ±   0.02 µs     7.89 µs …   7.94 µs  in 10 ×  13069 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:233 ("oplog - sequential typing (500 chars)") ok
time (mean ± σ)         range (min … max) 
 268.39 µs ±   0.92 µs   267.01 µs … 269.89 µs  in 10 ×    372 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:249 ("oplog - random position inserts (100 ops)") ok
time (mean ± σ)         range (min … max) 
  47.86 µs ±   0.09 µs    47.74 µs …  48.01 µs  in 10 ×   2093 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:270 ("oplog - sequential typing (100000 chars)") ok
time (mean ± σ)         range (min … max) 
 164.75 ms ±  24.73 ms   128.14 ms … 193.00 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.09 ms ±  13.79 ms    43.46 ms …  77.32 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) 
  94.38 µs ±   0.84 µs    93.56 µs …  96.53 µs  in 10 ×    947 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:22 ("text - insert append (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   1.29 ms ±  34.17 µs     1.24 ms …   1.34 ms  in 10 ×     77 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:35 ("text - insert prepend (100 chars)") ok
time (mean ± σ)         range (min … max) 
 148.43 µs ±   0.51 µs   147.77 µs … 149.09 µs  in 10 ×    671 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.27 µs ±   1.42 µs   232.14 µs … 236.29 µ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) 
  13.33 µs ±   0.11 µs    13.20 µs …  13.59 µs  in 10 ×   7421 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:83 ("text - text() (1000-char doc)") ok
time (mean ± σ)         range (min … max) 
 137.45 µs ±   0.25 µs   137.12 µs … 137.87 µs  in 10 ×    728 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:96 ("text - len() (1000-char doc)") ok
time (mean ± σ)         range (min … max) 
   0.01 µs ±   0.00 µs     0.01 µs …   0.01 µs  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) 
   0.09 µs ±   0.00 µs     0.09 µs …   0.09 µs  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) 
   0.09 µs ±   0.00 µs     0.09 µs …   0.09 µs  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) 
  34.99 µs ±   0.65 µs    34.16 µs …  35.95 µs  in 10 ×   2919 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:156 ("text - sync apply (50 remote ops)") ok
time (mean ± σ)         range (min … max) 
  53.99 µs ±   0.49 µs    53.15 µs …  54.52 µs  in 10 ×   1855 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:171 ("text - sync apply (500 remote ops)") ok
time (mean ± σ)         range (min … max) 
 666.66 µs ±   4.73 µs   660.65 µs … 673.73 µs  in 10 ×    150 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) 
 113.69 µs ±   0.31 µs   113.17 µs … 114.20 µs  in 10 ×    882 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:216 ("text - checkout (midpoint of 100-op doc)") ok
time (mean ± σ)         range (min … max) 
  13.57 µs ±   0.10 µs    13.42 µs …  13.73 µs  in 10 ×   7393 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:233 ("text - checkout (midpoint of 1000-op doc)") ok
time (mean ± σ)         range (min … max) 
 160.83 µs ±   0.39 µs   160.34 µs … 161.35 µs  in 10 ×    621 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 ±   0.00 µs     2.07 µs …   2.09 µs  in 10 ×  48206 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.44 µs ±   0.02 µs     2.42 µs …   2.46 µs  in 10 ×  40994 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:281 ("text - undo undo() (10-op group)") ok
time (mean ± σ)         range (min … max) 
  28.92 µs ±   0.11 µs    28.75 µs …  29.04 µs  in 10 ×   3460 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:295 ("text - undo undo() (50-op group)") ok
time (mean ± σ)         range (min … max) 
 451.51 µs ±   1.47 µs   449.55 µs … 454.05 µs  in 10 ×    221 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) 
  33.11 µs ±   0.14 µs    32.94 µs …  33.40 µs  in 10 ×   3006 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) 
 287.30 µs ±   2.83 µs   284.42 µs … 292.77 µs  in 10 ×    349 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:17 ("cache - sequential append (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   1.28 ms ±  21.87 µs     1.25 ms …   1.31 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 ±  22.27 µs     2.94 ms …   3.00 ms  in 10 ×     32 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.77 ms ±   3.45 µs     1.76 ms …   1.77 ms  in 10 ×     57 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.42 ms ±  12.85 µs     2.40 ms …   2.45 ms  in 10 ×     42 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.20 µs ±   2.43 µs     5.57 µs …  12.84 µs  in 10 ×  16134 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.47 µs ±   0.90 µs     5.87 µs …   8.86 µs  in 10 ×  17851 runs
Total tests: 104, passed: 104, failed: 0.

PR branch:

Registry index updated successfully
Symbols updated successfully
Using cached moonbitlang/quickcheck@0.11.2
[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) 
  22.72 µs ±   0.68 µs    22.00 µs …  24.24 µs  in 10 ×   4070 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) 
 116.86 µs ±   0.45 µs   116.41 µs … 117.71 µs  in 10 ×    859 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) 
 526.44 µs ±   3.08 µs   522.95 µs … 531.79 µs  in 10 ×    189 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) 
 150.57 µs ±   0.67 µs   149.99 µs … 151.83 µs  in 10 ×    659 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) 
 112.61 µs ±   0.50 µs   112.17 µs … 113.93 µs  in 10 ×    890 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) 
  71.44 µs ±   0.17 µs    71.18 µs …  71.74 µs  in 10 ×   1402 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) 
 112.22 µs ±   0.48 µs   111.56 µs … 112.79 µs  in 10 ×    890 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) 
 204.15 µs ±   9.01 µs   198.97 µs … 226.44 µs  in 10 ×    502 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) 
  47.37 µs ±  23.28 µs    30.16 µs …  94.29 µs  in 10 ×   1819 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:6 ("branch - checkout (10 ops)") ok
time (mean ± σ)         range (min … max) 
   3.92 µs ±   0.03 µs     3.89 µs …   3.97 µs  in 10 ×  25498 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:29 ("branch - checkout (100 ops)") ok
time (mean ± σ)         range (min … max) 
  29.49 µs ±   0.11 µs    29.38 µs …  29.70 µs  in 10 ×   3381 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:47 ("branch - checkout (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 429.98 µs ±   3.82 µs   424.81 µs … 435.91 µs  in 10 ×    231 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:65 ("branch - advance (10 new ops)") ok
time (mean ± σ)         range (min … max) 
  10.79 µs ±   2.95 µs     8.90 µs …  18.83 µs  in 10 ×   9851 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:91 ("branch - advance (100 new ops)") ok
time (mean ± σ)         range (min … max) 
 106.96 µs ±  59.06 µs    57.84 µs … 199.02 µs  in 10 ×   1477 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:117 ("branch - checkout with concurrent branches") ok
time (mean ± σ)         range (min … max) 
  30.35 µs ±   0.32 µs    29.93 µs …  30.82 µs  in 10 ×   3311 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:145 ("branch - checkout with deletes") ok
time (mean ± σ)         range (min … max) 
  40.58 µs ±   5.16 µs    37.85 µs …  50.95 µs  in 10 ×   2547 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) 
  25.31 µs ±   0.63 µs    24.81 µs …  26.75 µs  in 10 ×   3955 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.36 ms ±   3.42 ms     2.75 ms …  12.57 ms  in 10 ×     67 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:246 ("branch - to_text (100 chars)") ok
time (mean ± σ)         range (min … max) 
  10.38 µs ±   0.04 µs    10.33 µs …  10.45 µs  in 10 ×   9501 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:264 ("branch - to_text (1000 chars)") ok
time (mean ± σ)         range (min … max) 
 108.31 µs ±   0.84 µs   107.36 µs … 109.70 µs  in 10 ×    924 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.84 µs ±   0.35 µs     3.54 µs …   4.39 µs  in 10 ×  26281 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:311 ("branch - single advance (50 new ops)") ok
time (mean ± σ)         range (min … max) 
  48.02 µs ±  26.04 µs    30.54 µs …  91.62 µs  in 10 ×   2342 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:342 ("branch - realistic typing (50 chars)") ok
time (mean ± σ)         range (min … max) 
  16.36 ms ±   8.02 ms     6.57 ms …  32.86 ms  in 10 ×     29 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:375 ("branch - concurrent merge scenario") ok
time (mean ± σ)         range (min … max) 
  17.02 µs ±   7.83 µs    12.34 µs …  34.63 µs  in 10 ×   7298 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:6 ("walker - linear history (10 ops)") ok
time (mean ± σ)         range (min … max) 
   0.64 µs ±   0.01 µs     0.63 µs …   0.66 µs  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 ±   0.03 µs     4.78 µs …   4.88 µs  in 10 ×  20782 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.53 µs ±   0.47 µs    43.24 µs …  44.80 µs  in 10 ×   2306 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) 
   6.24 µs ±   0.01 µs     6.23 µs …   6.25 µs  in 10 ×  15832 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) 
   6.15 µs ±   0.02 µs     6.13 µs …   6.17 µs  in 10 ×  15906 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.95 µs ±   0.01 µs     7.93 µs …   7.97 µs  in 10 ×  12560 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.41 µs ±   0.01 µs     3.40 µs …   3.42 µs  in 10 ×  29357 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.62 µs ±   0.01 µs     5.60 µs …   5.63 µs  in 10 ×  17780 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:176 ("walker - large history (10000 ops)") ok
time (mean ± σ)         range (min … max) 
 453.91 µs ±   1.25 µs   452.10 µs … 456.04 µs  in 10 ×    221 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:196 ("walker - linear history (100000 ops)") ok
time (mean ± σ)         range (min … max) 
   7.28 ms ±  70.75 µs     7.19 ms …   7.44 ms  in 10 ×     14 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) 
  24.74 ms ±   2.89 ms    22.89 ms …  30.16 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) 
   0.06 µs ±   0.00 µs     0.06 µs …   0.06 µs  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) 
   0.33 µs ±   0.00 µs     0.33 µs …   0.33 µs  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.46 µs ±   0.01 µs     1.45 µs …   1.48 µs  in 10 ×  68727 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) 
   0.23 µs ±   0.00 µs     0.23 µs …   0.23 µs  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) 
   0.15 µs ±   0.00 µs     0.15 µs …   0.15 µs  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) 
   0.62 µs ±   0.00 µs     0.62 µs …   0.62 µs  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) 
   0.48 µs ±   0.00 µs     0.48 µs …   0.49 µs  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) 
   2.39 µs ±   0.02 µs     2.38 µs …   2.44 µs  in 10 ×  41922 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) 
   0.25 µs ±   0.00 µs     0.25 µs …   0.25 µs  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) 
   0.16 µs ±   0.00 µs     0.16 µs …   0.16 µs  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) 
   0.56 µs ±   0.00 µs     0.56 µs …   0.57 µs  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.39 µs ±   0.01 µs     4.37 µs …   4.40 µs  in 10 ×  22946 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) 
   0.24 µs ±   0.00 µs     0.24 µs …   0.24 µs  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.69 µs ±   0.01 µs     4.67 µs …   4.71 µs  in 10 ×  21399 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) 
   0.05 µs ±   0.00 µs     0.05 µs …   0.05 µs  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) 
   0.01 µs ±   0.00 µs     0.01 µs …   0.01 µs  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) 
 178.87 µs ±   2.32 µs   176.33 µs … 182.90 µs  in 10 ×    507 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.79 ms ±  66.66 µs     2.70 ms …   2.91 ms  in 10 ×     36 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.44 ms ± 260.68 µs     9.02 ms …   9.81 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) 
   4.21 ms ±  44.97 µs     4.15 ms …   4.28 ms  in 10 ×     23 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) 
  37.27 ms ±   1.44 ms    35.51 ms …  40.40 ms  in 10 ×      3 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) 
   0.09 µs ±   0.00 µs     0.09 µs …   0.09 µs  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) 
   0.09 µs ±   0.00 µs     0.09 µs …   0.09 µs  in 10 × 100000 runs
[dowdiness/event-graph-walker] bench internal/fugue/jump_ancestors_benchmark.mbt:2 ("jump - sequential append 1K") ok
time (mean ± σ)         range (min … max) 
 153.60 µs ±   6.08 µs   149.63 µs … 165.04 µs  in 10 ×    648 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) 
 146.33 µs ±   0.68 µs   145.38 µs … 147.53 µs  in 10 ×    679 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.29 ms ± 112.39 µs     4.13 ms …   4.48 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) 
 148.08 µs ±   0.38 µs   147.58 µs … 148.70 µs  in 10 ×    675 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:6 ("oplog - insert (100 ops)") ok
time (mean ± σ)         range (min … max) 
  47.65 µs ±   1.17 µs    46.67 µs …  50.45 µs  in 10 ×   1960 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:20 ("oplog - insert (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 560.00 µs ±   3.76 µs   555.04 µs … 566.03 µs  in 10 ×    180 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) 
  71.02 µs ±   0.47 µs    70.37 µs …  71.78 µs  in 10 ×   1404 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:58 ("oplog - apply_remote (50 ops)") ok
time (mean ± σ)         range (min … max) 
  33.15 µs ±   0.06 µs    33.04 µs …  33.24 µs  in 10 ×   3024 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:79 ("oplog - get_op (1000 ops)") ok
time (mean ± σ)         range (min … max) 
   0.12 µs ±   0.00 µs     0.12 µs …   0.13 µs  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) 
   0.02 µs ±   0.00 µs     0.02 µs …   0.02 µs  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) 
   0.02 µs ±   0.00 µs     0.02 µs …   0.03 µs  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) 
   9.11 µs ±   0.07 µs     9.02 µs …   9.20 µs  in 10 ×  10978 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:150 ("oplog - walk_and_collect (concurrent)") ok
time (mean ± σ)         range (min … max) 
  11.20 µs ±   0.04 µs    11.14 µs …  11.26 µs  in 10 ×   8824 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.92 µs ±   0.01 µs     4.91 µs …   4.93 µs  in 10 ×  20273 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:202 ("oplog - walk_filtered (inserts only)") ok
time (mean ± σ)         range (min … max) 
   7.96 µs ±   0.01 µs     7.94 µs …   7.99 µs  in 10 ×  13010 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:233 ("oplog - sequential typing (500 chars)") ok
time (mean ± σ)         range (min … max) 
 260.10 µs ±   3.48 µs   257.64 µs … 269.07 µs  in 10 ×    387 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:249 ("oplog - random position inserts (100 ops)") ok
time (mean ± σ)         range (min … max) 
  46.40 µs ±   0.27 µs    46.08 µs …  47.03 µs  in 10 ×   2007 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:270 ("oplog - sequential typing (100000 chars)") ok
time (mean ± σ)         range (min … max) 
 172.49 ms ±  25.52 ms   137.14 ms … 198.97 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) 
  60.75 ms ±  16.78 ms    39.60 ms …  83.32 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) 
  94.55 µs ±   0.22 µs    94.26 µs …  94.89 µs  in 10 ×    951 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:22 ("text - insert append (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   1.30 ms ±  13.98 µs     1.27 ms …   1.31 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) 
 147.82 µs ±   0.41 µs   147.29 µs … 148.51 µs  in 10 ×    673 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) 
 231.85 µs ±   0.65 µs   230.94 µs … 232.88 µs  in 10 ×    428 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:70 ("text - text() (100-char doc)") ok
time (mean ± σ)         range (min … max) 
  13.59 µs ±   0.16 µs    13.45 µs …  13.90 µs  in 10 ×   7401 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:83 ("text - text() (1000-char doc)") ok
time (mean ± σ)         range (min … max) 
 138.77 µs ±   0.63 µs   137.74 µs … 139.46 µs  in 10 ×    724 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:96 ("text - len() (1000-char doc)") ok
time (mean ± σ)         range (min … max) 
   0.01 µs ±   0.00 µs     0.01 µs …   0.01 µs  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) 
   0.09 µs ±   0.00 µs     0.09 µs …   0.09 µs  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) 
   0.09 µs ±   0.00 µs     0.09 µs …   0.09 µs  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.54 µs ±   0.15 µs    33.35 µs …  33.74 µs  in 10 ×   2931 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:156 ("text - sync apply (50 remote ops)") ok
time (mean ± σ)         range (min … max) 
  53.91 µs ±   0.35 µs    53.41 µs …  54.36 µs  in 10 ×   1846 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:171 ("text - sync apply (500 remote ops)") ok
time (mean ± σ)         range (min … max) 
 677.00 µs ±   4.76 µs   670.91 µs … 683.61 µs  in 10 ×    149 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) 
 114.34 µs ±   0.67 µs   113.77 µs … 116.12 µs  in 10 ×    880 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:216 ("text - checkout (midpoint of 100-op doc)") ok
time (mean ± σ)         range (min … max) 
  13.51 µs ±   0.11 µs    13.37 µs …  13.67 µs  in 10 ×   7362 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:233 ("text - checkout (midpoint of 1000-op doc)") ok
time (mean ± σ)         range (min … max) 
 161.51 µs ±   0.77 µs   160.41 µs … 162.76 µs  in 10 ×    624 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 ±   0.00 µs     2.06 µs …   2.07 µs  in 10 ×  48223 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.43 µs ±   0.01 µs     2.40 µs …   2.44 µs  in 10 ×  41520 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:281 ("text - undo undo() (10-op group)") ok
time (mean ± σ)         range (min … max) 
  29.03 µs ±   0.15 µs    28.81 µs …  29.25 µs  in 10 ×   3425 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:295 ("text - undo undo() (50-op group)") ok
time (mean ± σ)         range (min … max) 
 457.23 µs ±   2.49 µs   453.85 µs … 462.02 µ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) 
  33.19 µs ±   0.08 µs    33.08 µs …  33.33 µs  in 10 ×   3013 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) 
 282.21 µs ±   1.02 µs   280.94 µs … 283.90 µs  in 10 ×    356 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:17 ("cache - sequential append (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   1.35 ms ±  35.93 µs     1.31 ms …   1.42 ms  in 10 ×     75 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:34 ("cache - alternating pos (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   3.13 ms ±  47.04 µs     3.07 ms …   3.22 ms  in 10 ×     30 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.81 ms ±  15.24 µs     1.79 ms …   1.84 ms  in 10 ×     56 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 ± 102.53 µs     2.46 ms …   2.80 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) 
   6.43 µs ±   1.01 µs     5.79 µs …   9.21 µs  in 10 ×  15316 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.26 µs ±   1.34 µs     5.34 µs …   9.49 µs  in 10 ×  15903 runs
Total tests: 104, passed: 104, failed: 0.

Benchmarks run with --release flag

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ce7e08db19

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

await expect(page.getByLabel('Code editor')).toBeVisible();
await page.waitForFunction(() => {
const ce = document.querySelector('canopy-editor');
return ce?.shadowRoot?.querySelector('.structure-block') !== null;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Make structure-block wait condition actually block

The waitForFunction predicate can return true before the editor is ready: when canopy-editor or shadowRoot is missing, optional chaining yields undefined, and undefined !== null evaluates to true. That means setup may proceed immediately instead of waiting for .structure-block, which can make the new drag/drop tests flaky or mask real regressions depending on render timing. Use a null-safe truthy check (for example != null or an explicit boolean cast) so the wait only passes once a block is present.

Useful? React with 👍 / 👎.

@dowdiness dowdiness merged commit 8d98854 into main Apr 15, 2026
16 checks passed
@dowdiness dowdiness deleted the feat/semantic-drop-before-after branch April 15, 2026 10:07
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.

1 participant