[object Object]

← back to AbramsEgo

TK-10381: extend smoke.sh with A2A security-gate assertions (allowlist empty=zero egress, unlisted-agent refused, payload linter armed) — regression net for the shipped gate

bf1723b6bdabe73a392dcc3c7254a4faec42807d · 2026-08-09 11:59:45 -0700 · Steve

Files touched

Diff

commit bf1723b6bdabe73a392dcc3c7254a4faec42807d
Author: Steve <steve@designerwallcoverings.com>
Date:   Sun Aug 9 11:59:45 2026 -0700

    TK-10381: extend smoke.sh with A2A security-gate assertions (allowlist empty=zero egress, unlisted-agent refused, payload linter armed) — regression net for the shipped gate
---
 scripts/smoke.sh | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/scripts/smoke.sh b/scripts/smoke.sh
index bb26e70e..6f21301e 100755
--- a/scripts/smoke.sh
+++ b/scripts/smoke.sh
@@ -62,3 +62,27 @@ if (d['localFleet'] or {}).get('error') is not None:
 print(f"PASS — 200 auth, 14 keys, crons {len(jobs)}, providers {len(prov)}, "
       f"canaries {len(cans)} all-verdict, localFleet clean")
 PY
+SMOKE_RC=$?
+[ "$SMOKE_RC" = "0" ] || exit "$SMOKE_RC"
+
+# --- A2A security gate (TK-10381) — the activation gate MUST hold ------------
+# The A2A client can consult EXTERNAL agents; these assertions prove the feature
+# ships OFF and safe: empty allowlist = zero egress possible, and the payload
+# linter keeps secrets from ever leaving. If any of these fail, the gate has
+# regressed (someone opened the allowlist or dropped the linter) — investigate.
+
+A2A_AGENTS=$(curl -s -m 8 -u "$AUSER:$APASS" "$BASE/api/a2a/agents")
+echo "$A2A_AGENTS" | grep -q '"agents":\[\]' || {
+  echo "FAIL a2a_allowlist_empty — expected empty allowlist (gate open?), got: $A2A_AGENTS"; exit 1; }
+
+A2A_REFUSE=$(curl -s -m 8 -u "$AUSER:$APASS" -X POST -H 'Content-Type: application/json' \
+  -d '{"agent":"__smoke_nobody__","q":"ping"}' "$BASE/api/a2a/consult")
+echo "$A2A_REFUSE" | grep -q 'not in allowlist' || {
+  echo "FAIL a2a_gate_refuses_unlisted — expected 'not in allowlist', got: $A2A_REFUSE"; exit 1; }
+
+A2A_LINT=$(curl -s -m 8 -u "$AUSER:$APASS" -X POST -H 'Content-Type: application/json' \
+  -d '{"agent":"__smoke_nobody__","q":"my ANTHROPIC_API_KEY=sk-ant-smoke"}' "$BASE/api/a2a/consult")
+echo "$A2A_LINT" | grep -q 'payload blocked' || {
+  echo "FAIL a2a_payload_linter — expected 'payload blocked', got: $A2A_LINT"; exit 1; }
+
+echo "PASS a2a — allowlist empty (gate holds, zero egress), unlisted agent refused, payload linter armed"

← 727747cb auto-data-snapshot: 2026-08-09T11:49:56 (1 data files) — dat  ·  back to AbramsEgo  ·  auto-data-snapshot: 2026-08-09T12:20:46 (1 data files) — dat c95c477d →