Some checks failed
continuous-integration/drone/push Build is failing
Two changes the operator asked for after noticing custom-html-tiny PR #6 has no backup/restore or functional coverage: 1) Intentional-vs-accidental N/A. A recipe can now declare recipe_meta.EXPECTED_NA = {rung: reason} to mark a tier as deliberately not applicable (e.g. a stateless static server has no backup surface). N/A still caps the level — the harness never claims a rung it did not verify — but the run is now annotated 'intentional · <reason>' instead of being indistinguishable from a forgotten test. An *undeclared* N/A on a gap-sensitive rung (backup_restore, functional) is surfaced as a 'possible coverage gap', and a stale EXPECTED_NA (declared N/A but actually exercised) is surfaced too. All non-blocking (R7): results.json gains level_cap_intent + an block, the summary card shows the clause, and the CI log prints the gap/stale warnings. (results.classify_na/cap_intent are pure + unit-tested; level.py untouched.) custom-html-tiny declares backup_restore intentionally N/A. 2) custom-html-tiny functional test: writes a random file into the served content volume (via the volume mountpoint, like install_steps.sh, since the SWS image is shell-less), asserts exact-byte round-trip + a real 404 on a missing path — proving the static-web-server actually serves the volume, not a 200-everything fallback. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
18 lines
1.2 KiB
Python
18 lines
1.2 KiB
Python
# Per-recipe config for custom-html-tiny (a fast static-web-server). Shorter timeouts than the
|
|
# defaults: it converges + serves in seconds, so the generic install's fail-without-hook case
|
|
# (DG5) is detected quickly instead of waiting the default 300s HTTP timeout.
|
|
DEPLOY_TIMEOUT = 120
|
|
HTTP_TIMEOUT = 90
|
|
|
|
# Intentionally-N/A tiers (reviewed opt-out, NOT a coverage gap). custom-html-tiny is a stateless
|
|
# static-web-server: it serves an ephemeral `content` volume that the harness seeds at deploy time
|
|
# (install_steps.sh) and holds no persistent or user data, so there is nothing to back up or restore.
|
|
# The recipe therefore declares no `backupbot.backup` label and the L3 backup/restore rung is N/A.
|
|
# Declaring it here marks that N/A as deliberate, so the run is annotated "intentional" instead of
|
|
# being flagged as a possible missing-coverage gap. (N/A still caps the level — the harness never
|
|
# claims a rung it did not verify; this only explains *why* the cap is expected.)
|
|
EXPECTED_NA = {
|
|
"backup_restore": "stateless static file server: serves an ephemeral content volume seeded at "
|
|
"deploy, with no persistent/user data to back up or restore (no backupbot.backup label)",
|
|
}
|