SISTEM

Changelog

Riwayat perubahan database, fitur, UI, dan pipeline β€” 20 entri terakhir

πŸ› FIX#33 Β· 25 Mar 2026, 08.15
Path portability + fetch fix + cron β†’ LaunchAgent + SCP β†’ GCS
Fix 4 root causes: (1) fetch_cron.sh PYTHONPATH missing, (2) sync-db-only.sh SCP stall β†’ gsutil cp GCS relay, (3) download_idx_keterbukaan.py _load_folder_tiers() wrong hardcoded path, (4) absolute paths di shared_db.py/apply_folder_routes.py β†’ Path(__file__).parent relative. Cron fetch+pipeline β†’ LaunchAgent com.idx.fetch+pipeline. 60 reviews filename fix .pdf.
orchestrator/fetch_cron.shdeploy/scripts/sync-db-only.shdownloader/download_idx_keterbukaan.pyorchestrator/shared_db.pyAutomator/shared_db.pyAutomator/apply_folder_routes.py
↩ Cara revert
git checkout -- downloader/download_idx_keterbukaan.py orchestrator/shared_db.py orchestrator/fetch_cron.sh deploy/scripts/sync-db-only.sh
πŸ› FIX#32 Β· 25 Mar 2026, 00.49
DB streamline + Trigger.dev fix
Fix DB divergensi (monorepo canonical path di shared_db.py), guard sync GCP anti-wipe (abort jika downloads<100), Trigger.dev maxDuration 900s + LaunchAgent bootstrap, DROP saved_searches/ticker_price_skip/local_filename (VACUUM 14MB→12.1MB), pruning category_migrations 90d, fix SYNC_SCRIPT path di apply_folder_routes.py. GCP emergency restore dari 0 baris.
shared_db.pydeploy/scripts/sync-db-only.shpackages/jobs/src/tasks/fetch-task.tsLaunchAgents/com.idxsteroid.trigger-worker.plistorchestrator/Database Bersama/schema.sqldeploy/scripts/apply-pipeline-sync.pyweb/lib/shared-db.tsdeploy/scripts/fetch_announcements_server.pyorchestrator/apply_folder_routes.py
↩ Cara revert
Restore dari idx_shared.db.bak.20260324 dan idx_shared.db.pre-cleanup di Database Bersama/
πŸ—ƒ SCHEMA#31 Β· 24 Mar 2026, 23.58
Schema cleanup: DROP saved_searches, ticker_price_skip, local_filename
Removed 2 unused tables (saved_searches: 0 rows, no writer; ticker_price_skip: non-functional) and 1 redundant column (announcements.local_filename: identical to downloads.filename). VACUUM saved 1.9 MB. Updated apply-pipeline-sync.py PIPELINE_TABLES (9 tables), shared-db.ts AnnouncementRow, fetch_announcements_server.py CREATE TABLE, and schema.sql.
Database Bersama/schema.sqldeploy/scripts/apply-pipeline-sync.pyweb/lib/shared-db.tsdeploy/scripts/fetch_announcements_server.py
↩ Cara revert
Restore from idx_shared.db.pre-cleanup backup
🎨 UI#30 · 22 Mar 2026, 16.24
UI/UX Redesign β€” clean mobile layout
Full redesign: full-width review panel (mobile+desktop), Lucide SVG icons, Fira Code+Fira Sans typography, CSS variable migration (WatchlistPanel light mode fix), skeleton loading, 14px review text, significance left-border strip, mobile touch targets β‰₯44px
web/components/DocCard.tsxweb/components/Feed.tsxweb/components/TabLayout.tsxweb/components/WatchlistPanel.tsxweb/components/SavedFeed.tsxweb/components/Sidebar.tsxweb/app/globals.cssweb/lib/useIsMobile.ts
↩ Cara revert
git revert HEAD
πŸ”§ CONFIG#29 Β· 22 Mar 2026, 12.18
Update CLAUDE.md paths post-monorepo migration
Fix outdated paths in both CLAUDE.md files after monorepo migration (2026-03-22): update shared-db.ts path to monorepo, fix auto-sync.sh cron path, update issue tracker paths, add Testing section with pytest/vitest/playwright commands, update monorepo orchestrator/CLAUDE.md agent table and all component paths.
CLAUDE.md/Volumes/BT2/idx-steroid/orchestrator/CLAUDE.md
↩ Cara revert
manual revert
πŸ› FIX#28 Β· 20 Mar 2026, 13.17
Fix 19 item salah di Lainnya web
Root cause: reviews.jenis='Lainnya' + downloads.file_url=NULL → Stage C grouped-parser muncul sebagai orphan di utama (Lainnya). Fix: (1) UPDATE 66 downloads.file_url dari reviews.url by filename match. (2) Fix file_url COCO lamp1 + TIRT Pemantauan Khusus manual. (3) UPDATE jenis 5 review valid: BBNI/MKNT→Fakta Material, PTRO/INCO→Pengumuman Bursa IDX. (4) DELETE 2 review ETF rutin XMSK/XMLF (tidak ada download entry). Sync ke GCP berhasil.
Database Bersama/idx_shared.db
↩ Cara revert
Tidak ada revert otomatis β€” perlu restore dari backup DB
πŸ—ƒ SCHEMA#27 Β· 20 Mar 2026, 12.57
Hapus kategori Saham Hilang dari folder_routes
Saham Hilang dihapus dari schema.sql folder_routes (hanya 2 file, tidak signifikan). Keyword 'saham hilang' dipindah ke Pengumuman Bursa (IDX). 2 file TLKM Pengumuman Bursa dipindah secara fisik ke Pengumuman Bursa (IDX)/. apply_folder_routes.py re-route 113 files total (termasuk koreksi pre-existing: KSEI Pengumuman Bursa β†’ IDX, Annual Report salah kategori β†’ folder yang benar). Sync ke GCP berhasil.
Database Bersama/schema.sql
↩ Cara revert
git checkout Database Bersama/schema.sql && python3 apply_folder_routes.py
✨ FITUR#26 · 20 Mar 2026, 09.09
Backfill downloads.title + no_ann dari announcements (backfill_ann_titles.py)
517 file di kategori utama yang title-nya filename-based: 496 diupdate dari announcement match (via ticker+tanggal), 21 synthetic ann dibuat (SYN-YYYYMMDD-TICKER) untuk yang tidak ada match. Hasilnya apply_folder_routes re-route 512 file ke folder yang benar. Sisa 5 file di utama (edge case: WINS newsletter + CEKA Keterbukaan Informasi Dampak).
backfill_ann_titles.py
↩ Cara revert
Manual: restore downloads.title+no_ann dari backup, hapus SYN-* dari announcements
✨ FITUR#25 · 20 Mar 2026, 08.27
route_document() β€” shared routing logic untuk Downloader & apply_folder_routes
Pindahkan routing logic ke shared_db.route_document() sebagai single source of truth. apply_folder_routes.py dan Downloader get_folder() keduanya delegate ke fungsi ini. Fix bug: R- prefix dan -W suffix missing di apply_folder_routes. Fix bug: utama = root (BASE_DIR), bukan subfolder. Fix sync_downloads_from_disk scan root untuk utama. Perubahan Manajemen diubah ke download_only.
shared_db.pyapply_folder_routes.pysync_downloads_from_disk.pyApp Download Keterbukaan Informasi IDX/download_idx_keterbukaan.pyDatabase Bersama/schema.sql
↩ Cara revert
git checkout shared_db.py apply_folder_routes.py sync_downloads_from_disk.py
✨ FITUR#24 · 20 Mar 2026, 07.44
Skip price fetch ticker yang konsisten gagal (β‰₯5x)
Tambah tabel ticker_price_skip di schema.sql + DB. Fungsi get_price_skip_tickers/record_price_fetch_results di shared_db.py. main.py skip ticker delisted sebelum fetch, lalu update fail_count setelah fetch. Threshold 5 gagal β†’ skip=1 permanen; reset otomatis jika berhasil. Tabel di-sync ke GCP via apply-pipeline-sync.py.
Database Bersama/schema.sqlshared_db.pyAPP Review Saham/main.pyIDXSteroid/scripts/apply-pipeline-sync.py
↩ Cara revert
DROP TABLE ticker_price_skip + revert main.py
πŸ› FIX#23 Β· 20 Mar 2026, 06.49
apply_folder_routes: pindah file fisik + update DB saat routing berubah
re_route_downloads sebelumnya skip file yang ada di disk di lokasi lama (disk=truth). Sekarang jika routing keyword berubah dan file fisik ada di old_kat folder, file dipindah ke new_kat folder (shutil.move) lalu DB diupdate. Jika file gagal dipindah, DB tidak diupdate. User request: perubahan routing harus otomatis ikut memindah file fisik + update DB.
apply_folder_routes.py
↩ Cara revert
git checkout apply_folder_routes.py
πŸ› FIX#22 Β· 20 Mar 2026, 06.49
Fix manifest_parser: reklasifikasi file yang berpindah ke non-reviewed folder
manifest_parser._normalize_downloaded sebelumnya menggunakan kategori dari manifest meski file secara fisik sudah dipindah ke folder non-reviewed (Laporan ESG, Annual Report). Fallback path sekarang cek semua subdirektori BASE_DIR, bukan hanya CATEGORY_FOLDERS. Jika file ditemukan di folder non-reviewed, actual_cat diset ke nama folder tersebut sehingga main.py filter CATEGORY_FOLDERS skip file tersebut. Root cause: AVIA 1621 files masuk review padahal semestinya tidak.
APP Review Saham/manifest_parser.py
↩ Cara revert
git checkout APP\ Review\ Saham/manifest_parser.py
πŸ› FIX#21 Β· 20 Mar 2026, 06.29
Routing: penyampaian prospektus β†’ Obligasi (bukan Fakta Material)
Keyword 'penyampaian prospektus' di Fakta Material menyebabkan prospektus obligasi ASDF masuk ke review AI. Dipindah ke Obligasi (sort_order 70, download_only). Tambah juga 'informasi tambahan' ke Obligasi. File ASDF dipindah fisik ke folder Obligasi + update downloads.kategori. Berlaku untuk semua penerbitan obligasi ke depan.
Database Bersama/schema.sql
↩ Cara revert
Kembalikan 'penyampaian prospektus' ke Fakta Material di schema.sql, jalankan apply_folder_routes.py
πŸ”§ CONFIG#20 Β· 20 Mar 2026, 06.08
Prompt: larang deskripsi perusahaan, fokus aksi saja
Tambah instruksi eksplisit di kedua prompt (single + group) di claude_summarizer.py: JANGAN sertakan deskripsi umum perusahaan (profil, industri, sejarah, sektor). Fokus HANYA pada apa yang akan, sedang, atau telah dilakukan β€” aksi, keputusan, rencana, angka konkret.
APP Review Saham/claude_summarizer.py
↩ Cara revert
Hapus baris 'JANGAN sertakan deskripsi umum perusahaan' di claude_summarizer.py
πŸ”§ CONFIG#19 Β· 20 Mar 2026, 05.32
Panggilan RUPS β†’ download_only, bersihkan fallback config Analyzer
Panggilan RUPS tidak perlu AI review (dokumen rutin undangan RUPS). Diubah tier dari reviewed β†’ download_only di schema.sql + DB lokal + GCP. Laporan Keuangan Interim sudah reported sejak sebelumnya β€” tidak perlu diubah. Fallback CATEGORY_FOLDERS di Analyzer config.py dibersihkan: hapus Panggilan RUPS dan Aksi Korporasi (sudah tidak ada di sistem).
Database Bersama/schema.sqlAPP Review Saham/config.py
↩ Cara revert
Ubah tier Panggilan RUPS kembali ke reviewed di schema.sql, jalankan apply_folder_routes.py
πŸ› FIX#18 Β· 20 Mar 2026, 05.24
Fix apply-pipeline-sync.py: auto-create semua pipeline tables di GCP
apply-pipeline-sync.py sekarang CREATE TABLE IF NOT EXISTS untuk semua 10 pipeline tables sebelum sync. Sebelumnya hanya category_migrations β€” tabel baru (ksei_tickers, change_log) menyebabkan DELETE gagal β†’ rollback seluruh transaksi β†’ sync tidak apply sama sekali. Juga fix sync-db-only.sh: hapus 2>/dev/null pada gcloud ssh agar error terdeteksi dan script exit 1 jika gagal.
IDXSteroid/scripts/apply-pipeline-sync.pyIDXSteroid/scripts/sync-db-only.sh
↩ Cara revert
git checkout IDXSteroid/scripts/apply-pipeline-sync.py IDXSteroid/scripts/sync-db-only.sh
πŸ—ƒ SCHEMA#17 Β· 20 Mar 2026, 05.23
Fix sync GCP: migrate routing_keywords + create ksei_tickers, change_log di VM
GCP VM DB stale sejak lama karena 2 masalah schema: (1) routing_keywords punya CHECK constraint lama (route_type IN ('main','title','company')) tapi local sudah tambah 'skip_review' β†’ INSERT gagal β†’ seluruh transaksi rollback; (2) ksei_tickers dan change_log belum ada di GCP VM. Fix: migrate routing_keywords schema di VM, create 2 tabel yang kurang, lalu sync berhasil: reviews 743β†’907, folder_routes 23β†’22 (hapus Aksi Korporasi).
IDXSteroid/scripts/apply-pipeline-sync.pyIDXSteroid/scripts/sync-db-only.sh
↩ Cara revert
Tidak diperlukan β€” perbaikan schema GCP permanent
πŸ› FIX#16 Β· 20 Mar 2026, 04.57
Backfill reviewed_files dari _backup/ reports Mar 8-17
Cross-check report .md di _backup/ terhadap tabel reviews dan reviewed_files. Ditemukan 83 reviews dari backup belum ada di DB (migrate_reviews_to_db.py tidak scan _backup/). Import 83 reviews ke DB. Backfill 501 filepath entries ke reviewed_files menggunakan no_ann grouping dan fuzzy prefix matching (60/50 char) untuk filename yang terpotong di report lama. Hasil: 182 group (270 file) genuinely unreviewed β€” belum pernah diproses di sistem lama maupun baru.
migrate_reviews_to_db.pyDatabase Bersama/idx_shared.db
↩ Cara revert
Tidak bisa di-revert otomatis β€” hapus manual entries reviewed_files dengan run_ts='backfill_from_backup' dan reviews dengan source='backup'
πŸ› FIX#15 Β· 20 Mar 2026, 04.43
Hapus API fallback Analyzer β€” Claude Pro CLI only
claude_summarizer.py: hapus _call_via_api, API key init, _cli_exhausted. Sekarang hanya pakai Claude Pro CLI. Jika CLI hit limit, _UsageLimitError propagate ke summarize_group_batch β†’ set _limit_error β†’ hentikan batch. main.py: hapus cek ANTHROPIC_API_KEY. Tambah failsafe: jika 0 berhasil β†’ jangan tulis report (notify Telegram saja). Jika partial β†’ tulis report hanya dengan ok_summaries, tambah failure notice di header. File gagal tidak ditandai reviewed β†’ auto-retry run berikutnya.
APP Review Saham/claude_summarizer.pyAPP Review Saham/main.py
↩ Cara revert
git -C '/Volumes/BT2/Automator/APP Review Saham' checkout claude_summarizer.py main.py
πŸ› FIX#14 Β· 19 Mar 2026, 21.53
Fix cache invalidation: WAL mode mtime tidak update
grouped-parser.ts getLatestMtime() tidak detect perubahan DB di WAL mode karena hanya cek mtime file utama. Fix: (1) grouped-parser.ts sekarang juga cek mtime idx_shared.db-wal; (2) apply-pipeline-sync.py tambah PRAGMA wal_checkpoint(TRUNCATE) setelah sync agar main file mtime terupdate. Root cause: Stage B cards tidak refresh setelah fetch_cron sync ke GCP.
IDX Resume/idx-feed/lib/grouped-parser.tsIDXSteroid/scripts/apply-pipeline-sync.py
↩ Cara revert
git checkout 'IDX Resume/idx-feed/lib/grouped-parser.ts' 'IDXSteroid/scripts/apply-pipeline-sync.py'