Skip to content

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

Open
lunelson wants to merge 38 commits into
mainfrom
ln/fe-1573-mission-7d-recovery
Open

lunelson wants to merge 38 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?

Continue FE-1573 toward a recorded, persona-driven worked example by allowing Brunch and the simulated user to use different providers, and by reducing repeated tool-result content without losing provenance. Anthropic refusals interrupted the earlier example; a subsequent OpenAI continuation exposed excessive context growth.

The browser-visible path now has a successful six-turn OpenAI/Sonnet observation. Deterministic context projection and recovery are qualified synthetically through the built application. These are integration and context-management results, not acceptance of the full worked example, live post-compaction recovery, or experiment configuration.

🔗 Related links

🚫 Blocked by

No outstanding upstream dependency is required for the provider/context changes delivered here. The broader mission's experiment configuration remains dependent on assessment and adaptation of Chris's stack: #9675#9676#9678#9654. Those changes are not included in this PR.

🔍 What does this change?

  • Lets the canonical browser-visible persona launcher select and retain each role's model and effort independently, including supported resume behavior and synthetic OpenAI streaming/tool execution coverage.
  • Reduces duplicate workpiece and browser-proof results in model context while preserving complete canonical history, authored arguments and provenance. Focused workpiece reads can retrieve source locators without repeating the whole document.
  • Removes the disconnected capture/archive path and unused binding package, enforces inward package dependencies, and updates build wiring and documentation to reflect the maintained production path.
🏗️ Agent notes

Imperative

The live mission remains a useful recorded Inventory purchasing example, followed by configuration of an inspectable in-memory experiment from elicited objectives and restrictions without running optimization. It requires progressive construction, two consequential explanations grounded in recorded basis, a bounded correction, clean final diagnostics and original-session reopening. Lu owns semantic and usefulness acceptance. This PR establishes the provider/context prerequisites; it does not close that acceptance contract.

Throughline

The canonical yarn brunch:persona launcher opens the real interface and pauses for recording. An isolated Pi persona sends ordinary-language turns; Brunch chooses its own tools and the browser executes them against the same document/conversation. No screenshot-driven AI interaction or operator-authored construction substitutes for the product path. The remaining full observation must continue through explanation, correction and reopen; configuration-only experiment assistance joins after its upstream API is settled.

Role defaults are Brunch openai/gpt-5.6-sol at low and persona anthropic/claude-sonnet-4-6 at low. --brunch-model, --brunch-thinking, --persona-model and --persona-thinking override fresh runs. run.json retains the effective settings; resume reuses them, rejects fresh-role overrides and accepts legacy Sonnet records. Persona medium remains available.

The context seam is a local patch to Flue 2.0.3, exposing useContextProjection; it is not an upstream public capability. Brunch owns deterministic selection. Ordinary inference, browser continuation, history rebuilding and compaction consume the projected view while retained records remain intact.

Proof

  • The six-turn local mixed-provider baseline constructed its first connected fragment on turn 2, settled six workpiece revisions, reached 13 places/9 transitions, returned four clean browser diagnostics and recorded no tool errors. Lu accepted this as reasonable proof that the parts work together, not a faithful completed example. A later continuation truncated after context exhaustion; its failure remains separate from the baseline.
  • Projection retains one authoritative content-bearing workpiece result per revision/hash and replaces redundant readbacks with references. If compaction cuts the referenced entry, exact content rematerializes from retained originals. Authored tool arguments, including proposed Markdown, remain exact and never stand in for authoritative readbacks.
  • Built-app tests cover immediate server/browser continuations, rebuild/reopen, compaction consumers, focused retrieval and retained provenance for two elements across three processes. Missing or ambiguous provenance controls refuse rather than invent support.
  • The synthetic capture removes 296,695 serialized characters from the measured result classes: workpiece-result Markdown falls from 83,787 to 27,929 characters and duplicate proof definitions from 240,837 to zero. Authored Markdown arguments retain their separate 27,929 characters. This is not a whole-prompt token or cost measurement.

Constraints

Flue remains the canonical history owner; the workpiece remains the recoverable operational account; Petrinaut owns net schemas, mutation and compilation. Preserve source IDs, UTF-16 spans, mutation identities, public history and exact authored arguments. Add no second persistence store, AI-written evidence summary, persistent “already read” registry or new accounting cutoff.

Workpiece availability is prompt-local: new user testimony does not change its settled revision. Net freshness instead depends on the browser's revision and document/incarnation binding because users can edit or undo directly. Equal-content receipts from another binding do not establish freshness. Private case knowledge reaches Brunch only through persona utterances.

