Skip to content

FE-1573: Construct and explain a net region from a real conversation - #9722

Merged
lunelson merged 69 commits into
mainfrom
ln/fe-1573-mission-7d-recovery
Sep 16, 2026
Merged

lunelson merged 69 commits into
mainfrom
ln/fe-1573-mission-7d-recovery

Conversation

@lunelson

@lunelson lunelson commented Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

🌟 What is the purpose of this PR?

This branch set out to continue the recorded Inventory purchasing worked example, but the first full-scale observation showed that the product path was not yet demonstrable: run-5uSidX grew from 15.3k to 130k prompt tokens over 204 model steps, spent 85 of 123 tool calls marking questions, regenerated the Ledger repeatedly, and gave the user no visible pending state while tool arguments streamed.

The branch therefore became a focused remediation of that real browser-visible path. Brunch now settles each Ledger revision in one upload with text-cited, server-validated evidence; keeps host metadata and redundant net results out of model context; removes the question-marker step; shows tool calls while their arguments are still streaming; and records enough live chronology to distinguish slow generation from a provider stall. It also removes the obsolete prepared-fixture, tracer, capture/archive, and generic binding layers so the ordinary product route is the only maintained construction path.

The paid run-SB5pgx observation met that remediation discriminator: 44 validated one-upload Ledger revisions, 19 net mutation batches, no stall across 102 submissions, and continued settlement and construction after a live Flue compaction. This establishes a materially leaner and observable construction path. It does not accept the Inventory worked example, establish semantic recovery after compaction, complete experiment configuration, or show that the path is yet fast enough for the intended demo scale.

🔗 Related links

🚫 Blocked by

This PR has no outstanding upstream dependency for the remediation it delivers. The broader mission's configuration-only experiment leg remains deferred pending agreement on an inspectable, unstarted configuration lifecycle across #9675 → #9676 → #9678 → #9654; those changes are not included here.

🔍 What does this change?

  • Reworks Ledger settlement so mutate_workpiece resolves literal evidence text against the submitted Markdown, validates true-user message ids, refuses the whole write on an invalid relation, and returns identity plus validated locators without echoing the body. read_workpiece now reads sources by id instead of enumerating the conversation.
  • Projects model context without client-tool metadata, prefixes true-user entries with their source message id, compacts net-mutation results to hashes and per-operation disposition, and reconstructs each settled revision from its canonical call body plus successful result identity/evidence. Canonical and public history remain unchanged.
  • Removes brunch_mark_question; Voice derives its segment from finalized assistant text instead of paying an extra model step for a marker tool.
  • Adds a guarded, bounded, presentation-only SSE channel from Flue toolcall_delta events to the browser so pending tool rows appear while arguments stream. Canonical admission and browser-tool validation remain authoritative. Review fixes enforce catch-up/queue bounds and preserve live delivery after a full catch-up window.
  • Adds content-free per-submission chronology for first-event latency and per-tool argument streaming, making slow generation observable without logging argument text.
  • Promotes a bounded settle-then-disposition lifecycle into core and SDCPN guidance: after meaning-bearing input, settle the Ledger and then record one net outcome—changed, already represented, or blocked.
  • Removes the disconnected capture/archive package, generic Flue binding, crew-reservation prepared fixture, root-arc/observed-arc tracers, legacy tool aliases, and tests that exercised only those paths. The compiler-feedback oracle now runs through the ordinary product route, with import-direction checks guarding the simplified topology.
  • Retains the branch's earlier persona role/model/effort and verbosity/disclosure controls, Chat/Ledger attention and lifecycle presentation, chronological tool rows, explicit Thinking/working states, and viewport reframing.
  • Rejects arc creation when its referenced transition does not exist instead of recording the unchanged definition as a successful no-op.
🏗️ Agent notes

Imperative

Advance toward a reproducible browser-visible Inventory purchasing example in which Brunch progressively builds a compiler-clean SDCPN, explains consequential elements from recorded basis, applies one bounded correction, survives original-session reopen, and then helps configure—but does not run—an in-memory experiment. Lu owns semantic and usefulness acceptance.

This branch stops at making that route efficient and observable enough to evaluate honestly. It does not claim the full imperative is accepted.

Throughline

The production path is the canonical yarn brunch:persona --case inventory-purchasing launcher into the real Petrinaut UI. The isolated Pi persona contributes ordinary-language testimony; Brunch chooses its tools; the browser executes mutations against the same document and conversation. No screenshot-driven agent, evaluator answer key, operator-authored construction, or fixture overlay substitutes for this path.

The observed failure redirected the work: run-5uSidX showed duplicated whole-Ledger payload, host sidecars in context, one marker-only model step per reply, invisible argument generation, and stalled construction. WP-A–F removed those costs at their owning boundaries, then run-SB5pgx exercised the resulting path at scale.

Proof

run-SB5pgx ran for 33 minutes with both actors at medium reasoning: 102 submissions, 152 Brunch model steps, and zero step errors. It produced 46 mutate_workpiece calls (44 settled, 2 refused and recovered), 19 mutate_petrinaut_net batches, 33 net reads, 6 layouts, 3 diagnostics reads, and only one legitimate workpiece content reread after compaction. Every successful settlement used one body and returned evidenceValidated: true; no source enumeration or pre-settlement candidate read occurred. The final observed net had 17 places, 17 transitions, and 19 parameters.

The chronology recorded every submission. Median time to first model event was 1.1 s; median steps were 22.3 s for mutate_workpiece, 8.3 s for mutate_petrinaut_net, 3.8 s for read_petrinaut_net, and 4.7 s for text. The 122.9 s maximum settlement continuously streamed arguments with a 1.9 s maximum inter-delta gap, identifying low provider throughput rather than a stall.

The run crossed a live Flue compaction from 253k cached tokens to 15k at submission 77. Brunch reactivated its skills, reread the workpiece once, settled 14 further revisions, and continued net mutation. This is a live mechanism witness, not proof that semantic usefulness survived compaction.

Synthetic and deterministic coverage passed for context projection and canonical-history immutability; pointer-output workpiece recovery; text-to-locator evidence validation and refusal atomicity; live pending delivery, catch-up, overflow, ownership, and browser rendering; question-marker retirement and Voice derivation; compiler repair through the ordinary route; and mutation provenance including invalid arc targets.

Historical projection measurement

Replaying retained run-5uSidX context through the canonical reducer and context builder reduced the final projected history from 980,984 to 764,169 characters with the shipping defaults. Enabling the default-off superseded-argument projection would reduce it to 701,634 characters. Across the 13 retained client-tool signals, projection reduced 195,902 to 32,173 characters. These are serialized character counts on unchanged retained history, not token or cost measurements; new tool defaults cannot retroactively remove old calls.

Client-tool metadata audit

Host metadata remains available to canonical server and hydration consumers but never enters model context. Every model-required field is in output:

Tool group What the model needs from the result Metadata-only model field?
task, activate_skill, read_skill_resource Native Flue result/content No client-tool sidecar
mutate_workpiece, read_workpiece Revision identity, validated evidence, selected content/sources No
query_workpiece Basis/explanation result No
read_petrinaut_docs Requested documentation content No
read_petrinaut_net Net definition plus promoted observation id/hash No
read_petrinaut_diagnostics Diagnostic output No
layout_petrinaut_net Status/detail No
mutate_petrinaut_net Pre/post hashes, operation identity/status, relevant error No
ping Diagnostic response No

Constraints

Flue remains the canonical conversation-history owner; the Markdown workpiece remains the recoverable operational account; Petrinaut owns net schemas, mutation, compilation, and commands. Model projection must preserve entry order and identity and must never alter canonical/public history. The workpiece call input supplies the body; only a successful output supplies revision identity and validated evidence. Host metadata stays outside model context; any field the model needs belongs in output.

The persona remains isolated, the browser remains the mutation executor, and the stock assistant's tools/history remain separate. The pending-tool channel is ephemeral, bounded, in-memory, single-process, and presentation-only. It does not persist speculative state or modify Flue.

Fog-line

  • The run was leaner but still not demo-scale: cached context reached 253k tokens before compaction, retained net reads accounted for about 40% of that prompt, and whole-Ledger uploads still took a 22.3 s median.
  • The Ledger silently shrank from 14,972 to 7,316 characters at revision 10 and to 1,725 at revision 25. Retained reasoning summaries show this was a cost-driven choice under whole-document resubmission, not a compaction effect. Draft 7e owns a shrink guard, net-read economy, and—if still needed—section-keyed patching.
  • Both evidence refusals recovered by dropping relations rather than repairing the failing one (13 → 5 and 7 → 2). Refusal-recovery guidance remains open.
  • Superseded whole-Ledger arguments remain in context. Their projection is default-off and its paid probe was not run; draft 7e is expected to remove the need through section operations. The default-off path also carries a self-referencing markdownReference.retainedEntryId defect.
  • Pending rows were visible live but too visually close to settled rows. Gold/yellow pending, green settled, and red error presentation is carried to draft 7e.
  • Multi-process pending-event fan-out belongs to hosted deployment. Voice may later choose a narrower derived question segment, but marker revival is not the default.

Stop or reorient

Stop on lost native identity, replayed mutations, invented provenance, stale clean diagnostics, non-atomic evidence refusal, or undisclosed representation loss. Do not weaken the recovery contract for prompt savings, persist speculative pending state, or weaken the ownership guard. Do not claim the worked example from tool success, counts, or a live compaction crossing; Lu's review of the completed model, explanations, correction, diagnostics, legibility, and reopen answer remains required.

Pre-Merge Checklist 🚀

🚢 Has this modified a publishable library?

This PR:

  • modifies npm-publishable @hashintel/petrinaut and @hashintel/petrinaut-core and includes patch changesets for both

📜 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

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

The changes in this PR:

  • affected the execution graph, and the turbo.json files have been updated to reflect this

⚠️ Known issues

  • The Inventory worked example remains unaccepted: final semantic review, two grounded explanations, bounded correction, exact final diagnostics/legibility, original-session reopen answer, and experiment configuration are open.
  • test:passage-policy and test:workpiece-evidence still send the pre-WP-F workpiece input and are carried to draft 7e rather than counted green. The website integration suite was not rerun after WP-F; the narrower product-route and package checks listed below were.
  • The model-only superseded-argument projection remains default-off and unprobed. Do not enable it without resolving its carried reference defect and provider-acceptance question.
  • The pending side channel is single-process only. It is not a hosted multi-replica claim.
  • Five existing test.fails cases pin deferred worked-model fixture-copy/distribution gaps. They are unmet obligations, not positive proof.
  • Cross-browser document portability, automatic provider fallback, broader provider qualification, and configuration-only experiment integration remain deferred.

🐾 Next steps

  • Review and merge this remediation as the close report for Mission 7d; do not add further product scope to this branch.
  • Cut draft 7e separately: first pair a server-side Ledger shrink guard and guidance rule with net-read projection/rendering economy; add section-keyed Ledger operations only if whole-body settlement still blocks demo scale.
  • After that remediation, run and review the complete Inventory example and original-session reopen before claiming worked-example acceptance. Assess the upstream experiment lifecycle separately and never start optimization merely to demonstrate configuration.

