FE-1563: Establish Brunch elicitation skill boundaries - #9468
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
1 Skipped Deployment
|
Contributor
Author
This stack of pull requests is managed by Graphite. Learn more about stacking. |
3 tasks
lunelson
changed the base branch from
ln/fe-1525-headless-runbook-pn
to
graphite-base/9468
September 1, 2026 07:18
lunelson
force-pushed
the
graphite-base/9468
branch
from
September 1, 2026 07:22
4bc7ff3 to
cf89165
Compare
lunelson
force-pushed
the
ln/fe-1563-redesign-runbook-workpiece
branch
from
September 1, 2026 07:22
566b20e to
228f7d5
Compare
lunelson
changed the base branch from
graphite-base/9468
to
ln/fe-1525-headless-runbook-pn
September 1, 2026 07:23
5 tasks
vilkinsons
approved these changes
Sep 4, 2026
vilkinsons
approved these changes
Sep 4, 2026
Contributor
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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

🌟 What is the purpose of this PR?
Brunch previously mixed universal elicitation behavior, SDCPN-specific teaching, and application composition in boundaries that made activation and disclosure hard to reason about. That coupling also obscured which behavior the production agent could prove and which claims depended on a failed evaluation campaign.
This PR establishes a Flue-native elicitation capability and target-specific plugin boundary on the production ChatAgent path. Owner-adjudicated evidence establishes interactive activation and resolvable-review restraint; immediate review-to-elicitation switching remains deferred, and this PR does not claim a successful full-run workpiece campaign.
🔗 Related links
🚫 Blocked by
🔍 What does this change?
The implementation separates core elicitation, target-formalism contributions, and application composition while retaining the evidence and limitations needed to review that boundary.
The 47 retired raw side-quest runs remain available as one 2.7 MB compressed repository archive. Its recorded SHA-256 and the three existing path/content ledgers verify the complete corpus, and a core test extracts and verifies every file without relying on an intermediate pre-squash commit.
🏗️ Agent notes
Status: Accepted by owner adjudication on the bounded observed evidence recorded below.
Imperative: Establish reusable elicitation as an independently activatable core capability, keep target-formalism investigation and construction guidance in the pairing plugin, and leave composition, transport, diagnostics, and host execution in the application.
Throughline: production
ChatAgentcomposition → coreelicitationactivation → SDCPN job-skill activation and conditional profile disclosure → direct Flue persona turn → canonicalhistory()snapshot → deterministic trace and adjudication. This crosses the real agent/provider/conversation boundary but not Petrinaut browser execution or remote deployment.Proof: Vestera and Data Centre activated elicitation before substantive questioning and passed opening dosage; S3 correctly refrained on a resolvable review; S4 retained the unresolved operational rule but failed to activate elicitation. The valid S4 failure stopped the frozen campaign before Industrial Gas, so no
3/3floor and no full-run workpiece candidate were established. Hash-bound v1/v2 evidence and the closure adjudication are retained in the repository.Constraints: frozen Mission 3/4 evidence remains byte-identical; canonical Flue history is authoritative; core owns universal elicitation; target-pairing plugins own job/formalism guidance; the app owns composition and host behavior; no fallback model, post-observation reinterpretation, or Voice reconciliation may restore the older app-local agent.
Fog-line answers: universal always-required elicitation guidance is inline; only conditional SDCPN profile material remains resource-loaded. Immediate review-to-interview switching is not load-bearing for this mission and is deferred. Durable evidence identity is the manifest digest plus ordered content hashes rather than permanent Git ancestry. Mission 4 produced no candidate.
Stop or reorient: a technically valid behavioral failure stops the frozen campaign; technical replacement is allowed only for invalid execution or absent substantive output. Do not claim general reliability, broad workpiece quality, browser parity, deployment, or product authenticity from this proof.
Deferred: FE-1574 owns direct Voice/Flue transport; FE-1575 owns the prepared workpiece/Petrinaut viability tracer; FE-1573 owns later capture-backed why/refusal. The S4 transition re-enters only under observed workflow friction.
elicitationcapability through@hashintel/brunch-agent/flue.3/3claim, and no full-run workpiece candidate.Pre-Merge Checklist 🚀
🚢 Has this modified a publishable library?
This PR:
The affected Brunch packages are private
0.0.0-privateworkspaces.📜 Does this require a change to the docs?
The changes in this PR:
Mission authority, archive, future drafts, evaluation evidence, and the Voice integration handoff are updated in this branch. No Petrinaut end-user behavior is changed here.
🕸️ Does this require a change to the Turbo Graph?
The changes in this PR:
elicitation; this remains a valid observed failure but is non-blocking for Mission 4 closure.ChatAgentexecution, not Petrinaut browser parity, deployment, or remote operation.🐾 Next steps
useBrunchAgent()/useSdcpnPlugin()and selectively porting useful turn-taking/provenance behavior.🛡 What tests cover this?
ChatAgent, transport, transcript, persona bridge, proof-artifact, and headless construction tests.❓ How to test this?
libs/@hashintel/brunch-agent/docs/evidence/evaluations/mission-4-proof-of-life-v2/final-adjudication.mdand its four hash-bound run directories.MISSION.mdis a closure pointer and the full contract is archived underdocs/mission-archive/.📹 Demo
No UI demo: this branch changes Brunch composition, elicitation resources, evaluation evidence, and planning/ownership boundaries rather than Petrinaut end-user UI.