Fog-line

Mixed-provider normal execution is observed, but no automatic fallback chain or cross-provider history recovery is qualified. Synthetic context recovery does not establish live provider fidelity after compaction. Fresh-run cadence, response quality and full semantic acceptance need another authorized observation. Chris's inspected API has a canonical optimization manifest with constraints, but its AI request and create-and-run lifecycle do not yet establish editable, unstarted configuration. Assess the adapted contract before adding another host or schema.

Stop or reorient

Stop on lost native identity, replayed mutations, invented provenance, stale clean diagnostics or undisclosed representation loss. Do not silently weaken unsupported restrictions or start optimization to simulate configuration. Destructive history conversion, lower-capability models or additional paid observation require Lu's decision. A successful tool call is not worked-example acceptance.

The tooling-context side quest is closed and its temporary document removed; lasting contracts and regression owners live in the Flue routing reference. The broader mission remains live. Recovery preserved the 7d patches and replayed them directly onto current main, where 7c had already squash-merged; old branches remain preserved locally.

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 application and Brunch workspaces are private; no package release is included.

📜 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's have been updated to reflect this

⚠️ Known issues

  • Full worked-example acceptance and a live post-remediation compaction/recovery observation remain open. The retained short observation is not that proof; browser persona/compiler tracers were not rerun after the final rebase.
  • No automatic provider fallback is configured. Resuming Anthropic history with OpenAI is not a supported recovery guarantee.
  • Five test.fails cases intentionally pin deferred fixture-copy/distribution gaps. Their expected failures do not fail CI; unexpected passes do. They do not prove that copying, provenance remapping or seeded bundles work, and any thrown error can satisfy these pins.
  • Cross-browser document portability is deferred: moving a user ID does not move the browser-stored net. Full conversation retention does not solve that separate persistence limitation.
  • The local Flue patch must be re-evaluated on runtime upgrades. Latest lint has five existing warnings; the service-dependent health integration test was not run.

🐾 Next steps

  • Complete persona-style controls, friendly tool/tab labels and attention/update badges, viewport reframing, and construction/prose refinements; collect labelled earlier-run artifacts beside Lu's recordings.
  • Conduct an authorized full fresh observation covering two grounded explanations, bounded correction, clean final diagnostics and original-session reopen, then seek Lu's acceptance.
  • Assess Chris's adapted experiment API and integrate configuration only, with no optimization execution. Fixture extraction, seeding, distribution and portfolio breadth remain deferred beyond the demo.

🛡 What tests cover this?

Latest local verification after the 7d-only rebase onto main:

  • App/dependency build: 30 tasks succeeded. App units: 412 passed, five expected failures, one skipped. Core units: 69 passed; SDCPN units: 87 passed.
  • Targeted website mutation/persistence/search: 43 passed. Built projection/freshness/retention/three-process reopen: 12 passed.
  • Broader app integration: 45 passed, one skipped, excluding health.test.ts, which requires a separately started service on port 3002.
  • App/core/SDCPN typechecks passed. App lint: zero errors, five warnings. Immutable Yarn installation succeeded with peer warnings.

Synthetic verification used a verified OS network guard: deny-network or loopback-only as required, with external provider traffic denied. Earlier qualification also passed Anthropic/OpenAI synthetic browser tracers; those are inherited results, not new post-rebase executions. No paid inference was run during rebase verification or PR preparation.

❓ How to test this?

  1. Install with yarn install --immutable, then build with turbo run build --filter '@apps/brunch-agent...' from the repository root.
  2. Follow the evaluation execution safety guide to establish and verify synthetic network isolation. Run yarn workspace @apps/brunch-agent test:unit and A5_RETENTION=1 yarn workspace @apps/brunch-agent test:integration --exclude test/integration/health.test.ts --no-file-parallelism inside that boundary.
  3. For focused review, inspect test/context-projection.test.ts, test/net-freshness.test.ts and test/chat-agent-compaction.test.ts, plus the built retention/reopen tests. Confirm complete public evidence survives while projected contexts remain self-contained, exact content returns after cuts, and stale/foreign browser receipts cannot establish freshness.
  4. For an explicitly authorized paid observation, follow the persona operator guide and run yarn brunch:persona --case inventory-purchasing with OPENAI_API_KEY and ANTHROPIC_API_KEY. Check port ownership first. Confirm the titled Chrome window is ready to record; Enter releases the inference pause. Observe ordinary persona messages, Brunch replies, browser-applied mutations and workpiece updates. This step is not a synthetic test and incurs provider charges.

