dagoste/squadra는 Claude, Codex, Cursor를 하나의 작업 흐름으로 조율하는 도구다. 2026년 11월 6일 커밋 0e56ba3은 이 저장소의 스킬 보안 스캔 실행 방식을 바꿨다. 스캔 단계에서 스캐너의 자체 실패 옵션 `--fail-on-severity high`를 걷어내고, HIGH 이상을 막는 판정을 새 스크립트 tools/cisco_gate.py로 옮겼다. 이 커밋의 변경은 추가 93줄, 삭제 4줄이다.
옮긴 이유는 스캐너의 교차 파일 규칙 때문이다. 이 규칙은 환경변수를 읽는 저장소에 파이썬 소켓 사용이 있으면 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/를 제외한 부분이고, 새 테스트 파일은 그 범위 밖에 있다. 이 커밋은 동작을 검증하는 단위 테스트만 함께 붙였고, 성능 측정이나 외부 검증 결과는 포함하지 않는다.