# Implementation Plan: Backup Scheduler & Unified Task UI **Branch**: `009-backup-scheduler` | **Date**: 2025-12-30 | **Spec**: [link](spec.md) **Input**: Feature specification from `/specs/009-backup-scheduler/spec.md` **Note**: This template is filled in by the `/speckit.plan` command. See `.specify/templates/commands/plan.md` for the execution workflow. ## Summary Implement a robust backup scheduling system using `APScheduler` and a unified "Tasks" UI in SvelteKit to manage and monitor all background operations (backups, migrations). ## Technical Context **Language/Version**: Python 3.9+, Node.js 18+ **Primary Dependencies**: FastAPI, APScheduler, SQLAlchemy, SvelteKit, Tailwind CSS **Storage**: SQLite (`tasks.db`), JSON (`config.json`) **Testing**: pytest **Target Platform**: Linux server **Project Type**: Web application **Performance Goals**: UI latency < 200ms, Backup trigger < 1s **Constraints**: Minimal resource footprint for background scheduler **Scale/Scope**: ~10 environments, ~1000 historical tasks ## Constitution Check *GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.* - **Library-First**: N/A (Feature integration) - **CLI Interface**: N/A (Web UI focus) - **Test-First**: Mandatory for Scheduler logic and API endpoints. PASS. - **Integration Testing**: Required for Scheduler -> TaskManager interaction. PASS. **Result**: PASS ## Project Structure ### Documentation (this feature) ```text specs/009-backup-scheduler/ ├── 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 backend/ ├── src/ │ ├── api/ │ │ └── routes/ │ │ └── tasks.py # NEW: Task management endpoints │ ├── core/ │ │ ├── scheduler.py # NEW: APScheduler integration │ │ └── task_manager/ # EXISTING: Updates for DB persistence │ ├── models/ │ │ └── task.py # NEW: SQLAlchemy model │ └── services/ └── tests/ frontend/ ├── src/ │ ├── components/ │ │ └── TaskList.svelte # NEW: Task display component │ │ └── TaskLogViewer.svelte # NEW: Detailed log view │ ├── routes/ │ │ └── tasks/ # NEW: Tasks page │ │ └── +page.svelte │ └── types/ ``` **Structure Decision**: Standard FastAPI + SvelteKit structure. ## Complexity Tracking > **Fill ONLY if Constitution Check has violations that must be justified** | Violation | Why Needed | Simpler Alternative Rejected Because | |-----------|------------|-------------------------------------| | | | |