feat: add bulk move-to-draft action (Stage 7A)
Add bulk status-change capability to the product publishing workspace,
starting with 'Move to Draft' as the first controlled bulk action.
Controller:
- Add BulkActionResult value class (successCount, failureCount,
targetStatus, failedProductNames, totalCount, allSucceeded)
- Add bulkUpdateStatus() method: processes selected products
sequentially with per-row updating state, single reload after
completion, auto-clears multi-selection
- Add lastBulkActionResult / consumeBulkActionResult() pattern
Presentation:
- Add showBulkActionSnackBar() with three variants: all-success
(green), total-failure (red), partial-failure (amber with up to
3 failed product names)
- Update _MultiSelectBar with 'Move to Draft' OutlinedButton.icon
and onBulkMoveToDraft callback
- Add _confirmBulkMoveToDraft() confirmation dialog
- Wire bulk result listener into _onControllerChanged
Tests:
- 11 new bulkUpdateStatus tests: no-op on empty selection, moves
all to draft, sets result on all-success, clears multi-selection,
clears updatingIds, handles mixed statuses, consume clears result,
starts null, preserves preview selection, persists filter/sort,
disposal safety
- Total: 311/311 feature_wordpress, 24/24 kell_web
Tracking:
- Update master_development_brief.md: Stage 7A marked complete,
entry criteria marked as all met, test count updated to 311
- Update build_execution_tracker.md: new slice entry added