Skip to content

feat(cognition): add minimal incremental runtime#355

Merged
dowdiness merged 9 commits into
mainfrom
feat/cognition-runtime
May 25, 2026
Merged

feat(cognition): add minimal incremental runtime#355
dowdiness merged 9 commits into
mainfrom
feat/cognition-runtime

Conversation

@dowdiness
Copy link
Copy Markdown
Owner

@dowdiness dowdiness commented May 25, 2026

Summary

  • add standalone lib/cognition package with cognition keys, values, revisions, dependencies, and dirty invalidation
  • add deterministic mock recomputation for FileSummary, RepoSummary, and QueryContext
  • document the cognition runtime architecture direction

Validation

  • moon check lib/cognition
  • moon test lib/cognition
  • moon fmt
  • moon info
  • moon check
  • moon test

Summary by CodeRabbit

  • Documentation

    • Added architecture documentation for the Cognition Runtime layer describing incremental cognition artifact management
  • New Features

    • Implemented CognitionStore enabling incremental recomputation with dependency tracking and selective artifact updates
    • Added support for managing file-level summaries and repository context with revision tracking
  • Tests

    • Added comprehensive test suite validating dirty propagation, dependency management, and recomputation behavior

Review Change Stack

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 25, 2026

Warning

Review limit reached

@dowdiness, we couldn't start this review because you've used your available PR reviews for now.

Your plan includes 1 review of capacity. Refill in 52 minutes and 8 seconds.

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

⌛ How to resolve this issue?

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

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

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than trial, open-source, and free plans. In all cases, review capacity refills continuously over time.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1d590cc1-fd6a-409a-bcf8-76f8746782b1

📥 Commits

Reviewing files that changed from the base of the PR and between e92706c and 2ce1773.

📒 Files selected for processing (3)
  • docs/architecture/cognition-runtime.md
  • lib/cognition/cognition_test.mbt
  • lib/cognition/store.mbt
📝 Walkthrough

Walkthrough

This PR introduces the foundational cognition runtime layer for Canopy—an incremental graph system for AI coding context artifacts. It defines core type contracts, implements reactive dependency tracking via incr, provides a recomputation store with selective invalidation, and validates the system with comprehensive tests.

Changes

Cognition Runtime Foundation

Layer / File(s) Summary
Architecture Documentation
docs/architecture/README.md, docs/architecture/cognition-runtime.md
Conceptual overview of the cognition runtime as a minimal incremental graph for artifact dependencies, revisions, and selective recomputation, with mock recomputation rules and non-goals.
Type Contracts and Data Model
lib/cognition/types.mbt, lib/cognition/moon.mod, lib/cognition/moon.pkg, lib/cognition/pkg.generated.mbti
Core data structures (CognitionKey, CognitionValue, Revision, Dependency), module metadata, and generated public API interface defining the store's external surface.
Reactive Dependency Tracking
lib/cognition/reactive.mbt
CognitionReactive wraps an incr runtime to manage versioned revisions and computed dependency edge snapshots, enabling efficient invalidation checks and recomputation gating.
CognitionStore Recomputation Engine
lib/cognition/store.mbt
Mutable store managing values, revisions, and dependency maps, with recomputation machinery that marks keys dirty, selects ready keys whose dependencies are clean, and recomputes derived artifacts (FileSummary, RepoSummary, QueryContext) with transitive invalidation.
Demo and Test Suite
lib/cognition/demo.mbt, lib/cognition/cognition_test.mbt
Deterministic demo function and comprehensive tests validating dependency recording, dirty propagation, selective recomputation, input validation, immutability guarantees, and end-to-end behavior.

Sequence Diagram

sequenceDiagram
  participant Developer as Caller
  participant Store as CognitionStore
  participant Reactive as CognitionReactive
  
  Developer->>Store: set_input(FileText("a"), Text(...))
  Store->>Store: store value & bump revision
  Store->>Store: mark FileSummary dirty
  Store->>Reactive: bump_dependency_revision()
  
  Developer->>Store: recompute_dirty()
  Note over Store: Find ready dirty keys
  Store->>Store: find FileSummary (deps clean)
  Store->>Store: recompute_one(FileSummary)
  Store->>Store: update dependency map
  
  Developer->>Store: get_value(FileSummary)
  Store-->>Developer: computed Summary
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐰 A graph of artifacts, revisions deep and true,
Where dirty marks flow down, and recomputation's due,
File summaries cascade, then repos bloom anew,
Each query context shines with selective work to do! 🌟

🚥 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 'feat(cognition): add minimal incremental runtime' directly and accurately summarizes the main feature being added—a new cognition runtime system with incremental computation capabilities, as evidenced by the new lib/cognition package, CognitionStore implementation, and documentation.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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 feat/cognition-runtime

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

❤️ Share

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

@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented May 25, 2026

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 2ce1773 Commit Preview URL

Branch Preview URL
May 25 2026, 07:28 PM

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 25, 2026

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) 
  67.10 µs ± 903.49 ns    66.06 µs …  68.97 µs  in 10 ×   1462 runs
[dowdiness/btree] bench btree_benchmark.mbt:84 ("bench: build via from_sorted (100)") ok
time (mean ± σ)         range (min … max) 
   3.04 µs ±  77.95 ns     2.96 µs …   3.21 µs  in 10 ×  31347 runs
[dowdiness/btree] bench btree_benchmark.mbt:91 ("bench: build via inserts (1000)") ok
time (mean ± σ)         range (min … max) 
   1.10 ms ±  18.42 µs     1.08 ms …   1.13 ms  in 10 ×     96 runs
[dowdiness/btree] bench btree_benchmark.mbt:96 ("bench: build via from_sorted (1000)") ok
time (mean ± σ)         range (min … max) 
  32.92 µs ± 408.53 ns    32.20 µs …  33.62 µs  in 10 ×   3156 runs
[dowdiness/btree] bench btree_benchmark.mbt:103 ("bench: build via inserts (10000)") ok
time (mean ± σ)         range (min … max) 
  16.26 ms ± 204.65 µs    15.93 ms …  16.55 ms  in 10 ×      7 runs
[dowdiness/btree] bench btree_benchmark.mbt:108 ("bench: build via from_sorted (10000)") ok
time (mean ± σ)         range (min … max) 
 536.18 µs ±   8.63 µs   525.75 µs … 549.60 µs  in 10 ×    190 runs
[dowdiness/btree] bench btree_benchmark.mbt:115 ("bench: delete_range middle 10% (1000)") ok
time (mean ± σ)         range (min … max) 
  56.29 µs ± 630.24 ns    55.53 µs …  57.70 µs  in 10 ×   1753 runs
