#!/usr/bin/env python3
"""Pecah SKILL.md: bagian '## Pitfalls learned' (51k char) → references/pitfalls-learned.md.

SKILL.md sudah 101.102 char (batas tool 100.000), jadi patch apa pun ditolak.
Isi tidak hilang — dipindah utuh ke file referensi, SKILL.md menyimpan ringkasan + pointer.
"""
import os

SKILL = "/home/mantapman/.hermes/profiles/atun/skills/social-media/atun-social-automation/SKILL.md"
REF = "/home/mantapman/.hermes/profiles/atun/skills/social-media/atun-social-automation/references/pitfalls-learned.md"

txt = open(SKILL).read()
lines = txt.split("\n")

start = next(i for i, l in enumerate(lines) if l.startswith("## Pitfalls learned"))
# akhir section = '## ' berikutnya
end = next(i for i in range(start + 1, len(lines)) if lines[i].startswith("## "))

isi = "\n".join(lines[start + 1:end]).strip("\n")
header = (
    "# Pitfalls learned (arsip)\n\n"
    "Dipindah dari SKILL.md 27 Sep 2026 karena SKILL.md melewati batas 100.000 karakter.\n"
    "Isi di bawah ini utuh — riwayat temuan/pitfall per pipeline, urut tanggal penulisan.\n"
    "Ringkasan yang masih paling sering dipakai tetap ada di SKILL.md bagian 'Pitfalls inti'.\n\n"
)
os.makedirs(os.path.dirname(REF), exist_ok=True)
open(REF, "w").write(header + isi + "\n")

ringkas = """## Pitfalls inti (ringkas — detail lengkap: `references/pitfalls-learned.md`)

- **Threads maks 500 char — HARD LIMIT.** API menolak caption >500 char saat tayang (`Param text must be at most 500 characters long`), status jadi `error` walau di dashboard tampak `pending`. Pakai `scripts/batasi_caption_threads.py`, tapi lebih baik tulis caption ≤480 char sejak awal (hindari elipsis `...` hasil truncate).
- **FB & LinkedIn: `replies=[]` WAJIB.** Kalau tidak → error `Cannot read properties of undefined (reading 'postId')`.
- **Sukses create ≠ tayang.** Verifikasi dari API: `GET /public/schedule/<id>` → `status`, `scheduleAt`, `account.name`. Respons create balas `{"scheduleId": ...}` (dinormalkan di `repliz_client`).
- **`?accountId=` tidak difilter API** (totalDocs tetap semua); `?status=pending` jalan. Saring akun di sisi klien.
- **Error `media could not be fetched`** = intermiten Repliz walau file 200 di 2 ingress → hapus + create ulang.
- **`connect ETIMEDOUT <ip>:443` pada URL mantapserver** → cek IP: kalau `ingress-*.tailscale.com`, Funnel-nya rusak, bukan akun/URL. `tailscale funnel reset && tailscale funnel --bg 8123`, lalu uji dari jalur internet.
- **`invalid postId: unsupported type schedule`** = post teks ke akun Instagram → hapus atau jadikan image.
- **`scheduleAt` 2099** = placeholder parkir, bukan jadwal sungguhan.
- **Poppins tanpa glyph U+2192** → tanda panah jadi kotak tofu; pakai `•`. Selalu cek slide baru dengan `vision_analyze`/OCR sebelum upload.
- **Cloudflare meng-cache WP REST 30 hari** (`cf-cache-status: HIT`) → verifikasi isi artikel live pakai `context=edit` atau cache-buster `&cb=<ts>`.
- **DILARANG teks CJK** di output apa pun; `cek_teks_cjk()` di `repliz_client` memblokir caption ber-CJK sebelum ke API."""

lines[start:end] = ringkas.split("\n")
open(SKILL, "w").write("\n".join(lines))
print("SKILL.md sekarang:", len(open(SKILL).read()), "char | arsip:", len(open(REF).read()), "char")
