#!/bin/sh # check-session-log — a skill that documents a session_log call must document a # call the tool would actually accept. # # Nine skills documented the payload and none named `session_id`, which is the # tool's only REQUIRED field. An agent following any of them either failed the # call or invented an id — and invented ids do not group, so the pass-rate the # endpoint computes was being assembled from entries that could not be joined # (#36, found by a pressure test against `debug`). # # Also rejected: `duration_ms: `. An agent does not observe a clock. # A documented field nobody can honestly populate gets fabricated or silently # dropped, and fabricated numbers in a metrics stream are worse than no numbers. # # Usage: check-session-log [checkout-root] set -u ROOT=${1:-$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)} fail=0 for dir in "$ROOT"/skills/*/; do [ -f "$dir/SKILL.md" ] || continue name=$(basename "$dir") grep -q 'session_log' "$dir/SKILL.md" || continue if ! grep -q 'session_id' "$dir/SKILL.md"; then echo "ERROR: skills/$name documents session_log without session_id — the tool's only required field" >&2 fail=1 fi if grep -q 'duration_ms:[[:space:]]*<' "$dir/SKILL.md"; then echo "ERROR: skills/$name documents duration_ms as a placeholder an agent cannot measure — omit it or pass a real measurement" >&2 fail=1 fi done exit $fail