🛡 What tests cover this?

Latest branch verification includes:

  • Build, lint:tsc, lint:eslint, and unit tests for the touched Brunch core, SDCPN plugin, transport, app, website, Petrinaut, and Petrinaut Core surfaces at their relevant checkpoints.
  • @apps/brunch-agent unit tests: 389 passed; five pre-existing worked-model-bundle cases remain expected failures.
  • @apps/brunch-agent integration suite passed after WP-F, including fresh-process history retention/reopen and validated message-id evidence carriage.
  • Loopback product-route tracers passed for persona admission/Stop, compiler dirty → repaired → clean behavior, native schema carriage, pending-tool rendering, and ordinary-route construction after the legacy tracer cut.
  • Targeted review-fix tests cover full pending-event catch-up followed by live delivery, queue/retention bounds, stream parsing, and invalid arc transition targets.
  • All currently reported required GitHub checks pass except the still-running Vercel hash deployment at the time this description was updated.

❓ How to test this?

  1. Run yarn install --immutable, then turbo run build lint:tsc lint:eslint test:unit --filter '@apps/brunch-agent...' from the repository root.
  2. Follow the evaluation execution-safety guide, establish loopback-only isolation, and run yarn workspace @apps/brunch-agent test:integration plus the focused test:persona, test:compiler-feedback, and test:native-schema product-route tracers.
  3. Inspect test/context-projection.test.ts, test/integration/history-retention.integration.ts, test/live-tool-broadcaster.test.ts, test/live-tool-route.test.ts, and the website's live-pending-tool.integration.test.ts. Confirm canonical history stays unchanged, workpiece revisions recover from call body plus successful result, invalid evidence writes nothing, and speculative rows never bypass canonical admission.
  4. A paid yarn brunch:persona --case inventory-purchasing run is not required for review and must not be started without an explicit allocation. The retained local run-SB5pgx is the branch's paid observation.

📹 Demo

run-SB5pgx is retained locally rather than attached publicly because it contains private persona/run material. It exercised the real browser path for 33 minutes, visibly showed pending and settled tool rows, produced 44 validated one-upload Ledger revisions and 19 net-mutation batches, crossed live compaction, and continued constructing afterward. It is remediation evidence, not a completed or accepted worked-example recording.

@lunelson
lunelson requested review from a team as code owners September 14, 2026 19:18
Copilot AI balanced review requested due to automatic review settings September 14, 2026 19:18
@vercel

vercel Bot commented Sep 14, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated
petrinaut Ready Ready Preview Sep 16, 2026 1:33pm UTC
petrinaut-docs Ready Ready Preview Sep 16, 2026 1:33pm UTC
2 Skipped Deployments
Project Deployment Actions Updated
hash Ignored Ignored Preview Sep 16, 2026 1:33pm UTC
hashdotdesign-tokens Ignored Ignored Preview Sep 16, 2026 1:33pm UTC

Request Review

@cursor

cursor Bot commented Sep 14, 2026 •

Copy link
Copy Markdown

PR Summary

High Risk
Touches Flue durability, model context projection, workpiece evidence validation, and provider registration on the primary chat/construction path; regressions could corrupt recovery semantics or silently shrink model-visible history.

Overview
This PR remediates the real browser construction path after token/context blow-up in persona observation: Brunch now projects model-facing context via Flue useContextProjection, stripping client-tool metadata, compacting net mutation outputs, turning settled workpiece bodies into pointers while keeping canonical history intact, and prefixing true-user messages with source ids for evidence citation.

Ledger/workpiece settlement moves toward one-upload writes with server-validated evidence locators; read_workpiece reads by source id rather than enumerating the conversation. The chat app adds an SSE live-tool channel (argument streaming only) plus submission chronology logging so slow generation vs stalls are observable without logging tool args. OpenAI joins Anthropic on the Flue provider stack; persona launches gain separate model/thinking and verbosity/disclosure overrides.

Large deletions drop the capture/archive binding package, harness apply-sweep, legacy browser tracers and prepared-fixture tests, and the old root-arc identity layer—browser mutation verification lives in mutation-delivery.ts instead. Persona/docs rename AI/Workpiece tabs to Chat/Ledger and document GPT-default Brunch with configurable axes.

Flue 2.0.3 patch carries context projection through compaction/repair, tool-scoped usePersistentState commits with outcomes, native Standard Schema tool inputs, and overflow handling that compacts successful stop responses instead of replaying them. Petrinaut core rejects arc creation when the referenced transition is missing rather than treating it as a no-op change.

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

@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 type/legal Owned by the @legal team labels Sep 14, 2026
@lunelson
lunelson deployed to pull-request September 14, 2026 19:19 — with GitHub Actions Active
@lunelson
lunelson deployed to pull-request September 14, 2026 19:19 — with GitHub Actions Active
@lunelson lunelson changed the title ln/fe 1573 mission 7d recovery FE-1573: Construct and explain one real net region from a genuine conversation Sep 14, 2026
Comment thread apps/brunch-agent/src/evaluations/install-faux-provider.ts Fixed

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

Provider credentials are not isolated from the Pi child, and focused locator reads still perform unnecessary history retrieval.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

Advances Mission 7d recovery by reducing model-context payloads, enabling mixed OpenAI/Anthropic persona runs, and removing the retired capture/archive binding.

Changes:

  • Adds focused workpiece reads, context projection, and recovery/freshness coverage.
  • Adds configurable provider/model/reasoning settings and OpenAI transport tests.
  • Removes the unused capture-store and binding-flue architecture.
File summaries
File Description
yarn.lock Updates workspace and patch resolutions.
libs/@hashintel/brunch-agent/README.md Updates package topology.
libs/@hashintel/brunch-agent/packages/transport-aisdk/vite.config.ts Derives externals from manifest.
libs/@hashintel/brunch-agent/packages/plugin-sdcpn/vite.config.ts Derives externals from manifest.
libs/@hashintel/brunch-agent/packages/plugin-sdcpn/src/skills/sdcpn-modelling/SKILL.md Updates recovery/read guidance.
libs/@hashintel/brunch-agent/packages/plugin-sdcpn/.oxlintrc.json Removes retired storage restriction.
libs/@hashintel/brunch-agent/packages/plugin-gherkin/vite.config.ts Derives externals from manifest.
libs/@hashintel/brunch-agent/packages/plugin-gherkin/src/skills/gherkin-specification/SKILL.md Refreshes core alignment.
libs/@hashintel/brunch-agent/packages/plugin-gherkin/.oxlintrc.json Removes retired storage restriction.
libs/@hashintel/brunch-agent/packages/plugin-dafny/vite.config.ts Derives externals from manifest.
libs/@hashintel/brunch-agent/packages/plugin-dafny/src/skills/dafny-verification/SKILL.md Refreshes core alignment.
libs/@hashintel/brunch-agent/packages/plugin-dafny/.oxlintrc.json Removes retired storage restriction.
libs/@hashintel/brunch-agent/packages/plugin-claims/vite.config.ts Derives externals from manifest.
libs/@hashintel/brunch-agent/packages/plugin-claims/src/skills/claims-formalization/SKILL.md Refreshes core alignment.
libs/@hashintel/brunch-agent/packages/plugin-claims/.oxlintrc.json Removes retired storage restriction.
libs/@hashintel/brunch-agent/packages/core/vite.config.ts Updates entries and externals.
libs/@hashintel/brunch-agent/packages/core/turbo.json Removes Linear task.
libs/@hashintel/brunch-agent/packages/core/test/update-workpiece.test.ts Tests focused workpiece reads.
libs/@hashintel/brunch-agent/packages/core/test/types/compile-contracts.ts Removes retired evidence contracts.
libs/@hashintel/brunch-agent/packages/core/test/session-log.test.ts Removes archive tests.
libs/@hashintel/brunch-agent/packages/core/test/compaction-config.test.ts Tests model option forwarding.
libs/@hashintel/brunch-agent/packages/core/test/architecture/linear-project-graph.test.ts Removes packaged utility tests.
libs/@hashintel/brunch-agent/packages/core/test/architecture/fixtures/baseline-anthropic-stub.ts Removes obsolete fixture.
libs/@hashintel/brunch-agent/packages/core/src/storage.ts Removes storage subpath.
libs/@hashintel/brunch-agent/packages/core/src/skills/elicitation/SKILL.md Documents focused read behavior.
libs/@hashintel/brunch-agent/packages/core/src/prompts/SYSTEM.md Updates authoritative-read guidance.
libs/@hashintel/brunch-agent/packages/core/src/index.ts Removes retired evidence exports.
libs/@hashintel/brunch-agent/packages/core/src/flue.ts Adds model options and focused reads.
libs/@hashintel/brunch-agent/packages/core/src/conversation/ask-tool-contract.ts Restores active ask contracts.
libs/@hashintel/brunch-agent/packages/core/src/client-tools.ts Uses active ask contracts.
libs/@hashintel/brunch-agent/packages/core/src/_suspended/conversation/sweep-protocol.ts Removes suspended sweep protocol.
libs/@hashintel/brunch-agent/packages/core/src/_suspended/conversation/ask-protocol.ts Removes suspended ask signal.
libs/@hashintel/brunch-agent/packages/core/src/_suspended/conversation/affordance.ts Removes suspended affordance.
libs/@hashintel/brunch-agent/packages/core/package.json Removes storage and Linear surfaces.
libs/@hashintel/brunch-agent/packages/core/docs/task-dependencies.json Removes Linear task metadata.
libs/@hashintel/brunch-agent/packages/binding-flue/vite.config.ts Removes binding build configuration.
libs/@hashintel/brunch-agent/packages/binding-flue/turbo.json Removes binding task configuration.
libs/@hashintel/brunch-agent/packages/binding-flue/tsconfig.json Removes binding TypeScript configuration.
libs/@hashintel/brunch-agent/packages/binding-flue/test/types/public-surface.ts Removes binding contract test.
libs/@hashintel/brunch-agent/packages/binding-flue/test/reply-projector.test.ts Removes projector tests.
libs/@hashintel/brunch-agent/packages/binding-flue/test/capture-accounting.test.ts Removes capture tests.
libs/@hashintel/brunch-agent/packages/binding-flue/src/reply-projector.ts Removes Flue reply adapter.
libs/@hashintel/brunch-agent/packages/binding-flue/src/local-capture-store.ts Removes local capture store.
libs/@hashintel/brunch-agent/packages/binding-flue/src/index.ts Removes binding entry point.
libs/@hashintel/brunch-agent/packages/binding-flue/src/history-reader.ts Removes archive history reader.
libs/@hashintel/brunch-agent/packages/binding-flue/src/capture-accounting.ts Removes capture accounting.
libs/@hashintel/brunch-agent/packages/binding-flue/src/capabilities.ts Removes binding capability record.
libs/@hashintel/brunch-agent/packages/binding-flue/src/archive-capability.ts Removes archive capability.
libs/@hashintel/brunch-agent/packages/binding-flue/package.json Removes binding package.
libs/@hashintel/brunch-agent/packages/binding-flue/docs/task-dependencies.json Removes binding task metadata.
libs/@hashintel/brunch-agent/packages/binding-flue/.oxlintrc.json Removes binding lint configuration.
libs/@hashintel/brunch-agent/evaluations/README.md Documents persona model defaults.
libs/@hashintel/brunch-agent/evaluations/protocols/network-guard/loopback-only.sb Allows the private persona socket.
libs/@hashintel/brunch-agent/docs/reference/architecture/topology.md Records simplified topology.
libs/@hashintel/brunch-agent/docs/reference/architecture/flue-routing.md Documents context projection.
libs/@hashintel/brunch-agent/docs/mission-drafts/worked-example-distribution-and-breadth.md Updates Mission 7d dependencies.
libs/@hashintel/brunch-agent/docs/mission-drafts/7-explainable-construction.md Reallocates Mission 7 scope.
libs/@hashintel/brunch-agent/docs/mission-drafts/11-optimisation-handoff.md Updates optimization handoff.
libs/@hashintel/brunch-agent/docs/mission-drafts/10-bounded-reviewer-revision.md Updates reviewer-revision plan.
libs/@hashintel/brunch-agent/docs/mission-archive/README.md Archives Mission 7c.
libs/@hashintel/brunch-agent/docs/agents/linear-project-graph.ts Parks the Linear utility.
libs/@hashintel/brunch-agent/docs/agents/issue-tracker.md Documents manual utility use.
libs/@hashintel/brunch-agent/AGENTS.md Updates topology rules.
apps/petrinaut-website/docs/task-dependencies.json Removes binding dependency.
apps/brunch-agent/turbo.json Passes OpenAI/model settings.
apps/brunch-agent/test/workpiece-evidence.integration.ts Tests focused evidence retrieval.
apps/brunch-agent/test/runbook-elicitation-faux-provider.ts Removes obsolete faux provider.
apps/brunch-agent/test/runbook-elicitation-faux-expert.ts Removes obsolete faux expert.
apps/brunch-agent/test/provider-registration.test.ts Tests both providers.
apps/brunch-agent/test/persona-construction.integration.ts Adds OpenAI persona coverage.
apps/brunch-agent/test/persona-configuration.test.ts Tests provider-specific credentials.
apps/brunch-agent/test/openai-responses-carriage.test.ts Tests OpenAI tool conversion.
apps/brunch-agent/test/net-freshness.test.ts Covers revision identity freshness.
apps/brunch-agent/test/native-openai-provider.ts Adds synthetic native OpenAI provider.
apps/brunch-agent/test/local-dev-origins.test.ts Checks forwarded model variables.
apps/brunch-agent/test/integration/workpiece-revisions.test.ts Strengthens mutation receipt assertions.
apps/brunch-agent/test/integration/petrinaut-chat.test.ts Removes capture assertions.
apps/brunch-agent/test/integration/petrinaut-chat.integration.ts Removes capture sweep execution.
apps/brunch-agent/test/integration/petrinaut-chat-result.ts Removes capture result fields.
apps/brunch-agent/test/integration/history-retention.test.ts Adds projection/reopen coverage.
apps/brunch-agent/test/integration/history-retention-crash-audit.ts Verifies complete mutation receipts.
apps/brunch-agent/test/integration/build-artifact.test.ts Updates bundle assertion.
apps/brunch-agent/test/history-retention-crash.integration.ts Verifies mutation summaries after recovery.
apps/brunch-agent/test/dev-configuration-preflight.test.ts Tests OpenAI preflight.
apps/brunch-agent/test/db-path.test.ts Removes capture-path tests.
apps/brunch-agent/test/construction-progression.integration.ts Uses canonical read tools and types.
apps/brunch-agent/test/chat-agent-compaction.test.ts Tests thinking and projection setup.
apps/brunch-agent/src/evaluations/runbook/headless-petrinaut-client.ts Exposes direct-edit testing.
apps/brunch-agent/src/evaluations/runbook/campaign-integrity.ts Removes obsolete campaign utilities.
apps/brunch-agent/src/evaluations/persona/launch/role-settings.ts Adds role-specific model resolution.
apps/brunch-agent/src/evaluations/persona/launch/resume.ts Restores role settings on resume.
apps/brunch-agent/src/evaluations/persona/launch.test.ts Tests mixed-role configuration.
apps/brunch-agent/src/evaluations/persona/configuration.ts Selects provider credentials.
apps/brunch-agent/src/evaluations/install-faux-provider.ts Supports Anthropic and OpenAI mocks.
apps/brunch-agent/src/dev-configuration-preflight.ts Validates selected provider configuration.
apps/brunch-agent/src/db-path.ts Removes capture-store paths.
apps/brunch-agent/src/chat-model.ts Adds provider and thinking selection.
apps/brunch-agent/src/capture/apply-sweep.ts Removes capture sweep implementation.
apps/brunch-agent/src/app.ts Registers OpenAI provider.
apps/brunch-agent/src/agents/chat-agent/agent.ts Enables projection and model options.
apps/brunch-agent/README.md Removes capture-store documentation.
apps/brunch-agent/package.json Updates dependencies.
apps/brunch-agent/flue.config.ts Enables OpenAI bundling.
apps/brunch-agent/docs/task-dependencies.json Removes binding build dependencies.
apps/brunch-agent/.pi/extensions/brunch-persona-testing/README.md Documents mixed-provider persona runs.
Review details
  • Files reviewed: 124/126 changed files
  • Comments generated: 2
  • Review effort level: Balanced

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread apps/brunch-agent/src/evaluations/persona/configuration.ts
Comment thread libs/@hashintel/brunch-agent/packages/core/src/flue.ts Outdated

@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.

Stale Bugbot comment from a previous run.

Comment thread .yarn/patches/@flue-runtime-npm-2.0.3-192c31f50c.patch
@codspeed

codspeed Bot commented Sep 14, 2026 •

Copy link
Copy Markdown

Merging this PR will not alter performance

⚠️ 6 benchmarks measured no execution time

Nothing ran under measurement, usually because the compiler removed the code under test. These results are not comparable, so they count as unchanged.

Preventing compiler optimizations

✅ 98 untouched benchmarks

Performance Changes

Benchmark BASE HEAD Efficiency
⚠️ as_constant < 1 ns < 1 ns N/A
⚠️ constant_equal < 1 ns < 1 ns N/A
⚠️ constant_not_equal < 1 ns < 1 ns N/A
⚠️ access < 1 ns < 1 ns N/A
⚠️ runtime_equal < 1 ns < 1 ns N/A
⚠️ runtime_not_equal < 1 ns < 1 ns N/A

Comparing ln/fe-1573-mission-7d-recovery (f847c91) with main (5af427b)1

Open in CodSpeed

Footnotes

  1. No successful run was found on main (c3c24bd) during the generation of this report, so 5af427b was used instead as the comparison base. There might be some changes unrelated to this pull request in this report. ↩

@lunelson
lunelson deployed to pull-request September 14, 2026 19:35 — with GitHub Actions Active
@lunelson
lunelson deployed to pull-request September 14, 2026 19:35 — with GitHub Actions Active
@vilkinsons vilkinsons changed the title FE-1573: Construct and explain one real net region from a genuine conversation FE-1573: Construct and explain a net region from a real conversation Sep 14, 2026
@lunelson
lunelson force-pushed the ln/fe-1573-mission-7d-recovery branch from 9788d6f to 32977d5 Compare September 15, 2026 07:10
@lunelson
lunelson deployed to pull-request September 15, 2026 07:11 — with GitHub Actions Active
lunelson and others added 20 commits September 16, 2026 14:42
Co-authored-by: Cursor <cursoragent@cursor.com>
Compress the branch's accomplishments into an Established base preamble and add a remediation plan with four work packages: workpiece payload and settlement authority, host-metadata subtraction from model context, retirement of `brunch_mark_question`, and a Brunch-owned live pending-tool channel. Record the measured baseline from `run-5uSidX`, Lu's dated decisions, Kostandin's confirmation that the question marker can be removed, and the new Deferred homes in the future spine.

