Преглед на файлове

fix(skills): scope card falsification match to the Expected section

Jesse Vincent преди 2 месеца
родител
ревизия
357d5028e0
променени са 2 файла, в които са добавени 38 реда и са изтрити 2 реда
  1. 15 2
      skills/agentic-end-to-end-testing/scripts/check-cards-against-spec
  2. 23 0
      tests/agentic-e2e-checker/test-check-cards-against-spec.sh

+ 15 - 2
skills/agentic-end-to-end-testing/scripts/check-cards-against-spec

@@ -34,6 +34,19 @@ warn() { echo "warn: $1"; }
 # design spec: markdown re-wrapping must not defeat the verbatim check.)
 normalize() { tr -s '[:space:]' ' ' | sed -e 's/^ //' -e 's/ $//'; }
 
+# Text of the card's Expected section only (case-insensitive heading match,
+# any ##+ level; section ends at the next heading or EOF).
+expected_section() {
+  awk '
+    /^#{2,}[[:space:]]/ {
+      low = tolower($0)
+      if (low ~ /^#+[[:space:]]*expected[[:space:]]*$/) { insec = 1; next }
+      if (insec) exit
+    }
+    insec { print }
+  ' "$1"
+}
+
 # --- extract the first table under the (case-insensitive) heading ----------
 TABLE="$(awk '
   /^#{1,6}[[:space:]]/ {
@@ -104,10 +117,10 @@ while [ "$i" -lt "$ROWS" ]; do
     fail "missing card file: $f"
     i=$((i + 1)); continue
   fi
-  hay="$(normalize < "$f")"
+  hay="$(expected_section "$f" | normalize)"
   case "$hay" in
     *"$falsif"*) : ;;
-    *) fail "$f: falsification line not present verbatim.
+    *) fail "$f: falsification line not present verbatim in the ## Expected section.
        expected (normalized): $falsif" ;;
   esac
   grep -q '\*\*What this covers\*\*' "$f" || fail "$f: missing **What this covers**"

+ 23 - 0
tests/agentic-e2e-checker/test-check-cards-against-spec.sh

@@ -119,6 +119,29 @@ assert_exit 1 "reworded falsification -> exit 1" \
   "$CHECKER" "$TEST_ROOT/t3/spec.md" "$TEST_ROOT/t3/cards"
 assert_out_contains "widget-status-flags" "failure names the card"
 
+echo "verbatim line outside Expected does not count"
+make_spec "$TEST_ROOT/t3b"; make_cards "$TEST_ROOT/t3b/cards"
+cat > "$TEST_ROOT/t3b/cards/widget-show-table.md" <<'EOF'
+# widget-show-table: table renders with TOTAL
+
+**What this covers**: If stdout's last line is not `TOTAL` followed by the two-decimal sum (20.85 for the seed fixture), or the TOTAL row is absent entirely, the scenario FAILS.
+
+## Pre-state
+A built widget binary.
+
+## Steps
+1. Run `widget show`.
+
+## Expected
+The widget prints a friendly banner and exits zero.
+
+## Cleanup
+Nothing to clean.
+EOF
+assert_exit 1 "line only outside Expected -> exit 1" \
+  "$CHECKER" "$TEST_ROOT/t3b/spec.md" "$TEST_ROOT/t3b/cards"
+assert_out_contains "widget-show-table" "failure names the card"
+
 echo "missing card file"
 make_spec "$TEST_ROOT/t4"; make_cards "$TEST_ROOT/t4/cards"
 rm "$TEST_ROOT/t4/cards/widget-show-table.md"