Skip to content

SRE-565: Fix sync-turborepo not removing deleted workspace dependencies#8493

Merged
TimDiekmann merged 3 commits intomainfrom
t/sre-565-fix-sync-turborepo-failing-after-removing-rust-dependency
Feb 27, 2026
Merged

SRE-565: Fix sync-turborepo not removing deleted workspace dependencies#8493
TimDiekmann merged 3 commits intomainfrom
t/sre-565-fix-sync-turborepo-failing-after-removing-rust-dependency

Conversation

@TimDiekmann
Copy link
Member

🌟 What is the purpose of this PR?

Fix sync-turborepo not removing workspace:* dependencies from package.json when a Rust crate is deleted from the workspace. Also improves error handling and adds documentation.

🔗 Related links

🔍 What does this change?

  • Fix stale dependency retention: The old approach filtered dependencies by querying yarn workspaces list for known package names. When a crate's package.json was deleted, its dependency entry survived as an apparent "external" package. Now filters by workspace:* version protocol instead, which correctly identifies all sync-managed dependencies regardless of whether the target package still exists.
  • Remove yarn/git subprocess calls: The get_yarn_workspace_packages() function (calling yarn workspaces list and git rev-parse) is no longer needed, making the sync faster and removing two external process dependencies.
  • Fix TOCTOU race in read_package_json: Replace try_exists + read_to_string with direct read_to_string and match on NotFound.
  • Improve write_package_json_if_changed: Replace .ok() (which swallowed all read errors) with an explicit match.
  • Add documentation: Module-level docs, struct docs, and # Errors sections on all fallible functions.

Pre-Merge Checklist 🚀

🚢 Has this modified a publishable library?

This PR:

  • does not modify any publishable blocks or libraries, or modifications do not need publishing

📜 Does this require a change to the docs?

The changes in this PR:

  • are internal and do not require a docs change

🕸️ Does this require a change to the Turbo Graph?

The changes in this PR:

  • do not affect the execution graph

🛡 What tests cover this?

  • Manual verification: cargo run --package hash-repo-chores --bin repo-chores-cli -- sync-turborepo (48 packages, 0 failures)
  • Verified that removing hash-graph-test-server from hash-graph's Cargo.toml correctly removes the @rust/hash-graph-test-server entry from package.json

❓ How to test this?

  1. Remove a workspace dependency from any Cargo.toml
  2. Run mise run sync-turborepo
  3. Confirm the corresponding workspace:* entry is removed from the package.json

The retain filter used yarn workspace package names to clear managed
dependencies before re-adding them from Cargo.toml. When a Rust crate
was removed, its package.json disappeared from yarn workspaces, causing
the stale dependency to survive the filter as an "external" package.

Filter by `workspace:*` version protocol instead, which correctly
identifies all sync-managed dependencies regardless of whether the
target package still exists. This also removes the yarn/git subprocess
calls that were only needed to build the workspace name list.
Fix TOCTOU race in read_package_json by reading directly and matching
on NotFound instead of checking existence first. Make the change-check
in write_package_json_if_changed explicit about both match arms.

Add module-level documentation explaining the sync process, naming
conventions, and available Cargo.toml metadata keys. Document all
structs and fallible functions with # Errors sections.
@vercel
Copy link

vercel bot commented Feb 27, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
hash Ready Ready Preview, Comment Feb 27, 2026 1:11pm
3 Skipped Deployments
Project Deployment Actions Updated (UTC)
hashdotdesign Ignored Ignored Preview Feb 27, 2026 1:11pm
hashdotdesign-tokens Ignored Ignored Preview Feb 27, 2026 1:11pm
petrinaut Skipped Skipped Feb 27, 2026 1:11pm

@cursor
Copy link

cursor bot commented Feb 27, 2026

PR Summary

Medium Risk
Changes how package.json dependency cleanup is detected (now by workspace:* protocol) and removes Yarn/Git subprocess discovery, which could affect dependency preservation for edge cases where workspace: is used intentionally outside this tool.

Overview
Fixes stale dependency retention in sync-turborepo by treating all workspace:* entries as sync-managed: existing deps/devDeps now drop VersionProtocol::Workspace(_) before re-adding workspace links from Cargo, so removed crates (or deleted package.jsons) no longer leave orphaned workspace dependencies behind.

Removes the Yarn/Git-based workspace discovery (yarn workspaces list + git rev-parse) and associated error variants, simplifying the sync flow and eliminating external subprocess calls.

