Skip to content

Commit 250311f

Browse files
hyperpolymathclaude
andcommitted
fix: remove eval, quote vars, use mktemp in absolute-zero shell scripts
verify-proofs.sh: eval→array execution, hardcoded /tmp→mktemp+trap run-local-verification.sh: eval→array execution, hardcoded /tmp→mktemp+trap setup-and-verify.sh: quoted 26 variable expansions, command -v "$1" Detected by panic-attack assail batch scan (2026-03-30). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 3c1744f commit 250311f

3 files changed

Lines changed: 94 additions & 82 deletions

File tree

absolute-zero/run-local-verification.sh

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ PASSED_CHECKS=0
2626
FAILED_CHECKS=0
2727
SKIPPED_CHECKS=0
2828

29+
# Create a secure temporary directory for check logs
30+
TMPDIR_CHECKS="$(mktemp -d)"
31+
trap 'rm -rf "${TMPDIR_CHECKS}"' EXIT
32+
2933
# Function to check if command exists
3034
command_exists() {
3135
command -v "$1" >/dev/null 2>&1
@@ -34,18 +38,21 @@ command_exists() {
3438
# Function to run a check
3539
run_check() {
3640
local name="$1"
37-
local command="$2"
41+
shift
42+
local check_cmd=("$@")
3843
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
3944

40-
echo -n "[$TOTAL_CHECKS] $name... "
41-
if eval "$command" > /tmp/absolute-zero-check-$TOTAL_CHECKS.log 2>&1; then
45+
local log_file="${TMPDIR_CHECKS}/check-${TOTAL_CHECKS}.log"
46+
47+
echo -n "[${TOTAL_CHECKS}] ${name}... "
48+
if "${check_cmd[@]}" > "${log_file}" 2>&1; then
4249
echo -e "${GREEN}PASS${NC}"
4350
PASSED_CHECKS=$((PASSED_CHECKS + 1))
4451
return 0
4552
else
4653
echo -e "${RED}FAIL${NC}"
4754
FAILED_CHECKS=$((FAILED_CHECKS + 1))
48-
echo " Error log: /tmp/absolute-zero-check-$TOTAL_CHECKS.log"
55+
echo " Error log: ${log_file}"
4956
return 1
5057
fi
5158
}
@@ -56,7 +63,7 @@ skip_check() {
5663
local reason="$2"
5764
TOTAL_CHECKS=$((TOTAL_CHECKS + 1))
5865
SKIPPED_CHECKS=$((SKIPPED_CHECKS + 1))
59-
echo -e "[$TOTAL_CHECKS] $name... ${YELLOW}SKIP${NC} ($reason)"
66+
echo -e "[${TOTAL_CHECKS}] ${name}... ${YELLOW}SKIP${NC} (${reason})"
6067
}
6168

6269
echo "==== Tool Availability Check ===="
@@ -112,35 +119,35 @@ echo "==== Running Verification ===="
112119
echo ""
113120

114121
# Z3 SMT Verification
115-
if [ $Z3_AVAILABLE -eq 1 ]; then
122+
if [ "${Z3_AVAILABLE}" -eq 1 ]; then
116123
echo "---- Z3 SMT Solver ----"
117-
run_check "Z3: CNO Properties" "z3 proofs/z3/cno_properties.smt2"
124+
run_check "Z3: CNO Properties" z3 proofs/z3/cno_properties.smt2
118125
echo ""
119126
else
120127
skip_check "Z3: CNO Properties" "z3 not installed"
121128
echo ""
122129
fi
123130

124131
# Coq Verification
125-
if [ $COQ_AVAILABLE -eq 1 ]; then
132+
if [ "${COQ_AVAILABLE}" -eq 1 ]; then
126133
echo "---- Coq Proof Assistant ----"
127-
run_check "Coq: Phase 1 Core (CNO.v)" "coqc -Q proofs/coq/common CNO proofs/coq/common/CNO.v"
128-
run_check "Coq: Statistical Mechanics" "coqc -Q proofs/coq/common CNO -Q proofs/coq/physics Physics proofs/coq/physics/StatMech.v"
129-
run_check "Coq: Category Theory" "coqc -Q proofs/coq/common CNO -Q proofs/coq/category Category proofs/coq/category/CNOCategory.v"
130-
run_check "Coq: Lambda Calculus" "coqc -Q proofs/coq/common CNO -Q proofs/coq/lambda Lambda proofs/coq/lambda/LambdaCNO.v"
131-
run_check "Coq: Quantum CNO" "coqc -Q proofs/coq/common CNO -Q proofs/coq/quantum Quantum proofs/coq/quantum/QuantumCNO.v"
132-
run_check "Coq: Filesystem CNO" "coqc -Q proofs/coq/common CNO -Q proofs/coq/filesystem Filesystem proofs/coq/filesystem/FilesystemCNO.v"
134+
run_check "Coq: Phase 1 Core (CNO.v)" coqc -Q proofs/coq/common CNO proofs/coq/common/CNO.v
135+
run_check "Coq: Statistical Mechanics" coqc -Q proofs/coq/common CNO -Q proofs/coq/physics Physics proofs/coq/physics/StatMech.v
136+
run_check "Coq: Category Theory" coqc -Q proofs/coq/common CNO -Q proofs/coq/category Category proofs/coq/category/CNOCategory.v
137+
run_check "Coq: Lambda Calculus" coqc -Q proofs/coq/common CNO -Q proofs/coq/lambda Lambda proofs/coq/lambda/LambdaCNO.v
138+
run_check "Coq: Quantum CNO" coqc -Q proofs/coq/common CNO -Q proofs/coq/quantum Quantum proofs/coq/quantum/QuantumCNO.v
139+
run_check "Coq: Filesystem CNO" coqc -Q proofs/coq/common CNO -Q proofs/coq/filesystem Filesystem proofs/coq/filesystem/FilesystemCNO.v
133140
echo ""
134141
else
135142
skip_check "Coq: All proofs" "coqc not installed"
136143
echo ""
137144
fi
138145

139146
# Lean 4 Verification
140-
if [ $LEAN_AVAILABLE -eq 1 ]; then
147+
if [ "${LEAN_AVAILABLE}" -eq 1 ]; then
141148
echo "---- Lean 4 Proof Assistant ----"
142149
if [ -f "proofs/lean4/lakefile.lean" ]; then
143-
run_check "Lean 4: Build all proofs" "cd proofs/lean4 && lake build"
150+
run_check "Lean 4: Build all proofs" bash -c "cd proofs/lean4 && lake build"
144151
else
145152
skip_check "Lean 4: Build all proofs" "lakefile.lean not found"
146153
fi
@@ -151,19 +158,19 @@ else
151158
fi
152159

153160
# Agda Verification
154-
if [ $AGDA_AVAILABLE -eq 1 ]; then
161+
if [ "${AGDA_AVAILABLE}" -eq 1 ]; then
155162
echo "---- Agda Proof Assistant ----"
156-
run_check "Agda: CNO Core" "agda proofs/agda/CNO.agda"
163+
run_check "Agda: CNO Core" agda proofs/agda/CNO.agda
157164
echo ""
158165
else
159166
skip_check "Agda: CNO Core" "agda not installed"
160167
echo ""
161168
fi
162169

163170
# Isabelle Verification
164-
if [ $ISABELLE_AVAILABLE -eq 1 ]; then
171+
if [ "${ISABELLE_AVAILABLE}" -eq 1 ]; then
165172
echo "---- Isabelle/HOL ----"
166-
run_check "Isabelle: CNO Theory" "isabelle build -d proofs/isabelle -b CNO"
173+
run_check "Isabelle: CNO Theory" isabelle build -d proofs/isabelle -b CNO
167174
echo ""
168175
else
169176
skip_check "Isabelle: CNO Theory" "isabelle not installed"
@@ -175,22 +182,22 @@ echo "========================================"
175182
echo "Verification Summary"
176183
echo "========================================"
177184
echo ""
178-
echo "Total checks: $TOTAL_CHECKS"
179-
echo -e "${GREEN}Passed: $PASSED_CHECKS${NC}"
180-
echo -e "${RED}Failed: $FAILED_CHECKS${NC}"
181-
echo -e "${YELLOW}Skipped: $SKIPPED_CHECKS${NC}"
185+
echo "Total checks: ${TOTAL_CHECKS}"
186+
echo -e "${GREEN}Passed: ${PASSED_CHECKS}${NC}"
187+
echo -e "${RED}Failed: ${FAILED_CHECKS}${NC}"
188+
echo -e "${YELLOW}Skipped: ${SKIPPED_CHECKS}${NC}"
182189
echo ""
183190

184-
if [ $FAILED_CHECKS -eq 0 ] && [ $PASSED_CHECKS -gt 0 ]; then
191+
if [ "${FAILED_CHECKS}" -eq 0 ] && [ "${PASSED_CHECKS}" -gt 0 ]; then
185192
echo -e "${GREEN}✓ All available verifications passed!${NC}"
186193
exit 0
187-
elif [ $PASSED_CHECKS -eq 0 ]; then
194+
elif [ "${PASSED_CHECKS}" -eq 0 ]; then
188195
echo -e "${YELLOW}⚠ No verification tools available locally${NC}"
189196
echo "Consider installing: coqc, z3, lean, agda, isabelle"
190197
echo "Or run: podman build -t absolute-zero . && podman run --rm absolute-zero ./verify-proofs.sh"
191198
exit 2
192199
else
193200
echo -e "${RED}✗ Some verifications failed${NC}"
194-
echo "Check error logs in /tmp/absolute-zero-check-*.log"
201+
echo "Check error logs in ${TMPDIR_CHECKS}/"
195202
exit 1
196203
fi

absolute-zero/setup-and-verify.sh

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export GIT_DISCOVERY_ACROSS_FILESYSTEM=1
1414
cd "$(dirname "$0")"
1515
REPO_ROOT=$(pwd)
1616

17-
echo "Repository root: $REPO_ROOT"
17+
echo "Repository root: ${REPO_ROOT}"
1818
echo ""
1919

2020
# ============================================================================
@@ -75,11 +75,11 @@ echo "=== Step 3: Tool Availability ==="
7575
echo ""
7676

7777
check_tool() {
78-
if command -v $1 &> /dev/null; then
79-
echo "$1: $(command -v $1)"
78+
if command -v "$1" &> /dev/null; then
79+
echo "$1: $(command -v "$1")"
8080
return 0
8181
else
82-
echo "$1: NOT FOUND"
82+
echo "${1}: NOT FOUND"
8383
return 1
8484
fi
8585
}
@@ -117,7 +117,7 @@ fi
117117

118118
echo ""
119119

120-
if [ ${#MISSING_TOOLS[@]} -gt 0 ]; then
120+
if [ "${#MISSING_TOOLS[@]}" -gt 0 ]; then
121121
echo "❌ Missing REQUIRED tools: ${MISSING_TOOLS[*]}"
122122
echo ""
123123
echo "Install with:"
@@ -132,7 +132,7 @@ if [ ${#MISSING_TOOLS[@]} -gt 0 ]; then
132132
echo ""
133133
fi
134134

135-
if [ ${#OPTIONAL_TOOLS[@]} -gt 0 ]; then
135+
if [ "${#OPTIONAL_TOOLS[@]}" -gt 0 ]; then
136136
echo "ℹ️ Missing OPTIONAL tools: ${OPTIONAL_TOOLS[*]}"
137137
echo ""
138138
echo "Install with:"
@@ -159,43 +159,43 @@ echo "Coq proofs:"
159159
COQC_TOTAL=$(find proofs/coq -name "*.v" -exec grep -h "^Theorem\|^Lemma\|^Corollary" {} \; 2>/dev/null | wc -l)
160160
COQC_ADMITTED=$(grep -r "Admitted\." proofs/coq/ 2>/dev/null | wc -l)
161161
COQC_PROVEN=$((COQC_TOTAL - COQC_ADMITTED))
162-
if [ $COQC_TOTAL -gt 0 ]; then
162+
if [ "${COQC_TOTAL}" -gt 0 ]; then
163163
COQC_PERCENT=$((COQC_PROVEN * 100 / COQC_TOTAL))
164164
else
165165
COQC_PERCENT=0
166166
fi
167167

168-
echo " Total theorems: $COQC_TOTAL"
169-
echo " Proven: $COQC_PROVEN"
170-
echo " Admitted: $COQC_ADMITTED"
171-
echo " Completion: $COQC_PERCENT%"
168+
echo " Total theorems: ${COQC_TOTAL}"
169+
echo " Proven: ${COQC_PROVEN}"
170+
echo " Admitted: ${COQC_ADMITTED}"
171+
echo " Completion: ${COQC_PERCENT}%"
172172
echo ""
173173

174174
# Count Lean theorems and sorry
175175
echo "Lean 4 proofs:"
176176
LEAN_TOTAL=$(find proofs/lean4 -name "*.lean" -exec grep -h "^theorem\|^lemma" {} \; 2>/dev/null | wc -l)
177177
LEAN_SORRY=$(grep -r "sorry" proofs/lean4/ 2>/dev/null | wc -l)
178178
LEAN_PROVEN=$((LEAN_TOTAL - LEAN_SORRY))
179-
if [ $LEAN_TOTAL -gt 0 ]; then
179+
if [ "${LEAN_TOTAL}" -gt 0 ]; then
180180
LEAN_PERCENT=$((LEAN_PROVEN * 100 / LEAN_TOTAL))
181181
else
182182
LEAN_PERCENT=0
183183
fi
184184

185-
echo " Total theorems: $LEAN_TOTAL"
186-
echo " Proven: $LEAN_PROVEN"
187-
echo " Sorry: $LEAN_SORRY"
188-
echo " Completion: $LEAN_PERCENT%"
185+
echo " Total theorems: ${LEAN_TOTAL}"
186+
echo " Proven: ${LEAN_PROVEN}"
187+
echo " Sorry: ${LEAN_SORRY}"
188+
echo " Completion: ${LEAN_PERCENT}%"
189189
echo ""
190190

191191
# List files with Admitted/sorry
192-
if [ $COQC_ADMITTED -gt 0 ]; then
192+
if [ "${COQC_ADMITTED}" -gt 0 ]; then
193193
echo "Files with Admitted:"
194194
grep -r "Admitted\." proofs/coq/ 2>/dev/null | cut -d: -f1 | sort -u | sed 's/^/ - /'
195195
echo ""
196196
fi
197197

198-
if [ $LEAN_SORRY -gt 0 ]; then
198+
if [ "${LEAN_SORRY}" -gt 0 ]; then
199199
echo "Files with sorry:"
200200
grep -r "sorry" proofs/lean4/ 2>/dev/null | cut -d: -f1 | sort -u | sed 's/^/ - /'
201201
echo ""
@@ -210,7 +210,7 @@ echo ""
210210

211211
read -p "Run verification now? (y/n) " -n 1 -r
212212
echo ""
213-
if [[ $REPLY =~ ^[Yy]$ ]]; then
213+
if [[ "${REPLY}" =~ ^[Yy]$ ]]; then
214214
if command -v just &> /dev/null; then
215215
echo "Using justfile..."
216216
just verify-all
@@ -250,8 +250,8 @@ echo ""
250250
echo "Choose what you want to do:"
251251
echo ""
252252
echo "1. FIX ADMITTED PROOFS:"
253-
echo " - $COQC_ADMITTED Coq proofs need completion"
254-
echo " - $LEAN_SORRY Lean proofs need completion"
253+
echo " - ${COQC_ADMITTED} Coq proofs need completion"
254+
echo " - ${LEAN_SORRY} Lean proofs need completion"
255255
echo " See files listed above"
256256
echo ""
257257
echo "2. VERIFY EXISTING PROOFS:"
@@ -305,13 +305,13 @@ Next Priority:
305305
EOF
306306

307307
# Substitute actual values
308-
sed -i "s/{COQC_PROVEN}/$COQC_PROVEN/g" QUICKSTART.txt
309-
sed -i "s/{COQC_TOTAL}/$COQC_TOTAL/g" QUICKSTART.txt
310-
sed -i "s/{COQC_PERCENT}/$COQC_PERCENT/g" QUICKSTART.txt
311-
sed -i "s/{LEAN_PROVEN}/$LEAN_PROVEN/g" QUICKSTART.txt
312-
sed -i "s/{LEAN_TOTAL}/$LEAN_TOTAL/g" QUICKSTART.txt
313-
sed -i "s/{LEAN_PERCENT}/$LEAN_PERCENT/g" QUICKSTART.txt
314-
sed -i "s/{COQC_ADMITTED}/$COQC_ADMITTED/g" QUICKSTART.txt
308+
sed -i "s/{COQC_PROVEN}/${COQC_PROVEN}/g" QUICKSTART.txt
309+
sed -i "s/{COQC_TOTAL}/${COQC_TOTAL}/g" QUICKSTART.txt
310+
sed -i "s/{COQC_PERCENT}/${COQC_PERCENT}/g" QUICKSTART.txt
311+
sed -i "s/{LEAN_PROVEN}/${LEAN_PROVEN}/g" QUICKSTART.txt
312+
sed -i "s/{LEAN_TOTAL}/${LEAN_TOTAL}/g" QUICKSTART.txt
313+
sed -i "s/{LEAN_PERCENT}/${LEAN_PERCENT}/g" QUICKSTART.txt
314+
sed -i "s/{COQC_ADMITTED}/${COQC_ADMITTED}/g" QUICKSTART.txt
315315

316316
echo "✓ Created QUICKSTART.txt with current status"
317317
echo ""

0 commit comments

Comments
 (0)