# Implementation Plan: Feature 005 - Bulk Operations **Branch**: `feat/005-bulk-operations` | **Date**: 2025-12-25 | **Spec**: [spec.md](./spec.md) **Input**: Feature specification from `/specs/005-bulk-operations/spec.md` **Note**: This template is filled in by the `/speckit.plan` command. See `.specify/templates/commands/plan.md` for the execution workflow. ## Summary Add consistent bulk actions (delete/export/restore/prune/sync where applicable) across TenantPilot's primary admin resources (Policies, Policy Versions, Backup Sets, Restore Runs). Bulk operations create a tracking record, enforce permissions, support type-to-confirm for large destructive changes, and run asynchronously via queue for larger selections with progress tracking. ## Technical Context **Language/Version**: PHP 8.4.15 **Primary Dependencies**: Laravel 12, Filament v4, Livewire v3 **Storage**: PostgreSQL (app), SQLite in-memory (tests) **Testing**: Pest v4 + PHPUnit 12 **Target Platform**: Containerized Linux (Sail/Dokploy) **Project Type**: Web application (Laravel + Filament admin panel) **Performance Goals**: Handle bulk actions up to hundreds of items with predictable runtime; keep UI responsive via queued processing for larger selections **Constraints**: Tenant isolation; least privilege; safe destructive actions (confirmation + auditability); avoid long locks/timeouts by chunking **Scale/Scope**: Admin-focused operations, moderate concurrency, emphasis on correctness/auditability over throughput ## Constitution Check *GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.* The constitution file at `.specify/memory/constitution.md` is a placeholder template (no concrete principles/gates are defined). For this feature, the effective gates follow repository agent guidelines in `Agents.md`: - Spec artifacts exist and are consistent: PASS (`spec.md`, `plan.md`, `tasks.md`, `research.md`, `data-model.md`, `quickstart.md`) - Tests cover changes: PASS (Pest suite; full test run exits 0) - Safe admin operations: PASS (explicit confirmations, type-to-confirm for large destructive ops, audit logging) Re-check after Phase 1: PASS (no new unknowns introduced). ## Project Structure ### Documentation (this feature) ```text specs/005-bulk-operations/ ├── plan.md # This file (/speckit.plan command output) ├── research.md # Phase 0 output (/speckit.plan command) ├── data-model.md # Phase 1 output (/speckit.plan command) ├── quickstart.md # Phase 1 output (/speckit.plan command) ├── contracts/ # Phase 1 output (/speckit.plan command) └── tasks.md # Phase 2 output (/speckit.tasks command - NOT created by /speckit.plan) ``` ### Source Code (repository root) ```text app/ ├── Filament/ │ └── Resources/ ├── Jobs/ ├── Models/ └── Services/ database/ ├── factories/ └── migrations/ routes/ ├── web.php └── console.php resources/ └── views/ tests/ ├── Feature/ └── Unit/ ``` **Structure Decision**: Web application (Laravel + Filament admin panel) using existing repository layout. ## Complexity Tracking No constitution violations requiring justification.