[dowdiness/btree] bench btree_benchmark.mbt:124 ("bench: delete_range middle 50% (1000)") ok
time (mean ± σ)         range (min … max) 
  53.68 µs ±   6.37 µs    51.36 µs …  71.78 µs  in 10 ×   1937 runs
[dowdiness/btree] bench btree_benchmark.mbt:133 ("bench: delete_range middle 10% (10000)") ok
time (mean ± σ)         range (min … max) 
 665.32 µs ±   2.61 µs   661.24 µs … 668.94 µs  in 10 ×    152 runs
[dowdiness/btree] bench btree_benchmark.mbt:142 ("bench: delete_range middle 50% (10000)") ok
time (mean ± σ)         range (min … max) 
 710.27 µs ±  12.96 µs   693.60 µs … 728.79 µs  in 10 ×    141 runs
Total tests: 10, passed: 10, failed: 0. [wasm-gc]
node count: 402
node count: 802
node count: 2002
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:24 ("viewnode serialization (100 defs)") ok
time (mean ± σ)         range (min … max) 
   2.18 ms ±  27.01 µs     2.14 ms …   2.22 ms  in 10 ×     46 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:35 ("viewnode serialization (200 defs)") ok
time (mean ± σ)         range (min … max) 
   5.13 ms ± 169.88 µs     4.93 ms …   5.41 ms  in 10 ×     19 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:46 ("viewnode serialization (500 defs)") ok
time (mean ± σ)         range (min … max) 
  22.42 ms ±   1.76 ms    20.10 ms …  25.45 ms  in 10 ×      4 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:57 ("compute_view_patches (100 defs, single edit)") ok
time (mean ± σ)         range (min … max) 
   1.61 ms ±  49.01 µs     1.57 ms …   1.73 ms  in 10 ×     55 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:98 ("json object - incremental keystroke (20 members)") ok
time (mean ± σ)         range (min … max) 
   1.09 ms ±  48.77 µs     1.04 ms …   1.18 ms  in 10 ×     90 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:103 ("json object - incremental keystroke (100 members)") ok
time (mean ± σ)         range (min … max) 
   4.31 ms ±  40.09 µs     4.26 ms …   4.38 ms  in 10 ×     23 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:108 ("json object - incremental keystroke (500 members)") ok
time (mean ± σ)         range (min … max) 
  30.01 ms ± 191.00 µs    29.79 ms …  30.44 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) 
  78.39 ms ±   6.70 ms    72.50 ms …  90.19 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) 
 793.22 µs ± 142.58 µs   591.64 µs …   1.01 ms  in 10 ×    167 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:123 ("json array - incremental keystroke (100 elements)") ok
time (mean ± σ)         range (min … max) 
   2.12 ms ±  38.60 µs     2.05 ms …   2.16 ms  in 10 ×     47 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:128 ("json array - incremental keystroke (500 elements)") ok
time (mean ± σ)         range (min … max) 
  15.30 ms ± 191.92 µs    14.98 ms …  15.54 ms  in 10 ×      7 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:133 ("json array - incremental keystroke (1000 elements)") ok
time (mean ± σ)         range (min … max) 
  47.39 ms ±   2.64 ms    44.99 ms …  52.82 ms  in 10 ×      2 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:38 ("tree refresh unchanged (20 defs)") ok
time (mean ± σ)         range (min … max) 
   4.06 µs ±  54.08 ns     4.00 µs …   4.16 µs  in 10 ×  24361 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:48 ("tree refresh unchanged (80 defs)") ok
time (mean ± σ)         range (min … max) 
  15.57 µs ± 159.10 ns    15.25 µs …  15.80 µs  in 10 ×   6494 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:58 ("tree refresh unchanged (320 defs)") ok
time (mean ± σ)         range (min … max) 
  63.91 µs ±   1.22 µs    62.69 µs …  66.42 µs  in 10 ×   1573 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:68 ("tree refresh unchanged (1000 defs)") ok
time (mean ± σ)         range (min … max) 
 228.56 µs ±   1.07 µs   227.08 µs … 230.47 µs  in 10 ×    437 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:80 ("tree refresh 1 changed (20 defs)") ok
time (mean ± σ)         range (min … max) 
   7.71 µs ± 147.03 ns     7.63 µs …   8.12 µs  in 10 ×  13082 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:95 ("tree refresh 1 changed (320 defs)") ok
time (mean ± σ)         range (min … max) 
 117.76 µs ± 634.50 ns   117.14 µs … 118.94 µs  in 10 ×    849 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:110 ("tree refresh 1 changed (1000 defs)") ok
time (mean ± σ)         range (min … max) 
 396.02 µs ±   1.74 µs   393.24 µs … 398.56 µs  in 10 ×    252 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:125 ("tree refresh 1 changed (80 defs)") ok
time (mean ± σ)         range (min … max) 
  28.36 µs ± 147.04 ns    28.21 µs …  28.59 µs  in 10 ×   3542 runs
Total tests: 20, passed: 20, failed: 0. [js]

PR branch:

Registry index cloned successfully
Symbols updated successfully
Downloading dowdiness/rle@0.2.0
Downloading moonbitlang/x@0.4.38
Downloading moonbitlang/quickcheck@0.11.2
Downloading moonbitlang/async@0.16.8
[dowdiness/btree] bench btree_benchmark.mbt:79 ("bench: build via inserts (100)") ok
time (mean ± σ)         range (min … max) 
  67.37 µs ± 563.79 ns    66.59 µs …  68.62 µs  in 10 ×   1453 runs
[dowdiness/btree] bench btree_benchmark.mbt:84 ("bench: build via from_sorted (100)") ok
time (mean ± σ)         range (min … max) 
   2.86 µs ±  42.52 ns     2.81 µs …   2.92 µs  in 10 ×  35413 runs
[dowdiness/btree] bench btree_benchmark.mbt:91 ("bench: build via inserts (1000)") ok
time (mean ± σ)         range (min … max) 
   1.10 ms ±  30.21 µs     1.07 ms …   1.17 ms  in 10 ×     92 runs
[dowdiness/btree] bench btree_benchmark.mbt:96 ("bench: build via from_sorted (1000)") ok
time (mean ± σ)         range (min … max) 
  30.39 µs ± 841.08 ns    29.38 µs …  32.43 µs  in 10 ×   3323 runs
[dowdiness/btree] bench btree_benchmark.mbt:103 ("bench: build via inserts (10000)") ok
time (mean ± σ)         range (min … max) 
  16.40 ms ± 776.91 µs    15.83 ms …  18.05 ms  in 10 ×      7 runs
[dowdiness/btree] bench btree_benchmark.mbt:108 ("bench: build via from_sorted (10000)") ok
time (mean ± σ)         range (min … max) 
 540.56 µs ±  29.99 µs   508.42 µs … 582.97 µs  in 10 ×    179 runs
