dagoste/squadra 是一个把 Claude、Codex、Cursor 编排为同一工作流程的工具。2026 年 11 月 6 日的提交 0e56ba3 改变了这个仓库运行技能安全扫描的方式。它在扫描阶段去掉了扫描器自身的失败选项 `--fail-on-severity high`,并把拦截 HIGH 及以上的判定迁移到新脚本 tools/cisco_gate.py。该提交新增 93 行,删除 4 行。
迁移的原因是扫描器的跨文件规则。该规则只要发现读取环境变量的仓库中存在 Python 套接字使用,就断定为 CRITICAL 级别的外泄。在 3.14.0 之后,代码中残留的套接字使用只剩 scripts/runtime.py 中的 local_bind_available 一个,而该函数只是把套接字绑定到 127.0.0.1 的 0 号端口然后关闭,既不建立连接也不发送数据。扫描器策略无法通过重分级给这条规则降级,而它又违反了规则自身的约定,因此也不适用抑制(suppression)。把门控前置的解法,就是在该策略之外声明一次例外。
新门控只拦截 HIGH 和 CRITICAL 等级。被认可为例外的只有那两条规则(BEHAVIOR_CROSSFILE_ENV_VAR_EXFILTRATION、BEHAVIOR_CROSSFILE_EXFILTRATION_CHAIN),而且只有当该条目的证据中网络文件仅有 scripts/runtime.py 一个时才会通过。一旦混入其他任何网络文件,该规则就会再次被拦截。被例外处理的条目在扫描报告中也不会被删除,而是原样保留;门控把通过的部分输出为 'EXCEPTED',被拦截的部分输出为 'BLOCKING'。tests/test_cisco_gate.py 中新增的三个测试固定了这一行为:单文件通过、存在其他网络文件时重新拦截,以及其余 HIGH 规则和证据缺失时继续拦截。
不过,这一改动并没有修改扫描器的等级,而是在 CI 内部声明了例外,因此单看报告仍然会留下两条 CRITICAL。真正决定是否通过的是 tools/cisco_gate.py。例外条件被绑定在一个硬编码的文件路径上,因此同样类型的套接字使用若从其他路径进入,规则就会像原先一样回到 CRITICAL。扫描范围是已提交的仓库中除 tests/ 之外的部分,而新的测试文件位于该范围之外。该提交只附带用于验证行为的单元测试,不包含性能测量或外部验证结果。