Skip to content

Consume Markdown list payloads#730

Merged
dowdiness merged 2 commits into
mainfrom
markdown-list-payloads
Jun 21, 2026
Merged

Consume Markdown list payloads#730
dowdiness merged 2 commits into
mainfrom
markdown-list-payloads

Conversation

@dowdiness

@dowdiness dowdiness commented Jun 21, 2026

Copy link
Copy Markdown
Owner

Summary

  • update Loom submodule to 1e384f2 / Add explicit Markdown ordered list blocks loom#429 for explicit Markdown list payloads
  • remove the temporary ORDERED_LIST_KIND_ROLE SourceMap side channel and let Markdown view kind come from Block::OrderedList(_, _)
  • update Markdown projection/edit paths, semantic annotations, block input, and preview rendering for UnorderedListItem / OrderedListItem

Context

This completes the active dependency in docs/plans/2026-06-20-markdown-list-payloads.md: ordered/unordered list kind is now semantic Loom AST data instead of Canopy SourceMap metadata.

This does not widen Markdown MoveBlock legality. List containers and list-item contexts remain rejected until #724 adds parse-shape, identity, ambiguity, marker-renumbering, and separator coverage.

Reuse check

  • Reused Loom Block::OrderedList(_, _), Block::UnorderedListItem(_), and Block::OrderedListItem(_, _) payloads from Add explicit Markdown ordered list blocks loom#429.
  • Reused existing @protocol.proj_to_view_node directly after removing Markdown-specific SourceMap kind refinement.
  • Reused existing source marker spans for list-item split/block-mode display.
  • Checked core/project APIs: Array::map, Array::zip, Map::get, Option::map, Loom Renderable::kind_tag, and Markdown Block constructors.
  • New helper: is_markdown_list_item, scoped to Markdown edit operations.

Validation

NEW_MOON_MOD=0 moon fmt
NEW_MOON_MOD=0 moon info
NEW_MOON_MOD=0 moon check
NEW_MOON_MOD=0 moon test
NEW_MOON_MOD=0 ./scripts/build-js.sh
cd examples/web && npm ci && npx tsc --noEmit

Results:

moon test: Total tests: 267 passed [wasm-gc], 1590 passed [js], 70 passed [native]
examples/web tsc: passed after JS artifact build

Notes

  • moon info produced no retained .mbti drift in Canopy.
  • rabbita/templates/rabbita-template recursive submodule clone still requires SSH access if fully recursing into all nested submodules; not needed for this validation path.
  • No ADR needed: this implements the existing Markdown list payload plan rather than introducing a new architectural decision.

Summary by CodeRabbit

Release Notes

  • Bug Fixes

    • Enhanced list handling to properly distinguish between ordered and unordered lists, ensuring consistent preservation and rendering across editing modes.
  • Tests

    • Updated tests to validate correct list behavior in block and preview modes.
  • Documentation

    • Updated development guide examples for improved list structure representation.

@coderabbitai

coderabbitai Bot commented Jun 21, 2026

Copy link
Copy Markdown

Review Change Stack

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 48 minutes and 40 seconds. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ 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.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits.

🚦 How do rate limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, the refill rate gradually slows as usage increases. The highest same-day bursts are limited more strictly.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 3dd97dc6-a2c6-4cbf-915a-6ffff79d4042

📥 Commits

Reviewing files that changed from the base of the PR and between 6a7bea8 and 64c09c4.

📒 Files selected for processing (16)
  • adapters/editor-adapter/block-input.css
  • adapters/editor-adapter/block-input.ts
  • adapters/editor-adapter/markdown-preview.ts
  • docs/README.md
  • docs/TODO.md
  • docs/archive/completed-phases/2026-06-20-markdown-list-payloads.md
  • docs/development/ADDING_A_LANGUAGE.md
  • examples/web/tests/markdown-editor.spec.ts
  • lang/markdown/edits/compute_markdown_edit.mbt
  • lang/markdown/edits/compute_move_block.mbt
  • lang/markdown/proj/move_reconcile.mbt
  • lang/markdown/proj/populate_token_spans.mbt
  • lang/markdown/proj/proj_node.mbt
  • lang/markdown/proj/proj_node_wbtest.mbt
  • lib/semantic/annotate.mbt
  • lib/semantic/annotate_test.mbt
📝 Walkthrough

Walkthrough

Replaces the generic ListItem node kind with explicit UnorderedListItem and OrderedListItem variants. The change propagates through the Markdown projection tree, token-span population, edit operations (toggle, split, move), semantic KeyPoints annotation, and the frontend editor-adapter rendering and CSS.

Changes

Ordered/Unordered List Item Differentiation

Layer / File(s) Summary
Projection tree, token spans, and reconciliation
lang/markdown/proj/proj_node.mbt, lang/markdown/proj/populate_token_spans.mbt, lang/markdown/proj/move_reconcile.mbt, lang/markdown/proj/proj_node_wbtest.mbt, docs/development/ADDING_A_LANGUAGE.md
build_proj_tree collects children from both list types; proj_to_view_node drops the refine_markdown_view_node post-processing; populate_block replaces the generic ListItem arm with explicit UnorderedListItem | OrderedListItem arms and removes ORDERED_LIST_KIND_ROLE; is_block_container adds OrderedList; tests and the AST guide example are updated.
Edit operations: toggle, split, and move
lang/markdown/edits/compute_markdown_edit.mbt, lang/markdown/edits/compute_move_block.mbt
New is_markdown_list_item helper replaces direct ListItem pattern matches in toggle and split. Move operations now reject ordered list containers and block both list-item variants; blank-line separator rule extended to ordered lists.
Semantic annotation: KeyPoints for ordered lists
lib/semantic/annotate.mbt, lib/semantic/annotate_test.mbt
classify extends the KeyPoints rule to OrderedList when preceding a Heading; tests update item constructors to UnorderedListItem and add an ordered-list-after-heading assertion.
Frontend editor adapter rendering and CSS
adapters/editor-adapter/block-input.ts, adapters/editor-adapter/block-input.css, adapters/editor-adapter/markdown-preview.ts, examples/web/tests/markdown-editor.spec.ts
isListItemKind helper added; collectEditableBlocks and semanticBlockElement cover both new kinds; CSS selectors extended for indentation and markers; semanticTag gains UnorderedListItem/OrderedListItem cases for li rendering; E2E selector updated.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • dowdiness/canopy#115: Introduces populate_token_spans with the generic ListItem(_) handling that this PR replaces with explicit UnorderedListItem/OrderedListItem arms.
  • dowdiness/canopy#720: Modifies the same ordered/unordered list projection paths in proj_node.mbt and compute_markdown_edit.mbt that this PR refactors.
  • dowdiness/canopy#726: Reworks list/list-item blocker checks in compute_move_block.mbt, the same file this PR further extends for ordered list container rejection.

Poem

🐰 Hoppity hop through the list nodes I go,
Unordered and ordered, both get their own show!
No more generic ListItem hiding the two —
Each bullet and number now properly true.
The rabbit sorts lists with a flick of the ear,
UnorderedListItem, OrderedListItem — crystal clear! 🎉

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Consume Markdown list payloads' directly and accurately describes the primary change: updating Canopy to consume explicit Markdown list payloads from Loom.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch markdown-list-payloads

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

cloudflare-workers-and-pages Bot commented Jun 21, 2026

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 64c09c4 Commit Preview URL

Branch Preview URL
Jun 21 2026, 05:12 AM

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

Copy link
Copy Markdown

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: 166dbbbeee

ℹ️ 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".

Comment thread adapters/editor-adapter/block-input.ts
@github-actions

github-actions Bot commented Jun 21, 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) 
  60.10 µs ± 896.37 ns    58.96 µs …  61.87 µs  in 10 ×   1607 runs
[dowdiness/btree] bench btree_benchmark.mbt:84 ("bench: build via from_sorted (100)") ok
time (mean ± σ)         range (min … max) 
   2.84 µs ±  11.09 ns     2.83 µs …   2.86 µs  in 10 ×  39237 runs
[dowdiness/btree] bench btree_benchmark.mbt:91 ("bench: build via inserts (1000)") ok
time (mean ± σ)         range (min … max) 
 945.17 µs ±   8.35 µs   930.64 µs … 953.01 µs  in 10 ×     98 runs
[dowdiness/btree] bench btree_benchmark.mbt:96 ("bench: build via from_sorted (1000)") ok
time (mean ± σ)         range (min … max) 
  24.30 µs ± 102.73 ns    24.19 µs …  24.48 µs  in 10 ×   4094 runs
[dowdiness/btree] bench btree_benchmark.mbt:103 ("bench: build via inserts (10000)") ok
time (mean ± σ)         range (min … max) 
  14.25 ms ± 175.60 µs    14.08 ms …  14.54 ms  in 10 ×      7 runs
[dowdiness/btree] bench btree_benchmark.mbt:108 ("bench: build via from_sorted (10000)") ok
time (mean ± σ)         range (min … max) 
 483.99 µs ±   5.88 µs   475.11 µs … 490.14 µs  in 10 ×    210 runs
[dowdiness/btree] bench btree_benchmark.mbt:115 ("bench: delete_range middle 10% (1000)") ok
time (mean ± σ)         range (min … max) 
  49.62 µs ± 349.08 ns    49.24 µs …  50.27 µs  in 10 ×   1906 runs
[dowdiness/btree] bench btree_benchmark.mbt:124 ("bench: delete_range middle 50% (1000)") ok
time (mean ± σ)         range (min … max) 
  45.79 µs ±   2.31 µs    44.45 µs …  50.69 µs  in 10 ×   2237 runs
[dowdiness/btree] bench btree_benchmark.mbt:133 ("bench: delete_range middle 10% (10000)") ok
time (mean ± σ)         range (min … max) 
 633.66 µs ±   3.68 µs   629.47 µs … 638.90 µs  in 10 ×    159 runs
[dowdiness/btree] bench btree_benchmark.mbt:142 ("bench: delete_range middle 50% (10000)") ok
time (mean ± σ)         range (min … max) 
 644.01 µs ±  10.08 µs   632.62 µs … 657.76 µs  in 10 ×    155 runs
[dowdiness/visualizer] bench incr_tap_benchmark.mbt:44 ("bench/incr_tap/snapshot_fanout_256") ok
time (mean ± σ)         range (min … max) 
  57.63 µs ±   1.14 µs    56.50 µs …  59.45 µs  in 10 ×   1590 runs
[dowdiness/visualizer] bench incr_tap_benchmark.mbt:51 ("bench/incr_tap/snapshot_fanout_2048") ok
time (mean ± σ)         range (min … max) 
 562.34 µs ±   2.21 µs   558.26 µs … 565.45 µs  in 10 ×    178 runs
[dowdiness/visualizer] bench incr_tap_benchmark.mbt:58 ("bench/incr_tap/to_visual_graph_fanout_256") ok
time (mean ± σ)         range (min … max) 
 114.73 µs ± 286.25 ns   114.48 µs … 115.14 µs  in 10 ×    874 runs
[dowdiness/visualizer] bench incr_tap_benchmark.mbt:64 ("bench/incr_tap/to_visual_graph_fanout_2048") ok
time (mean ± σ)         range (min … max) 
   1.08 ms ±   2.51 µs     1.08 ms …   1.09 ms  in 10 ×     93 runs
Total tests: 14, passed: 14, failed: 0. [wasm-gc]
node count: 402
node count: 802
node count: 2002
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:32 ("viewnode serialization (100 defs)") ok
time (mean ± σ)         range (min … max) 
   1.44 ms ±  20.81 µs     1.42 ms …   1.49 ms  in 10 ×     70 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:43 ("viewnode serialization (200 defs)") ok
time (mean ± σ)         range (min … max) 
   3.38 ms ± 117.17 µs     3.29 ms …   3.63 ms  in 10 ×     31 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:54 ("viewnode serialization (500 defs)") ok
time (mean ± σ)         range (min … max) 
  15.17 ms ± 828.03 µs    14.28 ms …  16.33 ms  in 10 ×      8 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:65 ("compute_view_patches (100 defs, single edit)") ok
time (mean ± σ)         range (min … max) 
   2.44 ms ±  76.03 µs     2.33 ms …   2.53 ms  in 10 ×     42 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:98 ("json object - incremental keystroke (20 members)") ok
time (mean ± σ)         range (min … max) 
   1.03 ms ±  49.00 µs   961.20 µs …   1.10 ms  in 10 ×     89 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:103 ("json object - incremental keystroke (100 members)") ok
time (mean ± σ)         range (min … max) 
   4.03 ms ±  38.32 µs     3.98 ms …   4.10 ms  in 10 ×     25 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:108 ("json object - incremental keystroke (500 members)") ok
time (mean ± σ)         range (min … max) 
  26.72 ms ± 291.57 µs    26.44 ms …  27.32 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.42 ms ± 172.74 µs    59.17 ms …  59.71 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) 
 774.11 µs ± 158.04 µs   546.32 µs … 989.70 µs  in 10 ×    214 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:123 ("json array - incremental keystroke (100 elements)") ok
time (mean ± σ)         range (min … max) 
   1.93 ms ±  65.29 µs     1.85 ms …   2.03 ms  in 10 ×     55 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:128 ("json array - incremental keystroke (500 elements)") ok
time (mean ± σ)         range (min … max) 
  13.04 ms ± 197.59 µs    12.79 ms …  13.35 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) 
  32.40 ms ± 832.12 µs    31.72 ms …  34.60 ms  in 10 ×      4 runs
[dowdiness/canopy] bench lang/json/companion/dispatch_benchmark.mbt:95 ("text intent dispatch - direct call (100 members)") ok
time (mean ± σ)         range (min … max) 
   3.74 ms ±  18.78 µs     3.71 ms …   3.78 ms  in 10 ×     27 runs
[dowdiness/canopy] bench lang/json/companion/dispatch_benchmark.mbt:100 ("text intent dispatch - caps field (100 members)") ok
time (mean ± σ)         range (min … max) 
   3.74 ms ±  32.34 µs     3.69 ms …   3.77 ms  in 10 ×     28 runs
[dowdiness/canopy] bench lang/json/companion/dispatch_benchmark.mbt:105 ("text intent dispatch - caps optional field (100 members)") ok
time (mean ± σ)         range (min … max) 
   3.87 ms ± 210.71 µs     3.72 ms …   4.30 ms  in 10 ×     27 runs
[dowdiness/canopy] bench lang/json/companion/dispatch_benchmark.mbt:110 ("text intent dispatch - direct call (1000 members)") ok
time (mean ± σ)         range (min … max) 
  48.99 ms ±   1.66 ms    47.36 ms …  53.08 ms  in 10 ×      3 runs
[dowdiness/canopy] bench lang/json/companion/dispatch_benchmark.mbt:115 ("text intent dispatch - caps field (1000 members)") ok
time (mean ± σ)         range (min … max) 
  49.31 ms ± 757.83 µs    48.13 ms …  50.19 ms  in 10 ×      3 runs
[dowdiness/canopy] bench lang/json/companion/dispatch_benchmark.mbt:120 ("text intent dispatch - caps optional field (1000 members)") ok
time (mean ± σ)         range (min … max) 
  48.98 ms ± 935.10 µs    47.89 ms …  50.65 ms  in 10 ×      3 runs
[dowdiness/canopy] bench lang/json/companion/dispatch_benchmark.mbt:143 ("isolated dispatch - direct call x1000") ok
time (mean ± σ)         range (min … max) 
 727.72 ns ±   3.93 ns   722.39 ns … 733.43 ns  in 10 × 100000 runs
[dowdiness/canopy] bench lang/json/companion/dispatch_benchmark.mbt:154 ("isolated dispatch - caps field x1000") ok
time (mean ± σ)         range (min … max) 
 719.61 ns ±   4.65 ns   713.30 ns … 727.11 ns  in 10 × 100000 runs
[dowdiness/canopy] bench lang/json/companion/dispatch_benchmark.mbt:169 ("isolated dispatch - caps optional field x1000") ok
time (mean ± σ)         range (min … max) 
 723.01 ns ±   3.54 ns   718.44 ns … 729.00 ns  in 10 × 100000 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:38 ("tree refresh unchanged (20 defs)") ok
time (mean ± σ)         range (min … max) 
   5.91 µs ±   3.34 ns     5.90 µs …   5.91 µs  in 10 ×  16267 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:48 ("tree refresh unchanged (80 defs)") ok
time (mean ± σ)         range (min … max) 
  23.08 µs ± 115.28 ns    22.97 µs …  23.34 µs  in 10 ×   4078 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:58 ("tree refresh unchanged (320 defs)") ok
time (mean ± σ)         range (min … max) 
 102.59 µs ±   1.79 µs   101.56 µs … 107.62 µs  in 10 ×    977 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:68 ("tree refresh unchanged (1000 defs)") ok
time (mean ± σ)         range (min … max) 
 457.97 µs ±  20.28 µs   442.54 µs … 498.91 µs  in 10 ×    227 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:80 ("tree refresh 1 changed (20 defs)") ok
time (mean ± σ)         range (min … max) 
  11.24 µs ±  29.44 ns    11.22 µs …  11.31 µs  in 10 ×   8873 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:95 ("tree refresh 1 changed (320 defs)") ok
time (mean ± σ)         range (min … max) 
 203.51 µs ± 769.14 ns   202.46 µs … 204.91 µs  in 10 ×    494 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:110 ("tree refresh 1 changed (1000 defs)") ok
time (mean ± σ)         range (min … max) 
 805.34 µs ±   5.43 µs   800.12 µs … 817.53 µs  in 10 ×    125 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:125 ("tree refresh 1 changed (80 defs)") ok
time (mean ± σ)         range (min … max) 
  44.80 µs ± 152.92 ns    44.58 µs …  45.02 µs  in 10 ×   2157 runs
[dowdiness/canopy] bench projection/reconcile_lcs_benchmark_wbtest.mbt:61 ("reconcile wide-siblings (20 defs)") ok
time (mean ± σ)         range (min … max) 
  17.00 µs ± 133.62 ns    16.86 µs …  17.18 µs  in 10 ×   5913 runs
[dowdiness/canopy] bench projection/reconcile_lcs_benchmark_wbtest.mbt:66 ("reconcile wide-siblings (80 defs)") ok
time (mean ± σ)         range (min … max) 
 129.24 µs ±   5.39 µs   126.53 µs … 143.33 µs  in 10 ×    791 runs