[dowdiness/btree] bench btree_benchmark.mbt:115 ("bench: delete_range middle 10% (1000)") ok
time (mean ± σ)         range (min … max) 
  54.60 µs ± 610.01 ns    53.74 µs …  55.50 µs  in 10 ×   1784 runs
[dowdiness/btree] bench btree_benchmark.mbt:124 ("bench: delete_range middle 50% (1000)") ok
time (mean ± σ)         range (min … max) 
  49.51 µs ± 329.27 ns    49.00 µs …  49.87 µs  in 10 ×   1966 runs
[dowdiness/btree] bench btree_benchmark.mbt:133 ("bench: delete_range middle 10% (10000)") ok
time (mean ± σ)         range (min … max) 
 649.93 µs ±   7.12 µs   641.16 µs … 659.76 µs  in 10 ×    157 runs
[dowdiness/btree] bench btree_benchmark.mbt:142 ("bench: delete_range middle 50% (10000)") ok
time (mean ± σ)         range (min … max) 
 696.71 µs ±   7.11 µs   685.67 µs … 706.78 µs  in 10 ×    145 runs
Total tests: 10, passed: 10, failed: 0. [wasm-gc]
node count: 402
node count: 802
node count: 2002
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:24 ("viewnode serialization (100 defs)") ok
time (mean ± σ)         range (min … max) 
   2.08 ms ±  17.33 µs     2.05 ms …   2.11 ms  in 10 ×     48 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:35 ("viewnode serialization (200 defs)") ok
time (mean ± σ)         range (min … max) 
   5.17 ms ± 105.64 µs     5.05 ms …   5.33 ms  in 10 ×     20 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:46 ("viewnode serialization (500 defs)") ok
time (mean ± σ)         range (min … max) 
  26.22 ms ±   2.72 ms    21.56 ms …  30.40 ms  in 10 ×      4 runs
[dowdiness/canopy] bench editor/view_updater_benchmark_wbtest.mbt:57 ("compute_view_patches (100 defs, single edit)") ok
time (mean ± σ)         range (min … max) 
   1.82 ms ±  89.50 µs     1.69 ms …   1.98 ms  in 10 ×     57 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:98 ("json object - incremental keystroke (20 members)") ok
time (mean ± σ)         range (min … max) 
   1.11 ms ± 100.91 µs   971.28 µs …   1.33 ms  in 10 ×     88 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:103 ("json object - incremental keystroke (100 members)") ok
time (mean ± σ)         range (min … max) 
   4.57 ms ± 503.41 µs     4.09 ms …   5.65 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) 
  29.17 ms ± 241.54 µs    28.78 ms …  29.47 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) 
  77.01 ms ±   6.16 ms    71.77 ms …  89.46 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) 
 820.99 µs ± 168.49 µs   594.98 µs …   1.06 ms  in 10 ×    181 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:123 ("json array - incremental keystroke (100 elements)") ok
time (mean ± σ)         range (min … max) 
   2.11 ms ±  75.81 µs     2.01 ms …   2.25 ms  in 10 ×     51 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:128 ("json array - incremental keystroke (500 elements)") ok
time (mean ± σ)         range (min … max) 
  15.25 ms ± 405.23 µs    14.91 ms …  16.29 ms  in 10 ×      7 runs
[dowdiness/canopy] bench lang/json/companion/json_benchmark.mbt:133 ("json array - incremental keystroke (1000 elements)") ok
time (mean ± σ)         range (min … max) 
  47.69 ms ±   4.54 ms    42.87 ms …  57.67 ms  in 10 ×      3 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:38 ("tree refresh unchanged (20 defs)") ok
time (mean ± σ)         range (min … max) 
   3.64 µs ±  67.77 ns     3.56 µs …   3.73 µs  in 10 ×  27074 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:48 ("tree refresh unchanged (80 defs)") ok
time (mean ± σ)         range (min … max) 
  13.65 µs ± 163.45 ns    13.32 µs …  13.82 µs  in 10 ×   7205 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:58 ("tree refresh unchanged (320 defs)") ok
time (mean ± σ)         range (min … max) 
  54.49 µs ± 528.07 ns    54.19 µs …  55.92 µs  in 10 ×   1859 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:68 ("tree refresh unchanged (1000 defs)") ok
time (mean ± σ)         range (min … max) 
 203.05 µs ±   1.27 µs   201.34 µs … 205.24 µs  in 10 ×    487 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:80 ("tree refresh 1 changed (20 defs)") ok
time (mean ± σ)         range (min … max) 
   7.23 µs ±  36.86 ns     7.17 µs …   7.28 µs  in 10 ×  13798 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:95 ("tree refresh 1 changed (320 defs)") ok
time (mean ± σ)         range (min … max) 
 106.08 µs ±   1.11 µs   105.18 µs … 108.76 µs  in 10 ×    951 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:110 ("tree refresh 1 changed (1000 defs)") ok
time (mean ± σ)         range (min … max) 
 370.25 µs ±   2.34 µs   365.92 µs … 373.50 µs  in 10 ×    271 runs
[dowdiness/canopy] bench projection/tree_refresh_benchmark_wbtest.mbt:125 ("tree refresh 1 changed (80 defs)") ok
time (mean ± σ)         range (min … max) 
  25.15 µs ± 144.80 ns    24.95 µs …  25.34 µs  in 10 ×   3963 runs
Total tests: 20, passed: 20, failed: 0. [js]

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) 
  23.84 µs ± 699.70 ns    22.52 µs …  24.65 µs  in 10 ×   4518 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) 
 121.71 µs ± 619.24 ns   120.69 µs … 122.61 µs  in 10 ×    838 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) 
 542.83 µs ±  11.56 µs   530.51 µs … 573.33 µs  in 10 ×    186 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) 
 156.07 µs ±   1.04 µs   154.39 µs … 157.39 µs  in 10 ×    639 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) 
 116.98 µs ± 732.86 ns   116.20 µs … 118.42 µs  in 10 ×    838 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) 
  76.06 µs ± 338.99 ns    75.63 µs …  76.51 µs  in 10 ×   1313 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) 
 118.48 µs ±   1.04 µs   116.62 µs … 119.72 µs  in 10 ×    850 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) 
 208.11 µs ±   1.20 µs   206.75 µs … 210.18 µs  in 10 ×    469 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.48 µs ±  19.60 µs    26.78 µs …  77.94 µs  in 10 ×   2314 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:6 ("branch - checkout (10 ops)") ok
time (mean ± σ)         range (min … max) 
   5.26 µs ±  69.01 ns     5.12 µs …   5.35 µs  in 10 ×  18764 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:29 ("branch - checkout (100 ops)") ok
