주니어: "Git이 진실원천." 시니어: GitOps는 B7의 신원-TCB를 재배치한다. "누가 app:api 파드를 만드나"가
"누가 repo에 머지하나 + reconciler가 무엇을 적용/사칭하나"가 된다. M10은 그 이전을 — drift 자동교정의 윈도우·admission과의 교착·
reconciler 권한 경계를 — 라이브로 측정한다.
B7 — imperative (kubectl)
TCB = RBAC: 누가 app:api 라벨 파드를 만드나.
분산된 사람·운영자 + kubectl. 추적은 audit log/감사에 의존.
B8 — GitOps (relocated)
TCB = repo merge 권한(code-review·signed commit) ∪ reconciler SA가 사칭/적용할 수 있는 범위.
capability가 재중앙화(하나의 봇 + 모든 권한 + git log)되어 추적성을 산다 → AppProject로 최소화 필수(LP7 analogue).
// GitOps는 root kubectl trust를 *제거*하지 않고 *사용 빈도*만 줄인다. reconciler를 cluster-admin으로 두면 B7이 분산시킨 권한이 통째로 되돌아온다.
≤ sync interval로 경계짓고 자동교정.// detection ≠ prevention ≠ correction. M10이 더하는 *유일한* 새 통제는 런타임 무결성(correction)이다 — 그래서 coverage 신규 후보는 단 1행(IN1).
kubectl patch가 ≤ interval에 revert + /auditlogs 403 재폐쇄(spec-equality ≠ 의미적 재폐쇄)clusterrolebinding·kube-system secret 못 만듦, ciliumnetworkpolicy는 patch 가능(tight ≠ broken)대시보드는 *위조하지 않는다* — 살아있는 패널 대신, 그것이 렌더하는 CLI 원천(재현 가능):
$ argocd app get shop-network-runtime
Sync Status: OutOfSync (drift) Health: Healthy
cilium.io CiliumNetworkPolicy allow-web-to-api OutOfSync # L1: reconciler가 곧 revert
$ argocd app get m10-forge
Sync Status: OutOfSync Health: Missing
Condition: SyncError — admission webhook denied: forged identity (app:api on web-sa)
# L2: admission이 막아 영원히 Synced에 못 닿는다
argocd-server 침해 = 모든 synced ns write. "가르치는 UI가 곧 위협모델 대상"(ADR 0002).