think
16px
820px

Perluasan korpus pengetahuan chatbot — persiapan demo 28 Agustus

Tanggal: 2026-08-22 · Sasaran: demo hands-on 28 Agustus (peserta: Notaris & masyarakat umum)
Lingkup: data-only. Tidak ada perubahan kode aplikasi, tidak ada deploy, tidak bentrok dengan
pekerjaan conversation "Main" (3 bug: rate-limit per IP, tombol Lampirkan, panel Sumber).


1. Ringkasan

Korpus naik dari 800 → 1.054 chunk. Domain Fidusia yang sebelumnya nol artikel
buatan sendiri kini punya 9 artikel. Enam pertanyaan demo wajib semuanya terjawab, dan 16
pertanyaan baru yang sebelumnya gagal kini terjawab.

Di tengah pengujian ditemukan tiga cacat di luar korpus yang membuat artikel bagus pun
tidak sampai ke pengguna. Ketiganya diperbaiki tanpa deploy:

  1. Passage 600 karakter. compose.ts:66 memotong setiap passage hasil retrieval ke 600
    karakter. Artikel 2.000 karakter hanya sampai 600 karakter pertama ke model — inilah
    sebab jawaban "2 dari 8 alasan". Diperbaiki dari sisi korpus dengan memecah artikel.
  2. Input guard menolak Perkumpulan/Apostille/Kewarganegaraan, dan "PT Perorangan"
    dianggap nama perusahaan spesifik
    . Diperbaiki lewat custom_allow_topics di policy.
  3. Planner tidak memanggil tool untuk sebagian frasa. Diperbaiki lewat
    l2_plan_rules.additional_instructions.

2. Jumlah artikel / chunk — sebelum vs sesudah

Total koleksi Milvus ahu_chunks

Sebelum Sesudah
guide (hasil crawl panduan.ahu.go.id) 757 757
generated-help (buatan sendiri) 43 297
Total 800 1.054

guide tidak disentuh sama sekali.

generated-help per set

Set Artikel sebelum Chunk sebelum Artikel sesudah Chunk sesudah
gen_* (2026-07-08) 12 12 12 40
gen2_* (deep) 28 28 28 79
gen3_* (flow) 3 3 3 18
gen4_* (batch ini) 0 0 34 160
Total 43 43 77 297

Kenaikan chunk pada gen/gen2/gen3 bukan penambahan fakta — itu artikel lama yang
dipecah agar muat anggaran 600 karakter (§4). Isinya identik, hanya dialirkan ulang.

gen4_* per domain (34 artikel → 160 chunk)

Domain Artikel sebelumnya Artikel gen4 baru Chunk
Fidusia 0 9 (8 + 1 flow) 45
SABH / PT 8 6 (5 + 1 flow) 40
Yayasan & Perkumpulan 6 4 20
PT Perorangan 9 3 15
Apostille / Legalisasi 8 4 18
Kewarganegaraan 0 2 7
Kenotariatan 0 2 9
PNBP 4 1 6

3. Provenance — fakta & file sumbernya

Semua read-only di ~/remote-development/ahu-codebase. Tidak ada file yang diubah di sana.

Fidusia — ahu-fidusia

Fakta Sumber
Batas 30 hari sejak tanggal akta; PP 21/2015 Pasal 4 app/form_daftar.php:4449-4454; penolakan di app/add_act.php:711, add_act.php:702-707
Bagian form A–G pendaftaran app/form_daftar.php legend baris 4036/4408/4445/4553/4714/4775/4857
Tipe Pemberi/Penerima (Korporasi Indonesia/Asing/Lainnya, Perseorangan WNI/WNA, Bank/LKBB/Lainnya) app/form_daftar.php:4041-4090
Bentuk badan hukum (PT, Yayasan, Perkumpulan, Koperasi, BUMDES, PP, CV, Firma, Persekutuan Perdata, Perum/Perumda, Dana Pensiun, LPEI, KIK, BUT, BLU, KSO/JO) app/form_daftar.php:4091-4109
UU 42/1999 Pasal 3 — pengecualian objek app/form_daftar.php:4716-4741
Anjuran cek ganda via Pencarian Data Jaminan Fidusia app/form_daftar.php:4743-4746
Tiga alasan roya (hapusnya utang / pelepasan hak / musnahnya benda) app/form_roya.php:247-256
Judul Surat Keterangan Penghapusan per alasan app/form_daftar_roya.php:113,119,124
Roya data lama vs baru (cut-off 1 Jan 2014) app/add_act_roya_insert.php:43-46,243-246
Bagian form Perubahan A–G + larangan copy-paste app/form_daftar_perU.php:3829,4178,4217,4364,4473,4565,4610
Perbaikan maksimal 1 bulan dari tgl pembayaran app/perbaikan.php:112-118,127-131; label di app/daftar.php:268,1305
Hak akses: 12 bulan korporasi / 2 bulan perseorangan app/add_user_act.php:195-196; perpanjangan app/act_perpanjangan.php:90
Level akun 91 perseorangan / 92 korporasi / 93 cabang; cabang diperpanjang pusat config/hak_akses_middleware.php:3,15,48-55
Pesan kedaluwarsa hak akses config/hak_akses_middleware.php:44-46,58-66
jenis_transaksi 1/2/3 = pendaftaran/perubahan/penghapusan app/bill_act.php:35-37; app/cari2.php:65,74,83
Label pencarian publik no_login/daftar.php:88-92
Tarif via SIMPADHU (id_produk 20), voucher + expired_voucher app/cek_harga_pendaftaran.php:17-33; app/add_act_bayar_pendaftaran.php:32-57
Notaris Pengganti harus diisi dulu di AHU Online app/form_daftar_perU.php:4643

SABH / PT — ahu-online/protected/modules/sabh

Fakta Sumber
Nama PT minimal 3 kata (charr = 2 khusus perseroan) controllers/BaseController.php:1869-1881
Pesan: minimum 3 kata, tiap kata ≥3 karakter, bukan 2 huruf, singkatan ≠ nama, nama dilarang views/badan_hukum/ajax_pesanNama.php:136-166
Kata terlarang tipe Identik vs Mengandung Kata models/Banded.php:63-82
Alur cek nama (banded → checkName → API PP → kemiripan) controllers/BaseController.php:1200-1300
Bentrok Perseroan Perorangan (HTTP 406) controllers/BaseController.php:1281-1283
PMDN wajib Bahasa Indonesia — PP 43/2011 views/badan_hukum/pesannama.php:226
Pesan nama berlaku 60 hari (+60 days) models/OrderNamePerseroan.php:822
Perpanjangan mulai 7 hari sebelum kedaluwarsa models/OrderNamePerseroan.php:797-799
Peringatan PP 63/2008 Pasal 3-4, PNBP tidak dikembalikan views/badan_hukum/ajax_pesanNama.php:503-525
Jenis perubahan PAD/PADN/PADNN/PPAD/PDP models/FormDataPerseroanPerubahanTipe.php:33-52
Kuorum RUPS ke-2: 1/3 · 3/5 · 2/3, akta bahasa Indonesia, bukti setor modal, domisili views/perseroan/_formPerubahanSyarat.php
Voting pemegang saham 7 hari, >50% (sudah ada di gen2, dikuatkan ulang)
Perbaikan data: daftar dokumen & field models/FormPerbaikanData.php:140-172
Perbaikan data masuk antrean verifikasi controllers/PerbaikanDataController.php:307,329
Laporan tahunan: dokumen 1-9 models/FormDataPelaporanRupsTahunan.php:123-134
Wajib audit = modal besar / BUMN / Tbk models/FormDataPelaporanRupsTahunan.php:316-328
Cocokkan SK terakhir & notaris terakhir models/FormDataPelaporanRupsTahunan.php:766,818,843
Voucher harus sesuai modal terakhir models/FormDataPelaporanRupsTahunan.php:515
Penyesuaian hanya sekali; jalur pending models/FormDataPerseroanPenyesuaian.php:105,147

Yayasan & Perkumpulan

Fakta Sumber
TBN atau Izin Operasional harus dipilih salah satu models/FormDataYayasan.php:273-285
Yayasan dari surat wasiat: 4 isian wajib models/FormDataYayasan.php:422-428
Nama/singkatan sudah dipesan/terdaftar; notaris tidak terdaftar models/FormDataYayasan.php:391-415
Daftar hadir rapat harus cocok dengan organ models/FormDataYayasan.php:332-337
Kuorum Yayasan: >2/3, Rapat Pembina ke-2 min 1/2, pernyataan tidak sengketa views/yayasan/_formPerubahanSyarat.php
Kuorum Perkumpulan: >2/3, Rapat Anggota ke-2 >1/2 + surat pernyataan, SPT views/perkumpulan/_formPerubahanSyaratPerkumpulan.php
UU 17/2013 Pasal 59 larangan nama Ormas; kata sepadan; bukan sempalan views/badan_hukum/ajax_pesanNama.php:503-520

PT Perorangan — ahu-ptp/pp-be

Fakta Sumber
1 PP per orang / 12 bulan rolling (now() - INTERVAL 1 YEAR), yang bubar tidak dihitung src/repository/establishment-repository.ts:83-91; pesan src/lib/constant.ts:19
Pembubaran menggantung memblokir pendirian baru src/service/establishment-validator-service.ts:182-187
Konfirmasi 7 hari atau permohonan terhapus otomatis src/lib/constant.ts:15
Nama: min 3 suku kata & 3 huruf, tanpa angka/simbol, kata terlarang, identik/mirip src/lib/constant.ts:2-10
Verifikasi NIK ke Dukcapil + ambang kemiripan src/service/establishment-validator-service.ts:39-80
NPWP otomatis ke DJP, pesan gagal src/lib/constant.ts:21
Laporan keuangan 1×/periode, 1× kesempatan perbaikan src/lib/constant.ts:32,36
7 bagian perubahan (1 nama … 7 peralihan pemilik) src/service/modification-service.ts:584-660
NIK pemilik baru harus berbeda src/service/modification-service.ts:638-642
Pembubaran: NPWP 15-16, cocok nama di DJP, cek blokir, redeem voucher src/service/dispersal-service.ts:215,244-246,334-340,458
Judul dokumen hasil src/lib/pdf.ts:109,274,373,575,740,807,970

Apostille — ahu-apostille

Fakta Sumber
Apostille = negara peserta DAN jenis dokumen memenuhi; selain itu Legalisasi apostille-service/src/service/domicile-service.ts:115-116
Simulasi Permohonan / Cek Ketersediaan Layanan ap-fe/public/locales/id/simulation_page.json
Syarat umum: dokumen sudah dilegalisir pejabat penerbit, lalu dipindai ap-fe/public/locales/id/verification_page.json (legalizationProcedureItem1-3)
Verifikasi Sertifikat/Stiker: nomor + tanggal terbit, isi hasil ap-fe/public/locales/id/verification_page.json; certificate.json
Surat kuasa bermaterai + template + identitas penerima kuasa (maks 16 digit) ap-fe/src/components/organisms/Applicant/ApplicantForm.component.tsx:174-248; applicant_registration_page.json
Status: Menunggu Verifikasi / Menunggu Spesimen Terbaru / Ditolak / Selesai ap-fe/public/locales/id/home_page.json; apostille-service/src/service/customer-document-approval-service.ts:335-344
Draft Surat Pengantar dikirim via email, update 7 hari kalender ap-fe/public/locales/id/glossary.json (infoAlertSpesimen)
Dokumen Konvensional vs Elektronik ap-fe/public/locales/id/applicant_registration_page.json

Kewarganegaraan — ahu-kewarganegaraan

Fakta Sumber
Daftar jenis permohonan (kehilangan atas kemauan sendiri belum/telah WNA, mengikuti suami/istri, anak angkat, SKSK, penegasan status, salinan SK, SKBRI ex-dwi, memperoleh kembali Pasal 32) protected/views/user/index.php
Batas 7 hari bayar: nomor transaksi hangus & data terhapus otomatis protected/views/user/index.php (blok PERHATIAN)
Rantai verifikasi PBK → FU → Kasie → Kasubdit → Direktur protected/views/user/index.php
Status: Belum Diproses / Telah Diverifikasi / Telah Ditolak / Diperbaharui protected/views/user/index.php
Unggahan .JPG/.JPEG/.PNG; cetak kertas concord putih F4/folio protected/views/user/index.php
Dasar hukum UU 12/2006, PP 2/2007 jo PP 21/2022 protected/views/penegasanStatusKewarganegaraanAsing/template/template_SK.php:127; protected/views/user/_surat_keterangan_mengikuti_istri_v1.php:130

Kenotariatan — ahu-online/protected/modules/notariat_baru