[dowdiness/canopy] bench projection/reconcile_lcs_benchmark_wbtest.mbt:71 ("reconcile wide-siblings (320 defs)") ok
time (mean ± σ)         range (min … max) 
   1.49 ms ±   3.98 µs     1.48 ms …   1.50 ms  in 10 ×     68 runs
[dowdiness/canopy] bench projection/reconcile_lcs_benchmark_wbtest.mbt:76 ("reconcile wide-siblings (1000 defs)") ok
time (mean ± σ)         range (min … max) 
  13.78 ms ±  20.63 µs    13.75 ms …  13.83 ms  in 10 ×      8 runs
Total tests: 33, passed: 33, 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
Downloading dowdiness/rle@0.2.2
Downloading dowdiness/incr@0.9.0
Using cached moonbitlang/x@0.4.38
Using cached moonbitlang/quickcheck@0.14.0
Using cached moonbitlang/async@0.16.8
[dowdiness/btree] bench btree_benchmark.mbt:79 ("bench: build via inserts (100)") ok
time (mean ± σ)         range (min … max) 
  60.49 µs ±   2.18 µs    59.18 µs …  66.60 µs  in 10 ×   1599 runs
[dowdiness/btree] bench btree_benchmark.mbt:84 ("bench: build via from_sorted (100)") ok
time (mean ± σ)         range (min … max) 
   2.84 µs ±   6.63 ns     2.83 µs …   2.85 µs  in 10 ×  38743 runs
[dowdiness/btree] bench btree_benchmark.mbt:91 ("bench: build via inserts (1000)") ok
time (mean ± σ)         range (min … max) 
 940.26 µs ±  10.63 µs   927.62 µs … 964.76 µs  in 10 ×    101 runs
[dowdiness/btree] bench btree_benchmark.mbt:96 ("bench: build via from_sorted (1000)") ok
time (mean ± σ)         range (min … max) 
  24.98 µs ±  83.02 ns    24.86 µs …  25.08 µs  in 10 ×   3991 runs
[dowdiness/btree] bench btree_benchmark.mbt:103 ("bench: build via inserts (10000)") ok
time (mean ± σ)         range (min … max) 
  14.43 ms ± 116.70 µs    14.25 ms …  14.59 ms  in 10 ×      7 runs
[dowdiness/btree] bench btree_benchmark.mbt:108 ("bench: build via from_sorted (10000)") ok
time (mean ± σ)         range (min … max) 
 488.54 µs ±   5.28 µs   480.44 µs … 499.16 µs  in 10 ×    210 runs
[dowdiness/btree] bench btree_benchmark.mbt:115 ("bench: delete_range middle 10% (1000)") ok
time (mean ± σ)         range (min … max) 
  51.26 µs ± 377.85 ns    50.61 µs …  51.89 µs  in 10 ×   1926 runs
[dowdiness/btree] bench btree_benchmark.mbt:124 ("bench: delete_range middle 50% (1000)") ok
time (mean ± σ)         range (min … max) 
  46.11 µs ± 189.15 ns    45.81 µs …  46.36 µs  in 10 ×   2162 runs
[dowdiness/btree] bench btree_benchmark.mbt:133 ("bench: delete_range middle 10% (10000)") ok
time (mean ± σ)         range (min … max) 
 657.88 µs ±   6.79 µs   651.59 µs … 672.14 µs  in 10 ×    152 runs
[dowdiness/btree] bench btree_benchmark.mbt:142 ("bench: delete_range middle 50% (10000)") ok
time (mean ± σ)         range (min … max) 
 662.42 µs ±  12.63 µs   647.27 µs … 679.17 µs  in 10 ×    149 runs
[dowdiness/visualizer] bench incr_tap_benchmark.mbt:44 ("bench/incr_tap/snapshot_fanout_256") ok
time (mean ± σ)         range (min … max) 
  57.27 µs ±   1.24 µs    56.48 µs …  60.54 µs  in 10 ×   1670 runs
[dowdiness/visualizer] bench incr_tap_benchmark.mbt:51 ("bench/incr_tap/snapshot_fanout_2048") ok
time (mean ± σ)         range (min … max) 
 600.75 µs ±   4.59 µs   591.99 µs … 607.47 µs  in 10 ×    164 runs
[dowdiness/visualizer] bench incr_tap_benchmark.mbt:58 ("bench/incr_tap/to_visual_graph_fanout_256") ok
time (mean ± σ)         range (min … max) 
 116.59 µs ± 335.27 ns   115.98 µs … 116.96 µs  in 10 ×    858 runs
[dowdiness/visualizer] bench incr_tap_benchmark.mbt:64 ("bench/incr_tap/to_visual_graph_fanout_2048") ok
time (mean ± σ)         range (min … max) 
   1.08 ms ±   2.03 µs     1.08 ms …   1.08 ms  in 10 ×     93 runs
Total tests: 14, passed: 14, failed: 0. [wasm-gc]
node count: 402
node count: 802
node count: 2002
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:32 ("viewnode serialization (100 defs)") ok
time (mean ± σ)         range (min … max) 
   1.39 ms ±  13.29 µs     1.37 ms …   1.41 ms  in 10 ×     73 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:43 ("viewnode serialization (200 defs)") ok
time (mean ± σ)         range (min … max) 
   3.44 ms ± 152.70 µs     3.32 ms …   3.77 ms  in 10 ×     31 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:54 ("viewnode serialization (500 defs)") ok
time (mean ± σ)         range (min … max) 
  16.68 ms ±   1.28 ms    15.38 ms …  19.05 ms  in 10 ×      6 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:65 ("compute_view_patches (100 defs, single edit)") ok
time (mean ± σ)         range (min … max) 
   1.39 ms ±  74.17 µs     1.33 ms …   1.53 ms  in 10 ×     72 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:98 ("json object - incremental keystroke (20 members)") ok
time (mean ± σ)         range (min … max) 
   1.07 ms ±  55.09 µs     1.01 ms …   1.18 ms  in 10 ×     82 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:103 ("json object - incremental keystroke (100 members)") ok
time (mean ± σ)         range (min … max) 
   4.19 ms ±  56.11 µs     4.14 ms …   4.31 ms  in 10 ×     24 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:108 ("json object - incremental keystroke (500 members)") ok
time (mean ± σ)         range (min … max) 
  27.68 ms ± 474.69 µs    27.04 ms …  28.53 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) 
  63.21 ms ±   2.15 ms    61.47 ms …  67.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) 
 778.77 µs ± 146.28 µs   567.60 µs … 984.13 µs  in 10 ×    205 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:123 ("json array - incremental keystroke (100 elements)") ok
time (mean ± σ)         range (min … max) 
   1.99 ms ±  52.95 µs     1.94 ms …   2.09 ms  in 10 ×     53 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:128 ("json array - incremental keystroke (500 elements)") ok
time (mean ± σ)         range (min … max) 
  13.15 ms ±  41.72 µs    13.08 ms …  13.21 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) 
  34.57 ms ±   3.44 ms    33.15 ms …  44.31 ms  in 10 ×      4 runs
[dowdiness/canopy] bench lang/json/companion/dispatch_benchmark.mbt:95 ("text intent dispatch - direct call (100 members)") ok
time (mean ± σ)         range (min … max) 
   4.03 ms ±  38.18 µs     3.98 ms …   4.10 ms  in 10 ×     26 runs
[dowdiness/canopy] bench lang/json/companion/dispatch_benchmark.mbt:100 ("text intent dispatch - caps field (100 members)") ok
time (mean ± σ)         range (min … max) 
   4.02 ms ±  53.81 µs     3.95 ms …   4.09 ms  in 10 ×     25 runs
[dowdiness/canopy] bench lang/json/companion/dispatch_benchmark.mbt:105 ("text intent dispatch - caps optional field (100 members)") ok
time (mean ± σ)         range (min … max) 
   3.99 ms ±  37.32 µs     3.94 ms …   4.07 ms  in 10 ×     26 runs
[dowdiness/canopy] bench lang/json/companion/dispatch_benchmark.mbt:110 ("text intent dispatch - direct call (1000 members)") ok
time (mean ± σ)         range (min … max) 
  52.30 ms ±   2.20 ms    50.97 ms …  58.15 ms  in 10 ×      2 runs
[dowdiness/canopy] bench lang/json/companion/dispatch_benchmark.mbt:115 ("text intent dispatch - caps field (1000 members)") ok
time (mean ± σ)         range (min … max) 
  52.35 ms ± 812.97 µs    51.29 ms …  53.84 ms  in 10 ×      2 runs
[dowdiness/canopy] bench lang/json/companion/dispatch_benchmark.mbt:120 ("text intent dispatch - caps optional field (1000 members)") ok
time (mean ± σ)         range (min … max) 
  52.48 ms ± 696.65 µs    51.42 ms …  53.44 ms  in 10 ×      2 runs
[dowdiness/canopy] bench lang/json/companion/dispatch_benchmark.mbt:143 ("isolated dispatch - direct call x1000") ok
time (mean ± σ)         range (min … max) 
 655.65 ns ±   5.81 ns   649.13 ns … 666.19 ns  in 10 × 100000 runs