time (mean ± σ)         range (min … max) 
  29.35 µs ± 180.75 ns    29.07 µs …  29.62 µs  in 10 ×   3412 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:47 ("branch - checkout (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 358.23 µs ±   5.40 µs   349.72 µs … 366.92 µs  in 10 ×    284 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:65 ("branch - advance (10 new ops)") ok
time (mean ± σ)         range (min … max) 
  11.84 µs ±   3.97 µs     9.59 µs …  21.07 µs  in 10 ×   7523 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:91 ("branch - advance (100 new ops)") ok
time (mean ± σ)         range (min … max) 
 113.71 µs ±  69.54 µs    62.66 µs … 233.87 µs  in 10 ×   1050 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:117 ("branch - checkout with concurrent branches") ok
time (mean ± σ)         range (min … max) 
  37.78 µs ± 331.78 ns    37.47 µs …  38.50 µs  in 10 ×   2725 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:145 ("branch - checkout with deletes") ok
time (mean ± σ)         range (min … max) 
  38.74 µs ± 196.97 ns    38.34 µs …  38.95 µs  in 10 ×   2571 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) 
  28.36 µs ± 505.80 ns    27.85 µs …  29.63 µs  in 10 ×   3566 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.90 ms ±   4.33 ms     2.66 ms …  14.94 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) 
  12.78 µs ± 196.79 ns    12.52 µs …  13.13 µs  in 10 ×   7790 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:264 ("branch - to_text (1000 chars)") ok
time (mean ± σ)         range (min … max) 
 134.40 µs ±   1.02 µs   132.81 µs … 136.35 µs  in 10 ×    735 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:285 ("branch - single advance (1 new op)") ok
time (mean ± σ)         range (min … max) 
   4.12 µs ± 269.47 ns     3.92 µs …   4.74 µs  in 10 ×  25288 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:311 ("branch - single advance (50 new ops)") ok
time (mean ± σ)         range (min … max) 
  58.82 µs ±  35.99 µs    33.42 µs … 120.58 µs  in 10 ×   2100 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:342 ("branch - realistic typing (50 chars)") ok
time (mean ± σ)         range (min … max) 
  17.34 ms ±   8.28 ms     6.68 ms …  31.69 ms  in 10 ×     28 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:375 ("branch - concurrent merge scenario") ok
time (mean ± σ)         range (min … max) 
  20.72 µs ±  10.37 µs    13.41 µs …  45.23 µs  in 10 ×   6894 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:6 ("walker - linear history (10 ops)") ok
time (mean ± σ)         range (min … max) 
 616.01 ns ±  10.01 ns   600.32 ns … 626.69 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.53 µs ±  12.32 ns     4.52 µs …   4.55 µs  in 10 ×  21837 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:38 ("walker - linear history (1000 ops)") ok
time (mean ± σ)         range (min … max) 
  42.28 µs ± 483.53 ns    41.48 µs …  42.93 µs  in 10 ×   2379 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.85 µs ±  41.87 ns     5.79 µs …   5.90 µs  in 10 ×  16939 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.94 µs ±  31.18 ns     5.88 µs …   5.98 µs  in 10 ×  16724 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:99 ("walker - diamond pattern (50 diamonds)") ok
time (mean ± σ)         range (min … max) 
   7.86 µs ±  37.83 ns     7.78 µs …   7.90 µs  in 10 ×  12708 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.55 µs ±  14.23 ns     3.51 µs …   3.56 µs  in 10 ×  28292 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.33 µs ± 105.01 ns     5.20 µs …   5.49 µs  in 10 ×  18189 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:176 ("walker - large history (10000 ops)") ok
time (mean ± σ)         range (min … max) 
 456.54 µs ±   1.26 µs   454.47 µs … 458.30 µs  in 10 ×    221 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:196 ("walker - linear history (100000 ops)") ok
time (mean ± σ)         range (min … max) 
   9.35 ms ± 235.06 µs     8.99 ms …   9.67 ms  in 10 ×     12 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) 
  28.74 ms ±   4.58 ms    24.41 ms …  34.91 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) 
  65.10 ns ±   0.89 ns    63.89 ns …  66.41 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) 
 221.10 ns ±   1.47 ns   219.01 ns … 222.73 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.49 µs ±  10.42 ns     1.47 µs …   1.50 µs  in 10 ×  67079 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) 
 237.49 ns ±   1.12 ns   235.46 ns … 238.96 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) 
 147.54 ns ±   1.10 ns   146.45 ns … 149.65 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) 
 568.09 ns ±   1.26 ns   566.57 ns … 570.34 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) 
 354.12 ns ±   7.49 ns   348.22 ns … 368.39 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.96 µs ±   9.97 ns     1.95 µs …   1.98 µs  in 10 ×  51179 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) 
 201.59 ns ±   0.80 ns   200.37 ns … 202.54 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) 
 157.53 ns ±   1.09 ns   156.01 ns … 159.05 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) 
 500.89 ns ±  17.76 ns   490.80 ns … 550.78 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.07 µs ±   5.80 ns     4.06 µs …   4.08 µs  in 10 ×  24586 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) 
 247.18 ns ±   1.38 ns   244.89 ns … 248.79 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.31 µs ±   7.47 ns     4.30 µs …   4.33 µs  in 10 ×  23280 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:251 ("version_vector - agents (5 agents)") ok
time (mean ± σ)         range (min … max) 
  66.57 ns ±   0.80 ns    65.52 ns …  68.12 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) 
  14.28 ns ±   0.54 ns    13.68 ns …  15.35 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) 
 268.12 µs ±  20.11 µs   255.09 µs … 324.38 µs  in 10 ×    397 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) 
   3.16 ms ± 112.86 µs     2.97 ms …   3.28 ms  in 10 ×     31 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) 
  10.17 ms ± 722.31 µs     9.26 ms …  11.14 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.96 ms ± 388.87 µs     3.74 ms …   5.06 ms  in 10 ×     25 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) 
  35.33 ms ± 981.18 µs    33.64 ms …  36.57 ms  in 10 ×      3 runs
[dowdiness/event-graph-walker] bench internal/document/document_benchmark.mbt:113 ("bench: warm cache position query (1000 chars)") ok
time (mean ± σ)         range (min … max) 
  96.31 ns ±   1.79 ns    93.21 ns …  98.32 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) 
  98.68 ns ±   2.47 ns    95.07 ns … 101.90 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) 
 611.11 µs ±  17.40 µs   595.32 µs … 651.26 µs  in 10 ×    171 runs