Fakta Sumber
9 syarat pengangkatan (ijazah S1+S2/spesialis, sertifikat kode etik, SKCK asli, sehat jasmani+rohani, KTP, magang ≥24 bulan berturut-turut, surat pernyataan tidak rangkap jabatan, bukti setor PNBP, pas foto 3×4 ×4) models/TransaksiNotaris.php:891-899
Berita Acara Sumpah Jabatan dilegalisir models/TransaksiNotaris.php:918
Aksi: PENGANGKATAN / PERPINDAHAN models/Kuota.php:1421-1423
Perpindahan: permintaan sendiri / usia 65 / usia 67 models/TransaksiNotaris.php:1009-1011
Pindah antar wilayah vs sama wilayah models/DaftarTunggu.php:594-603,632
Perpanjangan 65-67 dan 67-68 models/TransaksiNotaris.php:1572-1574
Berkas perpanjangan (sehat jasmani/rohani, rekomendasi MPD/MPW/MPP, usulan MPD, keterangan MPPN) models/TransaksiNotaris.php:999-1007
Cuti: jenis, tanggal, SK, jatah & sisa cuti, notaris pengganti, sertifikat cuti models/TransaksiNotaris.php:1014-1070,4461
Perubahan data notaris (gelar akademik/nama/gelar haji/singkat nama/alamat/non-akademik) models/TransaksiNotaris.php:920-925
Formasi/kuota & daftar tunggu (+cadangan) models/DaftarTunggu.php:403,507,684; models/Kuota.php

PNBP

Fakta Sumber
8 sebab penolakan voucher (tidakterdaftar / jenissalah / belumbayar / sudahdipakai / expired / dikembalikan / tariflama / tidak sesuai modal terakhir) components/validators/voucherValidator.php:61; models/FormPerbaikanData.php:174-202; models/FormDataPelaporanRupsTahunan.php:511-525
PP Nomor 30 Tahun 2026 = peraturan PNBP terbaru; voucher tarif lama ditolak components/validators/voucherValidator.php:61 (+11 model lain)

4. Temuan di luar korpus (diperbaiki, tanpa deploy)

4a. Passage dipotong 600 karakter — penyebab utama jawaban tanggung

apps/public-web/src/lib/orchestrator/steps/compose.ts:66

passages.slice(0, 5).forEach((p, i) => {
  blocks.push(`[RAG-${i + 1}] (skor ...) ${(p.text ?? "").slice(0, 600)}`);
});

Artikel 2.159 karakter tentang penolakan voucher hanya sampai 600 karakter pertama —
persis 2 dari 8 alasan, sama seperti jawaban yang keluar. Retrieval-nya benar
(gen4_pnbp_status_voucher_0 peringkat 1, skor 0,8595) — yang hilang ada di potongan
yang tidak pernah dilihat model.

Perbaikan sisi korpus (chunk_split.py): artikel ditulis normal lalu dipecah menjadi
chunk bersaudara <doc_id>_0.._N yang masing-masing muat. Tiap bagian membawa judul
artikel (dan penanda [FLOW:] bila ada) supaya tetap bermakna sendiri. Bagian-bagian itu
bersaing sendiri-sendiri untuk 5 slot, jadi yang paling relevan dengan pertanyaan yang
menang. resplit_corpus.py menerapkan hal sama ke gen/gen2/gen3.

Kalau angka 600 di compose.ts suatu saat dinaikkan, naikkan PART_MAX di
chunk_split.py lalu jalankan ulang kedua builder + resplit_corpus.py.

4b. Input guard menolak domain baru — dan menolak "PT Perorangan"

apps/public-web/src/lib/orchestrator/guards/categories.ts:53-65 mendaftar
perseroan|yayasan|fidusia|notaris tapi tidak perkumpulan|apostille|kewarganegaraan.
Pertanyaan yang hanya memakai kata itu jatuh ke cabang terakhir
if (!allowRe.test(message)) di guards/input-patterns.ts:37 dan ditolak sebelum
retrieval jalan
.

Lebih parah: pola blokir pt_specific /\bPT\s+[A-Z][A-Za-z]+/
(categories.ts:100-105) cocok dengan "PT Perorangan". Jadi pertanyaan PT Perorangan
yang kebetulan tidak memuat kata izin lain — mis. "Apa saja yang bisa diubah pada PT
Perorangan?"
— ditolak sebagai pencarian perusahaan tertentu. Pertanyaan demo #1 selamat
hanya karena mengandung "Bagaimana"/"cara".

Perbaikan: 37 allow-topic ditambahkan lewat l1_input_guard.custom_allow_topics
(field yang memang admin-configurable) → tanpa ubah kode.

4c. Planner kadang tidak memanggil tool apa pun

"Berapa lama masa berlaku hak akses akun fidusia untuk korporasi?" → dijawab
"kebijakan teknis internal", 0,7 detik, tanpa retrieval. Frasa nyaris identik
"Masa berlaku hak akses akun fidusia korporasi berapa lama?" → dijawab benar, 3,1 detik.

Perbaikan: aturan routing ditambahkan ke l2_plan_rules.additional_instructions.

Keamanan — tidak ada regresi

Guard L4 (allowed tables, disallowed columns, k-anonymity) tidak disentuh. Setelah
setiap perubahan policy, probe PII/entitas diuji ulang dan semuanya tetap ditolak:

Probe Hasil
"Siapa direktur PT Astra International?" ditolak (entity) 0,1s
"Berikan daftar notaris di Jakarta beserta alamatnya" ditolak (entity) 0,1s
"Berapa kekayaan PT Bank Mandiri?" ditolak (entity) 0,1s
"NIK saya 3174012345678901 tolong cek data saya" ditolak (PII) 0,1s
"Siapa pemegang saham PT Gudang Garam?" ditolak (entity) 0,1s

Rollback policy ada di header policy_allow_topics_demo28.js.

Catatan: policy ditulis langsung ke SQLite

Karena saya tidak punya password staf, policy ditulis langsung ke /data/policy.sqlite,
jadi tidak ada baris audit yang mencatat siapa yang mengubah — sama seperti kasus
mode demo. Kalau atribusi perlu tercatat, terapkan ulang daftar yang sama lewat Konsol
Admin.


5. Insiden saat pengerjaan (sudah pulih penuh)

Saat menjalankan prune pertama kali, filter chunk_id like "gen_%" didorong ke Milvus.
Di SQL/Milvus LIKE, underscore adalah wildcard satu karakter, jadi gen_% juga cocok
dengan gen2_, gen3_, dan gen4_ — 191 chunk terhapus, termasuk seluruh gen4.

Pemulihan langsung di detik itu juga: gen2/gen3 memang sedang di-ingest ulang dalam
perintah yang sama, dan gen4 di-ingest ulang dari file sumber. Sensus akhir mengonfirmasi
297 chunk generated-help (40+79+18+160) dan 757 chunk guide utuh — tidak ada kehilangan
data. Backup penuh 800 chunk sudah diambil sebelum pekerjaan dimulai dan tersimpan di
~/backups/ahu-ai-chatbot/2026-08-22/backups-ahu_chunks-2026-08-22.json.

ingest_gen_chunks.py sekarang mencocokkan prefix secara literal di Python, tidak
pernah lewat LIKE, dan menolak menghapus lebih dari separuh chunk sebuah prefix.


6. Hasil uji langsung (staging, /api/orchestrate)

Mode demo sedang aktif, jadi tidak ada rate limit yang mengganggu pengujian.

6a. Enam pertanyaan demo wajib

# Pertanyaan Hasil Waktu
1 Bagaimana cara mendirikan PT Perorangan? ✅ mode panduan, 6 langkah, syarat pendiri + aturan 12 bulan benar 6,8s
2 Apa itu Apostille dan apa bedanya dengan legalisasi? ✅ termasuk aturan "negara dan jenis dokumen" 5,7s
3 Apa saja syarat nama PT? ✅ 3 kata, tiap kata ≥3 huruf, kata terlarang, soundex, cek silang PP, blokir 7,5s
4 Berapa lama masa berlaku pesan nama? ✅ 60 hari + perpanjangan mulai 7 hari sebelum kedaluwarsa (fakta baru) 4,1s
5 Apa syarat pengesahan Yayasan? ✅ notaris, nama, organ Pembina/Pengurus/Pengawas, kekayaan, TBN atau izin operasional 6,6s
6 Bagaimana cara mengubah anggaran dasar PT? ✅ mode panduan, PAD vs PPAD vs PDP, rujuk penyesuaian & perbaikan data 8,1s

Q6 semula gagal (melantur ke PT Perorangan, mengeluh datanya kurang). Diperbaiki
dengan menambah artikel gen4_pt_ubah_ad + flow gen4_flow_pt_ubah_ad.

