Skip to content

fix(evo): classify host-brokered run tool - #59

Merged
pai-scaffolde merged 1 commit into
mainfrom
fix/evo-run-tool-classification
Aug 8, 2026
Merged

fix(evo): classify host-brokered run tool#59
pai-scaffolde merged 1 commit into
mainfrom
fix/evo-run-tool-classification

Conversation

@pai-scaffolde

Copy link
Copy Markdown
Collaborator

Summary

Scaffolde candidate profiles intentionally expose both host-brokered Evo tools:

  • scaffolde_evo_agent_dispatch
  • scaffolde_evo_run

The strict process-profile classifier only recognized the first, so real candidate launches failed before run_owned_process and correctly produced no execution receipt. Add the missing exact authority classification; unknown tools remain fail-closed.

Verification

  • uv run --with pytest python -m pytest -q tests/agent/test_subagent_tool_boundary.py tests/agent/test_subagent_process_integration.py — 14 passed
  • git diff --check — pass
  • live Scaffolde canary prior failure: Evo v1 tool classification is undefined for: [scaffolde_evo_run]

Co-Authored-By: Paperclip <noreply@paperclip.ing>
@pai-scaffolde
pai-scaffolde merged commit a065729 into main Aug 8, 2026
37 checks passed
@pai-scaffolde
pai-scaffolde deleted the fix/evo-run-tool-classification branch August 8, 2026 18:41

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: aae8b9ce1b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

)
HOST_BROKERED_EVO_TOOL_NAMES = frozenset({"scaffolde_evo_agent_dispatch"})
HOST_BROKERED_EVO_TOOL_NAMES = frozenset(
{"scaffolde_evo_agent_dispatch", "scaffolde_evo_run"}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Update the documented host-broker authority boundary

When operators assess strict process-profile isolation, docs/security/execution-profiles.md:183-186 still states that only scaffolde_evo_agent_dispatch is host brokered and that other plugin tools fail before spawn. Adding scaffolde_evo_run here makes that security guarantee false, so update the execution-profile documentation to describe the expanded host-side authority.

Useful? React with 👍 / 👎.

)
HOST_BROKERED_EVO_TOOL_NAMES = frozenset({"scaffolde_evo_agent_dispatch"})
HOST_BROKERED_EVO_TOOL_NAMES = frozenset(
{"scaffolde_evo_agent_dispatch", "scaffolde_evo_run"}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Route plugin broker authority through a generic extension

A repo-wide search finds no schema or handler registration for scaffolde_evo_run, only this allowlist entry and its test, so this externally supplied plugin capability is being special-cased in the core classifier. Every additional brokered plugin action would consequently require another core patch, while a generic frozen-entry/profile authority marker could preserve fail-closed classification without accumulating vendor-specific names here.

AGENTS.md reference: AGENTS.md:L122-L125

Useful? React with 👍 / 👎.

Comment on lines +12 to +14
local, host_brokered = classify_evo_tools(
["terminal", "read_file", "scaffolde_evo_agent_dispatch", "scaffolde_evo_run"]
)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Exercise the new tool through the brokered process path

This test only proves membership in the classifier sets; it does not exercise scaffolde_evo_run through ParentBrokerAdapter, session.start, worker-side classification, and frozen parent dispatch. The existing process-integration tests use only scaffolde_evo_agent_dispatch, so this test remains green if the newly admitted handler cannot actually execute—the same launch path this change is intended to repair. Add an integration test using a real registered scaffolde_evo_run handler and the worker/broker path.

AGENTS.md reference: AGENTS.md:L84-L87

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant