Skip to content

Conversation

@TimDiekmann
Copy link
Member

🌟 What is the purpose of this PR?

Integrate the bon crate for builder pattern generation in the Postgres query compiler, improving code readability and maintainability.

🔍 What does this change?

  • Adds the bon crate as a dependency for builder pattern generation
  • Refactors FromItem to use the builder pattern for creating and composing query components
  • Simplifies complex query construction with more readable builder methods like table(), subquery(), join(), etc.
  • Removes manual construction of nested data structures in favor of builder methods
  • Improves the readability of join operations with methods like on() and using()

🛡 What tests cover this?

Existing tests for the query compiler have been updated to use the new builder pattern.

❓ How to test this?

  1. Checkout the branch
  2. Run the existing test suite to verify that the query compiler still works correctly
  3. Confirm that the generated SQL queries match the expected output

@github-actions github-actions bot added area/deps Relates to third-party dependencies (area) area/libs Relates to first-party libraries/crates/packages (area) type/eng > backend Owned by the @backend team labels Nov 1, 2025
@codecov
Copy link

codecov bot commented Nov 2, 2025

Codecov Report

❌ Patch coverage is 98.10017% with 11 lines in your changes missing coverage. Please review.
✅ Project coverage is 56.02%. Comparing base (519794b) to head (5085354).
⚠️ Report is 8 commits behind head on main.

Files with missing lines Patch % Lines
...store/src/store/postgres/query/statement/insert.rs 0.00% 11 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #7981      +/-   ##
==========================================
+ Coverage   55.80%   56.02%   +0.21%     
==========================================
  Files        1117     1119       +2     
  Lines      101979   102441     +462     
  Branches     4742     4753      +11     
==========================================
+ Hits        56911    57389     +478     
+ Misses      44403    44385      -18     
- Partials      665      667       +2     
Flag Coverage Δ
apps.hash-ai-worker-ts 1.32% <ø> (ø)
apps.hash-api 0.00% <ø> (ø)
blockprotocol.type-system 40.84% <ø> (ø)
local.claude-hooks 0.00% <ø> (ø)
local.harpc-client 51.24% <ø> (ø)
local.hash-backend-utils 4.08% <ø> (ø)
local.hash-graph-sdk 10.88% <ø> (ø)
local.hash-isomorphic-utils 0.00% <ø> (ø)
rust.antsi 0.00% <ø> (ø)
rust.error-stack 90.85% <ø> (ø)
rust.harpc-codec 84.22% <ø> (ø)
rust.harpc-net 96.13% <ø> (+0.01%) ⬆️
rust.harpc-tower 66.80% <ø> (ø)
rust.harpc-types 0.00% <ø> (ø)
rust.harpc-wire-protocol 92.23% <ø> (ø)
rust.hash-codec 71.25% <ø> (ø)
rust.hash-graph-api 2.89% <ø> (ø)
rust.hash-graph-authorization 62.50% <ø> (ø)
rust.hash-graph-postgres-store 25.62% <98.10%> (+2.30%) ⬆️
rust.hash-graph-store 30.70% <ø> (ø)
rust.hash-graph-temporal-versioning 47.68% <ø> (ø)
rust.hash-graph-types 0.00% <ø> (ø)
rust.hash-graph-validation 83.29% <ø> (ø)
rust.hashql-ast 87.17% <ø> (ø)
rust.hashql-compiletest 53.03% <ø> (ø)
rust.hashql-core 81.27% <ø> (ø)
rust.hashql-diagnostics 72.28% <ø> (ø)
rust.hashql-eval 68.56% <ø> (ø)
rust.hashql-hir 90.29% <ø> (ø)
rust.hashql-syntax-jexpr 93.94% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@graphite-app
Copy link
Contributor

graphite-app bot commented Nov 2, 2025

Graphite Automations

"Request backend reviewers once CI passes" took an action on this PR • (11/02/25)

1 reviewer was added to this PR based on Tim Diekmann's automation.

