Chief: never ask for approvals; another person's turn is refused at once

Merged
LA
15d ago
+595-2063

What

Lawrence (2026-10-20): "remove all chief approvals. chief should never have to ask for approvals". He was blocked: his NIGHTLY Chief (df694bd, which already has #22640) still asked "Reply allow or deny" from his phone.

Root cause of the asks he saw: turn 7193 was a resume after a host restart. Resume and item records from older builds had no provenance and failed closed (requires_approval default true), and a resume carries the flag forward, so one old record gated every turn after each restart (every NIGHTLY update restarts the host). remote.autoApprove: true in his settings could not lift it.

  • The owner's turns (this Mac, a paired device, Home) always run with the configured policy. remote.ask, home.ask and remote.autoApprove are removed; old settings files are ignored and the keys dropped at the next write.
  • A turn that carries another person's text still runs with policy ask, but the host refuses every local effect at once: no approval card, no question, no allow/deny chat answers. Children and section 9 subagents spawned under it keep the ask floor and are refused the same way. (Lawrence chose "refuse, never ask" for other people.)
  • The other-person flag is stored as other_person; old requires_approval keys are ignored, so the persistent taint is gone.
  • Review fix (existed before this PR): a kept turn session is reused only by a turn of the same policy (keep_sig includes the policy), so a teammate turn cannot reuse an approve-all session and an owner turn never reuses an ask one.
  • The owner's own subagent failures/reports no longer gate the next turn; a subagent that fails while the spawn floor is up keeps ask.

Takes back #22640: Lawrence removed Chief approvals entirely (this PR removes the opt-in gates and the approval card that #22640 added).

Supersedes the approach of #22639 (approval card in Home): with this change the Chief never posts an approval.

Risk

  • Accepted (documented in README "Remote-origin messages"): a stolen paired phone can act until revoked; Home text and the owner's own subagent reports reach turns with the owner's policy; a pending teammate turn recorded before this upgrade resumes as the owner's once.
  • Kept: another person's text never reaches an approve-all session (steer guard unchanged; kept-session reuse now checks policy).

Verification

rbx (cmux-rust-builder-1, lane chief-no-approvals), crate optchat-chief:

  • cargo fmt --check: pass. cargo clippy --locked --all-targets -- -D warnings: pass.
  • cargo test --locked --no-fail-fast: approval_gates (rewritten, 6 behavior tests at the brain boundary), corpus, crash (fixed by this PR), remote_wake, owner_stop and the rest pass. Two failures are base reds, identical on base 828d367273f9 (lane chief-base-check): daemon_workspaces::a_subagent_workspace_is_located_by_its_public_id_and_session and turn_seal_binding::a_subagent_cannot_reach_owner_controls_on_the_shared_socket.

Observed / Not run

  • Observed: the trace of Lawrence's live Chief (turn 7193, a resume) gated a Bash call at 18:16 with #22640 installed.
  • Not run: a tagged app dogfood from a paired phone; the shared cmux-chief policy crate and the TypeScript brain conformance still define remote_auto_approve (unchanged, no longer read by optchat-chief).

Review: independent subagent correctness review; findings and resolutions in a PR comment.

Changelog

Changed: Chief never asks for approval; another person's requests in a shared Chief are refused instead of asked.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Removes Chief approvals entirely: the Chief never asks a person before it acts, and a turn that carries another person's text is refused at once instead of showing an approval card.

  • Removes remote.ask, home.ask, and remote.autoApprove; old settings files are ignored and the keys are dropped.
  • A turn with another person's text still runs with policy ask, but the host refuses every local effect immediately with no card, no question, and no allow/deny answers.
  • Stores other-person turns as other_person; old requires_approval keys are ignored, so a resumed turn no longer gates every turn after a restart.
  • A kept turn session is reused only by a turn of the same policy.
  • The owner's own subagent failures and reports no longer gate the next turn.

Behavior

  • A stolen paired phone can act until revoked; Home text and the owner's subagent reports run with the owner's policy.
  • Another person's text never reaches an approve-all session; a pending teammate turn recorded before this upgrade resumes as the owner's once.
  • Takes back #22640: the opt-in gates and approval card it added are removed.