[dowdiness/event-graph-walker] bench internal/fugue/jump_ancestors_benchmark.mbt:2 ("jump - sequential append 1K") ok
time (mean ± σ)         range (min … max) 
 149.45 µs ±   1.84 µs   146.81 µs … 151.84 µs  in 10 ×    669 runs
[dowdiness/event-graph-walker] bench internal/fugue/jump_ancestors_benchmark.mbt:26 ("jump - concurrent insert into 1K doc") ok
time (mean ± σ)         range (min … max) 
 149.09 µs ±   7.77 µs   144.60 µs … 168.97 µs  in 10 ×    678 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.66 ms ± 108.96 µs     4.50 ms …   4.80 ms  in 10 ×     22 runs
[dowdiness/event-graph-walker] bench internal/fugue/jump_ancestors_benchmark.mbt:90 ("jump - degenerate chain remote insert") ok
time (mean ± σ)         range (min … max) 
 145.99 µs ±   1.02 µs   144.54 µs … 147.41 µs  in 10 ×    634 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:6 ("oplog - insert (100 ops)") ok
time (mean ± σ)         range (min … max) 
  49.43 µs ±   1.40 µs    46.48 µs …  50.87 µs  in 10 ×   2021 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:20 ("oplog - insert (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 602.99 µs ±   7.11 µs   593.06 µs … 611.91 µs  in 10 ×    165 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:34 ("oplog - insert and delete mix (100 ops)") ok
time (mean ± σ)         range (min … max) 
  73.08 µs ± 880.47 ns    71.77 µs …  74.46 µs  in 10 ×   1401 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:58 ("oplog - apply_remote (50 ops)") ok
time (mean ± σ)         range (min … max) 
  34.71 µs ± 155.82 ns    34.50 µs …  34.89 µs  in 10 ×   2877 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:79 ("oplog - get_op (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 152.22 ns ±   3.03 ns   148.92 ns … 158.20 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) 
  25.87 ns ±   0.68 ns    25.11 ns …  27.05 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) 
  28.23 ns ±   0.63 ns    27.07 ns …  29.25 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) 
   9.36 µs ± 127.15 ns     9.21 µs …   9.54 µs  in 10 ×  10663 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:150 ("oplog - walk_and_collect (concurrent)") ok
time (mean ± σ)         range (min … max) 
  16.36 µs ± 131.02 ns    16.14 µs …  16.54 µs  in 10 ×   6281 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.28 µs ±  33.65 ns     5.23 µs …   5.32 µs  in 10 ×  19004 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:202 ("oplog - walk_filtered (inserts only)") ok
time (mean ± σ)         range (min … max) 
   7.80 µs ±  77.73 ns     7.69 µs …   7.91 µs  in 10 ×  13057 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:233 ("oplog - sequential typing (500 chars)") ok
time (mean ± σ)         range (min … max) 
 265.92 µs ±   2.72 µs   262.02 µs … 270.35 µs  in 10 ×    379 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:249 ("oplog - random position inserts (100 ops)") ok
time (mean ± σ)         range (min … max) 
  48.72 µs ± 498.55 ns    47.97 µs …  49.37 µs  in 10 ×   2101 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:270 ("oplog - sequential typing (100000 chars)") ok
time (mean ± σ)         range (min … max) 
 196.50 ms ±  25.36 ms   160.43 ms … 222.41 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) 
  67.05 ms ±  16.90 ms    47.00 ms …  82.80 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) 
 103.90 µs ±   1.31 µs   102.38 µs … 106.11 µs  in 10 ×    899 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:22 ("text - insert append (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   1.40 ms ±  28.55 µs     1.36 ms …   1.43 ms  in 10 ×     72 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:35 ("text - insert prepend (100 chars)") ok
time (mean ± σ)         range (min … max) 
 169.12 µs ±   1.35 µs   167.84 µs … 172.05 µs  in 10 ×    607 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) 
 255.18 µs ±   1.05 µs   253.33 µs … 256.57 µs  in 10 ×    393 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:70 ("text - text() (100-char doc)") ok
time (mean ± σ)         range (min … max) 
  15.25 µs ±   1.07 µs    14.34 µs …  18.01 µs  in 10 ×   6791 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:83 ("text - text() (1000-char doc)") ok
time (mean ± σ)         range (min … max) 
 153.27 µs ±   2.28 µs   150.62 µs … 156.70 µs  in 10 ×    666 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:96 ("text - len() (1000-char doc)") ok
time (mean ± σ)         range (min … max) 
  12.82 ns ±   0.81 ns    11.70 ns …  13.97 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) 
 100.19 ns ±   1.40 ns    98.12 ns … 102.60 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) 
  98.78 ns ±   1.45 ns    96.34 ns … 100.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) 
  37.12 µs ± 219.45 ns    36.73 µs …  37.49 µs  in 10 ×   2743 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:156 ("text - sync apply (50 remote ops)") ok
time (mean ± σ)         range (min … max) 
  58.42 µs ± 836.39 ns    57.03 µs …  59.77 µs  in 10 ×   1700 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:171 ("text - sync apply (500 remote ops)") ok
time (mean ± σ)         range (min … max) 
 722.12 µs ±   9.57 µs   710.19 µs … 739.65 µs  in 10 ×    138 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) 
 121.04 µs ± 977.17 ns   119.39 µs … 122.59 µs  in 10 ×    831 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.50 µs ± 309.55 ns    14.27 µs …  15.34 µs  in 10 ×   6830 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:233 ("text - checkout (midpoint of 1000-op doc)") ok
time (mean ± σ)         range (min … max) 
 149.67 µs ±   1.51 µs   147.89 µs … 151.69 µs  in 10 ×    664 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.38 µs ±  34.61 ns     2.34 µs …   2.43 µs  in 10 ×  44079 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) 
   3.42 µs ±  67.11 ns     3.33 µs …   3.49 µs  in 10 ×  30190 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:281 ("text - undo undo() (10-op group)") ok
time (mean ± σ)         range (min … max) 
  34.66 µs ± 592.92 ns    33.79 µs …  35.58 µs  in 10 ×   2789 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:295 ("text - undo undo() (50-op group)") ok
