Benchmark SQLite and Doublets link operations in C# and Rust - #106
Conversation
Adding .gitkeep for PR creation (default mode). This file will be removed when the task is complete. Issue: #105
`DoubletsLinks::create` called `Doublets::create_by([source, target])`, but `create_by` forwards its argument to `create_links` as a *restriction* of the query. Both the united and the split memory stores ignore that restriction and always create an empty link, so every link the benchmarks created was `(0, 0)` instead of connecting the two given links. That made the `create` benchmark measure an incomplete operation, and made the queries by source and by target search through links that were not actually connected to anything. `DoubletsExt::create_link` is the operation the benchmark means: it creates a link and updates it with the source and the target, which is what `CreateAndUpdate` does in the C# `Platform.Data.Doublets`. The added regression test fails on the previous implementation (`left: 0, right: 1` for the source of the created link) and passes now.
…marks Issue #105 asks for the same object like comparison the C# benchmark does, next to the link related one, and for the same set of storages the sibling comparison repositories use. Storages: `SQLite_File`, `Doublets_United_NonVolatile` and `Doublets_Split_NonVolatile` join the three in-memory ones, so that both databases are measured on volatile and on non-volatile memory. The file backed subjects keep their files in the temporary directory of the machine and remove them when they are dropped. Objects: `BlogPost` and the `Objects` trait mirror `csharp/Model/BlogPosts.cs` (a unique title, a lorem ipsum content and a publication date within the last 30 days, generated deterministically). SQLite stores them as rows of a `blog_posts` table with a unique index on the title, exactly like the Entity Framework Core model of the C# benchmark. Doublets stores them as links only: every character is a point link, a string is the left fold of those symbols and every property is a `((object, marker), value)` pair — the Rust equivalent of the unicode sequences and of `PropertiesOperator` in C#. Helpers: `fill_background` and `fill_benchmarked` build the data of an iteration outside of the measured region, and `temp_path` gives every file backed subject a path of its own. Tested by `tests/storages.rs`, which runs the same link, object and isolation checks against all six subjects, and by `examples/inspect_storage`, which prints what each of them contains after an iteration.
…ption access disabled for this organization [oauth_org_not_allowed] — Your organization has disabled Claude subscription access for Claude Code · Use an Anthropic API key instead, or ask your admin to enable access)
🚨 Solution Draft FailedThe automated solution draft encountered an error: 🤖 Models used:
📎 Failure log uploaded as Gist (3790KB)Now working session is ended, feel free to review and add any feedback on the solution draft. |
|
We need continue from https://gist.githubusercontent.com/konard/a913a039b4a35cf83407a868d301f0cd/raw/dd6d136ca2cffa95f986a769175f495e36ee8482/tmp-hive-mind-log-upload-02vuyE-sanitized.log.txt And fully do what was planned. |
|
🤖 AI Work Session Started Starting automated work session at 2026-09-19T16:40:23.708Z The PR has been converted to draft mode while work is in progress. This comment marks the beginning of an AI work session. Please wait for the session to finish, and provide your feedback. Runtime: solve |
Working session summaryImplemented and finalized PR #106.
This summary was automatically extracted from the AI working session output. |
🤖 Solution Draft LogThis log file contains the complete execution trace of the AI solution draft process. 💰 Cost estimation:
📊 Context and tokens usage:
Total: (587.1K + 20.9M cached) input tokens, 85.6K output tokens, $23.992813 cost 🤖 Models used:
📎 Log file uploaded as Gist (9908KB)Now working session is ended, feel free to review and add any feedback on the solution draft. |
🎉 Auto-mergedThis pull request has been automatically merged by hive-mind.
Auto-merged by hive-mind with --auto-merge flag |
Fixes #105
What changed
mainruns publish results and diagnostic artifactsReproduction and regression coverage
Before the fix, Rust
DoubletsLinks::createproduced(0, 0)links becausecreate_bytreated its argument as a restriction. The regression test now verifies the stored source and target. Storage integration tests exercise links, objects, and isolation for every Rust backend. The C# self-test exercises every operation against all six backends, including the correct high-level Doublets deletion path.Verification
cargo fmt --all -- --checkcargo clippy --lib --tests --benches -- -D warningscargo test --release --lib --tests(34 tests)cargo check --release --benchesdotnet build Comparisons.SQLiteVSDoublets.sln -c Release --warnaserrordotnet run -c Release --no-build -- --self-test(all six variants)actionlintfor both workflow filesThis is benchmark and documentation infrastructure; there are no UI changes or screenshots.