Skip to content

Route Maestro approvals, sandbox, and firewall decisions through Platform policy services #73

Description

@haasonsaas

From the Maestro/platform integration review using gh on 2026-04-22.

Reviewed heads:

  • ae6e88a
  • evalops/platform@7b003938349939052f90ae41241599993a7c06c9

Problem

Maestro has local approval, sandbox, and firewall decision points. Platform has governance, approvals, habit learning, and policy services, plus planned maestro.* event subscribers. The Platform side is partly tracked in evalops/platform#748, evalops/platform#763, and evalops/platform#764, but Maestro does not yet have a concrete issue to route its runtime decisions through those services.

Scope

  • Add an optional decision adapter that can ask Platform governance/approvals before privileged tool, shell, filesystem, network, or MCP actions.
  • Normalize decision inputs: command/tool name, arguments, cwd/repo, touched resources, network host, model/provider, surface, user intent, session id, and workspace/team context.
  • Keep local/offline behavior available, with explicit fallback semantics when Platform policy is disabled or unreachable.
  • Map Platform approval requests/responses into Maestro's existing approval UI and headless protocol messages.
  • Emit maestro.events.approval_hit, maestro.events.sandbox_violation, and maestro.events.firewall_block with Platform decision ids / approval request ids when present.
  • Consume learned approval/governance habits where available without silently weakening local policy.

Acceptance Criteria

  • Mocked Platform policy tests cover allow, deny, approval-required, unavailable, and malformed-response cases.
  • Local-only Maestro approval/sandbox/firewall behavior remains unchanged when the adapter is disabled.
  • A Platform-backed smoke path shows a decision request, an approval wait/resume, and correlated maestro.* events.
  • UI/headless users receive actionable denial or approval-pending reasons instead of generic tool failures.

Related: evalops/platform#177, evalops/platform#748, evalops/platform#763, evalops/platform#764, evalops/platform#765, #49, #72.


Runtime Parity / Conformance Links

Use #85 as the protocol-level acceptance bar: lifecycle, subscribe/events/messages/heartbeat/disconnect, viewer/controller roles, permission request/response, utility operations, workspace-root enforcement, cursor replay/reset, and drain/resume behavior should match across the current TypeScript web/headless bridge and the target Rust runtime.

Metadata

Metadata

Assignees

No one assigned

    Labels

    architecture-reviewCross-service architecture review requestedenhancementNew feature or request

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions