Skip to content

FE-1563: Establish Brunch elicitation skill boundaries - #9468

Merged
lunelson merged 101 commits into
mainfrom
ln/fe-1563-redesign-runbook-workpiece
Sep 4, 2026
Merged

FE-1563: Establish Brunch elicitation skill boundaries#9468
lunelson merged 101 commits into
mainfrom
ln/fe-1563-redesign-runbook-workpiece

Conversation

@lunelson

@lunelson lunelson commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

🌟 What is the purpose of this PR?

Brunch previously mixed universal elicitation behavior, SDCPN-specific teaching, and application composition in boundaries that made activation and disclosure hard to reason about. That coupling also obscured which behavior the production agent could prove and which claims depended on a failed evaluation campaign.

This PR establishes a Flue-native elicitation capability and target-specific plugin boundary on the production ChatAgent path. Owner-adjudicated evidence establishes interactive activation and resolvable-review restraint; immediate review-to-elicitation switching remains deferred, and this PR does not claim a successful full-run workpiece campaign.

🔗 Related links

🚫 Blocked by

  • Nothing. Mission 4 closure was explicitly owner-adjudicated.

🔍 What does this change?

The implementation separates core elicitation, target-formalism contributions, and application composition while retaining the evidence and limitations needed to review that boundary.

The 47 retired raw side-quest runs remain available as one 2.7 MB compressed repository archive. Its recorded SHA-256 and the three existing path/content ledgers verify the complete corpus, and a core test extracts and verifies every file without relying on an intermediate pre-squash commit.

🏗️ Agent notes

Status: Accepted by owner adjudication on the bounded observed evidence recorded below.

Imperative: Establish reusable elicitation as an independently activatable core capability, keep target-formalism investigation and construction guidance in the pairing plugin, and leave composition, transport, diagnostics, and host execution in the application.

Throughline: production ChatAgent composition → core elicitation activation → SDCPN job-skill activation and conditional profile disclosure → direct Flue persona turn → canonical history() snapshot → deterministic trace and adjudication. This crosses the real agent/provider/conversation boundary but not Petrinaut browser execution or remote deployment.

Proof: Vestera and Data Centre activated elicitation before substantive questioning and passed opening dosage; S3 correctly refrained on a resolvable review; S4 retained the unresolved operational rule but failed to activate elicitation. The valid S4 failure stopped the frozen campaign before Industrial Gas, so no 3/3 floor and no full-run workpiece candidate were established. Hash-bound v1/v2 evidence and the closure adjudication are retained in the repository.

Constraints: frozen Mission 3/4 evidence remains byte-identical; canonical Flue history is authoritative; core owns universal elicitation; target-pairing plugins own job/formalism guidance; the app owns composition and host behavior; no fallback model, post-observation reinterpretation, or Voice reconciliation may restore the older app-local agent.

Fog-line answers: universal always-required elicitation guidance is inline; only conditional SDCPN profile material remains resource-loaded. Immediate review-to-interview switching is not load-bearing for this mission and is deferred. Durable evidence identity is the manifest digest plus ordered content hashes rather than permanent Git ancestry. Mission 4 produced no candidate.

Stop or reorient: a technically valid behavioral failure stops the frozen campaign; technical replacement is allowed only for invalid execution or absent substantive output. Do not claim general reliability, broad workpiece quality, browser parity, deployment, or product authenticity from this proof.

Deferred: FE-1574 owns direct Voice/Flue transport; FE-1575 owns the prepared workpiece/Petrinaut viability tracer; FE-1573 owns later capture-backed why/refusal. The S4 transition re-enters only under observed workflow friction.

  • Mounts an independently activatable core elicitation capability through @hashintel/brunch-agent/flue.
  • Makes the SDCPN package a Flue-native operational-process/SDCPN contribution with its own job skill, conditional resources, and construction tools.
  • Preserves the app as the production composition, transport, diagnostics, and host boundary.
  • Removes the retired YAML/generalized plugin machinery from active production paths and isolates suspended contracts.
  • Inlines always-required universal elicitation guidance into the capability skill while keeping SDCPN profile disclosure conditional.
  • Adds package-boundary, mounting, artifact, persona, canonical-trace, and hash-retention checks.
  • Retires all 47 raw v1–v3 skill-composition side-quest run records after preserving their comparisons, unchanged manifests, ordered path/content hashes, and a commit-pinned recovery procedure; Mission 4 proof-of-life evidence remains untouched.
  • Retains two frozen proof-of-life campaigns and their canonical evidence. V2 shows:
    • Vestera and Data Centre activation/read ordering passes;
    • S3 resolvable-review restraint passes;
    • S4 identifies but does not immediately elicit an unresolved operational rule.
  • Records owner closure with S4 deferred, no 3/3 claim, and no full-run workpiece candidate.
  • Archives the full Mission 4 contract and replaces the root mission with a no-live-mission closure pointer.
  • Reconciles future planning and records how Voice changes should be ported onto the current package/app topology without restoring the older app-local stub agent.

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

The affected Brunch packages are private 0.0.0-private workspaces.

📜 Does this require a change to the docs?

The changes in this PR:

  • require changes to docs which are made as part of this PR

Mission authority, archive, future drafts, evaluation evidence, and the Voice integration handoff are updated in this branch. No Petrinaut end-user behavior is changed here.

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

The changes in this PR:

  • do not affect the execution graph

⚠️ Known issues

  • The frozen S4 knowledge-gap review did not activate elicitation; this remains a valid observed failure but is non-blocking for Mission 4 closure.
  • The frozen campaign therefore stopped before Industrial Gas and produced no full-run workpiece candidate.
  • The evidence crosses direct Flue ChatAgent execution, not Petrinaut browser parity, deployment, or remote operation.
  • Sonnet provider usage is unavailable in canonical Flue history; known rounded persona/adjudicator usage is retained separately.

🐾 Next steps

  • FE-1574 may reconcile Voice through canonical Flue while preserving useBrunchAgent() / useSdcpnPlugin() and selectively porting useful turn-taking/provenance behavior.
  • FE-1575 may prove one honestly prepared conversation/workpiece/Petrinaut fixture and cross-tab resume without implying a Mission 4 candidate exists.
  • FE-1573 may subsequently close capture-backed why/refusal over a selected prepared pair.
  • If user-visible review friction makes it load-bearing, a separately authorized Mission 4 addendum or downstream mission can decide report-and-stop versus immediate clarification and retest the S3/S4 pair.

🛡 What tests cover this?

  • Core and plugin skill packaging and architecture-boundary tests.
  • Built ChatAgent, transport, transcript, persona bridge, proof-artifact, and headless construction tests.
  • Frozen instrument and per-run SHA-256 verification.
  • Compressed side-quest archive extraction plus all 47 retired-run hashes, executable from a clean checkout.
  • Retirement-ledger verification of 47 side-quest runs against the complete pre-retirement commit, plus an exercised archive/recovery command.
  • Fresh-context adjudications retained with each paid proof run.

❓ How to test this?

  1. Run:
    yarn exec turbo run build lint:tsc lint:eslint test:unit \
      --filter '@hashintel/brunch-agent' \
      --filter '@hashintel/brunch-agent-binding-flue' \
      --filter '@hashintel/brunch-agent-transport-aisdk' \
      --filter '@hashintel/brunch-agent-plugin-sdcpn' \
      --filter '@hashintel/brunch-agent-plugin-gherkin' \
      --filter '@hashintel/brunch-agent-plugin-dafny' \
      --filter '@apps/brunch-agent'
  2. Confirm 30/30 tasks succeed.
  3. Inspect libs/@hashintel/brunch-agent/docs/evidence/evaluations/mission-4-proof-of-life-v2/final-adjudication.md and its four hash-bound run directories.
  4. Confirm the root MISSION.md is a closure pointer and the full contract is archived under docs/mission-archive/.

📹 Demo

No UI demo: this branch changes Brunch composition, elicitation resources, evaluation evidence, and planning/ownership boundaries rather than Petrinaut end-user UI.

@vercel

vercel Bot commented Aug 31, 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 Sep 4, 2026 10:03am UTC
petrinaut Ready Ready Preview Sep 4, 2026 10:03am UTC
petrinaut-docs Ready Ready Preview Sep 4, 2026 10:03am UTC
1 Skipped Deployment
Project Deployment Actions Updated
hashdotdesign-tokens Ignored Ignored Preview Sep 4, 2026 10:03am UTC

Request Review

@github-actions github-actions Bot added area/deps Relates to third-party dependencies (area) area/infra Relates to version control, CI, CD or IaC (area) area/libs Relates to first-party libraries/crates/packages (area) type/eng > frontend Owned by the @frontend team area/tests New or updated tests area/apps labels Aug 31, 2026

lunelson commented Aug 31, 2026

Copy link
Copy Markdown
Contributor Author

@lunelson
lunelson changed the base branch from ln/fe-1525-headless-runbook-pn to graphite-base/9468 September 1, 2026 07:18
@lunelson lunelson changed the title Cut Mission 4: redesign runbook and workpiece FE-1563: Cut Mission 4: redesign runbook and workpiece Sep 1, 2026
@lunelson
lunelson force-pushed the ln/fe-1563-redesign-runbook-workpiece branch from 566b20e to 228f7d5 Compare September 1, 2026 07:22
@lunelson
lunelson changed the base branch from graphite-base/9468 to ln/fe-1525-headless-runbook-pn September 1, 2026 07:23
@vercel
vercel Bot temporarily deployed to Preview – petrinaut September 1, 2026 07:42 Inactive
@vercel
vercel Bot temporarily deployed to Preview – petrinaut-docs September 1, 2026 07:42 Inactive
@vercel
vercel Bot temporarily deployed to Preview – petrinaut September 1, 2026 07:43 Inactive
@vercel
vercel Bot temporarily deployed to Preview – petrinaut-docs September 1, 2026 07:43 Inactive
@vercel
vercel Bot temporarily deployed to Preview – petrinaut-docs September 1, 2026 07:48 Inactive
@vercel
vercel Bot temporarily deployed to Preview – petrinaut September 1, 2026 07:48 Inactive
@github-actions

github-actions Bot commented Sep 4, 2026

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 $$28.0 \mathrm{ms} \pm 246 \mathrm{μs}\left({\color{lightgreen}-5.212 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$3.49 \mathrm{ms} \pm 21.7 \mathrm{μs}\left({\color{gray}-4.301 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 1002 $$12.7 \mathrm{ms} \pm 133 \mathrm{μs}\left({\color{lightgreen}-8.272 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 3314 $$44.3 \mathrm{ms} \pm 414 \mathrm{μs}\left({\color{gray}-2.290 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$15.3 \mathrm{ms} \pm 188 \mathrm{μs}\left({\color{gray}3.92 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 1527 $$25.0 \mathrm{ms} \pm 220 \mathrm{μs}\left({\color{gray}-3.267 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 2078 $$29.0 \mathrm{ms} \pm 255 \mathrm{μs}\left({\color{lightgreen}-5.550 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.82 \mathrm{ms} \pm 24.9 \mathrm{μs}\left({\color{gray}-1.860 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 1033 $$14.1 \mathrm{ms} \pm 137 \mathrm{μs}\left({\color{gray}-4.888 \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 32.5 \mathrm{μs}\left({\color{gray}-0.568 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$3.07 \mathrm{ms} \pm 21.5 \mathrm{μs}\left({\color{gray}-0.650 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 52 $$3.49 \mathrm{ms} \pm 24.2 \mathrm{μs}\left({\color{gray}-0.749 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 269 $$5.36 \mathrm{ms} \pm 46.7 \mathrm{μs}\left({\color{gray}0.200 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$3.71 \mathrm{ms} \pm 26.7 \mathrm{μs}\left({\color{gray}2.03 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 108 $$4.24 \mathrm{ms} \pm 34.2 \mathrm{μs}\left({\color{gray}-1.403 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 133 $$4.59 \mathrm{ms} \pm 39.9 \mathrm{μs}\left({\color{gray}-1.716 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.53 \mathrm{ms} \pm 23.9 \mathrm{μs}\left({\color{gray}-2.991 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 63 $$4.23 \mathrm{ms} \pm 49.0 \mathrm{μs}\left({\color{gray}-1.169 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_none

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 2 $$2.76 \mathrm{ms} \pm 20.9 \mathrm{μs}\left({\color{gray}-0.363 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.59 \mathrm{ms} \pm 16.9 \mathrm{μs}\left({\color{gray}-0.905 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 2 $$2.72 \mathrm{ms} \pm 15.0 \mathrm{μs}\left({\color{gray}-2.440 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 8 $$3.03 \mathrm{ms} \pm 18.9 \mathrm{μs}\left({\color{gray}-0.824 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.85 \mathrm{ms} \pm 21.2 \mathrm{μs}\left({\color{gray}-0.654 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 3 $$3.00 \mathrm{ms} \pm 22.8 \mathrm{μs}\left({\color{gray}-1.713 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_small

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 52 $$3.16 \mathrm{ms} \pm 25.5 \mathrm{μs}\left({\color{gray}-0.397 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.86 \mathrm{ms} \pm 21.6 \mathrm{μs}\left({\color{gray}0.348 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 26 $$3.11 \mathrm{ms} \pm 19.2 \mathrm{μs}\left({\color{gray}0.195 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 94 $$3.55 \mathrm{ms} \pm 23.9 \mathrm{μs}\left({\color{gray}-1.401 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$3.05 \mathrm{ms} \pm 18.3 \mathrm{μs}\left({\color{gray}-0.618 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 27 $$3.39 \mathrm{ms} \pm 22.1 \mathrm{μs}\left({\color{gray}-1.018 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 66 $$3.49 \mathrm{ms} \pm 26.0 \mathrm{μs}\left({\color{gray}0.649 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.07 \mathrm{ms} \pm 27.6 \mathrm{μs}\left({\color{gray}1.25 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 29 $$3.44 \mathrm{ms} \pm 21.1 \mathrm{μs}\left({\color{gray}-0.149 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_complete

Function Value Mean Flame graphs
entity_by_id;one_depth 1 entities $$44.1 \mathrm{ms} \pm 339 \mathrm{μs}\left({\color{gray}-0.489 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 10 entities $$34.3 \mathrm{ms} \pm 193 \mathrm{μs}\left({\color{gray}-1.828 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 25 entities $$37.1 \mathrm{ms} \pm 213 \mathrm{μs}\left({\color{gray}-0.377 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 5 entities $$32.9 \mathrm{ms} \pm 213 \mathrm{μs}\left({\color{gray}-2.313 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 50 entities $$43.2 \mathrm{ms} \pm 331 \mathrm{μs}\left({\color{gray}-2.294 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 1 entities $$51.0 \mathrm{ms} \pm 441 \mathrm{μs}\left({\color{gray}-1.876 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 10 entities $$41.7 \mathrm{ms} \pm 217 \mathrm{μs}\left({\color{gray}-1.197 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 25 entities $$93.6 \mathrm{ms} \pm 690 \mathrm{μs}\left({\color{gray}-1.668 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 5 entities $$35.0 \mathrm{ms} \pm 255 \mathrm{μs}\left({\color{gray}-3.541 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 50 entities $$286 \mathrm{ms} \pm 1.22 \mathrm{ms}\left({\color{gray}0.315 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 1 entities $$11.2 \mathrm{ms} \pm 72.6 \mathrm{μs}\left({\color{gray}-2.271 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 10 entities $$11.1 \mathrm{ms} \pm 65.9 \mathrm{μs}\left({\color{gray}-2.334 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 25 entities $$11.2 \mathrm{ms} \pm 74.2 \mathrm{μs}\left({\color{gray}-1.233 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 5 entities $$11.3 \mathrm{ms} \pm 76.8 \mathrm{μs}\left({\color{gray}3.53 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 50 entities $$11.0 \mathrm{ms} \pm 81.5 \mathrm{μs}\left({\color{gray}2.14 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_linkless

Function Value Mean Flame graphs
entity_by_id 1 entities $$11.3 \mathrm{ms} \pm 99.9 \mathrm{μs}\left({\color{gray}3.93 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10 entities $$11.0 \mathrm{ms} \pm 89.0 \mathrm{μs}\left({\color{gray}2.41 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 100 entities $$11.3 \mathrm{ms} \pm 72.1 \mathrm{μs}\left({\color{gray}4.93 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 1000 entities $$11.3 \mathrm{ms} \pm 103 \mathrm{μs}\left({\color{gray}1.73 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10000 entities $$11.5 \mathrm{ms} \pm 77.4 \mathrm{μs}\left({\color{gray}2.38 \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 $$11.1 \mathrm{ms} \pm 64.7 \mathrm{μs}\left({\color{gray}-2.816 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/book/v/1 $$11.5 \mathrm{ms} \pm 75.5 \mathrm{μs}\left({\color{gray}0.953 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/building/v/1 $$11.3 \mathrm{ms} \pm 70.2 \mathrm{μs}\left({\color{gray}1.31 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/organization/v/1 $$11.2 \mathrm{ms} \pm 65.8 \mathrm{μs}\left({\color{gray}-0.902 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/page/v/2 $$11.2 \mathrm{ms} \pm 67.5 \mathrm{μs}\left({\color{gray}-0.394 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/person/v/1 $$11.3 \mathrm{ms} \pm 89.0 \mathrm{μs}\left({\color{gray}-3.879 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/playlist/v/1 $$11.1 \mathrm{ms} \pm 77.7 \mathrm{μs}\left({\color{gray}-3.115 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/song/v/1 $$11.6 \mathrm{ms} \pm 89.8 \mathrm{μs}\left({\color{gray}-2.487 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/uk-address/v/1 $$11.4 \mathrm{ms} \pm 82.9 \mathrm{μs}\left({\color{gray}1.00 \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.37 \mathrm{ms} \pm 49.8 \mathrm{μs}\left({\color{gray}-0.680 \mathrm{\%}}\right) $$ Flame Graph

representative_read_multiple_entities

Function Value Mean Flame graphs
entity_by_property traversal_paths=0 0 $$57.8 \mathrm{ms} \pm 447 \mathrm{μs}\left({\color{gray}-2.900 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=255 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true $$114 \mathrm{ms} \pm 576 \mathrm{μs}\left({\color{gray}-1.412 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false $$67.4 \mathrm{ms} \pm 667 \mathrm{μs}\left({\color{gray}1.41 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true $$76.3 \mathrm{ms} \pm 504 \mathrm{μs}\left({\color{gray}-0.176 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true $$84.3 \mathrm{ms} \pm 669 \mathrm{μs}\left({\color{gray}-2.035 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true $$91.3 \mathrm{ms} \pm 578 \mathrm{μs}\left({\color{gray}-1.498 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=0 0 $$44.7 \mathrm{ms} \pm 347 \mathrm{μs}\left({\color{gray}-3.440 \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 $$75.1 \mathrm{ms} \pm 381 \mathrm{μs}\left({\color{gray}-2.518 \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 $$51.2 \mathrm{ms} \pm 342 \mathrm{μs}\left({\color{gray}-1.229 \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 $$60.7 \mathrm{ms} \pm 424 \mathrm{μs}\left({\color{gray}-1.322 \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 $$63.5 \mathrm{ms} \pm 453 \mathrm{μs}\left({\color{gray}-1.629 \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 $$63.7 \mathrm{ms} \pm 381 \mathrm{μs}\left({\color{gray}-1.731 \mathrm{\%}}\right) $$

scenarios

Function Value Mean Flame graphs
full_test query-limited $$124 \mathrm{ms} \pm 872 \mathrm{μs}\left({\color{gray}3.78 \mathrm{\%}}\right) $$ Flame Graph
full_test query-unlimited $$134 \mathrm{ms} \pm 701 \mathrm{μs}\left({\color{gray}1.99 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-limited $$18.6 \mathrm{ms} \pm 168 \mathrm{μs}\left({\color{gray}-2.789 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-unlimited $$534 \mathrm{ms} \pm 1.34 \mathrm{ms}\left({\color{gray}-4.967 \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 area/deps Relates to third-party dependencies (area) area/infra Relates to version control, CI, CD or IaC (area) area/libs Relates to first-party libraries/crates/packages (area) area/tests New or updated tests type/eng > frontend Owned by the @frontend team type/legal Owned by the @legal team

Development

Successfully merging this pull request may close these issues.

6 participants