CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/coding-policy

General-purpose coding policy for Baruch's AI agents

76

Quality

95%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Low

Low-risk findings worth noting

Overview
Quality
Evals
Security
Files

test_check_tessl_latest.shhooks/tests/

#!/usr/bin/env bash
# Outcome-based tests for check-tessl-latest.sh.
#
# The hook runs `tessl update --yes` and reads each jbaruch/* dep's installed
# version from the resolved state before and after, so tests put a FAKE `tessl`
# on PATH and drive it via env: STUB_BUMP_FILE/STUB_BUMP_TO rewrite a fixture
# tessl-package.json to simulate an update, STUB_UPDATE_EXIT makes the update
# fail. Manifest and resolved state are fixture-driven via TESSL_LATEST_MANIFEST
# and TESSL_STATE_DIR — no real tessl, no network, deterministic.
#
# Covers:
#   1. updated         -> "X → Y (updated)" segment, marker present, exit 0.
#   2. already latest  -> "Y (latest)" segment, marker present, exit 0.
#   3. update failed    -> status still emits with "update failed: <reason>", exit 0.
#   4. tessl missing   -> status emits with "update failed" (unavailable), exit 0.
#   5. install pending  -> no resolved-state file -> "(install pending)", exit 0.
#   6. pinned dep      -> "NOTE:" pin warning present, marker present, exit 0.
#   7. no manifest     -> silent no-op, exit 0.
#   8. third-party only -> silent (no jbaruch/* deps), exit 0.
#   9. malformed JSON   -> silent no-op, exit 0 (never aborts SessionStart).
#  10. unreadable state -> warns to stderr (existing-but-unreadable is a tool
#                          failure, not an absent-file non-result), exit 0.
#
# The harness drops `set -e` to aggregate results, so every fixture-setup command
# is checked explicitly and aborts with a fatal diagnostic on failure
# (rules/error-handling.md aggregate-reporting carve-out).
#
# Run: bash hooks/tests/test_check_tessl_latest.sh
set -uo pipefail

die() { echo "fatal: $*" >&2; exit 2; }

cleanup() { [[ -n "${TMP:-}" ]] && ! rm -rf "$TMP" && echo "warn: could not remove $TMP" >&2; return 0; }

pass() { PASS=$((PASS+1)); }
fail() { FAIL=$((FAIL+1)); echo "  ✗ FAIL: $1" >&2; }

# Write a resolved-state tessl-package.json fixture for <dep> at <version>.
seed_pkg() { # <state-dir> <dep> <version>
  local d="$1/plugins/$2"
  mkdir -p "$d" || die "seed_pkg: mkdir $d failed"
  printf '{"name":"%s","version":"%s"}\n' "$2" "$3" > "$d/tessl-package.json" \
    || die "seed_pkg: write $d/tessl-package.json failed"
}

# run <manifest> <state-dir> [extra env...] -> OUT, RC  (fake tessl on PATH)
run() {
  local manifest="$1" state="$2"; shift 2
  OUT="$(env "PATH=$STUBBIN:$PATH" TESSL_LATEST_MANIFEST="$manifest" TESSL_STATE_DIR="$state" "$@" bash "$SCRIPT" </dev/null 2>/dev/null)"
  RC=$?
}

# has <regex>: true when the emitted additionalContext matches <regex>.
has() { printf '%s' "$OUT" | jq -e ".additionalContext | test(\"$1\")" >/dev/null 2>&1; }

main() {
  SCRIPT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/check-tessl-latest.sh"
  [[ -f "$SCRIPT" && -r "$SCRIPT" ]] || die "hook not found/readable at $SCRIPT"
  command -v jq >/dev/null 2>&1 || die "jq required for these tests"

  TMP="$(mktemp -d -t tessl-latest-test.XXXXXX)" || die "mktemp failed"
  trap cleanup EXIT

  # A FAKE `tessl`: on `update`, optionally rewrite a fixture tessl-package.json
  # to a new version (simulating a resolved-state bump), then exit
  # STUB_UPDATE_EXIT (default 0). Any other subcommand is a no-op success.
  STUBBIN="$TMP/bin"; mkdir -p "$STUBBIN" || die "could not create $STUBBIN"
  cat > "$STUBBIN/tessl" <<'STUB'
#!/usr/bin/env bash
if [[ "${1:-}" == "update" ]]; then
  if [[ -n "${STUB_BUMP_FILE:-}" && -n "${STUB_BUMP_TO:-}" ]]; then
    printf '{"name":"jbaruch/coding-policy","version":"%s"}\n' "$STUB_BUMP_TO" > "$STUB_BUMP_FILE"
  fi
  if [[ -n "${STUB_UPDATE_EXIT:-}" ]]; then
    printf 'stub tessl: simulated update failure\n' >&2
    exit "$STUB_UPDATE_EXIT"
  fi
fi
exit 0
STUB
  chmod +x "$STUBBIN/tessl" || die "chmod stub tessl failed"

  FAIL=0; PASS=0

  # 1. updated: coding-policy at latest, resolved state 0.3.147, update bumps to
  #    0.3.153 -> "0.3.147 → 0.3.153 (updated)".
  local m1="$TMP/m1.json" s1="$TMP/s1"
  printf '{"dependencies":{"jbaruch/coding-policy":{"version":"latest"}}}\n' > "$m1" || die "write m1 failed"
  seed_pkg "$s1" "jbaruch/coding-policy" "0.3.147"
  run "$m1" "$s1" STUB_BUMP_FILE="$s1/plugins/jbaruch/coding-policy/tessl-package.json" STUB_BUMP_TO="0.3.153"
  if [[ $RC -eq 0 ]] && has "Session-start status" && has "versions:" && has "0.3.147" && has "0.3.153" && has "updated"; then
    pass; else fail "updated: expected transition status, got RC=$RC OUT=$OUT"; fi

  # 2. already latest: resolved state 0.3.153, update leaves it unchanged ->
  #    "0.3.153 (latest)".
  local m2="$TMP/m2.json" s2="$TMP/s2"
  printf '{"dependencies":{"jbaruch/coding-policy":{"version":"latest"}}}\n' > "$m2" || die "write m2 failed"
  seed_pkg "$s2" "jbaruch/coding-policy" "0.3.153"
  run "$m2" "$s2"
  if [[ $RC -eq 0 ]] && has "Session-start status" && has "0.3.153" && has "latest"; then
    pass; else fail "already-latest: expected (latest) status, got RC=$RC OUT=$OUT"; fi

  # 3. update failed: fake tessl exits non-zero. Status still emits, hook exits 0.
  local m3="$TMP/m3.json" s3="$TMP/s3"
  printf '{"dependencies":{"jbaruch/coding-policy":{"version":"latest"}}}\n' > "$m3" || die "write m3 failed"
  seed_pkg "$s3" "jbaruch/coding-policy" "0.3.147"
  run "$m3" "$s3" STUB_UPDATE_EXIT=1
  # A failed update must NOT claim "latest" for the unchanged version — it is
  # labeled "(installed)" since freshness was never verified.
  if [[ $RC -eq 0 ]] && has "Session-start status" && has "update failed" && has "installed" && ! has "latest"; then
    pass; else fail "update-failed: expected 'update failed' + 'installed' (not 'latest'), got RC=$RC OUT=$OUT"; fi

  # 4. tessl missing: PATH lacks tessl (jq + bash only). Update marked
  #    unavailable, status still emits, hook exits 0.
  local minbin="$TMP/minbin"; mkdir -p "$minbin" || die "could not create $minbin"
  ln -s "$(command -v bash)" "$minbin/bash" || die "symlink bash failed"
  ln -s "$(command -v jq)"   "$minbin/jq"   || die "symlink jq failed"
  local m4="$TMP/m4.json" s4="$TMP/s4"
  printf '{"dependencies":{"jbaruch/coding-policy":{"version":"latest"}}}\n' > "$m4" || die "write m4 failed"
  seed_pkg "$s4" "jbaruch/coding-policy" "0.3.147"
  OUT="$(env "PATH=$minbin" TESSL_LATEST_MANIFEST="$m4" TESSL_STATE_DIR="$s4" bash "$SCRIPT" </dev/null 2>/dev/null)"; RC=$?
  if [[ $RC -eq 0 ]] && has "Session-start status" && has "update failed"; then
    pass; else fail "tessl-missing: expected status with 'update failed', got RC=$RC OUT=$OUT"; fi

  # 5. install pending: manifest lists coding-policy but no resolved-state file
  #    exists (and the update does not create one) -> "(install pending)".
  local m5="$TMP/m5.json" s5="$TMP/s5"
  printf '{"dependencies":{"jbaruch/coding-policy":{"version":"latest"}}}\n' > "$m5" || die "write m5 failed"
  run "$m5" "$s5"
  if [[ $RC -eq 0 ]] && has "Session-start status" && has "install pending"; then
    pass; else fail "install-pending: expected '(install pending)', got RC=$RC OUT=$OUT"; fi

  # 6. pinned dep: coding-policy pinned to 0.3.99 -> the "NOTE:" pin warning is
  #    appended and the marker status is present.
  local m6="$TMP/m6.json" s6="$TMP/s6"
  printf '{"dependencies":{"jbaruch/coding-policy":{"version":"0.3.99"}}}\n' > "$m6" || die "write m6 failed"
  seed_pkg "$s6" "jbaruch/coding-policy" "0.3.99"
  run "$m6" "$s6"
  if [[ $RC -eq 0 ]] && has "Session-start status" && has "NOTE:" && has "0.3.99"; then
    pass; else fail "pinned: expected NOTE pin warning, got RC=$RC OUT=$OUT"; fi

  # 7. no manifest -> silent no-op.
  run "$TMP/does-not-exist.json" "$TMP/s7"
  if [[ $RC -eq 0 && -z "$OUT" ]]; then pass; else fail "no-manifest: expected silence, got RC=$RC OUT=$OUT"; fi

  # 8. third-party only (no jbaruch/* deps) -> silent.
  local m8="$TMP/m8.json" s8="$TMP/s8"
  printf '{"dependencies":{"tessl/npm-react":{"version":"19.2.0"}}}\n' > "$m8" || die "write m8 failed"
  run "$m8" "$s8"
  if [[ $RC -eq 0 && -z "$OUT" ]]; then pass; else fail "third-party only: expected silence, got RC=$RC OUT=$OUT"; fi

  # 9. malformed JSON -> silent no-op, exit 0.
  local m9="$TMP/m9.json" s9="$TMP/s9"
  printf 'not json\n' > "$m9" || die "write m9 failed"
  run "$m9" "$s9"
  if [[ $RC -eq 0 && -z "$OUT" ]]; then pass; else fail "malformed: expected silent exit 0, got RC=$RC OUT=$OUT"; fi

  # 10. unreadable resolved-state file: an existing but unreadable tessl-package
  #     .json is a tool failure, not an absent-file non-result — the hook warns
  #     to stderr and still exits 0 (distinguished from case 5's absent file,
  #     which is silent). Skipped as root: chmod 000 does not bind root.
  if [[ "$(id -u)" -ne 0 ]]; then
    local m10="$TMP/m10.json" s10="$TMP/s10" errU pkg10
    printf '{"dependencies":{"jbaruch/coding-policy":{"version":"latest"}}}\n' > "$m10" || die "write m10 failed"
    seed_pkg "$s10" "jbaruch/coding-policy" "0.3.147"
    pkg10="$s10/plugins/jbaruch/coding-policy/tessl-package.json"
    chmod 000 "$pkg10" || die "chmod 000 $pkg10 failed"
    errU="$(env "PATH=$STUBBIN:$PATH" TESSL_LATEST_MANIFEST="$m10" TESSL_STATE_DIR="$s10" bash "$SCRIPT" </dev/null 2>&1 >/dev/null)"; RC=$?
    if [[ $RC -eq 0 ]] && printf '%s' "$errU" | grep -q "unreadable"; then
      pass; else fail "unreadable state file: expected 'unreadable' warning + exit 0, got RC=$RC err=$errU"; fi
  fi

  echo "─────────────────────────────────────────────" >&2
  if [[ $FAIL -gt 0 ]]; then echo "FAILED: ${FAIL} failed, ${PASS} passed" >&2; exit 1; fi
  echo "PASSED: all ${PASS} checks" >&2
}

if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then
  main "$@"
fi

README.md

tile.json