"Request Rust reviewers once CI passes" took an action on this PR • (11/02/25)

1 reviewer was added to this PR based on Tim Diekmann's automation.

"Request DevOps reviewers once CI passes" took an action on this PR • (11/02/25)

1 reviewer was added to this PR based on Tim Diekmann's automation.

@TimDiekmann TimDiekmann force-pushed the t/be-190-introduce-builder-pattern-for-select-statement branch from fac95ae to 0c01ff9 Compare November 2, 2025 23:40
@github-actions github-actions bot removed the area/infra Relates to version control, CI, CD or IaC (area) label Nov 2, 2025
@graphite-app graphite-app bot changed the base branch from t/be-189-merge-joinclause-into-fromitem to graphite-base/7981 November 3, 2025 09:03
@TimDiekmann TimDiekmann force-pushed the t/be-190-introduce-builder-pattern-for-select-statement branch from 0c01ff9 to 5085354 Compare November 3, 2025 09:49
@graphite-app graphite-app bot changed the base branch from graphite-base/7981 to main November 3, 2025 09:50
@graphite-app
Copy link
Contributor

graphite-app bot commented Nov 3, 2025

Merge activity

  • Nov 3, 9:50 AM UTC: Graphite rebased this pull request, because this pull request is set to merge when ready.

@github-actions
Copy link
Contributor

