refact(docs): compose-era sweeps retire with the last compose file

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.
This commit is contained in:
Frank committed 2026-10-13 22:35:28 -07:00
1 parent 5ae6b7b928
commit 5976ad0550
3 files changed
+7 -27

No files matched your search

+3 -1
View File
@@ -1,5 +1,7 @@
#!/usr/bin/env bats
# Seam: documentation completeness.
# (compose era retired 2026-10-13; the sweep below now skips trash so a
# revived compose file stays covered without resurrecting retired services)
# Every service defined in a compose.yaml must have a matching documentation
# page in serverAppConfigs-docs/ and must be reachable from the index. This is the "docs first"
# contract of this repo: no service ships without documentation.
@@ -18,7 +20,7 @@ load helpers
return 1
fi
done < <(services_in "$f")
done < <(find "$REPO_ROOT" -name 'compose.yaml' -not -path '*/.git/*' | sort)
done < <(find "$REPO_ROOT" -name 'compose.yaml' -not -path '*/.git/*' -not -path '*/.AGENTTRASH/*' | sort)
}
@test "docs index links every docs page" {
+3 -24
View File
@@ -1,33 +1,12 @@
#!/usr/bin/env bats
# Seam: environment variable consistency and secret hygiene.
# Every ${VAR} referenced in a compose.yaml or Caddyfile must be defined in the
# matching .env.example. .env.example files must contain only placeholders, and
# Every ${VAR} referenced in a Caddyfile must be defined in the matching
# .env.example. .env.example files must contain only placeholders, and
# the live gitea database password must never appear in tracked files.
# (The compose.yaml sweeps retired with the last compose file on 2026-10-13.)
load helpers
@test "every compose.yaml has a sibling .env.example" {
while IFS= read -r f; do
local envfile
envfile="$(dirname "$f")/.env.example"
[ -f "$envfile" ] || { echo "missing $envfile for $f"; return 1; }
done < <(find "$REPO_ROOT" -name 'compose.yaml' -not -path '*/.git/*' | sort)
}
@test "every \${VAR} in compose.yaml is defined in the sibling .env.example" {
while IFS= read -r f; do
local envfile
envfile="$(dirname "$f")/.env.example"
while IFS= read -r var; do
[ -z "$var" ] && continue
if ! env_vars_defined "$envfile" | grep -qx "$var"; then
echo "$f references \${$var} but $envfile does not define it"
return 1
fi
done < <(env_vars_in "$f")
done < <(find "$REPO_ROOT" -name 'compose.yaml' -not -path '*/.git/*' | sort)
}
@test ".env.example files contain only placeholder values" {
while IFS= read -r f; do
has_placeholder_secret "$f"