- pre_test.sh: harness-level test folder revert script, replaces inline
_revert_test_folders() in entrypoint. Writes {"reverted": N} atomically.
- finalize.sh: set -x debug tracing; push retry (AGENT_PUSH_RETRIES, default 1
retry after 5s); output validation (AGENT_EXPECTED_OUTPUT env var); wrong-path
detection moves .agent-output/ files to working dir and writes
.correction-prompt.txt for entrypoint re-invoke
- harness.yaml: add scripts.pre_test
- spec-planning.yaml: all 17 nodes tagged with output:{path,min_bytes}
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
64 lines
2.2 KiB
Bash
64 lines
2.2 KiB
Bash
#!/bin/bash
|
|
# pre_test.sh — Revert agent modifications to test folders before each test run
|
|
# F73 / pre_test spec
|
|
set -euo pipefail
|
|
|
|
echo "=== agent-repo/v1 pre_test.sh ==="
|
|
|
|
WORKING_DIR="${AGENT_WORKING_DIR:-/workspace/project}"
|
|
AGENT_OUTPUT_DIR="${AGENT_OUTPUT_DIR:-/workspace/.agent-output}"
|
|
PROTECTED_FOLDERS="${PROTECTED_TEST_FOLDERS:-}"
|
|
|
|
mkdir -p "$AGENT_OUTPUT_DIR"
|
|
|
|
if [ -z "$PROTECTED_FOLDERS" ]; then
|
|
echo "No PROTECTED_TEST_FOLDERS set — nothing to revert"
|
|
echo '{"reverted": 0}' > "$AGENT_OUTPUT_DIR/.pre-test-result.json"
|
|
exit 0
|
|
fi
|
|
|
|
total_reverted=0
|
|
|
|
IFS=',' read -ra FOLDERS <<< "$PROTECTED_FOLDERS"
|
|
for folder in "${FOLDERS[@]}"; do
|
|
folder=$(echo "$folder" | xargs) # trim whitespace
|
|
[ -z "$folder" ] && continue
|
|
|
|
echo "Reverting: $folder"
|
|
|
|
# Revert tracked modifications
|
|
git -C "$WORKING_DIR" reset HEAD -- "$folder" 2>/dev/null || true
|
|
git -C "$WORKING_DIR" checkout HEAD -- "$folder" 2>/dev/null || true
|
|
|
|
# Remove untracked files
|
|
git -C "$WORKING_DIR" clean -fd -- "$folder" 2>/dev/null || true
|
|
|
|
# Count what was reverted
|
|
modified=$(git -C "$WORKING_DIR" diff --name-only HEAD -- "$folder" 2>/dev/null | wc -l)
|
|
untracked=$(git -C "$WORKING_DIR" ls-files --others --exclude-standard -- "$folder" 2>/dev/null | wc -l)
|
|
count=$((modified + untracked))
|
|
if [ "$count" -gt 0 ]; then
|
|
echo " Reverted $count item(s) from $folder"
|
|
total_reverted=$((total_reverted + count))
|
|
fi
|
|
done
|
|
|
|
# Also revert test infrastructure files
|
|
for infra in conftest.py pyproject.toml pytest.ini setup.cfg tox.ini; do
|
|
if git -C "$WORKING_DIR" diff --name-only HEAD -- "$infra" 2>/dev/null | grep -q .; then
|
|
git -C "$WORKING_DIR" checkout HEAD -- "$infra" 2>/dev/null || true
|
|
echo " Reverted infrastructure file: $infra"
|
|
total_reverted=$((total_reverted + 1))
|
|
fi
|
|
done
|
|
|
|
echo "Total reverted: $total_reverted"
|
|
|
|
# Atomic write via mktemp + mv (required contract)
|
|
RESULT_FILE=$(mktemp)
|
|
echo "{\"reverted\": $total_reverted}" > "$RESULT_FILE"
|
|
mv "$RESULT_FILE" "$AGENT_OUTPUT_DIR/.pre-test-result.json"
|
|
chmod 0644 "$AGENT_OUTPUT_DIR/.pre-test-result.json"
|
|
|
|
echo "=== pre_test.sh complete ==="
|
|
exit 0 |