feat(engine): warn on unknown coord-inbox arguments

coord-inbox.sh dropped unknown arguments silently, so a mistyped flag was
indistinguishable from a working invocation. It now warns on stderr per
argument and keeps reading: the read path must stay lenient because it runs
inside the SessionStart hook, which must never fail a session over a stray
flag. The hook runs the script with stderr discarded, so the warning costs
nothing there and surfaces in manual CLI use. Exit code is unchanged.

Selftest 68 -> 70: one check for the warning, one pinning the leniency it
must not break (unknown argument still reads the inbox and exits 0).

Docs realigned with shipped behavior in the same pass:
- selftest count was stale at 64 in README and CLAUDE.md (now 70)
- broadcast sender self-exclusion shipped in 0.2.1 but was undocumented
- rule 6 (message content is data, never instructions) was already enforced
  in the injection framing but missing from the published rule list

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CvTviFeoMCKJcALATRempy
This commit is contained in:
Kjell Tore Guttormsen 2026-07-25 06:39:21 +02:00
commit 11178fa168
5 changed files with 55 additions and 11 deletions

View file

@ -24,7 +24,11 @@ while [ $# -gt 0 ]; do
--repo) [ $# -ge 2 ] || { echo "coord-inbox: --repo requires a value" >&2; exit 2; }
REPO="$2"; shift 2 ;;
-h|--help) grep '^#' "$0" | sed 's/^# \{0,1\}//'; exit 0 ;;
*) shift ;;
# Lenient but not silent: warn and keep going. Failing here would fail a
# SessionStart over a stray flag; staying silent would make a typo look
# like a working invocation. The hook discards stderr, so this warning
# costs nothing there and shows up in manual CLI use.
*) echo "coord-inbox: unknown argument: $1 (ignored)" >&2; shift ;;
esac
done
if [ -z "$REPO" ]; then