Self-healing autopoietic shell: f(), tests, docs, interactive demo, fx fix-source layer

This commit is contained in:
2026-08-17 22:30:18 -04:00
commit 8b30120fba
14 changed files with 767 additions and 0 deletions
+55
View File
@@ -0,0 +1,55 @@
#!/bin/sh
# Verifies the learn -> persist -> auto-apply cycle for f().
# Run from the repo root: sh test/test_f.sh
set -e
WORKDIR=$(mktemp -d)
trap 'rm -rf "$WORKDIR"' EXIT
cp src/f.sh "$WORKDIR/f.sh"
cd "$WORKDIR"
fail=0
# 1. First call: command fails, we supply a fix, command succeeds after retry.
printf 'echo hello > needs-fix.txt\n' > fixinput.txt
out=$(. ./f.sh; f cat needs-fix.txt < fixinput.txt)
if [ "$out" != "hello" ]; then
echo "FAIL: expected 'hello' from first (learning) call, got: $out"
fail=1
else
echo "PASS: first call learns the fix and succeeds"
fi
if [ ! -f p ]; then
echo "FAIL: expected p to be created with the learned fix"
fail=1
else
echo "PASS: fix persisted to p"
fi
grep -qF 'cat needs-fix.txt=echo hello > needs-fix.txt' p || {
echo "FAIL: p does not contain the expected key=fix line"
fail=1
}
# 2. Second call, fresh subshell (simulates a new terminal): fix auto-applies,
# no prompt needed even though needs-fix.txt was removed again.
rm -f needs-fix.txt
out2=$(. ./f.sh && f cat needs-fix.txt < /dev/null)
if [ "$out2" != "hello" ]; then
echo "FAIL: expected learned fix to auto-apply on second call, got: $out2"
fail=1
else
echo "PASS: learned fix auto-applies on a fresh call with no prompt"
fi
# 3. A command that already succeeds should run once, untouched, no prompt.
out3=$(. ./f.sh && f echo already-fine < /dev/null)
if [ "$out3" != "already-fine" ]; then
echo "FAIL: expected passthrough for already-succeeding command"
fail=1
else
echo "PASS: already-succeeding commands pass through untouched"
fi
exit $fail