무엇이 막히나
세 겹이다. 위층이 없으면 아래층으로 떨어지되, 층은 성립한다.
1차
커밋 경계
git 훅이 커밋 시점에 막는다.
시크릿이 담긴 커밋과 배포에 실리면 안 되는 파일을 거른다. git 훅이라 도구 중립이다 — 어떤 에이전트를 쓰든 같은 자리에서 돈다. 이 층이 기본 경계인 이유가 그것이다.
2차
쓰기 경계
파일에 쓰이기 전에 막는다.
에이전트 도구의 사전 훅을 붙여 시크릿 실값 쓰기와 자기 권한 확대를 쓰는 순간 세운다. 도구마다 어댑터가 다르고, 어댑터가 없으면 1차로 떨어진다.
3차
상태 점검
막고 있다고 믿는 것이 실제로 도는지 본다.
OS 실행 경계가 켜져 있는지, 문서상 정책과 실제 도구 설정이 어긋나지 않는지를 양방향으로 본다. 장치가 있는 것과 그 장치가 지금 도는 것은 다른 일이다.
정책은 파일 하나가 정본이다
정책이 도구별 설정 파일에 흩어지면 문서상 정책과 실제 적용이 갈린다. 그래서 저장소 안 파일 하나를 정본으로 두고, 도구 설정은 거기서 내보낸다. 층은 이 파일을 읽기만 하고 고치지 않는다.
절 이름·키 이름·값이 전부 닫힌 어휘다. 모르는 것은 무시되지 않고 거부된다 — 오타 난 정책이 조용히 무시되는 것이 이 층에서 가장 위험한 실패다.

[mode]
# 읽기전용 · 작업공간 · 무제한
level = "작업공간"
[rules]
# 평가 순서는 deny → ask → allow 로 고정.
# 넓은 deny 가 좁은 allow 를 이긴다.
deny = []
ask = []
allow = []
[secrets]
scanner = "자동"
# 오탐이 정상 작업을 세우지 않게 기본은 거짓.
warn_as_block = false
[audit]
enabled = true
# 값은 남기지 않는다. 결정·대상·규칙 id 만.
level = "결정만"무엇을 안 막나
뚫리는 지점을 같은 자리에 적어 둔다. 접어 두면 정직이 아니라 면피가 된다.
2차 층이 없어도 그냥 돈다
쓰기 경계는 그 에이전트 도구의 훅 계약을 알아야 붙는다. 모르는 도구를 쓰면 2차가 안 붙고 1차로 떨어진다. 그래도 층은 성립하도록 만들었다 — 그렇지 않으면 남의 시스템에 못 깐다.
OS 격리는 우리가 만들지 않는다
3차는 도구가 제공하는 샌드박스다. 우리는 그것을 켜도록 정책이 요구하고 상태를 확인할 뿐이다. 직접 구현하지 않는다.
오탐으로 일을 세우지 않는다
엔트로피·키워드 계열의 애매한 판정은 기본값이 경고이지 차단이 아니다. 오탐이 정상 커밋을 세우면 사람은 검사를 끈다. 꺼진 검사는 없는 검사다.
승인 판단은 이름을 본다
명령 문자열을 보고 내리는 승인 판단은 이름이 실제 동작과 다르면 뚫린다. 그래서 승인 게이트와 실행 경계를 다른 층으로 갈라 뒀다.
무엇을 근거로 골랐나
막을 것을 감으로 고르지 않았다. 위협을 세고, 대응 후보를 조사해 판정하고, 그 판정을 기록으로 남겼다.
19건
운영면 위협 목록
실사고 사례를 근거로 세우고 내 구성을 실측해 해당 여부를 갈랐다
4건
선순위로 고른 위협
시크릿 커밋 경로 둘, 권한 게이트, 감사 기록
24건
대응 레퍼런스 판정
채택 11 · 조건부 4 · 기각 2 · 참고 7
4건
의사결정 기록(ADR)
무엇을 왜 안 했는지까지 남긴다
이식 실측은 아직 진행 중이다
"남의 레포에도 깔린다"는 주장은 숫자로 재기 전까지는 주장일 뿐이다. 아래 셋을 공개 저장소와 실사용 저장소에서 재는 중이고, 나오면 이 자리에 그대로 적는다.지금 쓸 수 있는 숫자가 없으므로 비워 둔다.
측정 중
설치 성공률
임의 레포에 명령 한 번으로 깔리는 비율
측정 중
차단 발동률
막아야 할 것을 실제로 막은 비율
측정 중
오탐률
정상 작업을 잘못 세운 비율
남의 시스템에 까는 이야기라면
이 층은 특정 환경 전제(경로·계정·폴더 구조)에 묶이지 않는 것을 목표로 만들고 있다. 도입이나 현장 적용을 검토 중이면 어떤 환경인지만 적어 보내 달라.