Also align the app and persona operator READMEs with the current tool names, Chat/Ledger tabs and Flue-owned workpiece state.

Amp-Thread-ID: https://ampcode.com/threads/T-01a0a551-bc9f-719b-bc64-e5b17cfeb02e
Co-authored-by: Amp <amp@ampcode.com>
…retirement and live pending channel

WP-A: mutate_workpiece no longer echoes Markdown; the Ledger folds a settled revision from its bound canonical input. read_workpiece drops the pre-read upload and defaults includeSources to false. Argument projection ships default-off.
WP-B: host metadata sidecars stay out of model-visible tool results; the catalogue is audited per tool.
WP-C: brunch_mark_question is unmounted with its guidance; voice derives the question segment client-side from finalized text.
WP-D: a Brunch-owned live tool channel fed by Flue observe() is merged client-side into the AI SDK stream so tool rows pass through pending.

Adds yarn measure:context-replay for canonical replay measurement. test:reopened-why (legacy root-arc tracer) is red pending its removal.

Amp-Thread-ID: https://ampcode.com/threads/T-01a0a551-bc9f-719b-bc64-e5b17cfeb02e
Co-authored-by: Amp <amp@ampcode.com>
…ission (WP-E)

Cut the crew-reservation prepared fixture, browser tracer scripts, legacy
question-marker fixture, reopened-why retention harness and the root-arc
verifier residue; Brunch is forward-only and carries no legacy adapters.
Rename the narrowed verifier to mutation-delivery.

Restore read_petrinaut_net and read_petrinaut_diagnostics to the admission
browserToolNames in app.ts (regression from the earlier cut) and export the
tool names from plugin-sdcpn.

Give superseded mutate_workpiece argument projections an explicit
{ revisionId, sha256, superseded: true } markdownReference instead of a
self-referencing retainedEntryId. Update passage-policy and compiler-feedback
integration tests to the pointer-only contract, and refresh CONTEXT.md,
topology.md, the mutation capability matrix, evaluations and app READMEs,
and MISSION.md implementation state.

Amp-Thread-ID: https://ampcode.com/threads/T-01a0a551-bc9f-719b-bc64-e5b17cfeb02e
Co-authored-by: Amp <amp@ampcode.com>
…ontext

Mission 7d WP-F. `mutate_workpiece` evidence is declared as literal text
plus true-user message ids and resolved to locators server-side; an
absent or ambiguous text refuses the whole settlement with nothing
written. `read_workpiece` drops candidate Markdown and `includeSources`
in favour of `sourceIds`, so no settlement needs a preceding upload and
no read enumerates the conversation. The context projection prefixes
each true-user entry with its Flue message id, and reduces
`mutate_petrinaut_net` outcomes to identity and status for the model.
A turn-chronology observer logs per-request timing and per-tool-call
argument streaming at settlement so a provider stall can be told from
slow generation. Guidance carries the bounded settlement lifecycle
promoted from the side quest, and the panel labels a sources read only
when ids are given.

Amp-Thread-ID: https://ampcode.com/threads/T-01a0a551-bc9f-719b-bc64-e5b17cfeb02e
Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

@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.

Stale Bugbot comment from a previous run.

Comment thread libs/@hashintel/brunch-agent/packages/core/src/flue.ts
CiaranMn
CiaranMn previously approved these changes Sep 16, 2026

@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 2 potential issues.

Fix All in Cursor

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

Reviewed by Cursor Bugbot for commit aca9f16. Configure here.

Comment thread libs/@hashintel/brunch-agent/packages/core/src/flue.ts
@hash-release hash-release Bot mentioned this pull request Sep 16, 2026
@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 $$26.9 \mathrm{ms} \pm 209 \mathrm{μs}\left({\color{gray}-2.174 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$3.53 \mathrm{ms} \pm 21.0 \mathrm{μs}\left({\color{gray}-3.225 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 1002 $$14.1 \mathrm{ms} \pm 130 \mathrm{μs}\left({\color{gray}-2.701 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 3314 $$44.2 \mathrm{ms} \pm 321 \mathrm{μs}\left({\color{gray}-3.680 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$15.7 \mathrm{ms} \pm 117 \mathrm{μs}\left({\color{gray}-2.481 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 1527 $$25.8 \mathrm{ms} \pm 279 \mathrm{μs}\left({\color{gray}-1.155 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 2078 $$28.1 \mathrm{ms} \pm 247 \mathrm{μs}\left({\color{gray}-2.027 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.92 \mathrm{ms} \pm 25.9 \mathrm{μs}\left({\color{gray}-4.761 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 1033 $$15.3 \mathrm{ms} \pm 107 \mathrm{μs}\left({\color{lightgreen}-5.049 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_medium

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 102 $$3.78 \mathrm{ms} \pm 22.7 \mathrm{μs}\left({\color{gray}-2.439 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$3.09 \mathrm{ms} \pm 21.0 \mathrm{μs}\left({\color{gray}0.226 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 52 $$3.49 \mathrm{ms} \pm 24.0 \mathrm{μs}\left({\color{gray}1.33 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 269 $$5.39 \mathrm{ms} \pm 41.9 \mathrm{μs}\left({\color{gray}-0.459 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$3.69 \mathrm{ms} \pm 38.9 \mathrm{μs}\left({\color{gray}-0.736 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 108 $$4.25 \mathrm{ms} \pm 30.5 \mathrm{μs}\left({\color{gray}-2.583 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 133 $$4.51 \mathrm{ms} \pm 33.6 \mathrm{μs}\left({\color{gray}-1.624 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.50 \mathrm{ms} \pm 20.9 \mathrm{μs}\left({\color{gray}-0.476 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 63 $$4.26 \mathrm{ms} \pm 30.9 \mathrm{μs}\left({\color{gray}2.89 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_none

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 2 $$2.81 \mathrm{ms} \pm 22.1 \mathrm{μs}\left({\color{gray}-2.473 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.72 \mathrm{ms} \pm 15.2 \mathrm{μs}\left({\color{lightgreen}-7.532 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 2 $$2.86 \mathrm{ms} \pm 22.8 \mathrm{μs}\left({\color{gray}-4.883 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 8 $$3.10 \mathrm{ms} \pm 16.5 \mathrm{μs}\left({\color{gray}-2.554 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.97 \mathrm{ms} \pm 16.3 \mathrm{μs}\left({\color{gray}-2.285 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 3 $$3.24 \mathrm{ms} \pm 21.3 \mathrm{μs}\left({\color{gray}-1.886 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_small

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 52 $$3.17 \mathrm{ms} \pm 23.7 \mathrm{μs}\left({\color{gray}-2.093 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.89 \mathrm{ms} \pm 23.7 \mathrm{μs}\left({\color{gray}-2.216 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 26 $$3.07 \mathrm{ms} \pm 21.6 \mathrm{μs}\left({\color{gray}-0.723 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 94 $$3.61 \mathrm{ms} \pm 21.3 \mathrm{μs}\left({\color{gray}-0.402 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$3.16 \mathrm{ms} \pm 17.6 \mathrm{μs}\left({\color{gray}-2.606 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 27 $$3.42 \mathrm{ms} \pm 19.5 \mathrm{μs}\left({\color{gray}-0.010 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 66 $$3.56 \mathrm{ms} \pm 21.8 \mathrm{μs}\left({\color{gray}0.002 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.16 \mathrm{ms} \pm 16.0 \mathrm{μs}\left({\color{gray}-2.022 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 29 $$3.47 \mathrm{ms} \pm 25.4 \mathrm{μs}\left({\color{gray}0.581 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_complete

Function Value Mean Flame graphs
entity_by_id;one_depth 1 entities $$32.8 \mathrm{ms} \pm 151 \mathrm{μs}\left({\color{gray}-4.523 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 10 entities $$71.6 \mathrm{ms} \pm 334 \mathrm{μs}\left({\color{gray}-4.664 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 25 entities $$36.8 \mathrm{ms} \pm 198 \mathrm{μs}\left({\color{gray}-4.907 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 5 entities $$39.4 \mathrm{ms} \pm 221 \mathrm{μs}\left({\color{gray}-3.602 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 50 entities $$43.9 \mathrm{ms} \pm 282 \mathrm{μs}\left({\color{lightgreen}-5.480 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 1 entities $$34.5 \mathrm{ms} \pm 169 \mathrm{μs}\left({\color{gray}-1.782 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 10 entities $$409 \mathrm{ms} \pm 997 \mathrm{μs}\left({\color{gray}-3.758 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 25 entities $$92.5 \mathrm{ms} \pm 488 \mathrm{μs}\left({\color{gray}-1.193 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 5 entities $$72.4 \mathrm{ms} \pm 430 \mathrm{μs}\left({\color{gray}-0.460 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 50 entities $$278 \mathrm{ms} \pm 985 \mathrm{μs}\left({\color{gray}-4.479 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 1 entities $$10.8 \mathrm{ms} \pm 64.6 \mathrm{μs}\left({\color{lightgreen}-7.458 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 10 entities $$11.2 \mathrm{ms} \pm 75.3 \mathrm{μs}\left({\color{lightgreen}-7.363 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 25 entities $$11.1 \mathrm{ms} \pm 64.0 \mathrm{μs}\left({\color{lightgreen}-10.090 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 5 entities $$11.1 \mathrm{ms} \pm 62.9 \mathrm{μs}\left({\color{lightgreen}-7.291 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 50 entities $$11.3 \mathrm{ms} \pm 70.2 \mathrm{μs}\left({\color{lightgreen}-6.296 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_linkless

Function Value Mean Flame graphs
entity_by_id 1 entities $$10.9 \mathrm{ms} \pm 64.6 \mathrm{μs}\left({\color{lightgreen}-8.654 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10 entities $$10.8 \mathrm{ms} \pm 58.8 \mathrm{μs}\left({\color{lightgreen}-9.847 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 100 entities $$11.0 \mathrm{ms} \pm 60.9 \mathrm{μs}\left({\color{lightgreen}-9.324 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 1000 entities $$11.1 \mathrm{ms} \pm 62.9 \mathrm{μs}\left({\color{lightgreen}-8.567 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10000 entities $$11.6 \mathrm{ms} \pm 74.8 \mathrm{μs}\left({\color{lightgreen}-8.139 \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.4 \mathrm{ms} \pm 67.0 \mathrm{μs}\left({\color{gray}0.560 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/book/v/1 $$11.6 \mathrm{ms} \pm 83.6 \mathrm{μs}\left({\color{gray}1.88 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/building/v/1 $$11.4 \mathrm{ms} \pm 61.0 \mathrm{μs}\left({\color{gray}-0.797 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/organization/v/1 $$11.3 \mathrm{ms} \pm 57.5 \mathrm{μs}\left({\color{gray}-1.649 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/page/v/2 $$11.3 \mathrm{ms} \pm 68.6 \mathrm{μs}\left({\color{gray}-1.048 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/person/v/1 $$11.4 \mathrm{ms} \pm 77.5 \mathrm{μs}\left({\color{gray}-0.191 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/playlist/v/1 $$11.6 \mathrm{ms} \pm 82.4 \mathrm{μs}\left({\color{gray}2.46 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/song/v/1 $$11.4 \mathrm{ms} \pm 84.9 \mathrm{μs}\left({\color{gray}-0.075 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/uk-address/v/1 $$11.5 \mathrm{ms} \pm 84.4 \mathrm{μs}\left({\color{gray}1.62 \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.27 \mathrm{ms} \pm 52.3 \mathrm{μs}\left({\color{gray}-1.831 \mathrm{\%}}\right) $$ Flame Graph

representative_read_multiple_entities

Function Value Mean Flame graphs
entity_by_property traversal_paths=0 0 $$58.7 \mathrm{ms} \pm 393 \mathrm{μs}\left({\color{gray}-1.578 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=255 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true $$111 \mathrm{ms} \pm 616 \mathrm{μs}\left({\color{gray}-1.339 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false $$65.8 \mathrm{ms} \pm 476 \mathrm{μs}\left({\color{gray}-1.212 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true $$74.0 \mathrm{ms} \pm 346 \mathrm{μs}\left({\color{gray}-1.563 \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.6 \mathrm{ms} \pm 499 \mathrm{μs}\left({\color{gray}-3.352 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true $$89.3 \mathrm{ms} \pm 525 \mathrm{μs}\left({\color{gray}-2.052 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=0 0 $$47.2 \mathrm{ms} \pm 254 \mathrm{μs}\left({\color{gray}-1.300 \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 $$74.9 \mathrm{ms} \pm 538 \mathrm{μs}\left({\color{gray}-1.898 \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 $$53.2 \mathrm{ms} \pm 329 \mathrm{μs}\left({\color{gray}-2.789 \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 $$62.1 \mathrm{ms} \pm 409 \mathrm{μs}\left({\color{gray}-3.641 \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 $$64.1 \mathrm{ms} \pm 429 \mathrm{μs}\left({\color{gray}-3.121 \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 $$64.4 \mathrm{ms} \pm 543 \mathrm{μs}\left({\color{gray}-2.774 \mathrm{\%}}\right) $$

scenarios

Function Value Mean Flame graphs
full_test query-limited $$121 \mathrm{ms} \pm 520 \mathrm{μs}\left({\color{gray}3.56 \mathrm{\%}}\right) $$ Flame Graph
full_test query-unlimited $$133 \mathrm{ms} \pm 548 \mathrm{μs}\left({\color{gray}3.07 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-limited $$23.6 \mathrm{ms} \pm 149 \mathrm{μs}\left({\color{red}14.7 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-unlimited $$526 \mathrm{ms} \pm 920 \mathrm{μs}\left({\color{gray}2.05 \mathrm{\%}}\right) $$ Flame Graph

This branch was successfully deployed

4 active (1 outdated) deployments
Preview – petrinaut-docs — f847c918 Deployed Sep 16, 2026 by vercel[bot]
Preview – petrinaut — f847c918 Deployed Sep 16, 2026 by vercel[bot]
pull-request — f847c918 Deployed Sep 16, 2026 by lunelson via Sourcemaps (@apps/hash-ai-worker-ts) #36682
Preview – hash — dfc30c20 Deployed Sep 16, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/apps > hash.design Affects the `hash.design` design site (app) 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.

7 participants