Skip to content

fix(approvals): add native confirmation handoff and scope receipts - #18

Merged
dshipper merged 4 commits into
mainfrom
fix/approval-recipient-boundary
Aug 31, 2026
Merged

fix(approvals): add native confirmation handoff and scope receipts#18
dshipper merged 4 commits into
mainfrom
fix/approval-recipient-boundary

Conversation

@dshipper

@dshipper dshipper commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator

Summary

Makes Tend's approval boundary accurate and gives supported native host confirmations a real, explicit user-response path in the feed.

Recipient summaries now use the selected action and the leading outbound To/Cc/Bcc envelope, not email addresses in quoted history or body text. Tend receipts identify their local scope and no longer claim to override connector authorization. A terminal denial remains blocked instead of triggering retries with reworded receipts.

Native Confirmations

During a Tend-owned Codex drain, a native choice request appears above the feed only when the host provides an explicit tool-item ID matching the active thread and turn. The panel shows the exact tool arguments and host questions, selects nothing by default, and sends only the human's new answer on that same request.

  • Binds the native request to the unchanged, verified Tend work snapshot.
  • Invalidates on changed card, artifact, mailbox, tool arguments, work, expiry, host resolution, turn completion, or transport failure.
  • Suppresses duplicate responses and never persists an answer for replay.
  • Inherits host approval policy; does not auto-approve, relax policy, enable auto-drain, or retry blocked work.
  • Correctly declines uncorrelated MCP elicitation and unsupported requests using their protocol response shapes.

This is bounded native transport support, not proof of one-click Gmail acceptance. A terminal connector denial without a pending native request cannot be reopened by this UI. Real-host Gmail acceptance remains unverified; no real messages were sent during validation. The remaining host contract is documented in docs/approval-boundary.md.

Verification

  • pnpm check: 251 tests passed; one local Supabase integration test skipped.
  • 31 native protocol, broker, and UI tests cover correlation, stale snapshots, cancellation, duplicates, transport failure, route protections, and explicit choices.
  • pnpm build passed.
  • pnpm audit --audit-level high passed after targeted PostCSS and Nano ID patch updates; lower-severity findings remain.
  • Synthetic browser test passed at desktop and 390px phone widths: exact request inspectable, no horizontal overflow, explicit response delivered once, feed preserved.
  • GitHub CI passed: build/test/smoke, Supabase migration/bridge, and native iPhone unit/UI tests.

All tests and visual checks use temporary state. Existing live feeds and connector state are not modified by the PR.

@dshipper dshipper changed the title fix(approvals): report outbound recipients and scope click receipts fix(approvals): add native confirmation handoff and scope receipts Aug 31, 2026
@dshipper
dshipper merged commit ff0c066 into main Aug 31, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant