import sys
p = '/home/madsc/work/insuniverse-temp/.worktrees/admin-rbac/.claude/PRPs/plans/admin-rbac-m6d.gates.sh'
block = open('/home/madsc/work/insuniverse-temp/.git/worktrees/admin-rbac/m6d-iso/block19-20.txt', encoding='utf-8').read()
s = open(p, encoding='utf-8').read()


def rep(old, new):
    global s
    n = s.count(old)
    if n != 1:
        sys.exit('count %d: %s' % (n, old[:70]))
    s = s.replace(old, new)


rep("""#   이 계획서 (admin-rbac-m6d) 의 RESOLVED-IN 행은 구현 증거를 인용할 때만 짝이다: 「증거: 검사 #K」 와 「시험 「이름」」 또는 「커밋 <hex>」 가 함께 있어야 한다.""",
    """#   이 계획서 (admin-rbac-m6d) 의 RESOLVED-IN 행은 구현 증거를 인용할 때만 짝이다: 「증거: 검사 #K」 와 「시험 「이름」」 · 「커밋 <hex>」 · 「· 게이트」 중 하나가 함께 있어야 한다.
#   인용의 실재는 검사 #20 이 본다 (형식만으로는 위조 인용이 통과한다 · R2).""")
rep("""    function evid(s){return (s ~ /증거: 검사 #[0-9]+/ && (s ~ /시험 「.+」/ || s ~ /커밋 [0-9a-f]+/))}""",
    """    function evid(s){return (s ~ /증거: 검사 #[0-9]+/ && (s ~ /시험 「.+」/ || s ~ /커밋 [0-9a-f]+/ || s ~ /· 게이트/))}""")
rep("""#   쓰기 행 이름 여섯 개 (money-issue · money-cancel · money-refund · org-upload · b19-edit · org-delete) 가 두 파일에 있다.""",
    """#   쓰기 행 이름 일곱 개가 쓰기 행 (`write <이름> ...`) 의 이름 칸에 정확히 있다 (R2: 부분 문자열로 세지 않는다 · org-delete 와 org-delete-leaf 는 다른 행).""")
rep("""for k in money-issue money-cancel money-refund org-upload b19-edit org-delete; do
  [ "$(count -F "$k" "$AFTER")" -ge 1 ]
done""", """for k in money-issue money-cancel money-refund org-upload b19-edit org-delete org-delete-leaf; do
  [ "$(awk -v k="$k" '$1=="write" && $2==k' "$AFTER" | wc -l | tr -d ' ')" -ge 1 ]
done""")
rep('\necho "GATES_OK m6d"\n', '\n' + block + 'echo "GATES_OK m6d"\n')
open(p, 'w', encoding='utf-8').write(s)
print('patched')
