Compare commits

..

17 Commits

Author SHA1 Message Date
kami fd13778dd8 orchestra: pre-release WIP snapshot (orchestra-06g4vf5hzw7q4jbm3tty7w1y64-4d839c05) 2026-08-29 17:49:15 +04:00
kami 8ea3c7d1ae orchestra: pre-release WIP snapshot (orchestra-06g4vf5hzw7q4jbm3tty7w1y64-4d839c05) 2026-08-29 17:46:50 +04:00
kami d3acd4989a orchestra: TASK.md 2026-08-29 17:36:49 +04:00
kami a09fd607a4 Merge pull request 'Late handoff rig: add a --version line to the healthcheck usage text' (#17) from orchestra/06G4JX6MSQEP7N0D5JWW9EP5X4 into master
Reviewed-on: #17
2026-08-28 21:40:40 +02:00
kami 419e17fce2 orchestra: pre-release WIP snapshot (orchestra-06g4jx6msqep7n0d5jww9ep5x4-d6e6951e) 2026-08-28 21:44:50 +04:00
kami 1d8c3e1f6b orchestra: TASK.md 2026-08-28 21:39:51 +04:00
kami bf0f287aca Merge pull request 'Route the healthcheck output through one helper' (#16) from orchestra/06G4GWWJ8SWFREF06HDYEBAG0C into master 2026-08-28 15:18:02 +02:00
kami 5bcffb337f orchestra: pre-release WIP snapshot (orchestra-06g4gwwj8swfref06hdyebag0c-940ab9dd) 2026-08-28 17:06:41 +04:00
kami affbbe411b orchestra: TASK.md 2026-08-28 16:58:52 +04:00
kami ec320c8240 Merge pull request 'Give the healthcheck a self-test and a machine-readable mode' (#11) from orchestra/06G4FT0MB733H2ZCZ237WFHFD8 into master 2026-08-28 12:42:28 +02:00
kami ba0e891348 orchestra: pre-release WIP snapshot (orchestra-06g4ft0mb733h2zcz237wfhfd8-b318f8b5) 2026-08-28 14:37:09 +04:00
kami 56d9b9acdd orchestra: pre-release WIP snapshot (orchestra-06g4ft0mb733h2zcz237wfhfd8-b318f8b5) 2026-08-28 14:32:34 +04:00
kami 14654d6cab orchestra: TASK.md 2026-08-28 14:26:29 +04:00
kami f48e363d99 Merge pull request 'Add a --quiet flag to the healthcheck script' (#8) from orchestra/06G4E6F69AKP2PA00S28D7ASBC into master
orchestra burn-in: PR tail
2026-08-28 09:02:07 +02:00
kami 0d1585df93 orchestra: pre-release WIP snapshot (orchestra-06g4e6f69akp2pa00s28d7asbc-abb7ef54) 2026-08-28 10:58:57 +04:00
kami 41dee80241 orchestra: pre-release WIP snapshot (orchestra-06g4e6f69akp2pa00s28d7asbc-abb7ef54) 2026-08-28 10:46:43 +04:00
kami 3a076dca70 orchestra: TASK.md 2026-08-28 10:41:18 +04:00
4 changed files with 246 additions and 28 deletions
+33 -24
View File
@@ -1,49 +1,58 @@
# Task 06G4E83E4KRXM8DS90M2648MGM
# Task 06G4VF5HZW7Q4JBM3TTY7W1Y64
Add a --quiet flag to the healthcheck script
Add ten named checks to the healthcheck, in five phases
- Project: test-e2e
- Source: gitea:test-e2e/8
- Source: burnin/run18-implement-successor
- Priority: 0
## Instructions
## Goal
scripts/orchestra_e2e_healthcheck.sh currently runs a single check. Grow it to ten named checks, each implemented as its own shell function, each reported by name.
Add a --quiet flag to the healthcheck script
The ten checks, all read-only and all satisfiable inside this repository:
scripts/orchestra_e2e_healthcheck.sh already handles --help. Add a --quiet flag alongside it that suppresses the success line and still exits 0. Leave the default behaviour and the --help output unchanged.
1. repo_root_readable, 2. scripts_dir_present, 3. healthcheck_executable_bit, 4. selftest_present, 5. test_healthcheck_present, 6. readme_present, 7. no_crlf_line_endings, 8. no_tabs_in_scripts, 9. shebang_is_bash, 10. usage_text_mentions_every_flag.
## Verification
Each check is a function named check_<name> that returns 0 for pass and 1 for fail, prints nothing on its own, and records its name and outcome in the existing results state.
- `bash -n scripts/*.sh && bash scripts/orchestra_e2e_healthcheck.sh` exited 0
- commit: 41dee802416aaa9020a2e31ae5b79fa084a4f150
- independent review of 41dee802416aaa9020a2e31ae5b79fa084a4f150: pass
- accepted plan: 6c62e3cde23ed9aca296ed5b60295384b35cdad9fe0e1e45fa381d5801fb9af3
Plan this as FIVE phases:
## Behavioural changes
1. Checks 1 to 3, with the dispatch loop that runs a list of check functions and records each outcome.
2. Checks 4 to 6.
3. Checks 7 to 8.
4. Checks 9 to 10.
5. Update the usage text in --help to list every check name, and extend scripts/test_healthcheck.sh with one assertion per check plus an assertion that all ten names appear in the output.
- none reported
## Work one phase at a time
## Deviations from plan
This is a hard requirement. Implement phase N, request its verification, and only then begin phase N+1. Do not write the whole change first and verify the phases afterwards.
- none reported
## Behaviour that must not change
## Remaining risks
The existing success line, the --quiet, --json and --help flags, and the exit status all keep their current behaviour when every check passes.
- none reported
## Verification policy for this project
## Review hotspots
Only two commands may appear on a run: line, exactly:
- none reported
- ["bash", "-n", "<path>"]
- ["bash", "scripts/orchestra_e2e_healthcheck.sh"]
The sections above are derived from Orchestra state. The reported
changes, deviations, risks, and hotspots are the implementing agent's
own account and are not verified.
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.
## Acceptance criteria
## Research first
- not stated in the task contract
Establish at least three findings with distinct confidence: at least one fact, one inference, one assumption.
## Handoff behaviour
Behave normally throughout this task. If Orchestra asks you to write a handoff report, write it and stop.
## Quality gate
bash -n scripts/*.sh && bash scripts/orchestra_e2e_healthcheck.sh
## Completion
+117 -4
View File
@@ -1,16 +1,129 @@
#!/usr/bin/env bash
readonly VERSION=1.0.0
readonly ROOT=$(cd "$(dirname "$0")/.." && pwd)
# Space-separated check names; each has a check_<name> function.
CHECKS="repo_root_readable scripts_dir_present healthcheck_executable_bit
selftest_present test_healthcheck_present readme_present
no_crlf_line_endings no_tabs_in_scripts
shebang_is_bash usage_text_mentions_every_flag"
# name=ok / name=fail pairs, in run order.
RESULTS=
FAILED=0
TOTAL=0
# record <name> <status>: append one outcome to the results state.
record() {
RESULTS="$RESULTS $1=$2"
TOTAL=$((TOTAL + 1))
[ "$2" = ok ] || FAILED=$((FAILED + 1))
}
check_repo_root_readable() { [ -d "$ROOT" ] && [ -r "$ROOT" ]; }
check_scripts_dir_present() { [ -d "$ROOT/scripts" ]; }
check_healthcheck_executable_bit() { [ -x "$ROOT/scripts/orchestra_e2e_healthcheck.sh" ]; }
check_selftest_present() { [ -f "$ROOT/scripts/orchestra_e2e_selftest.sh" ]; }
check_test_healthcheck_present() { [ -f "$ROOT/scripts/test_healthcheck.sh" ]; }
check_readme_present() { [ -f "$ROOT/README.md" ]; }
check_no_crlf_line_endings() {
[ -d "$ROOT/scripts" ] || return 1
! grep -qU $'\r' "$ROOT"/scripts/*.sh "$ROOT/README.md" 2>/dev/null
}
check_no_tabs_in_scripts() {
[ -d "$ROOT/scripts" ] || return 1
! grep -q "$(printf '\t')" "$ROOT"/scripts/*.sh 2>/dev/null
}
check_shebang_is_bash() {
[ -d "$ROOT/scripts" ] || return 1
local f
for f in "$ROOT"/scripts/*.sh; do
[ "$(head -n 1 "$f")" = '#!/usr/bin/env bash' ] || return 1
done
}
check_usage_text_mentions_every_flag() {
local text flag
text=$(usage text)
for flag in --quiet --json --help; do
case "$text" in
*"$flag"*) ;;
*) return 1 ;;
esac
done
}
# 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 "$@"
}
# usage <format>: the --help body. Also the source check_usage_text_mentions_every_flag
# reads, so the flag list has exactly one home.
usage() {
emit "$1" 'Usage: %s [--quiet]\n\n' "${0##*/}"
emit "$1" 'Healthcheck script for Orchestra E2E tests.\n'
emit "$1" 'Exits 0 with a success message if all checks pass.\n'
emit "$1" ' --quiet Suppress the success message; still exits 0.\n'
emit "$1" ' --json Print a single-line JSON result; still exits 0.\n'
emit "$1" ' --help Print this usage text and exit 0.\n'
emit "$1" '\nChecks:\n'
local name
for name in $CHECKS; do
emit "$1" ' %s\n' "$name"
done
emit "$1" '\nVersion: %s\n' "$VERSION"
}
main() {
local quiet=
local json=
for arg in "$@"; do
if [ "$arg" = --help ]; then
printf 'Usage: %s\n\n' "${0##*/}"
printf 'Healthcheck script for Orchestra E2E tests.\n'
printf 'Exits 0 with a success message if all checks pass.\n'
usage text
exit 0
elif [ "$arg" = --quiet ]; then
quiet=1
elif [ "$arg" = --json ]; then
json=1
fi
done
printf 'OK - all healthchecks passed\n'
local name
for name in $CHECKS; do
if "check_$name"; then
record "$name" ok
else
record "$name" fail
fi
done
local format=text
[ -n "$quiet" ] && format=none
[ -n "$json" ] && format=json
if [ "$FAILED" -gt 0 ]; then
local entry
for entry in $RESULTS; do
[ "${entry#*=}" = fail ] && emit "$format" 'FAIL - %s\n' "${entry%=*}"
done
exit 1
fi
if [ "$format" = json ]; then
emit "$format" '{"status":"ok","checks":%d}\n' "$TOTAL"
exit 0
fi
emit "$format" 'OK - all healthchecks passed\n'
exit 0
}
+37
View File
@@ -0,0 +1,37 @@
#!/usr/bin/env bash
# Self-test for the Orchestra E2E healthcheck.
here=$(cd "$(dirname "$0")" && pwd)
healthcheck="$here/orchestra_e2e_healthcheck.sh"
# fail <assertion> <captured stdout>: always echo what the healthcheck printed,
# so a red run is diagnosable without rerunning it by hand.
fail() {
printf 'selftest: FAILED %s\n' "$1" >&2
printf 'selftest: healthcheck stdout was:\n%s\n' "$2" >&2
exit 1
}
# plain run
out=$(bash "$healthcheck")
status=$?
[ "$status" -eq 0 ] || fail "plain run exit status: want 0, got $status" "$out"
case "$out" in
*OK*) ;;
*) fail "plain run stdout contains OK" "$out" ;;
esac
# --json run
jout=$(bash "$healthcheck" --json)
jstatus=$?
[ "$jstatus" -eq 0 ] || fail "--json run exit status: want 0, got $jstatus" "$jout"
jlines=$(printf '%s\n' "$jout" | wc -l)
[ "$jlines" -eq 1 ] || fail "--json run line count: want 1, got $jlines" "$jout"
case "$jout" in
'{"status":'*) ;;
*) fail '--json run stdout prefix: want {"status":' "$jout" ;;
esac
printf 'selftest: ok\n'
+59
View File
@@ -0,0 +1,59 @@
#!/usr/bin/env bash
# Self-check for orchestra_e2e_healthcheck.sh.
HC="$(dirname "$0")/orchestra_e2e_healthcheck.sh"
OK='OK - all healthchecks passed'
NAMES='repo_root_readable scripts_dir_present healthcheck_executable_bit
selftest_present test_healthcheck_present readme_present
no_crlf_line_endings no_tabs_in_scripts
shebang_is_bash usage_text_mentions_every_flag'
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.\n --json Print a single-line JSON result; still exits 0.\n --help Print this usage text and exit 0.\n\nChecks:\n repo_root_readable\n scripts_dir_present\n healthcheck_executable_bit\n selftest_present\n test_healthcheck_present\n readme_present\n no_crlf_line_endings\n no_tabs_in_scripts\n shebang_is_bash\n usage_text_mentions_every_flag\n\nVersion: 1.0.0')"
fails=0
check() { # check <expected-stdout> <label> [args...]
local want=$1 label=$2 got status
shift 2
got=$(bash "$HC" "$@" 2>/dev/null)
status=$?
if [ "$got" != "$want" ] || [ "$status" -ne 0 ]; then
printf 'FAIL: %s (exit=%s)\n---got---\n%s\n---want---\n%s\n' "$label" "$status" "$got" "$want"
fails=$((fails + 1))
fi
}
contains() { # contains <needle> <label> [args...]
local want=$1 label=$2 got status
shift 2
got=$(bash "$HC" "$@" 2>/dev/null)
status=$?
if [ "$status" -ne 0 ] || [ "${got#*"$want"}" = "$got" ]; then
printf 'FAIL: %s (exit=%s)\n---missing---\n%s\n---in---\n%s\n' \
"$label" "$status" "$want" "$got"
fails=$((fails + 1))
fi
}
check "$OK" 'no args'
check '' '--quiet' --quiet
check "$USAGE" '--help' --help
check "$USAGE" '--help --quiet' --help --quiet
check "$USAGE" '--quiet --help' --quiet --help
check "$OK" 'unknown flag ignored' --bogus
for name in $NAMES; do
contains "$name" "--help names $name" --help
done
# All ten names in one run's output.
help_out=$(bash "$HC" --help 2>/dev/null)
missing=
for name in $NAMES; do
[ "${help_out#*"$name"}" = "$help_out" ] && missing="$missing $name"
done
if [ -n "$missing" ]; then
printf 'FAIL: --help lists all ten check names\n---missing---\n%s\n' "$missing"
fails=$((fails + 1))
fi
[ "$fails" -eq 0 ] || exit 1
printf 'all checks passed\n'