Skip to content

SRE-871: pin mise in CI and exclude unattested @yarnpkg/libzip@3.2.2 from trust policy - #9112

Open
claude[bot] wants to merge 8 commits into
mainfrom
claude/sre-871-pin-mise-libzip-trust-exclusion
Open

SRE-871: pin mise in CI and exclude unattested @yarnpkg/libzip@3.2.2 from trust policy#9112
claude[bot] wants to merge 8 commits into
mainfrom
claude/sre-871-pin-mise-libzip-trust-exclusion

Conversation

@claude

@claude claude Bot commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Requested by Tim Diekmann · Slack thread

🌟 What is the purpose of this PR?

Before: any branch that misses the mise tool cache hits a cold mise install in CI and fails with a trust-downgrade error for @yarnpkg/libzip@3.2.2 (a transitive dependency of the npm:renovate tool). CI also installed whatever mise version happened to be latest at run time, which is how this enforcement change arrived unannounced.

After: cold installs pass, mise is pinned everywhere (and bumpable by Renovate), and aube's trustPolicy=no-downgrade stays enforced for every npm-backed tool — except the single reviewed version @yarnpkg/libzip@3.2.2.

Why the failure happens: renovate@43.212.4@yarnpkg/core@4.8.0 (exact pin) → @yarnpkg/libzip@^3.2.2, and the only version in range — 3.2.2 — was published without provenance attestation. It is benign: content verified against the source tag; it was a manual backfill publish by the maintainer after a failed CI release run (see forensics in the Slack thread). Enforcement arrived when embedded aube became mise's default npm installer (mise 2026.7.12, jdx/mise#11149); pinning any mise ≤ 2026.7.11 would instead silently shell out to the npm CLI with no trust checks. The pin is therefore set to 2026.7.14 — the newest installable release with enforcement. 2026.7.15 (released today) was tried first, but its release assets are not fully propagated yet (the GitHub release currently shows only 2 assets and it is absent from npm), which broke every Install tools step; Renovate will propose the bump once it has settled — and with minimumReleaseAge: 7 days it will be settled by then.

🔗 Related links

🔍 What does this change?

  • .config/mise/config.toml: npm:renovate gains trust_policy_excludes = ["@yarnpkg/libzip@3.2.2"], scoped to exactly that version, with a TODO(SRE-871) comment. min_version unchanged (see Dockerfile note below), now Renovate-annotated.
  • .config/mise/mise.lock: the npm:renovate entry gains the matching options line. This is required — with the tool option set, mise install --locked rejects the old lockfile entry (npm:renovate@43.212.4 is not in the lockfile). The added line is byte-identical to what mise install regenerates.
  • .github/actions/install-tools/action.yml: jdx/mise-action now pins version: 2026.7.14 instead of installing latest-at-run-time.
  • 5 Dockerfiles (apps/{hash-graph,hash-frontend,hash-api,hash-ai-worker-ts,hash-integration-worker}/docker/Dockerfile): MISE_VERSION stays at 2026.7.0 but is now Renovate-annotated. Bumping the images to 2026.7.14 was tried and reverted: mise changed its cargo backend between 2026.7.0 and 2026.7.14 (native binary fast path in 2026.7.1, cargo-quickinstall disabled + binstall fallback rework in 2026.7.6), and inside the arm64 images mise exec cargo:cargo-insta (invoked by @rust/hash-codec#build:types) fell back to a source compile that fails on rustix v0.37.27 ("attributes starting with rustc are reserved") — see the failed run. The amd64 runner-side install of the same tool passes, so the CI pin at 2026.7.14 is unaffected. min_version stays at 2026.6.13 accordingly (2026.7.0 refuses configs with a higher floor).
  • .github/renovate.json: Renovate 43.212.4's github-actions manager does not track jdx/mise-action's version input natively (verified against its source — only actions/setup-{go,node,python} and a fixed community-actions list), so this adds two regex customManagers covering the annotated pins (action input + min_version) and the Dockerfile MISE_VERSION pins. The # renovate: annotations and the managers travel together in this PR. Also adds a packageRules entry for jdx/mise setting dependencyDashboardApproval: false so bump PRs open without the dashboard checkbox gate (strike that in review if you'd rather keep the gate) and minimumReleaseAge: "7 days" so a brand-new mise release never lands the day it ships — the exact failure mode that caused this incident (and that 2026.7.15 demonstrated again today).

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

⚠️ Known issues

  • apps/hash-frontend/vercel-install.sh and apps/petrinaut-website/vercel-install.sh still install mise unpinned via yum from mise.jdx.dev/rpm; pinning them is a possible follow-up.
  • When Renovate bumps the Dockerfile MISE_VERSION past 2026.7.0, the arm64 image builds will hit the cargo:cargo-insta source-compile failure above until either cargo-insta ships arm64 binaries mise's new fast path can use, the rustix 0.37.27 transitive is gone from cargo-insta's tree, or mise's compile fallback is fixed — that bump PR failing CI is the intended signal, not a silent break.

🐾 Next steps

  • Remove the exclusion when an attested @yarnpkg/libzip > 3.2.2 ships — tracked in SRE-871.
  • Optionally file @yarnpkg/libzip@3.2.2 for jdx/aube's built-in DEFAULT_TRUST_POLICY_EXCLUDES (it matches that list's pattern of legit-maintainer publishes that lost provenance) — noted in SRE-871.

🛡 What tests cover this?

  • This PR's own CI is the real test: the .config/mise/config.toml change alters the mise-action cache key, so CI runs a genuinely cold mise install --env ci --locked — exactly the scenario that was failing. It passed (3m48s cold install).
  • Validated in-session with mise 2026.7.14 (the pinned version): without the exclusion, a cold install of npm:renovate reproduces the exact trust-downgrade error; with the exclusion and the updated lock entry, mise install --locked npm:renovate succeeds (602 packages, via embedded aube against the live registry) and leaves mise.lock unchanged.
  • .github/renovate.json passes renovate-config-validator --strict (renovate 43.212.4, the same version CI runs), and a local-platform Renovate dry run extracts the jdx/mise pins from all 7 annotated/matched sites.

❓ How to test this?

  1. Check the "Run mise install with ci environment" step in this PR's CI runs — it performs the previously-failing cold install.
  2. docker build any of the five app images — behavior unchanged (pin stays 2026.7.0).

@vercel

vercel Bot commented Jul 27, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
hash Ready Ready Preview, Comment Jul 27, 2026 4:01pm
hashdotdesign-tokens Ready Ready Preview, Comment Jul 27, 2026 4:01pm
petrinaut Ready Ready Preview Jul 27, 2026 4:01pm

@github-actions github-actions Bot added area/apps > hash* Affects HASH (a `hash-*` app) area/infra Relates to version control, CI, CD or IaC (area) area/apps > hash-api Affects the HASH API (app) type/eng > frontend Owned by the @frontend team type/eng > backend Owned by the @backend team area/apps area/apps > hash-graph labels Jul 27, 2026
@semgrep-code-hashintel

Copy link
Copy Markdown

Semgrep found 1 renovate-missing-minimum-release-age finding:

This Renovate configuration does not set a minimum release age. Newly published packages can be malicious or unstable. Add "minimumReleaseAge": "7 days" within a packageRules entry to wait 7 days before proposing updates to newly published package versions. Set "minimumReleaseAge": false to set an exception for minimal release age for the package rule. Added in: v42

@codecov

codecov Bot commented Jul 27, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 59.30%. Comparing base (2b7e81d) to head (411d33f).

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #9112      +/-   ##
==========================================
- Coverage   59.30%   59.30%   -0.01%     
==========================================
  Files        1406     1406              
  Lines      135987   135987              
  Branches     6380     6380              
==========================================
- Hits        80651    80650       -1     
- Misses      54352    54353       +1     
  Partials      984      984              
Flag Coverage Δ
apps.hash-ai-worker-ts 1.99% <ø> (ø)
apps.hash-api 12.08% <ø> (ø)
blockprotocol.type-system 40.84% <ø> (ø)
local.claude-hooks 0.00% <ø> (ø)
local.harpc-client 51.49% <ø> (ø)
local.hash-backend-utils 2.55% <ø> (ø)
local.hash-graph-sdk 10.02% <ø> (ø)
local.hash-isomorphic-utils 5.76% <ø> (ø)
rust.antsi 0.00% <ø> (ø)
rust.error-stack 90.89% <ø> (ø)
rust.harpc-codec 84.70% <ø> (ø)
rust.harpc-net 96.21% <ø> (-0.02%) ⬇️
rust.harpc-tower 67.03% <ø> (ø)
rust.harpc-types 0.00% <ø> (ø)
rust.harpc-wire-protocol 92.23% <ø> (ø)
rust.hash-codec 72.76% <ø> (ø)
rust.hash-graph-api 7.41% <ø> (ø)
rust.hash-graph-authorization 62.59% <ø> (ø)
rust.hash-graph-embeddings 91.88% <ø> (ø)
rust.hash-graph-postgres-store 26.04% <ø> (ø)
rust.hash-graph-store 38.71% <ø> (ø)
rust.hash-graph-temporal-versioning 47.95% <ø> (ø)
rust.hash-graph-types 0.00% <ø> (ø)
rust.hash-graph-validation 84.71% <ø> (ø)
rust.hashql-ast 89.63% <ø> (ø)
rust.hashql-compiletest 28.39% <ø> (ø)
rust.hashql-core 78.98% <ø> (ø)
rust.hashql-diagnostics 72.51% <ø> (ø)
rust.hashql-eval 79.82% <ø> (ø)
rust.hashql-hir 89.09% <ø> (ø)
rust.hashql-mir 87.92% <ø> (ø)
rust.hashql-syntax-jexpr 94.04% <ø> (ø)

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.

Comment thread apps/hash-ai-worker-ts/docker/Dockerfile Outdated
@codspeed-hq

codspeed-hq Bot commented Jul 27, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 98 untouched benchmarks


Comparing claude/sre-871-pin-mise-libzip-trust-exclusion (411d33f) with main (2b7e81d)

Open in CodSpeed

TimDiekmann
TimDiekmann previously approved these changes Jul 27, 2026
Comment thread .github/renovate.json Outdated
Comment thread .github/renovate.json Fixed
@cursor

cursor Bot commented Jul 27, 2026

Copy link
Copy Markdown

PR Summary

Medium Risk
Changes CI tool installation and supply-chain trust policy for npm-backed mise tools; scope is limited to renovate’s libzip exclusion and version pins rather than app runtime code.

Overview
Fixes cold CI mise install failures from mise’s npm trust policy rejecting @yarnpkg/libzip@3.2.2 (a transitive of npm:renovate) by adding a version-scoped trust_policy_excludes on npm:renovate in .config/mise/config.toml and the matching mise.lock options (tracked for removal in SRE-871).

Pins mise in GitHub Actions to 2026.7.14 via jdx/mise-action instead of installing whatever is latest at run time, and adds # renovate: annotations on min_version, the action pin, and MISE_VERSION in five app Dockerfiles (images stay on 2026.7.0).

Renovate gains regex customManagers for those annotated pins, a jdx/mise package rule (minimumReleaseAge 7 days, no dashboard approval), and minimumReleaseAge on the existing anyhow cargo rule.

Reviewed by Cursor Bugbot for commit 411d33f. Bugbot is set up for automated code reviews on this repo. Configure here.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want reviews to match your repository better? Bugbot Learning can learn team-specific rules from PR activity. A team admin can enable Learning in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 411d33f. Configure here.

Comment thread .github/renovate.json
"matchPackageNames": ["anyhow"],
"enabled": false
"enabled": false,
"minimumReleaseAge": "7 days"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Accidental release-age on anyhow

Low Severity

minimumReleaseAge was added to the disabled anyhow package rule. That rule only sets enabled: false, so the age setting has no effect and looks like an edit slip from the new jdx/mise rule, which already carries the intended minimumReleaseAge.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 411d33f. Configure here.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This one is deliberate, not a slip: semgrep's renovate-missing-minimum-release-age rule flags every packageRules entry lacking the key (it failed the scan on b9d3729 with exactly this entry), and its suggested exception form "minimumReleaseAge": false is rejected by renovate 43.212.4's config validator ("should be a string"). Since the entry is enabled: false, the value is inert either way — it exists purely to satisfy both checks at once.


Generated by Claude Code

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Why do we set minimumReleaseAget in the first place here?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

The org semgrep policy (rule renovate-missing-minimum-release-age) requires a minimumReleaseAge on every packageRules entry — it failed this PR's scan when this entry lacked it. The rule's own exception form, "minimumReleaseAge": false, is rejected by renovate 43.212.4's config validator ("should be a string"), so a string value is the only form that passes both gates. Since this entry is enabled: false (anyhow updates are disabled entirely), the value has no effect on behavior.

If you'd rather not carry the inert key, the alternatives are triaging the semgrep finding as acceptable-risk in the platform, or updating the semgrep rule — happy to do either as a follow-up if you prefer.


Generated by Claude Code

Comment thread apps/hash-ai-worker-ts/docker/Dockerfile
@TimDiekmann
TimDiekmann enabled auto-merge July 27, 2026 16:11
@github-actions

Copy link
Copy Markdown
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 $$19.0 \mathrm{ms} \pm 185 \mathrm{μs}\left({\color{gray}2.30 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.25 \mathrm{ms} \pm 24.8 \mathrm{μs}\left({\color{gray}-1.162 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 1002 $$8.79 \mathrm{ms} \pm 70.0 \mathrm{μs}\left({\color{gray}3.23 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 3314 $$27.9 \mathrm{ms} \pm 288 \mathrm{μs}\left({\color{gray}-0.697 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$8.67 \mathrm{ms} \pm 54.3 \mathrm{μs}\left({\color{gray}-1.444 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 1527 $$15.5 \mathrm{ms} \pm 159 \mathrm{μs}\left({\color{gray}1.97 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 2078 $$20.9 \mathrm{ms} \pm 163 \mathrm{μs}\left({\color{gray}3.41 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.51 \mathrm{ms} \pm 41.7 \mathrm{μs}\left({\color{gray}-0.041 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 1033 $$9.68 \mathrm{ms} \pm 88.5 \mathrm{μs}\left({\color{gray}1.64 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_medium

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 102 $$2.46 \mathrm{ms} \pm 24.4 \mathrm{μs}\left({\color{gray}-2.954 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$1.95 \mathrm{ms} \pm 9.65 \mathrm{μs}\left({\color{gray}-2.424 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 52 $$2.14 \mathrm{ms} \pm 13.7 \mathrm{μs}\left({\color{gray}-2.673 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 269 $$3.40 \mathrm{ms} \pm 26.0 \mathrm{μs}\left({\color{gray}1.27 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$2.27 \mathrm{ms} \pm 16.4 \mathrm{μs}\left({\color{gray}1.85 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 108 $$2.68 \mathrm{ms} \pm 17.2 \mathrm{μs}\left({\color{gray}1.38 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 133 $$2.89 \mathrm{ms} \pm 20.4 \mathrm{μs}\left({\color{gray}-0.487 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.26 \mathrm{ms} \pm 16.5 \mathrm{μs}\left({\color{gray}-1.077 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 63 $$3.04 \mathrm{ms} \pm 132 \mathrm{μs}\left({\color{red}13.1 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_none

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 2 $$1.74 \mathrm{ms} \pm 12.5 \mathrm{μs}\left({\color{red}7.00 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$1.65 \mathrm{ms} \pm 23.3 \mathrm{μs}\left({\color{gray}4.85 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 2 $$1.74 \mathrm{ms} \pm 16.4 \mathrm{μs}\left({\color{red}8.41 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 8 $$1.90 \mathrm{ms} \pm 11.2 \mathrm{μs}\left({\color{red}6.13 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$1.78 \mathrm{ms} \pm 12.6 \mathrm{μs}\left({\color{gray}3.79 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 3 $$1.87 \mathrm{ms} \pm 11.3 \mathrm{μs}\left({\color{gray}3.85 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_small

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 52 $$1.97 \mathrm{ms} \pm 17.9 \mathrm{μs}\left({\color{gray}-1.031 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$1.79 \mathrm{ms} \pm 12.6 \mathrm{μs}\left({\color{gray}-0.798 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 26 $$1.91 \mathrm{ms} \pm 17.4 \mathrm{μs}\left({\color{gray}-3.322 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 94 $$2.19 \mathrm{ms} \pm 15.8 \mathrm{μs}\left({\color{gray}-1.110 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$1.95 \mathrm{ms} \pm 13.8 \mathrm{μs}\left({\color{gray}-1.315 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 27 $$2.14 \mathrm{ms} \pm 18.1 \mathrm{μs}\left({\color{gray}0.895 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 66 $$2.22 \mathrm{ms} \pm 18.0 \mathrm{μs}\left({\color{gray}3.20 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$1.94 \mathrm{ms} \pm 17.2 \mathrm{μs}\left({\color{gray}1.38 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 29 $$2.15 \mathrm{ms} \pm 19.8 \mathrm{μs}\left({\color{gray}-0.010 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_complete

Function Value Mean Flame graphs
entity_by_id;one_depth 1 entities $$30.2 \mathrm{ms} \pm 219 \mathrm{μs}\left({\color{gray}0.834 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 10 entities $$24.2 \mathrm{ms} \pm 139 \mathrm{μs}\left({\color{red}5.94 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 25 entities $$25.2 \mathrm{ms} \pm 194 \mathrm{μs}\left({\color{gray}3.64 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 5 entities $$25.0 \mathrm{ms} \pm 572 \mathrm{μs}\left({\color{red}13.0 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 50 entities $$29.3 \mathrm{ms} \pm 221 \mathrm{μs}\left({\color{gray}1.05 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 1 entities $$34.6 \mathrm{ms} \pm 240 \mathrm{μs}\left({\color{gray}1.19 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 10 entities $$26.7 \mathrm{ms} \pm 136 \mathrm{μs}\left({\color{gray}-1.490 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 25 entities $$59.1 \mathrm{ms} \pm 335 \mathrm{μs}\left({\color{gray}4.00 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 5 entities $$23.8 \mathrm{ms} \pm 172 \mathrm{μs}\left({\color{gray}3.36 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 50 entities $$165 \mathrm{ms} \pm 803 \mathrm{μs}\left({\color{lightgreen}-7.900 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 1 entities $$7.39 \mathrm{ms} \pm 44.0 \mathrm{μs}\left({\color{gray}0.036 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 10 entities $$7.26 \mathrm{ms} \pm 33.4 \mathrm{μs}\left({\color{gray}0.175 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 25 entities $$7.25 \mathrm{ms} \pm 38.1 \mathrm{μs}\left({\color{gray}-0.851 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 5 entities $$7.33 \mathrm{ms} \pm 38.3 \mathrm{μs}\left({\color{gray}-1.618 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 50 entities $$7.49 \mathrm{ms} \pm 97.0 \mathrm{μs}\left({\color{gray}3.20 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_linkless

Function Value Mean Flame graphs
entity_by_id 1 entities $$7.61 \mathrm{ms} \pm 59.6 \mathrm{μs}\left({\color{red}6.30 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10 entities $$7.74 \mathrm{ms} \pm 65.8 \mathrm{μs}\left({\color{red}6.75 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 100 entities $$7.44 \mathrm{ms} \pm 52.3 \mathrm{μs}\left({\color{gray}-2.508 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 1000 entities $$7.69 \mathrm{ms} \pm 78.7 \mathrm{μs}\left({\color{gray}-1.019 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10000 entities $$7.95 \mathrm{ms} \pm 111 \mathrm{μs}\left({\color{gray}2.79 \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 $$7.98 \mathrm{ms} \pm 69.1 \mathrm{μs}\left({\color{gray}1.86 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/book/v/1 $$7.61 \mathrm{ms} \pm 39.5 \mathrm{μs}\left({\color{gray}-2.648 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/building/v/1 $$7.42 \mathrm{ms} \pm 33.7 \mathrm{μs}\left({\color{lightgreen}-7.287 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/organization/v/1 $$7.54 \mathrm{ms} \pm 45.5 \mathrm{μs}\left({\color{gray}-2.641 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/page/v/2 $$7.79 \mathrm{ms} \pm 91.2 \mathrm{μs}\left({\color{gray}0.259 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/person/v/1 $$7.43 \mathrm{ms} \pm 31.6 \mathrm{μs}\left({\color{lightgreen}-7.906 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/playlist/v/1 $$7.44 \mathrm{ms} \pm 42.1 \mathrm{μs}\left({\color{lightgreen}-7.460 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/song/v/1 $$7.71 \mathrm{ms} \pm 57.6 \mathrm{μs}\left({\color{gray}0.350 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/uk-address/v/1 $$7.46 \mathrm{ms} \pm 44.8 \mathrm{μs}\left({\color{lightgreen}-9.348 \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 $$5.80 \mathrm{ms} \pm 33.9 \mathrm{μs}\left({\color{gray}0.275 \mathrm{\%}}\right) $$ Flame Graph

representative_read_multiple_entities

Function Value Mean Flame graphs
entity_by_property traversal_paths=0 0 $$45.7 \mathrm{ms} \pm 335 \mathrm{μs}\left({\color{gray}-4.269 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=255 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true $$83.8 \mathrm{ms} \pm 422 \mathrm{μs}\left({\color{gray}-0.080 \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.3 \mathrm{ms} \pm 358 \mathrm{μs}\left({\color{gray}-1.147 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true $$56.9 \mathrm{ms} \pm 395 \mathrm{μs}\left({\color{gray}-1.587 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true $$64.7 \mathrm{ms} \pm 339 \mathrm{μs}\left({\color{gray}-0.314 \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.3 \mathrm{ms} \pm 446 \mathrm{μs}\left({\color{gray}-1.650 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=0 0 $$30.7 \mathrm{ms} \pm 237 \mathrm{μs}\left({\color{gray}-1.219 \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 $$54.2 \mathrm{ms} \pm 375 \mathrm{μs}\left({\color{red}5.67 \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 $$36.4 \mathrm{ms} \pm 1.63 \mathrm{ms}\left({\color{gray}2.77 \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 $$44.6 \mathrm{ms} \pm 291 \mathrm{μs}\left({\color{gray}3.18 \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 $$45.4 \mathrm{ms} \pm 303 \mathrm{μs}\left({\color{gray}2.85 \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 $$46.1 \mathrm{ms} \pm 313 \mathrm{μs}\left({\color{red}7.58 \mathrm{\%}}\right) $$

scenarios

Function Value Mean Flame graphs
full_test query-limited $$79.8 \mathrm{ms} \pm 1.87 \mathrm{ms}\left({\color{gray}-4.351 \mathrm{\%}}\right) $$ Flame Graph
full_test query-unlimited $$87.1 \mathrm{ms} \pm 710 \mathrm{μs}\left({\color{lightgreen}-6.686 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-limited $$15.9 \mathrm{ms} \pm 89.9 \mathrm{μs}\left({\color{gray}4.94 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-unlimited $$374 \mathrm{ms} \pm 1.61 \mathrm{ms}\left({\color{gray}2.58 \mathrm{\%}}\right) $$ Flame Graph

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

Labels

area/apps > hash* Affects HASH (a `hash-*` app) area/apps > hash-api Affects the HASH API (app) area/apps > hash-graph area/apps area/infra Relates to version control, CI, CD or IaC (area) type/eng > backend Owned by the @backend team type/eng > frontend Owned by the @frontend team

Development

Successfully merging this pull request may close these issues.

3 participants