📹 Demo

A six-turn mixed-provider browser observation is retained locally, with its baseline net, workpiece/history and inspected screenshot. No recording or private run payload is attached to this public PR. The later continuation's truncation remains recorded separately; a complete accepted worked-example recording is still outstanding.


  • ln/fe-1573-mission-7d-recovery 👈
  • main

Stack generated by Git Town

@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
hash Ready Ready Preview Sep 15, 2026 7:19am UTC
petrinaut Ready Ready Preview Sep 15, 2026 7:19am UTC
petrinaut-docs Ready Ready Preview Sep 15, 2026 7:19am UTC
1 Skipped Deployment
Project Deployment Actions Updated
hashdotdesign-tokens Ignored Ignored Preview Sep 15, 2026 7:19am UTC

Request Review

@cursor

cursor Bot commented Sep 14, 2026

Copy link
Copy Markdown

PR Summary

Medium Risk
Changes agent context, compaction, and durable state commit semantics through a vendored Flue patch plus multi-provider inference paths; behavior is heavily tested but upgrades to @flue/runtime need careful revalidation.

Overview
Adds model-only context projection via a patched Flue 2.0.3 runtime: Brunch registers useContextProjection with projectBrunchContext, which keeps one full workpiece body per revision, replaces duplicate readbacks with references, and trims bulky browser proof metadata while canonical history stays intact. Compaction, rebuilds, and overflow handling now run on the projected view; the patch also tightens persistent-state durability (tool-scoped writes flushed with recorded outcomes) and extends tools with Standard Schema, optional prepareArguments, and OpenAI alongside Anthropic in flue.config and server registration.

Persona and chat configuration move to independent provider/id models and thinking levels (defaults: Brunch OpenAI low, persona Anthropic low), with CLI flags, run.json retention, legacy resume support, and stricter Pi credential isolation. ChatAgent forwards full specifiers and optional BRUNCH_CHAT_THINKING; dev preflight validates the selected provider’s API key.

Cleanup and guardrails: drops the filesystem capture/apply-sweep path and @hashintel/brunch-agent-binding-flue, removes capture store path helpers, adds a dependency-cruiser import-direction test, and updates construction/retention tests for read_petrinaut_net, richer workpiece mutation outputs, and net-freshness prompting.

Reviewed by Cursor Bugbot for commit 32977d5. 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.

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.

Reviewed by Cursor Bugbot for commit a7f701d. Configure here.

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

codspeed-hq 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 (32977d5) with main (434cedb)1

Open in CodSpeed

Footnotes

  1. No successful run was found on main (466cc6b) during the generation of this report, so 434cedb 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 and others added 23 commits September 15, 2026 09:10
Allow only terminal/runtime variables and the selected credential into the Pi child. Verify both provider selections through the launcher subprocess boundary.

Skip workpiece history acquisition when sources are excluded, retaining errors when sources are requested. Replace faux-provider source interpolation with fixed module bodies.

