refactor(commands): share the move and copy flow across recording types

Merged
RO
1d ago
+7971-795

Why

The CLI is getting web-parity Move and Copy for every recording type the web can move or copy. #973 added it for cards, but its start, wait and recovery logic is card-specific. This pulls that logic into one shared helper, so to-dos, lists, messages, Docs & Files, columns, schedule entries, check-in questions, email forwards and tools all use one code path instead of copies of it.

What changed

  • internal/commands/filing.go holds recordingFiling, which is data plus one read-back hook, and runFiling. It also holds the URL and project checks and the backoff wait, generalised from the card versions.
  • Cards now build a recordingFiling and call runFiling. The card-only helpers are gone, with no aliases left behind.

Scope

No user-visible change. The next PRs build on this one.

Verification

  • bin/ci passes. The card tests are unchanged apart from two renames, and new tests cover a dock-tool copy (destination_project_id) and a failed read-back.
  • The live card harness against a local bc3 gives the same results as #973.
  • I compared 14 card commands on #973 and on this branch: successes, the wormhole, and the error paths. With ids and timings set aside, their output and exit codes matched.
  • An independent GPT-6.1-sol review found nothing to fix.

Summary by cubic

Refactors every recording type's move and copy onto one shared filing helper and lands web-parity Move and Copy for to-dos, to-do lists and groups, messages, Docs & Files items, card columns, schedule entries, check-in questions, email forwards, and dock tools. Cards keep their flow; moves and copies wait on the background filing and print the new recording with its source id.

New Features

  • todos, todolists and todolistgroups move and copy across projects via --to-project/--to-list/--to-todoset; messages, files, cards column, schedule, checkins question and forwards get move and copy into a destination project's tool, and tools move --to-project files a whole dock tool.
  • filings show reads a still-running or failed move or copy by its filing id.
  • Show commands for moved records follow up on the id read back and no longer require a project.

Behavior changes

  • todos position/move/reorder now take several IDs.
  • A container flag a move or copy would ignore, or that names another project, is refused before anything is sent.