Files
Jason Stedwell c1abe36822 phase 0
2026-06-17 16:03:26 -05:00

66 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Phase 0 validation — prove the native stack actually runs inside the container.
#
# For each bundled sample (MR16 / MR27 / MR28) it exercises every heavy path:
# 1. default run -> CAD kernel load + BOM .xlsx (openpyxl) + 6 thumbnails (pyrender/OSMesa)
# 2. --query -> geometry query engine
# 3. --diagram -> dimensional sheet export (cairosvg)
#
# Outputs persist on the host in ./_phase0_out for inspection.
# Translation (--translate, needs ANTHROPIC_API_KEY) is intentionally skipped here.
set -uo pipefail
cd "$(dirname "$0")"
IMAGE="${IMAGE:-step-parser}"
TAG="${TAG:-dev}"
OUT="${OUT:-$PWD/_phase0_out}"
mkdir -p "$OUT"
SAMPLES=(
"MR16s Gen1_EN.step"
"MR27s Gen1_EN.step"
"MR28uws Gen1_EN.step"
)
pass=0; fail=0
for s in "${SAMPLES[@]}"; do
stem="${s%.step}"
echo "──────────────────────────────────────────────────────────────"
echo " $s"
echo "──────────────────────────────────────────────────────────────"
# Copy the baked-in sample into the mounted dir, then process it there so all
# generated files land on the host. `set -e` makes any failing path fail the run.
docker run --rm -v "$OUT:/data" --entrypoint sh "$IMAGE:$TAG" -c "
set -e
cp '/app/skill.src/$s' '/data/$s'
echo '--- run 1: BOM + thumbnails (kernel + openpyxl + pyrender/OSMesa) ---'
python /app/skill.src/step_processor.py '/data/$s' --no-translate --verbose
echo '--- run 2: geometry query ---'
python /app/skill.src/step_processor.py '/data/$s' --query 'bounding box'
echo '--- run 3: external dimensional diagram (cairosvg) ---'
python /app/skill.src/step_processor.py '/data/$s' --no-thumbnails --no-bom --diagram
"
rc=$?
# Verify the expected artifacts actually exist on the host.
missing=""
[ -f "$OUT/${stem}_bom.xlsx" ] || missing="$missing bom.xlsx"
ls "$OUT/${stem}"_*.png >/dev/null 2>&1 || missing="$missing thumbnails"
[ -f "$OUT/${stem}__external-diagram.svg" ] || missing="$missing diagram.svg"
if [ $rc -eq 0 ] && [ -z "$missing" ]; then
echo "PASS: $s"
pass=$((pass+1))
else
echo "FAIL: $s (exit=$rc, missing:${missing:- none})"
fail=$((fail+1))
fi
done
echo "=============================================================="
echo " Phase 0 smoke test: ${pass} passed, ${fail} failed"
echo " Artifacts: $OUT"
echo "=============================================================="
[ "$fail" -eq 0 ]