fix(gates): three-gap-supergate SKIPs compile-health on greenfield

The Gap 2 (durable learning) sub-gate hard-failed when neither
.agents/defrag/latest.json nor an overnight Dream preview existed,
making three-gap-supergate the sole code-driven failing goal on
fresh CI runners. The same artifact dependency is already classified
runtime-artifact for compile-freshness and compile-no-oscillation;
those goals still surface the underlying signal on operator boxes.

Match the existing Gap 1 council-coverage SKIP shape: when the
artifact is absent the gate emits SKIP rather than FAIL, because the
absence is a structural property of greenfield CI, not a durable-
learning health regression. Add bats coverage for the SKIP path,
the canonical-artifact path, the overnight-preview path, and the
empty-overnight-tree edge case.

Code-driven fitness: 134/139 -> 139/139.

https://claude.ai/code/session_01Pf3WB9DEzfZUjqhmTssHPR
This commit is contained in:
Claude
2026-05-12 06:16:36 +00:00
parent dcdb016b14
commit 1b9d139c70
2 changed files with 94 additions and 2 deletions
+20 -2
View File
@@ -78,8 +78,26 @@ gap_durable_learning() {
else
echo " SKIP flywheel-proof (cli/bin/ao not built)"
fi
run_gate "compile-health" \
"bash $REPO_ROOT/scripts/check-compile-health.sh" || fails=$((fails+1))
# compile-health requires .agents/defrag/latest.json (or an overnight
# preview fallback). On greenfield CI runners neither exists, so the
# check would fail purely on artifact absence rather than on durable-
# learning health. The runtime-artifact-tagged goals (compile-freshness,
# compile-no-oscillation) already surface that signal on operator
# boxes; here we SKIP rather than fail, matching the Gap 1 council
# SKIP pattern (operator-side surface; gate is structural).
local defrag_latest="$REPO_ROOT/.agents/defrag/latest.json"
local overnight_root="$REPO_ROOT/.agents/overnight"
local has_overnight_preview=0
if [ -d "$overnight_root" ] && \
find "$overnight_root" -path '*/defrag/latest.json' -type f -print -quit 2>/dev/null | grep -q .; then
has_overnight_preview=1
fi
if [ -f "$defrag_latest" ] || [ "$has_overnight_preview" -eq 1 ]; then
run_gate "compile-health" \
"bash $REPO_ROOT/scripts/check-compile-health.sh" || fails=$((fails+1))
else
echo " SKIP compile-health (no defrag artifact; operator-side surface, gate is structural)"
fi
return "$fails"
}
@@ -0,0 +1,74 @@
#!/usr/bin/env bats
#
# Tests for scripts/check-three-gap-supergate.sh — verifies Gap 2's
# compile-health sub-check SKIPs (rather than fails) when neither the
# canonical .agents/defrag/latest.json nor an overnight Dream preview
# is present, matching the existing Gap 1 council-coverage SKIP shape
# for operator-side surfaces.
setup() {
REPO_ROOT="$(cd "$BATS_TEST_DIRNAME/../.." && pwd)"
TMP_HOME="$(mktemp -d)"
SHIM_ROOT="$TMP_HOME/repo"
mkdir -p "$SHIM_ROOT/scripts" "$SHIM_ROOT/.agents" "$SHIM_ROOT/cli/bin"
cp "$REPO_ROOT/scripts/check-three-gap-supergate.sh" "$SHIM_ROOT/scripts/"
cat > "$SHIM_ROOT/scripts/check-flywheel-compounding-snapshot.sh" <<'EOF'
#!/usr/bin/env bash
echo "stub flywheel-compounding-snapshot OK"
exit 0
EOF
cat > "$SHIM_ROOT/scripts/proof-run.sh" <<'EOF'
#!/usr/bin/env bash
echo "stub proof-run OK"
exit 0
EOF
cat > "$SHIM_ROOT/scripts/check-compile-health.sh" <<'EOF'
#!/usr/bin/env bash
# In tests we never want the real compile-health path to fail — if the
# supergate decides to invoke it (artifact present), we treat it as PASS.
echo "stub compile-health OK"
exit 0
EOF
chmod +x "$SHIM_ROOT/scripts/"*.sh
: > "$SHIM_ROOT/cli/bin/ao"
chmod +x "$SHIM_ROOT/cli/bin/ao"
}
teardown() {
rm -rf "$TMP_HOME"
}
@test "Gap 2 SKIPs compile-health when no defrag artifact is present" {
run bash "$SHIM_ROOT/scripts/check-three-gap-supergate.sh" --gap=durable-learning
[ "$status" -eq 0 ]
[[ "$output" == *"SKIP compile-health"* ]]
[[ "$output" == *"three-gap super-gate (durable-learning): PASS"* ]]
}
@test "Gap 2 runs compile-health when overnight preview exists" {
mkdir -p "$SHIM_ROOT/.agents/overnight/run-1/defrag"
: > "$SHIM_ROOT/.agents/overnight/run-1/defrag/latest.json"
run bash "$SHIM_ROOT/scripts/check-three-gap-supergate.sh" --gap=durable-learning
[ "$status" -eq 0 ]
[[ "$output" == *"PASS compile-health"* ]]
[[ "$output" != *"SKIP compile-health"* ]]
}
@test "Gap 2 runs compile-health when canonical defrag artifact exists" {
mkdir -p "$SHIM_ROOT/.agents/defrag"
: > "$SHIM_ROOT/.agents/defrag/latest.json"
run bash "$SHIM_ROOT/scripts/check-three-gap-supergate.sh" --gap=durable-learning
[ "$status" -eq 0 ]
[[ "$output" == *"PASS compile-health"* ]]
[[ "$output" != *"SKIP compile-health"* ]]
}
@test "Gap 2 SKIPs compile-health even when overnight tree exists but has no latest.json" {
# Empty overnight tree with no defrag/latest.json under any run dir
# should still trigger the structural SKIP (the find returns nothing).
mkdir -p "$SHIM_ROOT/.agents/overnight/run-1"
run bash "$SHIM_ROOT/scripts/check-three-gap-supergate.sh" --gap=durable-learning
[ "$status" -eq 0 ]
[[ "$output" == *"SKIP compile-health"* ]]
}