...f relpath_under(path: str, root: str) -> str:
    rp = os.path.relpath(path, root)
    return rp.replace("\\", "/")

def split_conv_folder(rel_path: str) -> tuple[str, str]:
    # rel_path: CONV_0001_.../CONV_0001_BLOCK_01.txt
    parts = rel_path.split("/")
    conv_folder = parts[0] if parts else ""
    conv_id = ""
    m = re.match(r"^(CONV_\d{4})", conv_folder, re.IGNORECASE)
    if m:
        co...