Files
boshu c7c074e739 refactor(skills): fold substrate-skill sprawl 13->~5 via the dispositions ledger (age-focus-membrane-bookkeeper-m1wg.22)
Fold 5 substrate skills into their survivors (ao skills retire --into), after
re-litigating each keep-rationale:
- vibing-with-ntm -> ntm       (operator layer over the same NTM tools)
- agy-headless-evidence -> agy-native  (consumes agy-native; evidence is a
  listed capability; mirrors agy-mcp/rules/sidecar folds)
- codex-approval -> codex-exec (codex-runtime driving-adapter; mirrors the
  codex-* consolidation)
- dual-pane-atm -> using-atm   (a specialization of the ATM substrate)
- orchestrate -> using-atm     (route/preflight/verify instrument; the ao
  orchestrate CLI survives, only the skill doc folds)

using-atm is the surviving out-of-session-substrate consolidator. Manual cleanups
ao skills retire does NOT reach: git rm .agy-plugin/skills/vibing-with-ntm +
drop it from validate-agy-plugin.sh core_skills; drop the dual-pane-atm/orchestrate
lines from scripts/.scenario-linkage-allow; drop vibing-with-ntm from
scripts/lint/codex-cross-runtime-skills.txt; repoint 26 broken cross-ref links to
survivors + fix frozen-twin generated_hash. scenario-linkage / skill-redirects
(47 resolve) / doc-skill-refs / manifests all green.

NOTE: validate-agy-plugin.sh has a PRE-EXISTING 9-bundle drift at HEAD (agent-mail,
beads-*, cass, cc-hooks, dcg, ntm, rch — stale hand-committed .agy-plugin bundle,
no sync tooling, not a routed gate); untouched here, flagged for a follow-up.
2026-07-01 02:28:07 -04:00

97 lines
5.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# recall-smoke.sh — `ao recall` TOPIC-RECALL SMOKE (report-only; NOT a ship gate)
#
# Runs `ao recall` over a 25-query set and REPORTS, echo-free, whether a memory
# whose path/snippet mentions each topic appears in the top-5 (matched against the
# JSON hits — which carry NO query header, so the query text cannot false-pass).
#
# THIS CERTIFIES NOTHING. It is a coarse TOPIC-presence smoke + the ripgrep
# contrast, used to drive the MISS LOG. It deliberately does NOT implement
# memory-v1.md done-criteria #3 — "the top-5 contains the RIGHT cited memory"
# (known-item retrieval, one exact memory per query). The tokens here are broad
# (e.g. "graph", "skill"), so a topic-relevant-but-not-exact hit counts: that is
# adequate for a smoke, INADEQUATE for certification, and intentionally so.
#
# The real known-item ship gate is bead age-unified-agent-memory-nyfq.8, which is
# OPEN and earned as the curated corpus is enriched (.5: ingest the Claude silos) —
# today many topics live in memory CONTENT, not in path-distinctive curated files.
# This script exits 0 regardless of the count; it reports, it does not gate.
# Read-only; pure bash.
set -u
AO="${AO:-ao}"
LIMIT=5
pass=0; total=0; declare -a MISSES
# run <query> <expected-token> — the expected token must appear in the RETRIEVED
# RESULTS (cited path OR snippet content), never in the echoed query. We match the
# JSON output, which contains ONLY the hits array (no query header), so an empty or
# wrong recall cannot false-pass on the query text. Honest recall@5: did recall
# surface the right memory in the top 5? Misses are LOGGED (not tuned away).
run() {
local q="$1" expect="$2"; total=$((total+1))
# JSON = the hits array only (path+snippet); no query echo to game the match.
local results; results="$("$AO" recall "$q" --limit $LIMIT --output json 2>/dev/null)"
if printf '%s\n' "$results" | grep -qiF "$expect"; then
pass=$((pass+1)); printf ' ok [%s] -> %s\n' "$q" "$expect"
else
MISSES+=("$q :: expected $expect"); printf ' MISS [%s] -> %s\n' "$q" "$expect"
fi
}
echo "== ao recall acceptance (top-$LIMIT cited) — 25-query gate (memory-v1.md #3) =="
run "tool freshness rot coverage hole uca" "tool-freshness-rot"
run "re-baseline before scoping new work" "re-baseline-before-scoping"
run "ao recall is the unified memory SOT" "memory-v1-ao-recall"
run "hot checkout concurrent lane discipline worktree" "hot-checkout-concurrent"
run "pawl run foreground not background reaped" "foreground"
run "execution packet schema validator unify" "55qz"
run "membrane maximal adversarial scope grind" "membrane"
run "cross-family verification catch reachable stranger" "a9iv"
run "evolve autonomous improvement loop dormancy" "evolve"
run "pawl good bar calibrated merge gate" "good-bar"
run "codex approval fanout judge" "codex-exec"
run "workpacket hardening operating loop" "workpacket"
run "omnigent dispatch command land" "omnigent"
run "beads tracker br ready offline" "beads"
run "crank epic wave execution swarm" "crank"
run "discovery dense execution packet intent" "discovery"
run "validate eval substrate architecture" "substrate"
run "tmux socket isolation test collision" "tmux"
run "branch worktree rationalization cleanup" "worktree"
run "cass session mining transcript search" "cass"
run "council decision one way door consensus" "council"
run "provenance ledger verdict commit binding" "provenance"
run "skill registry valuable when to use" "skill"
run "freshness decay maturity weight retrieval" "decay"
run "knowledge graph rejected dense retrieval deferred" "graph"
echo
echo "== ripgrep baseline (.4): same NL queries, head-to-head =="
# Fair comparison: feed rg the SAME natural-language query (OR of its words) and
# check whether the expected file appears at all. rg has no ranking, no tier, no
# decay/maturity — so even when it matches it cannot CITE the right memory the way
# recall does. This is the .4 "recall must beat rg" check.
rg_hits=0; rg_total=0
while IFS=$'\t' read -r q expect; do
[ -z "$q" ] && continue; rg_total=$((rg_total+1))
pat="$(printf '%s' "$q" | tr ' ' '|')"
rg -l -i -e "$pat" .agents/ 2>/dev/null | grep -qiF "$expect" && rg_hits=$((rg_hits+1))
done <<'PAIRS'
tool freshness rot coverage hole uca tool-freshness-rot
re-baseline before scoping new work re-baseline-before-scoping
ao recall is the unified memory SOT memory-v1-ao-recall
pawl run foreground not background reaped foreground
membrane maximal adversarial scope grind membrane
PAIRS
echo "rg surfaced the expected file (unranked, no citation) for $rg_hits/$rg_total; recall returns RANKED, tier-cited hits rg cannot."
echo
echo "== TOPIC-RECALL SMOKE (report-only, NOT a certification): $pass/$total topics surfaced in top-$LIMIT =="
if [ "${#MISSES[@]}" -gt 0 ]; then
echo "-- MISS LOG (drives corpus enrichment .5 + dense retrieval; feeds the known-item gate .8) --"
printf ' %s\n' "${MISSES[@]}"
fi
echo "NOTE: this is a smoke, not memory-v1.md done-criteria #3 (the known-item ship gate is bead .8, OPEN)."
# Report-only: exit 0 regardless of the count. This script does not gate.
exit 0