refactor(commands): share the move and copy flow across recording types
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.goholdsrecordingFiling, which is data plus one read-back hook, andrunFiling. It also holds the URL and project checks and the backoff wait, generalised from the card versions.- Cards now build a
recordingFilingand callrunFiling. 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/cipasses. 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,todolistsandtodolistgroupsmove and copy across projects via--to-project/--to-list/--to-todoset;messages,files,cards column,schedule,checkins questionandforwardsget move and copy into a destination project's tool, andtools move --to-projectfiles a whole dock tool.filings showreads 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/reordernow take several IDs.- A container flag a move or copy would ignore, or that names another project, is refused before anything is sent.