[dowdiness/canopy] bench lang/json/companion/dispatch_benchmark.mbt:154 ("isolated dispatch - caps field x1000") ok
time (mean ± σ)         range (min … max) 
 684.94 ns ±   4.45 ns   679.12 ns … 693.45 ns  in 10 × 100000 runs
[dowdiness/canopy] bench lang/json/companion/dispatch_benchmark.mbt:169 ("isolated dispatch - caps optional field x1000") ok
time (mean ± σ)         range (min … max) 
 662.37 ns ±   4.86 ns   654.91 ns … 670.54 ns  in 10 × 100000 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:38 ("tree refresh unchanged (20 defs)") ok
time (mean ± σ)         range (min … max) 
   5.51 µs ±   7.25 ns     5.50 µs …   5.52 µs  in 10 ×  17286 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:48 ("tree refresh unchanged (80 defs)") ok
time (mean ± σ)         range (min … max) 
  25.95 µs ± 390.57 ns    25.58 µs …  26.68 µs  in 10 ×   3695 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:58 ("tree refresh unchanged (320 defs)") ok
time (mean ± σ)         range (min … max) 
 114.08 µs ±   2.17 µs   112.57 µs … 119.76 µs  in 10 ×    862 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:68 ("tree refresh unchanged (1000 defs)") ok
time (mean ± σ)         range (min … max) 
 526.60 µs ±   1.71 µs   523.68 µs … 528.54 µs  in 10 ×    190 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:80 ("tree refresh 1 changed (20 defs)") ok
time (mean ± σ)         range (min … max) 
  12.01 µs ±  41.85 ns    11.96 µs …  12.08 µs  in 10 ×   8357 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:95 ("tree refresh 1 changed (320 defs)") ok
time (mean ± σ)         range (min … max) 
 242.16 µs ±   1.27 µs   239.97 µs … 243.74 µs  in 10 ×    415 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:110 ("tree refresh 1 changed (1000 defs)") ok
time (mean ± σ)         range (min … max) 
 832.82 µs ±   5.32 µs   828.27 µs … 846.68 µs  in 10 ×    121 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:125 ("tree refresh 1 changed (80 defs)") ok
time (mean ± σ)         range (min … max) 
  51.92 µs ± 238.34 ns    51.59 µs …  52.24 µs  in 10 ×   1919 runs
[dowdiness/canopy] bench projection/reconcile_lcs_benchmark_wbtest.mbt:61 ("reconcile wide-siblings (20 defs)") ok
time (mean ± σ)         range (min … max) 
  17.13 µs ±  34.34 ns    17.09 µs …  17.21 µs  in 10 ×   5835 runs
[dowdiness/canopy] bench projection/reconcile_lcs_benchmark_wbtest.mbt:66 ("reconcile wide-siblings (80 defs)") ok
time (mean ± σ)         range (min … max) 
 126.83 µs ± 777.64 ns   126.22 µs … 128.67 µs  in 10 ×    787 runs
[dowdiness/canopy] bench projection/reconcile_lcs_benchmark_wbtest.mbt:71 ("reconcile wide-siblings (320 defs)") ok
time (mean ± σ)         range (min … max) 
   1.51 ms ±  42.51 µs     1.48 ms …   1.61 ms  in 10 ×     68 runs
[dowdiness/canopy] bench projection/reconcile_lcs_benchmark_wbtest.mbt:76 ("reconcile wide-siblings (1000 defs)") ok
time (mean ± σ)         range (min … max) 
  13.97 ms ±  38.73 µs    13.91 ms …  14.02 ms  in 10 ×      8 runs
Total tests: 33, passed: 33, 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) 
  20.45 µs ± 925.41 ns    19.65 µs …  22.54 µs  in 10 ×   4570 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) 
 105.11 µs ± 373.25 ns   104.64 µs … 105.68 µs  in 10 ×    947 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) 
 456.05 µs ±   6.34 µs   447.13 µs … 462.58 µ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) 
 136.59 µs ± 327.30 ns   136.09 µs … 137.06 µs  in 10 ×    734 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) 
  98.63 µs ± 543.83 ns    98.02 µs …  99.28 µs  in 10 ×    984 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) 
  67.57 µs ± 290.24 ns    67.24 µs …  67.98 µs  in 10 ×   1481 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) 
 103.01 µs ± 243.99 ns   102.71 µs … 103.43 µs  in 10 ×    972 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) 
 211.80 µs ± 901.28 ns   210.67 µs … 213.38 µs  in 10 ×    472 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) 
  44.66 µs ±  26.88 µs    25.56 µs …  95.14 µs  in 10 ×   2295 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:6 ("branch - checkout (10 ops)") ok
time (mean ± σ)         range (min … max) 
   4.07 µs ±  49.30 ns     4.01 µs …   4.15 µs  in 10 ×  24829 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:29 ("branch - checkout (100 ops)") ok
time (mean ± σ)         range (min … max) 
  31.13 µs ± 110.13 ns    30.99 µs …  31.38 µs  in 10 ×   3174 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:47 ("branch - checkout (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 414.28 µs ±  12.91 µs   406.74 µs … 446.06 µs  in 10 ×    245 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:65 ("branch - advance (10 new ops)") ok
time (mean ± σ)         range (min … max) 
  11.63 µs ±   4.88 µs     8.63 µs …  23.24 µs  in 10 ×   8627 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:91 ("branch - advance (100 new ops)") ok
time (mean ± σ)         range (min … max) 
  92.78 µs ±  47.83 µs    57.60 µs … 170.23 µs  in 10 ×   1176 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:117 ("branch - checkout with concurrent branches") ok
time (mean ± σ)         range (min … max) 
  36.46 µs ± 112.27 ns    36.34 µs …  36.67 µs  in 10 ×   2714 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:145 ("branch - checkout with deletes") ok
time (mean ± σ)         range (min … max) 
  36.22 µs ±  55.52 ns    36.11 µs …  36.29 µs  in 10 ×   2768 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.03 µs ± 506.02 ns    25.50 µs …  27.24 µs  in 10 ×   3843 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.18 ms ±   3.64 ms     2.67 ms …  13.11 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) 
  11.27 µs ±  57.91 ns    11.21 µs …  11.37 µs  in 10 ×   8767 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:264 ("branch - to_text (1000 chars)") ok
time (mean ± σ)         range (min … max) 
 117.34 µs ± 587.09 ns   116.54 µs … 118.32 µs  in 10 ×    859 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 ± 227.78 ns     3.67 µs …   4.35 µs  in 10 ×  26732 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:311 ("branch - single advance (50 new ops)") ok
time (mean ± σ)         range (min … max) 
  41.04 µs ±  16.84 µs    31.10 µs …  80.38 µs  in 10 ×   2445 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:342 ("branch - realistic typing (50 chars)") ok
time (mean ± σ)         range (min … max) 
  17.02 ms ±   9.04 ms     6.56 ms …  35.63 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) 
  19.67 µs ±   9.78 µs    11.98 µs …  36.15 µs  in 10 ×   5628 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:6 ("walker - linear history (10 ops)") ok
time (mean ± σ)         range (min … max) 
 654.94 ns ±   6.85 ns   644.75 ns … 663.12 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.99 µs ±  26.91 ns     4.98 µs …   5.07 µs  in 10 ×  19974 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.40 µs ± 373.87 ns    43.09 µs …  44.29 µs  in 10 ×   2319 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.93 µs ±  13.53 ns     5.91 µs …   5.95 µs  in 10 ×  16784 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.95 µs ±   6.31 ns     5.94 µs …   5.96 µs  in 10 ×  16811 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:99 ("walker - diamond pattern (50 diamonds)") ok
time (mean ± σ)         range (min … max) 
   8.20 µs ±  32.35 ns     8.17 µs …   8.27 µs  in 10 ×  12064 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.46 µs ±  17.39 ns     3.45 µs …   3.51 µs  in 10 ×  28832 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.51 µs ±   6.05 ns     5.50 µs …   5.52 µs  in 10 ×  18216 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:176 ("walker - large history (10000 ops)") ok
time (mean ± σ)         range (min … max) 
 455.52 µs ±   1.89 µs   452.40 µs … 458.11 µs  in 10 ×    219 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.14 ms ±  57.02 µs     7.07 ms …   7.25 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.70 ms ±   2.86 ms    21.40 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) 
  50.22 ns ±   0.52 ns    49.30 ns …  50.87 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) 
 141.24 ns ±   0.68 ns   140.11 ns … 142.11 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.05 µs ±   1.49 ns     1.04 µs …   1.05 µs  in 10 ×  95419 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) 
 173.99 ns ±   0.41 ns   173.47 ns … 174.67 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) 
 119.06 ns ±   0.61 ns   118.46 ns … 120.09 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) 
 471.30 ns ±   1.88 ns   468.77 ns … 474.12 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) 
 205.55 ns ±   0.68 ns   204.94 ns … 207.08 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.29 µs ±   2.43 ns     1.29 µs …   1.29 µs  in 10 ×  77746 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.96 ns ±   0.53 ns   141.21 ns … 142.63 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) 
 122.05 ns ±   0.67 ns   121.23 ns … 123.02 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) 
 579.58 ns ±   0.98 ns   578.23 ns … 581.06 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.80 µs ±   6.75 ns     4.79 µs …   4.81 µs  in 10 ×  20745 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) 
 195.38 ns ±   0.25 ns   194.91 ns … 195.76 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.99 µs ±   4.80 ns     4.99 µs …   5.00 µs  in 10 ×  20027 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) 
  68.22 ns ±   0.69 ns    67.23 ns …  69.18 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.71 ns ±   0.47 ns    12.36 ns …  13.47 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) 
 189.59 µs ±   2.11 µs   187.60 µs … 193.15 µs  in 10 ×    487 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.84 ms ±  72.51 µs     2.78 ms …   2.96 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.14 ms ± 178.03 µs     8.93 ms …   9.52 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.45 ms ±  34.98 µs     3.40 ms …   3.52 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.75 ms ± 642.37 µs    29.79 ms …  31.78 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) 
  94.14 ns ±   0.43 ns    93.60 ns …  94.81 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) 
  94.09 ns ±   0.36 ns    93.64 ns …  94.58 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) 
 535.63 µs ±   2.16 µs   532.84 µs … 538.62 µs  in 10 ×    187 runs
[dowdiness/event-graph-walker] bench internal/fugue/jump_ancestors_benchmark.mbt:2 ("jump - sequential append 1K") ok
time (mean ± σ)         range (min … max) 
 152.94 µs ± 763.17 ns   151.80 µs … 153.96 µs  in 10 ×    652 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) 
 150.20 µs ± 827.85 ns   149.29 µs … 151.55 µs  in 10 ×    669 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.34 ms ±  91.09 µs     4.18 ms …   4.43 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.99 µs ± 324.03 ns   148.58 µs … 149.54 µs  in 10 ×    673 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:6 ("oplog - insert (100 ops)") ok
time (mean ± σ)         range (min … max) 
  43.31 µs ± 871.82 ns    42.87 µs …  45.78 µs  in 10 ×   2261 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:20 ("oplog - insert (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 505.81 µs ±   1.63 µs   503.23 µs … 507.81 µs  in 10 ×    199 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) 
  63.20 µs ± 303.00 ns    62.87 µs …  63.68 µs  in 10 ×   1579 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:58 ("oplog - apply_remote (50 ops)") ok
time (mean ± σ)         range (min … max) 
  28.83 µs ±  98.59 ns    28.73 µs …  29.06 µs  in 10 ×   3480 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:79 ("oplog - get_op (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 184.76 ns ±   1.26 ns   183.50 ns … 187.01 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.43 ns ±   0.32 ns    19.99 ns …  20.99 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.82 ns ±   0.20 ns    24.48 ns …  25.21 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) 
  11.35 µs ± 105.62 ns    11.22 µs …  11.49 µs  in 10 ×   8621 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:150 ("oplog - walk_and_collect (concurrent)") ok
time (mean ± σ)         range (min … max) 
  18.96 µs ± 120.80 ns    18.81 µs …  19.10 µs  in 10 ×   5215 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:177 ("oplog - diff_and_collect (advance 20)") ok
time (mean ± σ)         range (min … max) 
   5.43 µs ±  10.56 ns     5.41 µs …   5.44 µs  in 10 ×  18394 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:202 ("oplog - walk_filtered (inserts only)") ok
time (mean ± σ)         range (min … max) 
   8.84 µs ±  27.46 ns     8.81 µs …   8.88 µs  in 10 ×  11815 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:233 ("oplog - sequential typing (500 chars)") ok
time (mean ± σ)         range (min … max) 
 236.45 µs ± 602.94 ns   235.61 µs … 237.69 µs  in 10 ×    423 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:249 ("oplog - random position inserts (100 ops)") ok
time (mean ± σ)         range (min … max) 
  42.69 µs ± 208.63 ns    42.32 µs …  42.88 µs  in 10 ×   2361 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:270 ("oplog - sequential typing (100000 chars)") ok
time (mean ± σ)         range (min … max) 
 153.59 ms ±  22.33 ms   124.54 ms … 178.50 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) 
  61.50 ms ±  10.71 ms    44.69 ms …  73.52 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) 
  96.87 µs ± 335.94 ns    96.09 µs …  97.21 µs  in 10 ×    903 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 ±  12.73 µs     1.27 ms …   1.30 ms  in 10 ×     78 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:35 ("text - insert prepend (100 chars)") ok
time (mean ± σ)         range (min … max) 
 155.49 µs ± 687.47 ns   154.51 µs … 156.23 µ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) 
 235.91 µs ± 953.73 ns   234.85 µs … 237.61 µs  in 10 ×    421 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:70 ("text - text() (100-char doc)") ok
time (mean ± σ)         range (min … max) 
  13.69 µs ±  72.76 ns    13.59 µs …  13.80 µs  in 10 ×   7211 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:83 ("text - text() (1000-char doc)") ok
time (mean ± σ)         range (min … max) 
 140.88 µs ± 716.64 ns   139.86 µs … 141.84 µs  in 10 ×    711 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:96 ("text - len() (1000-char doc)") ok
time (mean ± σ)         range (min … max) 
  12.59 ns ±   0.40 ns    12.20 ns …  13.21 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) 
  96.39 ns ±   0.47 ns    95.93 ns …  97.16 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) 
  93.46 ns ±   0.65 ns    92.72 ns …  94.58 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.97 µs ± 284.28 ns    33.71 µs …  34.55 µs  in 10 ×   2875 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:156 ("text - sync apply (50 remote ops)") ok
time (mean ± σ)         range (min … max) 
  51.82 µs ± 637.03 ns    50.92 µs …  52.45 µs  in 10 ×   1914 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:171 ("text - sync apply (500 remote ops)") ok
time (mean ± σ)         range (min … max) 
 623.79 µs ±   6.00 µs   617.98 µs … 632.28 µs  in 10 ×    161 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) 
 106.93 µs ± 362.48 ns   106.30 µs … 107.33 µs  in 10 ×    936 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:216 ("text - checkout (midpoint of 100-op doc)") ok
time (mean ± σ)         range (min … max) 
  14.34 µs ± 118.02 ns    14.22 µs …  14.54 µs  in 10 ×   6940 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:233 ("text - checkout (midpoint of 1000-op doc)") ok
time (mean ± σ)         range (min … max) 
 169.70 µs ± 456.46 ns   169.18 µs … 170.49 µs  in 10 ×    589 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.10 µs ±   8.10 ns     2.09 µs …   2.12 µs  in 10 ×  47746 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 ±  13.75 ns     2.41 µs …   2.45 µs  in 10 ×  40940 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:281 ("text - undo undo() (10-op group)") ok
time (mean ± σ)         range (min … max) 
  29.23 µs ± 162.81 ns    29.08 µs …  29.65 µs  in 10 ×   3416 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:295 ("text - undo undo() (50-op group)") ok
time (mean ± σ)         range (min … max) 
 455.39 µs ±   2.97 µs   451.11 µs … 459.76 µ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.05 µs ±  68.16 ns    32.97 µs …  33.19 µs  in 10 ×   3024 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.35 µs ±   1.46 µs   277.76 µs … 281.81 µ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.30 ms ±   6.95 µs     1.29 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.98 ms ±  14.78 µs     2.96 ms …   3.00 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.93 ms ±   7.26 µs     1.92 ms …   1.94 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.52 ms ±  13.49 µs     2.50 ms …   2.54 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.10 µs ±   1.89 µs     5.76 µs …  10.79 µs  in 10 ×  15198 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.73 µs ±   1.05 µs     6.00 µs …   9.61 µs  in 10 ×  17767 runs
Total tests: 105, passed: 105, failed: 0.

PR branch:

Registry index updated successfully
Symbols updated successfully
Downloading dowdiness/btree@0.1.0
Downloading dowdiness/order-tree@0.1.0
Downloading dowdiness/alga@0.3.0
Using cached dowdiness/rle@0.2.2
Using cached moonbitlang/quickcheck@0.14.0
Warning: [0020]
      ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/container/document.mbt:1178:47 ]
      │
 1178 │   let _result : Result[Unit, DocumentError] = try? self.with_implicit_transaction(() => {
      │                                               ──┬─  
      │                                                 ╰─── Warning (deprecated): `try?` is deprecated.

Do not mechanically replace this with:
  try expr |> Ok catch { e => Err(e) }

That still creates a local `Result` wrapper and usually misses the intended migration.

Default migration: handle the raising expression directly with `try ... catch ... noraise`, especially in local inspect/assert/match/guard/logging/test code:

  try expr catch {
    e => inspect(e, content=...)
  } noraise {
    value => inspect(value, content=...)
  }

Only create `Ok`/`Err` when the `Result` value must escape this local expression: stored, returned, passed to a Result-taking API, or kept for later comparison as data.
──────╯
Warning: [0020]
     ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/container/undo_test.mbt:117:16 ]
     │
 117 │   let result = try? doc.transaction(() => {
     │                ──┬─  
     │                  ╰─── Warning (deprecated): `try?` is deprecated.

Do not mechanically replace this with:
  try expr |> Ok catch { e => Err(e) }

That still creates a local `Result` wrapper and usually misses the intended migration.

Default migration: handle the raising expression directly with `try ... catch ... noraise`, especially in local inspect/assert/match/guard/logging/test code:

  try expr catch {
    e => inspect(e, content=...)
  } noraise {
    value => inspect(value, content=...)
  }

Only create `Ok`/`Err` when the `Result` value must escape this local expression: stored, returned, passed to a Result-taking API, or kept for later comparison as data.
─────╯
Warning: [0020]
    ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/branch/delete_index_test.mbt:37:49 ]
    │
 37 │   let empty_retreat : @rle.Rle[@core.LvRange] = @rle.Rle::new()
    │                                                 ──────┬──────  
    │                                                       ╰──────── Warning (deprecated): Use Rle::Rle() instead
────╯
Warning: [0020]
    ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/causal_graph/walker.mbt:85:5 ]
    │
 85 │     @rle.Rle::new()
    │     ──────┬──────  
    │           ╰──────── Warning (deprecated): Use Rle::Rle() instead
────╯
Warning: [0020]
    ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/causal_graph/walker.mbt:90:5 ]
    │
 90 │     @rle.Rle::new()
    │     ──────┬──────  
    │           ╰──────── Warning (deprecated): Use Rle::Rle() instead
────╯
Warning: [0020]
     ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/core/op_run_wbtest.mbt:352:31 ]
     │
 352 │   let rle : @rle.Rle[OpRun] = @rle.Rle::new()
     │                               ──────┬──────  
     │                                     ╰──────── Warning (deprecated): Use Rle::Rle() instead
─────╯
Warning: [0020]
     ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/core/op_run_wbtest.mbt:379:31 ]
     │
 379 │   let rle : @rle.Rle[OpRun] = @rle.Rle::new()
     │                               ──────┬──────  
     │                                     ╰──────── Warning (deprecated): Use Rle::Rle() instead
─────╯
Warning: [0020]
    ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/document/document_test.mbt:30:46 ]
    │
 30 │   let result : Result[Unit, DocumentError] = try? doc.apply_remote(
    │                                              ──┬─  
    │                                                ╰─── Warning (deprecated): `try?` is deprecated.

Do not mechanically replace this with:
  try expr |> Ok catch { e => Err(e) }

That still creates a local `Result` wrapper and usually misses the intended migration.

Default migration: handle the raising expression directly with `try ... catch ... noraise`, especially in local inspect/assert/match/guard/logging/test code:

  try expr catch {
    e => inspect(e, content=...)
  } noraise {
    value => inspect(value, content=...)
  }

Only create `Ok`/`Err` when the `Result` value must escape this local expression: stored, returned, passed to a Result-taking API, or kept for later comparison as data.
────╯
Warning: [0020]
    ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/document/unicode_safety_wbtest.mbt:99:46 ]
    │
 99 │   let result : Result[Unit, DocumentError] = try? doc.apply_remote(op0)
    │                                              ──┬─  
    │                                                ╰─── Warning (deprecated): `try?` is deprecated.

Do not mechanically replace this with:
  try expr |> Ok catch { e => Err(e) }

That still creates a local `Result` wrapper and usually misses the intended migration.

Default migration: handle the raising expression directly with `try ... catch ... noraise`, especially in local inspect/assert/match/guard/logging/test code:

  try expr catch {
    e => inspect(e, content=...)
  } noraise {
    value => inspect(value, content=...)
  }

Only create `Ok`/`Err` when the `Result` value must escape this local expression: stored, returned, passed to a Result-taking API, or kept for later comparison as data.
────╯
Warning: [0020]
     ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/document/unicode_safety_wbtest.mbt:118:46 ]
     │
 118 │   let result : Result[Unit, DocumentError] = try? doc.apply_remote(op0)
     │                                              ──┬─  
     │                                                ╰─── Warning (deprecated): `try?` is deprecated.

Do not mechanically replace this with:
  try expr |> Ok catch { e => Err(e) }

That still creates a local `Result` wrapper and usually misses the intended migration.

Default migration: handle the raising expression directly with `try ... catch ... noraise`, especially in local inspect/assert/match/guard/logging/test code:

  try expr catch {
    e => inspect(e, content=...)
  } noraise {
    value => inspect(value, content=...)
  }

Only create `Ok`/`Err` when the `Result` value must escape this local expression: stored, returned, passed to a Result-taking API, or kept for later comparison as data.
─────╯
Warning: [0020]
     ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/document/unicode_safety_wbtest.mbt:132:46 ]
     │
 132 │   let result : Result[Unit, DocumentError] = try? doc.apply_remote(op0)
     │                                              ──┬─  
     │                                                ╰─── Warning (deprecated): `try?` is deprecated.

Do not mechanically replace this with:
  try expr |> Ok catch { e => Err(e) }

That still creates a local `Result` wrapper and usually misses the intended migration.

Default migration: handle the raising expression directly with `try ... catch ... noraise`, especially in local inspect/assert/match/guard/logging/test code:

  try expr catch {
    e => inspect(e, content=...)
  } noraise {
    value => inspect(value, content=...)
  }

Only create `Ok`/`Err` when the `Result` value must escape this local expression: stored, returned, passed to a Result-taking API, or kept for later comparison as data.
─────╯
Warning: [0020]
    ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/document/visible_run_wbtest.mbt:56:36 ]
    │
 56 │   let rle : @rle.Rle[VisibleRun] = @rle.Rle::new()
    │                                    ──────┬──────  
    │                                          ╰──────── Warning (deprecated): Use Rle::Rle() instead
────╯
Warning: [0020]
    ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/document/visible_run_wbtest.mbt:67:36 ]
    │
 67 │   let rle : @rle.Rle[VisibleRun] = @rle.Rle::new()
    │                                    ──────┬──────  
    │                                          ╰──────── Warning (deprecated): Use Rle::Rle() instead
────╯
Warning: [0020]
    ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/document/visible_run_wbtest.mbt:77:36 ]
    │
 77 │   let rle : @rle.Rle[VisibleRun] = @rle.Rle::new()
    │                                    ──────┬──────  
    │                                          ╰──────── Warning (deprecated): Use Rle::Rle() instead
────╯
Warning: [0020]
     ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/fugue/tree_properties_test.mbt:488:52 ]
     │
 488 │     let result : Result[Unit, @fugue.FugueError] = try? tree.delete(
     │                                                    ──┬─  
     │                                                      ╰─── Warning (deprecated): `try?` is deprecated.

Do not mechanically replace this with:
  try expr |> Ok catch { e => Err(e) }

That still creates a local `Result` wrapper and usually misses the intended migration.

Default migration: handle the raising expression directly with `try ... catch ... noraise`, especially in local inspect/assert/match/guard/logging/test code:

  try expr catch {
    e => inspect(e, content=...)
  } noraise {
    value => inspect(value, content=...)
  }

Only create `Ok`/`Err` when the `Result` value must escape this local expression: stored, returned, passed to a Result-taking API, or kept for later comparison as data.
─────╯
Warning: [0020]
    ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/oplog/oplog.mbt:16:17 ]
    │
 16 │     operations: @rle.Rle::new(),
    │                 ──────┬──────  
    │                       ╰──────── Warning (deprecated): Use Rle::Rle() instead
────╯
Warning: [0020]
   ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/oplog/oplog_test.mbt:9:43 ]
   │
 9 │   let result : Result[Unit, OpLogError] = try? oplog.validate_remote_batch(
   │                                           ──┬─  
   │                                             ╰─── Warning (deprecated): `try?` is deprecated.

Do not mechanically replace this with:
  try expr |> Ok catch { e => Err(e) }

That still creates a local `Result` wrapper and usually misses the intended migration.

Default migration: handle the raising expression directly with `try ... catch ... noraise`, especially in local inspect/assert/match/guard/logging/test code:

  try expr catch {
    e => inspect(e, content=...)
  } noraise {
    value => inspect(value, content=...)
  }

Only create `Ok`/`Err` when the `Result` value must escape this local expression: stored, returned, passed to a Result-taking API, or kept for later comparison as data.
───╯
Warning: [0020]
    ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/oplog/oplog_test.mbt:36:43 ]
    │
 36 │   let result : Result[Unit, OpLogError] = try? oplog.validate_remote_batch(
    │                                           ──┬─  
    │                                             ╰─── Warning (deprecated): `try?` is deprecated.

Do not mechanically replace this with:
  try expr |> Ok catch { e => Err(e) }

That still creates a local `Result` wrapper and usually misses the intended migration.

Default migration: handle the raising expression directly with `try ... catch ... noraise`, especially in local inspect/assert/match/guard/logging/test code:

  try expr catch {
    e => inspect(e, content=...)
  } noraise {
    value => inspect(value, content=...)
  }

Only create `Ok`/`Err` when the `Result` value must escape this local expression: stored, returned, passed to a Result-taking API, or kept for later comparison as data.
────╯
Warning: [0020]
    ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/oplog/oplog_test.mbt:57:43 ]
    │
 57 │   let result : Result[Unit, OpLogError] = try? oplog.validate_remote_batch(
    │                                           ──┬─  
    │                                             ╰─── Warning (deprecated): `try?` is deprecated.

Do not mechanically replace this with:
  try expr |> Ok catch { e => Err(e) }

That still creates a local `Result` wrapper and usually misses the intended migration.

Default migration: handle the raising expression directly with `try ... catch ... noraise`, especially in local inspect/assert/match/guard/logging/test code:

  try expr catch {
    e => inspect(e, content=...)
  } noraise {
    value => inspect(value, content=...)
  }

Only create `Ok`/`Err` when the `Result` value must escape this local expression: stored, returned, passed to a Result-taking API, or kept for later comparison as data.
────╯
Warning: [0020]
    ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/oplog/oplog_test.mbt:70:43 ]
    │
 70 │   let result : Result[Unit, OpLogError] = try? oplog.validate_remote_batch(
    │                                           ──┬─  
    │                                             ╰─── Warning (deprecated): `try?` is deprecated.

Do not mechanically replace this with:
  try expr |> Ok catch { e => Err(e) }

That still creates a local `Result` wrapper and usually misses the intended migration.

Default migration: handle the raising expression directly with `try ... catch ... noraise`, especially in local inspect/assert/match/guard/logging/test code:

  try expr catch {
    e => inspect(e, content=...)
  } noraise {
    value => inspect(value, content=...)
  }

Only create `Ok`/`Err` when the `Result` value must escape this local expression: stored, returned, passed to a Result-taking API, or kept for later comparison as data.
────╯
Warning: [0020]
    ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/oplog/oplog_test.mbt:90:43 ]
    │
 90 │   let result : Result[Unit, OpLogError] = try? oplog.validate_remote_batch(
    │                                           ──┬─  
    │                                             ╰─── Warning (deprecated): `try?` is deprecated.

Do not mechanically replace this with:
  try expr |> Ok catch { e => Err(e) }

That still creates a local `Result` wrapper and usually misses the intended migration.

Default migration: handle the raising expression directly with `try ... catch ... noraise`, especially in local inspect/assert/match/guard/logging/test code:

  try expr catch {
    e => inspect(e, content=...)
  } noraise {
    value => inspect(value, content=...)
  }

Only create `Ok`/`Err` when the `Result` value must escape this local expression: stored, returned, passed to a Result-taking API, or kept for later comparison as data.
────╯
Warning: [0020]
     ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/oplog/oplog_test.mbt:106:43 ]
     │
 106 │   let result : Result[Unit, OpLogError] = try? oplog.validate_remote_batch(
     │                                           ──┬─  
     │                                             ╰─── Warning (deprecated): `try?` is deprecated.

Do not mechanically replace this with:
  try expr |> Ok catch { e => Err(e) }

That still creates a local `Result` wrapper and usually misses the intended migration.

Default migration: handle the raising expression directly with `try ... catch ... noraise`, especially in local inspect/assert/match/guard/logging/test code:

  try expr catch {
    e => inspect(e, content=...)
  } noraise {
    value => inspect(value, content=...)
  }

Only create `Ok`/`Err` when the `Result` value must escape this local expression: stored, returned, passed to a Result-taking API, or kept for later comparison as data.
─────╯
Warning: [0020]
     ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/oplog/oplog_test.mbt:118:54 ]
     │
 118 │   let result : Result[Array[@core.Op], OpLogError] = try? oplog.apply_remote(
     │                                                      ──┬─  
     │                                                        ╰─── Warning (deprecated): `try?` is deprecated.

Do not mechanically replace this with:
  try expr |> Ok catch { e => Err(e) }

That still creates a local `Result` wrapper and usually misses the intended migration.

Default migration: handle the raising expression directly with `try ... catch ... noraise`, especially in local inspect/assert/match/guard/logging/test code:

  try expr catch {
    e => inspect(e, content=...)
  } noraise {
    value => inspect(value, content=...)
  }

Only create `Ok`/`Err` when the `Result` value must escape this local expression: stored, returned, passed to a Result-taking API, or kept for later comparison as data.
─────╯
Warning: [0020]
     ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/internal/oplog/oplog_test.mbt:134:54 ]
     │
 134 │   let result : Result[Array[@core.Op], OpLogError] = try? oplog.apply_remote(op)
     │                                                      ──┬─  
     │                                                        ╰─── Warning (deprecated): `try?` is deprecated.

Do not mechanically replace this with:
  try expr |> Ok catch { e => Err(e) }

That still creates a local `Result` wrapper and usually misses the intended migration.

Default migration: handle the raising expression directly with `try ... catch ... noraise`, especially in local inspect/assert/match/guard/logging/test code:

  try expr catch {
    e => inspect(e, content=...)
  } noraise {
    value => inspect(value, content=...)
  }

Only create `Ok`/`Err` when the `Result` value must escape this local expression: stored, returned, passed to a Result-taking API, or kept for later comparison as data.
─────╯
Warning: [0020]
     ╭─[ /home/runner/work/canopy/canopy/event-graph-walker/text/sync.mbt:143:37 ]
     │
 143 │   let rle : @rle.Rle[@core.OpRun] = @rle.Rle::new()
     │                                     ──────┬──────  
     │                                           ╰──────── Warning (deprecated): Use Rle::Rle() instead
─────╯
[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) 
  20.47 µs ± 748.44 ns    19.74 µs …  22.20 µs  in 10 ×   4661 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) 
 105.27 µs ± 806.97 ns   104.40 µs … 106.42 µs  in 10 ×    957 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) 
 465.42 µs ±   6.18 µs   461.17 µs … 482.26 µs  in 10 ×    214 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) 
 139.14 µs ±   6.14 µs   135.60 µs … 152.40 µs  in 10 ×    731 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) 
  98.24 µs ±  80.46 ns    98.15 µs …  98.35 µs  in 10 ×   1011 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) 
  67.29 µs ± 735.82 ns    66.63 µs …  69.19 µs  in 10 ×   1462 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) 
 101.77 µs ± 254.18 ns   101.52 µs … 102.14 µs  in 10 ×    975 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) 
 213.22 µs ±   1.95 µs   210.31 µs … 217.20 µs  in 10 ×    476 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) 
  41.14 µs ±  19.50 µs    27.31 µs …  84.13 µs  in 10 ×   2178 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:6 ("branch - checkout (10 ops)") ok
time (mean ± σ)         range (min … max) 
   4.17 µs ± 173.45 ns     4.04 µs …   4.52 µs  in 10 ×  24280 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:29 ("branch - checkout (100 ops)") ok
time (mean ± σ)         range (min … max) 
  30.22 µs ±   1.26 µs    29.49 µs …  32.81 µs  in 10 ×   3365 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:47 ("branch - checkout (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 393.08 µs ±   2.28 µs   390.06 µs … 396.76 µs  in 10 ×    254 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:65 ("branch - advance (10 new ops)") ok
time (mean ± σ)         range (min … max) 
  12.00 µs ±   3.97 µs     8.92 µs …  17.93 µs  in 10 ×   8705 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:91 ("branch - advance (100 new ops)") ok
time (mean ± σ)         range (min … max) 
  90.93 µs ±  47.12 µs    60.46 µs … 179.33 µs  in 10 ×   1212 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:117 ("branch - checkout with concurrent branches") ok
time (mean ± σ)         range (min … max) 
  37.02 µs ± 121.24 ns    36.83 µs …  37.23 µs  in 10 ×   2706 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:145 ("branch - checkout with deletes") ok
time (mean ± σ)         range (min … max) 
  36.66 µs ± 169.75 ns    36.43 µs …  36.88 µs  in 10 ×   2740 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.50 µs ± 672.93 ns    26.01 µs …  27.90 µs  in 10 ×   3712 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.18 ms ±   3.55 ms     2.77 ms …  12.92 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) 
  11.13 µs ± 176.34 ns    10.99 µs …  11.49 µs  in 10 ×   8974 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:264 ("branch - to_text (1000 chars)") ok
time (mean ± σ)         range (min … max) 
 118.34 µs ± 995.51 ns   117.05 µs … 120.40 µs  in 10 ×    856 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.91 µs ± 218.58 ns     3.73 µs …   4.38 µs  in 10 ×  26148 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.44 µs ±  31.24 µs    32.05 µs … 122.42 µs  in 10 ×   2564 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:342 ("branch - realistic typing (50 chars)") ok
time (mean ± σ)         range (min … max) 
  17.89 ms ±   5.58 ms     9.20 ms …  25.15 ms  in 10 ×     21 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:375 ("branch - concurrent merge scenario") ok
time (mean ± σ)         range (min … max) 
  15.06 µs ±   4.91 µs    12.46 µs …  28.58 µs  in 10 ×   7266 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:6 ("walker - linear history (10 ops)") ok
time (mean ± σ)         range (min … max) 
 664.58 ns ±   8.28 ns   653.82 ns … 676.25 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.85 µs ±   4.86 ns     4.84 µs …   4.86 µs  in 10 ×  20618 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.42 µs ± 430.67 ns    43.08 µs …  44.51 µs  in 10 ×   2312 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.00 µs ±  16.98 ns     5.98 µs …   6.03 µs  in 10 ×  16627 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.95 µs ±  16.03 ns     5.93 µs …   5.99 µs  in 10 ×  16803 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:99 ("walker - diamond pattern (50 diamonds)") ok
time (mean ± σ)         range (min … max) 
   8.38 µs ±   7.66 ns     8.37 µs …   8.39 µs  in 10 ×  11946 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.44 µs ±   4.17 ns     3.44 µs …   3.45 µs  in 10 ×  28978 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.54 µs ±  14.05 ns     5.52 µs …   5.56 µs  in 10 ×  18048 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:176 ("walker - large history (10000 ops)") ok
