#!/usr/bin/env bats setup() { REPO_ROOT="$(cd "$BATS_TEST_DIRNAME/../../../../../../" && pwd)" load "$REPO_ROOT/tests/test_helper/bats-support/load" load "$REPO_ROOT/tests/test_helper/bats-assert/load" SCRIPT="$(cd "$BATS_TEST_DIRNAME/../scripts" && pwd)/validate-provenance.sh" TMPDIR="$(mktemp -d)" # Helper: create a minimal skill directory with no sources.md and no source_keys make_clean_skill() { local dir="$1" local name name="$(basename "$dir")" mkdir -p "$dir" cat > "$dir/SKILL.md" < "$dir/SKILL.md" < "$dir/references/sources.md" < "$skill/SKILL.md" < "$skill/references/sources.md" < "$skill/references/sources.md" <> "$skill/references/sources.md" run bash "$SCRIPT" "$skill" assert_success } # --------------------------------------------------------------------------- # Cycle 5 — Check 2: source_keys slug missing from sources.md → FAIL # --------------------------------------------------------------------------- @test "FAIL: source_keys slug in SKILL.md not present as H2 in sources.md" { local skill="$TMPDIR/my-skill" make_skill_with_source_keys "$skill" mkdir -p "$skill/references" cat > "$skill/references/sources.md" < "$skill/references/sources.md" < "$skill/references/sources.md" < "$skill/SKILL.md" < "$skill/references/sources.md" <> "$skill/references/sources.md" < "$skill/references/extra.md" < "$skill/references/extra.md" < "$research_dir/sources.md" < "$skill2/SKILL.md" < "$fake_repo/docs/research/sources.md" < "$skill2/references/sources.md" < "$skill/SKILL.md" < "$fake_repo/docs/research/sources.md" < "$skill/references/sources.md" < "$skill/SKILL.md" < "$fake_repo/docs/research/sources.md" < "$skill/references/sources.md" < "$fake_repo/docs/research/sources.md" < "$fake_repo/docs/research/sources.md" < "$fake_repo/docs/research/sources.md" < "$fake_repo/docs/research/sources.md" < "$fake_repo/docs/research/sources.md" < "$skill/references/sources.md" < "$fake_repo/docs/research/sources.md" < "$fake_repo/docs/research/sources.md" < "$skill/references/extra.md" < "$skill/references/extra.md" < "$skill/references/extra.md" < "$skill/references/extra.md" < "$fake_repo/docs/research/sources.md" < "$fake_repo/docs/research/sources.md" < "$fake_repo/docs/research/sources.md" < "$fake_repo/docs/research/sources.md" < "$skill/references/sources.md" < "$skill/references/sources.md" < "$skill/references/extra.md" < "$skill/references/extra.md" < "$fake_repo/docs/research/remotes.md" < "$fake_repo/docs/research/sources.md" < "$fake_repo/docs/research/sources.md" < "$fake_repo/docs/research/sources.md" < "$fake_repo/docs/research/sources.md" < "$fake_repo/docs/research/sources.md" < "$skill/SKILL.md" cat >> "$skill/SKILL.md" < "$skill/references/sources.md" < "$skill/references/topic.md" < "$skill/references/topic.md" run bash "$SCRIPT" "$skill" assert_failure assert_output --partial "not valid UTF-8" assert_output --partial "references/topic.md" } # --------------------------------------------------------------------------- # Cycle 24 — G4: check 3 walks references/ recursively # --------------------------------------------------------------------------- @test "G4: a source_keys file in references// is validated, not skipped" { local skill="$TMPDIR/my-skill" make_skill_with_source_keys "$skill" make_sources_md "$skill" mkdir -p "$skill/references/nested" cat > "$skill/references/nested/topic.md" < "$skill/references/sources.md" < "$skill/references/sources.md" < "$skill/references/sources.md" < "$skill/references/topic.md" run bash "$SCRIPT" "$skill" assert_failure assert_output --partial "not valid UTF-8" }