{
  "test_id": "T07",
  "verdict": "pass",
  "observed": "ISTIO_MUTUAL Gateway(8443) + tcp leg-2 라우트 상태에서 leg2_tcp_baseline=200, filterChains 길이=1(>0)로 정상 동작함을 확인했다. leg-2 VirtualService를 tls/sniHosts 라우트로 교체한 뒤 8초 대기 후 재조회하니 filterChains 길이가 정확히 0으로 떨어졌고, istiod 로그에 'gateway omitting listener \"0.0.0.0_8443\" due to: must have more than 0 chains in listener \"0.0.0.0_8443\"' 메시지가 그대로 찍혔다. 이 상태에서 leg2_tls_broken curl은 http_code=000, exit=35(SSL_CONNECT_ERROR)로 실패했고, leg-2를 tcp로 되돌리자 leg2_tcp_restored=200, filterChains도 1로 복구되어 pass_criteria의 모든 항목을 그대로 재현했다. 다만 환경상 이슈로 harness-notes.md의 '모든 매니페스트는 *.svc.homelab.local 사용' 지침은 VS route destination.host/DR host 필드에는 적용되지 않음을 발견했다(이 클러스터의 Istio 컨트롤플레인은 global.proxy.clusterDomain이 기본값 cluster.local로 남아있어 실제 kubeadm 도메인 homelab.local과 어긋남); 이 필드들은 cluster.local로, 그리고 DR에는 tls.sni를 Gateway hosts와 동일하게 명시적으로 고정해야 leg-1 mTLS가 정상 동작했다(자세한 내용은 result.txt 상단 DEVIATION 기록 참고).",
  "claims": [
    {
      "doc": "gw__src-egress-https-over-mtls",
      "cid": "C1",
      "empirical": "supports-claim",
      "note": "outer mesh mTLS(leg-1) 종단 + leg-2 tcp 재래핑이 정상 동작(leg2_tcp_baseline=200, restored=200)함을 확인."
    },
    {
      "doc": "gw__src-egress-https-over-mtls",
      "cid": "C4",
      "empirical": "supports-claim",
      "note": "leg-2를 tls/sniHosts로 바꾸면 filterChains가 1->0으로 붕괴하고 istiod가 리스너를 omit함을 직접 확인."
    },
    {
      "doc": "blog:egress_crd-mental-model",
      "cid": "C11",
      "empirical": "supports-claim",
      "note": "ISTIO_MUTUAL 종단 리스너 + tls/sniHosts 라우트 조합 = 0 chains 주장이 filterChains 길이 측정으로 실증됨."
    },
    {
      "doc": "gw__guide-egress-dual-gateway",
      "cid": "C4",
      "empirical": "supports-claim",
      "note": "동일 메커니즘(0 chains 붕괴 + istiod 로그 'must have more than 0 chain') 재현."
    },
    {
      "doc": "gw__note-egress-vs-scoping",
      "cid": "C10",
      "empirical": "supports-claim",
      "note": "tcp->tls 라우트 타입 전환에 따른 필터체인 소멸이 실측 데이터로 뒷받침됨."
    },
    {
      "doc": "gw__report-2026-06-08_egress-mtls",
      "cid": "C3",
      "empirical": "supports-claim",
      "note": "리스너 필터체인 0개 및 tcp 복구 시 재생성(1로 복구)까지 재현되어 주장을 뒷받침."
    }
  ]
}
