Skip to content

BE-921: Calculate temporal updates before persistence - #10063

Draft
montekki wants to merge 1 commit into
mainfrom
fs/be-921-batch-the-statements-in-patch-entities
Draft

montekki wants to merge 1 commit into
mainfrom
fs/be-921-batch-the-statements-in-patch-entities

Conversation

@montekki

@montekki montekki commented Oct 16, 2026 •

Copy link
Copy Markdown
Member

🌟 Purpose

Calculate the retained intervals and replacement row before updating temporal metadata. Persist the resulting updates and historical fragments with bulk statements so the same writer can accept a complete patch request.

🔍 Changes

  1. Move the interval-splitting logic from update_temporal_metadata in entity/mod.rs into EntityHistory::replace and EntityHistory::split in entity/history.rs. Retain each loaded row alongside its planned replacement so persistence can distinguish updates from new historical fragments.
  2. Replace the three inline temporal UPDATE variants for live updates, draft updates, and publication with update_entity_temporal_rows in entity/batch/write.rs. It uses UPDATE ... FROM unnest(...) and matches each original row by its full identity and temporal intervals.
  3. Replace the two historical-fragment INSERT statements in update_temporal_metadata with history.inserted() and the existing typed bulk-insert builder, called by update_entity_history in entity/batch/write.rs.
  4. Reduce update_temporal_metadata to constructing the replacement row, calculating its history, calling the shared writer, and returning the calculated temporal bounds. The writer applies updates that retain draft identity before updates that publish drafts, then inserts retained fragments.

The existing archival path remains in place. Tests cover repeated replacements at equal, increasing, and decreasing decision times.

Validation: 25 selected temporal, patch, draft, and read-only tests passed. Clippy, Rust formatting, embedded SQL formatting, and whitespace checks passed.

@montekki
montekki added this pull request to stack #10064 October 16, 2026 09:10
@vercel

vercel Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated
hash Ready Ready Preview Oct 20, 2026 6:07pm UTC
petrinaut Ready Ready Preview Oct 20, 2026 6:07pm UTC
petrinaut-docs Ready Ready Preview Oct 20, 2026 6:07pm UTC
1 Skipped Deployment
Project Deployment Actions Updated
hashdotdesign-tokens Ignored Ignored Preview Oct 20, 2026 6:07pm UTC

Request Review

@github-actions github-actions Bot added area/libs Relates to first-party libraries/crates/packages (area) type/eng > backend Owned by the @backend team area/tests New or updated tests labels Oct 16, 2026
@montekki montekki self-assigned this Oct 16, 2026
@montekki montekki changed the title Batch entity patch locking, reads, and policy construction BE-921: Batch patch_entities locking, reads, and policy construction Oct 16, 2026
@codecov

codecov Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 68.40278% with 91 lines in your changes missing coverage. Please review.
✅ Project coverage is 68.03%. Comparing base (8b1cbc2) to head (360ecf2).
⚠️ Report is 2 commits behind head on main.

Files with missing lines Patch % Lines
...src/store/postgres/knowledge/entity/batch/write.rs 0.00% 79 Missing ⚠️
...s-store/src/store/postgres/knowledge/entity/mod.rs 0.00% 10 Missing ⚠️
...ore/src/store/postgres/knowledge/entity/history.rs 98.99% 1 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #10063      +/-   ##
==========================================
- Coverage   68.03%   68.03%   -0.01%     
==========================================
  Files        2006     2008       +2     
  Lines      206233   206521     +288     
  Branches     8796     8800       +4     
==========================================
+ Hits       140312   140507     +195     
- Misses      64253    64344      +91     
- Partials     1668     1670       +2     
Flag Coverage Δ
hash-graph 21.07% <ø> (ø)
hash-graph-api 39.82% <ø> (ø)
hash-graph-atlas 80.01% <ø> (-0.01%) ⬇️
hash-graph-postgres-store 32.09% <68.40%> (+0.48%) ⬆️
hashql-compiletest 28.71% <ø> (ø)
hashql-eval 81.55% <ø> (ø)

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

☔ View full report in Codecov by Harness.
📢 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.

