Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
1 Skipped Deployment
|
PR SummaryMedium Risk Overview Persona and chat configuration move to independent Cleanup and guardrails: drops the filesystem capture/ Reviewed by Cursor Bugbot for commit 32977d5. Bugbot is set up for automated code reviews on this repo. Configure here. |
There was a problem hiding this comment.
🟡 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-fluearchitecture.
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.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ 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.
Merging this PR will not alter performance
|
| 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
Footnotes
Amp-Thread-ID: https://ampcode.com/threads/T-01a09b54-32c6-7269-9ec2-422b0aba6344 Co-authored-by: Amp <amp@ampcode.com>
Amp-Thread-ID: https://ampcode.com/threads/T-01a09b54-32c6-7269-9ec2-422b0aba6344 Co-authored-by: Amp <amp@ampcode.com>
Amp-Thread-ID: https://ampcode.com/threads/T-01a0a050-f39e-7438-b684-ad1e1b2f6388 Co-authored-by: Amp <amp@ampcode.com>
Amp-Thread-ID: https://ampcode.com/threads/T-01a09b54-32c6-7269-9ec2-422b0aba6344 Co-authored-by: Amp <amp@ampcode.com>
Amp-Thread-ID: https://ampcode.com/threads/T-01a09b54-32c6-7269-9ec2-422b0aba6344 Co-authored-by: Amp <amp@ampcode.com>
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>
9788d6f to
32977d5
Compare
Benchmark results
|
| Function | Value | Mean | Flame graphs |
|---|---|---|---|
| resolve_policies_for_actor | user: empty, selectivity: high, policies: 2002 | Flame Graph | |
| resolve_policies_for_actor | user: empty, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: empty, selectivity: medium, policies: 1002 | Flame Graph | |
| resolve_policies_for_actor | user: seeded, selectivity: high, policies: 3314 | Flame Graph | |
| resolve_policies_for_actor | user: seeded, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: seeded, selectivity: medium, policies: 1527 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: high, policies: 2078 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: medium, policies: 1033 | Flame Graph |
policy_resolution_medium
| Function | Value | Mean | Flame graphs |
|---|---|---|---|
| resolve_policies_for_actor | user: empty, selectivity: high, policies: 102 | Flame Graph | |
| resolve_policies_for_actor | user: empty, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: empty, selectivity: medium, policies: 52 | Flame Graph | |
| resolve_policies_for_actor | user: seeded, selectivity: high, policies: 269 | Flame Graph | |
| resolve_policies_for_actor | user: seeded, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: seeded, selectivity: medium, policies: 108 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: high, policies: 133 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: medium, policies: 63 | Flame Graph |
policy_resolution_none
| Function | Value | Mean | Flame graphs |
|---|---|---|---|
| resolve_policies_for_actor | user: empty, selectivity: high, policies: 2 | Flame Graph | |
| resolve_policies_for_actor | user: empty, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: empty, selectivity: medium, policies: 2 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: high, policies: 8 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: medium, policies: 3 | Flame Graph |
policy_resolution_small
| Function | Value | Mean | Flame graphs |
|---|---|---|---|
| resolve_policies_for_actor | user: empty, selectivity: high, policies: 52 | Flame Graph | |
| resolve_policies_for_actor | user: empty, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: empty, selectivity: medium, policies: 26 | Flame Graph | |
| resolve_policies_for_actor | user: seeded, selectivity: high, policies: 94 | Flame Graph | |
| resolve_policies_for_actor | user: seeded, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: seeded, selectivity: medium, policies: 27 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: high, policies: 66 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: low, policies: 1 | Flame Graph | |
| resolve_policies_for_actor | user: system, selectivity: medium, policies: 29 | Flame Graph |
read_scaling_complete
| Function | Value | Mean | Flame graphs |
|---|---|---|---|
| entity_by_id;one_depth | 1 entities | Flame Graph | |
| entity_by_id;one_depth | 10 entities | Flame Graph | |
| entity_by_id;one_depth | 25 entities | Flame Graph | |
| entity_by_id;one_depth | 5 entities | Flame Graph | |
| entity_by_id;one_depth | 50 entities | Flame Graph | |
| entity_by_id;two_depth | 1 entities | Flame Graph | |
| entity_by_id;two_depth | 10 entities | Flame Graph | |
| entity_by_id;two_depth | 25 entities | Flame Graph | |
| entity_by_id;two_depth | 5 entities | Flame Graph | |
| entity_by_id;two_depth | 50 entities | Flame Graph | |
| entity_by_id;zero_depth | 1 entities | Flame Graph | |
| entity_by_id;zero_depth | 10 entities | Flame Graph | |
| entity_by_id;zero_depth | 25 entities | Flame Graph | |
| entity_by_id;zero_depth | 5 entities | Flame Graph | |
| entity_by_id;zero_depth | 50 entities | Flame Graph |
read_scaling_linkless
| Function | Value | Mean | Flame graphs |
|---|---|---|---|
| entity_by_id | 1 entities | Flame Graph | |
| entity_by_id | 10 entities | Flame Graph | |
| entity_by_id | 100 entities | Flame Graph | |
| entity_by_id | 1000 entities | Flame Graph | |
| entity_by_id | 10000 entities | 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
|
Flame Graph | |
| entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/book/v/1
|
Flame Graph | |
| entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/building/v/1
|
Flame Graph | |
| entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/organization/v/1
|
Flame Graph | |
| entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/page/v/2
|
Flame Graph | |
| entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/person/v/1
|
Flame Graph | |
| entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/playlist/v/1
|
Flame Graph | |
| entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/song/v/1
|
Flame Graph | |
| entity_by_id | entity type ID: https://blockprotocol.org/@alice/types/entity-type/uk-address/v/1
|
Flame Graph |
representative_read_entity_type
| Function | Value | Mean | Flame graphs |
|---|---|---|---|
| get_entity_type_by_id | Account ID: bf5a9ef5-dc3b-43cf-a291-6210c0321eba
|
Flame Graph |
representative_read_multiple_entities
| Function | Value | Mean | Flame graphs |
|---|---|---|---|
| entity_by_property | traversal_paths=0 | 0 | |
| entity_by_property | traversal_paths=255 | 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true | |
| entity_by_property | traversal_paths=2 | 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false | |
| entity_by_property | traversal_paths=2 | 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true | |
| entity_by_property | traversal_paths=2 | 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true | |
| entity_by_property | traversal_paths=2 | 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true | |
| link_by_source_by_property | traversal_paths=0 | 0 | |
| link_by_source_by_property | traversal_paths=255 | 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true | |
| link_by_source_by_property | traversal_paths=2 | 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false | |
| link_by_source_by_property | traversal_paths=2 | 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true | |
| link_by_source_by_property | traversal_paths=2 | 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true | |
| link_by_source_by_property | traversal_paths=2 | 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true |
scenarios
| Function | Value | Mean | Flame graphs |
|---|---|---|---|
| full_test | query-limited | Flame Graph | |
| full_test | query-unlimited | Flame Graph | |
| linked_queries | query-limited | Flame Graph | |
| linked_queries | query-unlimited | Flame Graph |

🌟 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
mainand contains only the recovered 7d changes, not a replay of 7c.🚫 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?
🏗️ 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:personalauncher 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-solatlowand personaanthropic/claude-sonnet-4-6atlow.--brunch-model,--brunch-thinking,--persona-modeland--persona-thinkingoverride fresh runs.run.jsonretains 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
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:
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:
🕸️ Does this require a change to the Turbo Graph?
The changes in this PR:
turbo.json's have been updated to reflect thistest.failscases 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.🐾 Next steps
🛡 What tests cover this?
Latest local verification after the 7d-only rebase onto
main:health.test.ts, which requires a separately started service on port 3002.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?
yarn install --immutable, then build withturbo run build --filter '@apps/brunch-agent...'from the repository root.yarn workspace @apps/brunch-agent test:unitandA5_RETENTION=1 yarn workspace @apps/brunch-agent test:integration --exclude test/integration/health.test.ts --no-file-parallelisminside that boundary.test/context-projection.test.ts,test/net-freshness.test.tsandtest/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.yarn brunch:persona --case inventory-purchasingwithOPENAI_API_KEYandANTHROPIC_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.
Stack generated by Git Town