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.
From the Maestro/platform integration review using
ghon 2026-04-22.Reviewed heads:
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
maestro.events.approval_hit,maestro.events.sandbox_violation, andmaestro.events.firewall_blockwith Platform decision ids / approval request ids when present.Acceptance Criteria
maestro.*events.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.