- Migrate all 127 non-reserved docs to OKF v0.1 frontmatter (type/description/tags/timestamp); fix 13 YAML issues, 2 duplicate-FM blocks, strip reserved-page FM - Restructure log.md to OKF (## YYYY-MM-DD, newest-first) - Fact-check against scripts/AGENTS.md ground truth: fix 6 false 'Active' banners on retired runbooks, 96->114 GiB GTT, deployment.md vs deploy-plan.py/deploy-remote.sh, Deployment Flow frank-medium=Quadlet, Calibre 9.9.0->9.15.0 + CVE-2025-7404 conflation, Copyparty v1.20.24, RomM 5.3.0 breaking change - Move *arr docs to new FrankBook-Pro/ section (git mv, link-safe) - Write active runbook bodies from ground truth (frank-large, frank-small) - Add 3 research briefs + HTML report: Local TTS and Voice Cloning, AI Job Search and Resume Tools, Most Popular Self-Hosted AI Apps (Jun-Sep 2026) - Add upstream-version rows to ComfyUI/OpenWebUI/Hermes app docs - All 336 tests pass; 136 pages, 0 unresolved wikilinks
57 lines
2.5 KiB
Markdown
57 lines
2.5 KiB
Markdown
---
|
|
type: reference
|
|
description: "This repository tests its configuration at defined seams."
|
|
tags:
|
|
- architecture
|
|
- testing
|
|
timestamp: 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 |
|
|
|------|------|-----------------|
|
|
| Compose validity | `tests/compose_validity.bats` | YAML parses, services have images, no named volumes |
|
|
| 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 compose service has a docs page; index links every page |
|
|
| 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:
|
|
|
|
```bash
|
|
./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:
|
|
|
|
```bash
|
|
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.
|
|
|
|
## See Also
|
|
|
|
- [[Deployment Flow]]
|
|
- [[index]]
|