# Build-context hygiene. docker/ MUST stay (image configs).
.git
.gitignore
.gitattributes
.github

# Secrets & env (never bake into the image)
.env
.env.*
!.env.example

# Deps / build output (reinstalled or rebuilt in the image)
vendor
node_modules
public/build
public/hot
bootstrap/cache/*.php

# Local runtime state
storage/logs/*
storage/framework/cache/data/*
storage/framework/sessions/*
storage/framework/views/*
database/*.sqlite

# Dev tooling / tests / docs (not needed at runtime). NOTE: docs/ is internal-only (export-ignored
# from the public git tree AND named in promote.sh's refuse-to-publish list) — it MUST also be kept
# out of the built image, or `COPY . .` bakes the private docs (with private host/URL refs) into the
# public GHCR image, which the git-tree leak-guard never inspects. Likewise art/ (README assets only).
tests
phpunit.xml
.phpunit.cache
.editorconfig
handoff.md
kickoff-prompt.md
rules.md
CLAUDE.md
README.md
docs
art

# Dev-only release bridge — must NOT bake into the PUBLIC prod image (it carries the private
# upstream references). Also export-ignored from the public repo. Dev keeps it via the bind-mount;
# only the built (prod/public) image is stripped. The /release route is release_controls-gated
# (false in prod), so these classes are never loaded at runtime here.
app/Livewire/Release
app/Services/ReleaseBridge.php
app/Services/ReleasePlanner.php
app/Services/PipelineStatus.php
app/Services/PromotionService.php
resources/views/livewire/release
lang/de/release.php
lang/en/release.php
docker/release
scripts/promote.sh
scripts/promote.test.sh

# Compose files (not needed inside the image)
docker-compose.yml
docker-compose.prod.yml