time (mean ± σ)         range (min … max) 
 460.96 µs ±   2.82 µs   456.62 µs … 465.92 µs  in 10 ×    218 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.56 ms ± 468.60 µs     7.19 ms …   8.51 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) 
  25.14 ms ±   4.50 ms    21.23 ms …  34.06 ms  in 10 ×      3 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.85 ns ±   0.76 ns    50.58 ns …  52.82 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.33 ns ±   0.45 ns   139.77 ns … 141.11 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.06 µs ±  10.22 ns     1.05 µs …   1.09 µs  in 10 ×  94838 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) 
 171.32 ns ±   0.79 ns   170.72 ns … 172.73 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) 
 119.68 ns ±   0.83 ns   118.81 ns … 121.22 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.98 ns ±   1.35 ns   465.42 ns … 469.79 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) 
 203.04 ns ±   0.46 ns   202.45 ns … 203.81 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.48 ns     1.28 µs …   1.29 µs  in 10 ×  78427 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) 
 143.08 ns ±   0.57 ns   142.30 ns … 143.76 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) 
 122.10 ns ±   0.58 ns   121.16 ns … 123.06 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) 
 583.32 ns ±   1.04 ns   581.83 ns … 585.26 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.82 µs ±   6.88 ns     4.81 µs …   4.84 µs  in 10 ×  20749 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) 
 196.47 ns ±   0.73 ns   195.49 ns … 198.22 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) 
   5.15 µs ± 223.68 ns     5.02 µs …   5.65 µs  in 10 ×  19798 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) 
  67.57 ns ±   1.84 ns    66.16 ns …  72.38 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.46 ns ±   0.42 ns    12.12 ns …  13.09 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) 
 197.47 µs ±   6.65 µs   192.41 µs … 215.19 µs  in 10 ×    438 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.93 ms ±  56.63 µs     2.85 ms …   3.01 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.55 ms ± 344.84 µs     9.14 ms …  10.10 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.46 ms ±  34.03 µs     3.43 ms …   3.53 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) 
  31.36 ms ±   1.00 ms    30.22 ms …  33.28 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) 
  92.79 ns ±   0.82 ns    91.97 ns …  94.57 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) 
  93.01 ns ±   0.39 ns    92.67 ns …  93.72 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) 
 544.64 µs ±   3.41 µs   538.52 µs … 548.59 µs  in 10 ×    186 runs
[dowdiness/event-graph-walker] bench internal/fugue/jump_ancestors_benchmark.mbt:2 ("jump - sequential append 1K") ok
time (mean ± σ)         range (min … max) 
 153.44 µs ± 633.26 ns   152.42 µs … 154.48 µs  in 10 ×    652 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) 
 150.88 µs ± 637.35 ns   149.72 µs … 151.47 µs  in 10 ×    664 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.26 ms ±  43.74 µs     4.20 ms …   4.35 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.94 µs ± 737.62 ns   148.82 µs … 150.82 µs  in 10 ×    660 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:6 ("oplog - insert (100 ops)") ok
time (mean ± σ)         range (min … max) 
  42.26 µs ± 801.92 ns    41.82 µs …  44.52 µs  in 10 ×   2292 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:20 ("oplog - insert (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 506.05 µs ±   1.82 µs   503.14 µs … 509.19 µs  in 10 ×    198 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.73 µs ±  67.17 ns    62.62 µs …  62.86 µs  in 10 ×   1591 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:58 ("oplog - apply_remote (50 ops)") ok
time (mean ± σ)         range (min … max) 
  29.03 µs ±  99.22 ns    28.91 µs …  29.18 µs  in 10 ×   3453 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:79 ("oplog - get_op (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 183.98 ns ±   0.84 ns   183.05 ns … 185.23 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.89 ns ±   0.42 ns    20.36 ns …  21.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) 
  25.24 ns ±   0.30 ns    24.71 ns …  25.61 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) 
  11.39 µs ±  55.47 ns    11.31 µs …  11.50 µs  in 10 ×   8745 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:150 ("oplog - walk_and_collect (concurrent)") ok
time (mean ± σ)         range (min … max) 
  18.98 µs ±  86.32 ns    18.85 µs …  19.09 µs  in 10 ×   5254 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:177 ("oplog - diff_and_collect (advance 20)") ok
time (mean ± σ)         range (min … max) 
   5.42 µs ±  16.80 ns     5.40 µs …   5.45 µs  in 10 ×  18263 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:202 ("oplog - walk_filtered (inserts only)") ok
time (mean ± σ)         range (min … max) 
   8.84 µs ±  39.69 ns     8.79 µs …   8.90 µs  in 10 ×  11683 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:233 ("oplog - sequential typing (500 chars)") ok
time (mean ± σ)         range (min … max) 
 229.78 µs ± 575.18 ns   229.20 µs … 230.93 µs  in 10 ×    436 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.94 µs ± 107.61 ns    41.84 µs …  42.11 µs  in 10 ×   2391 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:270 ("oplog - sequential typing (100000 chars)") ok
time (mean ± σ)         range (min … max) 
 152.58 ms ±  25.09 ms   118.24 ms … 179.60 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) 
  66.11 ms ±  14.18 ms    48.26 ms …  87.42 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) 
  96.57 µs ±   1.07 µs    95.78 µs …  99.35 µs  in 10 ×    908 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:22 ("text - insert append (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   1.32 ms ±  27.24 µs     1.28 ms …   1.36 ms  in 10 ×     73 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:35 ("text - insert prepend (100 chars)") ok
time (mean ± σ)         range (min … max) 
 157.41 µs ± 702.16 ns   156.52 µs … 158.67 µs  in 10 ×    630 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) 
 235.98 µs ± 547.88 ns   235.24 µs … 236.83 µs  in 10 ×    414 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:70 ("text - text() (100-char doc)") ok
time (mean ± σ)         range (min … max) 
  14.32 µs ± 732.84 ns    13.87 µs …  15.75 µs  in 10 ×   7145 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:83 ("text - text() (1000-char doc)") ok
time (mean ± σ)         range (min … max) 
 144.94 µs ± 671.73 ns   143.99 µs … 145.83 µs  in 10 ×    688 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:96 ("text - len() (1000-char doc)") ok
time (mean ± σ)         range (min … max) 
  13.10 ns ±   0.39 ns    12.66 ns …  13.69 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) 
  91.36 ns ±   0.41 ns    90.83 ns …  92.22 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) 
  91.57 ns ±   0.75 ns    90.71 ns …  93.03 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.60 µs ± 425.16 ns    33.20 µs …  34.42 µs  in 10 ×   2886 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:156 ("text - sync apply (50 remote ops)") ok
time (mean ± σ)         range (min … max) 
  52.49 µs ± 399.26 ns    51.87 µs …  52.96 µs  in 10 ×   1870 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:171 ("text - sync apply (500 remote ops)") ok
time (mean ± σ)         range (min … max) 
 641.49 µs ±   3.25 µs   637.54 µs … 647.11 µs  in 10 ×    157 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) 
 108.12 µs ± 357.29 ns   107.71 µs … 108.80 µs  in 10 ×    925 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:216 ("text - checkout (midpoint of 100-op doc)") ok
time (mean ± σ)         range (min … max) 
  14.58 µs ± 119.75 ns    14.45 µs …  14.79 µs  in 10 ×   6710 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:233 ("text - checkout (midpoint of 1000-op doc)") ok
time (mean ± σ)         range (min … max) 
 169.44 µs ± 556.49 ns   168.65 µs … 170.29 µs  in 10 ×    590 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.19 ns     2.08 µs …   2.09 µs  in 10 ×  47886 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.41 µs ±  14.36 ns     2.39 µs …   2.43 µs  in 10 ×  41382 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:281 ("text - undo undo() (10-op group)") ok
time (mean ± σ)         range (min … max) 
  29.22 µs ± 174.91 ns    29.05 µs …  29.54 µs  in 10 ×   3372 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:295 ("text - undo undo() (50-op group)") ok
time (mean ± σ)         range (min … max) 
 465.11 µs ±   1.75 µs   462.72 µs … 467.85 µs  in 10 ×    215 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.01 µs ± 219.22 ns    32.77 µs …  33.53 µs  in 10 ×   3051 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) 
 284.84 µs ± 633.85 ns   283.95 µs … 286.03 µs  in 10 ×    348 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:17 ("cache - sequential append (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   1.31 ms ±  10.60 µs     1.30 ms …   1.33 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) 
   3.01 ms ±  11.34 µs     2.99 ms …   3.03 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.93 ms ±   9.88 µs     1.92 ms …   1.95 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.56 ms ±  32.65 µs     2.52 ms …   2.62 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) 
   6.70 µs ±   1.06 µs     5.78 µs …   9.28 µs  in 10 ×  16179 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) 
   7.16 µs ±   1.72 µs     5.81 µs …  10.86 µs  in 10 ×  16033 runs
Total tests: 105, passed: 105, failed: 0.

Benchmarks run with --release flag

@dowdiness dowdiness force-pushed the markdown-list-payloads branch from 6a7bea8 to 64c09c4 Compare June 21, 2026 05:11
@dowdiness dowdiness merged commit 7482f11 into main Jun 21, 2026
3 checks passed
@dowdiness dowdiness deleted the markdown-list-payloads branch June 21, 2026 05:31
@coderabbitai coderabbitai Bot mentioned this pull request Jun 21, 2026
4 tasks
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