time (mean ± σ)         range (min … max) 
 527.48 µs ±  13.43 µs   505.88 µs … 541.45 µs  in 10 ×    102 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) 
  39.62 µs ± 306.41 ns    39.20 µs …  40.23 µs  in 10 ×   2534 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) 
 327.80 µs ±   3.82 µs   323.32 µs … 334.25 µs  in 10 ×    307 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:17 ("cache - sequential append (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   1.47 ms ± 121.80 µs     1.39 ms …   1.80 ms  in 10 ×     67 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:34 ("cache - alternating pos (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   3.40 ms ±  81.64 µs     3.30 ms …   3.52 ms  in 10 ×     30 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:52 ("cache - jump to pos 0 every 10 chars (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   2.15 ms ±  30.56 µs     2.11 ms …   2.20 ms  in 10 ×     48 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.83 ms ±  55.70 µs     2.77 ms …   2.98 ms  in 10 ×     36 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) 
   8.12 µs ±   1.41 µs     7.00 µs …  11.65 µs  in 10 ×  14454 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.97 µs ±   1.55 µs     6.72 µs …  11.19 µs  in 10 ×  13244 runs
Total tests: 105, passed: 105, failed: 0.

PR branch:

Registry index updated successfully
Symbols updated successfully
Using cached moonbitlang/quickcheck@0.11.2
Downloading dowdiness/alga@0.3.0
Downloading dowdiness/btree@0.1.0
Using cached dowdiness/rle@0.2.0
Downloading dowdiness/order-tree@0.1.0
[dowdiness/event-graph-walker] bench internal/branch/branch_merge_benchmark.mbt:21 ("merge - concurrent edits (2 agents x 10)") ok
time (mean ± σ)         range (min … max) 
  24.36 µs ± 474.85 ns    23.84 µs …  25.31 µs  in 10 ×   4060 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) 
 120.42 µs ± 908.22 ns   119.36 µs … 121.93 µs  in 10 ×    830 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) 
 540.84 µs ±  13.11 µs   526.24 µs … 569.91 µs  in 10 ×    188 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) 
 157.43 µs ±   1.18 µs   155.59 µs … 158.78 µs  in 10 ×    642 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) 
 118.00 µs ±   5.17 µs   114.57 µs … 132.29 µs  in 10 ×    841 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) 
  74.42 µs ± 583.70 ns    73.42 µs …  75.09 µs  in 10 ×   1371 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) 
 119.75 µs ±   1.38 µs   117.57 µs … 121.97 µs  in 10 ×    857 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) 
 205.56 µs ±   1.20 µs   203.57 µs … 207.09 µs  in 10 ×    471 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.62 µs ±  19.04 µs    26.22 µs …  76.63 µs  in 10 ×   2372 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:6 ("branch - checkout (10 ops)") ok
time (mean ± σ)         range (min … max) 
   5.24 µs ± 125.26 ns     5.08 µs …   5.49 µs  in 10 ×  19206 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:29 ("branch - checkout (100 ops)") ok
time (mean ± σ)         range (min … max) 
  30.14 µs ± 618.51 ns    29.66 µs …  31.75 µs  in 10 ×   3324 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:47 ("branch - checkout (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 359.51 µs ±   4.44 µs   351.11 µs … 365.32 µs  in 10 ×    280 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:65 ("branch - advance (10 new ops)") ok
time (mean ± σ)         range (min … max) 
  11.93 µs ±   3.78 µs     9.38 µs …  19.26 µs  in 10 ×   7618 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:91 ("branch - advance (100 new ops)") ok
time (mean ± σ)         range (min … max) 
  89.62 µs ±  47.78 µs    60.91 µs … 195.24 µs  in 10 ×   1106 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:117 ("branch - checkout with concurrent branches") ok
time (mean ± σ)         range (min … max) 
  35.08 µs ± 289.49 ns    34.66 µs …  35.50 µs  in 10 ×   2844 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:145 ("branch - checkout with deletes") ok
time (mean ± σ)         range (min … max) 
  36.87 µs ± 287.07 ns    36.49 µs …  37.22 µs  in 10 ×   2648 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) 
  28.49 µs ±   3.52 µs    26.55 µs …  38.31 µs  in 10 ×   3720 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.82 ms ±   4.57 ms     2.60 ms …  15.46 ms  in 10 ×     70 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:246 ("branch - to_text (100 chars)") ok
time (mean ± σ)         range (min … max) 
  12.25 µs ± 199.60 ns    11.93 µs …  12.49 µs  in 10 ×   7588 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:264 ("branch - to_text (1000 chars)") ok
time (mean ± σ)         range (min … max) 
 134.76 µs ±   2.87 µs   131.18 µs … 139.25 µs  in 10 ×    737 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:285 ("branch - single advance (1 new op)") ok
time (mean ± σ)         range (min … max) 
   4.09 µs ± 266.93 ns     3.87 µs …   4.71 µs  in 10 ×  24998 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:311 ("branch - single advance (50 new ops)") ok
time (mean ± σ)         range (min … max) 
  47.23 µs ±  22.13 µs    33.51 µs …  97.14 µs  in 10 ×   2158 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:342 ("branch - realistic typing (50 chars)") ok
time (mean ± σ)         range (min … max) 
  17.11 ms ±   8.05 ms     6.72 ms …  31.25 ms  in 10 ×     28 runs
[dowdiness/event-graph-walker] bench internal/branch/branch_benchmark.mbt:375 ("branch - concurrent merge scenario") ok
time (mean ± σ)         range (min … max) 
  22.55 µs ±  11.04 µs    13.07 µs …  47.96 µs  in 10 ×   7017 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:6 ("walker - linear history (10 ops)") ok
time (mean ± σ)         range (min … max) 
 613.55 ns ±   7.30 ns   603.54 ns … 624.77 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.47 µs ±   3.35 ns     4.46 µs …   4.47 µs  in 10 ×  22384 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:38 ("walker - linear history (1000 ops)") ok
time (mean ± σ)         range (min … max) 
  41.95 µs ± 641.54 ns    41.08 µs …  42.89 µs  in 10 ×   2448 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.80 µs ± 133.82 ns     5.68 µs …   6.14 µs  in 10 ×  17056 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.79 µs ±  56.93 ns     5.70 µs …   5.86 µs  in 10 ×  17308 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:99 ("walker - diamond pattern (50 diamonds)") ok
time (mean ± σ)         range (min … max) 
   7.81 µs ±  59.37 ns     7.71 µs …   7.88 µs  in 10 ×  12812 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.52 µs ±  16.23 ns     3.51 µs …   3.55 µs  in 10 ×  28250 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.40 µs ±  45.95 ns     5.34 µs …   5.46 µs  in 10 ×  18365 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:176 ("walker - large history (10000 ops)") ok
time (mean ± σ)         range (min … max) 
 478.93 µs ±   1.11 µs   477.31 µs … 480.62 µs  in 10 ×    209 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/walker_benchmark.mbt:196 ("walker - linear history (100000 ops)") ok
