rank 7 tail. dankserver/compose.yaml (a parallel inventory whose mounts had diverged from the quadlets) and its .env.example live in dankserver/.AGENTTRASH/20261013-compose-retire/; the retired ik chat template joined scripts/.AGENTTRASH/. No target has a compose file now: - service-map drops the compose selection rule, compose file claim, and check_compose (the check list is schema/units/ownership/config/drift); - deploy-remote's compose fallback is a loud failure, not a WARN-and- nothing for dankserver; - compose_validity.bats goes to tests/.AGENTTRASH (it was sweeping only the trash file); env_consistency sheds its two compose sweeps; - docs_completeness's compose sweep skips .AGENTTRASH so retired services cannot resurrect, and a revived compose stays covered; - Testing Policy drops the Compose validity row.
2.4 KiB
type, description, tags, timestamp
| type | description | tags | timestamp | ||
|---|---|---|---|---|---|
| reference | This repository tests its configuration at defined seams. |
|
2026-09-01 |
Testing Policy
This repository tests its configuration at defined seams. The tests run with bats; run them with ./tests/run.sh before every push.
Seams Under Test
| Seam | File | What it asserts |
|---|---|---|
| Env consistency | tests/env_consistency.bats |
every ${VAR} is defined in .env.example; no real secrets; the live gitea password never appears |
| Caddyfile validity | tests/caddyfile.bats |
per-host Caddyfile, .local convention, balanced braces, basic auth present |
| Docs completeness | tests/docs_completeness.bats |
every service has a docs page; index links every page; no unresolved vault links |
| Script syntax | tests/scripts_syntax.bats |
bash -n clean, executable bits, shellcheck when available |
| Deployment flow | tests/deployment_flow.bats, tests/deployment_scoping.bats |
scoped dispatcher exists, targets are known, service plans isolate inference, Caddy ownership is guarded, and SSH reachability is checked (skips offline) |
| Quadlet units | tests/*quadlet*.bats |
every unit is boot-persistent, self-healing, repo-provenanced, secret-free |
| E2E (browser) | tests/e2e/ + tests/e2e_scaffold.bats |
Playwright drives the live guard chain; the bats seam asserts structure and credential hygiene. See E2E Suite |
Focused pre-commit testing
For normal commits, use the focused wrapper:
./scripts/test-changed.sh
It reads staged paths with git diff --cached and runs only the mapped Bats
files. The tracked .githooks/pre-commit hook invokes this wrapper. Enable the
repository hook path once per checkout:
git config core.hooksPath .githooks
Use --list to inspect the selection without running tests, or --paths FILE ... to preview a mapping. Shared test infrastructure and unmapped paths fail
closed rather than silently skipping coverage. Run the full suite with
./tests/run.sh when changing shared test helpers, the test runner, or when
focused coverage is not sufficient.
Red-Green
Tests are written first. A failing test means the seam is not satisfied; the config change that makes it pass is the only acceptable fix. No --no-verify, no deleting tests without approval.