Skip to content

Phase-5 v1: mutation path is structurally unreachable in a shipped build (no proposal-grant issuance; operator ineligible) + enable-mutations i18n keys unresolved #52

Description

@JordanTheJet

From the live end-to-end test of the phase-5 transport on the real release binary (feat/control-trust-genesis @ 11ff761). The core is correct and fully tested in the harness (component test an_operator_approves_via_the_cli_path_and_config_changes_through_the_cas proves park→approve→apply→verify with the fixture isolation seam). But in a SHIPPED build the mutation path is fail-closed at two independent points, so it cannot yet be exercised in production:

  1. No CLI issues a proposal grant. register-client grants read domains only (granted_proposal_domains: null on the genesis-registered client, verified live). control.request_apply therefore refuses every real client — verified live: a read-only client with mutations ENABLED calling request_apply with a valid payload gets unknown_operation and writes no journal row. There is no register-client --proposal-domain or grant-widening command. To make the control plane actually mutate anything, v1 needs a grant-widening ceremony (meta-authority) that issues a proposal domain to a registered client.
  2. Operator approve fails closed. zeroclaw control approve passes Evidence::unknown()OperatorIneligible in production (no reachability prover for same-host separation). So even a parked proposal could not be approved in a shipped build.

Both are correct default-closed behavior, not bugs — but together they mean phase 5's user-facing capability is inert until (a) a proposal-grant issuance ceremony and (b) a real reachability prover (or an out-of-process operator backchannel) exist. Flagging so the roadmap is honest: the mutating control plane is BUILT and TESTED but not yet REACHABLE end-to-end in production.

Also (real user-facing bug): the enable-mutations ceremony renders raw unresolved Fluent keys on the release binary — observed live: {cli-control-enable-mutations-confirm}, {cli-control-enable-mutations-operator}, {cli-control-mutations-enabled}. The keys were added to cli.ftl in source but do not resolve in the built binary (likely a generated/embedded catalogue not regenerated, or a missing translation entry). Fix the i18n wiring so the ceremony prompts render.

Minor (cosmetic, fail-closed): control.request_apply appears in a mutations-enabled session's tools/list even for a client lacking the proposal grant, but the handler returns unknown_operation. Visible-but-unusable is the safe direction; consider hiding it unless the proposal grant is held, to match the documented '(c) proposal grant' visibility claim.

Live-verified GOOD behavior: genesis + client registration; enable-mutations writes a sealed management.record; mutations-enabled makes request_apply visible; read-only client is refused with no journal row (fail-closed at the grant gate); no MCP path reaches config apply. Part of #35, relates to #31.

Metadata

Metadata

Assignees

No one assigned

    Labels

    control-planeChat-based management control plane initiativeimplementationPhase implementation work

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions