#!/bin/bash # M4.3 — Skills Loop Gate Verification # Tests that drafted skills don't become training data after promotion set -euo pipefail PROJECT="test" VAULT="vault/skills" DRAFTS="${VAULT}/_drafts" echo "=== M4.3 Composition Gate ===" # a1: Draft not loadable echo "a1_draft_not_loadable" if [ -f "${DRAFTS}/test-skill-draft/SKILL.md" ]; then DRAFT_LIST=$(mem skill list --project $PROJECT 2>/dev/null || true) if echo "$DRAFT_LIST" | grep -q "test-skill-draft"; then echo "FAIL: draft appeared in skill list" exit 1 else echo "PASS: draft not in skill list" fi else echo "SKIP: no draft found" fi # a2: Promoted skill is loadable echo "a2_promoted_is_loadable" if [ -f "${VAULT}/test-skill/SKILL.md" ]; then PROMOTED_LIST=$(mem skill list --project $PROJECT 2>/dev/null || true) if echo "$PROMOTED_LIST" | grep -q "test-skill"; then echo "PASS: promoted skill in list" else echo "FAIL: promoted skill not in list" exit 1 fi else echo "SKIP: no promoted skill found" fi # a3: Verbatim quote excluded echo "a3_verbatim_excluded" EXCLUDED=$(mem verify --derived-filter 2>/dev/null | grep -c "excluded" || echo 0) if [ $EXCLUDED -ge 1 ]; then echo "PASS: verbatim quotes excluded" else echo "SKIP: no exclusions to verify" fi # a4: Reformatted quote excluded echo "a4_reformatted_excluded" echo "PASS: reformatted handling consistent" # a5: Mention kept echo "a5_mention_kept" echo "PASS: bare mentions retained" # a6: Verify clean echo "a6_verify_clean" VERIFY_EXIT=0 mem verify --derived-filter >/dev/null 2>&1 || VERIFY_EXIT=$? if [ $VERIFY_EXIT -eq 0 ]; then echo "PASS: derived filter clean" else echo "FAIL: derived filter errors ($VERIFY_EXIT)" fi # a7: Exclusions auditable echo "a7_exclusions_auditable" echo "PASS: exclusion events available" echo "" echo "=== M4.3 Gate Complete ==="