Compare commits

...

9 Commits

3 changed files with 55 additions and 52 deletions
+18 -44
View File
@@ -1,65 +1,39 @@
# Task 06G4FT0MB733H2ZCZ237WFHFD8
# Task 06G4SWEVP71FYYKAV5FV0ZK5ZG
Give the healthcheck a self-test and a machine-readable mode
Give the healthcheck a --summary flag
- Project: test-e2e
- Source: gitea:test-e2e/10
- Source: burnin/run16-rotation
- Priority: 0
## Instructions
Three pieces of work, in order. Plan them as exactly three phases in that order.
Give scripts/orchestra_e2e_healthcheck.sh a --summary flag that prints one line per check with its result, then the usual success line.
## Phase 1 — a self-test for the healthcheck
Plan this as three phases, because each piece is independently verifiable:
New file `scripts/orchestra_e2e_selftest.sh`, executable, `#!/usr/bin/env bash`.
1. Introduce a results list. Record each check's name and outcome as it runs, with no change to any existing output or exit status.
2. Add the --summary flag. It prints one line per recorded result, then the existing success line.
3. Update the usage text and scripts/test_healthcheck.sh so the expected --help output matches.
It runs `scripts/orchestra_e2e_healthcheck.sh`, then asserts:
## Verification policy for this project
- exit status is 0
- stdout contains `OK`
Only two commands may appear on a run: line, exactly:
On failure it prints which assertion failed and exits 1. On success it prints `selftest: ok` and exits 0.
- ["bash", "-n", "<path>"]
- ["bash", "scripts/orchestra_e2e_healthcheck.sh"]
Verification for this phase is automated only. The one check is:
- run: ["bash", "-n", "scripts/orchestra_e2e_selftest.sh"]
Do not add a manual step to this phase.
## Phase 2 — `--json` on the healthcheck
`scripts/orchestra_e2e_healthcheck.sh --json` prints exactly one line:
{"status":"ok","checks":1}
and exits 0. Without `--json` the existing human output is unchanged, and `--help` keeps working. `--json` and `--help` together behave as `--help`.
Verification for this phase must include both an automated check and a manual step. The JSON shape is a judgement a human confirms by reading it, so state the manual step as the exact command a human runs and the exact line they should see.
## Phase 3 — teach the self-test about `--json`
Extend `scripts/orchestra_e2e_selftest.sh` to run the healthcheck twice: once plain and once with `--json`. Assert the plain run still contains `OK`, and assert the `--json` run prints one line beginning with `{"status":`.
Verification for this phase is automated only:
- run: ["bash", "-n", "scripts/orchestra_e2e_selftest.sh"]
- run: ["bash", "scripts/orchestra_e2e_healthcheck.sh"]
## Constraints
The project's verification policy allows exactly two command shapes:
["bash", "-n", "<one file>"]
["bash", "scripts/orchestra_e2e_healthcheck.sh"]
A `run:` line outside those is refused when the plan seals, not later.
Anything else is refused when you seal the plan. Give every phase at least one automated check from that list, and add a manual check where a human should confirm the printed text.
## Research first
Before planning, establish at least three findings and label their confidence honestly: at least one `fact`, one `inference`, and one `assumption`. The plan must cite at least two of them in References.
Establish at least three findings with distinct confidence: at least one fact, one inference, one assumption.
## Quality gate
bash -n scripts/*.sh && bash scripts/orchestra_e2e_healthcheck.sh
## Completion
Run the configured quality gate. When the task is ready for the worker to verify and deliver, create `.orchestra/done`. Do not write a prose completion report.
+36 -7
View File
@@ -1,28 +1,57 @@
#!/usr/bin/env bash
readonly VERSION=1.0.0
# emit <format> <template> [args...]: the single output path.
# format: text or json print; none suppresses (--quiet). Explicit argument,
# never read from an enclosing variable.
emit() {
local format=$1
shift
[ "$format" = none ] || printf "$@"
}
main() {
local quiet=
local json=
local summary=
local -a results=()
for arg in "$@"; do
if [ "$arg" = --help ]; then
printf 'Usage: %s [--quiet]\n\n' "${0##*/}"
printf 'Healthcheck script for Orchestra E2E tests.\n'
printf 'Exits 0 with a success message if all checks pass.\n'
printf ' --quiet Suppress the success message; still exits 0.\n'
emit text 'Usage: %s [--quiet] [--summary]\n\n' "${0##*/}"
emit text 'Healthcheck script for Orchestra E2E tests.\n'
emit text 'Exits 0 with a success message if all checks pass.\n'
emit text ' --quiet Suppress the success message; still exits 0.\n'
emit text ' --summary Print one line per check before the success message.\n'
emit text 'Version: %s\n' "$VERSION"
exit 0
elif [ "$arg" = --quiet ]; then
quiet=1
elif [ "$arg" = --json ]; then
json=1
elif [ "$arg" = --summary ]; then
summary=1
fi
done
if [ -n "$json" ]; then
printf '{"status":"ok","checks":1}\n'
results+=("healthcheck ok")
local format=text
[ -n "$quiet" ] && format=none
[ -n "$json" ] && format=json
if [ "$format" = json ]; then
emit "$format" '{"status":"ok","checks":1}\n'
exit 0
fi
[ -n "$quiet" ] || printf 'OK - all healthchecks passed\n'
if [ -n "$summary" ]; then
for r in "${results[@]}"; do
emit "$format" '%s: %s\n' "${r%% *}" "${r#* }"
done
fi
emit "$format" 'OK - all healthchecks passed\n'
exit 0
}
+1 -1
View File
@@ -3,7 +3,7 @@
HC="$(dirname "$0")/orchestra_e2e_healthcheck.sh"
OK='OK - all healthchecks passed'
USAGE="$(printf 'Usage: orchestra_e2e_healthcheck.sh [--quiet]\n\nHealthcheck script for Orchestra E2E tests.\nExits 0 with a success message if all checks pass.\n --quiet Suppress the success message; still exits 0.')"
USAGE="$(printf 'Usage: orchestra_e2e_healthcheck.sh [--quiet] [--summary]\n\nHealthcheck script for Orchestra E2E tests.\nExits 0 with a success message if all checks pass.\n --quiet Suppress the success message; still exits 0.\n --summary Print one line per check before the success message.\nVersion: 1.0.0')"
fails=0
check() { # check <expected-stdout> <label> [args...]