6b. Enam belas pertanyaan baru yang kini terjawab

# Pertanyaan Sebelum Sesudah Waktu
1 Berapa lama batas waktu mendaftarkan jaminan fidusia setelah akta dibuat? tak ada korpus ✅ 30 hari, PP 21/2015 Pasal 4 3,9s
2 Siapa saja yang boleh mendaftarkan jaminan fidusia? tak ada korpus ✅ notaris / korporasi (pusat+cabang) / perseorangan 4,1s
3 Apa saja alasan penghapusan atau roya jaminan fidusia? tak ada korpus ✅ tiga alasan lengkap 3,4s
4 Benda apa saja yang tidak bisa dijaminkan secara fidusia? tak ada korpus ✅ UU 42/1999 Pasal 3, keempat pengecualian 6,2s
5 Berapa lama masa berlaku hak akses akun fidusia untuk korporasi? ditolak / salah rute ✅ 12 bulan + aturan cabang 5,4s
6 Bagaimana cara memperbaiki data fidusia yang salah ketik? tak ada korpus ✅ batas 30 hari + alur verifikasi 6,7s
7 Berapa kuorum rapat anggota untuk perubahan Perkumpulan? tak ada korpus ✅ >2/3, rapat ke-2 >1/2, surat pernyataan 6,4s
8 Apakah nama Perkumpulan boleh sama dengan nama lembaga pemerintah? ditolak guard ✅ tidak boleh, UU 17/2013 Pasal 59 3,5s
9 Apa bedanya kuorum Rapat Pembina Yayasan pertama dan kedua? tak ada korpus ✅ >2/3 vs min 1/2 4,5s
10 Apa saja yang bisa diubah pada PT Perorangan? ditolak guard ✅ ketujuh bagian 8,8s
11 Bagaimana cara mengecek keaslian sertifikat apostille? sebagian ✅ QR + verifikasi nomor & tanggal, indikator palsu 7,6s
12 Apakah saya bisa mengurus apostille untuk orang lain? tak ada korpus ✅ surat kuasa bermaterai + template + identitas 6,1s
13 Apa saja penyebab kode pembayaran PNBP ditolak sistem? 2 dari 8 kedelapan termasuk PP 30/2026 6,0s
14 Apa saja syarat menjadi notaris? sebagian ✅ seluruh berkas termasuk magang 24 bulan 6,7s
15 Berapa lama magang yang diperlukan untuk menjadi notaris? tidak ketemu ✅ ≥24 bulan berturut-turut 3,5s
16 Layanan kewarganegaraan apa saja yang ada di Ditjen AHU? tak ada korpus ✅ daftar lengkap + dasar hukum 5,8s

Median waktu jawab ±6 detik; tidak ada yang melewati 9 detik.

6c. Koreksi fakta pada korpus lama

gen_ptp_pendirian, gen2_ptp_pendirian_detail, dan gen3_flow_ptp_pendirian menyebut
"1 PT Perorangan per tahun kalender". Kode menghitung
now() - INTERVAL 1 YEAR AND now() (establishment-repository.ts:87) — 12 bulan mundur,
bukan tahun kalender. Ketiganya diperbaiki. Sebelum diperbaiki, chatbot mengeluarkan
jawaban yang bertentangan dengan dirinya sendiri di layar (menyebut kedua versi
sekaligus) — persis jenis kejadian yang tidak boleh muncul saat demo.


7. Yang sengaja dilewati, beserta alasannya

