Skip to content

held-mail lifecycle: no-live-pty rows for dead sessions never resolve, and workspace-scoped inbox hides them (global badge 25, every inbox 0) #1723

Description

@amrmelsayed

Problem, in two halves

Field state on a real Tower (found via #1722's repro): 25 held rows with reason no-live-pty, workspace $HOME, newest 2026-09-04 — three weeks old, left by a long-gone architect session run from the home directory. Tower-wide held total is 28.

  1. Held rows from a dead PTY never resolve. A no-live-pty hold means "deliver when the recipient's terminal comes back" — but a recipient that will NEVER come back (session long dead, workspace was a home-dir accident) leaves rows that sit indefinitely: never delivered, never expired, never escalated to a terminal disposition. They pin heldCount/mailboxEscalated on every unscoped surface forever.
  2. Workspace-scoped afx inbox cannot see them. Inbox shows only the current workspace, so mail held under any other path is invisible to the CLI a user would naturally reach for — the global badge says 25, every repo's inbox says 0, and nothing bridges the two.

Fix shape (hypothesis, for the builder to validate)

For (2), cheap and immediate: afx inbox prints a one-line hint when OTHER workspaces hold mail — "N more held in other workspaces (afx inbox --all to list)" — plus an --all (or --workspace <path>) listing. Metadata-only redaction rules unchanged.

For (1), a disposition policy for undeliverable holds, decided deliberately rather than by silence:

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/towerArea: Tower server / agent farm CLI

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions