metrics-f2bc15 — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited metrics-f2bc15 (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Read the hidden metrics log and tell the user whether v1's tripwires are tripping.
TOPLEVEL=$(git rev-parse --show-toplevel)
REPO_HASH=$(printf '%s' "$TOPLEVEL" | shasum | cut -c1-12)
# Locate this repo's plugin cache. CLAUDE_PLUGIN_DATA is set in hook
# subprocesses but NOT in the skill's bash env, so glob the standard
# Claude Code plugin-data dirs and fall back to the legacy cache path.
CACHE_DIR=""
for D in \
${CLAUDE_PLUGIN_DATA:+"$CLAUDE_PLUGIN_DATA/cache/$REPO_HASH"} \
"$HOME/.claude/plugins/data"/debt-ops*/cache/"$REPO_HASH" \
"$HOME/.cache/debt-ops/cache/$REPO_HASH"; do
[ -d "$D" ] && { CACHE_DIR="$D"; break; }
done
LOG="$CACHE_DIR/metrics.jsonl"
if [ -n "$CACHE_DIR" ] && [ -f "$LOG" ]; then
tail -n 500 "$LOG"
else
echo "MISSING: no metrics.jsonl found for repo hash $REPO_HASH"
fiIf the file is missing or empty, tell the user the hooks haven't fired yet in this repo and stop.
One JSON object per line, three event shapes:
{"event":"edit","file":"...","registry_count":N,"ts":"..."} — every agent edit{"event":"feedback","file":"...","result":"pass|fail","ts":"..."} — every quality-check fire{"event":"session","registry_count":N,"adr_count":M,"ai_authored_count":K,"ts":"..."} — start of each sessionTimestamps are ISO-8601 UTC.
Filter to the last 7 days. Then compute:
event:edit and event:session.registry_count minus first (across either edit or session events). >0 means Discipline 1 is firing.adr_count minus first (session events only).ai_authored_count / registry_count, when registry_count>0).count(result:pass) / count(event:feedback).result:fail, look at the next feedback event for the same file. Count those that flipped to pass. Divide by total fails. Below 50% means Claude isn't reliably acting on hook output — the architectural alarm bell.If there are fewer than 5 sessions in the window, say "need more data" and skip the verdict.
One screen. No padding. Use → and ↑/↓ for trends. Example shape:
debt-ops metrics — last 7 days
─────────────────────────────────
edits : 142 (8 sessions, ~18 edits/session)
registry : +3
adrs : +1
ai-authored : 50% → 60% ↑
feedback ran : 89 times
pass rate : 88%
fail → pass rate: 80% (8/10)
verdict: okEnd with one judgment line:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.