Commit a533d44
feat(cues): add bulk-delete subcommand (cueapi #650 parity)
Adds `cueapi bulk-delete <id1> <id2> ...` — variadic args, max 100 IDs
per call. Wraps POST /v1/cues/bulk-delete (cueapi #650, "feat(cues): bulk
delete + stale-cue discovery filters").
Behavior:
- Per-ID atomic, NOT batch atomic — IDs that don't exist OR aren't
owned by the caller land in the response's `skipped` array (silent
skip on miss; no info leak about other tenants' cues).
- Cascade FK handles executions + dispatch_outbox cleanup server-side.
- Server requires X-Confirm-Destructive: true header (sent
automatically after the local --yes confirmation).
- --yes / -y skips the confirmation prompt for CI usage.
- Client-side cap of 100 IDs prevents server roundtrip on obvious
overruns; over-cap calls print error + early-return.
Output:
✓ N deleted
· M skipped (not found or not owned)
Truncates lists at 10 entries with "... and X more" tail for readability
on large bulk operations.
3 new tests:
- test_bulk_delete_help (pins --yes flag + 100 cap callout)
- test_bulk_delete_requires_at_least_one_id (variadic min)
- test_bulk_delete_rejects_more_than_100_ids_pre_request (client cap pin)
186/186 tests pass.
Source: drift audit handoff/cueapi-package-drift-2026-05-06; Backlog row
was filed as "messages bulk-delete" but the actual cueapi #650 is CUES
bulk-delete (mis-recall caught at port time). cueapi-main confirmed
cueapi-cli lane mine via [CC-CUEAPI-CLI-LANE-OPTION-B-YOURS].
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent 582815a commit a533d44
2 files changed
Lines changed: 93 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
447 | 447 | | |
448 | 448 | | |
449 | 449 | | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
450 | 518 | | |
451 | 519 | | |
452 | 520 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2746 | 2746 | | |
2747 | 2747 | | |
2748 | 2748 | | |
| 2749 | + | |
| 2750 | + | |
| 2751 | + | |
| 2752 | + | |
| 2753 | + | |
| 2754 | + | |
| 2755 | + | |
| 2756 | + | |
| 2757 | + | |
| 2758 | + | |
| 2759 | + | |
| 2760 | + | |
| 2761 | + | |
| 2762 | + | |
| 2763 | + | |
| 2764 | + | |
| 2765 | + | |
| 2766 | + | |
| 2767 | + | |
| 2768 | + | |
| 2769 | + | |
| 2770 | + | |
| 2771 | + | |
| 2772 | + | |
| 2773 | + | |
0 commit comments