Amp-Thread-ID: https://ampcode.com/threads/T-01a09b54-32c6-7269-9ec2-422b0aba6344
Co-authored-by: Amp <amp@ampcode.com>
@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 $$27.5 \mathrm{ms} \pm 204 \mathrm{μs}\left({\color{gray}-0.433 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$3.41 \mathrm{ms} \pm 24.4 \mathrm{μs}\left({\color{gray}0.744 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 1002 $$12.2 \mathrm{ms} \pm 95.0 \mathrm{μs}\left({\color{gray}-0.918 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 3314 $$43.0 \mathrm{ms} \pm 375 \mathrm{μs}\left({\color{gray}2.67 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$14.0 \mathrm{ms} \pm 124 \mathrm{μs}\left({\color{gray}-0.207 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 1527 $$23.8 \mathrm{ms} \pm 206 \mathrm{μs}\left({\color{gray}0.517 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 2078 $$28.1 \mathrm{ms} \pm 185 \mathrm{μs}\left({\color{gray}-1.053 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.66 \mathrm{ms} \pm 18.9 \mathrm{μs}\left({\color{gray}-0.085 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 1033 $$13.5 \mathrm{ms} \pm 134 \mathrm{μs}\left({\color{gray}0.972 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_medium

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 102 $$3.71 \mathrm{ms} \pm 17.9 \mathrm{μs}\left({\color{gray}-1.402 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.93 \mathrm{ms} \pm 18.4 \mathrm{μs}\left({\color{gray}-0.168 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 52 $$3.31 \mathrm{ms} \pm 26.1 \mathrm{μs}\left({\color{gray}-0.295 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 269 $$5.11 \mathrm{ms} \pm 40.8 \mathrm{μs}\left({\color{gray}-0.621 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$3.51 \mathrm{ms} \pm 26.0 \mathrm{μs}\left({\color{gray}0.069 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 108 $$4.11 \mathrm{ms} \pm 28.1 \mathrm{μs}\left({\color{gray}-0.359 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 133 $$4.44 \mathrm{ms} \pm 32.6 \mathrm{μs}\left({\color{gray}-0.039 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.38 \mathrm{ms} \pm 19.7 \mathrm{μs}\left({\color{gray}-0.429 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 63 $$4.03 \mathrm{ms} \pm 31.1 \mathrm{μs}\left({\color{gray}-0.412 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_none

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 2 $$2.69 \mathrm{ms} \pm 17.2 \mathrm{μs}\left({\color{gray}-0.019 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.62 \mathrm{ms} \pm 12.1 \mathrm{μs}\left({\color{gray}-0.309 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 2 $$2.78 \mathrm{ms} \pm 14.7 \mathrm{μs}\left({\color{gray}0.422 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 8 $$3.01 \mathrm{ms} \pm 20.1 \mathrm{μs}\left({\color{gray}0.169 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.82 \mathrm{ms} \pm 18.2 \mathrm{μs}\left({\color{gray}-0.295 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 3 $$3.07 \mathrm{ms} \pm 19.7 \mathrm{μs}\left({\color{gray}-1.399 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_small

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 52 $$3.10 \mathrm{ms} \pm 23.5 \mathrm{μs}\left({\color{gray}1.53 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.75 \mathrm{ms} \pm 19.7 \mathrm{μs}\left({\color{gray}0.371 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 26 $$2.93 \mathrm{ms} \pm 18.4 \mathrm{μs}\left({\color{gray}0.052 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 94 $$3.50 \mathrm{ms} \pm 27.3 \mathrm{μs}\left({\color{gray}1.12 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$2.98 \mathrm{ms} \pm 17.5 \mathrm{μs}\left({\color{gray}0.217 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 27 $$3.25 \mathrm{ms} \pm 17.8 \mathrm{μs}\left({\color{gray}-0.326 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 66 $$3.43 \mathrm{ms} \pm 24.0 \mathrm{μs}\left({\color{gray}0.422 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.00 \mathrm{ms} \pm 16.3 \mathrm{μs}\left({\color{gray}-0.279 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 29 $$3.31 \mathrm{ms} \pm 26.8 \mathrm{μs}\left({\color{gray}0.161 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_complete

Function Value Mean Flame graphs
entity_by_id;one_depth 1 entities $$31.5 \mathrm{ms} \pm 183 \mathrm{μs}\left({\color{gray}1.96 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 10 entities $$68.9 \mathrm{ms} \pm 487 \mathrm{μs}\left({\color{gray}0.486 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 25 entities $$34.2 \mathrm{ms} \pm 199 \mathrm{μs}\left({\color{gray}-0.007 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 5 entities $$39.0 \mathrm{ms} \pm 312 \mathrm{μs}\left({\color{gray}2.14 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 50 entities $$40.9 \mathrm{ms} \pm 266 \mathrm{μs}\left({\color{gray}0.411 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 1 entities $$32.9 \mathrm{ms} \pm 236 \mathrm{μs}\left({\color{gray}0.761 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 10 entities $$407 \mathrm{ms} \pm 1.06 \mathrm{ms}\left({\color{gray}-0.238 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 25 entities $$89.0 \mathrm{ms} \pm 669 \mathrm{μs}\left({\color{gray}0.066 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 5 entities $$77.9 \mathrm{ms} \pm 453 \mathrm{μs}\left({\color{gray}0.889 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 50 entities $$271 \mathrm{ms} \pm 981 \mathrm{μs}\left({\color{lightgreen}-10.205 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 1 entities $$10.2 \mathrm{ms} \pm 89.4 \mathrm{μs}\left({\color{gray}1.88 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 10 entities $$10.2 \mathrm{ms} \pm 61.0 \mathrm{μs}\left({\color{gray}0.891 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 25 entities $$10.4 \mathrm{ms} \pm 69.2 \mathrm{μs}\left({\color{gray}0.895 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 5 entities $$10.3 \mathrm{ms} \pm 67.6 \mathrm{μs}\left({\color{gray}1.70 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 50 entities $$10.4 \mathrm{ms} \pm 71.6 \mathrm{μs}\left({\color{gray}2.50 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_linkless

Function Value Mean Flame graphs
entity_by_id 1 entities $$10.1 \mathrm{ms} \pm 62.0 \mathrm{μs}\left({\color{gray}1.39 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10 entities $$10.2 \mathrm{ms} \pm 73.0 \mathrm{μs}\left({\color{gray}1.60 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 100 entities $$10.2 \mathrm{ms} \pm 61.5 \mathrm{μs}\left({\color{gray}0.935 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 1000 entities $$10.1 \mathrm{ms} \pm 66.1 \mathrm{μs}\left({\color{gray}-0.708 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10000 entities $$10.4 \mathrm{ms} \pm 67.1 \mathrm{μs}\left({\color{gray}0.474 \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 $$10.5 \mathrm{ms} \pm 76.6 \mathrm{μs}\left({\color{gray}-1.235 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/book/v/1 $$10.4 \mathrm{ms} \pm 67.2 \mathrm{μs}\left({\color{gray}-1.909 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/building/v/1 $$10.5 \mathrm{ms} \pm 58.3 \mathrm{μs}\left({\color{gray}-1.497 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/organization/v/1 $$10.8 \mathrm{ms} \pm 97.6 \mathrm{μs}\left({\color{gray}-1.031 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/page/v/2 $$10.5 \mathrm{ms} \pm 75.7 \mathrm{μs}\left({\color{gray}0.138 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/person/v/1 $$10.5 \mathrm{ms} \pm 64.4 \mathrm{μs}\left({\color{gray}-2.149 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/playlist/v/1 $$10.4 \mathrm{ms} \pm 63.6 \mathrm{μs}\left({\color{gray}-3.629 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/song/v/1 $$10.6 \mathrm{ms} \pm 83.3 \mathrm{μs}\left({\color{gray}-0.370 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/uk-address/v/1 $$10.4 \mathrm{ms} \pm 60.7 \mathrm{μs}\left({\color{gray}-2.641 \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 $$7.67 \mathrm{ms} \pm 40.4 \mathrm{μs}\left({\color{gray}-1.944 \mathrm{\%}}\right) $$ Flame Graph

representative_read_multiple_entities

Function Value Mean Flame graphs
entity_by_property traversal_paths=0 0 $$55.6 \mathrm{ms} \pm 631 \mathrm{μs}\left({\color{gray}1.66 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=255 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true $$105 \mathrm{ms} \pm 691 \mathrm{μs}\left({\color{gray}0.144 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false $$61.0 \mathrm{ms} \pm 491 \mathrm{μs}\left({\color{gray}0.457 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true $$68.3 \mathrm{ms} \pm 464 \mathrm{μs}\left({\color{gray}-2.038 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true $$78.2 \mathrm{ms} \pm 482 \mathrm{μs}\left({\color{gray}0.224 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true $$83.9 \mathrm{ms} \pm 655 \mathrm{μs}\left({\color{gray}-0.810 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=0 0 $$44.4 \mathrm{ms} \pm 313 \mathrm{μs}\left({\color{gray}-0.016 \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 $$71.7 \mathrm{ms} \pm 510 \mathrm{μs}\left({\color{gray}1.01 \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.3 \mathrm{ms} \pm 484 \mathrm{μs}\left({\color{gray}2.25 \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 $$59.6 \mathrm{ms} \pm 407 \mathrm{μs}\left({\color{gray}1.67 \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 $$60.8 \mathrm{ms} \pm 328 \mathrm{μs}\left({\color{gray}-0.035 \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 $$61.5 \mathrm{ms} \pm 347 \mathrm{μs}\left({\color{gray}1.57 \mathrm{\%}}\right) $$

scenarios

Function Value Mean Flame graphs
full_test query-limited $$113 \mathrm{ms} \pm 684 \mathrm{μs}\left({\color{gray}-2.056 \mathrm{\%}}\right) $$ Flame Graph
full_test query-unlimited $$125 \mathrm{ms} \pm 636 \mathrm{μs}\left({\color{gray}-0.863 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-limited $$21.9 \mathrm{ms} \pm 285 \mathrm{μs}\left({\color{gray}-1.225 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-unlimited $$512 \mathrm{ms} \pm 1.41 \mathrm{ms}\left({\color{gray}4.99 \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.

3 participants