github-actions bot commented Nov 3, 2025

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 157 \mathrm{μs}\left({\color{gray}-2.247 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$3.28 \mathrm{ms} \pm 16.9 \mathrm{μs}\left({\color{gray}-0.244 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 1001 $$12.5 \mathrm{ms} \pm 88.8 \mathrm{μs}\left({\color{lightgreen}-5.813 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 3314 $$43.6 \mathrm{ms} \pm 361 \mathrm{μs}\left({\color{gray}-0.514 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$14.8 \mathrm{ms} \pm 88.2 \mathrm{μs}\left({\color{gray}1.66 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 1526 $$25.1 \mathrm{ms} \pm 128 \mathrm{μs}\left({\color{gray}1.17 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 2078 $$31.7 \mathrm{ms} \pm 204 \mathrm{μs}\left({\color{lightgreen}-31.810 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.72 \mathrm{ms} \pm 13.2 \mathrm{μs}\left({\color{lightgreen}-59.074 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 1033 $$14.3 \mathrm{ms} \pm 94.7 \mathrm{μs}\left({\color{lightgreen}-53.700 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_medium

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 102 $$3.68 \mathrm{ms} \pm 19.0 \mathrm{μs}\left({\color{gray}-2.521 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.75 \mathrm{ms} \pm 13.8 \mathrm{μs}\left({\color{gray}-3.523 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 51 $$3.18 \mathrm{ms} \pm 13.9 \mathrm{μs}\left({\color{gray}-3.751 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 269 $$5.11 \mathrm{ms} \pm 32.6 \mathrm{μs}\left({\color{gray}-0.568 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$3.37 \mathrm{ms} \pm 15.0 \mathrm{μs}\left({\color{gray}-2.104 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 107 $$3.96 \mathrm{ms} \pm 21.1 \mathrm{μs}\left({\color{gray}-2.401 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 133 $$4.37 \mathrm{ms} \pm 25.0 \mathrm{μs}\left({\color{red}6.05 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.25 \mathrm{ms} \pm 12.9 \mathrm{μs}\left({\color{gray}-2.757 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 63 $$4.03 \mathrm{ms} \pm 28.4 \mathrm{μs}\left({\color{gray}2.37 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_none

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 2 $$2.54 \mathrm{ms} \pm 12.2 \mathrm{μs}\left({\color{red}6.13 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.50 \mathrm{ms} \pm 9.05 \mathrm{μs}\left({\color{red}6.38 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 1 $$2.56 \mathrm{ms} \pm 9.10 \mathrm{μs}\left({\color{red}5.70 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 8 $$2.79 \mathrm{ms} \pm 11.3 \mathrm{μs}\left({\color{gray}4.08 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.68 \mathrm{ms} \pm 13.1 \mathrm{μs}\left({\color{red}5.96 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 3 $$2.85 \mathrm{ms} \pm 10.5 \mathrm{μs}\left({\color{gray}3.41 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_small

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 52 $$2.97 \mathrm{ms} \pm 10.2 \mathrm{μs}\left({\color{red}6.34 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.65 \mathrm{ms} \pm 14.9 \mathrm{μs}\left({\color{red}8.25 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 25 $$2.82 \mathrm{ms} \pm 12.8 \mathrm{μs}\left({\color{red}8.00 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 94 $$3.31 \mathrm{ms} \pm 16.4 \mathrm{μs}\left({\color{red}5.69 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$2.86 \mathrm{ms} \pm 12.7 \mathrm{μs}\left({\color{gray}4.86 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 26 $$3.13 \mathrm{ms} \pm 10.6 \mathrm{μs}\left({\color{red}6.65 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 66 $$3.31 \mathrm{ms} \pm 16.2 \mathrm{μs}\left({\color{red}9.03 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.81 \mathrm{ms} \pm 10.4 \mathrm{μs}\left({\color{gray}4.96 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 29 $$3.07 \mathrm{ms} \pm 12.8 \mathrm{μs}\left({\color{red}5.34 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_complete

Function Value Mean Flame graphs
entity_by_id;one_depth 1 entities $$39.7 \mathrm{ms} \pm 154 \mathrm{μs}\left({\color{gray}3.67 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 10 entities $$88.8 \mathrm{ms} \pm 380 \mathrm{μs}\left({\color{gray}3.95 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 25 entities $$44.7 \mathrm{ms} \pm 186 \mathrm{μs}\left({\color{red}5.52 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 5 entities $$47.9 \mathrm{ms} \pm 210 \mathrm{μs}\left({\color{red}7.06 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 50 entities $$54.7 \mathrm{ms} \pm 273 \mathrm{μs}\left({\color{gray}-0.910 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 1 entities $$40.8 \mathrm{ms} \pm 202 \mathrm{μs}\left({\color{gray}2.59 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 10 entities $$497 \mathrm{ms} \pm 1.03 \mathrm{ms}\left({\color{gray}0.781 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 25 entities $$101 \mathrm{ms} \pm 537 \mathrm{μs}\left({\color{red}7.13 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 5 entities $$84.8 \mathrm{ms} \pm 354 \mathrm{μs}\left({\color{gray}2.14 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 50 entities $$293 \mathrm{ms} \pm 828 \mathrm{μs}\left({\color{gray}-0.931 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 1 entities $$15.4 \mathrm{ms} \pm 64.2 \mathrm{μs}\left({\color{gray}4.40 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 10 entities $$15.5 \mathrm{ms} \pm 61.1 \mathrm{μs}\left({\color{gray}1.59 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 25 entities $$15.7 \mathrm{ms} \pm 79.8 \mathrm{μs}\left({\color{gray}1.02 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 5 entities $$15.2 \mathrm{ms} \pm 54.2 \mathrm{μs}\left({\color{gray}0.032 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 50 entities $$18.9 \mathrm{ms} \pm 79.6 \mathrm{μs}\left({\color{gray}0.720 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_linkless

Function Value Mean Flame graphs
entity_by_id 1 entities $$14.8 \mathrm{ms} \pm 64.3 \mathrm{μs}\left({\color{gray}-2.876 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10 entities $$14.8 \mathrm{ms} \pm 64.8 \mathrm{μs}\left({\color{gray}-1.793 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 100 entities $$15.1 \mathrm{ms} \pm 87.8 \mathrm{μs}\left({\color{gray}-1.780 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 1000 entities $$15.7 \mathrm{ms} \pm 76.9 \mathrm{μs}\left({\color{gray}-1.262 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10000 entities $$22.7 \mathrm{ms} \pm 151 \mathrm{μs}\left({\color{gray}-2.124 \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 $$31.5 \mathrm{ms} \pm 292 \mathrm{μs}\left({\color{gray}-0.811 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/book/v/1 $$30.0 \mathrm{ms} \pm 260 \mathrm{μs}\left({\color{gray}1.90 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/building/v/1 $$30.1 \mathrm{ms} \pm 275 \mathrm{μs}\left({\color{gray}-1.828 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/organization/v/1 $$29.7 \mathrm{ms} \pm 311 \mathrm{μs}\left({\color{gray}-4.352 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/page/v/2 $$30.2 \mathrm{ms} \pm 260 \mathrm{μs}\left({\color{gray}0.455 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/person/v/1 $$30.0 \mathrm{ms} \pm 256 \mathrm{μs}\left({\color{gray}-1.229 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/playlist/v/1 $$29.7 \mathrm{ms} \pm 301 \mathrm{μs}\left({\color{gray}-0.530 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/song/v/1 $$30.4 \mathrm{ms} \pm 287 \mathrm{μs}\left({\color{gray}1.79 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/uk-address/v/1 $$29.9 \mathrm{ms} \pm 274 \mathrm{μs}\left({\color{lightgreen}-5.550 \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 $$9.14 \mathrm{ms} \pm 40.7 \mathrm{μs}\left({\color{gray}-0.103 \mathrm{\%}}\right) $$ Flame Graph

representative_read_multiple_entities

Function Value Mean Flame graphs
entity_by_property traversal_paths=0 0 $$57.1 \mathrm{ms} \pm 360 \mathrm{μs}\left({\color{gray}-0.664 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=255 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true $$112 \mathrm{ms} \pm 517 \mathrm{μs}\left({\color{gray}0.563 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false $$63.5 \mathrm{ms} \pm 416 \mathrm{μs}\left({\color{gray}-0.453 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true $$72.1 \mathrm{ms} \pm 343 \mathrm{μs}\left({\color{gray}-0.826 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true $$82.4 \mathrm{ms} \pm 341 \mathrm{μs}\left({\color{gray}0.484 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true $$90.6 \mathrm{ms} \pm 379 \mathrm{μs}\left({\color{gray}2.85 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=0 0 $$51.9 \mathrm{ms} \pm 355 \mathrm{μs}\left({\color{gray}0.559 \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 $$81.4 \mathrm{ms} \pm 374 \mathrm{μs}\left({\color{gray}0.914 \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 $$58.3 \mathrm{ms} \pm 403 \mathrm{μs}\left({\color{gray}1.47 \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 $$67.7 \mathrm{ms} \pm 380 \mathrm{μs}\left({\color{gray}2.52 \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 $$70.0 \mathrm{ms} \pm 396 \mathrm{μs}\left({\color{gray}-0.119 \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 $$70.1 \mathrm{ms} \pm 343 \mathrm{μs}\left({\color{gray}0.524 \mathrm{\%}}\right) $$

scenarios

Function Value Mean Flame graphs
full_test query-limited $$143 \mathrm{ms} \pm 589 \mathrm{μs}\left({\color{gray}1.49 \mathrm{\%}}\right) $$ Flame Graph
full_test query-unlimited $$142 \mathrm{ms} \pm 530 \mathrm{μs}\left({\color{gray}1.98 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-limited $$41.4 \mathrm{ms} \pm 180 \mathrm{μs}\left({\color{lightgreen}-60.673 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-unlimited $$595 \mathrm{ms} \pm 1.25 \mathrm{ms}\left({\color{gray}-0.749 \mathrm{\%}}\right) $$ Flame Graph

@TimDiekmann TimDiekmann added this pull request to the merge queue Nov 4, 2025
Merged via the queue into main with commit 9467010 Nov 4, 2025
165 of 181 checks passed
@TimDiekmann TimDiekmann deleted the t/be-190-introduce-builder-pattern-for-select-statement branch November 4, 2025 10:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/deps Relates to third-party dependencies (area) 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.

3 participants