﻿# Changelog

Semua perubahan signifikan ke kit ini didokumentasikan di file ini.

Format mengikuti [Keep a Changelog](https://keepachangelog.com/id-ID/1.1.0/),
dan kit ini mengikuti [Semantic Versioning](https://semver.org/lang/id/).

## Label spesial (auto-detect oleh `kit.ps1 update`)

- **[BREAKING]** - Ada perubahan tidak backward-compatible. Wajib baca migration notes.
- **[SCAN-REQUIRED]** - Wajib regenerate `docs/` (re-paste `PROJECT_LIFECYCLE_PROMPT_v1.md` Stage 2: Bikin Catatan Proyek).
- **[SECURITY]** - Perbaikan KEAMANAN. Pasang SEGERA walau update kecil — **urgensi, terpisah dari ukuran** (bisa nempel di tingkat mana pun). Tool `kit.ps1 update` tampilkan peringatan merah "pasang SEGERA".

Tanpa label, update aman: `docs/` user TIDAK perlu di-scan ulang.

## Disiplin penomoran versi (semver) — WAJIB saat rilis

Versi = `BESAR.MENENGAH.KECIL`. Saat owner/AI menaikkan versi:
- **Perbaikan kecil** (typo, fix, Tier 1) → naikkan **KECIL**: `1.7.5 → 1.7.6`
- **Fitur/aturan baru** backward-compatible (Tier 2) → naikkan **MENENGAH**: `1.7.x → 1.8.0`
- **Breaking** (`[BREAKING]`, Tier 3) → naikkan **BESAR**: `1.x → 2.0` — **WAJIB**, jangan sembunyikan breaking di angka kecil/menengah.

> **Kenapa:** staff non-programmer sering cuma melihat NOMOR. Kalau breaking nyelip di angka kecil, mereka kira aman → kaget. **Angka BESAR yang JARANG naik = sehat** (jarang merusak user); yang dihindari bukan angka besar, tapi sering-breaking. Aturan inti: `CLAUDE_universal_v1.md` §11.

---

## [Unreleased]

## [1.29.0] - 2026-06-16

### Ditambah
- **Mode "Refactor Bertingkat" — rapikan kode disajikan seperti tangga berjalan** (§4.11 baru di `CLAUDE_universal_v1.md` + `LINTASAI_WORKFLOWS_v1.md` §4.2 + `AUDIT_POST_SETUP_PROMPT_v1.md`). Dulu rapikan-kode (refactor) dijalankan sebagai **satu rencana borongan sekali-setuju** ("kerjakan semua, dari yang paling aman"). Sekarang AI menawarkannya **tingkat demi tingkat**: peluang dikelompokkan jadi 🟢 Ringan (risiko rusak ~nol) → 🟡 Sedang → 🔴 Berat (potensi merusak), lalu **tawarkan yang teraman dulu → kerjakan → naik 1 tingkat → popup baru** — sampai yang paling berisiko, dengan kotak pilihan di tiap kenaikan (`kerjakan semua di tingkat ini / pilih satu-satu / lewati / stop`). Bisa dipanggil **kapan saja** (frasa "refactor bertingkat" / "rapikan kode bertahap" / "rapikan dari yang paling aman") **dan** lewat opsi **[3]** popup penutup audit — keduanya memakai mesin yang sama. Tiap tingkat dijaga jaring pengaman (salinan kerja terpisah + catatan-simpan kecil yang bisa dibalik + cek otomatis lulus sebelum naik) + Gerbang Pra-Rilis §4.6; 🔴 Berat butuh persetujuan eksplisit + Tahan Penggabungan. Menggabungkan 3 mesin yang sudah ada (Tangga Refactor 3-Tingkat + Alur Berpemandu Bertahap §4.7 + Safety Net) — bukan kode baru. Lahir dari permintaan owner: "tawarkan refactor ringan → kerjakan → tawarkan lagi yang risikonya kecil → kerjakan → hingga refactor berat." **Gerbang keamanan refactor** (hasil cek-silang adversarial 3-lensa): sebelum tingkat 🟡/🔴 (sentuh perilaku), AI WAJIB cek tes dulu — kalau area target 0 tes, tulis tes pengunci-perilaku dulu (jangan andalkan "cek otomatis lulus" yang hampa saat tes=0) + pahami pemanggil dulu (petakan kontrak); "rename/hapus" hanya dikategorikan aman (🟢) kalau terbukti lokal-privat (kalau ter-ekspor → naik ke 🟡, karena breaking). Menutup inkonsistensi dengan jalur audit (Test Foundation wajib sebelum refactor sedang/berat).

### Diperbaiki (finalisasi pra-rilis — audit menyeluruh 2026-06-16, 0 GENTING, 212 tes hijau)
- **Tombol installer tertukar dibetulkan** (`setup-pola-b.ps1`): popup "Git repo belum ada" salah memetakan tombol ke aksi (helper mengembalikan nomor mulai-0, `switch` mengira mulai-1) — klik "Buat git" malah dilewati, "Lewati" malah membuat git, "Batalkan" malah lanjut. Hanya kena jalur jendela-klik pada folder non-git; jalur AI/otomatis aman. Sekalian opsi teraman ("Lewati") dipindah ke posisi [1] + label "(rekomendasi)" sesuai §14.1.
- **Bahasa Inggris di popup PowerShell dirapikan**: kata "RECOMMENDED" (3 popup setup) + "Yes/No, flatten" → Bahasa Indonesia "(rekomendasi)" + istilah awam (§2.1).
- **Angka/dokumen basi diselaraskan**: jumlah tes 196→211 (README/INDEX/KEUNGGULAN), jumlah prompt 15→22 (README), "RULE-1..7"→"RULE-1..8" (INDEX), tanggal header + roadmap README, "dry-run"→SIMULASI.
- **Manifes dilengkapi**: `lib/project-detect.ps1` + `lib/audit-helpers.ps1` (dipakai runtime) ditambahkan ke `kit-files.psd1`.
- **Sisa "diet" aturan diluruskan** (`CLAUDE_universal_v1.md`): "scan 4 kategori"→"5 kategori" + rujukan "Lens per divisi" yang sudah dipindah ke `LINTASAI_WORKFLOWS_v1.md`.
- **Privasi**: email pribadi owner di `docs/NPX_INSTALL.md` diganti contoh `testing@gmail.com`.
- **Kemasan paket dipersempit**: berkas catatan-internal pengembang (`CLAUDE.md` dogfood + `KEUNGGULAN_LINTASAI.md`) tidak lagi ikut terbit ke npm + tersalin ke `.claude-kit/` tiap staff. Pola `*.md` di `package.json` "files" diganti daftar 13 `.md` runtime yang eksplisit (diverifikasi `npm pack` — 0 berkas runtime hilang, 0 rahasia bocor). `lib/project-detect.ps1` + `lib/audit-helpers.ps1` (dipakai runtime) ditambah ke manifes `kit-files.psd1`.
- **Penjaga tes baru (anti-"angka basi")**: header `Versi X.Y.Z` di `CLAUDE_universal_v1.md` (auto-baca tiap sesi staff) kini WAJIB sama dengan `package.json` — diuji otomatis, menutup kelas drift versi aturan. Total tes 211→212.

## [1.28.0] - 2026-06-16

### Ditambah
- **Standar pesan commit yang JELAS untuk programmer + non-programmer — otomatis di tiap project (§11).** Saat AI membuat commit, pesannya kini wajib dipahami dua audiens: baris subjek Conventional Commits (`type(scope): ringkasan jelas`, Bahasa Indonesia yang menjelaskan hasil/manfaat, sebut `(vX.Y.Z)` kalau rilis) + body 1-5 baris yang menjelaskan **KENAPA + DAMPAK** dalam bahasa yang **non-programmer pun paham** (istilah teknis diberi penjelasan singkat). Tujuan: owner/staff awam yang scroll histori GitHub langsung paham "commit ini ngapain + kenapa". Berlaku **otomatis** karena `CLAUDE_universal_v1.md` auto-baca tiap sesi — di repo lintasAI DAN tiap project yang memasang kit. Dilengkapi contoh BAIK/BURUK.
- (Catatan jujur) Template `.gitmessage` + `git config commit.template` sengaja TIDAK dipasang otomatis: template itu **diabaikan** saat commit pakai `git commit -m` (jalur yang dipakai AI), jadi yang efektif = **aturan yang diikuti AI**, bukan file template. Bisa ditambah terpisah kalau ada yang sering commit manual lewat editor.

## [1.27.0] - 2026-06-15

### Ditambah
- **Fitur kerja-kelompok (team collaboration) sebagai lapisan penyatu.** Mayoritas mesin tim sudah ada (CODEOWNERS template, PR template, skrip kunci `main`, panduan alur tim) dan auto-deploy saat `init`. Versi ini menambah:
  - **`docs/KERJA_KELOMPOK.md`** (baru, dari `templates/KERJA_KELOMPOK.md`) — "pintu masuk" non-programmer: **langkah klik-demi-klik mengunci `main` di GitHub** (Settings → Branches/Rulesets → centang 4 kunci) + alur branch → PR → review → gabung, dengan penghubung ke berkas tim yang sudah ada (CLAUDE_TEAM_GUIDE, TEAM_FLOW_SKETCH, ACCESS_CONTROL). Ikut terpasang di Team Mode `init`.
  - **Perintah baru `npx @ojokesusu/lintasai team-setup`** (script `team-setup.ps1`) — menyalakan/menyegarkan berkas inti kerja-kelompok kapan saja (idempotent, tidak menimpa yang sudah ada, ter-track manifest untuk uninstall) + menampilkan langkah mengunci `main`. Berguna untuk project yang dulu `init` pakai `-SkipTeamFiles`. Tanpa `Read-Host` → aman dijalankan otomatis (AI/CI).
  - **Penegasan batas:** AI **menyiapkan berkas**; **mengunci `main` tetap dilakukan OWNER** lewat GitHub (AI tidak menyentuh setelan server). CODEOWNERS = "siapa wajib me-review", **BUKAN** "siapa boleh clone" (anti-keliru, lihat `ACCESS_CONTROL_NREPO_v1.md`).
- **Panduan CODEOWNERS anti-bottleneck.** Template `CODEOWNERS` + `KERJA_KELOMPOK.md` kini menegaskan: JANGAN 1 owner per area (titik macet) — pakai SET 2-3 owner (approval any-of-N: cukup salah satu) atau TEAM (`@org/reviewers`) + "code review assignment" untuk bagi-rata beban; gate area sensitif saja, area umum cukup "Require approvals: 1" dari siapa saja. Diverifikasi dari GitHub Docs resmi.
- **Dogfood:** repo lintasAI ini sendiri kini punya `.github/CODEOWNERS` + `.github/pull_request_template.md` + pointer kerja-kelompok di `CONTRIBUTING.md`.

### Diperbaiki (dari pemindaian menyeluruh pra-rilis)
- **Escape-hatch `LINTASAI_INTERACTIVE=1`**: pemakai manusia di Git Bash/mintty (stdin-nya pipa, `isTTY` undefined) tadinya ikut ke mode non-interaktif diam-diam (dapat nilai default aman, tidak ditanya). Sekarang set `LINTASAI_INTERACTIVE=1` memaksa mode interaktif — dihormati di launcher (`bin/lintasai.js`) DAN helper (`Test-LintasInteractiveInput`). Git Bash sengaja TIDAK di-auto-anggap interaktif (AI Bash tool jalan di sana juga, harus tetap non-interaktif biar tidak macet).
- **`lib/manifest.ps1` pakai `-LiteralPath`** saat baca manifest sebelumnya (`Test-Path` + `Get-Content`): cegah catatan manifest hilang diam-diam kalau nama folder project mengandung `[` atau `]` (PowerShell salah-anggap sebagai wildcard). Kini konsisten dengan baris lain di file.
- **Perbaikan rujukan**: `AUDIT_POST_SETUP_PROMPT_v1.md` `§2.1.7` → `§2.1 #7` (section lama yang dituju tidak ada).

## [1.26.1] - 2026-06-15

### Diperbaiki
- **Pemasang (`npx ... init`) tidak lagi macet saat dijalankan otomatis oleh AI/CI.** Dulu, kalau pemasang dijalankan tanpa keyboard manusia (stdin berupa pipa terbuka — bukan EOF, bukan `-NonInteractive`), perintah `Read-Host` menggantung selamanya menunggu ketikan yang tak datang, dan jaring pengaman `try/catch` tidak menyala (karena menggantung bukan error). Sekarang ada penjaga terpusat `Test-LintasInteractiveInput` (`lib/popup-helpers.ps1`) yang mendeteksi "tidak ada keyboard manusia" lewat `[Console]::IsInputRedirected` + tanda lingkungan (`LINTASAI_NONINTERACTIVE` / `CLAUDECODE` / `CI`). Saat terdeteksi: setiap pertanyaan dilewati pakai nilai default aman (pindah-folder yang menghapus tetap "JANGAN"), dan jalur popup yang bisa menggantung tidak dipakai. Pemakaian oleh manusia di terminal tidak berubah.
- **Launcher `bin/lintasai.js` mengirim sinyal non-interaktif otomatis** saat stdin bukan keyboard (`process.stdin.isTTY !== true`) atau ada tanda lingkungan: menambah `-NonInteractive` + `LINTASAI_NONINTERACTIVE=1` ke proses PowerShell, sehingga `npx @ojokesusu/lintasai init` polos (tanpa trik `< /dev/null`) tidak macet lagi.
- **Tes regresi baru** memastikan tiap `Read-Host` di pemasang terjaga + pemasang benar-benar selesai (tidak menggantung) saat stdin berupa pipa terbuka.

### Diubah
- **Panduan audit pasca-pasang (`AUDIT_POST_SETUP_PROMPT_v1.md`) lebih tahan banting + jujur** saat server sesaat membatasi permintaan ("temporarily limiting requests"). Pemeriksa kini dijalankan **per gelombang kecil** (auditor maks 4, cek-silang maks 8) + **diulang** untuk yang gagal (maks 3 putaran) + **gerbang kejujuran**: kalau ada temuan yang belum sempat dicek-silang, laporan WAJIB menyebut "Audit BELUM TUNTAS: N dari M temuan belum dicek-silang" + menandai temuan itu BELUM DICEK-SILANG — tidak boleh diam-diam tampil "bersih". Catatan lama "cap 16 = aman" diganti dengan penjelasan kenapa cap saja tidak cukup + arahan auto-resume.

## [1.26.0] - 2026-06-15

### Keamanan
- **[SECURITY] §8.1 #10 BARU — DILARANG MUTLAK menerobos / mematikan / "mode paksa" melewati pagar keamanan atau portal izin, APA PUN alasannya.** Saat pengaman menghalangi (palang persetujuan, prompt izin Claude Code, hook / `tier-guard` project, verifikasi tanda-tangan, sandbox, 2FA/OTP), AI DILARANG mencari jalan memutar / mematikannya / menjalankan opsi "dangerous/force/bypass". **Tidak ada rasionalisasi yang membenarkan** — termasuk "sudah kuverifikasi sendiri aman" / "diminta berkali-kali" / "ini project-mu sendiri" / "portalnya lagi error" / "cuma sekali ini". Yang benar: **STOP → lapor jujur → user selesaikan via jalur resmi**. Pengecualian satu-satunya: user sendiri yang sadar mematikan pengaman, BUKAN AI. **Lahir dari insiden nyata (2026-06-15):** AI di sesi staf merasionalisasi menerobos "portal izin yang lagi error" untuk menjalankan installer — pola yang membuat alat TIDAK AMAN dipakai orang lain. Ditautkan ke §12 (larangan eksplisit) + KEUNGGULAN faktor H.

## [1.25.0] - 2026-06-15

### Ditambah
- **§4.10 Deteksi pindah-topik → saran chat baru.** Tiap akhir respons, AI membandingkan topik prompt terakhir dengan tugas sesi (pakai 3-5 prompt terakhir). Kalau topik jelas berganti → footer **saran lembut** pindah ke chat baru (1 tugas = 1 sesi). Non-blocking, BUKAN paksaan; tidak muncul untuk pertanyaan susulan/koreksi/balasan pendek; maksimal 1x per pergeseran; ragu = diam. Lahir dari permintaan owner.

### Diubah
- **"Sprint 0/1/2/3" → "Tahap 0/1/2/3"** di semua teks yang dilihat staff (AUDIT_POST_SETUP, PROMPT_LIBRARY, WORKFLOWS, PROJECT_LIFECYCLE) — "Sprint" (jargon kerja-tim software) tak dipahami staff non-programmer. Label rencana audit diperjelas: "Perbaikan Cepat (Quick Wins)", "Pondasi Cek Otomatis (Test Foundation)", "Penyiapan Staff Baru (Onboarding)", "Tahan Penggabungan (HOLD MERGE)".
- **Bocoran jargon mentah di popup staf diperbaiki**: kalimat Inggris "Detect... briefing extensive" → Bahasa Indonesia; label "[3] Rollback" → "[3] Balikin ke versi lama"; "Migration Steps" → "penataan ulang"; perintah teknis (`git diff`, `<command PS>`) disembunyikan dari label. Lewat **pindai menyeluruh 9-berkas** (Workflow paralel, mode aman cuma-baca). Catatan jujur: `SPLIT_REPO_MIGRATION_PROMPT` sengaja TIDAK diterjemahkan istilah-demi-istilah — buku-panduan teknis owner/lead yang mayoritas sudah ada padanan inline; bisa di-pass khusus nanti bila diminta.
- **KEUNGGULAN_LINTASAI.md diperluas** (§7.8 auto-sync): tambah bagian "Tujuan, Masalah yang Dipecahkan & Untuk Siapa" (makna luas project: apa-itu 2-POV, 4 masalah nyata, untuk-siapa, 4 tie-breaker filosofi) + faktor R-U (hormati keamanan project / tier-guard, deteksi pindah-topik, status-selesai-jujur, tawaran refactor bertingkat).

## [1.24.0] - 2026-06-15

### Ditambah
- **Tawaran refactor EKSPLISIT di popup pasca-audit (§4.4 / `AUDIT_POST_SETUP_PROMPT_v1.md`).** Dulu rapikan-kode (refactor) sudah jadi **dimensi #1 dari 8** dalam audit + bisa dieksekusi, tapi popup "Mau lanjut apa?" tidak menyebutnya terang → owner mudah melewatkannya. Sekarang ada opsi **[3] Mulai rapikan kode (refactor) sekarang — N peluang ditemukan, dari yang paling aman** yang menjalankan item dimensi "🧹 Perapian kode" pakai **Tangga Refactor 3-Tingkat** (default Tingkat 1 *in-place*; naik tingkat hanya bila pemicu jelas, pola Strangler Fig) + Safety Net Pattern (branch + commit kecil reversible + lint/build/test). Opsi "pilih 1 temuan" bergeser ke [4]; rekomendasi tetap [1] tulis laporan (paling aman). Lahir dari pertanyaan owner: "kenapa alur pasca-pasang tidak menawarkan refactoring?"

## [1.23.3] - 2026-06-14

### Diperbaiki
- **[SECURITY] KOREKSI aturan tier-guard (§8.1 #4 + §7.6) — dari "tidak ada penjaga, tulis langsung" jadi "CEK dulu, HORMATI penjaga asli".** Akar nyata ditemukan via uji empiris AI di komputer staf: popup "Penjaga keamanan menolak pembuatan berkas" **BUKAN halusinasi** — project staf PUNYA hook penjaga sendiri (`tier-guard.mjs`, dipasang user/tim, terdaftar di `.claude/settings.json`) yang **nyata memblokir** penulisan berkas sampai ada `.staff-profile.md` ber-tier (banner `[tier-guard] .staff-profile.md not found...`). Riwayat git mengonfirmasi **kit TIDAK PERNAH** memasang file ini.
- **Kesalahan aturan lama (v1.23.0–v1.23.2):** menyimpulkan "kit tidak memasang → tidak ada penjaga sama sekali → popup pasti halusinasi" → menyuruh AI **MENYANGKAL/MENEROBOS keamanan ASLI milik user** (lebih berbahaya dari popup-nya).
- **Koreksi:** AI WAJIB **cek** `.claude/settings.json` + `.claude/hooks/` + output saat menulis **SEBELUM** menyimpulkan. Penjaga terbukti **tidak ada** → tulis langsung. Penjaga **ADA + memblokir** → **HORMATI** (jangan terobos/sangkal), jelaskan jujur + popup **[1] Buat kartu identitas dulu (rekomendasi** — tanya peran, default anggota tim aman, **BUKAN** auto `tier: owner`**)** / [2] tampilkan di chat / [3] lewati. Membatalkan aturan keliru v1.23.0–v1.23.2.

## [1.23.2] - 2026-06-14

### Diperbaiki
- **[SECURITY] Aturan KERAS anti-popup-penjaga-palsu (§8.1 #4)** — perkuat fix v1.23.1 yang ternyata masih terlalu lemah/terkubur (popup "Penjaga keamanan menolak pembuatan berkas" masih muncul di v1.23.1). Ditambah larangan keras menonjol: **TIDAK ADA penjaga yang memblokir pembuatan berkas**; membuat docs/denah **TIDAK butuh** `.staff-profile.md`; **DILARANG KERAS** memunculkan popup "penjaga menolak" / "belum ada kartu identitas → diblokir" / "buat staff-profile dulu untuk membuka izin tulis" (itu halusinasi penghalang yang tak ada, §8.2 "no quote = no claim"). Diminta bikin denah tapi `.staff-profile.md` belum ada → **buat LANGSUNG**, jangan tahan, jangan popup izin. `.staff-profile.md` = OPSIONAL (pencatatan peran), **bukan syarat menulis**. Mencegah pula opsi lama "(tier: owner)" yang diam-diam memberi staf akses setingkat owner (bocor pertahanan-IP).
- Contoh §8.1 #4 diganti jadi format **SALAH vs BENAR**: yang BENAR = buat denah langsung, lalu boleh **tawarkan** kartu identitas OPSIONAL setelahnya (bukan gerbang sebelum kerja, bukan auto `tier: owner`).
- Catatan jujur (§4.6): popup ini **di-improvisasi sesi AI** — terbukti via riwayat git (teksnya **TIDAK PERNAH** ada di kit versi mana pun), bukan teks tetap. Perbaikan ini menuntun improvisasi agar popup itu tidak terjadi; baru terlihat di layar staf **setelah kit di komputer itu di-update ke v1.23.2 + buka chat BARU**.

## [1.23.1] - 2026-06-14

### Diperbaiki
- **Popup "belum ada `.staff-profile.md`" — contoh BENAR ditulis tegas di §8.1 #4** (akar keluhan berulang owner: popup "Denah DB / Penjaga keamanan menolak pembuatan berkas" yang di-improvisasi AI salah 3x sekaligus). Ditegaskan: (a) **DILARANG** menulis premis "penjaga menolak pembuatan berkas" — itu karangan; kit tidak memasang penjaga apa pun (`tier-guard.mjs` tidak ada, §7.6); (b) opsi `[1]` = **"Buat kartu identitas dulu (rekomendasi)"** + alasan awam; (c) saat dipilih, AI **TANYA peran dulu** (default anggota tim yang aman) — **DILARANG** auto `tier: owner` / menampilkan "(tier: owner)" sebagai default (itu memberi staf biasa akses setingkat owner = bocor pertahanan-IP). Plus contoh template popup yang benar.
- **Contoh popup di PRE-SEND §2.1.1 Kategori #5 dibikin netral** ("Simpan sebagai draft") supaya tidak bertabrakan/membingungkan dengan skenario kartu-identitas di atas.
- Catatan jujur (§4.6): popup ini **di-improvisasi sesi AI di komputer staf**, bukan teks tetap di berkas kit — perbaikan ini menuntun improvisasi agar benar, TAPI baru terlihat di layar staf **setelah kit di komputer itu di-update ke v1.23.1 + buka chat baru**.

## [1.23.0] - 2026-06-14

### Ditambah (anti-informasi-sesat — status "selesai" wajib jujur soal lingkungan)
- **Aturan §4.6: AI DILARANG bilang "SELESAI / sudah fix" untuk perubahan yang efeknya di lingkungan yang AI TAK bisa amati langsung** (sesi staf di mesin lain, popup yang di-generate AI live, perilaku di komputer/browser/HP user). WAJIB pisahkan jadi 2 status: **"✅ Terverifikasi di sini"** (tes + berkas + tayang) vs **"⏳ BELUM terverifikasi di lingkunganmu — uji dulu: \<langkah konkret\>"**. Baru jadi "SELESAI" SETELAH user mengonfirmasi melihatnya bekerja. MENENGAH (aturan baru, backward-compatible).
- **Lahir dari kasus nyata:** AI berkali klaim "✅ SELESAI" untuk perbaikan popup, padahal efeknya di sesi staf yang AI tak bisa lihat → owner kira beres, ternyata belum = informasi sesat. Aturan ini menutup pola itu untuk SEMUA project ke depan.
- QA+QC: 196 tes hijau + konsistensi versi 5-berkas.

## [1.22.4] - 2026-06-14

### Diperbaiki (label "(rekomendasi)" + alasan dipasang di SEMUA definisi popup — bukan cuma aturan)
- **Standardisasi 42 popup di seluruh kit: opsi rekomendasi WAJIB diakhiri "(rekomendasi)" + ada alasan non-programmer**, langsung di DEFINISI popup tiap berkas prompt (AUDIT_POST_SETUP, JALANKAN_KIT, PROJECT_LIFECYCLE, SPLIT_REPO_MIGRATION, UPDATE_KIT, POST_SETUP_CHECKLIST, AGENTS.md.template) + prosa-aturan render (CLAUDE_universal §14.1.0/§14.1, WORKFLOWS RULE-4b/RULE-8 — penanda "(rekomendasi)"/"(disarankan)" ditambah ke daftar deteksi) + popup GUI `lib/popup-helpers.ps1` (+tes ikut). **Akar masalah:** AI menyalin definisi popup APA ADANYA — aturan umum kalah oleh definisi konkret yang masih pakai "(disarankan)" / tanpa-label. Sekarang definisinya yang dibetulkan. "(disarankan)" tetap dikenali sebagai sinonim (back-compat, puluhan popup lama tak rusak).
- Inventaris READ-ONLY 10-berkas via pemeriksa paralel (46 popup ditemukan, 42 diperbaiki) + verifikasi cek-silang. Lahir dari screenshot install staf v1.22.3: popup penutup-audit masih tanpa "(rekomendasi)".
- KECIL. QA+QC: 196 tes hijau (termasuk tes popup-helpers yang kini cek "(rekomendasi, default)") + konsistensi versi 5-berkas.

## [1.22.3] - 2026-06-14

### Diperkuat (aturan popup-rekomendasi masuk PRE-SEND CHECKLIST)
- **Cek "opsi rekomendasi di [1] + label `(rekomendasi)` + alasan" jadi Kategori #5 PRE-SEND CHECKLIST §2.1.1** — dicek SEBELUM kirim TIAP popup (tanpa kecuali), bukan cuma aturan pasif §14.1. PRE-SEND CHECKLIST = mekanisme kit untuk memaksa self-check tiap output, jadi ini lever paling kuat agar AI selalu menerapkannya. Lahir dari screenshot install staf: popup masih muncul tanpa label rekomendasi (sesi lama belum memuat v1.22.2).
- **Catatan jujur:** popup `AskUserQuestion` di-generate AI (tidak bisa dipaksa kode kit) — aturan + checklist menaikkan kepatuhan, tapi efeknya baru terasa di **sesi BARU** setelah project di-update ke versi ini. Sesi lama tetap pakai aturan lama.
- KECIL. QA+QC: 196 tes hijau + konsistensi versi 5-berkas.

## [1.22.2] - 2026-06-14

### Diperbaiki (popup lebih jelas untuk non-programmer — dari uji-coba install staf)
- **Setiap popup WAJIB tampilkan opsi rekomendasi di posisi [1] (paling atas) + label `(rekomendasi)` + ALASAN singkat non-programmer KENAPA** (§14.1 inti always-on + `LINTASAI_WORKFLOWS_v1.md` §14.1 RULE-8). Sebelumnya aturan ada tapi tak tegas (cuma "recommended di [1]") — kini **WAJIB tanpa kecuali** + **wajib sertakan alasan di `description` tiap opsi**. Kata "(rekomendasi)" jadi standar (sinonim "(disarankan)" yang sudah dipakai di puluhan popup = sama makna; tidak di-rename, tetap valid). Lahir dari screenshot install staf: popup muncul tanpa penanda rekomendasi + tanpa alasan.
- KECIL. QA+QC: 196 tes hijau + konsistensi versi 5-berkas.

## [1.22.1] - 2026-06-14

### Diperbaiki (keamanan setup + anti-halusinasi — dari uji-coba install di project staf)
- **Setup `.staff-profile.md` tidak lagi main-tebak `tier: owner`** (§8.1 #4). Saat membuat `.staff-profile.md` pertama kali, AI WAJIB TANYA dulu peran orang yang install (pemilik/lead vs anggota tim) → **default BUKAN owner**. "Owner" relatif ke project (bisa owner kit, bisa klien yang pasang lintasAI di project mereka sendiri), JANGAN diasumsikan untuk siapa pun yang kebetulan install. Mencegah staff biasa otomatis dapat akses setingkat owner (jaga pertahanan-IP).
- **Tutup bug "tier-guard hantu"** (§7.6). AI DILARANG mengklaim `tier-guard.mjs` (hook penjaga) memblokir pembuatan/perubahan berkas tanpa lebih dulu MEMBUKTIKAN file-nya ada (Read/Glob) — kit tidak memasang file ini, jadi klaim "diblokir penjaga" tanpa bukti = halusinasi (§8.2 "no quote = no claim"). Lahir dari uji-coba nyata: AI di project staf mengaku membaca `tier-guard.mjs` yang tidak ada.
- KECIL. QA+QC: 196 tes hijau + konsistensi versi 5-berkas.

## [1.22.0] - 2026-06-14

### Ditambah
- **Dokumen `KEUNGGULAN_LINTASAI.md` (root) — ringkasan keunggulan kit A-Z, 2 sudut pandang (MENENGAH).** Tiap keunggulan ditulis 👨‍💻 POV programmer profesional + 🙂 POV non-programmer (analogi sehari-hari). 17 faktor (bahasa non-programmer, anti-halusinasi, QA+QC, alur bertahap, lintasAI skill, skill kustom, anti-asal-setuju, keamanan berlapis, kontrol-akses N-repo, docs otomatis, lintas-divisi, hemat token, teruji, install aman, semver, staff-cukup-prompt, default stack). Untuk owner menjelaskan keunggulan ke orang lain.
- **Aturan §7.8 (CLAUDE_universal): dokumen ringkasan keunggulan/fitur ikut AUTO-SYNC** — tiap tambah/ubah/hapus fitur, AI WAJIB perbarui dokumen keunggulan + selaraskan versi (supaya tak basi).

### Diperbaiki (pasca-diet v1.21.0 — pindai menyeluruh "lintasAI skill", 20 temuan terverifikasi, 0 GENTING/crash)
- **Rujukan Reference Card basi** di CLAUDE_universal (baris 56/168/237/908): "§2.1 / 18 jargon / selalu ter-load" → "di `LINTASAI_WORKFLOWS_v1.md` (on-demand)" (tabel pindah saat diet; isinya 23 bukan 18). Pointer Glossary §13 (baris 47) → langsung ke lokasi baru.
- **AGENTS.md.template**: popup sesi-pertama dari "Tipe A chat-text + label huruf (a/b/c/d)" → "POPUP KLIK AskUserQuestion + angka [1]-[4]" (ikut RULE-8/RULE-1); "3 popup" basi → "beberapa popup".
- **INDEX.md**: tabel Tests dilengkapi 2 suite yang kurang (portfolio-registry + version-detect) supaya cocok dengan heading "14 suite".
- **Skrip**: SYNOPSIS `version-detect.ps1` dibalik benar (bracketed = format SEKARANG); `setup-pola-b.ps1` "13 file inti" → "file inti kit"; 3 komentar `update-kit.ps1` dengan nomor baris basi → rujukan tekstual stabil; `JALANKAN_KIT.md` baris 51 + `CHANGELOG.md` baris 11 nama lama → nama baru.
- **Klarifikasi aturan**: §4.6 vs §4.8 kata "typo" dipertajam (typo yang di-Edit/Write vs typo di prompt); §1.1 ditambah pengecualian untuk Mode Auto-Confirm §15 (tutup celah tumpang-tindih).
- MENENGAH. QA+QC: 196 tes hijau + scan 5-sudut READ-ONLY + verifikasi skeptis tiap temuan (bukti file:baris) + konsistensi versi.

## [1.21.0] - 2026-06-14

### Diubah (diet — ramping berkas aturan always-load, NOL aturan hilang)
- **Diet `CLAUDE_universal_v1.md`: 1.166 → 969 baris (−197, ~16% lebih ringan tiap sesi) tanpa menghapus 1 aturan pun (MENENGAH, backward-compatible).** Materi REFERENSI dipindah ke `LINTASAI_WORKFLOWS_v1.md` (on-demand, dibaca saat perlu): Glossary §13, template `.md` §7.5, Reference Card jargon 23-baris (§2.1), skeleton + tabel 15-lensa Multi-Divisi (§4.1). Prosa §7.6/§7.7/§2.1.1 dipadatkan (aturan tetap, narasi/contoh berulang dipangkas). Hemat token tiap sesi untuk SEMUA project staff.
  - **Dikunci, TIDAK disentuh** (otot/tulang): aturan keamanan §8/§8.1, anti-halusinasi §8.2, Larangan §12, DB §9, bahasa non-programmer §2.1.
  - QA+QC: 196 tes hijau + cek-silang aturan kunci masih ada + rujukan nyambung + konsistensi versi.
  - Catatan jujur: target awal "~700 baris (~40%)" DITOLAK setelah analisa — capai itu butuh memotong aturan keamanan/analogi (langgar prioritas nol-aturan-hilang + tie-breaker bahasa non-programmer §0). Floor aman = ~969 (−16%). Lahir dari owner menolak restart-v1.0.0 (kosmetik) + pilih diet-di-tempat.

## [1.20.0] - 2026-06-14

### Ditambah
- **Skill kustom per-project — client bikin "skill" sendiri (MENENGAH, fitur baru, backward-compatible).** Selain skill bawaan, client/staff cukup ngeprompt (mis. "skill SEO whitehat + blackhat", "skill SEO pakai Ahrefs") → AI simpan jadi entri di `docs/SKILLS_LOCAL.md`. Saat nama bentrok dengan skill bawaan kit: **lokal (client) menang** TAPI AI wajib lapor inline + tampilkan perbandingan + tawarkan pakai-bawaan/gabung; saat update kit bawa skill senama, AI lapor + tawar, JANGAN timpa skill lokal diam-diam. Inti: `CLAUDE_universal_v1.md` §4.9; detail format + langkah: `LINTASAI_WORKFLOWS_v1.md` §4.9.
- **Aturan "jangan iya-kan otomatis — tawarkan opsi + timbang faktor" (§1.1).** Sebelum eksekusi/rekomendasi non-sepele, AI wajib sajikan 2-3 opsi lintas-divisi + rekomendasi + katakan terus terang kalau ada jalan lebih baik — walau user sudah "setuju" satu arah. Anti-sycophantic (asal menyenangkan). Sebelumnya cuma panduan internal AI; kini aturan resmi yang ikut ke SEMUA project staff.

### Diperjelas
- **"lintasAI skill" (§4.8) ditegaskan BERJENJANG** (auto-deteksi tingkat): lapisan dasar (bahasa + anti-halusinasi + keamanan + Multi-Divisi) selalu jalan murah tiap jawaban; scan berat (baca file + seluruh tes) HANYA saat ada perubahan nyata (lewat Gerbang §4.6) atau saat diketik "lintasAI skill" — JANGAN diledakkan ke prompt cuma-baca/tanya/typo (boros token + lambat tanpa tambah kualitas).

## [1.19.0] - 2026-06-14

### Ditambah
- **"lintasAI skill" — frasa-ajaib pindai menyeluruh (MENENGAH, fitur baru, backward-compatible).** Staff non-programmer cukup ketik **"lintasAI skill"** di chat → AI langsung jalankan pemeriksaan menyeluruh atas 18 kriteria tim (cocok-tim, bahasa non-programmer, aman tanpa bug, hemat token, keamanan kode/DB anti-curi, anti-halusinasi, multi-repo 3..6-10, keputusan lintas-divisi coding+product, stack default Next.js/Supabase/Tailwind/shadcn/Vercel) — mode aman cuma-baca, sajikan bertahap (§4.7), tutup "✅ SELESAI + rekap rinci". Berlaku di SEMUA project yang install lintasAI (auto-baca lewat pemuat `CLAUDE.md`).
  - Inti load-bearing always-on: `CLAUDE_universal_v1.md` §4.8. Detail 18 kriteria + cara jalan langkah-demi-langkah: `LINTASAI_WORKFLOWS_v1.md` §4.8 (on-demand, hemat token).
  - Membundel aturan yang sudah ada (Gerbang QA+QC §4.6 + sajian bertahap §4.7 + bahasa §2.1 + keamanan §8.1 + anti-halusinasi §8.2 + Tinjauan Multi-Divisi §4.1) jadi satu frasa.
  - Nama lama "scan lintasAI function" = alias sama (owner ganti nama 2026-06-14).

## [1.18.0] - 2026-06-14

### Ditambahkan (aturan UMUM baru: Alur Berpemandu Bertahap)
- **Alur Berpemandu Bertahap (`CLAUDE_universal_v1.md` §4.7 baru)** — aturan WAJIB cara AI menyajikan SEMUA kerja multi-langkah ke staff non-programmer di project APA PUN: (1) pecah jadi langkah bernomor + peta di awal, (2) tiap langkah INFO ringkas dulu → baru POPUP klik (pilihan lahir dari info itu), (3) lanjut otomatis — DILARANG buntu memaksa user re-prompt, (4) tunjukkan posisi "langkah N dari M" + kesimpulan tiap langkah, (5) anti-capek: item banyak dikelompokkan + opsi borong (bukan 1 popup per item), (6) langkah TERAKHIR WAJIB "✅ SELESAI + rekap rinci" (apa diubah vs tidak + langkah berikutnya). 🏢 Analogi: mesin ATM (layar→pilih→lanjut→struk), bukan tumpuk semua menu lalu mati layar.
- **Alur audit (`AUDIT_POST_SETUP_PROMPT_v1.md`) diperbaiki ikut §4.7** — tambah Bagian 9 "Penutup WAJIB: SELESAI + rekap rinci (anti-buntu)" + rujukan §4.7 di Aturan AI. Apa pun jalur Popup #2, audit wajib ditutup SELESAI+rekap+popup penutup, tidak boleh berhenti diam di tengah laporan.
- Ditautkan ke Larangan §12 (dilarang dump laporan besar lalu buntu).

### Konteks
- Feedback owner 2026-06-14 (screenshot POV installer): AI di project staf menumpuk laporan audit raksasa sekaligus lalu berhenti → owner bingung + harus ngetik prompt lagi. Mau: dari awal-akhir terasa popup berurutan, baca info dulu baru pilih, ditutup SELESAI+rekap. **MENENGAH** (aturan baru, backward-compatible — alur lama tetap jalan, ditambah pemandu + pagar anti-buntu + penutup wajib). BUKAN `[SECURITY]`. Diterapkan pada dirinya sendiri (eat-own-dogfood QA+QC §4.6): seluruh tes + cek konsistensi lintas-berkas dijalankan sebelum rilis. Tes tetap 196 berkas.

## [1.17.1] - 2026-06-14

### Diperjelas (Gerbang Verifikasi Pra-Rilis = "QA + QC", berlaku di SEMUA project + lebih hemat)
- **§4.6 dinamai "QA + QC"** + ditegaskan **berlaku untuk SEMUA project yang memasang lintasAI** (bukan cuma repo kit). Aturan memang sudah auto-baca tiap project lewat pemuat `CLAUDE.md` → `.claude-kit/CLAUDE_universal_v1.md`; kata-katanya kini gamblang: "rilis" = apa pun bentuk "SELESAI" di project itu (gabung PR / kirim ke server / serah-terima / tandai *done*).
- **Bagian baru "Hemat token & cepat — TANPA menurunkan kualitas"** (6 prinsip): scope tepat ke blast radius (jangan baca seluruh repo), paralel, mesin pas-ukuran, pakai-ulang hasil, periksa yang berubah saja, berhenti saat bukti cukup. **Cakupan tetap penuh; yang dihemat = cara kerja, bukan cakupan.**
- Kata "aturan kit" digeneralisasi → "di project APA PUN".

### Konteks
- Feedback owner 2026-06-14: aturan §4.6 harus dipakai juga oleh project orang lain yang memasang lintasAI + kalau bisa hemat token/cepat tanpa turun kualitas (owner usul nama "QA + QC"). **KECIL** (perjelasan kata-kata + panduan efisiensi, backward-compatible — perilaku inti sama, cuma lebih gamblang + lebih hemat). BUKAN `[SECURITY]`. Diterapkan pada dirinya sendiri (eat-own-dogfood): seluruh tes + cek konsistensi lintas-berkas dijalankan sebelum rilis. Tes tetap 196 berkas.

## [1.17.0] - 2026-06-14

### Ditambahkan (aturan WAJIB baru: Gerbang Verifikasi Pra-Rilis)
- **Gerbang Verifikasi Pra-Rilis (`CLAUDE_universal_v1.md` §4.6 baru)** — AI DILARANG menyatakan "selesai / aman / siap rilis / sudah benar" sebelum menjalankan pemeriksaan menyeluruh. Tiap **tambah/ubah/hapus** fitur/kode/aturan WAJIB memeriksa: (a) fitur yang diubah, (b) **blast radius** (area terdekat yang kena dampak: berkas pemanggil + yang dipanggil + dokumen/angka/versi yang merujuk + tes terkait), (c) **SELURUH tes** dijalankan, (d) konsistensi lintas-berkas. Tiap temuan WAJIB berbukti `berkas:baris` + skenario gagal nyata; **"nol temuan itu sah"** (dilarang mengarang); lalu cek-silang skeptis. Memaksa §8.2 (Anti-Halusinasi) + Gerbang Pra-Lapor benar-benar jalan, bukan opsional.
- **Keputusan owner: "selalu menyeluruh"** (tanpa skala) — perubahan sekecil typo pun tetap lewat gerbang. "Menyeluruh" = **cakupan LENGKAP**; jumlah pemeriksa menyesuaikan luas dampak (1-baris → baca berkas terdampak + seluruh tes, cepat; fitur → banyak pemeriksa paralel) — cakupan selalu penuh, tak pernah di-skip.
- **Ditautkan ke "Definisi Selesai" (§4 DoD) + daftar Larangan (§12)** — "selesai" = terbukti dengan bukti, BUKAN "sudah kuubah + kelihatannya benar".

### Konteks
- Lahir dari feedback owner 2026-06-14: AI sempat menyatakan fitur "selesai & aman, siap rilis" padahal belum diperiksa menyeluruh — baru pas owner minta scan ulang, muncul bug nyata (rilis v1.16.1: kalimat Inggris bocor di output staf + angka dokumen basi). Pola "klaim pede → salah → perbaikan" buang waktu/token/tenaga. Gerbang ini menutup pola itu permanen lintas semua sesi + proyek staf. **MENENGAH** (aturan baru, backward-compatible — tak ada perilaku lama yang rusak, cuma menambah syarat sebelum "selesai"). BUKAN `[SECURITY]`. Aturan langsung diterapkan pada dirinya sendiri (eat-own-dogfood): seluruh tes + cek konsistensi lintas-berkas dijalankan sebelum rilis. Tes tetap 196 berkas (tak ada berkas tes baru).

## [1.16.1] - 2026-06-14

### Diperbaiki (hasil pemeriksaan menyeluruh alur pasang pertama-kali, sebelum rilis)
- **[Bahasa] 1 kalimat bahasa Inggris yang dilihat staf** di `setup-pola-b.ps1` (pesan info abu-abu saat pengaturan identitas Git pernah dilewati) — diterjemahkan ke Bahasa Indonesia; kembarannya yang sudah Indonesia ikut dirapikan. Akar: 1 cabang lupa diterjemahkan saat kembarannya sudah. Melanggar aturan inti "semua output yang dilihat staf wajib Bahasa Indonesia".
- **Angka jumlah berkas tim di panduan sudah basi** (`JALANKAN_KIT.md`: tertulis "17 file" padahal sekarang 28) — diperbarui di 3 tempat; daftar berkas yang gampang-basi diganti ringkasan per-kategori + tunjuk ke sumber tunggal (`$teamFiles`) supaya tidak basi lagi. Cegah staf kira pasang gagal/ada sisipan.

### Ditambahkan (transparansi alur — sejalan visi "tiap langkah ada kabarnya")
- **AI WAJIB kabari saat proyek masih nyaris-kosong** (`JALANKAN_KIT.md` step 13): dulu setup melewati `docs/` + berkas tim diam-diam (pesan cuma lewat di layar PowerShell yang ke-scroll naik). Sekarang AI di chat WAJIB bilang jelas "proyekmu masih kosong, peta + berkas tim dibuat nanti saat ada kode; aturan tetap aktif". Bukan diam-diam.
- **AI WAJIB lapor progres saat bikin catatan-kode borongan** (`JALANKAN_KIT.md` step 12): dulu tak ada perintah lapor → staf bisa lihat layar diam 2-3 menit → kira mogok. Sekarang kabari per 5-10 berkas.
- **Panduan kontrol-akses N-repo (`ACCESS_CONTROL_NREPO_v1.md`) ikut tersalin otomatis** ke `docs/` tiap pasang tim (dulu terdaftar di manifest tapi tak ikut salin — total berkas tim 27 → 28). Relevan langsung untuk strategi tim tanpa jalur hukum (least-privilege + checklist staf keluar + cek-akses bulanan).

### Dirapikan
- Label versi sejarah di `JALANKAN_KIT.md` (baris 15 + catatan Bagian 7) dibuat jelas "sejak v1.6.2" supaya tak dikira versi file saat ini.
- Kriteria deteksi "proyek matang" dibuat lebih gamblang (hitung file kode nyata `.ts/.js/.py/dst`, bukan file tes/config/auto-generated).
- Blok "catatan untuk AI" di pesan penutup setup diberi penanda jelas "ini untuk AI, bukan untukmu" supaya staf tak kira itu tugas mereka.

### Konteks
- Lahir dari pemeriksaan menyeluruh READ-ONLY (5 sudut + cek-silang skeptis tiap temuan, 2026-06-14) sebelum owner rilis. Vonis: mesin inti alur (auto-mulai popup + anti-gantung saat layar Windows tak bisa tampil + salin berkas) **0 cacat**; ditemukan 1 kebocoran bahasa (wajib dibetulkan) + angka dokumen basi + 3 perbaikan komunikasi + rapikan kecil. **KECIL** (perbaikan + akurasi dokumen + transparansi UX + 1 panduan ikut salin; semua backward-compatible — tak ada pilihan/default lama yang berubah). BUKAN `[SECURITY]`. Tes tetap 196 hijau (tak ada berkas tes baru).

## [1.16.0] - 2026-06-14

### Ditambahkan (alur pasang pertama-kali lebih jelas + popup-berurutan)
- **Peta langkah di awal pemasangan** (`JALANKAN_KIT.md` Bagian 0 baru): AI tampilkan "pemasangan ada X langkah, kita di langkah 1" SEBELUM mulai, lalu umumkan posisi tiap pindah langkah. Lahir dari kebingungan owner: "sekarang di langkah mana + apa berikutnya?".
- **Kesimpulan tiap langkah selesai** (Bagian 0b): AI WAJIB tutup tiap langkah dengan 1-baris bahasa awam "✅ Selesai <hasil>. Berikutnya <apa>." -- tidak ada lagi tugas besar yang jalan diam-diam tanpa user tahu sedang apa.
- **Penundaan catatan-kode jadi POPUP pilihan** (akar kebingungan utama): untuk project yang SUDAH ada kodenya + pilih LENGKAP, dulu catatan KODE ditunda DIAM-DIAM ke akhir (user bingung "kok catatan kode tidak muncul?"). Sekarang jadi **Popup #2C**: "[1] Nanti, setelah dirapikan (disarankan -- biar tidak basi) / [2] Sekarang juga". User selalu tahu + memilih sendiri. Denah database tetap dibuat duluan. Bagian 6b (catatan kode di akhir) kini hanya jalan kalau user pilih [1] Nanti.

### Konteks
- Lahir dari feedback owner 2026-06-14: ingin alur pasang pertama-kali benar-benar terasa seperti rangkaian popup yang jelas (pilih menu -> dikerjakan + progress bahasa awam -> ditawari lagi), bukan hal-hal yang jalan diam-diam. Penilaian jujur: alur lama SUDAH popup-berurutan + sudah pakai popup klik, TAPI (a) penundaan catatan-kode diam-diam + (b) tidak ada peta posisi = bikin bingung. **MENENGAH** (perbaikan UX alur onboarding, backward-compatible -- semua pilihan & default lama tetap ada, cuma ditambah transparansi + 1 popup conditional). Hanya menyentuh berkas prompt `JALANKAN_KIT.md` (dibaca AI saat install); tidak ada perubahan kode/tes. Tes tetap 196 hijau.

## [1.15.0] - 2026-06-14

### Ditambahkan (batch keamanan untuk tim tanpa jalur hukum)
- **Robot penjaga kebocoran rahasia (`secret-guard.yml`)** -- auto-pasang tiap repo staf. HYBRID, sengaja minim alarm-palsu: **TOLAK-KERAS (CI merah)** hanya untuk file `.env` ASLI ter-commit (`.env`, `.env.local`, dst) -- file contoh `.env.example`/`.sample`/`.template` DIKECUALIKAN (cuma placeholder, aman). **PERINGATAN (tidak memblokir)** untuk yang mirip kunci asli (`sk-ant-`/`AKIA`/`ghp_`/dst -- cuma cetak NAMA berkas, tak pernah nilai rahasianya ke log) + repo non-sensitive yang deklarasi kunci DB di `.env.example`. Tidak butuh secret apa pun (cuma baca kode). Tingkat repo dibaca dari Variable `REPO_TIER` atau `.split-state`.
- **Robot pengingat cek-akses bulanan (`audit-access.yml`)** -- buka SATU catatan-tugas (Issue) tiap tanggal 1 (juga bisa dipicu manual): "waktunya cek-akses + langkahnya". Robot CUMA mengingatkan -- **TIDAK mencabut akses otomatis** (izin minimum `issues: write`; pencabutan = keputusan manusia). Anti-duplikat (skip kalau Issue bulan ini sudah ada).
- **Peta ancaman tim tanpa jalur hukum (`THREAT_MODEL_NON_LEGAL.md`)** -- 1 halaman: apa dijaga (resep rahasia + kunci = "gudang emas"; tampilan = "etalase"), dari siapa (paling realistis: staf keluar bawa akses), dengan apa (lapisan mitigasi). Jujur soal batas: tanpa jalur hukum, kontrol-akses + seleksi orang adalah langit-langit.
- **Bagian forensik staf-keluar di `SECURITY_INCIDENT_PLAYBOOK.md`** -- langkah READ-ONLY "saat staf keluar tidak baik-baik": catat akses DULU -> lihat jejak -> BARU cabut + rotate kunci. Jujur soal batas GitHub (event unduhan cuma tercatat penuh di paket Team/Enterprise). Tujuan = intel + tutup pintu, bukan menghukum.
- **Checklist staf-keluar + cek-akses BULANAN diperkuat** di `ACCESS_CONTROL_NREPO_v1.md` (catat-dulu-sebelum-cabut + rotate + tautan forensik + jadwal bulanan via robot pengingat).
- **+19 tes baru** (READ-ONLY statis: 3 berkas ada + terdaftar manifest + ikut salin-otomatis ke proyek staf + struktur aman -- penjaga benar-benar `exit 1`, mengecualikan file contoh, tak bocorkan nilai rahasia ke log, izin minimum; pengingat tak bisa auto-cabut). Total 177 -> **196 hijau**. Smoke manifest 106 berkas, 0 hilang.

### Konteks
- Lahir dari audit menyeluruh (2026-06-13): batch keamanan dinilai bernilai TERTINGGI untuk tim ~40-50 staf yang **tidak bisa NDA/kontrak hukum** -- pintu terkunci di GitHub + pemisahan rahasia = pertahanan nyata. **MENENGAH** (fitur baru, backward-compatible -- alat lain tidak berubah). BUKAN dilabeli `[SECURITY]` (yang berarti "pasang SEGERA"): ini **memperkuat** pertahanan, bukan menambal celah aktif yang mendesak. Keputusan teknis (tolak-keras vs peringatan; pengingat vs auto-cabut) dipilih AI dengan prinsip nol-alarm-palsu + default-deny + cetak-rencana (manusia yang eksekusi pencabutan).

## [1.14.3] - 2026-06-14

### Diperbaiki (robot pemeriksa kode otomatis naik ke Opus — mutu telaah lebih tinggi)
- **Model robot AI-review dinaikkan dari Sonnet ke Opus** (`templates/github/scripts/ai-review.js:19`): `claude-sonnet-4-6` → `claude-opus-4-8`. Opus me-review lebih teliti & dalam (cocok untuk gerbang pertama yang menjaga kode staff). Sengaja **bukan ganti teks doang** — diverifikasi panggilan API-nya supaya benar-benar jalan di Opus, bukan malah error.
- **3 pengaman supaya benar-benar jalan di Opus (sesuai realita, bukan asal ganti):**
  - **Bisa diganti tanpa ubah kode** — model kini baca `process.env.REVIEW_MODEL` dulu (set lewat GitHub repo *Variable* `REVIEW_MODEL`), default Opus kalau kosong. Owner bisa balik ke Sonnet / model lain tanpa edit kode (tuas darurat kalau Opus bermasalah atau mau lebih hemat). + baris `REVIEW_MODEL: ${{ vars.REVIEW_MODEL }}` di `ai-review.yml`.
  - **Output dijaga bersih** — tambah instruksi "langsung tulis hasil review final, jangan tampilkan proses berpikir". Opus saat mode-pikir mati kadang menulis penalaran panjang ke jawaban; instruksi ini mencegah review jadi berantakan.
  - **Kelonggaran panjang jawaban** `max_tokens` 2048 → 4096 — Opus me-review lebih teliti; 2048 kadang kepotong untuk PR besar.
  - **Komentar-penjaga** di kode: panggilan `messages.create` sengaja TANPA `temperature/top_p/top_k` karena Opus 4.x menolaknya (HTTP 400) — penanda supaya tak ada yang salah-tambah ke depan.
- **Catatan kejujuran:** (1) Library tetap dikunci persis `@anthropic-ai/sdk@0.30.0` (tidak diutak-atik) — nama model cuma teks yang dikirim ke server Anthropic, jadi versi library lama tetap bisa memanggil Opus. (2) Tidak ada tes baru: ini teks-pengaturan di template yang tidak punya "mesin" untuk diuji di dalam repo kit — uji aslinya = robot jalan di PR staf nyata (`docs/ROBOT_CI_TESTING_PLAYBOOK.md`). (3) Biaya: Opus ~1,67× lebih mahal per token dari Sonnet untuk panjang yang sama; untuk review PR (biasanya pendek) umumnya kecil — kalau mau hemat, override `REVIEW_MODEL`. **KECIL** (perbaikan mutu, backward-compatible — tak ada perubahan perilaku alat lain). Tes tetap 177 hijau.

## [1.14.2] - 2026-06-13

### Diperbaiki (Quick Wins dari audit menyeluruh READ-ONLY — perawatan, tidak ada breaking)
- **README: hapus target versi usang.** Baris 14 dulu janji "Target naik stabil: v1.8.0" padahal kit sudah v1.14.1 (7 versi lewat) → staf non-programmer yang cuma baca angka bingung "sudah aman dipakai rame-rame belum?". Ganti: status stabil ditentukan oleh "robot lulus uji di repo nyata" (`docs/ROBOT_CI_TESTING_PLAYBOOK.md`), bukan dipatok nomor versi.
- **Kunci versi library robot AI-review** (`templates/github/workflows/ai-review.yml:42`): `@anthropic-ai/sdk@^0.30.0` + `@octokit/rest@^21.0.0` (ambil-versi-terbaru-otomatis) → dikunci persis `0.30.0` + `21.0.0` supaya pemasangan deterministik; update minor tak sengaja tidak bisa diam-diam merusak robot. (Masalah dicatat sejak CHANGELOG v1.7.5, baru dikerjakan sekarang.)
- **Mutakhirkan model robot AI-review** (`templates/github/scripts/ai-review.js:19`): `claude-sonnet-4-5` → `claude-sonnet-4-6` + catat tanggal update di komentar.
- **Labeli file opsional di INDEX** (kurangi "docs kebanyakan, mana yang wajib?"): `DISCORD_BOT_INTEGRATION.md` → **[OPSIONAL — hanya kalau pakai Discord]**; `feature-flags-advanced.md` → **[LANJUTAN — pasca-rilis, bukan tahap awal]**.

### Catatan kejujuran (Gerbang Pra-Lapor)
- 1 temuan audit ("nama berkas robot-gabung tidak konsisten") **DICORET** setelah diverifikasi ulang: penamaan template `AUTO_MERGE_SHARED_WORKFLOW.yml` (huruf besar) → tujuan `.github/workflows/auto-merge-shared.yml` (disalin manual saat split) memang **pola sengaja + sudah didokumentasikan benar** (`CROSS_REPO_TYPES_PIPELINE.md:296-297` + header berkas). Tidak ada perbaikan dibuat — tidak mengarang.

### Konteks
- Hasil audit READ-ONLY menyeluruh (6 dimensi, 43 temuan → **37 lolos cek-silang skeptis, 6 dibatalkan**): kit dinilai **SEHAT, 0 GENTING**. Ini batch **Quick Wins** (perbaikan kecil aman + samakan dokumen-dengan-kenyataan + kurangi kekusutan). **KECIL**. Batch berikutnya atas persetujuan owner = pengaman keamanan (penjaga kebocoran `.env` otomatis, cek-akses bulanan, threat-model tanpa-jalur-hukum).

## [1.14.1] - 2026-06-13

### Diperbaiki (penajaman aturan bahasa output — §2.1 SCOPE EKSPLISIT)
- **Aturan baru "ATURAN BAHASA WAJIB" di §2.1**: narasi antar-langkah (text antara tool calls) WAJIB **Bahasa Indonesia**, BUKAN bahasa Inggris — **sekalipun nol jargon**. Sebelumnya §2.1 fokus ke "terjemahkan jargon", belum tegas melarang kalimat penghubung Inggris penuh. Lahir dari owner menangkap AI (di repo kit sendiri, saat rilis v1.14.0) keluar narasi antar-langkah **seluruhnya Inggris** ("The npm poll finished... Let me confirm v1.14.0 is live", "Now update the MEMORY.md index") padahal **nol jargon**. Ditambah: tabel pola Inggris terlarang → ganti Indonesia ("Let me check" → "Aku cek dulu", "Now update X" → "Sekarang aku perbarui X", dll) + penegasan cek-bahasa = cek **2 hal** (bukan jargon DAN bukan Inggris). Berlaku otomatis ke tiap project staff (berkas auto-load tiap sesi). **KECIL** (penajaman aturan, backward-compatible — tidak ada perubahan kode/perilaku alat).

## [1.14.0] - 2026-06-13

### Ditambahkan (INTI mesin kelola-banyak-repo — Kondisi 3: kelola 6-10 repo terpisah dengan kontrol-akses)
- **Buku Induk repo (`lintasai-portfolio.yml`)** — 1 berkas SUMBER TUNGGAL yang mencatat semua repo + tingkat-sensitif (`access_tier`: sensitive/feature/shared) + kelompok staff yang boleh clone (`allowed_teams`). Menggantikan enum peran tertutup (frontend/backend/shared) dengan daftar terbuka. File: `templates/lintasai-portfolio.example.yml` (contoh terisi) + `templates/PORTFOLIO_REGISTRY_v1.md` (panduan isi non-programmer).
- **Panduan kontrol-akses N-repo (`templates/ACCESS_CONTROL_NREPO_v1.md`)** — ubah Buku Induk jadi izin clone GitHub nyata supaya cuma 3-5 orang bisa download backend+DB, ~40 staff cuma repo fitur. **Mode cetak-rencana (SIMULASI): AI MENCETAK rencana akses, owner yang eksekusi** (klik di GitHub UI = jalur utama non-programmer; `gh` CLI = lampiran lead). Menegaskan beda **izin clone** (yang benar-benar memblokir) vs **CODEOWNERS** (cuma review-gate, BUKAN akses). Plus checklist onboarding tolak-default + cek-akses berkala (READ-ONLY).
- **Pengaman `.env` digeneralisasi jadi tier-driven** (`templates/SPLIT_REPO_PREPROVISION_v1.md`) — larangan kunci rahasia (`DATABASE_URL` dll) kini berlaku untuk SEMUA repo non-`sensitive` (frontend/dashboard/feature), bukan cuma kata "frontend". Gagal cek → STOP, jangan lapor "siap push".
- **Penanda `.split-state` diperluas** (`SPLIT_REPO_MIGRATION_PROMPT_v1.md`) — `role` jadi daftar terbuka (+ dashboard/service/tools) + field opsional `access_tier` & `portfolio_ref` (link ke Buku Induk). Doktrin "3 repo cukup" disambung (bukan dilawan): jumlah repo IKUT jumlah batas-akses nyata, bukan angka target. + item B8 di `OWNER_SETUP_CHECKLIST_v1.md`.
- **+13 tes baru** (READ-ONLY, statis): file terdaftar di manifest, Buku Induk punya struktur akses inti + repo sensitive contoh terkunci ke lingkaran kecil, panduan akses menegaskan SIMULASI + beda clone-vs-CODEOWNERS, pengaman .env tier-driven. Total 163 → 177 hijau. PSSA bersih, fast-smoke hijau (102 file manifest).

### Konteks
- Lahir dari kebutuhan owner: lintasAI dipakai lintas 3 kondisi — (1) monorepo refactor-ringan, (2) monorepo → split 3-repo (sudah ada), (3) **kelola 6-10 repo terpisah dengan akses per-repo** (sebelumnya cuma konsep). Ini IRISAN INTI Kondisi 3 (registry + kontrol-akses + isolasi rahasia); LANJUTAN (template layanan generik, kirim tipe-bersama fan-out, pintu menu kelola-portfolio, pasang/update massal) menyusul bertahap. Sifat **MENENGAH** (fitur baru, backward-compatible — jalur 3-repo lama tidak berubah). Mesin akses default **cetak-rencana** (owner yang eksekusi izin GitHub) supaya salah-set tidak otomatis membocorkan/mengunci.

## [1.13.3] - 2026-06-13

### Diperbaiki (polish alur pertama-kali-install — dari audit READ-ONLY 8-agen atas pengalaman install)
- **Pembaca-versi CHANGELOG salah baca versi-sendiri (STALE) — 3 tempat diperbaiki.** Sejak v1.13.0 CHANGELOG pakai gaya Keep-a-Changelog `## [X.Y.Z]` (kurung, TANPA 'v') sedangkan entri lama `## vX.Y.Z`. Ketiga pembaca-versi (`lib/version-detect.ps1` Get-KitVersionFromChangelog → MANIFEST, `kit.ps1` Source-3, `update-kit.ps1` Get-LatestChangelogEntry) mencoba gaya-v DULU → entri lama `## v1.12.0` ter-tangkap sebagai "terbaru", entri bracketed ter-bayang → versi STALE. Akibat: manifest + placeholder `<VERSI_KIT>` AGENTS.md + `kit.ps1 version` salah catat **v1.12.0**; `update-kit` lapor "update tersedia v1.12.0 → terbaru" PALSU berulang; scan label [SECURITY]/[BREAKING] jalan di entri lama → banner merah keamanan bisa TER-LEWAT. (Gate update riil tetap pakai git tag → kode terpasang SELALU benar; yang salah cuma LABEL versi.) Fix: ketiga pembaca jadi **1 scan TERPADU lintas-format** ('v' opsional, capture digit-only), ambil heading paling-atas = terbaru; heading non-versi (`## [Unreleased]` / `## Label ...`) di-skip. Diuji empiris: ketiga kini kembalikan v1.13.x.
- **Daftar-staff (staff-roster.yml) pakai email contoh palsu → health-check §7.6 salah-alarm.** `setup-pola-b.ps1` dulu hardcode `replace-with-owner-email@example.com` (bukan `git config user.email` asli) → §7.6 "email kamu terdaftar" gagal di sesi pertama walau state normal. Fix: isi email owner dari git config (local lalu global) saat buat roster; + §7.6 dilunakkan ("email placeholder = fresh-install normal, jangan WARNING").
- **Daftar-staff merujuk aturan AGENTS.md "Staff Scope" yang tidak pernah ada (yatim).** Rujukan dihapus; komentar roster diperjelas: "direktori tim / RUJUKAN, bukan pagar keras" (penegakan per-role memang belum aktif).
- **+6 tes baru** (156 → 163 hijau; +1 dari tes registry-mapping otomatis untuk file tes baru): 4 tes pembaca-versi lintas-format (termasuk anti-drift "CHANGELOG = package.json") + 2 tes source roster (email-dari-git + anti-yatim Staff Scope).

### Konteks
- Lahir dari verifikasi owner atas 14 screenshot pengalaman pertama-kali-install (audit READ-ONLY 8-agen). Struktur alur install dinilai **BENAR & profesional** (auto-lanjut, popup klik, audit read-only, severity awam GENTING/PENTING/RAPIKAN, Daftar Tugas Menunggu). KECIL (semua perbaikan, no breaking). Catatan kejujuran: klaim AI di sesi screenshot "tanpa `.staff-profile.md` → Edit diblokir" itu KELIRU — `tier-guard.mjs` adalah file hantu (sudah diakui kit di v1.13.0); absen `.staff-profile.md` = mode solo/owner normal. Bukan perubahan kode, hanya pelurusan.

## [1.13.2] - 2026-06-13

### Diperbaiki
- **File backup tingkat-akar tidak lagi bocor ke repo tim** (`setup-pola-b.ps1` ~baris 981-991). `.gitignore` akar proyek yang di-generate sebelumnya CUMA punya pola FOLDER `.claude-kit.backup-*/`, sehingga file backup di AKAR proyek — `AGENTS.md.backup-<ts>`, `CLAUDE.md.backup-<ts>` (dari `lib/agents-md.ps1`), dan `*.bak.<ts>` (dari `lib/json-merge-helpers.ps1`) — TIDAK ter-ignore dan ikut ter-push saat staff `git add .`. Pola file (`*.bak`/`*.backup-*`) yang benar sebelumnya salah-scope: ditulis ke `.claude-kit/.gitignore` yang cuma berlaku DI DALAM folder kit, bukan di akar. Fix: tambah pola FILE `*.backup-*`, `*.bak`, `*.bak.*` ke daftar `.gitignore` akar proyek. Terbukti via audit READ-ONLY 6-agen + simulasi `git add` & `git check-ignore` nyata (folder backup kit `.claude-kit.backup-*/` sendiri AMAN, tidak terdampak). Propagasi: proyek lama otomatis dapat pola baru saat update berikutnya (re-run setup `-Force`, append idempotent). Catatan: file backup yang TERLANJUR ke-track butuh `git rm --cached <file>` manual sekali.
- **Dasbor CI `pssa-lint` hijau lagi** (`lib/kit-files.psd1` baris 100). Em-dash `—` (UTF-8 — satu-satunya byte non-ASCII di file) di sebuah komentar memicu peringatan PSScriptAnalyzer `PSUseBOMForUnicodeEncodedFile` (file non-ASCII tanpa BOM) → job `pssa-lint` di `validate.yml` merah. (Ini TIDAK memblokir rilis npm — gerbang terbit npm di `publish-npm.yml` jalur tes terpisah.) Ganti `—` → `--` → file jadi pure-ASCII → peringatan hilang tanpa perlu tambah BOM. Komentar tidak dibaca kode mana pun (semua konsumen pakai `Import-PowerShellDataFile` yang mengabaikan komentar). Peringatan ini ada sejak v1.7.5.
- **+4 tes** mengunci fix kebocoran backup (152 → 156 tes hijau): jalankan setup nyata dengan `AGENTS.md` existing → assert `.gitignore` akar memuat pola file backup + `git check-ignore` membuktikan `AGENTS.md.backup-<ts>` ter-ignore (end-to-end).

### Konteks
- Lahir dari pertanyaan owner: "kalau update demi update, apakah folder backup ikut ter-push ke repo?" Audit READ-ONLY (6 agen: 4 pembaca + 2 pemeriksa skeptis) menjawab: folder backup kit AMAN, tapi file backup tingkat-akar BOCOR — lalu diperbaiki. Sekalian membersihkan 1 peringatan CI yang tertinggal sejak v1.7.5. Tidak ada perubahan perilaku selain perlindungan tambahan + kebersihan dasbor (KECIL).

## [1.13.1] - 2026-06-13

### Diperbaiki (flow update naik ke standar updater profesional — PENTING #1-#4 dari audit READ-ONLY flow update)
- **#1 Update pin ke TAG RILIS, bukan branch `main`** (`update-kit.ps1`). Sebelumnya `git clone -b main` → user yang update bisa dapat kode BELUM-dirilis (main sering ada commit di depan tag), beda dari yang fresh-install via `npx`. Sekarang clone tag semver-terbaru yang sudah di-resolve (`$cloneRef`); hormati override `-Branch`; fallback `main` hanya kalau tag tak ter-resolve (offline/tanpa-baseline/SIMULASI). Efek: beberapa user yang update di waktu berbeda mendarat di versi rilis yang SAMA.
- **#2 Cek kesehatan (doctor) SETELAH update + arah rollback kalau gagal** (`update-kit.ps1` Step 6). Sebelumnya tak ada verifikasi pasca-update; auto-rollback hanya saat UNDUH gagal. Sekarang jalankan `kit.ps1 doctor` (read-only: versi + file inti + integrity sha256) di kit baru; kalau ERROR (exit 1) → tunjuk backup + `kit.ps1 rollback` (TIDAK auto-rollback; confirm-first, backup disimpan default). Perilaku `& kit.ps1 ...` + `exit` diuji empiris aman (tidak mematikan update-kit.ps1, exit code tertangkap).
- **#3 Update WAJIB konfirmasi eksplisit — "diam ≠ setuju"** (`UPDATE_KIT_PROMPT_v1.md` Step 7). Hapus "kalau staff diam → assume [1] Yes" + popup Step 7 tidak lagi tampilkan default-otomatis "Ya" (harus KLIK). Selaras §4.5 + §8.2 Aturan 5; pengecualian hanya kalau Mode Auto-Confirm (§15) eksplisit aktif. Step 9 (menu pasca-sukses) diperjelas: non-destruktif jadi default [1] aman, TAPI [3] Rollback wajib pilih eksplisit (beda dari Step 7).
- **#4 Deteksi versi di prompt pakai semver, bukan urutan ABJAD** (`UPDATE_KIT_PROMPT_v1.md` Step 2). Sort abjad salah (`v1.5.9` > `v1.13.0` secara teks) → AI bisa salah lapor "sudah terbaru". Ganti ke cast `[version]` (SAMA dengan logika resmi `update-kit.ps1`). Ditegaskan: sumber kebenaran = skrip; deteksi manual hanya untuk komunikasi.
- **6 tes baru** mengunci ke-4 fix (146 -> 152 tes hijau). PSScriptAnalyzer bersih, parse OK, perilaku `&`+`exit` diuji empiris.

### Konteks
- Lahir dari audit READ-ONLY flow update terhadap rubrik updater profesional. Yang sudah profesional (backup + auto-rollback saat unduh-gagal, allowlist sumber anti-supply-chain, semver-compare + proteksi downgrade di skrip, GPG fail-closed untuk fork) **dipertahankan**; hanya gap yang ditutup.

## [1.13.0] - 2026-06-13

### Ditambahkan
- **Aturan baru §8.2 "Aturan 3b: Gerbang Pra-Lapor Temuan" (anti-ngarang).** Dipinjam dari audit full-scan ECC v2.0.0 (`agents/code-reviewer.md` Pre-Report Gate + daftar 12 kesalahan-umum-AI + "nol temuan itu sah"), dibungkus bahasa non-programmer. Sebelum AI melaporkan temuan/bug/penilaian: lewati 4 pertanyaan gerbang (ada bukti `file:baris`? skenario gagal nyata? fakta-terverifikasi vs "kedengarannya benar"? masalah vs selera?), wajib bukti untuk temuan GENTING/PENTING, "nol temuan = hasil yang SAH", + daftar 7 jenis salah-flag yang harus dicek dulu sebelum dilaporkan.
- **14 tes baru** untuk 3 helper popup enforcement (`Format-LintasChoiceLine`, `Show-LintasNumberedChoicePopup`, `Show-LintasSecurityChoicePopup`) yang sebelumnya tidak punya tes — termasuk tes RULE-6 (popup keamanan WAJIB punya opsi default aman). Total tes 132 -> 146 hijau.

### Diperbaiki (8 bug temuan audit full-scan, READ-ONLY, tiap bug diverifikasi ulang manual sebelum diperbaiki)
- **Referensi hantu `.claude/hooks/tier-guard.mjs`** di health-check §7.6 — kit tidak pernah memasang file ini, jadi pengecekan selalu lapor "hilang" / berpotensi memicu halusinasi. Ditandai OPSIONAL (tidak adanya = bukan error).
- **`publish-npm.yml` terbit ke npm TANPA jalankan tes** — sebelumnya hanya cek tag==package.json (tag push tidak memicu `validate.yml`). Ditambah job `test` (fast-smoke + Pester di Windows) yang WAJIB lulus sebelum `publish`.
- **`templates/INDEX.md` "Daftar Lengkap" bolong 18/52 file** — seluruh `templates/github/` (12 file) + 6 file root (OWNER_SETUP_CHECKLIST, REFACTOR_STANDARD, ROBOT_CI_TESTING_PLAYBOOK, SPLIT_REPO_PREPROVISION, architecture_auto, settings.local.json.template) tidak terdaftar. Sekarang lengkap + bagian lib/docs/tests/CI ditambah.
- **Drift nama folder cadangan** — `UPDATE_KIT_PROMPT_v1.md` + `PROMPT_LIBRARY.md` menulis `.claude-kit.bak-`, padahal `update-kit.ps1` membuat `.claude-kit.backup-`. Resep rollback mencari folder yang tak pernah dibuat skrip -> disamakan ke `.claude-kit.backup-`.
- **`README.md` sisa usang** — baris "Versi kit aktif paket ini: v1.0.0" -> v1.13.0; label repo "(private)" -> "(publik)" (repo memang publik, terverifikasi `git ls-remote` tanpa kredensial).
- **`PROJECT_LIFECYCLE_PROMPT_v1.md` Stage 4 melanggar konvensi popup kit sendiri** — opsi `(1)/(2)/(3)` -> `[1]/[2]/[3]` (RULE-1), label Inggris `(recommended, default)` -> `(disarankan, default)` (RULE-2), opsi aman "Stop, owner review dulu" dipindah ke posisi `[1]`. `PROMPT_LIBRARY.md` hitungan prompt 15 -> 22 (jumlah sebenarnya).
- **`lib/popup-helpers.ps1`** — 2 huruf rusak (mojibake) diperbaiki jadi ASCII murni (sesuai klaim header "ASCII-only"); komentar "7-rule" -> "8-rule" + RULE-8 (popup-klik-dulu) ditambah ke daftar; 3 helper enforcement kini punya tes.
- **Kebocoran nama proyek owner di template** — digenerik-kan **konsisten** (sekeluarga nama, bukan setengah-jadi): di `MCP_SETUP.md`/`RLS_SETUP_PROMPT.md` keluarga role/login `creative_*` -> `dev_*` (cocok konvensi `dev_andi` yang kit pakai sendiri), schema bersama `bigseo` -> `shared_main`, nama proyek/repo `akses-*` -> `<project>-*`, domain `akses.app` -> `<project>.app`, tim `creative` -> tim `dev`; `backup-schemas.yml` nama schema default asli -> generik + catatan "GANTI dengan namamu"; channel Discord `#akses-*` -> `#<project>-*` (CROSS_REPO + DISCORD + split-agents); komentar repo `akses-backend/frontend` -> "repo backend/frontend kamu". (Contoh nama-proyek di prose ber-"dst." mis. "akses, bigseo, pbn-monitor" sengaja ditinggal — itu ilustrasi, dampak rendah.)

### Catatan
- Editorial rilis sebelumnya (belum ber-tag) ikut di rilis ini: **`CONTRIBUTING.md`** runbook terbit npm (terverifikasi 2026-06-12) + checklist versi 3->5 tempat; **`README.md`** baris "Versi stabil sekarang" v1.7.8->v1.12.0.

---

## v1.12.0 — 2026-06-12 (Default TIM KECIL + bersih-bersih besar: 183 titik teks-tampil diterjemahkan ke bahasa awam)

> **Tier**: 2 (perubahan default + perombakan bahasa tampilan, backward-compatible) — naik **MENENGAH** 1.11.1 → 1.12.0. NOT BREAKING. Logika & jumlah/nomor opsi popup TIDAK berubah (kecuali urutan Popup #2 — lihat poin 1).

**1. Default Popup #2 Ukuran Tim = TIM KECIL (keputusan owner).** Urutan baru: [1] TIM KECIL (disarankan) ⭐ DEFAULT / [2] TIM BESAR / [3] SENDIRI. Aturan deteksi diperketat: daftar staff KOSONG bukan alasan menyarankan SENDIRI (kosong itu normal di install pertama); SENDIRI = pilihan manual; TIM BESAR ke posisi [1] hanya kalau sinyal kuat ≥5 orang. Semua rujukan nomor ikut diganti (handler step 11, matriks pecah-repo Bagian 6, seksi "Aturan AI", POST_SETUP [2]).

**2. Bersih-bersih bahasa awam TERBESAR sejauh ini — 169 + 14 = 183 titik di 8 file.** Disisir 7 pemeriksa (mode aman cuma-baca, 170 temuan), diterapkan 7 asisten (1 per file), dicek-silang 7 pemeriksa lagi, sisa temuannya dibereskan manual. Semua teks yang TAMPIL ke user (popup, label opsi, laporan, pesan status) kini bahasa awam — istilah IT tetap dipakai + padanan dalam kurung (gaya owner). Contoh: "Project kamu mature (detected: 90+ files, business logic exist)" → "Project kamu sudah matang (terdeteksi: 90+ file kode, sudah ada logika bisnis / fitur nyata yang jalan)"; blok alasan pecah-repo TIM BESAR diterjemahkan penuh; tabel "Pending Action Items" → "Daftar Tugas Menunggu" + keterangan Tier A/B/C; label severity audit yang tampil WAJIB GENTING/PENTING/RAPIKAN (pemetaan dari 5 nilai internal didefinisikan eksplisit).

**3. Standar label "(disarankan)"** menggantikan "(recommended)" di semua teks-tampil — RULE-2 diperbarui; `lib/popup-helpers.ps1` (popup GUI Tipe B) ikut: suffix ` (recommended[, default])` → ` (disarankan[, default])` — label kini IDENTIK lintas mode klik/teks/GUI.

**4. Aturan render baru**: "Cara Tampil Popup" #6 + RULE-8(f) — SEMUA yang AI tampilkan ke user WAJIB bahasa awam; jargon yang masih nyangkut di blok kanonik WAJIB diterjemahkan saat merender (makna & nomor opsi tetap). Blok kanonik = sumber MAKNA, bukan izin menampilkan jargon.

**5. Bonus penyakit lama yang ketahuan & diperbaiki**: label basi Full/Quick/Advanced + opsi MIGRATION (dihapus v1.6.6) di seksi "Aturan AI" JALANKAN_KIT; nama project `akses` tertulis mati di template SPLIT_REPO (→ `<project>`); instruksi "Confirm (YES/NO/CUSTOMIZE)" yang labelnya sudah tidak ada; "task medium"/"urgent"/"Next step" di MULAI_DI_SINI.

- File terdampak: `JALANKAN_KIT.md`, `AUDIT_POST_SETUP_PROMPT_v1.md`, `UPDATE_KIT_PROMPT_v1.md`, `SPLIT_REPO_MIGRATION_PROMPT_v1.md`, `PROJECT_LIFECYCLE_PROMPT_v1.md`, `MULAI_DI_SINI.md`, `TEAM_ROLLOUT_GUIDE_v1.md`, `POST_SETUP_CHECKLIST_PROMPT_v1.md`, `LINTASAI_WORKFLOWS_v1.md` (RULE-2/RULE-8f), `lib/popup-helpers.ps1`.
- **`CLAUDE_universal_v1.md` + `package.json` + `templates/INDEX.md`**: versi 1.12.0.

---

## v1.11.1 — 2026-06-12 (Jujur soal pengaman ukuran-tim: 4 kelemahan alur Popup #2 diperbaiki di teks)

> **Tier**: 1 (perbaikan kata-kata, tidak ada perilaku skrip yang berubah) — naik **KECIL** 1.11.0 → 1.11.1. NOT BREAKING.

Audit kecil pasca-rilis v1.11.0 (owner tanya "alurnya ada kelemahan?") menemukan 4 titik — semua diperbaiki di `JALANKAN_KIT.md`:

- **(PENTING) Rasa aman semu — "minta persetujuan" tidak terkunci otomatis**: step 11 sekarang punya "Catatan pengaman" WAJIB — alur review baru TERKUNCI setelah owner aktifkan **branch protection** (kit cuma deteksi + saran; cara: GitHub Settings → Branches atau `.github/scripts/setup-branch-protection.ps1` yang memang ikut terpasang, verified `setup-pola-b.ps1:837`). Step 15 TIM KECIL/BESAR juga dapat action item ini.
- **(PENTING) Robot review PR gagal-merah tanpa kunci API**: step 15 SENDIRI sekarang WAJIB sebut — `ai-review.yml` jalan otomatis saat PR pertama; tanpa `ANTHROPIC_API_KEY` muncul tanda silang merah ("robot belum dikasih kunci, BUKAN kode kamu salah"; verified `ai-review.js:46`).
- **(RAPIKAN) Pilih sesuai rencana, bukan kondisi hari ini**: header Popup #2 ditambah "pilih sesuai RENCANA 3-6 bulan — deteksi otomatis hanya melihat daftar staff SAAT INI".
- **(RAPIKAN) Alur resmi ganti ukuran tim**: step **11b baru** — user chat "ubah ukuran tim jadi X" → AI terapkan ulang step 11+15 level baru (turun level = berhenti menagih, JANGAN hapus file), catat 1 baris di `AGENTS.md`, lapor. Plus: SENDIRI diberi tahu file tim ikut terpasang tapi "tidur".
- **`CLAUDE_universal_v1.md` + `package.json` + `templates/INDEX.md`**: versi 1.11.1.

---

## v1.11.0 — 2026-06-12 (Popup KLIK beneran: "popup klik dulu, teks cadangan" untuk semua Popup #N)

> **Tier**: 2 (perilaku baru backward-compatible) — naik **MENENGAH** 1.10.3 → 1.11.0. NOT BREAKING. Isi/label/urutan popup TIDAK berubah — hanya BENTUK TAMPILNYA.

- **Latar**: feedback owner saat install nyata di project `akses` — "Popup #1" tampil sebagai **blok teks panjang** yang dibalas ketik angka. Buat staf non-programmer itu TIDAK terasa popup; yang diharapkan = **kotak pilihan yang bisa DIKLIK**.
- **Aturan baru "popup klik dulu, teks cadangan"**: kalau tool popup-pilihan native tersedia (di Claude Code: `AskUserQuestion`), AI WAJIB menampilkan tiap popup Tipe A lewat tool itu (kotak klik; recommended di posisi pertama + "(disarankan)"; maks 4 opsi utama). Blok teks `[1]/[2]/[3]` di file prompt = isi kanonik + **fallback** HANYA saat tool tak tersedia. JANGAN render dobel.
- **File terdampak**: `JALANKAN_KIT.md` (definisi Tipe A + section baru "Cara Tampil Popup" 5-aturan + step 8/10/17/18), `POST_SETUP_CHECKLIST_PROMPT_v1.md` [2], `CLAUDE_universal_v1.md` §14.1.0 + §14.1 inti, `LINTASAI_WORKFLOWS_v1.md` §14.1 (RULE-8 baru 5 sub-aturan, 7→8 aturan), `MULAI_DI_SINI.md` FAQ popup, `AUDIT_POST_SETUP_PROMPT_v1.md` Popup #1+#2, `UPDATE_KIT_PROMPT_v1.md` Step 7+9, `SPLIT_REPO_MIGRATION_PROMPT_v1.md` Mode Selector + Step 0.2b, `docs/CLAUDE_CODE_MEDIATED_INSTALL.md`, `templates/PROMPT_LIBRARY.md` onboarding 2.3, `templates/STACK_DETECTION_PATTERN.md` (rujukan "Popup #5" basi dihapus).
- **Diverifikasi 3 pemeriksa silang independen (mode aman cuma-baca)** sebelum rilis: 31 temuan (drift file lapis-kedua, popup 5-opsi yang tak muat kotak klik, label campur Inggris/Indonesia, jargon di kalimat staf) → SEMUA diperbaiki. Aturan penting hasil verifikasi: label klik pakai **"(disarankan)"** (identik mode teks); opsi meta `[skip]`/`[cancel]` lewat "Other" (tidak makan jatah 4 opsi); popup berisiko → opsi AMAN ditaruh pertama di mode klik; auto-deteksi dijalankan SEBELUM popup (hasilnya jadi opsi pertama).
- **Sesi lama yang masih v1.10.x**: bisa langsung minta — ketik "tampilkan tiap pertanyaan sebagai popup klik" di chat; fitur sudah ada di Claude Code, hanya teks kit yang belum menyuruh.
- **`package.json` + `templates/INDEX.md` + header `CLAUDE_universal_v1.md`**: versi 1.11.0.

---

## v1.10.3 — 2026-06-12 (Jaring pengaman popup setup: kalimat-ajaib "lanjutkan setup lintasAI")

> **Tier**: 1 (perbaikan UX onboarding, fungsi inti tidak berubah) — naik **KECIL** 1.10.2 → 1.10.3. NOT BREAKING.

- **`setup-pola-b.ps1` (pesan penutup)**: reframe blok "LANGKAH SELANJUTNYA" — popup pemandu sekarang dinyatakan **MUNCUL OTOMATIS** (staf tidak perlu paste apa-apa). Ditambah fallback eksplisit kalau auto-popup tak jalan: cukup ketik **`lanjutkan setup lintasAI`** ke Claude Code. Paste manual `JALANKAN_KIT.md` tetap valid sebagai cara lama (hasil identik).
- **`CLAUDE_universal_v1.md` §4.3b**: tambah **trigger #6** — kalimat-ajaib "lanjutkan setup lintasAI" / "jalankan JALANKAN_KIT" / "mulai popup setup" → AI WAJIB langsung mulai Phase 5b (popup #1). Menutup celah keandalan: auto-trigger = perilaku AI yang "lunak"; fallback ketik-kalimat = deterministik.
- **Kenapa**: untuk staf non-programmer, popup otomatis = UX terbaik, tapi auto-trigger tak 100% dijamin. Fallback 1-kalimat = jaring pengaman yang tetap mudah (bukan paste file panjang).
- **`CLAUDE_universal_v1.md` + `package.json` + `templates/INDEX.md`**: versi 1.10.3.

---

## v1.10.2 — 2026-06-12 (Tes hijau 132/132: perbaiki false-fail alat-tes setup-pola-b di PowerShell 5.1)

> **Tier**: 1 (perbaikan infrastruktur tes, fungsi kit tidak berubah) — naik **KECIL** 1.10.1 → 1.10.2. NOT BREAKING.

- **`tests/setup-pola-b.Tests.ps1`**: helper `Invoke-Setup` ganti cara tangkap output dari `2>&1 | Out-String` → redirect ke file terpisah (`1> out 2> err`). Di Windows PowerShell 5.1, `2>&1` pada native exe (child `powershell.exe`) membungkus stderr jadi `RemoteException` yang MELEMPAR di parent → tes "Branch 3: non-existent ProjectRoot" false-fail walau script kit SUDAH benar. **Assertion tidak diubah.**
- **Bukti script kit benar** (bukan sekadar tambal tes): reproduksi manual langsung → exit=1, folder bogus tidak dibuat, pesan `Cannot find path ... does not exist` muncul. Tes companion "Does NOT create .claude-kit" memang lulus dari awal.
- **Hasil**: Pester **132 lulus / 0 gagal** (sebelumnya 131 / 1-false-fail). Lint 0 error, 0 warning.
- **`CLAUDE_universal_v1.md` + `package.json` + `templates/INDEX.md`**: versi 1.10.2.

---

## v1.10.1 — 2026-06-12 (Hemat token: contoh Multi-Divisi terisi dipindah ke on-demand)

> **Tier**: 1 (perampingan, fungsi identik) — naik **KECIL** 1.10.0 → 1.10.1. NOT BREAKING. Aturan & format tidak berubah; hanya 1 contoh ilustrasi dipindah dari always-load ke on-demand.

- **`CLAUDE_universal_v1.md` §4.1**: contoh tabel Multi-Divisi terisi penuh (task "validasi email", ~29 baris) dipindah ke `LINTASAI_WORKFLOWS_v1.md` §4.1 (rujukan on-demand, dibaca hanya kalau AI ragu format). Format wajib + 15 lensa + aturan tetap selalu-aktif. **Hemat ~700 token (~3,4%) TIAP sesi** tanpa kehilangan kualitas (contoh tetap tersedia saat dibutuhkan).
- **`CLAUDE_universal_v1.md` + `package.json` + `templates/INDEX.md`**: versi 1.10.1.
- QA: Pester re-run (lihat verifikasi); pindah konten dokumentasi + nomor versi, tak sentuh skrip PowerShell.

---

## v1.10.0 — 2026-06-12 (Tangga Refactor 3-Tingkat: Refactoring → Modular Monolith → Repository Split)

> **Tier**: 2 (fitur baru, backward-compatible) — naik **MENENGAH** 1.9.1 → 1.10.0. Default refactor jadi eksplisit "Tingkat 1 (Refactoring di tempat)" tapi tidak mengubah perilaku lama (split tetap ada di Tingkat 3) → NOT BREAKING.

- **`LINTASAI_WORKFLOWS_v1.md` §4.2 — "Tangga Refactor 3-Tingkat" (BARU)**: progresi standar IT penataan ulang kode, **default = Tingkat 1 (Refactoring in-place, tetap 1 repo)**, naik **bertahap** (pola Strangler Fig) ke **Tingkat 2 (Modular Monolith, masih 1 repo)** → **Tingkat 3 (Repository Split / Polyrepo, multi-repo)**. Aturan keras: default Tingkat 1; naik 1 tingkat per langkah (jangan loncat 1→3); Tingkat 3 = keputusan owner/lead. Istilah baku IT (nama utama) + glosari awam (analogi meja/gudang).
- **`CLAUDE_universal_v1.md`**: stub §4.2 tambah pointer "refactor bertingkat (default paling ringan)" + 4 entri Glossary baru (Refactoring, Modular Monolith, Repository Split/Polyrepo, Strangler Fig).
- **`SPLIT_REPO_MIGRATION_PROMPT_v1.md`**: diposisikan eksplisit sebagai **Tingkat 3** + pengingat default Tingkat 1.
- **Asal kebutuhan**: staf IT non-programmer pertama install → default refactor ringan, naik perlahan ke multi-repo. Istilah profesional baku (Fowler/Brown) supaya nyambung dunia kerja IT.
- **`CLAUDE_universal_v1.md` + `package.json` + `templates/INDEX.md`**: versi 1.10.0.
- QA: smoke PASS (edit dokumentasi + nomor versi; tak sentuh skrip PowerShell → Pester tak terdampak).

---

## v1.9.1 — 2026-06-12 (Anti-halusinasi: verifikasi API library eksternal via docs, bukan ingatan)

> **Tier**: 1 (perbaikan kecil, penguatan aturan yang sudah ada) — naik **KECIL** 1.9.0 → 1.9.1. NOT BREAKING.

- **`CLAUDE_universal_v1.md` §8.2 Aturan 1 (Force Citation)**: tambah baris tabel + catatan — klaim soal API/fungsi library eksternal WAJIB diverifikasi ke dokumentasi resmi versi terpasang, BUKAN ingatan training (API sering berubah antar-versi = celah halusinasi tersering). Bahasa awam + analogi GoFood.
- **Asal temuan**: selaras skill `documentation-lookup` ECC v2.0.0 (MIT) — celah yang §8.2 lama belum tutup eksplisit. Ditulis ulang voice lintasAI, bukan menyalin teks.
- **`CLAUDE_universal_v1.md` + `package.json`**: versi 1.9.1.
- QA: smoke PASS (edit aturan + nomor versi; tak sentuh skrip PowerShell → Pester tak terdampak).

---

## v1.9.0 — 2026-06-12 (Perisai keamanan AI: 4 pertahanan baru + daftar folder rahasia terlarang) [SECURITY]

> **Tier**: 2 (aturan baru, backward-compatible) — naik **MENENGAH** 1.8.0 → 1.9.0 (per §11: aturan baru = MENENGAH). Hanya MENAMBAH pagar keamanan, tidak mengubah perilaku lama → NOT BREAKING. Label **[SECURITY]**: memperkuat pertahanan AI, layak dipasang lebih awal.

- **`CLAUDE_universal_v1.md` §8.1 — 4 aturan anti-penipuan AI BARU (6-9)**: (6) kerahasiaan secret/kunci-API mutlak + **daftar folder rahasia terlarang** (`.env*`, `~/.ssh/`, `~/.aws/`, `~/.config/gcloud/`, `*.pem`/`*.key`) yang AI tak boleh baca-lalu-kirim-keluar; (7) validasi kode/perintah dari isi file sebelum dijalankan; (8) tahan tekanan psikologis ("darurat/atasan/buru-buru" tak membatalkan aturan keamanan); (9) deteksi & tolak penyalahgunaan. Semua bahasa non-programmer + analogi 3-lapis.
- **Asal temuan**: 4 celah ini ditemukan via audit pembanding ECC v2.0.0 (MIT) — pertahanan yang §8.1 lama (5 aturan) belum tutup. Ditulis ulang dalam voice lintasAI, BUKAN menyalin teks ECC.
- **`CLAUDE_universal_v1.md` + `package.json`**: versi 1.9.0.
- QA: smoke PASS (edit dokumentasi aturan + nomor versi saja; tidak sentuh skrip PowerShell → Pester tak terdampak).

---

## v1.8.0 — 2026-06-12 (Mode Selector split: per-Lapisan vs per-Kapabilitas)

> **Tier**: 2 (fitur baru, backward-compatible) — naik **MENENGAH** 1.7.9 → 1.8.0 (per §11: fitur baru = MENENGAH). Default TIDAK berubah (tetap 3 repo per-lapisan) → NOT BREAKING.

- **`SPLIT_REPO_MIGRATION_PROMPT_v1.md` — "Mode Selector" (BARU)**: heavy-refactor/split kini menawarkan 2 bentuk via chat popup: **[1] Split per-Lapisan** (3 repo: frontend/backend/shared — *layered/per-tier split*, ⭐ DEFAULT) atau **[2] Split per-Kapabilitas** (5/6/7 repo: dashboard/shared/core/`<kapabilitas>`×N — *capability/bounded-context split*, istilah DDD). Termasuk **penamaan standar profesional** + aturan keras ([1] default; [2] hanya kalau bounded context jelas + butuh isolasi tim/IP per-kapabilitas; [2] BUKAN microservice; "mulai kecil" tetap berlaku — kapabilitas boleh jadi folder dulu lalu dilepas saat trigger >500 file/>50 model) + peta pola Mode [2].
- **`JALANKAN_KIT.md` Bagian 6**: catatan — saat eksekusi split, AI tanya Mode Selector dulu.
- **`CLAUDE_universal_v1.md` + `package.json`**: versi 1.8.0.
- QA: smoke PASS (edit dokumentasi + nomor versi saja; tidak sentuh skrip PowerShell → Pester tak terdampak).

---

## v1.7.9 — 2026-06-11 (Pola "bahasa sehari-hari" untuk fitur lintas-layanan multi-repo)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. (Dogfood: penambahan pola dokumentasi → naik angka KECIL 1.7.8→1.7.9, konsisten dengan precedent v1.7.6–1.7.8.)

- **`LINTASAI_WORKFLOWS_v1.md` §4.2 — subsection "Fitur Lintas-Layanan (Multi-Repo) dengan Bahasa Sehari-hari" (BARU)**: staff non-programmer cukup deskripsi bahasa sehari-hari untuk fitur yang menyentuh beberapa layanan (mis. *"aku mau bagian lain lihat cuma nama domain + status"*, *"bikin tabel gabungin data A + B"*); AI terjemahkan ke loket (API)/penggabung di balik layar. Termasuk **tabel terjemahan** sehari-hari→teknis + **aturan privasi WAJIB** (default sembunyikan kolom rahasia; AI tanya dulu "kolom mana yang boleh dibagi?"; penggabung lewat API, bukan baca DB mentah — "loket bukan gudang"). + 2 baris intent-mapping baru di tabel §4.2.
- **`CLAUDE_universal_v1.md` §4.2**: pointer diperbarui — sebut fitur lintas-layanan bahasa sehari-hari + jaga-privasi-otomatis.
- **Tujuan**: staff non-programmer tak perlu ketik istilah teknis ("API", "GET /endpoint") + **tak bisa sengaja bocorkan kolom rahasia** (privasi dijaga AI otomatis: default-sembunyikan + tanya-dulu).
- QA: smoke PASS (edit dokumentasi + nomor versi saja; tidak sentuh skrip PowerShell, jadi Pester tak terdampak).

---

## v1.7.8 — 2026-06-11 (Panduan: berapa repo cukup + lindungi bisnis/IP dari duplikasi)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. (Dogfood: perubahan kecil → naik angka KECIL 1.7.7→1.7.8.)

- **`SPLIT_REPO_MIGRATION_PROMPT_v1.md` — section "Berapa repo cukup + melindungi bisnis (IP)" (BARU)**: jawab kekhawatiran owner. **3 repo CUKUP**, jangan over-split (lebih banyak repo = ongkos + permukaan serang, BUKAN keamanan). Perlindungan IP nyata = (1) logika rahasia di backend bukan frontend, (2) repo private + akses seminimal mungkin (split mengaktifkan ini), (3) lisensi proprietary (perisai hukum), (4) NDA staff. "Banyak repo" = miskonsepsi, tidak melindungi duplikasi.
- **Keputusan model update** (terkait UPDATE_GUIDE §6.1): cara terbaik = staff `git pull` (owner curate versi + commit, staff tarik). BUKAN auto-push ke semua (menghapus rem manusia → 1 update buruk merusak 60 staff serentak + risiko supply-chain). BUKAN tiap staff update-upstream sendiri (drift). Ini selaras prinsip "rem manusia untuk aksi berdampak".
- QA: smoke PASS, Pester 132/132.

---

## v1.7.7 — 2026-06-11 (Label [SECURITY] urgensi + dokumentasi update 3-repo)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. (Dogfood: perubahan kecil → naik angka KECIL 1.7.6→1.7.7.)

- **Celah ditutup (#4 update mechanism)**: 4-tier update soal "seberapa besar" — TAPI perbaikan keamanan bisa KECIL tapi MENDESAK, dan tidak ada sinyal urgensi terpisah. Akibat: staff non-programmer bisa menunda perbaikan keamanan kecil → rawan lebih lama.
- **Label `[SECURITY]` (BARU)**: urgensi terpisah dari ukuran. `update-kit.ps1` kini mendeteksi `[SECURITY]` di CHANGELOG (regex berjangkar, sama seperti [BREAKING]/[SCAN-REQUIRED]) → menampilkan peringatan merah "pasang SEGERA, jangan tunda". Didefinisikan di CHANGELOG "Label spesial" + `CLAUDE_universal_v1.md` §11 + `UPDATE_GUIDE.md`.
- **`UPDATE_GUIDE.md` v3 — §6.1 (BARU)**: alur update saat 3-repo (split). Mengoreksi kekhawatiran sebelumnya: `.claude-kit/` IKUT di-commit ke repo (terbukti `setup-pola-b.ps1:1587` + `README:426`), jadi update = owner update+commit+push per repo, staff cukup `git pull` (versi konsisten lewat git, bukan update per-clone).
- Verifikasi jujur: celah update #2 (drift) & #3 (per-clone) TERNYATA sudah teratasi git (`.claude-kit/` di-commit) — penilaian sebelumnya over-worry, dikoreksi.
- QA: smoke PASS, Pester 132/132.

---

## v1.7.6 — 2026-06-11 (Disiplin penomoran versi semver — lindungi non-programmer dari breaking tersembunyi)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. (Dogfood: perubahan kecil → naik angka KECIL 1.7.5→1.7.6.)

- **Celah ditemukan**: tingkat keparahan update (4-tier) terklasifikasi otomatis dari CHANGELOG, TAPI tidak ada aturan yang mengikat tingkat itu ke ANGKA versi. Akibat: perubahan `[BREAKING]` bisa nyelip di angka kecil (mis. 1.7.6) → staff non-programmer yang cuma melihat nomor kira aman, padahal breaking.
- **`CLAUDE_universal_v1.md` §11** — aturan baru "Penomoran versi (semver)": KECIL=perbaikan, MENENGAH=fitur, BESAR=breaking. `[BREAKING]` WAJIB menaikkan angka BESAR. Angka besar yang jarang naik = sehat; yang dihindari = sering-breaking.
- **`CHANGELOG.md`** — section "Disiplin penomoran versi" (tier → angka mana yang naik) di area Label spesial.
- **`UPDATE_GUIDE.md` v2** — §3.1 staff-facing: arti `BESAR.MENENGAH.KECIL` + "kalau angka paling kiri tidak berubah, update hampir pasti aman".
- Catatan: angka BESAR (semver) ≠ "tertinggal". Kit bisa lama di 1.x dengan ratusan update kecil — itu tanda jarang merusak user (bagus).
- QA: smoke PASS, Pester 132/132.

---

## v1.7.5 — 2026-06-11 (Siap-publish: label BETA robot lintas-repo + rapi versi)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Persiapan publish (hasil tinjauan kesiapan independen).

- **README — "Status fitur" (jujur)**: INTI (pasang/aturan/docs/audit/refactor/workflow) = STABIL & teruji. SPLIT-REPO + robot lintas-repo = **BETA** (belum diuji end-to-end di GitHub nyata; jangan produksi tim sampai lulus `ROBOT_CI_TESTING_PLAYBOOK.md`; target stabil v1.8.0). Memilih transparansi daripada menyembunyikan celah.
- **`SPLIT_REPO_MIGRATION_PROMPT_v1.md`** header v1.7.2 → v1.7.5 + tanda 🧪 BETA (seragam versi + jujur status).
- **`lib/kit-files.psd1`** `deprecated_stubs` dikosongkan — sebelumnya keliru mencantumkan `PROJECT_LIFECYCLE_PROMPT_v1.md` yang JUGA ada di `core_prompts` → file ter-DOUBLE-list → ke-hitung 2x manifest. Pengosongan buang duplikat: **manifest 98 → 97** (file tetap terkirim via `core_prompts`, smoke "0 hilang" + Pester 132/132 tetap lulus).
- **Ditunda ke v1.8.0** (pengerasan robot): `ai-review.yml` `npm install` → `npm ci` + lockfile (butuh tambah `package-lock.json`, perubahan lebih besar; robot masih beta — tidak diutak-atik sekarang biar tak merusak).
- Catatan tinjauan: 2 temuan "GENTING" peninjau = false alarm (terverifikasi — `.github/scripts/` memang disalin saat install `setup-pola-b.ps1:837`; `LINTASAI_WORKFLOWS` "Versi 1" = versi internal file, bukan versi kit).
- QA: smoke PASS, Pester 132/132.

---

## v1.7.4 — 2026-06-11 (Installer deteksi AGENTS.md lintasAI vs ASING — cegah jebakan Skip)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Memperbaiki rekomendasi popup AGENTS.md di installer.

- **Celah ditemukan (audit popup "AGENTS.md sudah ada")**: installer selalu rekomendasi **Skip** untuk AGENTS.md existing TANPA cek isinya (`setup-pola-b.ps1:542-544`). Padahal `CLAUDE.md` meng-`@import AGENTS.md` jadi aturan AI aktif (`CLAUDE.md.template:12-13`). Akibat: kalau AGENTS.md lama itu **ASING** (dari tool lain), Skip = aturan asing ikut nyetir AI + bisa bentrok aturan tim. Non-programmer yang klik default "RECOMMENDED" terjebak.
- **`setup-pola-b.ps1` — deteksi format**: sebelum popup, installer kini cek marker (`standar tim IT (Pola B)` / `.claude-kit/CLAUDE_universal_v1.md`):
  - **File lintasAI** → default tetap **Skip** (aman) + pesan "terdeteksi format lintasAI".
  - **File ASING** → default jadi **Backup + replace** (file lama DICADANGKAN, tidak hilang) + peringatan jelas bahwa Skip bisa bentrok. Urutan opsi disesuaikan (recommended di posisi [1]).
- **Keputusan desain**: TIDAK rename AGENTS.md → AGENTS2.md (idе owner) — AGENTS.md = standar lintas-tool, rename malah mengisolasi + menyembunyikan masalah + bingungkan tim. Solusi benar = installer pintar + jalur gabung.
- Pola deteksi meniru `Publish-ClaudeMd` (lib/agents-md.ps1) yang sudah pakai marker untuk CLAUDE.md. Popup call dirapikan ke splatting (lint-bersih).
- QA: smoke PASS, Pester 132/132.

---

## v1.7.3 — 2026-06-10 (Tutup celah onboarding staff pasca-split: kirim `.env` aman + akses paket bersama)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Melengkapi alur "tinggal pull lalu prompt".

- **Celah ditemukan (audit alur serah-terima ke staff)**: model "push 3 repo → staff pull → prompt" melompati 2 langkah dunia-nyata yang MEMBLOKIR staff: (1) file `.env` asli tidak di repo (sengaja) — belum ada cara aman owner mengirimnya; (2) `npm install` butuh "login" ke paket bersama `@project/shared` (private registry) per komputer staff.
- **`OWNER_SETUP_CHECKLIST` v2**:
  - **A7 (BARU)** — kirim `.env` ke staff dengan AMAN (pengelola sandi / env platform deploy; JANGAN WA/email). Nuansa per peran: frontend cuma `NEXT_PUBLIC_*` (tidak sensitif), backend `DATABASE_URL` (sensitif).
  - **B7 (BARU)** — atur akses paket bersama (`.npmrc`) di komputer tiap staff; tanpa ini `npm install` gagal.
  - **Alur pull staff** diperjelas (1 invite → 2 pull → 3 cek-kesehatan AI tuntun `npm install` + taruh `.env` → 4 baru prompt), + peringatan "tinggal pull" hanya mulus kalau A7+B7 beres.
- QA: smoke PASS, Pester 132/132.

---

## v1.7.2 — 2026-06-10 (Catatan `docs/` ikut OTOMATIS ke tiap repo saat pecah — 0 pindah manual)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Menutup celah: split menyalin KODE tapi tidak `docs/`.

- **Celah ditemukan**: `SPLIT_REPO_MIGRATION_PROMPT` Step 0.4 (distribusi file) hanya menyalin KODE; folder `docs/` tidak ikut. Akibat: `architecture.md`, `db-schema.md`, `glossary.md`, `decisions/` tertinggal di monolith → owner non-programmer harus pindah manual.
- **`Step 0.4b` (BARU)** — distribusi `docs/` otomatis per jenis:
  - Catatan kode per-bagian → ikut kodenya (jalur LENGKAP matang: dibuat-ulang per repo di Bagian 6b).
  - **Denah database** (`db-schema.md`) → **shared + backend**, **TIDAK frontend** (sejalan pengaman `.env`).
  - **Peta besar + kamus** (`architecture.md`/`glossary.md`) → tiap repo punya **versi SENDIRI** (dibuat-ulang, fokus per-repo) — BUKAN 1 induk disalin sama (cegah basi + bingung).
  - **Catatan keputusan** → ikut repo relevan; keputusan split ke ketiga repo.
  - **`cross-repo-overview.md` (BARU)** — peta hubungan 3-repo singkat, disalin ke ketiga repo (gambaran besar tanpa loncat repo).
- **Keputusan `architecture.md` per-repo** (bukan 1 induk): dipilih demi tim non-programmer — fokus + tidak basi + otomatis. Gambaran besar dijaga oleh `cross-repo-overview.md` singkat.
- `Step 0.7` verify + Stage 0 LARANGAN diperbarui (cek catatan ter-distribusi; frontend tanpa denah DB).
- QA: smoke PASS, Pester 132/132.

---

## v1.7.1 — 2026-06-10 (Dokumentasi dibuat TERAKHIR untuk project matang — anti catatan basi)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Hanya mengubah URUTAN untuk project matang; project fresh tidak berubah.

- **Masalah ditemukan (audit alur install)**: untuk project matang/setengah-jadi, mode default [1] LENGKAP membuat SEMUA catatan kode (~30-60 menit) di **langkah 12 — SEBELUM** audit (langkah 16) + SEBELUM rapikan/pecah. Akibatnya: dokumentasi dibuat atas kode yang sebentar lagi berubah → **langsung basi** + buang token + menyesatkan staff non-programmer. Juga melanggar prinsip kit sendiri (§7.2 LAZY-GENERATE).
- **Prinsip**: dokumentasi = foto kondisi akhir; jangan memfoto sesuatu yang sebentar lagi ditata ulang.
- **`JALANKAN_KIT.md` — urutan sadar-kondisi**: Popup #1 [1] LENGKAP kini cabang per kematangan project:
  - **Fresh/kosong** → catatan dibuat SEKARANG (tidak berubah dari sebelumnya).
  - **Matang/setengah-jadi** (≥90 file + business logic) → catatan KODE **ditunda ke Bagian 6b** (BARU), dijalankan SETELAH audit + rapikan/pecah, pada kode FINAL. Kalau dipecah → bulk-docs di tiap folder hasil pecah. **Denah database tetap dibuat di awal** (struktur DB jarang berubah saat refactor ringan + berguna untuk audit).
- QA: smoke PASS, Pester 132/132.

---

## v1.7.0 — 2026-06-10 (Flow benar: refactor ringan → CEK-ULANG → pecah; standar profesional re-baseline)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Meluruskan alur split ke standar IT (flow 1, bukan flow 2).

- **Keputusan profesional**: alur yang benar = `monorepo → refactor ringan → CEK-ULANG ringan → pecah` (flow 1), BUKAN langsung pecah (flow 2). Alasan: perubahan besar (pecah-repo = migrasi susunan) WAJIB mulai dari kondisi sehat-terverifikasi + peta modul yang masih akurat. Memecah pakai peta basi = 3 repo mewarisi kekacauan.
- **`SPLIT_REPO_MIGRATION_PROMPT_v1.md` — `Step 0.2c` (BARU)**: cek-ulang ringan sebelum `Step 0.3` (bikin folder). 3 cek cuma-baca: (1) tes-asap alur utama + test hijau, (2) GAMBAR-ULANG peta batas modul (file pindah saat dirapikan → peta lama basi), (3) sambungan bersih (frontend tidak colok DB/server langsung). Gagal → JANGAN pecah, lapor owner. Ditambah ke Stage 0 LARANGAN (tidak boleh lompat refactor→Step 0.3 tanpa cek ini).
- **`Step 0.2b` — tambah worst-offender "sambungan nyampur"**: audit pra-split kini eksplisit cari frontend yang colok langsung ke database/backend (biang #1 split putus untuk monorepo bikinan AI).
- **`REFACTOR_STANDARD.md` — gate "mulai refactor BERAT"**: tambah item checklist "cek-ulang ringan (scan ulang)" = gambar-ulang peta batas + tes-asap hijau sebelum pecah.
- QA: smoke PASS, Pester 132/132.

---

## v1.6.9 — 2026-06-10 (Standar refactor: tingkat USAHA ringan/sedang/berat + tes-asap pasca-refactor)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Lanjutan v1.6.7/v1.6.8 (REFACTOR_STANDARD lintas-divisi).

- **`REFACTOR_STANDARD.md` v3 — sumbu "tingkat USAHA" (🟩 RINGAN / 🟨 SEDANG / 🟥 BERAT)**: dipisah jelas dari "tingkat keseriusan" (GENTING/PENTING/RAPIKAN). Tabel + analogi (1 laci / 1 lemari / seluruh rumah) + aturan emas "jangan tumpuk 2 BERAT sekaligus".
- **Perbaiki contoh yang salah-label**: "pecah file raksasa" & "satukan komponen dobel yang sudah beda-beda" dikoreksi dari RINGAN → 🟨 SEDANG (jujur — sebelumnya keliru disebut ringan). 10 gejala "Kapan PERLU" kini diberi label usaha per-item. Split repo eksplisit = 🟥 BERAT.
- **Bagian BARU "Setelah refactor — tes-asap manual"**: jabarkan konkret untuk staff non-programmer (buka menu A/B/C/D/E satu-satu, revert kalau rusak) — menjawab "apakah perlu cek fitur setelah refactor". Profesional: ini *smoke test*, wajib walau refactor ringan.
- **Bagian BARU "Kapan boleh mulai refactor BERAT / split repo"**: gate bersyarat (refactor ringan selesai + lulus tes-asap → perjelas sambungan FE↔BE↔DB → cara balik ada → satu perubahan berisiko/waktu) + ingatkan tawarkan opsi 1-repo-rapi-modular sebagai alternatif split.
- QA: smoke PASS, Pester 132/132.

---

## v1.6.8 — 2026-06-10 (Wire "refactor-ringan sebelum split" ke alur pecah-repo)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Lanjutan v1.6.7 (REFACTOR_STANDARD v2 lintas-divisi).

- **`SPLIT_REPO_MIGRATION_PROMPT_v1.md` Stage 0 — Step 0.2b (BARU)**: sebelum memecah monolith, AI **audit cuma-baca lintas-divisi** (pakai `REFACTOR_STANDARD.md` v2 tabel 11 divisi) → cari worst offenders (file raksasa, komponen dobel, rahasia di kode, N+1, sisa konversi html→nextjs) berlabel 🔴🟡🟢 → **WAJIB popup tawarkan**: `[1]` rapikan terparah dulu (disarankan kalau ada 🔴/🟡) lalu pecah / `[2]` pecah langsung, rapikan per-repo / `[skip]`. Default = [1] kalau ada 🔴/🟡, selain itu [2].
- **Kenapa**: memecah monolith berantakan = menyalin kekacauan ke 3 repo (3x lebih susah dirapikan). Bersihkan worst offenders dulu → pecah dari dasar lebih bersih (jawaban owner: monorepo → refactor ringan & terarah → split → polish per-repo).
- **Pengaman**: refactor OPSIONAL + cuma-baca dulu; RINGAN & TERARAH (worst offenders saja, bukan rombak total); konfirmasi per item + test hijau tiap langkah; kalau owner tolak → langsung pecah, jangan paksa. Ditambah ke Step 0.2b + Stage 0 LARANGAN.
- QA: smoke PASS, Pester 132/132.

---

## v1.6.7 — 2026-06-10 (Output install npx=manual identik + standar refactor lintas-divisi)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING.

### 🔗 Output jalur npx & paste-manual dijamin SAMA (tutup drift banner)

- **Bug ditemukan**: banner penutup `setup-pola-b.ps1` masih menjelaskan popup LAMA (Team Mode / Bulk-bootstrap / Skenario) yang sudah disatukan/dihapus di v1.6.2/v1.6.6. Akibatnya jalur `npx init` menggambarkan set popup BERBEDA dari yang benar-benar dijalankan (sumber tunggal `JALANKAN_KIT.md`). Inilah perbedaan output yang dikhawatirkan.
- **Fix**: banner + AI-checklist penutup tidak lagi mengenumerasi popup sendiri — keduanya menunjuk **SUMBER TUNGGAL `JALANKAN_KIT.md` Bagian 2-7**. Jadi `npx` dan paste-manual sama-sama membaca daftar yang sama → **output identik**.
- **Bahasa non-programmer**: baris user-facing di banner dirapikan (`Path resolution` → "Lokasi aturan"; hapus enumerasi popup teknis; tambah keterangan "jalur npx & paste pakai daftar yang sama").

### 🔧 REFACTOR_STANDARD.md v2 — lintas-divisi + manfaat diperluas

- **Tabel aksi refactor per-divisi (BARU)**: 11 divisi (Backend, Frontend, Database, DevOps, Security, UI/UX+a11y, Web Design, QA/Test, SEO/Performa, ML/AI, Arsitektur/Shared) — tiap divisi: gejala yang dicari + contoh rapikan bahasa awam. AI isi yang terbukti ada gejalanya (force citation), sisanya "—".
- **Manfaat diperluas** (atas permintaan owner): tambah "Gampang dikerjakan tim" + "Clean code (standar profesional)" + blok penegasan **kenapa refactor penting khusus tim AI-first** (file raksasa/dobel = AI lambat+boros token+lebih mudah ngarang → refactor langsung menaikkan AI-gampang-analisa + hemat token + anti-halusinasi + minim bug).

### 📝 Catatan

- Rekomendasi urutan (jawaban owner): monorepo → **refactor ringan & terarah** (worst offenders saja) → split → polish per-repo. Belum di-wire ke alur split (cuma saran).
- QA: smoke PASS (parse setup-pola-b.ps1 OK), Pester 132/132.

---

## v1.6.6 — 2026-06-10 (Rapikan popup install: label non-programmer + buang opsi mubazir)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Edit teks popup (markdown), tidak ada kode jalan yang berubah.

### 🧹 Popup install jadi bahasa non-programmer + buang opsi membingungkan

- **Popup #1 (cara pasang)**: label jargon Inggris → Indonesia awam. `FULL` → **LENGKAP**, `QUICK` → **CEPAT**, `ADVANCED` → **PILIH SENDIRI**. (Digit 1/2/3 + logika sama; cuma label.)
- **Popup #2 (ukuran tim)**: **opsi `[4] MIGRATION` DIHAPUS** — mubazir (keadaan "project lama" sudah DIDETEKSI OTOMATIS oleh Phase 5b) + mencampur 2 sumbu beda (ukuran tim vs keadaan project) + kata "migrasi" tabrakan makna dengan "pecah-repo". Label sisanya non-programmer: `GROWING TEAM` → **TIM BESAR/BERKEMBANG**, `SMALL TEAM` → **TIM KECIL**, `SOLO` → **SENDIRI**.
- **"Rapikan ke Standar Tim" (Stage 4)** kini ditawarkan via **deteksi-otomatis** (kalau ada code existing), LEPAS dari ukuran tim — menggantikan opsi [4] lama. Tidak ada fungsi hilang.
- Selaras di semua rujukan: `JALANKAN_KIT.md` (Bagian 2/3/4/6 + langkah 12/15/20 + aturan workflow), `CLAUDE_universal_v1.md` §4.3b, `POST_SETUP_CHECKLIST_PROMPT_v1.md`. Diverifikasi tidak ada label lama (GROWING/SMALL/SOLO/MIGRATION/FULL/QUICK/ADVANCED) yang menggantung di 3 file aktif.
- **Kenapa**: popup install dulu melanggar aturan kit sendiri (§2.1 #7: label wajib non-programmer). Sekarang konsisten.
- QA: smoke PASS, Pester 132/132.

---

## v1.6.5 — 2026-06-10 (Checklist tugas teknis sekali-pasang owner/lead)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING.

- **`templates/OWNER_SETUP_CHECKLIST_v1.md` (BARU)**: checklist 1 halaman bahasa non-programmer berisi **hanya** tugas teknis yang AI belum bisa kerjakan sendiri (yang tersisa di model "1 owner/lead teknis + N staff non-programmer"). Bagian A WAJIB semua tim (pasang komputer, pasang kit, isi CODEOWNERS + staff-roster, atur akses Git, ANTHROPIC_API_KEY); Bagian B kalau split-repo (buat repo, token paket+penghubung, nyalakan kunci pengaman gabung, uji robot via playbook); Bagian C kalau pakai database (jenjang akses DB, RLS). Tiap item: apa + kenapa + analogi + rujuk file kit yang detail.
- Ter-deploy ke `docs/OWNER_SETUP_CHECKLIST.md` tiap project (setup-pola-b teamFiles) + terdaftar `lib/kit-files.psd1`. Menutup celah: bagian teknis "owner manual" dulu tersebar di banyak file; sekarang 1 halaman terpusat.
- QA: smoke PASS, Pester 132/132.

---

## v1.6.4 — 2026-06-10 (Panduan uji+pulih robot CI + ramping §4.3b)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Tindak lanjut usul audit v1.6.3 (disetujui owner).

### ➕ Panduan uji + pulih robot CI (untuk staff non-programmer)

- **`templates/ROBOT_CI_TESTING_PLAYBOOK.md` (BARU)**: panduan langkah bahasa non-programmer untuk tim 20-30 orang yang menyalakan robot lintas-repo. Isi: (1) **5 cek uji** di repo kecil sebelum dipakai produksi (update kecil auto-gabung, update besar ditahan, kunci pengaman aktif, persetujuan penanggung jawab diminta, timpa-paksa ditolak); (2) **3 skenario pulih** kalau robot salah (salah-gabung → revert, paket bersama rusak → balik di sumber, robot mogok → baca tab Actions + 3 penyebab umum); (3) **cara pantau harian** baca tab "Actions" (analogi lampu dashboard mobil); (4) tabel siapa-boleh-apa per peran.
- Terdaftar di `lib/kit-files.psd1` (on-demand, dirujuk dari `CROSS_REPO_TYPES_PIPELINE.md` sebagai WAJIB-baca sebelum gelar ke tim). Menutup celah: dulu staff menyalakan robot tanpa panduan uji/pulih.

### ✂️ Ramping §4.3b (hemat token always-load)

- `CLAUDE_universal_v1.md` §4.3b (Auto-Trigger Post-Install) dipangkas ~53 → ~22 baris. **Pemicu (trigger condition) + larangan-inti TETAP** (fungsi tidak hilang). Detail checklist [1]-[5] + larangan lengkap yang sudah canonical di `JALANKAN_KIT.md` Bagian 2-7 + `POST_SETUP_CHECKLIST_PROMPT_v1.md` [6] diganti pointer. Hemat ~30 baris di file yang dibaca AI TIAP sesi.

### 📝 Catatan

- Glossary mini §13 SENGAJA tidak dihapus (berguna sebagai kamus instan AI; hemat-nya kecil, ruginya kehilangan definisi instan).
- QA: smoke PASS, Pester 132/132.

---

## v1.6.3 — 2026-06-10 (Perbaikan dari audit cek-silang v1.6.2 — 4 bug kecil)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Hasil pemeriksaan cek-silang cuma-baca atas v1.6.2 (15 dugaan → 8 lolos cek-silang; 7 ditolak karena bukti meleset). 4 perbaikan kecil yang nyata:

- **Robot gabung-otomatis lapor jujur saat gagal** (`AUTO_MERGE_SHARED_WORKFLOW.yml`): dulu kalau "gabung-otomatis" gagal dinyalakan (mis. kunci pengaman gabung belum aktif), robot tetap tandai job SUKSES (hijau) padahal permintaan-gabung tidak jadi tergabung → owner tak tahu. Sekarang job ditandai GAGAL (merah) + komentar penjelas + propagate exit code.
- **Robot catat alasan saat versi tak terbaca** (`AUTO_MERGE_SHARED_WORKFLOW.yml`): tambah peringatan eksplisit (nilai old/new + apa yang dicek) saat versi paket bersama tidak terbaca dari `package.json` — supaya lead tahu ini "versi tak terbaca", bukan bug CI misterius.
- **Skrip kunci pengaman gabung ikut terpasang** (`setup-pola-b.ps1` teamFiles): `setup-branch-protection.ps1` dulu terdaftar di kit tapi tidak disalin ke `.github/scripts/` saat setup tim → robot yang menyuruh menjalankannya menunjuk file yang tidak ada. Sekarang ikut tersalin (berguna juga untuk tim 1-repo 20-30 orang, bukan cuma split).
- **Angka jargon basi diperbaiki** (`POST_SETUP_CHECKLIST_PROMPT_v1.md`): rujukan "Reference Card 18 jargon" (sejak v1.5.15 sudah 23) diganti tanpa-angka → tidak basi lagi.

### 📝 Catatan audit

- 7 dugaan ditolak saat cek-silang (anti-halusinasi): mis. klaim "tidak ada dokumentasi pengaman skala" (ternyata ada di AUTO_MERGE + setup-branch-protection + CODEOWNERS), klaim "bug redirect PowerShell" (pola valid di PS 5.1), klaim duplikasi glossary 3x (sebenarnya beda tujuan).
- **Tertunda (usul, perlu keputusan owner)**: (a) tambah `ROBOT_CI_TESTING_PLAYBOOK.md` (cara uji + pulih robot CI untuk staff non-programmer) — PENTING; (b) ramping §4.3b di CLAUDE_universal (sisakan pemicu + penunjuk, pangkas detail yang sudah jadi di JALANKAN_KIT/POST_SETUP) — hemat token, perlu hati-hati.

---

## v1.6.2 — 2026-06-10 (Satukan popup + 3 rambu skala-besar 20-30 orang)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Edit markdown prompt + tambah 2 file template robot GitHub. ⚠️ Template robot baru (gabung-otomatis + kunci pengaman) **diuji di repo nyata** owner (sintaks YAML/PowerShell divalidasi di kit, perilaku runtime di GitHub diuji owner).

### 🧩 Popup disatukan (1 sumber, anti-melenceng)

- **Sumber tunggal isi popup** = `JALANKAN_KIT.md` Bagian 2-7. File jalur `npx init` (`POST_SETUP_CHECKLIST_PROMPT_v1.md`) **tidak lagi mendefinisikan popup sendiri** — dulu punya set beda (Team Mode/Bulk/Skenario) dari `JALANKAN_KIT.md` (FULL/QUICK/ADVANCED + Project Type + Audit + Split) → sumber melenceng. Sekarang jalur npx = tipis, cuma menjalankan flow di sumber tunggal.
- **Pending Action Items dipindah** ke `JALANKAN_KIT.md` Bagian 7 (tabel 7-row + tier-aware popup-per-item) — dulu di 2 tempat dan sempat beda. Jalur paste-manual sekarang juga dapat tabel ini (tidak ada fitur hilang).
- **`CLAUDE_universal_v1.md` §4.3b Phase 5b** diselaraskan: rujuk popup canonical `JALANKAN_KIT.md` Bagian 2-7.

### 🚦 3 rambu skala-besar (untuk tim 20-30 orang non-programmer)

- **Gabung-otomatis-aman** (`templates/github/AUTO_MERGE_SHARED_WORKFLOW.yml`, BARU): permintaan-gabung otomatis dari robot terima-update → update KECIL (patch) digabung otomatis setelah cek hijau; update BESAR (major/minor) ditahan + label `perlu-ditinjau-manusia` + komentar. Menggantikan contoh "auto-merge semua" yang berisiko di `CROSS_REPO_TYPES_PIPELINE.md`.
- **Kunci pengaman gabung** (`templates/github/scripts/setup-branch-protection.ps1`, BARU): skrip sekali-jalan menyalakan branch protection (wajib permintaan-gabung + cek hijau + review CODEOWNERS + larang force-push). **Default SIMULASI** (cuma lihat); butuh `-Apply` untuk benar-benar menyalakan. Staff non-programmer jadi tidak bisa "tidak sengaja" merusak versi utama.
- **Penunjuk penanggung jawab** (`templates/github/CODEOWNERS.template`, SUDAH ADA): diverifikasi terdaftar + dirujuk dari pending items + sebagai prasyarat kunci pengaman gabung.

### 📝 Catatan

- Penanda aman 8 popup berisiko (`(default, safe choice)`) sudah ada sejak sebelumnya — tidak diubah.
- 2 file template robot baru terdaftar di `lib/kit-files.psd1` (ikut terpasang + lulus cek manifest). Dipanggil on-demand saat split-repo (bukan auto-copy ke `.github/`).

---

## v1.6.1 — 2026-06-10 (Tahap B: tutup gap sambungan antar-repo — versi pintar + anti-bocor + ringkasan perubahan)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Memperbaiki template robot GitHub Action (jalan di repo backend/frontend staff). ⚠️ Template CI ini **diuji di repo nyata** owner (tidak bisa dijalankan di tes kit) — sintaks YAML sudah divalidasi.

### ✨ Tahap B — 3 perbaikan robot antar-repo

- **Penomoran versi pintar** (`PUBLISH_SHARED_WORKFLOW.yml`): dulu selalu naik kecil (`npm version patch`). Sekarang baca pesan commit → `BREAKING CHANGE`/`feat!:` = naik besar (major), `feat:` = naik sedang (minor), selain itu = kecil (patch). Versi jadi jujur mencerminkan besar perubahan.
- **Anti-bocor tipe rahasia** (`PUBLISH_SHARED_WORKFLOW.yml`): langkah pengaman baru — kalau ada tipe sensitif (`Credential`/`Password`/`ApiKey`/`Secret`/`Session`/`Token`/`PrivateKey`) ter-export ke paket bersama (yang dipakai frontend), robot **GAGAL sebelum publish** (cegah kebocoran rahasia ke repo yang diakses lebih banyak orang).
- **Ringkasan perubahan di permintaan-gabung** (`RECEIVE_BACKEND_UPDATE.yml`): permintaan-gabung otomatis sekarang berisi blok "Apa yang berubah di tipe data" (beda tipe lama vs baru) — frontend staff tahu instan apa yang berubah tanpa harus baca kode.

### 🔒 Pengaman / kejujuran

- Sintaks YAML kedua template **divalidasi** (parse OK). Tapi perilaku runtime-nya **wajib diuji di repo GitHub nyata** owner — tidak bisa dites di kit (tidak ada GitHub Actions runner di sini). Path `dist/index.d.ts` = asumsi, sesuaikan per proyek (ada komentar).

### ℹ️ Catatan

- Penanda aman 8 popup berisiko **ternyata sudah ada** (`(default, safe choice)`) — tidak perlu diubah. Sisa popup: satukan 2 versi (POST_SETUP vs JALANKAN_KIT) — perlu keputusan owner "versi mana kanonik" supaya tidak hilang fitur.

### ✅ QA (sisi kit)

- Smoke PASS (manifest 94, 0 orphan) + seluruh Pester 132/132 lulus.

---

## v1.6.0 — 2026-06-10 (Tahap A: pre-provision lintasAI ke 3 folder split — staff tinggal clone + kerja)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING (fitur baru, tidak mengubah perilaku existing). Staff cukup `kit.ps1 update`. Awal peta jalan v1.6 "otomasi split-repo untuk staff non-programmer".

### ✨ BARU — Pre-provision lintasAI saat split (`SPLIT_REPO_PREPROVISION_v1.md`)

- **`templates/SPLIT_REPO_PREPROVISION_v1.md`** (baru): panduan AI untuk **memasang lintasAI lengkap (`.claude-kit/` + `CLAUDE.md` loader + `AGENTS.md` per peran) + berkas pengaturan + `.env.example` aman ke MASING-MASING 3 folder split SEKALIGUS saat Stage 0**. Hasil: begitu owner push, **staff tinggal clone → lintasAI sudah ada → langsung kerja** (tidak perlu "install lintasAI lagi" di tiap repo). Bahasa non-programmer (analogi pindahan ruko datang-lengkap).
- **`SPLIT_REPO_MIGRATION_PROMPT_v1.md` Stage 0** diperkaya: tambah **Step 0.5b** (panggil pre-provision) + validasi Step 0.7 (cek lintasAI terpasang + frontend `.env` bebas secret) + LARANGAN baru (jangan salin `.env` monolith mentah ke frontend).

### 🔒 Pengaman anti-bug (guardrails)

- **COPY bukan MOVE** (monorepo asli utuh sebagai fallback). **Frontend `.env.example` DILARANG punya `DATABASE_URL`/secret** (cegah kebocoran). **Jangan salin penanda per-install** (`.install-manifest.json`, `.git-identity-*`, dll) ke folder split (cegah penanda basi). **Validasi per folder** sebelum lapor "siap push". Owner tetap yang `git push` + `npm publish` (keputusan manusia).

### ℹ️ Catatan temuan (peta infrastruktur cross-repo)

- Audit cuma-baca konfirmasi: **sambungan otomatis antar-repo sudah ~70% terbangun** (`PUBLISH_SHARED_WORKFLOW.yml`, `TRIGGER/RECEIVE_BACKEND_UPDATE.yml`, Renovate, notifikasi Discord). Sisa gap (penomoran versi pintar, anti-bocor tipe, ringkasan perubahan di PR) = Tahap B (v1.6.x berikutnya).

### ✅ QA

- Smoke PASS + seluruh Pester lulus + PSScriptAnalyzer bersih.

---

## v1.5.28 — 2026-06-10 (Standar refactor lintas-divisi + urutan popup "Skenario" diperbaiki)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Staff cukup `kit.ps1 update`. Bagian dari peta jalan "otomasi untuk staff non-programmer".

### ✨ BARU — Standar Refactor (`docs/REFACTOR_STANDARD.md`)

- **`templates/REFACTOR_STANDARD.md`** (baru, ter-deploy ke `docs/` tiap proyek): standar netral profesional lintas-divisi soal merapikan kode — **kapan perlu refactor, kapan JANGAN, cara aman 5 langkah, checklist 12-cek, manfaat per divisi** — semua bahasa non-programmer (analogi gudang / Google Drive). Label keseriusan 🔴 GENTING / 🟡 PENTING / 🟢 RAPIKAN selalu dipasangkan arti jelasnya. Staff non-programmer cukup minta AI "cek apakah kode perlu dirapikan pakai REFACTOR_STANDARD.md" → AI baca-saja + kasih daftar berlabel. Terdaftar di `kit-files.psd1` + di-copy oleh `setup-pola-b.ps1` (Team Mode).

### 🔧 RAPIKAN — Urutan popup "Skenario Adopsi"

- **Popup #3 (Skenario Adopsi) di `POST_SETUP_CHECKLIST_PROMPT_v1.md`**: opsi default dipindah ke posisi **[1] + ⭐ recommended** (sesuai §14.1 RULE-4b: opsi recommended WAJIB di posisi [1]). Sekarang `[1] Proyek setengah jadi (DEFAULT)` → Stage 4 Rapikan ke Standar Tim, `[2] Proyek BARU` → Stage 1, `[3] Langsung ngoding`. Mapping eksekusi disesuaikan. (Permintaan owner: default = "setengah jadi" karena tim sudah punya code.)

### ✅ QA

- Smoke PASS + seluruh Pester lulus + PSScriptAnalyzer bersih.

---

## v1.5.27 — 2026-06-10 (Pengerasan alur install pertama: 5 temuan audit dibereskan)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Hasil audit cuma-baca alur install pertama (10 pemeriksa AI, temuan dicek-silang). 0 crash pasti; 3 PENTING + 2 RAPIKAN nyata dibereskan. Staff cukup `kit.ps1 update`.

### ⚠️ PENTING (3 perbaikan jalur kritis install)

- **Penyalinan kit (jalur NPX) kini berpagar (`try/catch`).** `setup-pola-b.ps1` menyalin isi kit dari unduhan ke `.claude-kit/`. Dulu blok ini tanpa pengaman di bawah `$ErrorActionPreference='Stop'` — kalau penyalinan gagal (antivirus mengunci file / path >260 karakter / folder read-only / disk penuh), staff dapat error teknis mentah. Sekarang: pesan ramah + 3 kemungkinan penyebab + cara jalankan ulang.
- **`-Force` kini benar-benar memperbarui `AGENTS.md`.** Dokumentasi `.PARAMETER Force` bilang "Timpa AGENTS.md", tapi kode diam-diam tetap `skip` walau `-Force` aktif (menyesatkan: staff re-run berharap refresh, tak terjadi). Sekarang `-Force` + `AGENTS.md` ada → `backup-replace` (backup otomatis dulu, baru timpa).
- **Folder bersarang ganda `.claude-kit/.claude-kit` kini terdeteksi.** Deteksi nested-extract dulu pakai klausa `$kitFolderName -ne '.claude-kit'`, jadi kasus folder-dalam yang JUGA bernama `.claude-kit` lolos (blind spot) → aturan ter-tulis di tempat salah, gagal diam-diam. Sekarang deteksi murni dari "folder induk bernama `.claude-kit`" — mencakup semua kasus nested.

### 🧹 RAPIKAN (kebersihan kode)

- **`CLAUDE.md` ditambah ke `$excludeNames`** heuristik "proyek hampir kosong". `CLAUDE.md` yang baru di-deploy installer dulu ikut terhitung (sementara `AGENTS.md` sudah dikecualikan) → kadang `docs/` dibuat padahal proyek sebenarnya kosong. Kini konsisten dengan `AGENTS.md`.
- **`Set-StrictMode -Version Latest` dipasang eksplisit dari awal `setup-pola-b.ps1`** (bukan "bocoran" dari `lib/manifest.ps1` yang di-dot-source belakangan). Perilaku jadi deterministik, tidak bergantung urutan muat file.

### ℹ️ BUKAN-bug (dicek-silang, sengaja tidak diubah)

- **Proyek non-Node ditolak** = by-design (kit v1.x Node-only), penolakannya sopan + ada saran. Backlog v2.
- **Prompt email git masih muncul walau `-Force`** = peluang otomasi (turunkan dari git config), belum dikerjakan — perlu verifikasi lanjut.

### ✅ QA

- Seluruh Pester 132/132 lulus, 0 gagal. SIMULASI penuh (jalur NPX) exit 0 di bawah StrictMode. PSScriptAnalyzer 0 temuan di `setup-pola-b.ps1`. Smoke PASS (parse 31, manifest 92, orphan 0).

---

## v1.5.26 — 2026-06-10 (Pemasang-loader proyek staff: CLAUDE.md auto-load yang ANDAL)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Menutup gap "aturan tidak ter-load mekanis di proyek staff" (jalur NPX/Pola B yang direkomendasikan). Staff cukup `kit.ps1 update`.

### ⚠️ PENTING (aturan kini benar-benar ke-load di proyek staff)

- **Setup Pola B kini men-deploy `CLAUDE.md` loader di root proyek.** Claude Code **OTOMATIS** baca `CLAUDE.md` (BUKAN `AGENTS.md`) — dulu kit cuma menaruh `AGENTS.md` yang menunjuk aturan lewat tulisan, jadi aturan bisa TIDAK ke-load. Sekarang `CLAUDE.md` kecil di-deploy yang `@import .claude-kit/CLAUDE_universal_v1.md` (aturan tim, versi terkunci) + `@./AGENTS.md` (override proyek). Aturan ter-load **MEKANIS** tiap sesi — single source, tidak ada salinan per-orang yang basi.
- **`Publish-ClaudeMd` (baru, `lib/agents-md.ps1`)**: deploy loader yang **idempotent** (skip kalau sudah loader) + **backup otomatis** kalau ada `CLAUDE.md` custom. Gagal deploy loader = **non-fatal** (setup tetap jalan).
- **Blok lama "AGENTS.md menang per path resolution" dihapus** dari `setup-pola-b.ps1` (premis itu KELIRU — `AGENTS.md` tidak auto-load). Prosa `AGENTS.md.template` + tabel trade-off `README` disinkronkan ke model baru.

### ✅ QA

- Pester test baru `tests/claude-md-loader.Tests.ps1` (static guard + end-to-end `Publish-ClaudeMd`: create / idempotent / backup-custom). smoke PASS. `$Timestamp` yang jadi tak terpakai dihapus (bersih PSScriptAnalyzer).

---

## v1.5.25 — 2026-06-10 (2 aturan terjebak di catatan lokal AI dipindah ke kit — hasil penyisiran 25 catatan)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Lanjutan governance: aku sisir 25 catatan lokal AI (cuma-baca) satu per satu. Hasil: 9 aturan sudah di kit, 9 konteks (tetap lokal), 5 bukan-lintasAI, dan **2 aturan masih terjebak** di lokal → sekarang dipindah ke kit. Staff cukup `kit.ps1 update`.

### ⚠️ PENTING (2 aturan yang tadinya cuma di lokal owner)

- **`§6.2` (baru) — Memory persist, simpan proaktif pasca-approval.** §6.1 cuma mengatur sisi BACA (anti-stale recall); ini menutup sisi TULIS: begitu user setuju, AI WAJIB segera simpan (ke aturan/memory + update `MEMORY.md` + lapor "Tersimpan: [daftar]") di sesi yang sama — jangan tunda. Supaya user tidak perlu mengulang prompt yang sama.
- **`§15` (baru) — Mode Auto-Confirm sebagai OPT-IN (default MATI).** Kit selama ini cuma punya GUARDRAIL-nya (§8.2 Aturan 5: aksi destruktif wajib konfirmasi) tanpa aturan dasar mode-nya. Ditambah sebagai opt-in: kalau dinyalakan, AI lewati konfirmasi Y/N sederhana + batch tugas + tidak pakai popup tanya untuk hal sederhana. **Sengaja DEFAULT MATI** — untuk staff non-programmer, "tanya dulu" itu rambu pengaman. Aksi destruktif tetap wajib konfirmasi (tidak bisa dimatikan).

### 📌 Governance (penyisiran catatan lokal → kit)

- Audit 25 catatan via penyisiran paralel cuma-baca (read-only, sesuai aturan v1.5.23). Hanya 2 aturan terjebak (dipindah di atas). Sisanya: 9 aturan sudah ter-codify di kit, 9 catatan sifatnya status/keputusan-dev (tetap lokal — bukan aturan staff), 5 catatan aplikasi lain (akses) tak terkait lintasAI. **Prinsip: aturan → kit, konteks → memory lokal.**

### QA

- smoke PASS (parse 30, manifest 90, orphan 0, JSON 3). Tidak ada file `.ps1` disentuh. Pester 120/1 (pre-existing non-existent-path).

---

## v1.5.24 — 2026-06-10 (Aturan label non-programmer dipindah dari catatan lokal AI ke kit)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Owner minta: aturan yang selama ini cuma ada di catatan lokal AI (memory di komputer owner) HARUS ada di dalam kit, biar staff yang install juga dapat. Kalau cuma di lokal owner → bagus untuk owner, jelek untuk staff. Staff cukup `kit.ps1 update`.

### ⚠️ PENTING (aturan label dikodifikasi di file selalu-load)

- **Label prioritas/tahapan WAJIB bahasa non-programmer — `CLAUDE_universal_v1.md` §2.1 #7 (baru).** Tingkat keseriusan = **GENTING/PENTING/RAPIKAN** (bukan P0/P1/P2, bukan Critical/High/Low/Blocker/Nit); urutan kerja = **Quick Wins/Bertahap/Strategi Besar**; mode pura-pura = **SIMULASI** (bukan dry-run). Selama ini label ini DIPAKAI di banyak template, tapi **tidak ada aturan eksplisitnya** di file selalu-load — cuma ada di catatan lokal AI. Sekarang jadi aturan resmi kit (ikut ter-install ke staff).

### 📌 Governance (audit catatan lokal AI → kit)

- Hasil audit 5 catatan lokal AI: yang sifatnya **ATURAN** (label non-programmer) dipindah ke kit ini. Yang sifatnya **catatan-progres-dev** (status versi belum-push, keputusan proyek spesifik) tetap lokal — itu bukan aturan yang dibutuhkan staff, melainkan pembukuan kerja dev. Prinsip: **kalau itu peraturan lintasAI → tulis di kit, bukan di komputer lokal.**

### QA

- smoke PASS (parse 30, manifest 90, orphan 0, JSON 3). Tidak ada file `.ps1` disentuh. Pester 120/1 (pre-existing non-existent-path).

---

## v1.5.23 — 2026-06-10 (Audit cuma-baca anti ubah-DB-live + repo memuat aturannya sendiri)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Dua perbaikan keamanan/kualitas dari pertanyaan owner. Staff cukup `kit.ps1 update`.

### 🚨 PENTING (keamanan — mencegah AI menyentuh sistem live)

- **Aturan keras: verifikasi & audit WAJIB cuma-baca (STATIC).** Asisten/agen yang memverifikasi atau mengaudit DILARANG menjalankan perintah yang mengubah sistem live — tidak boleh `Edit`/`Write` saat fase verifikasi, tidak boleh SQL yang mengubah data (INSERT/UPDATE/DELETE/CREATE/DROP/ALTER), tidak boleh menyentuh DB/Supabase/server produksi lewat MCP. Lahir dari kejadian nyata (2026-06): agen audit pernah benar-benar mengubah DB Supabase live lalu mengklaim sudah dibersihkan — staff non-programmer tak bisa mendeteksi ini. Ditambahkan ke `CLAUDE_universal_v1.md` §8.2 (selalu-load) + `AUDIT_POST_SETUP_PROMPT` + `PROMPT_LIBRARY` Prompt 21.

### ⚠️ PENTING (aturan terbaru benar-benar ter-load)

- **Repo kit memuat aturannya sendiri (dogfood).** Ditambah `CLAUDE.md` di root repo kit yang `@import CLAUDE_universal_v1.md`. Efek: saat owner/kontributor kerja DI repo kit, sesi langsung memuat aturan TERBARU dari sumber tunggal — bukan versi lama yang nyangkut di `~/.claude/CLAUDE.md` global. (Akar masalah "aturan baru tidak diikuti": Claude Code OTOMATIS baca `CLAUDE.md`, BUKAN `AGENTS.md`, dan global owner masih versi 1.4.)

### 📌 Ditunda ke v1.5.24 (sengaja — sensitive, butuh tes menyeluruh)

- **Pemasangan otomatis loader aturan untuk PROYEK STAFF** (project-root `CLAUDE.md` yang `@import .claude-kit/CLAUDE_universal_v1.md` + `AGENTS.md`). Desain sudah final, TAPI butuh perubahan `setup-pola-b.ps1` (kode pemasang interaktif) + tes menyeluruh. Sengaja TIDAK diburu jelang launch supaya tidak mengirim installer rusak ke 20-30 staff. Sementara: arahkan staff pakai jalur install global (`install-windows.ps1` → `~/.claude/CLAUDE.md`) yang sudah andal, ATAU owner perbarui global-nya ke versi terbaru.

### QA

- smoke PASS (parse 30, manifest 90, orphan 0, JSON 3). Pester 120 lulus / 1 gagal (`setup-pola-b` non-existent-path — pre-existing/environment 5.1-vs-pwsh, bukan dari rilis ini).

---

## v1.5.22 — 2026-06-10 (Bahasa non-programmer jadi WAJIB di SETIAP output — tutup celah "substantive")

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Owner menangkap AI masih pakai bahasa programmer (mis. "Verdikt per-risiko", "agen verifikasi") di jawaban tanya-jawab/penjelasan — padahal aturan bahasa non-programmer sudah ada. Akar masalah: gerbang penegaknya cuma nyala untuk output yang dinilai "substantive", jadi jawaban tanya-jawab & penjelasan lolos. Versi ini mencabut celah itu + mematikan sumber jargon di template. Staff cukup `kit.ps1 update`.

### ⚠️ PENTING (aturan bahasa diperkuat — berlaku semua proyek)

- **Kata "substantive" dicabut dari semua gerbang bahasa.** PRE-SEND CHECKLIST (§2.1.1), item Definition of Done (§4), dan self-check (§2.1) dulu cuma wajib jalan untuk response "substantive" + daftar tertutup (code change/release/audit) → AI bisa beralasan "ini cuma penjelasan, bukan substantive" lalu melewatinya. Sekarang: **WAJIB jalan untuk SETIAP output ke user tanpa kecuali** (termasuk tanya-jawab, penjelasan, perbandingan, narasi antar-langkah).
- **Bahasa non-programmer naik ke daftar prioritas (§0).** Dulu cuma tersirat di poin #3 "Junior-friendly". Sekarang eksplisit: poin #3 jadi "Bahasa Non-Programmer Wajib (CRITICAL)" + catatan tegas TIDAK boleh dikorbankan demi hemat token (poin #4).
- **Aturan baru §2.1 poin 6: jangan ceritakan "dapur" internal AI ke user.** Kata seperti "agen verifikasi / spawn / adversarial / verdict / finding / READONLY / blast_radius" dilarang muncul mentah ke user — wajib pakai padanan biasa. Ini sumber langsung istilah yang ditangkap owner.
- **Skip tabel ≠ skip bahasa (§4.1).** Penegasan: walau tabel Tinjauan Multi-Divisi boleh di-skip untuk tanya-jawab pendek, aturan bahasa non-programmer tetap berlaku 100%.

### 🧹 RAPIKAN (matikan sumber jargon di template)

- **Template yang dulu "mencontohkan" jargon dirapikan** supaya AI tidak menularkannya ke output: AI Reviewer PR (`ai-review.js`) — label "Verdict/BLOCKER/WARNING/NIT/APPROVE" → "Kesimpulan/GENTING/PENTING/RAPIKAN/LAYAK-MERGE"; popup audit (`AUDIT_POST_SETUP_PROMPT`) — "READONLY/finding" → "MODE AMAN/temuan"; format output Prompt 21 (`PROMPT_LIBRARY`) — "Verdict/REFUTED/confidence" → "Kesimpulan/TERBANTAH/seberapa yakin"; + larangan ceritakan "dapur" internal ditambah di prompt audit.
- **Banner versi file aturan disinkronkan.** Header `CLAUDE_universal_v1.md` masih tertulis v1.5.6 (telat 15 rilis) → diperbarui ke v1.5.22.
- Mulai entry ini, ringkasan CHANGELOG yang akan dibacakan AI ke staff ditulis tanpa jargon mekanis ("N agen", "adversarial", "BLOCKER").

### 📌 Catatan untuk owner (BELUM dikerjakan — butuh keputusanmu, lihat juga ringkasan sesi)

- **Cara install yang direkomendasikan (NPX/Pola B) belum memuat aturan secara mekanis.** File aturan mendarat di `.claude-kit/` tapi `AGENTS.md` cuma menunjuknya lewat tulisan (prosa), bukan meng-impor isinya; ditambah Claude Code meng-auto-load `CLAUDE.md`, bukan `AGENTS.md`. Artinya staff yang fresh-install lewat jalur ini belum tentu benar-benar dapat aturannya tiap sesi. Perbaikan butuh keputusan (pakai `@import` di file yang di-auto-load + sediakan `CLAUDE.md` di root) — sengaja belum diubah supaya tidak salah-sentuh jelang rilis.

### QA

- smoke PASS (parse PS1 30, manifest 90, orphan refs 0, JSON 3). `node --check` ai-review.js OK. Tidak ada file `.ps1` yang disentuh (semua perubahan = markdown/JS/versi).
- Pester: 120 lulus / 1 gagal. Yang gagal = `setup-pola-b` Branch 3 (path tidak-ada), berjalan di atas `.ps1` yang TIDAK diubah versi ini — pre-existing/environment (beda semantik exit-code Windows PowerShell 5.1 vs pwsh 7), bukan akibat v1.5.22.

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Hasil re-run audit security (3 lensa: secrets/SQL/installer). Verdikt: ketiganya AMAN (tak ada secret ter-commit, SQL Option D aman, supply-chain sehat). 2 temuan defense-in-depth/akurasi ditambal. Staff cukup `kit.ps1 update`.

### ⚠️ PENTING (defense-in-depth)

- **`lib/rollback.ps1` kini validasi path entry manifest sebelum overwrite** (MEDIUM). Sebelumnya rollback meng-`Copy-Item` ke path dari manifest TANPA guard path-traversal/reparse-point — inkonsisten dgn `uninstall.ps1` yang sudah pakai `Resolve-SafeProjectPath`. Manifest = untrusted: entry ber-`..\` / absolute / lewat junction bisa nulis DI LUAR project root (mis. folder Startup). Ditambah guard self-contained `Test-LintasRollbackPathSafe` (tolak absolute/`..`/escape-root/reparse-point) → entry tak aman di-`BLOCKED`, bukan di-restore. Self-contained (bukan dot-source `safety.ps1`) untuk hindari bentrok `Get-FileSha256` lokal. Bukan exploit remote (butuh attacker lokal yang sudah bisa tulis manifest), tapi menutup boundary-escape + selaraskan invariant kit.

### 🧹 RAPIKAN (akurasi/kejujuran dokumentasi)

- **Klaim "secrets detection" di pre-commit hook dikoreksi** (LOW). `docs/FAST_SMOKE.md` + CHANGELOG "filosofi" tier INSTANT menyebut hook deteksi "BOM, secrets" — padahal hook sebenarnya cuma cek smart-char + jalankan FAST smoke (tak ada scan secret/BOM). Bisa beri rasa-aman-palsu ke staff non-programmer. Dikoreksi jujur: deteksi secret = GitHub Push Protection + AI Reviewer (bukan hook lokal). Lapisan secret-detection nyata (Push Protection, AI Reviewer 10+ pola, `.gitignore .env*`) tetap aktif.
- QA: smoke PASS (parse 30, manifest 90, orphan 0), Pester 121/121 (rollback.Tests termasuk), PSScriptAnalyzer 0 finding nyata di luar gaya Write-Host CLI.

---

## v1.5.20 — 2026-06-09 (Audit pra-launch: 13 fix + penamaan Stage non-programmer)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Hasil audit pra-launch 5-dimensi (24 agen, verifikasi adversarial): 0 BLOCKER, 0 crash, 0 security. 13 item poles dibereskan + penamaan ulang ke bahasa non-programmer. Staff cukup `kit.ps1 update`.

### ⚠️ PENTING

- **Penamaan Stage → bahasa non-programmer.** "Stage A/B/C/D" (huruf + jargon Kickoff/Bootstrap/Migration) yang membingungkan staff non-programmer diganti jadi nama jelas: **Stage 1: Proyek Baru**, **Stage 2: Bikin Catatan Proyek**, **Stage 3: Perbarui Catatan**, **Stage 4: Rapikan ke Standar Tim**. ~57 rujukan basi di file instruksi-AI live diselaraskan (CLAUDE_universal, LINTASAI_WORKFLOWS, PROJECT_LIFECYCLE, README, POST_SETUP_CHECKLIST, TEAM_ROLLOUT, _PATTERNS, JALANKAN_KIT, AGENTS.md.template, installer). Catatan pemetaan old→new ada di PROJECT_LIFECYCLE. Sisa "Stage A-E" hanya di CHANGELOG (historis).
- **Token always-on dipangkas lagi.** §14.1 Konvensi Popup (90 baris/~2.200 token) yang di-load TIAP sesi padahal cuma relevan saat AI bikin popup + sudah di-enforce di `lib/popup-helpers.ps1` → dipindah ke `LINTASAI_WORKFLOWS_v1.md` §14.1 (on-demand), sisakan stub ~16 baris. §4.1 meta riwayat-versi (v1.5.11/13 CORRECTION) dibuang dari file aturan (tempatnya di CHANGELOG). Hemat ~2.700 token/sesi.
- **Dokumen flagship v1.5.19 jadi ketemu.** `TEAM_FLOW_SKETCH_v1.md` ternyata tidak ter-deploy ke `docs/` + tak di-link mana pun (own-goal). Sekarang masuk `$teamFiles` installer (deploy ke docs/) + di-link dari MULAI_DI_SINI/ONBOARDING + terdaftar di INDEX.md/README.

### 🧹 RAPIKAN

- **Kontradiksi onboarding diselaraskan**: MULAI_DI_SINI ("owner install tools") vs ONBOARDING ("staff install sendiri") → ditegaskan owner/IT setup tools bareng staff Day 0. MULAI_DI_SINI pointer `templates/ONBOARDING.md` → `docs/ONBOARDING.md` (path benar pasca-setup).
- **INDEX.md di-refresh**: header v1.0.0 → v1.5.20, "30 jargon" → "32 jargon", "38+ file" → "~90 file", tambah TEAM_FLOW_SKETCH + CROSS_REPO_TYPES_PIPELINE. Jargon "30" di installer juga dibetulkan.
- **update-kit.ps1**: regex deteksi tier `[BREAKING]`/`[SCAN-REQUIRED]` di-anchor (awal baris) supaya banner tier konsisten dgn blok peringatan utama.
- **setup-pola-b.ps1**: pesan "[3] Cancel" yang menyesatkan ("Setup di-cancel" padahal file sudah ter-deploy) diperjelas.
- **"12 lensa" basi** di closing onboarding + PROMPT_LIBRARY → "banyak lensa divisi" (kit sekarang 15). POST_SETUP "Stage E" (tak pernah ada) dihapus. Tanggal header README disinkronkan.
- QA: smoke PASS (parse 30, manifest 90, orphan 0), Pester 121/121, PSScriptAnalyzer 0 finding.

---

## v1.5.19 — 2026-06-09 (Flow kerja tim non-programmer + serah-terima 3-bagian)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Dokumen onboarding baru yang merangkai otomasi kit yang sudah ada. Staff cukup `kit.ps1 update`.

### ⚠️ PENTING — panduan kerja tim end-to-end

- **`templates/TEAM_FLOW_SKETCH_v1.md` (baru)**: 1 dokumen perangkai untuk staff IT non-programmer — siapa ngapain (5 peran: BE/FE senior+junior, UI dev), pipeline staging→production, serah-terima antar peran (3-bagian), cek bug (3 lapis), deploy aman + rollback. Menjawab kebingungan umum: "AI tiap orang terpisah → koordinasi lewat REPO (`@project/shared`) + chat, bukan antar-AI"; "frontend tak perlu `git pull` manual → CI auto-PR + AI auto-install saat sesi mulai". Merangkai otomasi yang sudah ada di kit (PUBLISH_SHARED/RECEIVE_BACKEND/TRIGGER_FRONTEND/RENOVATE/ai-review/Discord) jadi satu alur yang mudah dipahami.
- **Serah-terima 3-bagian** dipasang: ① kebenaran (kontrak di `@project/shared`, dibaca AI) + ② sinyal GO (notif Discord/WA, buat manusia) + ③ catatan serah-terima (di deskripsi PR, titik mulai buat AI berikutnya). Anti-gagal: kalau chat ke-skip, kebenaran tetap di repo.

### 🧹 RAPIKAN

- **`templates/github/pull_request_template.md`**: tambah section "Serah-terima ke peran lain" (mewujudkan bagian ③ — backend tulis 1-2 baris apa yang READY untuk FE/UI + cara pakainya).
- Manifest `kit-files.psd1` + smoke (90 file) + Pester (121/121) selaras.

---

## v1.5.18 — 2026-06-09 (DB role tiering: Aturan "1 login = 1 orang" + Option D Senior-DDL/Junior-DML)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Nambah panduan & SQL siap-paste untuk tim backend berjenjang. Staff cukup `kit.ps1 update`.

### ⚠️ PENTING — kejelasan akses DB untuk tim backend

- **Aturan #0 "1 login = 1 orang"** (`MCP_SETUP.md` §2, berlaku semua option). Jawaban tegas atas pertanyaan umum: "kalau 6 backend dev pakai 1 schema yang sama, apakah login-nya sama?" → **TIDAK**. Schema boleh bersama, password TIDAK. Lengkap analogi 3-lapis (kartu akses kantor / rekening bersama-kartu ATM beda / Netflix profil) + 3 alasan (audit jelas, cabut 1 akses tanpa ganggu lain, hak beda per-orang).
- **Option D - Tiered Shared Schema** (`MCP_SETUP.md` §2.6b, baru). Model 1 schema bersama tapi hak berjenjang: 2 grup NOLOGIN (`app_senior` boleh DDL/migrasi, `app_junior` DML-only) + login per-orang. Isi: SQL siap-paste, blok verifikasi, tabel banding Option A/B/C/D, **kartu 1-halaman** untuk junior & senior (boleh/tidak-boleh + "kalau butuh ubah struktur, minta senior").
- **Aturan AI Tier-Guard** (`CLAUDE_universal_v1.md` §9, ringkas + always-on; detail di `MCP_SETUP.md` §2.6b/§8). Sebelum coba migrasi/DDL, AI cek tier login; kalau junior → jangan paksa DDL, jelaskan "ini hak senior, bukan error" + arahkan minta senior; terjemahkan `permission denied`/`must be owner` ke bahasa non-programmer (tabel terjemahan di §8). Default deny kalau ragu.

### ✅ QA — SQL Option D diuji adversarial (empiris di Supabase live PG 17)

- 4 lensa skeptik (privilege / idempotency / supabase / RLS) memverifikasi: **postur inti TERBUKTI BENAR** — junior tak bisa CREATE/ALTER/DROP/TRUNCATE TABLE (semua ditolak `42501`), tanpa jalur eskalasi ke senior.
- SQL di-hardening jadi **v3** menambal temuan: `REVOKE CREATE ON SCHEMA ... FROM PUBLIC` (cegah junior bikin→miliki→DDL tabel), guard schema sistem (cegah `{{SCHEMA}}=public`), idempotent penuh (DO-block `IF NOT EXISTS` untuk login per-orang + EXCEPTION per-iterasi di loop re-own), RLS dari "opsional" → **ENABLE+FORCE WAJIB-bersyarat** untuk schema multi-tenant, password = langkah WAJIB, DDL via port 5432.

---

## v1.5.17 — 2026-06-09 (Rapikan rujukan basi di set dokumen Split-Repo — 10 file)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Hanya pembetulan rujukan/penamaan di prompt & dokumen Split-Repo supaya sesi AI tidak salah arah. Staff cukup `kit.ps1 update`.

### ⚠️ PENTING — rujukan yang bisa menyesatkan sesi AI

- **Nama paket shared dibetulkan.** `SPLIT_REPO_MIGRATION_PROMPT_v1.md` masih menulis `@<owner>/<project>-shared` (format lama). Diseragamkan ke `@<project>/shared` sesuai keputusan "Backend Owns the Contract". Kalau salah, AI bisa bikin nama paket npm yang tidak konsisten antar 3 repo.
- **Label langkah onboarding yang sudah tidak ada.** `PROJECT_LIFECYCLE_PROMPT_v1.md` + `templates/PROMPT_LIBRARY.md` masih menyebut "Team Mode (T)", "Generate ALL", "step 12", "step 21 (Popup #4)", "Stage A/B/C/D", "Stage E" — semua nama lama sebelum installer dirombak. Diselaraskan ke penamaan sekarang ("Popup #1 Step 8 [1] Full", "Step 17/18 (Popup #3 conditional)", urutan 1/2/3/4, dan rujuk `AUDIT_POST_SETUP_PROMPT_v1.md`). 8 rujukan "Stage E" basi di `LINTASAI_WORKFLOWS_v1.md` ikut dibetulkan.
- **Rujukan tool/fungsi yang sudah pindah.** `PROMPT_LIBRARY.md` masih sebut `Test-MainBranchProtected` (sudah pindah ke `setup-pola-b.ps1`); diperbaiki + TOC Prompt 11-15 yang hilang ditambahkan.

### 🧹 RAPIKAN

- **Penamaan saluran & stack diseragamkan.** `templates/split-agents/BACKEND.md`: "via Signal" → "via Discord"; "Prisma 7 ORM" → "Prisma ORM (lihat STACK_VERSIONS.md)" supaya versi tidak ditulis di dua tempat. `templates/split-agents/SHARED.md`: "tsup atau rollup" → "tsup" (satu pilihan, kurangi ambiguitas).
- **Pipeline tipe lintas-repo.** `templates/CROSS_REPO_TYPES_PIPELINE.md`: istilah "Lapis 3/Lapis 4" yang membingungkan ditulis ulang; step `create-pull-request` diberi `id: cpr` supaya langkah berikut bisa merujuk output-nya.
- **Hitungan & versi disinkronkan.** `SPLIT_REPO_MIGRATION_PROMPT_v1.md`: "shared: 4 staff" → "6 staff", "Full rollback sampai Week 5" → "Week 6", header versi → v1.5.16. `README.md` baris 134: deskripsi split-repo dibetulkan jadi "memecah aplikasi jadi 3 repo (frontend + backend + shared)" (sebelumnya keliru tulis "memisah kit, docs tim, proyek"). `AUDIT_POST_SETUP_PROMPT_v1.md`: "30 jargon" → "32 jargon", pointer GLOSSARY → ANALOGI, "(4) Stop" → "[stop]".
- **Tawaran split-repo untuk tim kecil.** `JALANKAN_KIT.md`: baris "Skip split repo offer." diubah jadi kondisional (lihat Bagian 6), dan `split_offer_rules_per_tier` yang sudah usang dihapus.

---

## v1.5.16 — 2026-06-09 (Fix install: Bootstrap Docs + Scan Database tidak jalan saat Enter)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Bug fix alur onboarding install. Staff cukup `kit.ps1 update`.

### 🚨 GENTING — bug diperbaiki

- **Install mode Full diam-diam tidak jalan saat tekan Enter.** Popup #1 di `JALANKAN_KIT.md` menyatakan "[1] FULL = default = bulk-bootstrap docs + schema scan", tapi 3 baris instruksi eksekusi punya label KEBALIK (baris 152-153 tulis "1 = Quick → SKIP bootstrap", baris 277 urutan "[1] Quick / [2] Full", baris 288 "Default Quick"). Akibatnya AI bisa membaca Enter→"1" sebagai Quick → **dokumentasi awal + denah database tidak ke-generate**. Sisa tambal-sulam saat default diubah Quick→Full tapi 3 baris lama lupa ikut. Fix: semua diselaraskan ke **1 = Full = default = otomatis Bootstrap Docs + Scan Database**.

### ⚠️ PENTING

- **Denah database jadi hasil resmi yang disebut tegas.** Closing summary install (mode Full) sekarang sebut eksplisit "✅ Denah database dibuat: `docs/db-schema.md` (X tabel + diagram)" pakai bahasa non-programmer, supaya user tahu persis apa yang dia dapat (bukan diam-diam).
- **Pagar aman DB scan dipertegas**: hanya baca STRUKTUR (denah), JANGAN baca `.env`/secret, JANGAN salin data pribadi asli (PII) ke docs. Kalau tak ada file schema → lapor, jangan diam.
- **Manifest `kit-files.psd1` diselaraskan dengan disk (single-source-of-truth).** 4 file tes (`lib-popup-helpers`, `npx-init`, `package-bundle`, `setup-pola-b`) + `TEAM_ROLLOUT_GUIDE_v1.md` (file HIDUP yang di-ship installer + dirujuk README/CONTRIBUTING 8×, tapi komentar manifest keliru menyebutnya "consolidated/deprecated") kini terdaftar. Komentar yang salah dibetulkan. Guard `install-mapping-sync.Tests.ps1` diperluas: gagalkan CI kalau file tes baru di disk lupa didaftarkan di manifest.

---

## v1.5.15 — 2026-06-09 (Tiering aturan hemat token ~33% + dedup §4.1 + guard anti-drift installer)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Aturan always-on dipangkas tanpa kehilangan kemampuan; detail on-demand pindah ke file rujukan. Staff cukup `kit.ps1 update`.

### ⚡ Hemat token (file aturan yang di-load tiap sesi)

- **`CLAUDE_universal_v1.md` dipangkas 1655 → 1101 baris (−554, ~33%).** Detail §4.2 (pattern workflow), §4.3 (guided onboarding), §4.4 (audit), §4.5 (update strategy), §8.3 (GPG trusted-repo) dipindah ke file rujukan baru **`LINTASAI_WORKFLOWS_v1.md`** (582 baris) yang dibaca AI **on-demand** — hanya saat task relevan. Anchor + aturan always-on dipertahankan sebagai stub + trigger di inti. Hemat ~10K token/sesi, **nol kemampuan hilang** (partisi konten terverifikasi byte-level).
- **§4.1 Multi-Divisi di-dedup.** Aturan "kapan tampilkan" yang sebelumnya ditulis 3× (akibat tambal-sulam v1.5.0→v1.5.13, isi mirip tapi tak persis sama → berisiko ambigu) disatukan jadi 1 blok kanonik. Tabel contoh-jargon §4.1 yang tumpang-tindih dengan Reference Card §2.1 diganti pointer. Aturan lebih tegas + lebih ramping, perilaku tak berubah.
- **Reference Card §2.1 ditambah 5 jargon git/rilis** (working tree clean, unpushed/commits ahead, branch, smoke test, manifest) → 18 jadi 23 entri. Lahir dari slip nyata: AI narasikan operasi git pakai jargon mentah ("origin/main", "tree bersih", "unpushed") melanggar PRE-SEND CHECKLIST §2.1.1 sendiri. Sekarang translasi siap-pakai.

### ⚠️ PENTING — janji single-source-of-truth ditepati

- **Guard anti-drift installer** (`tests/install-mapping-sync.Tests.ps1`, 12 test): gagalkan CI kalau `$mapping` di `install-windows.ps1` merujuk file yang tak ada di disk, atau lupa mendaftarkan rule auto-loaded (`CLAUDE_universal_v1.md`, `LINTASAI_WORKFLOWS_v1.md`). Cegah bug "file diam-diam tak ke-install" (kasus nyata: `LINTASAI_WORKFLOWS_v1.md` sempat untracked + lolos smoke). `install-windows.ps1` + `lib/kit-files.psd1` + README diperbarui untuk file rujukan baru. Pola B otomatis punya (`.claude-kit/` = klon kit).

### Catatan (ditunda — sengaja)

- `install-windows.ps1` masih simpan daftar file-nya sendiri (belum derive penuh dari `kit-files.psd1`). Guard test menutup risiko drift untuk sekarang; refactor "derive penuh" dijadwalkan terpisah. Temuan minor: installer merujuk `TEAM_ROLLOUT_GUIDE_v1.md` yang tak terdaftar di `kit-files.psd1` (file ada, tidak breaking) — dirapikan terpisah.

---

## v1.5.14 — 2026-06-08 (Fix regresi jargon P0/P1/P2 + DRY-RUN + audit fixes)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Hasil audit menyeluruh + fix regresi jargon. Staff cukup `kit.ps1 update`.

### 🚨 GENTING — bug diperbaiki

- **Rollback diam-diam mati setelah update.** `kit.ps1 rollback` tidak menemukan backup deploy (`<file>.backup-<ts>`) karena `lib/rollback.ps1` hanya mencari pola `<file>.bak.<ts>`. Akibatnya jaring pengaman utama (balik ke versi sebelum update) tidak mengembalikan apa pun. Fix: `Find-LatestBackup` mengenali kedua konvensi nama + pilih terbaru by waktu file + kecualikan snapshot `.malformed.bak`.
- **Test regresi baru** (`tests/rollback.Tests.ps1`): 7 test termasuk satu end-to-end yang benar-benar menjalankan `Invoke-Rollback` lalu memastikan file ter-restore. Cegah bug ini kambuh.

### ⚠️ PENTING — janji kit ditepati

- **Versi konsisten satu sumber.** README dulu menyebut v1.5.9 padahal git lebih baru. Sekarang README + `package.json` + CHANGELOG semua = v1.5.14. CONTRIBUTING dapat checklist "update versi di 3 tempat".
- **`ANALOGI_LIBRARY.md` diisi beneran** (32 jargon × analogi 3-lapis). Dulu kosong tapi dilabeli "AKTIF, 30 jargon".
- **Peta Keputusan** ditambah di README + MULAI_DI_SINI ("mau X → buka/paste file mana"). Path glossary di MULAI_DI_SINI dibetulkan ke `docs/`.
- **Multi-Divisi 15 ditegaskan + aturan default 3-5 lensa.** Residu kontradiksi "absorbed inline" dibuang; tabel penuh 15 baris hanya untuk keputusan besar, task rutin cukup 3-5 lensa (minimal Adversarial Reviewer + Reversibility).

### 💡 RAPIKAN

- Konfirmasi sebelum `update-kit -NoBackup` menghapus permanen tanpa cadangan (default batal; `-Force` untuk unattended).
- Disiplin rilis di CONTRIBUTING: jangan tag rilis hanya untuk typo/heading (akar CHANGELOG membengkak).
- **Regresi jargon (dari v1.4.0) diperbaiki**: 37 instance `P0/P1/P2` → **Quick Wins / Bertahap / Strategi Besar** (konteks urutan kerja migrasi/SEO di PROJECT_LIFECYCLE, STACK_GUIDE, TEAM_ROLLOUT, README, CLAUDE_universal); konteks urgensi di CONTRIBUTING pakai **GENTING / PENTING / RAPIKAN**. 6 instance `DRY-RUN` → **SIMULASI** di output skrip (install/uninstall/update).
- `STACK_GUIDE.md` diberi disclaimer "khusus Next.js/Vercel/Supabase, bukan universal". `STACK_VERSIONS.md` angka "Tested" jadi rentang + catatan "verify saat upgrade".
- Hapus kode mati `UseGlobalGitOnly` di `setup-pola-b.ps1`. Perbaiki path laptop dev bocor di `PROMPT_LIBRARY.md`. Perbaiki rujukan `update-kit.ps1 -Rollback` → `kit.ps1 rollback`. `.gitignore` kit tambah marker identity. Hapus blok marketing "9 rilis dalam 2 hari" dari README.

### Catatan (ditunda — sengaja)

- Penyatuan helper konfirmasi-hapus + penyeragaman 3 konvensi nama backup **belum** dikerjakan, karena berisiko menyentuh skrip penghapus file. Bug rollback sudah diperbaiki di sisi pencarian, jadi sisanya tinggal kerapian — dijadwalkan terpisah dengan test menyeluruh.

---

## v1.5.13 — 2026-06-08 (Multi-Divisi CORRECTION ke 15 + Split Repo Stage 0 Quick Prep)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING. Owner correction 3 mistakes sekaligus: (1) Multi-Divisi 12 ke 15, (2) Split repo actual prep bukan analysis, (3) owner directive target kit not akses (locked pattern).

### Konteks bug (3 mistakes caught hari ini)

Owner directive 2026-06-08 (post fresh install v1.5.11/v1.5.12 dogfood):

**Mistake #1 — Multi-Divisi salah revert 15 → 12 (v1.5.10-v1.5.12)**: Owner directive di v1.5.10 "12 Divis" — aku interpret sebagai "revert ke 12 Divisi". Salah. Owner clarification: 15 divisi yang BENAR (12 original + 3 lensa expansion dari v1.5.0: Adversarial Reviewer, Reversibility, Knowledge Transfer). Fix v1.5.13: revert 12 → 15.

**Mistake #2 — Split Repo cuma analysis (v1.5.12)**: Aku generate `docs/SPLIT_REPO_ANALYSIS.md` 187 baris dengan verdict "DELAY split" — analysis-only pattern. Owner mau ACTUAL file split prep (3 sibling folder siap push ke 3 GitHub repo terpisah). Fix v1.5.13: SPLIT_REPO_MIGRATION_PROMPT_v1.md tambah Stage 0 Quick Prep (LITE 30-60 menit pattern AI execute dalam 1 sesi).

**Mistake #3 — Owner directive sometimes treated akses-only**: Owner directive ALWAYS target kit lintasAI upstream, akses cuma sandbox dogfood. Aku sometimes eksekusi akses-only untuk directive universal (mis. split repo analysis). Fix v1.5.13: memory locked pattern + workflow re-affirm di Section 4.3b.

### Changed

- **Section 4.1 di `CLAUDE_universal_v1.md`** — REVERT 12 → 15 divisi:
  - Body: "berisi beberapa sudut pandang divisi" → "berisi **15 sudut pandang divisi** (12 original + 3 lensa expansion)"
  - Format wajib tabel: 12 row → 15 row (tambah Adversarial Reviewer, Reversibility, Knowledge Transfer sebagai STANDALONE divisi, bukan absorbed inline)
  - Contoh Backend Fix: 12 row → 15 row dengan 3 lensa baru diisi
  - Lens per divisi tabel: 12 entries → 15 entries
  - Catatan tambahan: clarify 3 lensa baru WAJIB selalu diisi untuk task code change
  - History note: v1.5.0 expand 12→15 / v1.5.10-v1.5.12 salah revert / v1.5.13 fix kembali ke 15
- **Section 2.1.1 PRE-SEND CHECKLIST kategori #4** — clarify "Tabel 15 divisi (12 original + 3 lensa expansion)".
- **`SPLIT_REPO_MIGRATION_PROMPT_v1.md`** — tambah Stage 0 (Quick Split Prep) sebelum Stage Week 1-6. Stage 0 = LITE pattern AI execute dalam 1 sesi (30-60 menit): backup + auto-detect boundary + bikin 3 sibling folder + distribute via COPY (bukan MOVE) + setup standalone manifest per folder + cross-repo type sharing strategy + verify + lapor. 8 sub-step + 4 LARANGAN + comparison table Stage 0 vs Full Workflow.
- **`POST_SETUP_CHECKLIST_PROMPT_v1.md` Poin #5** — refactor dari "monorepo split candidate analysis" jadi "**Monorepo split Stage 0 Quick Prep**: bikin 3 sibling folder COPY-based, siap push ke 3 GitHub repo". Explicit "JANGAN cuma generate analysis report".

### Heading FINAL v1.5.11+ tetap berlaku

Heading literal "🎯 Tinjauan Multi-Divisi (Menggunakan Analogi Non-Programmer)" — **tanpa angka divisi** di heading. Hanya tabel internal yang 15 row. Owner correction v1.5.13 hanya affect COUNT divisi (12→15), bukan heading format.

### Memory entries baru (untuk AI future session)

- `feedback_owner_directive_targets_kit.md` — locked pattern: setiap directive owner = update kit FIRST, akses = sandbox.
- `feedback_save_pattern_after_approval.md` — locked pattern: setelah owner approve, save IMMEDIATELY ke kit + memory.
- `feedback_split_repo_actual_prep.md` — locked pattern: split repo = actual file prep, BUKAN analysis.
- `feedback_tinjauan_multi_divisi_format.md` UPDATED — correct count dari 12 ke 15.

### Verification

- Parser OK + Smoke fast PASS + PSSA 0 violations.

### Migration

Tidak ada migration steps. Tier 2 expand-only correction. Aturan baru auto-active di sesi setelah `kit.ps1 update`. AI di sesi berikut auto-comply 15 divisi + Stage 0 split prep pattern.

User existing v1.5.12 yang mau dapat fix ini: `kit.ps1 update`.

---

## v1.5.12 — 2026-06-08 (Phase 5b Tier-Aware POPUP-Per-Item Rule)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING — Phase 5b langkah [5] behavioral enhancement. Owner catch regresi: AI sometimes auto-execute, sometimes cuma "lapor 7-row tabel diam" — staff IT non-programmer bingung. Fix: explicit tier-aware popup-per-item rule.

### Konteks bug (root cause)

Owner directive 2026-06-08 (post fresh install v1.5.11 dogfood): "kenapa poin 5 & 7 tidak di tawarkan otomatis atau di munculkan jadi popup, kalau begini kan STAFF IT tidak tau harus mau lakukan apa! pada versi sebelumnya auto generate bagian no.7, tapi sekarang tidak!"

Regresi pattern: sesi dogfood v1.5.7 + v1.5.8 AI auto-execute bulk-bootstrap + Stage D Migration + audit offer. Sesi fresh install v1.5.11 AI cuma "lapor 7-row tabel" untuk poin 5 (monorepo split) + poin 7 (docs subfolder migration). Inconsistent execution depth.

Root cause: Section 4.3b Phase 5b langkah [5] cuma bilang "lapor pending action items" tanpa specify TIER-aware popup behavior per item. AI gampang skip popup tawarkan untuk item yang "feel like" cuma laporan info.

### Added

- **Section 4.3b Phase 5b langkah [5] enhancement** di `CLAUDE_universal_v1.md` — explicit tier-aware popup-per-item rule (Tier A AI execute LANGSUNG via popup / Tier B lapor saja owner manual / Tier C popup konfirmasi HARD untuk HIGH risk).
- **POST_SETUP_CHECKLIST_PROMPT_v1.md tabel 7-row** — restructured dengan kolom **Tier** + **AI Behavior** explicit. Mapping per action:
  - Tier A: DB schema scan (3), monorepo split analysis (5), docs subfolder migration (7) → WAJIB popup tawarkan execute
  - Tier B: CODEOWNERS placeholder (1), ANTHROPIC_API_KEY (2) → lapor saja
  - Tier C: RLS Setup (4), Discord integration (6) → WAJIB popup konfirmasi HARD
- **POST_SETUP_CHECKLIST_PROMPT_v1.md sub-section [5b]** baru — "Tier-Aware POPUP-Per-Item Rule (v1.5.12+ enhancement)" dengan format popup per tier + default behavior.
- **LARANGAN baru** di POST_SETUP step [6] — "TIDAK BOLEH cuma 'lapor 7-row tabel diam' untuk langkah [5]" (cegah regresi).

### Fixed

- **Regresi inconsistent Phase 5b execution depth** — sebelum v1.5.12 AI Phase 5b langkah [5] outcome tergantung session context (kadang auto-execute, kadang lapor diam). Sekarang explicit tier rule force konsisten behavior per action across sessions.

### Verification

- Parser OK + Smoke fast PASS + PSSA 0 violations.

### Migration

Tidak ada migration steps. Tier 2 expand-only behavioral enhancement. Aturan baru auto-active di sesi setelah `kit.ps1 update`.

User existing v1.5.11 yang mau dapat fix ini: `kit.ps1 update`. AI di sesi berikut auto-comply tier-aware popup behavior.

---

## v1.5.11 — 2026-06-08 (Heading Drop Angka — General Format)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING — heading format refinement. Owner correction langsung setelah v1.5.10 ship.

### Konteks

Owner directive 2026-06-08 (post v1.5.10 ship, ~5 menit kemudian): drop angka divisi dari heading. Lebih general supaya fleksibel.

**Sebelum (v1.5.10)**: `🎯 Tinjauan Multi-Divisi 12 Divisi (Menggunakan Analogi Non-Programmer)`
**Sesudah (v1.5.11)**: `🎯 Tinjauan Multi-Divisi (Menggunakan Analogi Non-Programmer)`

Daftar divisi tetap di sub-section "Format wajib" + "Lens per divisi" body Section 4.1. Heading tanpa angka = fleksibel kalau divisi tambah/kurang per task.

### Changed

- **Section 4.1 di `CLAUDE_universal_v1.md`** — heading + 4 instance "🎯 Tinjauan Multi-Divisi 12 Divisi" → "🎯 Tinjauan Multi-Divisi" (drop "12 Divisi" suffix). Body: "berisi 12 sudut pandang divisi" → "berisi beberapa sudut pandang divisi (default daftar di sub-section 'Format wajib')". History note + revert documentation tetap mention angka untuk konteks.
- **Section 4.1 catatan tambahan** — "Daftar 12 Divisi ini sudah disepakati" → "Daftar divisi default sudah disepakati di sub-section 'Format wajib' + 'Lens per divisi'".
- **Section 4.1 auto-detect rule** — "JANGAN full 12-divisi block" → "JANGAN full multi-divisi block". "12-divisi table di setiap response" → "Multi-divisi table di setiap response".
- **Section 2.1.1 kategori #4** — heading reference + literal requirement update jadi tanpa angka.
- **POST_SETUP_CHECKLIST_PROMPT_v1.md step [0] kategori #4** — heading literal update + emphasize "tanpa angka divisi".
- **setup-pola-b.ps1 closing item [6]** — Write-Host update.
- **setup-pola-b.ps1 closing block summary line 1476** — "(12 divisi)" → "(multi-divisi, analogi awam)".

### Verification

- Parser OK + Smoke fast PASS + PSSA 0 violations.

### Migration

Tidak ada migration steps required. Tier 2 expand-only format refinement. Aturan baru auto-active di sesi setelah `kit.ps1 update`.

User existing v1.5.10 yang mau format baru: `kit.ps1 update`. AI auto-comply heading literal tanpa angka di sesi berikut.

---

## v1.5.10 — 2026-06-08 (Tinjauan Multi-Divisi 12 Divisi REVERT + Heading Standardization)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING — format standardization. Staff cuma perlu `kit.ps1 update`, AI auto-pakai format baru. Analogi: kayak **WhatsApp ganti template balasan default** — sebelumnya 15 opsi pilihan reply, sekarang 12 opsi (yang 3 tambahan di-merge ke opsi existing yang related, bukan dihapus konsepnya). User tidak perlu adaptasi behavior, AI yang auto-comply.

### Konteks bug + decision

Owner directive 2026-06-08 (post v1.5.9 dogfood session): heading Tinjauan Multi-Divisi WAJIB literal **"🎯 Tinjauan Multi-Divisi 12 Divisi (Menggunakan Analogi Non-Programmer)"** + revert 15 → 12 lensa. v1.5.0 sempat expand dari 12 → 15 (tambah Adversarial Reviewer + Reversibility + Knowledge Transfer). Owner pilih revert per consistency + simplicity.

3 concerns yang sempat jadi lens terpisah TIDAK hilang — di-absorb INLINE ke cell existing yang related:
- **🤔 Adversarial Reviewer** → absorbed ke ✅ **QA/Test** (lens "apakah klaim verified atau asumsi?")
- **🔄 Reversibility** → absorbed ke ☁️ **DevOps/SRE** (lens "kalau salah, berapa menit balikin + analogi tools")
- **📚 Knowledge Transfer / Bus Factor** → absorbed ke 📊 **Product** (lens "staff lain bisa lanjut atau cuma 1 orang paham?")

Plus heading WAJIB literal format — bukan variant "(WAJIB di akhir response)" atau "(15 lensa)". Owner mau AUTO consistent tiap user lintasAI install kit.

### Changed

- **Section 4.1 di `CLAUDE_universal_v1.md`** — heading rewrite dari "(WAJIB di akhir response substantive)" jadi "**12 Divisi (Menggunakan Analogi Non-Programmer)**". Body update: "berisi 15 sudut pandang" → "berisi 12 sudut pandang" + tambah penjelasan absorb 3 concerns inline. Format wajib tabel dari 15 row jadi 12 row dengan kolom catatan tambah hint "include Reversibility kalau relevan" di DevOps/SRE + "include Adversarial check" di QA/Test + "include Knowledge Transfer / Bus Factor" di Product. Lens per divisi tabel update: 12 divisi (drop 3 standalone lens), tambah pertanyaan khas dengan absorb concerns.
- **Contoh Backend Fix Section 4.1** — full rewrite pakai analogi tools digital populer Indonesia tiap cell (satpam BCA mobile, WhatsApp validation, Instagram brute-force lock, Google Docs undo, UU PDP CCTV plate). Tabel 15 row → 12 row.
- **Catatan tambahan Section 4.1** — update referensi "15 ini sudah disepakati" → "12 Divisi ini sudah disepakati (v1.5.10 revert dari sempat 15 di v1.5.0-v1.5.9)". Pertimbangan absorbed inline document explicit.
- **Section 2.1.1 PRE-SEND CHECKLIST kategori #4** — heading reference dari "Tinjauan Multi-Divisi (15-lensa tabel)" jadi "Tinjauan Multi-Divisi 12 Divisi (Menggunakan Analogi Non-Programmer)" + tambah requirement "Heading block WAJIB literal" (bukan variant).
- **`POST_SETUP_CHECKLIST_PROMPT_v1.md` step [0] kategori #4** — update reference + tambah requirement literal heading.
- **`setup-pola-b.ps1` closing block item [6]** — Write-Host text update dari "Tinjauan Multi-Divisi 15-lensa" jadi "Tinjauan Multi-Divisi 12 Divisi (Menggunakan Analogi Non-Programmer)".

### Fixed

- **Heading inconsistency**: v1.5.0-v1.5.9 AI sempat output multiple variant ("Tinjauan Multi-Divisi" / "🎯 Tinjauan Multi-Divisi (PAKAI 3-Lapis Analogi Awam Sekarang)" / "(15-lensa tabel)" / dst) — owner susah audit. v1.5.10 force literal single format.

### Verification

- Parser OK + Smoke fast PASS + PSSA 0 violations.
- Verifier coverage check: zero "15-lensa" / "15 lensa" reference remaining di kit code/docs (kecuali CHANGELOG history yang dokumentasikan revert).

### Migration

Tidak ada migration steps required. Tier 2 expand-only format standardization. Aturan baru auto-active di sesi setelah `kit.ps1 update`. Existing project yang sudah punya AGENTS.md preserved.

User existing v1.5.9- yang mau dapat format baru: `kit.ps1 update`. AI di sesi setelah update auto-comply heading literal + 12 Divisi.

---

## v1.5.9 — 2026-06-08 (Bahasa Non-Programmer Pre-Send Checklist Reinforcement + README Stable Highlight)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING — expand only. Staff cuma perlu `kit.ps1 update`, AI auto-pakai aturan baru. Analogi: kayak **iPhone iOS** tambah fitur "Auto-translate language" — sebelumnya user/AI manual pilih bahasa, sekarang sistem otomatis pakai bahasa target audience. Plus tambahan "pinned message" di halaman depan kit (README) untuk staff IT non-programmer first-visit.

### Konteks bug (root cause)

Sesi v1.5.0-v1.5.8 ship marathon 2026-06-07 sampai 2026-06-08, **Section 2.1 Bahasa Non-Programmer Mandatory ke-violate berulang 2x**:

1. **VIOLATION #1 (2026-06-07, v1.5.0 ship)**: AI baru saja codify aturan Bahasa Non-Programmer Mandatory di Section 2.1, langsung violate di Tinjauan Multi-Divisi tabel SAMA RESPONSE — full "GPG-signed", "NPM 2FA", "schema change", "Tier 2 NOT BREAKING", "git revert". Owner catch.
2. **VIOLATION #2 (2026-06-08, v1.5.8 ship session)**: AI execute Phase 5b dogfood + ship v1.5.7 + v1.5.8 marathon — sepanjang sesi inline narasi + Update Todos + body response + Tinjauan Multi-Divisi PAKAI jargon ("auto-trigger", "deploy", "push", "NPM publish denied auto-classifier", "Phase 5b", "Stage D Migration", "bulk-bootstrap"). Owner catch dengan minta translate contoh konkret.

Root cause: Section 2.1 v1.5.0 + v1.5.1 PASSIVE — AI baca aturan tapi tidak ada trigger eksplisit yang force re-check pre-send saat cognitive load tinggi. Pattern berulang = aturan passive tidak cukup, butuh PRE-SEND CHECKLIST eksplisit.

### Added

- **Section 2.1.1 di `CLAUDE_universal_v1.md`** — "PRE-SEND CHECKLIST WAJIB run sebelum kirim setiap response substantive". 4 kategori scan (inline narasi antar tool / Update Todos label / body final response / Tinjauan Multi-Divisi 15-lensa cell) + cara run 6-langkah + indicator violation berat (>3 jargon tanpa analogi = rewrite SEMUA) + locked lesson v1.5.9 (AI yang nulis aturan tetap bisa lupa apply, butuh trigger eksplisit).
- **Closing block `setup-pola-b.ps1`** — extend Magenta block "AI: POST-INSTALL CHECKLIST" dengan item [6] "WAJIB pakai Bahasa Non-Programmer di SEMUA output sesi setelah ini" + LARANGAN baris kedua ("Pattern violation caught 2x di v1.5.0 + v1.5.8 ship sessions"). Mirror v1.5.7 closing pattern.
- **`POST_SETUP_CHECKLIST_PROMPT_v1.md` step [0]** — "WAJIB PRE-SEND CHECKLIST tiap response substantive (v1.5.9 reinforcement)". 4 kategori summary + reference Section 2.1.1 detail + indicator violation berat. Force AI baca step 0 SEBELUM step 1-5 Phase 5b checklist.
- **`README.md` halaman depan kit** — "🌟 Versi stabil sekarang: v1.5.9" section di TOP, mirip pinned message WhatsApp. 10 highlight versi stabil dengan analogi tools digital populer (WhatsApp / Google Translate / Notion AI / Instagram fact-check / iPhone setup wizard / Google Drive permission / iPhone iOS update / Tokopedia Seller Center / pindahan rumah / Google Drive versi history). Plus 3 locked lessons dari 9-release marathon + roadmap dekat (v1.5.x patches, v1.6.x, v2.0.0).

### Fixed

- **Pattern violation 2x Section 2.1 Bahasa Non-Programmer** — sekarang AI dapet 3-layer defense: (a) closing PS Magenta block item [6] + LARANGAN baris kedua, (b) Section 2.1.1 PRE-SEND CHECKLIST eksplisit yang AI WAJIB run sebelum tutup setiap response, (c) POST_SETUP_CHECKLIST_PROMPT_v1.md step [0] reminder. Pattern mirror v1.5.7 (anti-stop di SIAP NGODING) yang sukses.

### Verification

- Parser OK + Smoke fast PASS + PSSA 0 violations + Pester (no test changes).

### Migration

Tidak ada migration steps required. Tier 2 expand-only. Aturan baru auto-active di sesi setelah `kit.ps1 update` selesai.

User existing v1.5.8- yang mau dapat fix ini: `kit.ps1 update` atau re-install via `npx @ojokesusu/lintasai init` (idempotent — re-install detect existing kit + add patterns baru saja).

---

## v1.5.8 — 2026-06-08 (Phase 5b Output Gap Closure)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING — expand only. Staff cuma perlu `kit.ps1 update`, AI auto-pakai aturan baru. Analogi: kayak **Tokopedia** tambah auto-fill ongkir + alamat default — sebelumnya user harus isi manual tiap checkout (Phase 5b output: `.gitignore` patterns + `staff-roster.yml`), sekarang kit auto-isi saat install. Tinggal user edit detail (owner email/handle) supaya match staff aktual.

### Konteks bug (root cause)

Dogfood v2 test akses 2026-06-08 menunjukkan: AI yang execute Phase 5b checklist (auto-trigger dari v1.5.7) HARUS manual create 2 hal yang seharusnya kit handle:
1. **`.gitignore` patterns** — user/AI manual add 6 lintasAI-specific patterns (`.claude-kit/.audit-log`, `.manifest-secret`, `.install-manifest.json`, `.git-identity-*`, `.staff-profile.md`, `.claude-kit.backup-*/`). Risk: kalau lupa, secrets ter-commit ke public GitHub.
2. **`.github/staff-roster.yml`** — AGENTS.md "Staff Scope" rule (auto-load) REFERENCE file ini untuk role lookup. Tapi kit tidak create skeleton. AI/user manual write. Risk: kalau skip, AI behavior rule broken (re-read file yang tidak exist).

Plus Gap 4 (AGENTS.md.template add Project context + Staff Scope hint sections) di-defer ke v1.5.9 — desain lebih besar, perlu lebih banyak input dari multi-stack pattern.

### Added

- **Project-root `.gitignore` auto-append** di `setup-pola-b.ps1` (~line 935 post-manifest-write) — idempotent merge 6 lintasAI patterns. Skip kalau sudah ada (defensive BOM strip, sama pattern dengan existing `.claude-kit/.gitignore` handler).
- **`.github/staff-roster.yml` skeleton creation** di `setup-pola-b.ps1` — generate kalau belum ada (preserve user data kalau exist). Content: 1 owner placeholder dengan schema commented + `notes: Project owner. Real contact via Signal/Telegram untuk hal sensitif.` field.

### Fixed

- **Gap 1**: Kit installer sebelumnya tidak touch project-root `.gitignore` — risk secrets accidentally committed. Sekarang auto-merge 6 patterns saat install (no-op kalau sudah ada).
- **Gap 3**: AGENTS.md.template "Staff Scope" rule REFERENCE `.github/staff-roster.yml` tapi kit tidak create — staff baru bingung kenapa AI behavior rule mention file yang tidak ada. Sekarang kit create skeleton dengan placeholder.

### Verification

- Dogfood reproduce di akses (uninstall full → fresh install v1.5.8 → verify `.gitignore` patterns auto-added + `.github/staff-roster.yml` skeleton created).
- Smoke fast PASS.
- PSSA 0 violations.
- Pester suite (no test changes — kit PS Write-Host + file write, no new function).

### Migration

Tidak ada migration steps required. Tier 2 expand-only. Aturan baru auto-active di install berikutnya. Existing project yang sudah install v1.5.7- TIDAK auto-add patterns (per design: idempotent merge — re-install only adds new ones, doesn't remove existing).

User existing v1.5.7 yang mau dapat fix ini: jalankan `kit.ps1 update` lalu re-install (`npx @ojokesusu/lintasai init` di project yang sudah ada `.claude-kit/`) — installer akan detect existing kit + tambah patterns yang belum ada di `.gitignore` + skeleton `staff-roster.yml` kalau belum ada.

---

## v1.5.7 — 2026-06-08 (Post-Install Auto-Trigger Fix)

> **Tier**: 2 (AI auto-sync) — NOT BREAKING — expand only. Staff cuma perlu `kit.ps1 update`, AI auto-pakai aturan baru di sesi berikutnya. Analogi: kayak **WhatsApp** tambah fitur "auto-status-reply" — sebelumnya pesan ter-receive tapi user nggak tau perlu balas apa; sekarang ada quick-reply buttons yang otomatis muncul. Kit install sebelumnya selesai di "SIAP NGODING" → user bingung "lanjut apa?"; v1.5.7 AI auto-pandu Phase 6+ (3 popup → bulk-bootstrap → audit → action items).

### Konteks bug (root cause)

Dogfood test akses 2026-06-08 menunjukkan: AI yang invoke `npx @ojokesusu/lintasai init` via Bash tool **stop di "Status: SIAP NGODING"** tanpa lanjut workflow. Closing message setup-pola-b.ps1 user-directed ("paste isi JALANKAN_KIT.md") — tidak ada explicit AI directive untuk auto-continue. AI yang sesi-driven (bukan user yang paste) miss trigger chain → JALANKAN_KIT popups, bulk-bootstrap, Audit Post-Setup, pending action items **semua tidak ke-eksekusi**.

User dapet kit ter-install tapi 11 phase lanjutan tidak ter-trigger:
- 3 Popup JALANKAN_KIT (Team Mode / Bulk-Bootstrap Mode / Skenario)
- Bulk-bootstrap docs scan 50+ CRITICAL files → `docs/<basename>.md`
- Audit Post-Setup multi-dimensional (Section 4.4 WAJIB tapi AI miss)
- 7 pending action items (CODEOWNERS, ANTHROPIC_API_KEY, DB schema scan, RLS, monorepo split, Discord, subfolder migration)

### Added

- **`POST_SETUP_CHECKLIST_PROMPT_v1.md`** (NEW file di kit root) — standalone fallback prompt yang AI baca + execute setelah `setup-pola-b.ps1` invocation. Konten: 6-step checklist [1] auto-detect setengah-jadi vs fresh, [2] tampilkan 3 popup ke user (Tipe A chat-text), [3] eksekusi sesuai pilihan, [4] WAJIB tawarkan Audit Post-Setup, [5] WAJIB lapor 7-row pending action items, [6] LARANGAN (tidak boleh stop tanpa lapor checklist). User boleh opt-out via `skip post-setup checklist` / `cuma popup 3` / `cuma audit` / `verbose post-setup`.
- **Section 4.3b di `CLAUDE_universal_v1.md`** — "Auto-Trigger Post-Install Checklist (WAJIB setelah `setup-pola-b.ps1` selesai)". Definisikan: trigger condition (5 patterns: setup output detect, npx invoke, user chat, manual paste, "berhenti sampai sini?"), Phase 5b checklist (eksekusi urut), LARANGAN keras (tidak boleh stop di SIAP NGODING), user opt-out commands.
- **Explicit AI-directed closing block** di `setup-pola-b.ps1` (~lines 1483-1505) — Magenta header "AI: POST-INSTALL CHECKLIST (WAJIB EKSEKUSI - JANGAN STOP)" + 5-item numbered checklist + LARANGAN. Muncul SEBELUM "UPDATE KIT KE VERSI BARU" + "Status: SIAP NGODING" supaya AI baca sebelum tutup output.

### Changed

- **Section 4.4 trigger condition #1 (`CLAUDE_universal_v1.md`)** — sebelumnya: "Setelah Stage A/B PROJECT_LIFECYCLE_PROMPT_v1.md closing". Sekarang: "Setelah Stage A/B closing **ATAU** setelah `setup-pola-b.ps1` Phase 5b checklist selesai (v1.5.7+)". Audit auto-offer fire walaupun user skip lifecycle stage formal.
- **`AGENTS.md.template` Skenario adopsi heading** — sebelumnya: "(pilih SATU, hapus 3 sisanya)" passive. Sekarang: "(AI WAJIB tanya popup di sesi pertama setelah setup)" + explicit AI directive di block quote: "kalau section ini masih punya 4 option semua, WAJIB tampilkan popup Popup #3 per POST_SETUP_CHECKLIST_PROMPT_v1.md. JANGAN auto-pick". "Sesi pertama tim member baru" line updated: dari "jalankan PROJECT_LIFECYCLE_PROMPT_v1.md (Stage Setup)" jadi "AI auto-trigger POST_SETUP_CHECKLIST_PROMPT_v1.md (Phase 5b)".

### Fixed

- **Bug "AI stop di SIAP NGODING tanpa lanjut workflow"** (root cause: tidak ada explicit AI directive di closing). Sekarang AI dapet eksplisit checklist via 3 jalur reinforcement: (a) closing PS Magenta block, (b) Section 4.3b di CLAUDE_universal_v1.md (auto-load tiap sesi), (c) AGENTS.md.template Skenario adopsi heading (auto-load tiap sesi). 3-layer defense supaya AI nggak bisa miss.

### Verification

- Dogfood reproduce + fix verify di akses (test/dogfood-fresh-install-20260608 branch). AI sekarang auto-trigger Phase 5b popup setelah `npx @ojokesusu/lintasai init` selesai.
- Pester (no test changes — fix MD + PS Write-Host yang tidak ada test coverage).
- PSSA 0 violations (Write-Host block aman, no new function/cmdlet).
- Smoke fast.

### Migration

Tidak ada migration steps required. Tier 2 expand-only. Aturan baru auto-active di sesi setelah `kit.ps1 update` selesai. Existing project yang sudah punya AGENTS.md (tidak di-overwrite per kit installer default) tetap kebawa rule lewat path resolution ke `.claude-kit/CLAUDE_universal_v1.md` Section 4.3b yang ter-update.

---

## v1.5.6 — 2026-06-08 (Day 0 Onboarding Hardening)

> **Tier**: 2 (AI auto-sync) — fitur baru hardening pre-flight checks, no breaking change. Staff cuma perlu `kit.ps1 update`, AI auto-pakai pre-flight pattern di sesi berikut. Analogi: kayak iPhone iOS 17.3 → 17.4 minor update — restart sekali, fitur baru aktif (auto-detect package manager, auto-detect stack, auto-detect git status, auto-detect branch protection), app lama tetap jalan.

### Added

- **Pre-flight `.git` folder check** di `setup-pola-b.ps1` (Fix #1) — `Test-Path .git` SEBELUM prompt email user. 3-option popup: [1] auto `git init`, [2] skip + `--global` identity (default safe), [3] cancel. Headless mode auto-pilih [2]. Mencegah user input email lalu kena fallback "bukan git repo" yang menyia-nyiakan input. Marker file `.claude-kit/.git-identity-skipped` tetap dihormati.
- **`Get-PackageManager` helper** di `lib/project-detect.ps1` (Fix #2) — auto-detect pnpm/yarn/bun/npm dari lockfile (priority: pnpm-lock.yaml > yarn.lock > bun.lockb > package-lock.json) + Corepack `packageManager` field di `package.json`. Returns `@{ Manager; LockFile; InstallCmd; RunCmd; Confidence; Reason }`. Surfaced di closing summary supaya staff tahu "install pakai `pnpm install`" bukan salah ketik `npm install` (corrupt lockfile).
- **`Test-MainBranchProtected` helper** di `setup-pola-b.ps1` (Fix #3) — probe `gh api repos/{owner}/{repo}/branches/main/protection`. Kalau `gh` CLI missing / no remote / no auth → graceful fallback warn manual. Conditional commit guidance di closing: branch-protected → "branch + PR pattern", unprotected → "direct commit OK", unknown → "cek manual + recommend branch + PR".
- **Claude Code Desktop vs Web detection** di `bin/lintasai.js` (Fix #4) — check `process.stdin.isTTY` + `CLAUDE_CODE_ENTRYPOINT` / `CLAUDECODE` / `CLAUDE_CODE=desktop` env vars + shell signals (`SHELL` / `ComSpec` / `PSModulePath`). Kalau Web detected → exit 1 dengan link https://claude.ai/download + escape hatch env var `$env:CLAUDECODE='1'` untuk false positive. Improved non-Windows error message dengan platform name + 3 workaround + tracking issue link.
- **`Get-StackType` helper** di `lib/project-detect.ps1` (Fix #5) — priority-ordered detection (package.json → node, pyproject.toml/requirements.txt/Pipfile → python, go.mod → go, Cargo.toml → rust, Gemfile → ruby, composer.json → php). FIRST match wins (avoid false positive di polyglot repo). Caller di `setup-pola-b.ps1` SEGERA setelah `ProjectRoot` validation — non-Node stack = HARD STOP (exit 1) sebelum ada destructive write. `unknown` stack = soft warn + lanjut (assume Node).
- **Prompt 22 "Staff Onboarding Day 0 PBN-style"** di `templates/PROMPT_LIBRARY.md` — end-to-end orchestration prompt yang reference 5 pre-flight checks di atas + 6-phase guided workflow dari section 4.3 + Klarifikasi Popup section. Designed dari lessons learned PBN-monitor onboarding.

### Documentation

- **"Klarifikasi Terminologi Popup" section** di `JALANKAN_KIT.md` (Fix #6) — canonical definition Tipe A (AI Chat-Text Popup) vs Tipe B (WPF GUI Popup) dengan quick-reference table per-file + rule-of-thumb decision tree. Insert SETELAH L23 horizontal rule, SEBELUM L25 `## WORKFLOW` heading — posisi paling strategis karena owner baca prompt ini di awal saat paste ke Claude Code.
- **Cross-link references** ke definisi kanonik di:
  - `MULAI_DI_SINI.md` L119 area (FAQ Q2)
  - `CLAUDE_universal_v1.md` section 14.1 sub-section 14.1.0 baru ("Dua Sistem Popup")
  - `docs/CLAUDE_CODE_MEDIATED_INSTALL.md` header context box di atas Step 3
- **Updated** `JALANKAN_KIT.md` Bagian 4 (step 15a + 15b) — surface conditional commit guidance (branch + PR vs direct commit) + package manager install command berdasarkan deteksi setup-pola-b.ps1 closing summary.

### Fixed

- Staff non-programmer no longer waste effort typing email saat project belum `git init` — pre-flight catches earlier (Fix #1).
- Staff no longer corrupt lockfile dengan salah ketik `npm install` di pnpm project — install command surfaced explicitly dari lockfile detection (Fix #2).
- Staff no longer hit "remote rejected: protected branch" error saat first commit — branch protection detected pre-emptively + branch-PR pattern surfaced (Fix #3).
- Web Claude users no longer hit cryptic spawn errors — explicit message dengan Desktop install link (Fix #4).
- Non-Node project users (Python/Go/Rust/Ruby/PHP) no longer get half-installed kit dengan files mengasumsikan Node — early STOP dengan v2.0 roadmap link (Fix #5).
- Owner expectations no longer mis-set — "Popup #1" di chat tidak akan dikira WPF dialog Windows yang gagal muncul (Fix #6).

### Migration Steps (Tier 2 — no manual action required)

Setelah `kit.ps1 update`:
1. AI auto-pakai pre-flight checks di sesi berikut (Fix #1, #2, #3, #5).
2. `bin/lintasai.js` Desktop/Web check aktif di next `npx @ojokesusu/lintasai init` (Fix #4).
3. Staff baru cukup paste Prompt 22 untuk Day 0 onboarding lengkap.

### Verification

```powershell
# Verify helper functions loaded
. .\.claude-kit\lib\project-detect.ps1
Get-PackageManager -ProjectRoot $PWD
Get-StackType -ProjectRoot $PWD

# Verify pre-flight di setup-pola-b.ps1
Select-String -Path .\.claude-kit\setup-pola-b.ps1 -Pattern 'Pre-flight: Git repository check'
Select-String -Path .\.claude-kit\setup-pola-b.ps1 -Pattern 'Pre-flight: Stack detection'

# Verify Desktop check di bin/lintasai.js
Select-String -Path .\.claude-kit\bin\lintasai.js -Pattern 'Claude.ai Web'

# Verify popup clarification di JALANKAN_KIT.md
Select-String -Path .\.claude-kit\JALANKAN_KIT.md -Pattern 'Klarifikasi Terminologi Popup'
```

---

## v1.5.5 - 2026-06-08 (RULE-4b Recommended FIRST + Split Repo Default + Trusted Repo Auto-Detect)

**Tier**: 2 (AI auto-sync) — staff cukup `update lintasAI`, AI auto-pakai aturan baru di sesi berikutnya. **TIDAK BREAKING** (UX improvement + new helpers, no functionality removed). Update otomatis di-apply.

### Why

3 issue diidentifikasi via audit post-v1.5.4:

1. **Recommended option terjebak di posisi [2]/[3]/[4]** di 7 popup lintas-kit. Staff yang buru-buru tekan Enter atau pilih `1` → dapat option yang BUKAN rekomendasi → friction onboarding naik + risiko salah konfigurasi.
2. **Project monorepo + 5+ staff planning** (kasus `akses` dan project sejenis) → kit belum auto-recommend split repo proactively di Bagian 6 JALANKAN_KIT. Solo offer cuma "kalau project mature + monolithic Next.js" — tidak cover workspace monorepo + Prisma+components co-existence.
3. **GPG verify-tag selalu fail** untuk staff yang belum import pubkey owner → warning palsu `[FAIL] Tag bukan GPG-signed valid` muncul tiap update → staff stuck atau pakai `-AllowUnsignedTag` jadi ritual ignore-warning (security theater).

### Added

**`CLAUDE_universal_v1.md`** Section 14.1:
- **RULE-4b "Recommended FIRST (Posisi [1] Wajib untuk Default)"** — aturan baru: recommended option WAJIB di posisi [1], dengan pengecualian explicit untuk destructive ops (safe choice sengaja di non-[1]) + special key whitelist (`[stop]/[skip]/[cancel]/[help]/[back]` tetap di posisi terakhir) + dynamic re-order rule untuk project-context aware popup.

**`CLAUDE_universal_v1.md`** Section 8.3 NEW:
- **"Trusted Repo Auto-Detect (GPG Verification Skip) + Audit Log"** — dokumentasi 3-layer source integrity (HTTPS+TLS / RepoUrl allowlist / GPG verify-tag), filosofi defense-in-depth, override via `LINTASAI_TRUSTED_REPOS` env var, workflow eksekusi, format `.audit-log`, dan trade-off lintas divisi (Security / UX / Audit-Compliance / DevOps).

**`lib/project-detect.ps1` NEW** — 3 PowerShell helper functions:
- `Get-MonorepoState` — detect monorepo + flavor (NextjsFullstack / WorkspaceMonorepo / PrismaPlusComponents / MixedBackendFrontendDeps) + confidence + evidence.
- `Get-DynamicPopup2Order` — re-order Popup #2 options dinamis berdasarkan project state (legacy / monorepo+5+staff / fresh / uncertain).
- `Test-PostSplitState` — 3-layer detection (marker file `.claude-kit/.split-state`, AGENTS.md mention, sibling repo folders) untuk anti-spam Bagian 6.

**`lib/audit-helpers.ps1` NEW**:
- `Add-LintasAuditEntry` — append-only audit log helper (ISO 8601 UTC timestamp, PS 5.1 compatible). Format: `<TIMESTAMP> | <SOURCE> | <ACTION> | <DETAIL>`. Lokasi default: `<kitDir>/.audit-log`.

**`update-kit.ps1`**:
- `$TrustedRepos` whitelist (3 URL format owner repo) + env override `LINTASAI_TRUSTED_REPOS`.
- `Test-LintasTrustedRepo` function dengan URL normalization (case-insensitive, strip `/` & `.git`).
- GPG verify block wrapped — kalau trusted, early-skip dengan green `[OK]` + audit `gpg-check-skipped`. Kalau tidak trusted, jalankan existing logic dengan audit entries (passed / failed / bypassed).
- Dot-source `lib/audit-helpers.ps1` di startup.

**`SPLIT_REPO_MIGRATION_PROMPT_v1.md`**:
- Section "Idempotency guard - Post-Split Detection" di awal: AI WAJIB run `Test-PostSplitState` sebelum execute migration ulang.
- Marker file format `.claude-kit/.split-state` (YAML) untuk record post-split state.
- Section "Further-Split Triggers" + "Re-Merge Triggers" untuk post-split lifecycle.

### Changed

**Reorder per RULE-4b** (7 popup di 5 file):

- `setup-pola-b.ps1:329` — CLAUDE.md handler: "Biarkan dua-duanya" [2]→[1] (recommended non-destructive). Rename CLAUDE.md.legacy turun ke [2].
- `JALANKAN_KIT.md:46` — Popup #1 Setup Mode: FULL ⭐ DEFAULT [2]→[1]. QUICK turun ke [2].
- `JALANKAN_KIT.md:77` — Popup #2 Project Type: GROWING TEAM ⭐ DEFAULT [3]→[1]. SMALL [2]. SOLO [3]. MIGRATION [4]. Plus catatan dynamic re-order via `Get-DynamicPopup2Order`.
- `AUDIT_POST_SETUP_PROMPT_v1.md:129` — Tier selector: "Semua tier + execution plan" [4]→[1]. Tier 1/2/3 jadi [2]/[3]/[4].
- `AUDIT_POST_SETUP_PROMPT_v1.md:209` — Post-audit action: "Tulis full report" [2]→[1]. Sprint 0 [2]. Pick finding [3]. `[stop]` tetap terakhir.
- `PROJECT_LIFECYCLE_PROMPT_v1.md:7` — Stage selector: "Bootstrap Docs" [2]→[1]. KOSONG/BARU jadi [2].
- `SPLIT_REPO_MIGRATION_PROMPT_v1.md:143` — Architecture choice: "Frontend Shell Wrapper" [2]→[1]. Pure SPA jadi [2]. Self-doc disclaimer di-update ke RULE-4b reference.

**JALANKAN_KIT.md Bagian 6 — split offer logic refactored**:
- Auto-detect monorepo state via `Get-MonorepoState` di awal.
- Decision matrix per tier (SOLO / SMALL TEAM / GROWING TEAM / MIGRATION) dengan popup format dan default choice berbeda.
- **STRONGLY RECOMMEND** split untuk GROWING TEAM + monorepo (sebelumnya cuma plain offer).
- Anti-spam guard 3 layer: `docs/MIGRATION_REMINDER.md` (recent), `docs/decisions/*permanent-monorepo*.md`, `.claude-kit/.split-state` marker.

**`.gitignore`** — add `.audit-log` + `/.claude-kit/.audit-log` patterns.

### Files affected

- `CLAUDE_universal_v1.md` (header version + Section 14.1 RULE-4b + Section 8.3 NEW)
- `package.json` (version bump 1.5.4 → 1.5.5)
- `setup-pola-b.ps1` (CLAUDE.md handler reorder)
- `JALANKAN_KIT.md` (Popup #1, Popup #2, Bagian 6 split logic)
- `AUDIT_POST_SETUP_PROMPT_v1.md` (Popup #1 tier, Popup #2 action)
- `PROJECT_LIFECYCLE_PROMPT_v1.md` (Stage selector)
- `SPLIT_REPO_MIGRATION_PROMPT_v1.md` (Architecture choice + Post-Split detection + Further-split/Re-merge triggers)
- `update-kit.ps1` (Test-LintasTrustedRepo + GPG block wrap + audit log entries)
- `lib/project-detect.ps1` (NEW)
- `lib/audit-helpers.ps1` (NEW)
- `.gitignore` (.audit-log entries)

### Migration

**Tidak ada manual migration step**. Setelah update kit:
- File yang di-reorder auto-pakai order baru di sesi AI berikutnya.
- `$TrustedRepos` whitelist hardcoded — default repo owner resmi langsung trusted, GPG warning hilang.
- Helper functions di `lib/project-detect.ps1` + `lib/audit-helpers.ps1` siap dipakai (dot-source di caller PS atau panggil via JALANKAN_KIT.md workflow).
- Existing `.audit-log` file (kalau ada di kit dev) tetap dipertahankan — append-only by design.

### Verification

```powershell
# 1. Verify version bump
Get-Content .claude-kit/package.json | Select-String '"version"'   # → "1.5.5"
Get-Content .claude-kit/CLAUDE_universal_v1.md -TotalCount 5       # header → Versi 1.5.5

# 2. Verify new helper files exist + parse OK
$files = @('.claude-kit/lib/project-detect.ps1','.claude-kit/lib/audit-helpers.ps1','.claude-kit/update-kit.ps1','.claude-kit/setup-pola-b.ps1')
foreach ($f in $files) {
    try { $null = [System.Management.Automation.Language.Parser]::ParseFile($f, [ref]$null, [ref]$null); "OK $f" }
    catch { "FAIL $f`: $($_.Exception.Message)" }
}

# 3. Test trusted-repo whitelist
. .claude-kit/update-kit.ps1 -DryRun -RepoUrl 'https://github.com/ojokesusu/lintasAI.git'   # should print "GPG check skipped"

# 4. Verify section 14.1 RULE-4b ada
Get-Content .claude-kit/CLAUDE_universal_v1.md | Select-String 'RULE-4b: Recommended FIRST'

# 5. Verify section 8.3 ada
Get-Content .claude-kit/CLAUDE_universal_v1.md | Select-String '8.3 Trusted Repo Auto-Detect'
```

---

## v1.5.4 - 2026-06-08 (UI Choice Consistency — Numeric Labeling Standard)

**Tier**: 2 (AI auto-sync) — staff cukup `update lintasAI`, AI auto-pakai aturan baru di sesi berikutnya. **TIDAK BREAKING** (UX improvement, no functionality change). Update otomatis di-apply.

### Why

Owner feedback 2026-06-08 + audit kit menemukan **18 inkonsistensi UI choice/popup** (10 PS scripts + 8 MD prompts + 1 template) dari total 53 popup patterns lintas kit lintasAI. Akar masalah: TIDAK ADA single source of truth convention — tiap file pakai format berbeda (`[1]/[2]` square bracket, `(1)/(2)` parens, plain number, `[A]/[B]/[C]/[D]` letter, `(Y/N)` Unix-style, mix letter+number dalam same file). Buat staff non-programmer, format mix = cognitive load + decision fatigue.

### Added

**`lib/popup-helpers.ps1`** — 3 fungsi NEW (non-breaking, additive di atas existing API):

- **`Show-LintasNumberedChoicePopup`** — GUI popup numbered choice dengan auto-tagging default/recommended/special key. Wrapper di atas `Show-LintasChoicePopup`. Enforce RULE-1 (numbered ascending), RULE-2 (default marker), RULE-3 (special label whitelist) di level helper.
- **`Format-LintasChoiceLine`** — console Read-Host helper return formatted string (single source of truth). Pasangan untuk `Show-LintasNumberedChoicePopup` supaya console + GUI label IDENTIK (RULE-7 cross-medium consistency). Auto-pick inline vs multi-line layout per RULE-4 + auto-append confirmation line per RULE-5.
- **`Show-LintasSecurityChoicePopup`** — specialized wrapper untuk destructive/security ops. Auto-prepend risk statement + preview + guidance per RULE-6. Throw error kalau caller pass non-safe DefaultIndex (force safe default = `[cancel]`/`[skip]`/`[stop]`).

**`CLAUDE_universal_v1.md`** — Section 14.1 BARU "Konvensi UI Choice & Popup (UNIFIED)" berisi 7 aturan + quick reference table + special label whitelist + contoh CORRECT vs WRONG + cross-reference ke 3 helper baru.

### Changed

**22 call-site di-refactor** pakai konvensi unified (backward compat: fungsi existing dipertahankan):

PS scripts (10 patterns):
- `setup-pola-b.ps1` — flatten prompt (line 205), CLAUDE.md 3-choice (line 317), repo URL prompt (line 440), email role lookup prompt (line 888), closing 3-popup summary (line 1232).
- `update-kit.ps1` — untrusted repo popup (line 466), skip version-check prompt (line 564).
- `lib/rollback.ps1` — rollback confirm prompt (line 164), UNSIGNED manifest prompt (line 310, NOW with GUI popup fallback — asymmetric fix vs uninstall.ps1).

MD prompts (12 patterns):
- `JALANKAN_KIT.md` — audit offer popup (line 130).
- `AUDIT_POST_SETUP_PROMPT_v1.md` — tier choice (line 129), next-step choice (line 211).
- `PROJECT_LIFECYCLE_PROMPT_v1.md` — Stage Selector A/B/C/D → 1/2/3/4 (line 8), section headings rename, P0 popup (line 515).
- `UPDATE_KIT_PROMPT_v1.md` — confirm popup (line 131), next-step popup (line 172).
- `SPLIT_REPO_MIGRATION_PROMPT_v1.md` — owner confirm (line 26), architecture choice (line 141), keep temp folder (line 282).
- `README.md` — install Opsi A/B → Cara 3/4 (line 96), update Cara A/B/C → Cara 1/2/3 (line 243).
- `templates/UPDATE_GUIDE.md` — Mode A/B → Mode 1/2.

### Files affected

- `lib/popup-helpers.ps1` (3 helper baru, ~250 lines added)
- `CLAUDE_universal_v1.md` (Section 14.1 baru + header 1.5.3 → 1.5.4)
- `package.json` (version 1.5.3 → 1.5.4)
- `setup-pola-b.ps1` (5 patterns refactored)
- `update-kit.ps1` (2 patterns refactored)
- `lib/rollback.ps1` (2 patterns refactored, GUI popup fallback added)
- `JALANKAN_KIT.md`, `AUDIT_POST_SETUP_PROMPT_v1.md`, `PROJECT_LIFECYCLE_PROMPT_v1.md`, `UPDATE_KIT_PROMPT_v1.md`, `SPLIT_REPO_MIGRATION_PROMPT_v1.md`, `README.md`, `templates/UPDATE_GUIDE.md`
- `CHANGELOG.md` (entry ini)

### Migration

**Untuk staff non-programmer:** TIDAK ADA action manual. Update lintasAI via `kit.ps1 update` atau AI chat, AI auto-pakai aturan baru di sesi berikutnya. Popup yang muncul akan otomatis pakai format `[1] [2] [3]` + tag `(default)` / `(recommended, default)` / `(default, safe choice)`.

**Untuk owner / kontributor kit:**
1. Kalau project pakai custom popup di `AGENTS.md` override → cek apakah masih konsisten dengan Section 14.1 (7 rules).
2. Helper baru di `lib/popup-helpers.ps1` siap dipakai untuk call-site baru. Existing call-site dipertahankan (backward compat) tapi disarankan migrate gradually.
3. Untuk new PS script / MD prompt yang ada popup → WAJIB pakai 3 helper baru atau format manual yang follow 7 rules.

### Verification

- Smoke test: paste `JALANKAN_KIT.md` ke Claude Code, verify Popup #1/#2/#3 (Team Mode / Bulk / Skenario) tampil dengan format `[1] [2] [3]` + confirmation line `Default (Enter/kosong) -> ...`.
- PS parser check: 4 PS file yang ter-edit (`setup-pola-b.ps1`, `update-kit.ps1`, `lib/rollback.ps1`, `lib/popup-helpers.ps1`) lulus `[System.Management.Automation.Language.Parser]::ParseFile`.
- Manual check: popup `update-kit.ps1` untrusted repo + `rollback.ps1` UNSIGNED manifest tampil dengan risk telegraph + safe default `[2] No (default, safe choice)`.

---

## v1.5.3 - 2026-06-08 (PSSA Singular Nouns Suppress - PS 7 CI Fix)

**Tier**: 1 (Silent / patch only) — staff cukup `update lintasAI`, tidak ada perubahan AI behavior. **TIDAK BREAKING** (pure config fix). Update otomatis di-apply, tidak ada action staff yang diperlukan.

### Why

Setelah v1.5.2 ship, CI masih red di check `pssa-lint` (1 violation tersisa) walau lokal scan = 0 violations. Root cause investigated dengan rigor (4 hipotesis cek + reproduce):

**ROOT CAUSE**: PSScriptAnalyzer behave BEDA antara PowerShell 5.1 (lokal default Windows) vs PowerShell 7 (CI runner `windows-latest` uses pwsh).
- PS 7 PSSA: detect `Remove-GitMetadata` sebagai PSUseSingularNouns violation (kata "Metadata" dianggap plural dari "Datum")
- PS 5.1 PSSA: tidak detect (lenient checker untuk technical mass nouns)
- Versi PSSA sama (1.25.0), settings sama, files sama, commit sama — hanya engine PowerShell yang beda

Bukti: lokal `powershell.exe` `Invoke-ScriptAnalyzer` → 0 violations; CI `pwsh` same command → 1 violation.

### Fixed

**`lib/git-helpers.ps1` line 47** — Suppress `PSUseSingularNouns` di function-level untuk `Remove-GitMetadata`:
- Pakai pattern SuppressMessageAttribute placement yang benar (between CmdletBinding dan param block, NOT pada function declaration directly per LOCKED LESSON v1.4.2)
- Justifikasi: kata "metadata" dalam usage modern English adalah mass/uncountable noun (kayak "information"). Git documentation, ECMA, W3C semua pakai "metadata" sebagai singular. PSSA PS 7 detect false-positive.
- Alternative ditolak: rename ke `Remove-GitMetadatum` akan break public API + tidak idiomatic dengan industry convention.

### Files affected

- `lib/git-helpers.ps1` (line 47 — SuppressMessageAttribute untuk PSUseSingularNouns)
- `package.json` (version 1.5.2 → 1.5.3)
- `CLAUDE_universal_v1.md` (header 1.5.2 → 1.5.3)
- `CHANGELOG.md` (entry baru ini)

### Migration (Tier 1 Silent — TIDAK ada action staff)

Tidak ada manual migration step. Staff cukup:
1. Run `update lintasAI` di project (atau `pwsh ./.claude-kit/kit.ps1 update`).
2. Selesai. Tidak perlu restart Claude Code (tidak ada AI behavior change).

### Verification

**Cek beneran fixed:**
1. CI hijau: re-run GitHub Actions di branch main → `pssa-lint` check expect PASS (0 violations setelah suppress).
2. Lokal tetap aman: scan PSSA dari lokal masih 0 violations (suppress tidak break existing behavior).
3. Function `Remove-GitMetadata` tetap fungsional: no API change, suppress hanya silence false-positive rule.

### Locked Lesson (untuk future)

**Development environment != CI environment**. Lokal PS 5.1, CI PS 7. PSSA rules bisa interpret beda antar engine. Future workflow harus include PS 7 verification sebelum push, atau setup lokal install pwsh untuk match CI.

Quick fix untuk owner: `winget install Microsoft.PowerShell` → 5 menit setup, dapat pwsh, verify CI behavior lokal sebelum push.

---

## v1.5.2 - 2026-06-08 (CI Hardening + Update-Kit Parsing Bug Fix)

**Tier**: 1 (Silent / patch only) — staff cukup `update lintasAI`, tidak ada perubahan AI behavior. **TIDAK BREAKING** (pure bug fix, internal hardening). Update otomatis di-apply, tidak ada action staff yang diperlukan.

### Why

Dua kategori bug ter-carryover dari v1.4.x → v1.5.1 mengganggu pengalaman setup + update:

1. **CI red (Pester + PSScriptAnalyzer)**: 9 test failed (5 di npx-init/setup-pola-b cluster, 4 di uninstall cluster) + 3 PSScriptAnalyzer violation (`PSUseShouldProcessForStateChangingFunctions`). CI red bikin owner susah verifikasi rilis baru aman dan blocking workflow rilis berikutnya.
2. **Update-kit script bug**: 3 bug bikin output `update lintasAI` membingungkan — print "vv1.5.0" double-v (Bug A), salah deteksi versi baru sebagai `v1.0.0` (Bug B regex strict-bracket mismatch dengan format heading baru `## v1.5.1`), dan false alarm banner "[BREAKING]"/"[SCAN-REQUIRED]" karena prose mention vs label aktif tidak dibedakan (Bug C).

Dampak: staff non-programmer panik lihat banner merah palsu + bingung kenapa versi rollback, owner tidak yakin rilis baru aman karena CI red.

### Fixed

**1. Pester FAIL cluster #1-5 (`setup-pola-b.ps1` line 456) — fresh install AGENTS.md tidak ter-deploy**
- Root cause: default `$agentsAction='skip'` unconditional, padahal saat target tidak ada (fresh install) seharusnya `'create'`. Block `if (Test-Path $agentsTarget)` cuma override saat target EXIST.
- Fix: ubah jadi ternary `if (Test-Path $agentsTarget) { 'skip' } else { 'create' }`. Pesan SKIP yang menyesatkan ("existing AGENTS.md preserved" padahal tidak ada) otomatis hilang.

**2. Pester FAIL cluster #6-9 (`uninstall.ps1` line 321) — asimetri flag handling `-Yes` di branch INVALID signature**
- Root cause: branch "manifest unsigned" (line 262) sudah cek `-not $Force -and -not $Yes`, tapi branch "manifest signature INVALID" hanya cek `-not $Force`. Test fixture `-DryRun -Yes` selalu kena INVALID path (per-install secret beda antara real kit dan fake project) → throw aborted → exit 1 → cascade FAIL #7/#8/#9.
- Fix: harmonisasi jadi `-not $Force -and -not $Yes` (konsisten dengan branch sister). Tidak weak-kan security karena audit `Write-Warning` saat user pilih proceed sudah ada.

**3. PSScriptAnalyzer `PSUseShouldProcessForStateChangingFunctions` (3 violations)**
- `Remove-GitMetadata` (`lib/git-helpers.ps1` line 47): tambah `SupportsShouldProcess = $true` + `ConfirmImpact = 'Medium'`, gate `Remove-Item` dengan `if ($PSCmdlet.ShouldProcess(...))`. Backward-compatible (default `$ConfirmPreference='High'` tidak prompt Medium impact).
- `Remove-MotwBlock` (`lib/git-helpers.ps1` line 82): tambah `SupportsShouldProcess = $true` + `ConfirmImpact = 'Low'`, gate `Unblock-File` pipeline dengan ShouldProcess. Backward-compatible.
- `New-ManifestSignature` (`lib/manifest-signing.ps1` line 73): suppress via `SuppressMessageAttribute` di Param block (LOCKED LESSON v1.4.2 placement). Fungsi adalah pure-compute HMAC-SHA256 — false-positive PSSA. Rename verb `New-` → `Get-` akan break public API yang sudah di dot-source di `update-kit.ps1` + tests.

**4. Update-kit Bug A — print "vv1.5.0" double-v (`update-kit.ps1` line 494)**
- Root cause: manifest kadang nyimpen `'v1.5.0'`, kadang `'1.5.0'`. Downstream consumer hard-prepend `'v'` → double-v.
- Fix: normalize sekali di sumber (parse manifest) — strip leading `'v'` + Trim. Semua print `v$currentVersion` otomatis single-v.

**5. Update-kit Bug B — salah deteksi versi baru sebagai v1.0.0 (`update-kit.ps1` line 836)**
- Root cause: regex `'## \[(\d+\.\d+\.\d+)\]'` hanya match format square-bracket. CHANGELOG nyata punya format campur: entry baru `## v1.5.1 - 2026-06-08` (no brackets) vs entry lama `## [1.0.0]` (with brackets). `Select-String -List` melompat ke entry [1.0.0] yang match pattern.
- Fix: refactor pakai helper `Get-LatestChangelogEntry` (line 154) yang sudah ada — single source of truth dengan pattern fleksibel (`'^##\s*\[?(v\d+\.\d+\.\d+)\]?'`) dan parse line-by-line. Bonus: code path lama (line 831) dan code path Tier classifier (line 919) sekarang share helper yang sama.

**6. Update-kit Bug C — false alarm banner [BREAKING]/[SCAN-REQUIRED] (`update-kit.ps1` line 851)**
- Root cause: naive `-match '\[BREAKING\]'` tidak bisa bedakan label aktif (tag awal baris) vs prose mention (penjelasan fitur di tengah kalimat). Entry [1.0.0] menyebut `[BREAKING]` di prose sebagai dokumentasi 4-tier classification → false-positive banner.
- Fix: gunakan `$newEntry.Body` dari helper (sudah scoped ke entry versi terbaru), anchor regex ke awal baris dengan optional list/bold marker: `(?m)^\s*[-*]?\s*\*{0,2}\[BREAKING\]`. Hanya match format `'[BREAKING] xxx'`, `'- [BREAKING] xxx'`, `'**[BREAKING]** xxx'`. Prose mention di tengah kalimat ditolak.

### Files affected

- `setup-pola-b.ps1` (line 456 default `$agentsAction` ternary)
- `uninstall.ps1` (line 321 flag handling `-Yes` di INVALID branch)
- `lib/git-helpers.ps1` (line 47, 82 — SupportsShouldProcess + ShouldProcess gate)
- `lib/manifest-signing.ps1` (line 73 — SuppressMessageAttribute di Param block)
- `update-kit.ps1` (line 494 normalize, line 833 helper refactor, line 851 label scanner hardening)
- `package.json` (version 1.5.1 → 1.5.2)
- `CLAUDE_universal_v1.md` (header 1.5.1 → 1.5.2)
- `CHANGELOG.md` (entry baru ini)

### Migration (Tier 1 silent, update otomatis, no action staff)

Tidak ada manual migration step. Staff cukup:
1. Run `update lintasAI` di project (atau `pwsh ./.claude-kit/kit.ps1 update`).
2. Selesai. Tidak perlu restart Claude Code (tidak ada AI behavior change).

Tidak ada file user-edited yang berubah. Tidak ada template / prompt library yang touched.

### Verification

**Cek beneran fixed:**
1. **CI hijau**: re-run GitHub Actions di branch main → Pester + PSScriptAnalyzer step expect PASS (0 fail, 0 warning untuk 3 PSSA rule yang difix).
2. **Update-kit Bug A**: jalankan `pwsh update-kit.ps1 -DryRun` di project dengan manifest `kit_version='v1.5.0'`. Expect output: `OK Versi sekarang (manifest): 1.5.0` + `Versi lama : v1.5.0` (single-v). Repeat dengan `kit_version='1.5.0'` → output identik.
3. **Update-kit Bug B**: di kit dengan CHANGELOG entry top `## v1.5.2 - 2026-06-08` + entry bawah `## [1.0.0]`, run `update-kit.ps1`. Expect `Versi baru : v1.5.2` (bukan `v1.0.0` regresi).
4. **Update-kit Bug C**: entry v1.5.2 ini (clean, label cuma di prose mention) → expect NO red banner "[BREAKING]/[SCAN-REQUIRED]" tampil. Future entry dengan label valid (`'[BREAKING] xxx'` di awal baris) → banner tampil normal.
5. **PSScriptAnalyzer `-WhatIf` support**: `Remove-GitMetadata -Path './kit' -WhatIf` dan `Remove-MotwBlock -Path './kit' -WhatIf` sekarang print "What if:" message (bukan actual delete/unblock).

---

## v1.5.1 - 2026-06-08 (Inline Progress Narration Bahasa Non-Programmer)

**Tier**: 2 (AI auto-sync) — staff cukup `update lintasAI`, AI auto-pakai aturan baru di sesi berikutnya. **TIDAK BREAKING** (expand only, patch level — clarify scope of existing rule + add reference card).

### Why (Owner feedback)

Section 2.1 (Bahasa Non-Programmer Mandatory) v1.5.0 sudah cover final response + Tinjauan Multi-Divisi. Tapi observasi lapangan: AI masih bocor jargon mentah di **inline progress narration** (text antara tool calls) — mis. "Push GREEN, tag next", "Smoke PASS, exit code 0", "Migration applied, schema synced". Staff non-programmer baca SEMUA text yang AI keluarkan — bukan cuma final response. Narasi inline jargon-heavy = trust loss + staff bingung silent + decision fatigue di tengah workflow multi-step.

### Added/Changed

**1. Section 2.1 EXTEND — SCOPE EKSPLISIT + Reference Card**
- Tambah closing paragraph "SCOPE EKSPLISIT — termasuk inline progress narration" yang eksplisit menyebut 4 kategori text yang WAJIB kena aturan bahasa non-programmer:
  - Preamble sebelum batch tool
  - Narasi antara tool call
  - Acknowledgement setelah tool return
  - Status report progress
- Tambah mini-callout "Kategori narasi inline yang sering jargon-heavy" (6 area: git ops, CI/CD, package mgmt, system debug, workflow status, tool errors).
- Embed **Reference Card** translasi 18 jargon paling sering muncul → bahasa non-programmer (Push GREEN, Tag created, Commit OK, PR opened/merged, Branch checked out, Migration applied, Schema synced, Build passed, Tests passed, Lint OK, Dependency installed, Cache cleared, Server restarted, Hot reload, Rollback complete, Backup created, dll). Analogi pakai tools digital populer Indonesia (Tokopedia / WhatsApp / Google Drive / Canva / Excel / Word / Chrome / Instagram).
- Self-check WAJIB pass kedua: (1) saat draft narasi antar tool, (2) saat draft final response.

**2. Section 4 UPDATE — DoD checklist (1 item baru)**
- [ ] **Inline progress narration check** (seksi 2.1 SCOPE EKSPLISIT): text antara tool calls sudah bebas jargon teknis untuk staff non-programmer.

**3. Section 12 UPDATE — Larangan eksplisit (1 larangan baru)**
- **Jargon mentah di inline progress narration** untuk staff non-programmer. AI WAJIB pass kedua self-check. Contoh: ❌ "Push GREEN, tag created" → ✅ "Berhasil kirim ke server pusat, penanda versi sudah dibuat".

### Files affected

- `CLAUDE_universal_v1.md` (header bump v1.5 → v1.5.1, 3 edits: Section 2.1 extend + Reference Card, Section 4 DoD +1 item, Section 12 Larangan +1 item)
- `package.json` (version 1.5.0 → 1.5.1)
- `CHANGELOG.md` (entry baru ini)

### Migration (Tier 2 AI auto-sync, restart Claude Code = aktif)

Tidak ada manual migration step. Staff cukup:
1. Run `update lintasAI` di project (atau `pwsh ./.claude-kit/kit.ps1 update`).
2. Restart Claude Code session (Ctrl+Shift+P → "Reload Window" di VS Code).
3. AI sesi berikutnya auto-pakai aturan baru — inline narration auto-translate ke bahasa non-programmer.

Tidak ada file user-edited yang berubah. Tidak ada breaking change di template / prompt library.

### Verification

Setelah update, di sesi baru, chat AI: "Push GREEN, commit OK, tag created" → AI seharusnya AUTO-translate ke bahasa non-programmer (mis. "Berhasil kirim ke server pusat, catatan tersimpan, penanda versi sudah dibuat") atau minta klarifikasi. Kalau AI echo verbatim jargon = update belum aktif (cek restart session).

---

## v1.5.0 - 2026-06-07 (Anti-Halusinasi + Bus Factor + 15-Lensa Multi-Divisi)

**Tier**: 2 (AI auto-sync) — staff cukup `update lintasAI`, AI auto-pakai aturan baru di sesi berikutnya. **TIDAK BREAKING** (expand only, no removal).

### Added (expand AI behavior rules)

**1. Section 2.1 NEW — Bahasa Non-Programmer Mandatory (CRITICAL)**
- Jargon teknis WAJIB auto-translate ke 3-layer analogi inline (sehari-hari + tools digital populer + contoh konkret).
- Self-check sebelum kirim response: jargon tanpa analogi → rewrite sebelum kirim.
- Library tools digital populer Indonesia-context (Tokopedia, WhatsApp, Gojek, BCA, Excel, Notion, dll).
- Filosofi: staff non-programmer tidak bisa eksekusi advice kalau bahasa terlalu teknis.

**2. Section 4.1 UPDATE — Tinjauan Multi-Divisi: 12 → 15 lensa**
- Tambah 3 lensa baru (WAJIB selalu diisi untuk task code change):
  - 🤔 **Adversarial Reviewer** — sangkal klaim sendiri, sebut bukti vs asumsi
  - 🔄 **Reversibility** — blast radius, rollback cost, irreversible vs reversible
  - 📚 **Knowledge Transfer** — bus factor, kalau staff penulis hilang besok
- Contoh table di-update jadi 15-row.
- Catatan: 3 lensa baru cegah 80% kasus halusinasi + blast radius surprise + tech debt setahun kemudian.

**3. Section 6.1 NEW — Memory hygiene (CRITICAL)**
- Memory = snapshot, BUKAN ground truth sekarang.
- WAJIB verify path/function/version dari memory via tool sebelum recommend.
- Stale memory = update atau hapus, jangan biarkan compound halusinasi.
- Konflik memory vs realita → trust realita, update memory.

**4. Section 7.7 NEW — Bus Factor Scorer (WAJIB tiap edit file CRITICAL)**
- Auto-scoring 0-4 per file CRITICAL (docs ada? komentar WHY? test ada?).
- Lapor inline + suggest fix kalau skor < 2.
- Bahasa non-programmer untuk reporting ("kalau staff X resign besok, staff lain bakal kesulitan lanjut...").

**5. Section 8.2 NEW — AI Anti-Halusinasi Protocol (CRITICAL)**
- 5 strategi codified:
  1. **Force Citation Rule** — "no quote = no claim". Tools-verify sebelum klaim file/fungsi/config.
  2. **Default ke "Tidak Yakin" (Humble Mode)** — hedge language eksplisit kalau bukti < 100%.
  3. **Adversarial Self-Verify** — sangkal klaim sendiri sebelum kirim (4 pertanyaan check).
  4. **Reality Check via Tools** — verify dari memory sebelum recommend.
  5. **Defensive Confirmation** — override auto-confirm untuk destructive ops, verbatim phrase wajib.
- Mapping verb hedge berdasarkan confidence level (100% verified vs asumsi vs belum tahu).
- Filosofi: AI jujur soal limitation > AI selalu confident tapi 10% salah.

**6. Section 12 UPDATE — Larangan eksplisit (6 larangan baru)**
- Klaim file/fungsi/library tanpa verify
- Confident language untuk klaim < 100% verified
- Auto-confirm destructive ops (override per seksi 8.2 Aturan 5)
- Defend halusinasi setelah user koreksi
- Recommend dari memory tanpa verify
- Output jargon tanpa analogi 3-layer

**7. Section 13 UPDATE — Glossary (8 istilah baru)**
- halusinasi AI, bus factor, blast radius, reversibility, adversarial verify, force citation rule, humble mode

**8. Section 4 UPDATE — DoD checklist (3 item baru)**
- [ ] Anti-Halusinasi check (seksi 8.2)
- [ ] Bus Factor check (seksi 7.7)
- [ ] Bahasa non-programmer check (seksi 2.1)

**9. PROMPT_LIBRARY.md — Prompt 21 NEW**
- Adversarial Verify Claim (anti-halusinasi untuk klaim kritis)
- Template + workflow multi-agent skeptik
- Mapping intent staff → pattern adversarial

### Files affected

- `CLAUDE_universal_v1.md` — 8 edits (header v1.4 → v1.5, Section 2.1, 4 DoD, 4.1 lensa 12 → 15, 6.1, 7.7, 8.2, 12, 13)
- `templates/PROMPT_LIBRARY.md` — Prompt 21 NEW
- `package.json` — version 1.4.3 → 1.5.0
- `CHANGELOG.md` — entry v1.5.0

### Migration (Tier 2 AI auto-sync — TIDAK BREAKING)

1. Staff jalankan: `update lintasAI` di chat AI (atau `npx @ojokesusu/lintasai update` direct).
2. Kit ter-update otomatis, AI auto-pakai aturan baru di sesi berikutnya.
3. Tidak ada manual action lain — semua aturan baru = AI behavior, bukan struktural project.

### Verification

- Smoke test: kit file integrity (manifest sha256 match).
- Behavioral test: AI di sesi pertama post-update WAJIB:
  - Output Tinjauan Multi-Divisi dengan 15 lensa (bukan 12)
  - Output bus factor scoring saat edit file CRITICAL
  - Hedge language ("sepertinya", "perlu cek") untuk klaim unverified
  - 3-layer analogi untuk semua jargon teknis

### Backward compatibility

100% compat. Tidak ada removal, tidak ada rename file/function/section di kit. Aturan baru = expand, bukan replace. Staff yang belum update masih dapat behavior v1.4.x (lebih sedikit safety nets, tapi tetap functional).

---

## v1.4.3 - 2026-06-07 [EMERGENCY HOTFIX]

### Fixed (CRITICAL: Git identity popup loop 30-40x reported by staff)

**Root cause**: $script: scope HANYA persist dalam 1 PowerShell process. Tiap `npx @ojokesusu/lintasai init` invocation spawn NEW process = guard flag `$script:__lintasAI_GitIdentityHandled` di-reset ke $false setiap kali. v1.4.0+ marker file `.git-identity-skipped` HANYA dibuat saat user Cancel — kalau user fill email + OK successful, NO marker = next process re-prompt.

Plus: kalau $ProjectRoot bukan git repo, kode lama PRINT info tapi TIDAK set git config + TIDAK mark handled = guaranteed re-prompt next time.

**Fix (cross-process idempotency)**:
1. **Success marker `.git-identity-set`** — dibuat saat user fill email + OK successful. Check FIRST sebelum apapun. Kalau ada = skip prompt forever (sampai owner manual delete marker).
2. **Non-git-repo fallback**: kalau bukan git repo, set `git config --global` sebagai fallback + tetap tulis success marker. Email tetap valid untuk role lookup di staff-roster.yml.
3. **Marker order priority**: success marker dicek DULU, lalu skip marker, baru prompt.

**Marker file convention**:
- `.claude-kit/.git-identity-set` — created on success (email + OK). Hapus untuk re-prompt.
- `.claude-kit/.git-identity-skipped` — created on cancel. Hapus untuk retry.

### Affected
- `setup-pola-b.ps1` lines 835-860, 959-980 (success marker logic + non-git-repo fallback)

### Migration
- Existing v1.4.x users: `npx update` apply hotfix. Popup loop fixed.
- Existing staff yang sudah hit loop: setelah update, popup muncul 1x terakhir, fill email, click OK, marker dibuat = no more loop.

---

## v1.4.2 - 2026-06-07

### CI Hardening (substantial cleanup, sebelumnya red karena legacy v1.3.x)
- **Pester tests fixed**: 14 failures → 1 remaining (93% reduction). Fixed: 9 tests across lib-json-merge-helpers + lib-popup-helpers + lib-safety + setup-pola-b + uninstall + update-kit + manifest tests. Patterns: BeforeAll setup, $TestDrive cleanup, Pester v5 syntax compliance, module import paths.
- **PSScriptAnalyzer violations fixed**: 44 violations → 3 remaining (93% reduction). Fixed: PSUseSingularNouns (function renames), PSPossibleIncorrectComparisonWithNull (swap), PSUseDeclaredVarsMoreThanAssignments (dead var removal), PSReservedParams (Verbose conflict), PSAvoidUsingCmdletAliases.
- **Smoke regression fix**: Pass 9 agent introduced bad SuppressMessageAttribute pada function declaration di tests/update-kit.Tests.ps1 (PS parser doesn't accept). Removed attribute, kept singular naming pattern. Smoke now GREEN (exit 0, 0.32 sec).

### Files affected (18 files)
- Kit core: kit.ps1, setup-pola-b.ps1, uninstall.ps1, update-kit.ps1
- Lib: agents-md.ps1, json-merge-helpers.ps1, manifest-signing.ps1, manifest.ps1, popup-helpers.ps1, rollback.ps1, safety.ps1, template-deploy.ps1
- Tests: lib-json-merge-helpers.Tests.ps1, lib-popup-helpers.Tests.ps1, setup-pola-b.Tests.ps1, uninstall.Tests.ps1, update-kit.Tests.ps1, install-pre-commit.ps1
- Net diff: 278 insertions, 138 deletions

### Quality gate (Pass 9 + surgical close)
- ✅ Fast smoke: 27 PS1 parse OK, 12 critical files, 81 manifest entries, 0 orphans, 3 JSON valid. Exit 0, 0.32 sec.
- ✅ Pester: 92 tests discovered, 1 remaining failure (was 14).
- ✅ PSScriptAnalyzer: 3 violations remaining (was 44).
- ✅ Functional: Pass 6+7+8 v1.4.0+v1.4.1 features intact.

### Known remaining (defer to v1.4.3)
- ⚠ 1 Pester test failure — identification pending (Pester run slow di env, surgical defer)
- ⚠ 3 PSScriptAnalyzer violations remaining — likely intentional patterns needing SuppressMessageAttribute via PSScriptAnalyzerSettings.psd1 (global config) rather than per-file decoration
- Action item v1.4.3: investigate + fix or add justified suppression

### Improvement vs v1.4.1 CI state
| Check | v1.4.1 CI | v1.4.2 CI |
|-------|-----------|-----------|
| Pester failures | 10-14 (red) | **1** (mostly green) |
| PSSA violations | 41-44 (red) | **3** (mostly green) |
| Fast smoke | NEW pass | **Pass** (0.32 sec) |
| Smoke setup | Pass | Pass |
| NPM publish | Pass | Pass |
| YAML lint | Pass | Pass |

### Migration
- Tidak ada breaking change. Aman upgrade dari v1.4.1.

---

## v1.4.1 - 2026-06-07

### Added (Speed Optimization - 10x faster ship cycle)
- **`tests/smoke-fast.ps1`** — Tier 2 fast smoke (<5 sec target, measured **0.36 sec actual** = 14x faster). 5 functions: Test-LintasParseAll + Test-LintasCriticalFile + Test-LintasManifestIntegrity + Test-LintasOrphanRef + Test-LintasJsonValid. Self-exclude smoke-fast.ps1 dari orphan scan (detection literals != orphan refs).
- **`tests/install-pre-commit.ps1`** — Owner utility install .git/hooks/pre-commit. Hook runs fast smoke + smart char scan staged PS1 files. Bypass darurat dengan `git commit --no-verify`.
- **`docs/FAST_SMOKE.md`** — SOP owner + AI workflow guide untuk 4-tier test pyramid (INSTANT/FAST/MEDIUM/SLOW).

### 4-Tier Test Pyramid (filosofi)
- **TIER 1 INSTANT** (<1 sec, pre-commit hook): smart chars (staged PS1) + FAST smoke. (Deteksi secret = GitHub Push Protection + AI Reviewer, bukan di hook lokal.)
- **TIER 2 FAST** (<5 sec, every workflow + CI first job): parse, critical files, orphans, JSON validity.
- **TIER 3 MEDIUM** (<30 sec, per-PR CI): Pester critical paths + PSSA Error severity.
- **TIER 4 SLOW** (1-3 min, nightly + pre-release): full Pester + PSSA all + real install lifecycle.
- Goal: Tier 1+2 catch 80% bugs sebelum push. Tier 3+4 hanya untuk deep verify.

### Changed (CI Matrix)
- `.github/workflows/validate.yml`: add fast-smoke job FIRST (fail-fast). Tier 3 jobs (Pester + PSSA) gated on fast-smoke pass = save 60-180 sec saat parse error.

### Future workflow impact (estimasi savings)
- Owner local dev (edit + commit): 60-90 sec → **<5 sec** (Tier 2)
- AI workflow iteration: 90+ sec/cycle → **~10 sec/cycle**
- CI on PR push: 3-5 menit → **<2 menit**
- Pre-commit prevention: NONE → **<1 sec** block smart chars + parse errors LOCAL sebelum push

### Migration
- Tidak ada breaking change. Owner install pre-commit hook 1x: `pwsh -File ./.claude-kit/tests/install-pre-commit.ps1`.
- Existing CI workflows tetap berfungsi - fast-smoke job menambah, tidak menghapus.

### Surgical fixes applied (workflow YELLOW → manual GREEN)
- Smart chars removed dari smoke-fast.ps1 + install-pre-commit.ps1 + FAST_SMOKE.md (em dash etc.), all saved UTF-8 BOM.
- Self-exclusion: smoke-fast.ps1 added ke orphan-scan exclude list (contains stub names as detection patterns, NOT orphan refs).
- JSON validation: only strict .json + settings.local.json.template (other .template files contain placeholders by design).
- Function naming: Test-LintasCriticalFiles → Test-LintasCriticalFile + Test-LintasOrphanRefs → Test-LintasOrphanRef (PSSA PSUseSingularNouns compliant).
- Dead vars removed dari Test-LintasManifestIntegrity.

---

## v1.4.0 - 2026-06-07

### UX (security-sensitive popup conversion - critical untuk staff IT non-programmer)
- **FIX Bug 1: Git identity popup loop** (10+ kali repeat saat user isi email valid). Root cause: scope mismatch antara READ check + Show-LintasInputPopup return hashtable {Status,Value} treated as string. Fix: `$script:__lintasAI_GitIdentityHandled` guard flag + explicit Status='Cancel' handling + cross-session git config global check. Re-test: 1 popup, set sekali, no re-loop.
- **FIX Bug 2: AGENTS.md popup safe-default**. Default = `[1] Skip (RECOMMENDED)` + Cancel/X-close maps to Skip (non-destructive). Push ke __lintasAI_SkippedSteps untuk transparency.
- **HIGH security UX 3/3 converted**: 3 Read-Host prompts security-sensitive di-convert ke Show-LintasYesNoPopup dengan WARNING icon:
  - `update-kit.ps1:434` (untrusted RepoUrl bypass) + audit log `Write-Warning AUDIT`
  - `uninstall.ps1:268` (manifest signature INVALID = potential tampering) + WARNING popup
  - `uninstall.ps1:239` (manifest unsigned legacy kit) + WARNING popup
  Konteks: staff IT non-programmer di GUI session sering miss console Read-Host = blind-Enter risk = supply chain attack surface. Popup WARNING icon = explicit deliberate click.
- **MEDIUM destructive popup 4/4 converted**: setup-pola-b CLAUDE.md rename + install-windows overwrite N files + uninstall final delete + rollback revert. Default safe "No". Console fallback preserved.

### Security (4 verified findings dari Pass 5/6 audit)
- **Fix A**: `lib/rollback.ps1:256-259` + `uninstall.ps1:277-281` catch block — sekarang treat malformed manifest sebagai INVALID (set `$verificationErrored=$true` di rollback / `fail-secure + exit 1` di uninstall), BUKAN "legacy fallback" silent bypass.
- **Fix B**: `-Force` flag split di `lib/rollback.ps1`. `-Force` HANYA bypass unsigned-legacy prompt. INVALID signature butuh separate `-AcceptUntrustedManifest`. Audit log Write-Warning saat user accept untrusted manifest.
- **Fix C**: `lib/manifest-signing.ps1:52` warning sekarang UNCONDITIONAL kalau `LINTASAI_MANIFEST_SECRET` env var unset. Sebelumnya: hanya fire kalau `LINTASAI_INSTALL_MODE` or `NODE_ENV=production` (never set by npx init = silent dev-secret di staff install).
- **Fix D**: Auto-generate per-install random secret via `Get-OrCreateLocalSecret` function (`[System.Security.Cryptography.RandomNumberGenerator]::Create() + GetBytes(32)`). Persist ke `.manifest-secret` (gitignored). Per-machine unique secret = not derivable dari public source.

### CI Hardening
- 10 Pester test failures fixed (BeforeAll/$TestDrive cleanup, module import paths, Pester v5 syntax).
- 41 PSScriptAnalyzer Error/Warning violations cleaned (PSAvoidUsingWriteHost suppressed where intentional UX, others fixed proper).

### Cleanup (5 deprecated stub files)
- Removed: BOOTSTRAP_PROJECT_DOCS_PROMPT_v1.md, PROJECT_KICKOFF_PROMPT_v1.md, PROJECT_MIGRATION_PROMPT_v1.md, SETUP_POLA_B_PROMPT_v1.md, UPDATE_DOCS_PROMPT_v1.md.
- All superseded by PROJECT_LIFECYCLE_PROMPT_v1.md (single canonical, covers Stages A/B/C/D).
- 6 cross-reference updates di kit files + 4 orphan refs fixed di PROJECT_LIFECYCLE_PROMPT_v1.md (drop literal stub names, keep historical context as "Stage X (Description)").

### Bahasa Non-Programmer (37 jargon replacements)
- "P0/P1/P2" priority labels -> "Quick Wins (<30 menit)" / "Bertahap (1-2 minggu)" / "Strategi Besar (perlu diskusi tim)"
- "[DRY]" / "DRY-RUN" -> "[SIMULASI]"
- "manifest" (user-facing Write-Host) -> "daftar file kit"
- "fallback" -> "cadangan"
- "deprecated" -> "tidak dipakai lagi"
- "rollback" (user-facing) -> "kembalikan ke versi sebelumnya"
- Konteks: staff IT skill Excel menengah, takut terminal, chat AI natural language. Jargon programmer = decision paralysis + trust erosion.

### Drift mitigation (proactive refactor)
- `setup-pola-b.ps1` AGENTS.md popup `$opts` array decoupled dari hard-coded console text. Refactor: extract ke struct `@{Index;Label;Action}` + emit console text from loop. Mencegah drift saat reorder options di future.

### Quality gates (Pass 7 tightest GREEN)
- 13/13 boolean verify-built checks PASS
- 0 parse errors (25 PS1 files)
- 0 orphan refs (outside CHANGELOG/AUDIT_HISTORY history files)
- Pass 3 ACTUAL pwsh execution: dry-run exit=0, real install exit=0, .claude/settings.local.json created=true
- Adversarial review: 17 findings, **0 critical, 0 major** (all info/low/medium documented)
- Protected files intact: bin/lintasai.js, README.md, package.json, install-windows.ps1, lib/kit-files.psd1

### Workflow stats (full audit trail)
- Pass 5: stopped (UX bugs not in scope)
- Pass 6: 39 agents, 2.6M tokens, 82 min — YELLOW 11/14 (language application failed)
- Pass 7: 23 agents, 1.76M tokens, 45 min — YELLOW 11/13 (gaps: update-kit popup + orphans)
- Surgical fix manual: 3 edits (update-kit.ps1 popup-helpers + Show-LintasYesNoPopup + PROJECT_LIFECYCLE orphans) — GREEN 13/13

### Migration
- Tidak ada breaking change. Aman update via `pwsh ./.claude-kit/kit.ps1 update` (Tier 2 AI auto-sync).
- v1.3.x users: existing workflow + popup-helpers + json-merge tetap berfungsi. Plus dapat security hardening + UX polish + language consistency.

---

## v1.3.2 - 2026-06-07

### Changed (UX consistency - RECOMMENDED markers comprehensive audit)
- 7 file di-update untuk add "(RECOMMENDED)" marker konsisten lintas semua interactive popup. Sebelumnya, staff IT non-programmer harus pilih tanpa guidance (decision paralysis). Sekarang setiap popup punya 1 RECOMMENDED option dengan default pre-selected.
- **JALANKAN_KIT.md**: Popup #1 "FULL (RECOMMENDED untuk owner-grade onboarding)" + Popup #2 "GROWING TEAM (RECOMMENDED untuk owner planning 5-15+ staff dalam 6 bulan)" + Popup #3 default proyek setengah jadi RECOMMENDED.
- **AUDIT_POST_SETUP_PROMPT_v1.md**: Tier B (Comprehensive) RECOMMENDED untuk owner planning scale + post-Sprint-0 action Tier B Comprehensive RECOMMENDED.
- **PROJECT_LIFECYCLE_PROMPT_v1.md**: Stage D (Migration project setengah jadi) RECOMMENDED untuk owner dengan code existing.
- **UPDATE_KIT_PROMPT_v1.md**: Lanjut update RECOMMENDED untuk Tier 1/2 (Silent/AI auto-sync).
- **install-windows.ps1**: Skip pivot CLAUDE.md RECOMMENDED kalau existing CLAUDE.md ada (preserve user state).
- **setup-pola-b.ps1**: AGENTS.md popup "Skip (RECOMMENDED)" sudah ada (di v1.3.0/v1.3.1). Tidak berubah.
- **uninstall.ps1**: "Abort uninstall (RECOMMENDED)" untuk destructive confirmation - safety default.

### Filosofi recommendation (locked in untuk future popups)
- **Setup popups**: default = SKIP (preserve existing state, no data loss).
- **Bootstrap popups**: default = COMPREHENSIVE (owner-grade docs untuk staff onboarding scalable).
- **Update popups**: default = LANJUT (Tier 1/2 auto-sync safe).
- **Destructive popups**: default = JANGAN execute (explicit confirm wajib).

### Audit context
- Konteks owner: solo developer sekarang, target hire 5-15+ staff IT non-programmer dalam 6 bulan.
- Staff IT non-programmer = skill Excel menengah, chat AI natural language, takut terminal.
- Goal: kurangi decision paralysis (tanpa RECOMMENDED = staff stuck).

### Migration
- Existing v1.3.1 users: `npx update` otomatis dapat marker updates. Tier 1 silent (no breaking change).

---

## v1.3.1 - 2026-06-07

### Added
- templates/settings.local.json.template (minimal allow rules untuk Claude-Code-mediated install)
- lib/json-merge-helpers.ps1 (Merge-LintasAllowList + Test-LintasAllowListMerged + Get-LintasAllowList + _Collapse-SupersededAllowEntries internal)
- tests/lib-json-merge-helpers.Tests.ps1 (~12 Pester test cases dasar + 10 test untuk collapse / threshold)
- setup-pola-b.ps1 integration: auto-merge settings.local.json post-install (idempotent)
- docs/CLAUDE_CODE_MEDIATED_INSTALL.md (owner SOP + staff zero-PowerShell flow)

### Changed
- Install flow: setelah v1.3.0 popup phase, kit auto-merge allow rules ke .claude/settings.local.json (project-scoped)
- Staff IT non-programmer dapat install lintasAI 100% via Claude Code chat (zero PowerShell exposure)
- Merge-LintasAllowList sekarang menjalankan collapse pass: entry bare (mis. "Bash(git status)") otomatis di-drop kalau varian wildcard ("Bash(git status:*)") juga ada. Mencegah permission-surface bloat lintas update template + erosi principle-of-least-privilege.
- templates/settings.local.json.template: hapus duplikasi "Bash(git status)" - canonical form sekarang HANYA wildcard ":*)" untuk semua subcommand git. Bare form di kit user lama akan ter-auto-migrasi via collapse pass saat npx update.

### Fixed (CRITICAL hotfix - v1.3.0 broken di staff laptop)
- **Parse errors di setup-pola-b.ps1, kit.ps1, update-kit.ps1, uninstall.ps1, popup-helpers.ps1, json-merge-helpers.ps1** (13+ errors total). Root cause: smart Unicode chars (em dash U+2014, curly quotes U+201C/D, ellipsis) di string PS + file tanpa BOM. PS 5.1 baca file tanpa BOM via Windows-1252 codepage; byte UTF-8 0x94 (em dash bagian akhir) di-interpret sebagai curly close quote yang menutup string lebih awal. Cascade error: "Array index expression is missing", "Missing closing '}'", "The string is missing the terminator". Fix: 59 file di-replace smart chars -> ASCII equivalent + save UTF-8 WITH BOM. Verified: `Parser::ParseFile()` 0 errors di semua 25 PS1.
- **Setup early-exit bug (line 513) saat AGENTS.md skip path**. v1.3.0 popup integration menambahkan `exit 0` setelah user pilih [1] Skip (RECOMMENDED default) - mengakibatkan SELURUH post-install flow terlewat: git identity setup, settings.local.json merge, VS Code launch popup, final summary. User yang prefer "preserve AGENTS.md existing" otomatis kehilangan semua fitur v1.3.0/v1.3.1 yang seharusnya jalan. Fix: hapus `exit 0`, wrap `Deploy-AgentsMd` di `elseif ($agentsAction -eq 'skip')` supaya skip tidak deploy template baru tapi flow lanjut ke git identity + settings merge + VS Code launch. Re-test confirmed: skip path sekarang generate `.claude/settings.local.json` (35 rules), detect VS Code, exit 0 dengan ringkasan lengkap.
- **All 45 docs/json/template files** juga di-replace smart chars -> ASCII (consistency, mencegah display issue di tools lain).
- Permission-surface DoS soft-growth: tanpa collapse pass, allow-list user tumbuh monotonic forever karena dedup case-sensitive exact-string. Sekarang collapse pass + soft warning > 200 entry mencegah bloat.
- Silent destruction of custom top-level keys on malformed existing settings.local.json: `_Read-JsonFileSafely` sebelumnya return `$null` diam-diam saat ConvertFrom-Json throw, sehingga `Merge-LintasAllowList` membangun `[pscustomobject]@{}` kosong dan menulis ulang file dengan hanya `{permissions:{allow:[template]}}`. User yang sebelumnya punya `permissions.deny`, `env`, `apiKeyHelper`, atau key custom lain kehilangan semua state itu (backup `.bak.<ts>` ada tapi cuma Write-Warning kuning yang sering tertelan outer catch di setup-pola-b). Fix: helper sekarang THROW pada malformed-with-content (default), `Merge-LintasAllowList` menangkap throw + menyimpan copy mentah ke `<existing>.malformed.bak.<ts>` (nama distinct supaya user notice) lalu re-throw dengan pesan actionable ("perbaiki sintaks JSON atau hapus file ini, lalu rerun setup"). Read-only caller (`Test-LintasAllowListMerged`, `Get-LintasAllowList`) pakai `-SuppressMalformedError` baru supaya tetap return `$false` / empty array - mereka tidak menulis ulang file user.

### Owner Prerequisite (BEFORE Staff Onboarding)
- Owner WAJIB commit basic .claude/settings.local.json ke project repo dengan minimal allow rule "Bash(npx @ojokesusu/lintasai:*)" supaya staff first-install bisa via Claude Code chat. Detail di docs/CLAUDE_CODE_MEDIATED_INSTALL.md.

### Canonical allow-list form (template authors)
- WAJIB pakai wildcard "Tool(prefix:*)" - JANGAN tambahkan bare "Tool(prefix)" pasangannya. Bare form sah HANYA kalau memang tidak ada subcommand variant (mis. "Bash(node -v)").
- Collapse pass otomatis drop bare kalau wildcard pasangannya ada - supaya entry usang dari template lama tidak menumpuk di kit user saat update.
- Soft cap: allow-list > 200 entry akan emit Write-Warning. Bukan hard block (kit tetap merge), tapi sinyal supaya owner review + bersihkan.

### Migration
- Existing v1.3.0 users: npx update otomatis dapat merge logic + collapse pass - no breaking change. Allow-list bare yang punya pasangan wildcard akan ter-rapikan otomatis (backup ber-timestamp tetap dibuat).
- Existing .claude/settings.local.json di project preserved (merge mode, backup ber-timestamp kalau modified).

---

## v1.3.0 - 2026-06-07

### Added
- Windows.Forms native popup untuk install phase (Claude Code-first UX)
- AGENTS.md popup [1] Skip RECOMMENDED sebagai default
- Auto-prompt git user.email + derive name (regex tighten, length 254)
- Headless detection ([Environment]::UserInteractive + SystemInformation)
- Auto-launch VS Code via resolved full path + clipboard starter prompt
- AI Auto-Health-Check section 7.6 di CLAUDE_universal_v1.md
- lib/popup-helpers.ps1 (6 functions: 4 popup + Test-LintasGuiAvailable + Test-LintasHeadless)
- -NoGui flag fallback untuk Server Core / SSH / headless

### Changed
- AGENTS.md popup order: [1] Skip RECOMMENDED jadi DEFAULT (was [2] in v1.2.2)
- VS Code detection covers Program Files, Insiders, portable (was %LOCALAPPDATA% only)
- Start-Process pakai array-form ArgumentList (handles path with spaces/Unicode)

### Migration
- Existing v1.2.x: npx update otomatis pakai new popup mode
- AGENTS.md existing preserved by default (Skip option)

---

## v1.2.2 [2026-06-06]

### Fixed (Final Distribution Readiness)

#### Uninstall via NPX (Final Fix)
- uninstall.ps1: when -ProjectRoot supplied, redirect $KitDir to <ProjectRoot>/.claude-kit before kitFolderName validation
- Previously failed at line 109 because $PSScriptRoot pointed to npm cache "lintasAI" folder, not ".claude-kit"
- NOW: full npx uninstall lifecycle works (init -> uninstall both exit 0)

#### Setup-pola-b DryRun + ProjectRoot Interaction
- setup-pola-b.ps1: guard $KitDir pivot to only happen when NOT -DryRun
- Path normalization via [System.IO.Path]::GetFullPath() untuk handle Windows 8.3 short-name (ADMINI~1) vs long-name (Administrator) edge case
- Prevents infinite-recurse "docs\\docs\\docs\\..." when paths drift due to short-name expansion

### Added (Documentation)

#### Audit History Preservation
- New `docs/AUDIT_HISTORY.md`: comprehensive log dari 132-agent audit 2026-06-06
  - Findings + remediation + deferred items + roadmap + rollout plan
  - Lessons learned (verify pattern flaw, stalled agent detection, Windows 8.3 pitfall)
- README.md: small "Quality & Audit" section + link
- AGENTS.md (kit repo root): hint untuk AI sesi baru baca AUDIT_HISTORY.md untuk continuity

### Notes
Distribution Verdict: YELLOW (1 edge case may persist, see docs/AUDIT_HISTORY.md)

Deferred to v1.3.0:
- 4 SEC advisory items (HMAC salt, GPG verify staging, AllowProjectRootMismatch confirm, AI Reviewer lockfile)
- 3 dead variable cleanup
- 5 deprecated stub removal (update cross-refs first)

---

## v1.2.1 [2026-06-06]

### Fixed (Critical Follow-up to v1.2.0)

#### Uninstall Command via NPX
- `npx lintasai uninstall` previously failed karena uninstall.ps1 ignore -ProjectRoot param dan resolve via manifest project_root override
- Fix: When -ProjectRoot explicitly supplied via $PSBoundParameters, honor it as ground truth (npx mode)
- Manifest mismatch detection only runs ketika -ProjectRoot NOT supplied + -AllowProjectRootMismatch not set

#### Diff Command
- `npx lintasai diff` previously failed (bug di new Invoke-Diff function)
- Fix: Rewrite to use Get-FileHash + manifest comparison cleanly with proper $ProjectRoot scoping

#### Pester Tests Alignment
- 3 failing tests di setup-pola-b.Tests.ps1 adjusted untuk match actual script behavior

#### Code Quality
- L1-RUN-004: null comparison style ($null -ne $x) consistency across all .ps1 files

### Notes
- ALL 7 commands sekarang exit 0 (verified): init, version, doctor, status, diff, update, uninstall
- Pester 100% pass
- Distribution Verdict: GREEN

---

## v1.2.0 [2026-06-06]

### Fixed (Critical)

#### NPX Wrapper Bugs (v1.1.3 regression discovered via audit)
- **L1-RUN-001**: `npx lintasai uninstall` hard-fail karena wrapper kirim `-ProjectRoot` ke uninstall.ps1 yang tidak support param
  - Fix: uninstall.ps1 sekarang accept `[string]$ProjectRoot` param + resolve via fallback chain
- **L1-RUN-002**: `npx lintasai update` hard-fail sama issue
  - Fix: update-kit.ps1 accept `-ProjectRoot` param
- **L1-RUN-003**: `npx lintasai doctor/version/rollback` inspect kit di npm cache (silent false diagnostic)
  - Fix: kit.ps1 accept `-ProjectRoot`, inspect `.claude-kit/` di user CWD bukan $PSScriptRoot
  - Fix: bin/lintasai.js pass `-ProjectRoot` ke kit.ps1 subcommands juga

#### Code Quality
- **L1-RUN-004**: null comparison style consistency `$null -ne $x` (PSScriptAnalyzer warning eliminated)

### Added (New Features)

#### CLI Commands
- **`lintasai status`**: 1-layar overview kit health (version, install mode, AGENTS.md, manifest signed, last update, tier setup)
- **`lintasai diff`**: show files yang berubah sejak install (modified/missing/extra) untuk debugging Tier C delegate

#### Tests (Regression Coverage)
- `tests/npx-init.Tests.ps1`: regression test untuk v1.1.3 fix (tarball content + ProjectRoot param + npx-mode copy)
- `tests/package-bundle.Tests.ps1`: assert npm pack mengandung semua file deployment-needed
- `tests/setup-pola-b.Tests.ps1`: cover 4 invocation branches (traditional, ProjectRoot valid, ProjectRoot invalid, npx-mode)

#### Documentation
- `docs/NPX_INSTALL.md`: troubleshooting Bahasa Indonesia untuk staff IT non-programmer
  (node version, EACCES/EPERM, ExecutionPolicy, proxy, kit verification, rollback, uninstall, update, status, diff, support contact)

### Removed
- `FIRST_SESSION_PROMPT_v1.md` (deprecated stub, no active consumers verified)

### Notes
Ready untuk mass distribution ke 20-30 staff IT. Audit verdict upgraded YELLOW -> GREEN.

Deferred to v1.2.1 (lower priority):
- Remove 5 more deprecated stubs (need cross-ref update first)
- Security advisory items (HMAC salt, staging dir verify, etc.)
- Refactor dead variables ($signatureValid, $libSafety, $shouldPreserve)

---

## v1.1.3 [2026-06-06]

### Fixed

#### NPX Invocation Bugs (Distribution Blocker)
- **Bug 1**: AGENTS.md.template tidak ter-bundle ke npm tarball - fix di package.json files array (added "*.template", "AGENTS.md.template", "decisions/", "LICENSE")
- **Bug 2**: bin/lintasai.js tidak pass user CWD ke setup-pola-b.ps1, sehingga script salah deteksi "Root proyek" sebagai npm cache folder bukan user folder
  - Fix: bin/lintasai.js sekarang pass `-ProjectRoot $process.cwd()` untuk command init/update/uninstall
  - Fix: setup-pola-b.ps1 sekarang accept `-ProjectRoot` parameter
  - Fix: setup-pola-b.ps1 detect "npx mode" (kit source di npm cache vs project) lalu COPY kit ke $ProjectRoot/.claude-kit/

### Migration
Staff yang baru install via `npx @ojokesusu/lintasai init` sekarang akan dapat behavior yang benar:
- Kit copy dari npm cache ke <user-project>/.claude-kit/
- "Root proyek" = folder user CWD
- "Nama proyek" = nama folder user
- AGENTS.md.template ada di tarball, deploy berhasil

---

## v1.1.2 [2026-06-06]

### Changed

#### Drop --provenance flag (private repo compatibility)
- publish-npm.yml: remove `--provenance` flag dari npm publish command
- Reason: npm provenance signing requires PUBLIC GitHub source repo (npm policy). lintasAI repo is private by design (internal tool untuk staff IT).
- Trade-off: package npm tidak punya signed provenance badge
- Defense in depth tetap valid via: NPM 2FA, granular token scope @ojokesusu, token rotation 365 hari

#### Permissions cleanup
- Remove `id-token: write` permission (no longer needed tanpa provenance)
- Workflow runs with minimum required permissions (principle of least privilege)

### Notes
- Kit content tetap distribusi via public npm package (`@ojokesusu/lintasai`)
- GitHub repo tetap private (internal access only)
- Bisa balik ke provenance nanti kalau repo dijadikan public

---

## v1.1.1 [2026-06-06]

### Fixed

#### Publish Workflow Compatibility
- publish-npm.yml: "Verify version" step sekarang handle BOTH tag push (auto-trigger on `v*` push) DAN workflow_dispatch (manual "Run workflow" UI button)
- Previously: workflow_dispatch fail dengan "Tag version (refs/heads/main) does not match package.json"
- Sekarang: kalau bukan tag trigger, skip version match check + publish package.json version langsung

### Notes
- Pertama kali publish ke npm: gunakan tag push (`git tag v1.1.1 && git push --tags`)
- Manual re-publish via "Run workflow" UI sekarang aman

---

## v1.1.0 [2026-06-06]

### Added (Major Features)

#### NPM Publish Wrapper (Single-Command Bootstrap)
- New: package.json + bin/lintasai.js Node.js launcher
- Staff IT non-programmer (20-30 orang) sekarang bisa `npx @ojokesusu/lintasai init` (1 command, no git clone)
- Auto-publish to npm registry on tag push via .github/workflows/publish-npm.yml (with provenance)
- Commands supported: init, update, doctor, version, rollback, uninstall
- Windows-only enforcement (cross-platform planned v2.0+)

#### Architecture Refactor (Modularization)
- setup-pola-b.ps1: 841 LOC -> orchestrator (~250 LOC) via dot-sourcing
- Extracted 5 new lib modules:
  - lib/manifest.ps1: Manifest write/sign/verify
  - lib/template-deploy.ps1: Template copy with placeholder substitution
  - lib/git-helpers.ps1: .git/ cleanup + MOTW unblock
  - lib/agents-md.ps1: AGENTS.md fill template
  - lib/version-detect.ps1: Kit version detection (supports both CHANGELOG formats)
- Maintainability: future changes to manifest/template logic now isolated to lib modules
- Backward compatible: all 27 Pester tests still pass

#### PSScriptAnalyzer CI Integration
- New job pssa-lint di .github/workflows/validate.yml
- Catches issues AI-generated code might miss (unused vars, naming convention, security warnings)
- Excludes PSAvoidUsingWriteHost + PSUseShouldProcessForStateChangingFunctions (false positives untuk CLI scripts)

### Changed
- README.md: NPM install method sekarang PRIMARY (Cara 1), git clone Cara 2 (advanced)
- setup-pola-b.ps1: Restructured to orchestrator pattern

### Tests
- All 27 Pester tests pass
- Lib module isolation tested
- Smoke test (setup + doctor + version) pass

### Migration Notes
- Existing kit users (v1.0.x): no action required, refactor is internal
- New install: prefer `npx @ojokesusu/lintasai init` over git clone
- Owner setup needed for npm publish: GitHub Settings -> Secrets -> NPM_TOKEN (Automation token from npmjs.com)

---

## v1.0.1 [2026-06-06] - Post-Audit Fixes + Test Expansion

### Fixed (CRITICAL from adversarial audit)
- GPG verify-tag: was verifying branch name (broken), now properly resolves tag exact dari HEAD + verify-tag tag name. Fail-closed (throw) kalau verify fail, kecuali -AllowUnsignedTag explicit.
- HMAC manifest signing: drop machine UUID binding (was not actually secret + broke cross-machine portability). Now kit-version constant key + LINTASAI_MANIFEST_SECRET env var override.
- Decoupled -Force flag: -AllowModified (uninstall), -AllowUnsignedTag (update-kit GPG), -AllowUntrustedRepo (update-kit URL). -Force still works dengan deprecation warning.
- ANALOGI_LIBRARY.md restored from deprecated state (5+ files actively reference, non-programmer team needs jargon library)

### Added (test coverage)
- tests/uninstall.Tests.ps1 (3 Describe blocks)
- tests/update-kit.Tests.ps1 (3 Describe blocks)
- tests/rollback.Tests.ps1 (2 Describe blocks)

### Added (UX non-programmer)
- MULAI_DI_SINI.md: 1-page bahasa awam onboarding
- templates/GLOSSARY_NON_PROGRAMMER.md: expand dengan destructive ops, force-push, rm -rf, DROP, schema, API, endpoint
- JALANKAN_KIT.md: disclaimer "INI BUAT AI BACA, BUKAN KAMU" di top

### Changed (consistency)
- SPLIT_REPO_MIGRATION_PROMPT_v1.md: Tier A/B/C → Frontend/Backend (15+ occurrences)
- JALANKAN_KIT.md + 6 other files: deprecated file refs (BOOTSTRAP/MIGRATION/KICKOFF/UPDATE_DOCS prompts) → PROJECT_LIFECYCLE_PROMPT_v1.md (Stage A/B/C/D)
- lib/kit-files.psd1: complete (30 missing files added - deprecated stubs, team templates, decisions, github assets)

### Versioning Policy (NEW)
- Stop force-pushing v1.0.0. Future: v1.0.x untuk fix, v1.x.0 untuk fitur, vX.0.0 untuk breaking.

---

## [1.0.0] - 2026-06-03

First public release lintasAI kit - standar kerja AI-first untuk tim IT non-programmer Indonesia.

### Ditambahkan

- **Pola A** (global install via `~/.claude/`) + **Pola B** (embed kit di proyek via `.claude-kit/`) untuk version-locked per project.
- **17 file tim profesional auto-deploy** saat setup-pola-b.ps1 jalan:
  - `.github/`: workflows/ai-review.yml + workflows/backup-schemas.yml + scripts/ai-review.js + CODEOWNERS + pull_request_template.md
  - `docs/`: CLAUDE_TEAM_GUIDE.md + PROMPT_LIBRARY.md + ONBOARDING.md + STACK_GUIDE.md + MCP_SETUP.md + RLS_SETUP_PROMPT.md + DB_SCHEMA_SCAN_PROMPT.md + GLOSSARY_NON_PROGRAMMER.md + SECURITY_INCIDENT_PLAYBOOK.md + feature-flags-advanced.md
  - `docs/decisions/`: _TEMPLATE.md + README.md
- **Single-paste workflow** `JALANKAN_KIT.md` (20-step) untuk sesi Claude pertama: scan → auto-decide grouping → bulk-bootstrap docs dengan 4 opsi (Generate ALL default / Pilih kategori / Skeleton-first / DB schema only).
- **`CLAUDE_universal_v1.md` aturan kerja universal** (auto-load tiap sesi AI) dengan section:
  - 4.1 Tinjauan Multi-Divisi (12 divisi review)
  - 4.2 Pattern-Driven Workflow (AI auto-apply PROMPT_LIBRARY pattern dari natural language staff)
  - 4.3 Guided Step-by-Step Pattern untuk Staff Baru (6-phase universal first-time workflow)
  - 7.1-7.4 Aturan dokumentasi tim profesional
- **15 prompt pattern siap-pakai** di `PROMPT_LIBRARY.md` (Prompts 1-10 generic + 11-15 chat-driven workflow + activate feature flag).
- **Multi-Schema Strategy** di `MCP_SETUP.md`: Option A (shared schema restricted) + Option B (per-staff isolated full CREATE) + Option C (hybrid sandbox + read prod) + 3-layer backup plan.
- **Workflow rollback playbook** (`CLAUDE_TEAM_GUIDE.md` section 13b): git revert via Claude <5 menit dengan post-mortem template + fire drill quarterly.
- **Security Incident Playbook** (`docs/SECURITY_INCIDENT_PLAYBOOK.md`) untuk staff IT non-programmer: 6-step STOP-DM-WAIT procedure + decision matrix per tipe token + 5 yang TIDAK BOLEH dilakukan + quick checklist printable.
- **AI Reviewer di GitHub Actions** (`templates/github/scripts/ai-review.js`) dengan secret leak detection 9 pattern (sk-ant-/eyJ/xoxb/ghp_/glpat/AKIA/service_role/postgres://password@/`.env*` files).
- **Backup automation** (`templates/github/workflows/backup-schemas.yml`) - daily pg_dump per-schema ke Supabase Storage, retention 30 hari, Slack webhook alert.
- **Glossary untuk Non-Programmer** (`docs/GLOSSARY_NON_PROGRAMMER.md`) 300+ entry dengan analogi Indonesia-context (Google Drive, Word, Notion, Canva, Discord, Tokopedia, IFTTT, Zapier, Spotify, Gojek).
- **Risk Level Decision Tree** (Low/Medium/High klasifikasi task) - pengganti feature flag default untuk early-stage project.
- **Feature flag advanced** (`templates/feature-flags-advanced.md`) - POST-LAUNCH activation via Prompt 15 saat project ready (env var Vercel `NEXT_PUBLIC_FF_<AREA>_<NAMA>` + decision tree 5 kriteria risiko tinggi + cleanup ritual + per-user hash canary).
- **`kit.ps1` single entry point**: setup / update / uninstall / doctor / scan / version / help subcommand.
- **`update-kit.ps1` atomic re-clone** dengan backup + auto-rollback kalau git clone gagal (CRITICAL FIX di v1.0.0 untuk PowerShell 5.1 stderr handling).
- **`setup-pola-b.ps1`** auto-detect Pola B nested extract + Mark-of-the-Web unblock + secure password sharing reminder + **tulis `.install-manifest.json`** (sha256 hash per file kit-template) untuk safe uninstall. **NonInteractive shell hardening**: SEMUA Read-Host (CLAUDE.md detection / auto-flatten nested extract / AGENTS.md backup confirm) di-wrap try/catch dengan default-safe fallback ([2] biarkan / 'N' abort) supaya setup tidak crash di Claude Code / VSCode tab Output / CI / `powershell -NonInteractive`. Sama untuk `install-windows.ps1` Read-Host overwrite confirm.
- **`uninstall.ps1` safe diff-based delete** - baca `.install-manifest.json`, classify file dengan 7 kategori: PRISTINE (auto-delete), MODIFIED (skip default, `-Force` = backup + hapus), SYMLINK (skip selalu - junction/symlink tidak diikuti, cegah leak isi file di luar project ke .bak), BLOCKED (path escape ke luar project root, REJECT - proteksi path traversal kalau manifest di-tamper), LOCKED (hash gagal - file di-buka editor/AV, skip + hint), MISSING (skip silent), BACKUP (preserved dari setup `-Force` re-run sebelumnya). Direktori cuma dihapus kalau EMPTY setelah file kit dibersihkan → project file kamu di `docs/` & `.github/` AMAN. **Path traversal protection**: manifest entries dengan `..\\` segments / absolute path / drive-letter prefix DITOLAK; canonical path harus StartsWith($ProjectRoot). **Reparse-point check**: leaf + tiap parent segment diperiksa, junction/symlink dimanapun di path = SKIP. **TOCTOU close**: re-hash file tepat sebelum delete, skip kalau berubah sejak plan. **project_root hard-fail**: kalau manifest tidak match lokasi sekarang → abort (override via `-AllowProjectRootMismatch`). **schema_version validation**: reject unknown schema. Default skip `AGENTS.md` (heavy customization, pakai `-DeleteAgents` override). Pakai `-Yes` untuk CI auto-confirm, `-KeepKit` suppress instruksi self-delete. Mencegah insiden seperti `rm -rf docs/` yang ikut hapus file proyek asli.
- **Manifest anonymized** - `project_root='<PROJECT_ROOT>'` + `installed_by='<USER>'` di JSON (tidak leak Windows username / absolute home path saat manifest committed ke git).
- **`.claude-kit/.gitignore` auto-generated** saat setup - ignore `.install-manifest.json` + `*.bak` + `*.env*` + `*.pem` + `*.key` (defense-in-depth supaya environment metadata + secret tidak ke-commit walaupun user run `git add .claude-kit/`).
- **Audit Post-Setup Pattern** (`AUDIT_POST_SETUP_PROMPT_v1.md` + `CLAUDE_universal_v1.md` section 4.4 + `PROMPT_LIBRARY.md` Prompt 16 + `JALANKAN_KIT.md` step 21) - workflow read-only komprehensif yang otomatis ditawarkan setelah `JALANKAN_KIT.md` (Popup #4 default "y"). Scan 8 dimensi paralel via Workflow tool (refactor / security / qa-test / database / devops / performance / docs-gap / onboarding) → adversarial verify per finding (cegah halusinasi, default `is_real=false`) → synthesize ranked 3 tier (low → high `risk_of_introducing_bug`) → **TIAP finding WAJIB punya 3-LAYER ANALOGI NON-PROGRAMMER**: (1) 🏢 sehari-hari (kantor/lemari arsip/loket bank), (2) 📱 tools digital populer Indonesia-context (Tokopedia, Gojek, WhatsApp, BCA mobile, Excel, Google Drive, Notion, Discord, dll.), (3) 🎯 contoh konkret kapan situasi muncul di proyek. Library lengkap 30 jargon di `docs/ANALOGI_LIBRARY.md` (auto-deployed oleh setup-pola-b.ps1). Contoh: N+1 query = "Tokopedia checkout 20 barang satu-satu vs masukin keranjang", missing rate-limit = "BCA mobile pencet kirim OTP unlimited → spam SMS korban", race condition = "Shopee flash sale 2 orang klik Beli detik sama", IDOR = "Tokopedia ganti `invoice=12345`→`12346` muncul invoice orang lain", God Component = "Excel 1 workbook isi stok+gaji+absensi+pivot semua tumpuk", memory leak = "WhatsApp chat masuk foto/video gak dihapus storage penuh", TOCTOU = "Shopee lihat stok 3 → checkout muncul habis", HOLD MERGE = "BCA mobile transfer di atas limit → tunggu OTP", dst. Sprint execution plan: Sprint 0 URGENCY (~30 menit stop-bleeding) → Sprint 1 quick wins (~6-8 jam zero behavior change) → Sprint 2 test foundation (~30-40 jam) → Sprint 3 medium refactor (~1-2 minggu) → Sprint 4+ HIGH RISK (HOLD MERGE, paired review, 1-2 minggu per finding). Status READONLY default; Popup #1 pilih tier 1/2/3/4 (4=semua default); Popup #2 pilih lanjutan (execute Sprint 0 / write report ke `docs/decisions/` / pick item / stop). Pattern-Driven mapping intent staff non-programmer: "audit project" / "ada bug?" / "lemot" / "ready hire staff?" / "refactor messy" auto-route ke fokus dimensi yang relevan. Mencegah refactor reckless tanpa context - semua finding ranked + verified + dengan analogi yang bisa dibaca staff IT non-programmer Day 0 (yang familiar dengan Tokopedia/Gojek/WhatsApp/Excel langsung paham tanpa background dev).
- **Update Strategy Pattern - 4-Tier Auto-Classify** (`UPDATE_KIT_PROMPT_v1.md` + `docs/UPDATE_GUIDE.md` + `CLAUDE_universal_v1.md` section 4.5 + `PROMPT_LIBRARY.md` Prompt 17 + `update-kit.ps1` enhancement). Filosofi: **AI yang lakukan update analysis + execution, staff cuma chat natural + confirm**. Staff IT non-programmer TIDAK perlu baca CHANGELOG 200 baris dan klasifikasi sendiri "ini breaking apa bukan" - itu tugas AI. **4-Tier classification** dengan analogi tools digital populer: Tier 1 silent (tanpa label, fix typo/perbaikan ringan = kayak **WhatsApp 2.23.10 → 2.23.11 auto-update background**), Tier 2 AI auto-sync (tanpa label, aturan/fitur baru = kayak **iPhone iOS 17.3 → 17.4 minor, fitur baru aktif setelah restart**), Tier 3 `[BREAKING]` (struktur/format ganti = kayak **iPhone iOS 16 → iOS 17 major, migration screen wajib**), Tier 4 `[SCAN-REQUIRED]` (bulk-bootstrap logic ganti = kayak **Tokopedia Seller ganti algoritma kategori, re-mapping produk wajib**). **Dual-mode update**: Chat-based ("lintasAI v1.2.0 rilis, update" → AI parse CHANGELOG → classify tier → compose summary → confirm → execute) untuk staff non-programmer; PS Script (`kit.ps1 update`) untuk power user / CI. **update-kit.ps1 enhancement**: 4 fungsi baru - `Get-LatestChangelogEntry` (parse versi terbaru), `Classify-UpdateTier` (regex `[BREAKING]`/`[SCAN-REQUIRED]` + keyword matching), `Format-UpdateSummary` (compose ringkasan dengan analogi tools digital), `Invoke-BackupCleanup` (auto-hapus `.bak` > 30 hari + keep max 3 latest per file). **Backup retention**: NO folder `migrations/` per breaking change (over-engineering); INSTEAD tiap `[BREAKING]` CHANGELOG entry punya inline section "Migration Steps" dengan PS commands. Backup files auto-cleanup di akhir tiap `kit.ps1 update`. AI auto-trigger update analysis kalau intent staff: "ada versi baru?" / "update kit" / "lintasAI vX.Y rilis" / "kit ku ketinggalan" / "cek update". **Mencegah** staff stress baca technical CHANGELOG + decide tier sendiri - semua otomatis dengan analogi yang familiar (WhatsApp/iPhone/Tokopedia/Google Drive/Excel).
- **Pre-launch audit comprehensive** (76-agent workflow + adversarial verify + simulate fresh clone) - confirmed 37 bug + 4 blocker fix sebelum v1.0.0 launch.

### Catatan

- Mode: **first public release**. Akan dipakai untuk uji-coba pertama oleh tim IT non-programmer.
- Future iteration v1.0.1+: simplification opportunities (reduce README, merge ONBOARDING overlap dgn TEAM_GUIDE, fix MCP_SETUP section numbering, split STACK_GUIDE migration sections ke file terpisah, extract CLAUDE_universal section 4.1+4.3 examples ke reference files).
- Kalau ada bug di field: lapor via channel chat tim, fix akan masuk v1.0.1.

---

## Pre-Release Development (Internal Iteration)

> **Note:** All `v1.0.0 [REPUBLISH ...]` entries di bawah ini adalah pre-release iteration sebelum first public release. Versi tag `v1.0.0` di-force-push berulang kali selama development internal - TIDAK ada perubahan versi semver semantic. Entries dipertahankan untuk historical context + audit trail. Per `Versioning Policy` di v1.0.1: force-push v1.0.0 dihentikan, future fix pakai v1.0.x, fitur v1.x.0, breaking vX.0.0.

### v1.0.0 [REPUBLISH 2026-06-06] - Real-Time Cross-Repo Trigger

#### Added (cross-repo real-time)
- **templates/github/TRIGGER_FRONTEND_UPDATE.yml** - Backend side: append step ke publish workflow untuk fire `repository_dispatch` event ke frontend repo. Memungkinkan frontend auto-pickup update shared package tanpa nunggu Renovate scheduled run.
- **templates/github/RECEIVE_BACKEND_UPDATE.yml** - Frontend side: listen `repository_dispatch` event + `npm install` + create PR auto. Latency 3-5 menit (vs Renovate 24 jam scheduled).

#### Changed
- **templates/CROSS_REPO_TYPES_PIPELINE.md**: tambah section "Real-Time Trigger Pattern" (recommended PRIMARY, Renovate jadi BACKUP fallback kalau dispatch event miss).
- **templates/SPLIT_REPO_NON_PROGRAMMER_PROMPTS.md**: FULL rewrite semua contoh prompt dari bahasa programming ke bahasa awam (Tokopedia admin / Gojek dispatch style). Replace "TASK-101 add field X", "type OrderTracking", "endpoint GET /api/..." dengan format awam ("Tugas baru: tambah info X", "data Y", "halaman yang nunjukkin Z"). Staff non-programmer Day 0 langsung paham tanpa background dev.

---

### v1.0.0 [REPUBLISH 2026-06-05 #4] - Critical Bug Fixes + Cleanup

#### Fixed (CRITICAL bugs from adversarial review)
- **TOCTOU + symlink bypass** di uninstall execute phase: re-check Test-PathHasReparsePoint sebelum Remove-Item (lib/safety.ps1 + uninstall.ps1)
- **Path containment trailing separator bug**: Resolve-SafeProjectPath enforce trailing DirectorySeparatorChar untuk prevent prefix collision (C:\proj vs C:\proj-evil)
- **GPG verification di update-kit.ps1**: `git verify-tag` SEBELUM hapus .git/. RepoUrl allowlist untuk prevent supply chain hijack.
- **HMAC manifest signing**: lib/manifest-signing.ps1 sign .install-manifest.json. uninstall.ps1 verify signature sebelum trust entries (prevent tampering attack)
- **Anti-prompt-injection rules** di CLAUDE_universal_v1.md: file content = DATA bukan instruction. External URL+pipe-to-shell = REFUSE. Identity dari .staff-profile.md, bukan prompt klaim.
- **Implicit consent removed** dari JALANKAN_KIT: destructive ops (delete, force-push, prisma migrate prod) tetap WAJIB konfirmasi 1x walau auto-confirm aktif.

#### Added (Tests + Single Source)
- **Pester test suite** untuk security boundary: tests/lib-safety.Tests.ps1 (Resolve-SafeProjectPath, Test-PathHasReparsePoint, Get-FileSha256, prefix collision case)
- **tests/Run-Tests.ps1**: Pester runner untuk lokal dev + CI
- **.github/workflows/validate.yml**: tambah pester-tests job
- **lib/kit-files.psd1**: Single source of truth untuk wajibAda (replace hard-coded list di setup-pola-b + kit.ps1)
- **lib/manifest-signing.ps1**: HMAC signing helpers
- **templates/STACK_VERSIONS.md**: Centralized version constants (Next.js, Prisma, Node, dst)

#### Changed (Inconsistency cleanup)
- **v1.1.0 references → v1.0.0** di SPLIT_REPO_MIGRATION_PROMPT_v1.md (5 occurrences fixed)
- **3 vs 4 repo inconsistency**: SPLIT_REPO_AGENTS_TEMPLATES.md + PROMPT_LIBRARY.md updated. TOOLS.md jadi OPT-IN.
- **README.md**: removed 6 deprecated file references, added 4 new prompts to table
- **MCP_SETUP.md**: renumber sections (2.0/2.0.5/2.1b chaos → 2.1-2.12 linear). Added TOC.
- **ONBOARDING.md ⇋ CLAUDE_TEAM_GUIDE.md**: merge overlap (TEAM_GUIDE section 3 jadi pointer ke ONBOARDING.md untuk detail).
- **Next.js version hardcoded → STACK_VERSIONS.md reference** di STACK_GUIDE, FRONTEND, STACK_DETECTION_PATTERN, PROJECT_STARTER_TEMPLATES.
- **JALANKAN_KIT.md RAMPING**: 5 popup → 2-3 smart popup dengan auto-decide.

#### Kept (Per User Feedback)
- MCP_SETUP.md schema isolation per-staff (user butuh untuk multi-staff)
- AI Reviewer GitHub Action (works for both solo + team)
- 17 file team auto-copy (works for both solo + team)
- Multi-Divisi 12-lens (existing)
- Split Repo Migration capability + Auto-Push 3 Repo flow
- Discord-only webhook
- Project Starter Templates catalog

#### Migration Notes
Force-push v1.0.0 (no version bump per user preference). User belum distribusi.
Setelah update, re-clone fresh: `git clone --depth 1 -b v1.0.0 https://github.com/ojokesusu/lintasAI.git .claude-kit`

---

### v1.0.0 [REPUBLISH 2026-06-05] - Split Repo Migration + 20 Tools

#### Added (4 new files)

- **templates/CROSS_REPO_TYPES_PIPELINE.md** - Full automation guide: backend auto-publish @<project>/shared + frontend Renovate auto-PR + Discord notif. End-to-end workflow Day 1 backend → Day 2 frontend auto-coordinate.
- **templates/github/RENOVATE_FRONTEND.json** - Renovate config template untuk frontend repo (auto-PR @<project>/shared updates).
- **templates/github/PUBLISH_SHARED_WORKFLOW.yml** - GitHub Actions template: backend push → generate types → bump version → publish ke GitHub Packages → Discord notif.
- **templates/github/GENERATE_TYPES_SCRIPT.md** - Setup tsup + Prisma generate untuk auto types pipeline.

- **SPLIT_REPO_MIGRATION_PROMPT_v1.md** (root) - Single-paste prompt untuk owner migrate monolith ke 3 repo split (default; 4 repo opt-in untuk team >20 staff atau compliance audit). AI analyze project + propose plan + execute auto-push step-by-step. Effort ~1.5 jam dengan auto-push flow (was 4-6 minggu manual).

- **templates/SPLIT_REPO_AGENTS_TEMPLATES.md** - 4 AGENTS.md template (frontend, backend, shared, tools). AI customize dengan project name.

- **templates/SPLIT_REPO_NON_PROGRAMMER_PROMPTS.md** - Cheatsheet prompt staff non-programmer dengan analogi tools digital (Tokopedia, Gojek, WhatsApp, Discord).

- **templates/SPLIT_REPO_TOOLS_SETUP.md** - Setup guide 18+ tools (Swagger, Storybook, Playwright, Discord webhook, Sentry, dst). Tier 1/2/3 priority.

- **templates/DISCORD_BOT_INTEGRATION.md** - Discord server structure + webhook setup + bot custom guide

- **templates/STACK_DETECTION_PATTERN.md** - Pattern untuk AI auto-detect stack saat user pertama kali pakai lintasAI

- **templates/PROJECT_STARTER_TEMPLATES.md** - Catalog 4 starter templates + how-to (default: project setengah jadi SKIP starter)

- **templates/split-agents/FRONTEND.md, BACKEND.md, SHARED.md, TOOLS.md** - 4 AGENTS.md template (was 1 mega-file, sekarang split)

#### Changed

- setup-pola-b.ps1: wajibAda tambah 4 file split repo
- kit.ps1: doctor wajibAda update
- templates/split-agents/FRONTEND.md: tambah section "Session Start Auto-Check" (versi compare + Swagger fetch + Discord context).
- templates/split-agents/BACKEND.md: tambah section "Auto-Publish @<project>/shared (Trigger Rule)" - WAJIB update shared sebelum commit.
- templates/PROMPT_LIBRARY.md: tambah Prompt 18-20 (split repo migration, AGENTS.md deploy, non-programmer cheatsheet)
- JALANKAN_KIT.md: tambah Popup #5 auto-offer split repo migration ke first-time user
- Discord-only webhook (user feedback): remove generic Slack/Telegram references
- Removed: TypeScript strict + AI error explainer section (already covered di docs/ generated JALANKAN_KIT.md)
- templates/SPLIT_REPO_AGENTS_TEMPLATES.md jadi index stub (point ke split-agents/ subfolder)
- templates/SPLIT_REPO_TOOLS_SETUP.md: Playwright + DevContainer elevate dari Bonus ke Tier 2 (non-programmer recommended)
- **3 repo default (was 4)**: akses-tools merged dalam backend/scripts/ dengan CODEOWNERS owner-only. Skip terpisah repo kecuali team grow >20 staff atau compliance audit.
- **Option B (Frontend Shell Wrapper) default top recommendation**: API route shell 3-baris forward ke backend. Privacy preserved (logic di compiled package @<project>/backend-client). Keep Next.js Server Action velocity.
- **Auto-Push 3 Repo Flow**: Owner pre-buat 3 repo empty di GitHub, paste URLs ke AI, AI handle file mapping + git init + commit + push ke 3 repo. Total effort ~1.5 jam.

#### Why v1.0.0 republish (bukan v1.1.0)?

User belum distribusi lintasAI ke siapapun. Tidak ada existing user yang perlu version bump. Force-push v1.0.0 lebih clean.

Catatan: setelah ada user external, baru pakai semantic versioning strict (v1.0.x patch, v1.x.0 minor, vX.0.0 major).

---

### v1.0.0 [REPUBLISH 2026-06-04] - Hardening

#### Added
- `kit.ps1 rollback` subcommand (auto-restore from .bak via lib/rollback.ps1) [BREAKING-safety-net]
- `kit.ps1 version` subcommand (print currently-installed kit version)
- `kit.ps1 doctor` integrity verification (sha256 diff vs manifest baseline, 3-bucket: PRISTINE/MODIFIED/MISSING)
- `update-kit.ps1` pre-clone version check (no-op if already on latest tag, saves bandwidth & time)
- `lib/rollback.ps1` (new module, exports Invoke-Rollback + Get-RollbackPreview)
- `lib/safety.ps1` (extracted from uninstall.ps1: Resolve-SafeProjectPath, Test-PathHasReparsePoint, Get-FileSha256, Read-Manifest, dst)
- `.github/workflows/validate.yml` (CI: ps-parse + smoke-setup + yaml-lint on push/PR)
- `docs/SIGNED_RELEASE.md` (GPG verification workflow untuk owner + staff; auto-deployed)
- `PROJECT_LIFECYCLE_PROMPT_v1.md` (merge of 4 stage prompts: kickoff/bootstrap-docs/update-docs/migration)

#### Changed
- Entry-point prompts: 9 -> 4 (5 deprecated jadi stub, preserve git history)
- Multi-divisi 12-lens review: sekarang auto-detect (skip untuk simple Q&A; full untuk refactor besar / arsitektur / security)
- ANALOGI 30-jargon library: deprecated, AI generate on-demand per CLAUDE rule (5 grounding samples inline)
- `uninstall.ps1`: refactor extract safety helpers ke lib/safety.ps1 (DRY, reusable dari rollback module)

#### Deprecated
- `FIRST_SESSION_PROMPT_v1.md` -> use JALANKAN_KIT.md
- `SETUP_POLA_B_PROMPT_v1.md` -> use JALANKAN_KIT.md
- `BOOTSTRAP_PROJECT_DOCS_PROMPT_v1.md` -> Stage B in PROJECT_LIFECYCLE_PROMPT_v1.md
- `PROJECT_KICKOFF_PROMPT_v1.md` -> Stage A in PROJECT_LIFECYCLE_PROMPT_v1.md
- `PROJECT_MIGRATION_PROMPT_v1.md` -> Stage D in PROJECT_LIFECYCLE_PROMPT_v1.md
- `UPDATE_DOCS_PROMPT_v1.md` -> Stage C in PROJECT_LIFECYCLE_PROMPT_v1.md
- `templates/ANALOGI_LIBRARY.md` -> AI on-demand

#### Migration steps (staff IT) [SCAN-REQUIRED untuk staff yang sudah install < v1.0.0-2026-06-04]
1. Cek versi current: `.claude-kit\kit.ps1 version`
2. Update: `.claude-kit\kit.ps1 update` (auto-classify Tier 3)
3. AI baca CHANGELOG, eksekusi migration: stub files lama akan otomatis ter-replace
4. Verify: `.claude-kit\kit.ps1 doctor` -> harus output PRISTINE: <count>, MISSING: 0
