import sys
PLAN = "/home/madsc/work/insuniverse-temp/.worktrees/admin-rbac/.claude/PRPs/plans/admin-rbac-m9b.plan.md"
src = open(PLAN, encoding="utf-8").read().split("\n")

def find(prefix):
    idx = [i for i, l in enumerate(src) if l.startswith(prefix)]
    if len(idx) != 1:
        sys.exit(f"ANCHOR {len(idx)} matches: {prefix[:60]}")
    return idx[0]

def replace(prefix, new):
    i = find(prefix)
    src[i] = new

def insert_after(prefix, new_lines):
    i = find(prefix)
    src[i + 1:i + 1] = new_lines

def delete(prefix):
    i = find(prefix)
    del src[i]

def sub_in(prefix, old, new):
    i = find(prefix)
    assert src[i].count(old) == 1, f"substring count != 1: {old[:40]}"
    src[i] = src[i].replace(old, new)

exec(open("/home/madsc/work/insuniverse-temp/.git/worktrees/admin-rbac/mccp-gatekit/m9b-r2-ops.py", encoding="utf-8").read())

open(PLAN, "w", encoding="utf-8").write("\n".join(src))
print("PATCH_OK lines=", len(src))
