feat: add Labs reports basket and quiet deliver target

Merged
TE
14d ago
+585-24

Summary

This is the smallest Labs dogfood for Leo's no-wake reports basket, outside Chief code. The existing Feed page gets an off-by-default feed.reportsBasket Labs toggle. When enabled, it projects agent/harness notices into a human-only basket with sender, time, body, and a direct reply box.

The ACPMUX CLI gains:

  • acpmux deliver --target reports:<person> ..., which appends through the existing mailbox send RPC with a target and quiet path.
  • The daemon persists the row through deliver_quiet, so it does not notify session waiters or wake a model.
  • Audience metadata is validated as leo, coordinator, or silent; the target must be reports:<person>.
  • A human reply uses the poster's authenticated session identity and the ordinary acpmux send --no-wait path, so the reply is the explicit wake.

Scope and overlap

This PR intentionally stays out of Chief implementation. It is a separate Labs surface plus ACPMUX mailbox transport. The open lane-report PR #24365 remains prior art for parent-session reports; this basket target does not modify its hub lane-report files.

Validation

  • git diff --check origin/feat-cmux-next...2549c3def56126be7b5f9c088bfb1a62940fb7bb
  • swiftc -parse over the changed Swift files
  • rustfmt --edition 2024 over changed Rust files
  • Rust tests/builds are routed to Blacksmith per cmux policy; no native local build was run.

Before/after capture: the before state is the existing Feed Inbox; the after state is the Reports basket layout shown when feed.reportsBasket is enabled in Labs. A fleet-backed runtime capture is required before merge.

Agent session: Air-Blue


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


Summary by cubic

Adds a Labs reports basket and quiet mailbox delivery so agent and harness reports land in a human view without waking the sending model.

acpmux deliver --target reports:<person> appends a durable report row without notifying session waiters or injecting a model turn. The CLI attaches to the bound agent session with visible: false first, so attaching neither marks the agent seen nor publishes a visible status event, and the daemon accepts that bound sender without an explicit receipt. Text comes from args or stdin; --audience validates as leo, coordinator, or silent.

New Features

  • Adds an off-by-default feed.reportsBasket toggle that shows agent/harness notices with sender, time, body, and a direct reply box.
  • The app reads the reports:<person> mailbox over the daemon socket and projects quiet rows into the basket as durable reports.
  • Basket replies are addressed to the sender's session via the poster's authenticated identity on the normal send --no-wait path, making the reply the explicit wake.
  • Mail send accepts either a session recipient or a reports: target; only the reports path can omit a session receipt on a local bound connection.
  • Stays out of Chief and parent-session lane-report code.