Hardens file handling by avoiding TOCTOU checks in read_package_json, improving change-detection error handling in write_package_json_if_changed, and adding module/function # Errors documentation throughout.

Written by Cursor Bugbot for commit 0922a13. This will update automatically on new commits. Configure here.

@github-actions github-actions bot added area/libs Relates to first-party libraries/crates/packages (area) type/eng > backend Owned by the @backend team labels Feb 27, 2026
@augmentcode
Copy link

augmentcode bot commented Feb 27, 2026

🤖 Augment PR Summary

Summary: This PR fixes sync-turborepo so it reliably removes stale Rust workspace dependencies from generated package.json files.

Changes:

  • Switches dependency cleanup to filter by the workspace:* protocol, ensuring removed crates don’t leave behind “external” deps.
  • Removes the yarn workspace enumeration + git root discovery subprocesses, reducing external tooling coupling and speeding up sync.
  • Fixes a TOCTOU read path by reading package.json directly and treating NotFound as “create default”.
  • Makes the “write only if changed” logic more explicit (no blanket .ok()), and keeps output normalized via sorting.
  • Adds module/function documentation and # Errors sections to clarify behavior and failure modes.

Technical Notes: Workspace-managed dependencies are re-derived from Cargo metadata each run, while non-workspace JS dependencies are preserved across syncs.

🤖 Was this summary useful? React with 👍 or 👎

Copy link

@augmentcode augmentcode bot left a comment

Choose a reason for hiding this comment

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

Review completed. 1 suggestions posted.

Fix All in Augment

Comment augment review to trigger a new review at any time.

Distinguish NotFound (expected for new files) from other I/O errors
(permissions, invalid UTF-8) so they are observable via tracing::warn
instead of being silently swallowed.
@vercel vercel bot temporarily deployed to Preview – petrinaut February 27, 2026 13:03 Inactive
@TimDiekmann TimDiekmann added this pull request to the merge queue Feb 27, 2026
@graphite-app graphite-app bot requested review from a team February 27, 2026 13:13
Merged via the queue into main with commit e4abbb9 Feb 27, 2026
46 of 47 checks passed
@TimDiekmann TimDiekmann deleted the t/sre-565-fix-sync-turborepo-failing-after-removing-rust-dependency branch February 27, 2026 13:21
@github-actions
Copy link
Contributor

Benchmark results

@rust/hash-graph-benches – Integrations