@montekki
montekki force-pushed the fs/be-921-batch-the-statements-in-patch-entities branch from 7a255a8 to 9250249 Compare October 16, 2026 09:50
@montekki
montekki force-pushed the fs/be-921-batch-the-statements-in-patch-entities branch from 9250249 to f1e57f0 Compare October 16, 2026 09:58
@montekki
montekki force-pushed the fs/be-921-batch-the-statements-in-patch-entities branch from f1e57f0 to 21cb82c Compare October 16, 2026 12:25
@montekki
montekki force-pushed the fs/be-921-batch-the-statements-in-patch-entities branch from 21cb82c to 7044462 Compare October 16, 2026 12:34
@montekki
montekki force-pushed the fs/be-921-batch-the-statements-in-patch-entities branch from 7044462 to 124fa37 Compare October 16, 2026 13:16
@montekki
montekki force-pushed the fs/be-921-batch-the-statements-in-patch-entities branch from ee1c40d to b885232 Compare October 16, 2026 16:24
@montekki montekki changed the title BE-921: Batch patch_entities locking, reads, and policy construction BE-921: Batch entity patch reads and writes Oct 16, 2026
Base automatically changed from fs/be-990-refactor-patch-entities-into-preparation-and-persistence to main October 19, 2026 13:48
@montekki
montekki force-pushed the fs/be-921-batch-the-statements-in-patch-entities branch from b885232 to c221c84 Compare October 19, 2026 13:48
@montekki
montekki force-pushed the fs/be-921-batch-the-statements-in-patch-entities branch from c221c84 to 8fd969b Compare October 19, 2026 14:07
@montekki
montekki force-pushed the fs/be-921-batch-the-statements-in-patch-entities branch from 8fd969b to b0839e9 Compare October 19, 2026 14:50
@montekki
montekki force-pushed the fs/be-921-batch-the-statements-in-patch-entities branch from b0839e9 to 68433c6 Compare October 19, 2026 15:05
@montekki
montekki force-pushed the fs/be-921-batch-the-statements-in-patch-entities branch from 68433c6 to b5fdf0f Compare October 19, 2026 15:38
Comment thread tests/graph/integration/postgres/partial_updates.rs Fixed
@github-actions

Copy link
Copy Markdown
Contributor

Benchmark results

hash-graph-benches – Integrations