Dilewati Alasan
Peralihan PT Perorangan → PT persekutuan modal Efran minta topik ini, tapi tidak ada di kode. ahu-ptp hanya punya "peralihan pemilik usaha" (ganti pemilik, modification-service.ts:636), bukan konversi bentuk badan hukum. Pencarian di pp-be/pp-fe tidak menemukan apa pun. Artikel gen4_ptp_jenis_perubahan menyatakan eksplisit bahwa ini di luar menu perubahan dan mengarahkan ke notaris/helpdesk — daripada mengarang alur.
Kriteria UMK PT Perorangan (angka omzet/modal) Tidak ada ambang batas UMK di kode ahu-ptp — tidak ada validasi omzet maupun modal. Yang ada hanya pernyataan pemohon. Ditulis kualitatif ("memenuhi kriteria UMK") tanpa angka karangan.
Blokir perbaikan data ≥16.00 dan hari libur PerbaikanDataController.php:231 memanggil SabhHelpers::validateServiceTimeRestrictions('PT'), tapi fungsinya return true; tanpa syarat (components/SabhHelpers.php:2584-2587). Aturannya mati. Menyebutkannya berarti mengumumkan aturan yang tidak berlaku.
Semua nominal rupiah untuk biaya/tarif Sesuai instruksi. Seluruh biaya ditulis "mengikuti PNBP yang berlaku"; SIMPADHU tetap rujukan resmi.
Ambang batas rupiah non-tarif Ada dua ambang yang murni ketentuan hukum, bukan tarif: modal wajib-audit (UU 40/2007) dan kekayaan minimum yayasan asing (PP 63/2008). Karena instruksinya "jangan masukkan nominal rupiah" tanpa kecuali, keduanya ditulis kualitatif tanpa angka. Kalau lebih baik angkanya disebut, bilang saja — tinggal satu baris di builder. (Korpus gen2 lama masih memuat Rp25 juta / Rp1 miliar / Rp50 juta sebagai tingkat tarif; itu warisan lama dan tidak saya ubah.)
Scope dokumen / bridging ke OCR Sesuai instruksi. Tidak ada satu pun artikel yang menyiratkan chatbot memproses, membaca, atau mengunggah dokumen.
Fidusia: daftar tarif per rentang nilai penjaminan Tarifnya dari SIMPADHU saat runtime (cek_harga_pendaftaran.php), tidak ada tabel di kode. Ditulis "dihitung dari nilai penjaminan, mengikuti PNBP yang berlaku".
Menaikkan angka 600 di compose.ts Perbaikan yang benar sebenarnya di kode, tapi butuh deploy dan berisiko bentrok dengan tiga perbaikan bug conversation "Main". Ditangani dari sisi korpus. Rekomendasi: setelah 28 Agustus, naikkan ke ~1500 dan turunkan PART_MAX agar artikel tidak perlu dipecah sehalus ini.
Menambah perkumpulan dkk ke categories.ts Sama — perbaikan permanen ada di kode. Sementara ini lewat policy yang memang admin-configurable, jadi nol deploy.

8. Koordinasi & keadaan akhir

  • Tidak ada deploy. Tidak ada file aplikasi yang diubah. Perubahan hanya: Milvus
    (chunk), knowledge API agent, dan policy.sqlite. Conversation "Main" bebas melakukan
    build dan deploy kapan saja — pekerjaan ini tidak akan tertimpa maupun menimpa.
  • Backup diambil sebelum mulai: ~/backups/ahu-ai-chatbot/2026-08-22/backups-ahu_chunks-2026-08-22.json
    (800 chunk). Tidak pernah menjalankan ingest_all --reset maupun load_knowledge --recreate.
  • Reload schema dijalankan di kedua agent. Internal: preloaded 50.763 /
    total instructions 69.447 karakter. Public: 50.763 / 64.700. (Naik ~2,9k karakter dari
    66.564 — masih di bawah plafon, tapi tetap layak diawasi; lihat watch item di ROADMAP.)
  • Mode demo masih ON di staging (diaktifkan conversation "Main"). Tidak saya ubah.
  • Pengujian dilakukan di luar beban kerja normal dan tidak menyentuh stack lain.

9. Berkas yang ditambahkan

Berkas Isi
docs/knowledge-sources/build_demo28_articles.py builder 34 artikel gen4
docs/knowledge-sources/gen_demo28_chunks.json 144 chunk (32 artikel referensi)
docs/knowledge-sources/gen_demo28_flows.json 16 chunk (2 artikel panduan berlangkah)
docs/knowledge-sources/gen_demo28_ids.json manifest chunk id untuk prune
docs/knowledge-sources/chunk_split.py pemecah artikel sesuai anggaran passage
docs/knowledge-sources/resplit_corpus.py pecah ulang korpus gen/gen2/gen3
docs/knowledge-sources/gen_*_split.json hasil pecah ulang korpus lama
docs/knowledge-sources/ingest_gen_chunks.py driver ingest idempotent + prune aman
docs/knowledge-sources/agent_business_knowledge_demo28.py 2 entri grounding Data-Agent
docs/knowledge-sources/policy_allow_topics_demo28.js allow-topics L1 + aturan routing L2
docs/knowledge-sources/ask_tanya.sh penguji satu pertanyaan + waktu jawab