## Summary
Replace the existing source-context integration lane with backend runtime black-box integration checks that run against started deployable containers.
This change wires deployable backend image references (both commit tag and immutable digest) from the build workflow into the tests workflow, then validates runtime behavior over network endpoints.
## Why
Integration confidence should come from testing running service artifacts, not only source-mounted or in-process execution.
## What Changed
- Build workflow now:
- Publishes deployable backend image tag reference and digest reference
- Exposes both as job outputs
- Passes both references into CICD Tests dispatch inputs
- CICD Tests workflow now:
- Accepts deployable backend tag and digest inputs
- Propagates these through setup outputs
- Replaces previous integration lane behavior with runtime black-box execution:
- Starts isolated Docker network
- Starts Postgres container
- Starts backend container from digest-pinned deployable image
- Enforces tag-to-digest consistency before running checks
- Runs endpoint checks against live container:
- GET /
- GET /compatibility
- GET /health
- Captures backend/db logs and container state on failure
- Cleans up containers and network via trap
- Documentation updated:
- Runtime contract enforcement section now includes runtime black-box integration checks
- CI success summary now reflects runtime integration lane behavior
## Scope
Included:
- Backend runtime black-box integration replacement for the existing integration lane
- Digest + tag identity enforcement
- Failure diagnostics for triage
Out of scope:
- Frontend runtime smoke checks
- E2E lane redesign
## Acceptance Criteria Mapping
- Integration tests execute against runtime container endpoints: ✅
- Integration lane consumes built image references (not source-mounted execution): ✅
- Failures surface service logs and test logs for triage: ✅
## Verification
- Workflow files pass local validation checks
- Pre-commit hooks pass on committed changes
- Branch pushed and ready for PR review
## Related
- Issue: #61
- Dependency context: #66
Co-authored-by: copilotcoder <copilotcoder@darkhelm.org>
Reviewed-on: #72
Plex Playlist Project
A full-stack application for managing Plex playlists with a FastAPI backend and Vue.js frontend.
Architecture
- Backend: Python 3.14 + FastAPI + uv + ruff
- Frontend: TypeScript + Vue.js + Vite
- Database: PostgreSQL 16
- Containerization: Docker + Docker Compose
Deployable Runtime Contract
Deployable image requirements are defined in:
These documents define backend/frontend runtime boundaries, startup and health behavior expectations, environment contracts, and disallowed non-runtime tooling classes in deployable artifacts.
Development Setup
Prerequisites
- Docker and Docker Compose
- Git
- pre-commit (for development)
Code Quality Tools
This project uses comprehensive linting and formatting:
Backend (Python):
ruff- Fast Python linter and formatterpyright- Type checkingpydoclint- Docstring linting (Google style)
Frontend (TypeScript/Vue):
eslint- Linting with Vue and TypeScript supportprettier- Code formattingvue-tsc- Vue TypeScript checkingeslint-plugin-tsdoc- TSDoc documentation linting
Task Runner:
poethepoet- Unified task runner for development workflows
General:
pre-commit- Git hooks for automated quality checks- TOML formatting and validation
Unified Development with Poe
This project uses Poe the Poet for streamlined development:
# Complete setup (installs deps, starts dev environment)
poe setup
# Code quality (format, lint, type-check all code)
poe ci-quick
# Run all tests
poe test-all
# See all available tasks
poe --help
Manual Setup (Alternative)
pip install pre-commit
pre-commit install
Quick Start
Clone the repository, then choose one of these startup paths.
Unified Development
# Complete setup and start development environment
poe setup
# Or manually:
cd backend
pip install -e .
poe dev-env-start
Traditional Setup
# Backend development
cd backend
pip install -e .
# Frontend development
cd frontend
npm install
npm run dev
Docker Development
# Using Poe (recommended)
poe docker-dev-up
# Or directly
docker compose -f compose.dev.yml up --build
Production Build
poe docker-prod-up
# Or: docker compose up --build
Running in Production Mode
docker compose up --build -d
This will start:
- PostgreSQL database on port 5432
- FastAPI backend on port 8000
- Vue.js frontend on port 80
Project Structure
plex-playlist/
├── backend/ # FastAPI backend
├── frontend/ # Vue.js frontend
│ └── nginx.conf # Nginx configuration
├── Dockerfile.backend # Backend Docker image
├── Dockerfile.frontend # Frontend Docker image
├── compose.yml # Production Docker Compose
├── compose.dev.yml # Development Docker Compose override
└── README.md
CI Operations
For Gitea Actions runner image mirror maintenance, use:
source scripts/gitea-actions/repair_runner_mirror.xshsource scripts/gitea-actions/check_runner_images.xshsource scripts/gitea-actions/collect_runner_diagnostics.xsh [since] [trace_id]
For full troubleshooting context, see docs/GITEA_ACTIONS_TROUBLESHOOTING.md.
Environment Variables
Backend
DATABASE_URL: PostgreSQL connection stringBACKEND_REQUIRED_PYTHON: Runtime policy baseline (3.14default)ENVIRONMENT:developmentorproductionRELOAD: Enable uvicorn auto-reload (development only)
Frontend
- No required runtime environment variables for production nginx serving
Database
The PostgreSQL database is configured with:
- Database:
plex_playlist - User:
plex_user - Password:
plex_password
Development Workflow
- Make changes to your code
- The development containers will automatically reload:
- Backend: uvicorn with
--reloadflag - Frontend: Vite dev server with hot module replacement
- Backend: uvicorn with
API Documentation
When running, the FastAPI automatic documentation is available at:
- Development: http://localhost:8001/docs
- Production: http://localhost:8000/docs
Manual Setup (if not using Docker)
Backend Setup (FastAPI, Python 3.14, uv, ruff, pyright)
1. Create and activate the uv virtual environment
cd backend
uv venv .venv
source .venv/bin/activate
2. Install dependencies
uv sync --all-groups
3. Install dev tools
uv run poe format
uv run poe lint
uv run poe test
4. Project structure
src/backend/- FastAPI application codetests/- Test suitepyrightconfig.json- Pyright type checking configpyproject.toml- Ruff, pytest, and task configuration
5. Run the development server
uv run uvicorn backend.main:app --reload --app-dir src
Frontend Setup (Vue 3, Vite, TypeScript)
1. Create the project
cd frontend
npm create vite@latest . -- --template vue-ts
npm install
2. Recommended: Enable strictest TypeScript settings
Edit tsconfig.json and set:
{
"compilerOptions": {
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictBindCallApply": true,
"noImplicitThis": true,
"alwaysStrict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true
}
}
3. Run the frontend
npm run dev
Documentation
Development & Workflow
- Development Environment Setup
- Comprehensive guide for setting up your development environment, git workflow, pre-commit hooks, manual tool usage, and CI/CD pipeline understanding
- Poe Task Reference
- Complete guide to unified development tasks and workflows using Poe the Poet
- Deployable Runtime Contract
- Canonical backend/frontend deployable runtime image requirements and exclusions
- ADR003: Deployable Runtime Image Contract Boundaries
- Architectural decision that locks deployable image boundary policy
Architecture & CI/CD
- CI/CD Multi-stage Build
- Docker multi-stage build strategy, architecture decisions, and performance optimizations
- CI/CD Troubleshooting Guide
- Comprehensive troubleshooting, optimization decisions, and performance monitoring for Docker builds and E2E testing
- CI/CD Success Summary
- Complete validation results and performance metrics for the optimized pipeline
Dependency Management & Automation
- Renovate Bot Setup
- Automated dependency updates with Renovate for Python, Node.js, and Docker dependencies
Operations & Troubleshooting
- Gitea Actions Troubleshooting
- Solutions for CI/CD pipeline issues, including the critical "jobs waiting forever" problem
- Secure Docker CI/CD
- Security considerations and setup for Docker-based CI/CD pipelines
See the backend/ and frontend/ folders for more details.