Files
gallery-organizer-web/specs/001-archive-curator/plan.md
Danilo Reyes 070a3633d8 init
2026-02-07 06:01:29 -06:00

3.8 KiB

Implementation Plan: Archive Curator

Branch: 001-archive-curator | Date: 2026-02-07 | Spec: /home/jawz/Development/gallery-organizer-web/specs/001-archive-curator/spec.md Input: Feature specification from /specs/001-archive-curator/spec.md

Note: This template is filled in by the /speckit.plan command. See .specify/templates/commands/plan.md for the execution workflow.

Summary

Build a safe, web-based curator for a local media archive where each subdirectory represents a scraped user. The system provides two core workflows: untagged directory collage review for keep/delete decisions (with list-file preview/removal) and whitelisted media triage for single-file deletion with strict directory protection. All destructive actions are previewed, confirmed, serialized, and audited. Delivery is phased from a read-only viewer through deletion workflows, hardening, and NixOS module maturity.

Technical Context

Language/Version: Rust (stable toolchain)
Primary Dependencies: Web API framework (Axum), UI framework (SvelteKit), OpenAPI tooling
Storage: Local durable state store (SQLite) + append-only audit log file
Testing: cargo test (unit/integration), API tests (HTTP), NixOS VM tests
Target Platform: NixOS/Linux (local network, single-operator)
Project Type: Web application (backend + frontend)
Performance Goals: Visual review stays responsive; collage load and next-item advance feel immediate for local storage
Constraints: Safety-first, offline/local-network only, strict root boundaries, read-only mode support, serialized destructive ops
Scale/Scope: Large local archives with many user directories and large media files

Constitution Check

GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.

  • Whitelisted directories remain protected from any directory-level delete
  • All destructive actions include dry-run preview, explicit confirmation, and audit log
  • Read-only mode disables all mutations while allowing browsing
  • Destructive operations are single-writer and never concurrent
  • Operations are bounded to configured roots; destructive ops never follow symlinks
  • Default deletion is two-stage (trash/staging); hard delete is explicit + confirmed
  • List-file edits are previewed, optional, atomic; exact-match removal by default
  • UI surfaces directory state and recent audit activity for verification

Gate Status: PASS (requirements and plan explicitly enforce all constraints) Post-Design Re-check: PASS (data model and contracts preserve all safety gates)

Project Structure

Documentation (this feature)

specs/001-archive-curator/
├── 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)

backend/
├── src/
│   ├── models/
│   ├── services/
│   └── api/
└── tests/

frontend/
├── src/
│   ├── components/
│   ├── pages/
│   └── services/
└── tests/

Structure Decision: Web application with separate backend and frontend to enable a Rust API service and a touch-focused web UI while keeping filesystem mutations confined to the operations layer.

Complexity Tracking

Fill ONLY if Constitution Check has violations that must be justified

Violation Why Needed Simpler Alternative Rejected Because
N/A N/A N/A