time (mean ± σ)         range (min … max) 
   8.85 ms ± 247.05 µs     8.51 ms …   9.27 ms  in 10 ×     12 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) 
  30.01 ms ±   4.29 ms    26.42 ms …  36.68 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) 
  67.73 ns ±   0.68 ns    66.20 ns …  68.56 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) 
 224.74 ns ±   1.56 ns   221.69 ns … 225.99 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.43 µs ±  11.09 ns     1.41 µs …   1.44 µs  in 10 ×  69345 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) 
 233.67 ns ±   2.03 ns   231.40 ns … 236.97 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) 
 145.73 ns ±   0.65 ns   144.97 ns … 147.06 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) 
 565.64 ns ±   1.56 ns   564.07 ns … 568.05 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) 
 349.21 ns ±   4.10 ns   345.95 ns … 359.44 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.99 µs ±  10.96 ns     1.97 µs …   2.01 µs  in 10 ×  50497 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) 
 199.79 ns ±   1.32 ns   198.04 ns … 201.96 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) 
 155.82 ns ±   1.02 ns   154.69 ns … 157.28 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) 
 500.24 ns ±   1.59 ns   497.27 ns … 502.89 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.06 µs ±   7.21 ns     4.06 µs …   4.08 µs  in 10 ×  24619 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) 
 246.84 ns ±   1.10 ns   245.13 ns … 248.72 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.34 µs ±  89.99 ns     4.29 µs …   4.58 µs  in 10 ×  23198 runs
[dowdiness/event-graph-walker] bench internal/causal_graph/version_vector_benchmark.mbt:251 ("version_vector - agents (5 agents)") ok
time (mean ± σ)         range (min … max) 
  65.64 ns ±   0.93 ns    64.13 ns …  66.80 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) 
  13.82 ns ±   0.79 ns    12.83 ns …  15.31 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) 
 261.74 µs ±  39.60 µs   233.40 µs … 371.56 µs  in 10 ×    384 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) 
   3.42 ms ± 105.91 µs     3.28 ms …   3.59 ms  in 10 ×     30 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) 
  11.24 ms ± 547.39 µs    10.43 ms …  12.17 ms  in 10 ×     10 runs
[dowdiness/event-graph-walker] bench internal/document/document_benchmark.mbt:57 ("bench: 10 remote inserts + queries (1000-char doc)") ok
time (mean ± σ)         range (min … max) 
   4.00 ms ±  99.87 µs     3.86 ms …   4.17 ms  in 10 ×     24 runs
[dowdiness/event-graph-walker] bench internal/document/document_benchmark.mbt:84 ("bench: 10 remote inserts + queries (5000-char doc)") ok
time (mean ± σ)         range (min … max) 
  35.58 ms ± 777.96 µs    34.52 ms …  36.83 ms  in 10 ×      3 runs
[dowdiness/event-graph-walker] bench internal/document/document_benchmark.mbt:113 ("bench: warm cache position query (1000 chars)") ok
time (mean ± σ)         range (min … max) 
 102.62 ns ±   1.37 ns   100.93 ns … 104.80 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) 
 101.79 ns ±   0.60 ns   100.98 ns … 102.60 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) 
 609.53 µs ±  11.57 µs   602.35 µs … 640.96 µs  in 10 ×    165 runs
[dowdiness/event-graph-walker] bench internal/fugue/jump_ancestors_benchmark.mbt:2 ("jump - sequential append 1K") ok
time (mean ± σ)         range (min … max) 
 152.38 µs ±   3.58 µs   149.13 µs … 160.75 µs  in 10 ×    659 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) 
 151.40 µs ±   2.28 µs   147.95 µs … 154.56 µs  in 10 ×    680 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.75 ms ± 113.75 µs     4.65 ms …   4.99 ms  in 10 ×     21 runs
[dowdiness/event-graph-walker] bench internal/fugue/jump_ancestors_benchmark.mbt:90 ("jump - degenerate chain remote insert") ok
time (mean ± σ)         range (min … max) 
 146.55 µs ±   1.02 µs   145.20 µs … 148.10 µs  in 10 ×    684 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:6 ("oplog - insert (100 ops)") ok
time (mean ± σ)         range (min … max) 
  48.84 µs ± 676.77 ns    48.20 µs …  50.33 µs  in 10 ×   2147 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:20 ("oplog - insert (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 598.08 µs ±   4.61 µs   592.96 µs … 603.90 µs  in 10 ×    170 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) 
  72.31 µs ± 786.76 ns    71.16 µs …  73.50 µs  in 10 ×   1379 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:58 ("oplog - apply_remote (50 ops)") ok
time (mean ± σ)         range (min … max) 
  33.36 µs ± 321.07 ns    32.91 µs …  33.82 µs  in 10 ×   2966 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:79 ("oplog - get_op (1000 ops)") ok
time (mean ± σ)         range (min … max) 
 159.45 ns ±   1.03 ns   158.26 ns … 161.26 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) 
  26.71 ns ±   0.74 ns    25.81 ns …  27.76 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) 
  30.66 ns ±   0.54 ns    29.73 ns …  31.35 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) 
   9.58 µs ± 106.77 ns     9.37 µs …   9.73 µs  in 10 ×  10470 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:150 ("oplog - walk_and_collect (concurrent)") ok
time (mean ± σ)         range (min … max) 
  16.52 µs ± 151.32 ns    16.25 µs …  16.74 µs  in 10 ×   6062 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.29 µs ±  15.67 ns     5.26 µs …   5.31 µs  in 10 ×  18790 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:202 ("oplog - walk_filtered (inserts only)") ok
time (mean ± σ)         range (min … max) 
   8.04 µs ±  78.96 ns     7.93 µs …   8.20 µs  in 10 ×  12730 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:233 ("oplog - sequential typing (500 chars)") ok
time (mean ± σ)         range (min … max) 
 274.56 µs ±   2.77 µs   270.60 µs … 277.79 µs  in 10 ×    364 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:249 ("oplog - random position inserts (100 ops)") ok
time (mean ± σ)         range (min … max) 
  49.60 µs ±   3.18 µs    48.22 µs …  58.63 µs  in 10 ×   2047 runs
[dowdiness/event-graph-walker] bench internal/oplog/oplog_benchmark.mbt:270 ("oplog - sequential typing (100000 chars)") ok
time (mean ± σ)         range (min … max) 
 199.89 ms ±  23.42 ms   166.21 ms … 223.77 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) 
  63.65 ms ±  14.24 ms    44.91 ms …  79.60 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) 
 104.23 µs ±   1.02 µs   102.40 µs … 105.35 µs  in 10 ×    898 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:22 ("text - insert append (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   1.42 ms ±  23.79 µs     1.39 ms …   1.45 ms  in 10 ×     71 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:35 ("text - insert prepend (100 chars)") ok
time (mean ± σ)         range (min … max) 
 169.11 µs ±   1.54 µs   167.19 µs … 171.39 µs  in 10 ×    593 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) 
 254.25 µs ±   4.72 µs   250.87 µs … 267.04 µs  in 10 ×    393 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:70 ("text - text() (100-char doc)") ok