policy_resolution_large

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 2002 $$27.6 \mathrm{ms} \pm 179 \mathrm{μs}\left({\color{gray}-4.171 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$3.47 \mathrm{ms} \pm 12.9 \mathrm{μs}\left({\color{gray}-1.509 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 1001 $$12.6 \mathrm{ms} \pm 78.5 \mathrm{μs}\left({\color{gray}-1.335 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 3314 $$44.0 \mathrm{ms} \pm 334 \mathrm{μs}\left({\color{gray}0.508 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$14.7 \mathrm{ms} \pm 104 \mathrm{μs}\left({\color{gray}-1.855 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 1526 $$24.3 \mathrm{ms} \pm 142 \mathrm{μs}\left({\color{gray}-2.520 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 2078 $$28.4 \mathrm{ms} \pm 198 \mathrm{μs}\left({\color{gray}-3.821 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.81 \mathrm{ms} \pm 19.9 \mathrm{μs}\left({\color{gray}-0.830 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 1033 $$13.4 \mathrm{ms} \pm 101 \mathrm{μs}\left({\color{gray}-3.315 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_medium

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 102 $$3.90 \mathrm{ms} \pm 24.5 \mathrm{μs}\left({\color{gray}-1.236 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$3.11 \mathrm{ms} \pm 15.0 \mathrm{μs}\left({\color{gray}0.813 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 51 $$3.46 \mathrm{ms} \pm 17.5 \mathrm{μs}\left({\color{gray}0.127 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 269 $$5.28 \mathrm{ms} \pm 29.7 \mathrm{μs}\left({\color{gray}-1.627 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$3.71 \mathrm{ms} \pm 18.2 \mathrm{μs}\left({\color{gray}0.131 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 107 $$4.25 \mathrm{ms} \pm 18.9 \mathrm{μs}\left({\color{gray}-0.856 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 133 $$4.53 \mathrm{ms} \pm 27.6 \mathrm{μs}\left({\color{gray}-2.179 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.57 \mathrm{ms} \pm 21.8 \mathrm{μs}\left({\color{gray}0.037 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 63 $$4.22 \mathrm{ms} \pm 32.3 \mathrm{μs}\left({\color{gray}0.194 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_none

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 2 $$2.82 \mathrm{ms} \pm 13.9 \mathrm{μs}\left({\color{gray}0.423 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.76 \mathrm{ms} \pm 13.1 \mathrm{μs}\left({\color{gray}-1.361 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 1 $$2.87 \mathrm{ms} \pm 12.2 \mathrm{μs}\left({\color{gray}-0.248 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 8 $$3.15 \mathrm{ms} \pm 15.3 \mathrm{μs}\left({\color{gray}-0.453 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.95 \mathrm{ms} \pm 15.5 \mathrm{μs}\left({\color{gray}-0.424 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 3 $$3.25 \mathrm{ms} \pm 16.6 \mathrm{μs}\left({\color{gray}-0.329 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_small

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 52 $$3.18 \mathrm{ms} \pm 16.8 \mathrm{μs}\left({\color{gray}-0.292 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.88 \mathrm{ms} \pm 16.7 \mathrm{μs}\left({\color{gray}-0.270 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 25 $$3.05 \mathrm{ms} \pm 15.6 \mathrm{μs}\left({\color{gray}0.684 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 94 $$3.63 \mathrm{ms} \pm 18.9 \mathrm{μs}\left({\color{gray}0.127 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$3.16 \mathrm{ms} \pm 18.1 \mathrm{μs}\left({\color{gray}-0.488 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 26 $$3.41 \mathrm{ms} \pm 21.1 \mathrm{μs}\left({\color{gray}0.053 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 66 $$3.55 \mathrm{ms} \pm 16.7 \mathrm{μs}\left({\color{gray}-0.568 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.14 \mathrm{ms} \pm 13.8 \mathrm{μs}\left({\color{gray}-0.991 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 29 $$3.45 \mathrm{ms} \pm 16.6 \mathrm{μs}\left({\color{gray}-1.086 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_complete

Function Value Mean Flame graphs
entity_by_id;one_depth 1 entities $$41.2 \mathrm{ms} \pm 162 \mathrm{μs}\left({\color{gray}-0.175 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 10 entities $$78.8 \mathrm{ms} \pm 482 \mathrm{μs}\left({\color{gray}0.954 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 25 entities $$45.7 \mathrm{ms} \pm 208 \mathrm{μs}\left({\color{gray}-1.722 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 5 entities $$48.3 \mathrm{ms} \pm 250 \mathrm{μs}\left({\color{gray}0.412 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 50 entities $$57.1 \mathrm{ms} \pm 372 \mathrm{μs}\left({\color{gray}2.43 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 1 entities $$43.4 \mathrm{ms} \pm 194 \mathrm{μs}\left({\color{gray}1.55 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 10 entities $$424 \mathrm{ms} \pm 1.16 \mathrm{ms}\left({\color{gray}1.91 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 25 entities $$107 \mathrm{ms} \pm 610 \mathrm{μs}\left({\color{red}10.2 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 5 entities $$89.7 \mathrm{ms} \pm 524 \mathrm{μs}\left({\color{gray}3.90 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 50 entities $$301 \mathrm{ms} \pm 705 \mathrm{μs}\left({\color{lightgreen}-5.803 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 1 entities $$15.9 \mathrm{ms} \pm 72.4 \mathrm{μs}\left({\color{gray}0.465 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 10 entities $$15.8 \mathrm{ms} \pm 81.7 \mathrm{μs}\left({\color{gray}1.40 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 25 entities $$16.2 \mathrm{ms} \pm 85.3 \mathrm{μs}\left({\color{gray}0.563 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 5 entities $$15.8 \mathrm{ms} \pm 74.9 \mathrm{μs}\left({\color{gray}1.49 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 50 entities $$18.7 \mathrm{ms} \pm 127 \mathrm{μs}\left({\color{gray}0.108 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_linkless

Function Value Mean Flame graphs
entity_by_id 1 entities $$15.9 \mathrm{ms} \pm 101 \mathrm{μs}\left({\color{gray}0.757 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10 entities $$15.6 \mathrm{ms} \pm 75.6 \mathrm{μs}\left({\color{gray}0.371 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 100 entities $$15.6 \mathrm{ms} \pm 75.3 \mathrm{μs}\left({\color{gray}0.197 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 1000 entities $$16.1 \mathrm{ms} \pm 82.3 \mathrm{μs}\left({\color{gray}-1.946 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10000 entities $$23.2 \mathrm{ms} \pm 149 \mathrm{μs}\left({\color{gray}-1.881 \mathrm{\%}}\right) $$ Flame Graph

representative_read_entity

Function Value Mean Flame graphs
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/block/v/1 $$30.3 \mathrm{ms} \pm 279 \mathrm{μs}\left({\color{gray}-0.708 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/book/v/1 $$31.0 \mathrm{ms} \pm 278 \mathrm{μs}\left({\color{gray}-0.042 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/building/v/1 $$30.3 \mathrm{ms} \pm 277 \mathrm{μs}\left({\color{gray}-3.049 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/organization/v/1 $$30.9 \mathrm{ms} \pm 285 \mathrm{μs}\left({\color{gray}0.419 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/page/v/2 $$31.2 \mathrm{ms} \pm 296 \mathrm{μs}\left({\color{gray}0.667 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/person/v/1 $$31.1 \mathrm{ms} \pm 266 \mathrm{μs}\left({\color{gray}1.56 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/playlist/v/1 $$31.4 \mathrm{ms} \pm 278 \mathrm{μs}\left({\color{gray}1.49 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/song/v/1 $$31.0 \mathrm{ms} \pm 302 \mathrm{μs}\left({\color{gray}0.758 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/uk-address/v/1 $$30.1 \mathrm{ms} \pm 270 \mathrm{μs}\left({\color{gray}-1.981 \mathrm{\%}}\right) $$ Flame Graph

representative_read_entity_type

Function Value Mean Flame graphs
get_entity_type_by_id Account ID: bf5a9ef5-dc3b-43cf-a291-6210c0321eba $$8.64 \mathrm{ms} \pm 42.6 \mathrm{μs}\left({\color{gray}0.084 \mathrm{\%}}\right) $$ Flame Graph

representative_read_multiple_entities

Function Value Mean Flame graphs
entity_by_property traversal_paths=0 0 $$90.2 \mathrm{ms} \pm 409 \mathrm{μs}\left({\color{gray}-0.427 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=255 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true $$143 \mathrm{ms} \pm 443 \mathrm{μs}\left({\color{gray}0.179 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false $$99.6 \mathrm{ms} \pm 648 \mathrm{μs}\left({\color{gray}2.82 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true $$106 \mathrm{ms} \pm 580 \mathrm{μs}\left({\color{gray}0.346 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true $$116 \mathrm{ms} \pm 514 \mathrm{μs}\left({\color{gray}1.21 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true $$122 \mathrm{ms} \pm 432 \mathrm{μs}\left({\color{gray}0.112 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=0 0 $$87.3 \mathrm{ms} \pm 402 \mathrm{μs}\left({\color{gray}-0.768 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=255 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true $$116 \mathrm{ms} \pm 498 \mathrm{μs}\left({\color{gray}-0.006 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false $$95.6 \mathrm{ms} \pm 400 \mathrm{μs}\left({\color{gray}0.536 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true $$103 \mathrm{ms} \pm 397 \mathrm{μs}\left({\color{gray}0.190 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true $$106 \mathrm{ms} \pm 416 \mathrm{μs}\left({\color{gray}0.118 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true $$106 \mathrm{ms} \pm 494 \mathrm{μs}\left({\color{gray}0.005 \mathrm{\%}}\right) $$

scenarios

Function Value Mean Flame graphs
full_test query-limited $$133 \mathrm{ms} \pm 610 \mathrm{μs}\left({\color{gray}-4.984 \mathrm{\%}}\right) $$ Flame Graph
full_test query-unlimited $$132 \mathrm{ms} \pm 559 \mathrm{μs}\left({\color{lightgreen}-6.492 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-limited $$103 \mathrm{ms} \pm 499 \mathrm{μs}\left({\color{gray}-1.751 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-unlimited $$586 \mathrm{ms} \pm 3.46 \mathrm{ms}\left({\color{gray}0.993 \mathrm{\%}}\right) $$ Flame Graph

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/libs Relates to first-party libraries/crates/packages (area) type/eng > backend Owned by the @backend team

Development

Successfully merging this pull request may close these issues.

2 participants