policy_resolution_large

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 2002 $$20.9 \mathrm{ms} \pm 158 \mathrm{μs}\left({\color{gray}1.97 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.73 \mathrm{ms} \pm 18.3 \mathrm{μs}\left({\color{gray}-0.142 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 1002 $$10.6 \mathrm{ms} \pm 95.4 \mathrm{μs}\left({\color{gray}-0.347 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 3314 $$35.3 \mathrm{ms} \pm 304 \mathrm{μs}\left({\color{gray}-1.853 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$12.1 \mathrm{ms} \pm 123 \mathrm{μs}\left({\color{gray}-3.824 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 1527 $$19.6 \mathrm{ms} \pm 195 \mathrm{μs}\left({\color{lightgreen}-5.852 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 2078 $$21.4 \mathrm{ms} \pm 157 \mathrm{μs}\left({\color{gray}1.16 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.00 \mathrm{ms} \pm 19.7 \mathrm{μs}\left({\color{gray}0.228 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 1033 $$11.1 \mathrm{ms} \pm 94.7 \mathrm{μs}\left({\color{gray}2.84 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_medium

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 102 $$2.98 \mathrm{ms} \pm 21.7 \mathrm{μs}\left({\color{gray}-0.932 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.41 \mathrm{ms} \pm 19.4 \mathrm{μs}\left({\color{gray}-0.480 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 52 $$2.70 \mathrm{ms} \pm 18.9 \mathrm{μs}\left({\color{gray}-0.685 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 269 $$4.09 \mathrm{ms} \pm 27.4 \mathrm{μs}\left({\color{gray}-1.361 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$2.83 \mathrm{ms} \pm 18.6 \mathrm{μs}\left({\color{gray}0.337 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 108 $$3.28 \mathrm{ms} \pm 21.4 \mathrm{μs}\left({\color{gray}0.386 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 133 $$3.48 \mathrm{ms} \pm 22.7 \mathrm{μs}\left({\color{gray}-1.083 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.75 \mathrm{ms} \pm 17.2 \mathrm{μs}\left({\color{gray}-2.209 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 63 $$3.28 \mathrm{ms} \pm 35.2 \mathrm{μs}\left({\color{gray}1.59 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_none

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 2 $$2.15 \mathrm{ms} \pm 12.9 \mathrm{μs}\left({\color{gray}0.213 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.01 \mathrm{ms} \pm 14.8 \mathrm{μs}\left({\color{gray}0.190 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 2 $$2.14 \mathrm{ms} \pm 13.4 \mathrm{μs}\left({\color{gray}0.829 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 8 $$2.35 \mathrm{ms} \pm 14.4 \mathrm{μs}\left({\color{gray}0.746 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.23 \mathrm{ms} \pm 23.0 \mathrm{μs}\left({\color{gray}1.74 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 3 $$2.34 \mathrm{ms} \pm 15.8 \mathrm{μs}\left({\color{gray}-0.892 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_small

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 52 $$2.41 \mathrm{ms} \pm 16.9 \mathrm{μs}\left({\color{gray}-0.934 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.22 \mathrm{ms} \pm 16.3 \mathrm{μs}\left({\color{gray}-0.243 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 26 $$2.42 \mathrm{ms} \pm 19.4 \mathrm{μs}\left({\color{gray}0.854 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 94 $$2.74 \mathrm{ms} \pm 25.1 \mathrm{μs}\left({\color{gray}-0.234 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$2.40 \mathrm{ms} \pm 15.0 \mathrm{μs}\left({\color{gray}-1.280 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 27 $$2.65 \mathrm{ms} \pm 15.6 \mathrm{μs}\left({\color{gray}0.254 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 66 $$2.70 \mathrm{ms} \pm 21.1 \mathrm{μs}\left({\color{gray}0.218 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.38 \mathrm{ms} \pm 16.2 \mathrm{μs}\left({\color{gray}0.325 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 29 $$2.64 \mathrm{ms} \pm 16.7 \mathrm{μs}\left({\color{gray}-0.450 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_complete

Function Value Mean Flame graphs
entity_by_id;one_depth 1 entities $$32.9 \mathrm{ms} \pm 223 \mathrm{μs}\left({\color{gray}-1.917 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 10 entities $$26.5 \mathrm{ms} \pm 254 \mathrm{μs}\left({\color{gray}0.848 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 25 entities $$28.8 \mathrm{ms} \pm 210 \mathrm{μs}\left({\color{gray}0.076 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 5 entities $$25.7 \mathrm{ms} \pm 377 \mathrm{μs}\left({\color{gray}1.59 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 50 entities $$34.8 \mathrm{ms} \pm 267 \mathrm{μs}\left({\color{gray}3.75 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 1 entities $$38.4 \mathrm{ms} \pm 219 \mathrm{μs}\left({\color{gray}-1.558 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 10 entities $$31.8 \mathrm{ms} \pm 232 \mathrm{μs}\left({\color{gray}2.15 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 25 entities $$71.4 \mathrm{ms} \pm 545 \mathrm{μs}\left({\color{gray}-0.197 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 5 entities $$26.9 \mathrm{ms} \pm 204 \mathrm{μs}\left({\color{gray}1.86 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 50 entities $$215 \mathrm{ms} \pm 913 \mathrm{μs}\left({\color{lightgreen}-8.947 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 1 entities $$8.16 \mathrm{ms} \pm 54.5 \mathrm{μs}\left({\color{gray}0.252 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 10 entities $$8.26 \mathrm{ms} \pm 58.2 \mathrm{μs}\left({\color{gray}-0.568 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 25 entities $$8.32 \mathrm{ms} \pm 80.1 \mathrm{μs}\left({\color{gray}-0.055 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 5 entities $$8.13 \mathrm{ms} \pm 50.3 \mathrm{μs}\left({\color{gray}-0.103 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 50 entities $$8.25 \mathrm{ms} \pm 52.1 \mathrm{μs}\left({\color{gray}-0.607 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_linkless

Function Value Mean Flame graphs
entity_by_id 1 entities $$8.21 \mathrm{ms} \pm 53.9 \mathrm{μs}\left({\color{gray}1.07 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10 entities $$8.22 \mathrm{ms} \pm 65.7 \mathrm{μs}\left({\color{gray}-0.805 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 100 entities $$8.21 \mathrm{ms} \pm 54.3 \mathrm{μs}\left({\color{gray}-4.110 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 1000 entities $$8.38 \mathrm{ms} \pm 69.4 \mathrm{μs}\left({\color{gray}-2.259 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10000 entities $$8.38 \mathrm{ms} \pm 55.6 \mathrm{μs}\left({\color{gray}-0.043 \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 $$8.48 \mathrm{ms} \pm 77.6 \mathrm{μs}\left({\color{gray}-0.456 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/book/v/1 $$8.42 \mathrm{ms} \pm 49.2 \mathrm{μs}\left({\color{gray}-2.114 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/building/v/1 $$8.49 \mathrm{ms} \pm 62.2 \mathrm{μs}\left({\color{gray}-0.795 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/organization/v/1 $$8.44 \mathrm{ms} \pm 81.0 \mathrm{μs}\left({\color{gray}-0.120 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/page/v/2 $$8.39 \mathrm{ms} \pm 56.7 \mathrm{μs}\left({\color{gray}-0.620 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/person/v/1 $$8.43 \mathrm{ms} \pm 65.4 \mathrm{μs}\left({\color{gray}-0.370 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/playlist/v/1 $$8.55 \mathrm{ms} \pm 65.9 \mathrm{μs}\left({\color{gray}-1.361 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/song/v/1 $$8.33 \mathrm{ms} \pm 68.2 \mathrm{μs}\left({\color{gray}-1.407 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/uk-address/v/1 $$8.59 \mathrm{ms} \pm 69.4 \mathrm{μs}\left({\color{gray}-1.697 \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 $$6.29 \mathrm{ms} \pm 64.9 \mathrm{μs}\left({\color{gray}1.38 \mathrm{\%}}\right) $$ Flame Graph

representative_read_multiple_entities

Function Value Mean Flame graphs
entity_by_property traversal_paths=0 0 $$45.0 \mathrm{ms} \pm 393 \mathrm{μs}\left({\color{gray}0.632 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=255 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true $$85.6 \mathrm{ms} \pm 555 \mathrm{μs}\left({\color{gray}-1.897 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false $$50.4 \mathrm{ms} \pm 434 \mathrm{μs}\left({\color{gray}0.889 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true $$57.7 \mathrm{ms} \pm 538 \mathrm{μs}\left({\color{gray}-1.487 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true $$65.2 \mathrm{ms} \pm 555 \mathrm{μs}\left({\color{gray}-0.837 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true $$69.1 \mathrm{ms} \pm 521 \mathrm{μs}\left({\color{gray}-0.970 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=0 0 $$34.5 \mathrm{ms} \pm 253 \mathrm{μs}\left({\color{gray}0.974 \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 $$56.5 \mathrm{ms} \pm 485 \mathrm{μs}\left({\color{gray}-0.522 \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 $$39.2 \mathrm{ms} \pm 265 \mathrm{μs}\left({\color{gray}-0.946 \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 $$46.2 \mathrm{ms} \pm 289 \mathrm{μs}\left({\color{gray}-1.515 \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 $$49.1 \mathrm{ms} \pm 871 \mathrm{μs}\left({\color{gray}-1.313 \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 $$48.2 \mathrm{ms} \pm 335 \mathrm{μs}\left({\color{gray}-1.653 \mathrm{\%}}\right) $$

scenarios

Function Value Mean Flame graphs
full_test query-limited $$99.5 \mathrm{ms} \pm 543 \mathrm{μs}\left({\color{red}8.31 \mathrm{\%}}\right) $$ Flame Graph
full_test query-unlimited $$107 \mathrm{ms} \pm 485 \mathrm{μs}\left({\color{red}6.00 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-limited $$14.9 \mathrm{ms} \pm 141 \mathrm{μs}\left({\color{gray}4.84 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-unlimited $$409 \mathrm{ms} \pm 897 \mathrm{μs}\left({\color{gray}1.35 \mathrm{\%}}\right) $$ Flame Graph

This branch was successfully deployed

4 active (1 outdated) deployments
Preview – petrinaut-docs — 360ecf27 Deployed Oct 20, 2026 by vercel[bot]
Preview – hash — 360ecf27 Deployed Oct 20, 2026 by vercel[bot]
Preview – petrinaut — 360ecf27 Deployed Oct 20, 2026 by vercel[bot]
pull-request — 6d5ef217 Deployed Oct 20, 2026 by montekki via Sourcemaps (@apps/hash-ai-worker-ts) #40585
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