time (mean ± σ)         range (min … max) 
  15.53 µs ± 188.15 ns    15.34 µs …  15.85 µs  in 10 ×   6574 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:83 ("text - text() (1000-char doc)") ok
time (mean ± σ)         range (min … max) 
 154.86 µs ±   2.10 µs   151.42 µs … 157.83 µs  in 10 ×    632 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:96 ("text - len() (1000-char doc)") ok
time (mean ± σ)         range (min … max) 
  13.91 ns ±   0.65 ns    12.99 ns …  14.88 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) 
 103.98 ns ±   0.67 ns   102.92 ns … 104.80 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) 
  98.04 ns ±   1.04 ns    96.79 ns …  99.57 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) 
  37.68 µs ± 904.96 ns    36.92 µs …  39.03 µs  in 10 ×   2698 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:156 ("text - sync apply (50 remote ops)") ok
time (mean ± σ)         range (min … max) 
  59.37 µs ± 254.09 ns    59.02 µs …  59.69 µs  in 10 ×   1674 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:171 ("text - sync apply (500 remote ops)") ok
time (mean ± σ)         range (min … max) 
 738.49 µs ±  20.25 µs   705.01 µs … 757.79 µs  in 10 ×    138 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) 
 122.01 µs ±   1.30 µs   120.38 µs … 124.11 µs  in 10 ×    830 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.81 µs ± 164.85 ns    14.58 µs …  15.10 µs  in 10 ×   6859 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:233 ("text - checkout (midpoint of 1000-op doc)") ok
time (mean ± σ)         range (min … max) 
 151.34 µs ±   1.07 µs   150.09 µs … 153.12 µs  in 10 ×    659 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.31 µs ±  25.92 ns     2.28 µs …   2.36 µs  in 10 ×  42838 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) 
   3.27 µs ±  55.32 ns     3.19 µs …   3.36 µs  in 10 ×  30717 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:281 ("text - undo undo() (10-op group)") ok
time (mean ± σ)         range (min … max) 
  35.14 µs ± 946.70 ns    34.39 µs …  37.70 µs  in 10 ×   2868 runs
[dowdiness/event-graph-walker] bench text/text_benchmark.mbt:295 ("text - undo undo() (50-op group)") ok
time (mean ± σ)         range (min … max) 
 517.75 µs ±  11.13 µs   501.43 µs … 533.14 µs  in 10 ×    196 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) 
  38.43 µs ± 579.99 ns    37.60 µs …  39.14 µs  in 10 ×   2506 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) 
 318.59 µs ±   3.27 µs   313.63 µs … 323.25 µs  in 10 ×    310 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:17 ("cache - sequential append (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   1.43 ms ±  14.60 µs     1.40 ms …   1.45 ms  in 10 ×     70 runs
[dowdiness/event-graph-walker] bench text/position_cache_benchmark.mbt:34 ("cache - alternating pos (1000 chars)") ok
time (mean ± σ)         range (min … max) 
   3.40 ms ±  78.38 µs     3.27 ms …   3.52 ms  in 10 ×     29 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) 
   2.17 ms ±  47.95 µs     2.11 ms …   2.29 ms  in 10 ×     47 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.81 ms ±  22.83 µs     2.79 ms …   2.86 ms  in 10 ×     37 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) 
   8.54 µs ±   1.55 µs     7.13 µs …  11.51 µs  in 10 ×  14043 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) 
   8.13 µs ±   1.54 µs     7.06 µs …  11.79 µs  in 10 ×  15343 runs
Total tests: 105, passed: 105, failed: 0.

Benchmarks run with --release flag

Copy link
Copy Markdown

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

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 26f15db950

ℹ️ 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 lib/cognition/store.mbt
Comment on lines +29 to +34
pub fn CognitionStore::set_input(
self : CognitionStore,
key : CognitionKey,
value : CognitionValue,
) -> Unit {
self.values[key] = value.copy_value()
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Restrict set_input to FileText/Text inputs

set_input accepts any CognitionKey/CognitionValue pair and writes it directly into the store, so callers can accidentally inject derived artifacts (for example RepoSummary or QueryContext) or wrong value variants as inputs. In those cases dependency edges are never established for the injected derived node, and subsequent FileText updates will not reliably invalidate it, causing stale context to be returned from get_value. Please validate set_input so only FileText(path) with Text(...) is accepted (or split the API for raw inputs vs. derived values).

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

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

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e92706ceba

ℹ️ 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 lib/cognition/store.mbt
Comment on lines +350 to +352
fn CognitionStore::recompute_repo_summary(self : CognitionStore) -> Unit {
let summary_keys = self.known_file_summary_keys()
let items : Array[String] = []
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Seed RepoSummary from FileText inputs on first build

When RepoSummary is recomputed here, it only reads known_file_summary_keys(), which are discovered from already-materialized FileSummary values. If callers load files via set_input(FileText, Text) and then compute RepoSummary (or QueryContext) for the first time, no FileSummary entries exist yet, so the repo summary is built as empty and existing files are omitted until each file is separately computed or later edited. This breaks first-query context accuracy for a common startup flow.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/architecture/cognition-runtime.md`:
- Around line 56-59: The doc currently names concrete types (SymbolSummary,
DecisionLog, AgentMemory, BranchMemory, StaleMemory); remove those specific
identifiers and rewrite the sentence to express only the architectural principle
(e.g., "future cognition artifacts should follow the same graph discipline:
explicit inputs, explicit dependencies, revisions, and selective invalidation
before introducing expensive AI work") so the file remains principle-only;
ensure no type/field names remain (remove or generalize any of SymbolSummary,
DecisionLog, AgentMemory, BranchMemory, StaleMemory).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 2590d55b-2176-4605-b1df-d64dd4bbac83

📥 Commits

Reviewing files that changed from the base of the PR and between 89a2063 and e92706c.

⛔ Files ignored due to path filters (1)
  • moon.work is excluded by !**/*.work
📒 Files selected for processing (10)
  • docs/architecture/README.md
  • docs/architecture/cognition-runtime.md
  • lib/cognition/cognition_test.mbt
  • lib/cognition/demo.mbt
  • lib/cognition/moon.mod
  • lib/cognition/moon.pkg
  • lib/cognition/pkg.generated.mbti
  • lib/cognition/reactive.mbt
  • lib/cognition/store.mbt
  • lib/cognition/types.mbt

Comment thread docs/architecture/cognition-runtime.md Outdated
@dowdiness dowdiness merged commit b565c42 into main May 25, 2026
27 checks passed
@dowdiness dowdiness deleted the feat/cognition-runtime branch May 25, 2026 19:35
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