feat(framework): accept digest message class in agent-send.sh (W1)
Some checks failed
ci/woodpecker/pr/ci Pipeline failed

The triage class validator in agent-send.sh rejected `digest`, the
canonical machine-wake / coalescible message class defined by the
converged wake/heartbeat design (CONVERGED-DESIGN §2.3 sol C1). Add
`digest` to the accepted class set (case-statement validator + the
documented consumer grammar regex), alongside the existing
terminal-log/actionable/human/reaction classes.

Red-first: extended agent-send.test.sh with --class digest / -C digest
assertions plus a grammar-regex case for class=digest. At origin/main
these 3 new assertions FAIL (PASS=15 FAIL=3); with the validator fix
applied, all 18 assertions PASS (PASS=18 FAIL=0). All pre-existing
assertions were unaffected throughout.

Part of #892
This commit is contained in:
mosaic-coder
2026-07-25 16:03:51 -05:00
parent 3c7890f17f
commit 8d955c86a1
2 changed files with 23 additions and 5 deletions

View File

@@ -17,6 +17,9 @@
# 8. MOSAIC_AGENT_NAME is authoritative for sender identity.
# 9. sender fallback queries local tmux, never the destination -L socket.
# 10. an undeterminable sender is stamped as "?".
# 11. --class digest is accepted (machine-wake, coalescible canon class).
# 12. -C digest short form parses identically.
# 13. the documented consumer regex parses producer output for class=digest.
set -uo pipefail
HERE=$(cd -- "$(dirname -- "$0")" && pwd)
@@ -65,7 +68,7 @@ run_auto() {
}
# Documented consumer grammar — the daemon will mirror exactly this.
GRAMMAR='^\[(\S+) -> (\S+) class=(terminal-log|actionable|human|reaction)\] (.*)$'
GRAMMAR='^\[(\S+) -> (\S+) class=(terminal-log|actionable|human|reaction|digest)\] (.*)$'
GRAMMAR_NOCLASS='^\[(\S+) -> (\S+)\] (.*)$'
# 1. REGRESSION BAR: classic preamble, byte-for-byte.
@@ -108,8 +111,22 @@ else
[ "$?" = 3 ] && ok "--class with no value => exit 3" || no "--class with no value => exit 3" "wrong rc"
fi
# 11. --class digest (space form) is accepted.
got=$(run -s mos --class digest -m "wake payload")
want='[a:src -> dsthost:mos class=digest] wake payload'
if [ "$got" = "$want" ]; then ok "--class digest emits token"
else no "--class digest emits token" "got=[$got] want=[$want]"
fi
# 12. -C digest short form.
got=$(run -s mos -C digest -m "coalesced wake")
want='[a:src -> dsthost:mos class=digest] coalesced wake'
if [ "$got" = "$want" ]; then ok "-C digest (short form)"
else no "-C digest (short form)" "got=[$got] want=[$want]"
fi
# 7. consumer grammar parses every class + classic line.
for c in terminal-log actionable human reaction; do
for c in terminal-log actionable human reaction digest; do
line=$(run -s mos --class "$c" -m "body $c")
[[ "$line" =~ $GRAMMAR ]] && [ "${BASH_REMATCH[3]}" = "$c" ] && [ "${BASH_REMATCH[4]}" = "body $c" ] \
&& ok "grammar parses class=$c" || no "grammar parses class=$c" "line=[$line]"