Add CLI and TUI posting moves

Merged
RO
3mo ago
+698-33

Summary

  • add hey move <posting-id>... --to <box> with bulk moves and destination lookup by name, kind, or ID
  • add an m destination picker to the TUI while preserving the existing one-key box actions
  • exclude the current box and Bubble Up from the picker, reject Bubble Up in the CLI, and avoid same-box TUI requests that could change seen state
  • document posting IDs, destination semantics, and the new command across help, README, API coverage, and the embedded HEY skill

Behavior

Supported destinations are Imbox, The Feed, Set Aside, Reply Later, and Paper Trail. Moving to boxes other than Imbox marks the posting seen, which the TUI explains before confirmation. Bubble Up continues to use HEY's scheduled flow.

Validation

  • make check
  • make race-test
  • smoke test package compilation
  • local build and command help
  • authenticated production validation:
    • moved and restored one posting through the CLI
    • moved and restored two postings in one bulk CLI request
    • moved a posting from Imbox to Paper Trail through the TUI and restored it
    • confirmed destination box membership after every move and restore
    • confirmed Bubble Up is rejected before a move request

All production-validation postings were restored to Imbox.


Summary by cubic

Adds posting moves to both the CLI and TUI so users can move messages between HEY boxes without the web app. Moving to non‑Imbox marks messages seen; Bubble Up is excluded and must use HEY’s scheduled flow.

  • CLI: hey move <posting-id>... --to <box> supports bulk IDs and resolves destinations by name, kind, or ID; rejects Bubble Up; prints a concise summary; adds help and breadcrumbs.
  • TUI: press m to open a destination picker; excludes the current box and Bubble Up; Enter moves, Esc cancels; explains that non‑Imbox moves mark the message seen; existing one‑key moves remain and skip no‑op same‑box requests.
  • API/docs/tests: uses /postings/moves.json via SDK Postings().Move; updates .surface, README, help text, skills/hey/SKILL.md, and API-COVERAGE.md; adds unit and smoke tests for success and error cases.