Indikator Risiko Amplifikasi Terkoordinasi pada Akun X/Twitter
Analisis Pola Perilaku Akun X secara Instan & Deterministik · Powered by FastAPI, Sentence-Transformers, twscrape & React
Tentang • Preview • Tech Stack • Arsitektur • Metodologi • Instalasi • Keamanan
Lacak Buzzer adalah platform intelijen sosial open-source yang menganalisis profil dan riwayat postingan publik akun X (Twitter) untuk menghasilkan Indikator Risiko Amplifikasi Terkoordinasi (skor 0–100). Sistem ini memperkirakan anomali pola perilaku—seperti repetisi pesan, kepadatan tagar, intensitas aktivitas, dan ritme waktu posting—secara matematis dan deterministik.
- 🎯 Indikator Risiko Objektif (Bukan Tuduhan): Menilai jejak perilaku linimasa tanpa pernah mengklaim bahwa suatu akun pasti palsu, berbayar, atau berafiliasi politik tertentu.
- 🤖 Dual Surface (Website & X Bot): Analisis dapat diakses langsung melalui antarmuka web modern di lacakbuzzer.web.id atau cukup dengan me-mention bot resmi @lacakbuzzer di Twitter/X.
- 🧠 Model NLP Lokal (MiniLM-L6-v2): Menghitung kemiripan semantik antar-tweet menggunakan model Sentence-Transformers yang berjalan lokal di server tanpa mengirim konten tweet mentah ke pihak ketiga.
- 🔒 100% Stateless & Privacy-First: Membaca postingan publik secara live tanpa menyimpan teks tweet mentah ke dalam database demi menjaga privasi penuh pengguna.
- ⚡ Formula Baku & Transparan: Dilengkapi sistem penilaian matematis 7 parameter dan logika peredam anti-false-positive yang terbuka untuk diaudit.
Kiri: Tampilan hasil analisis di Website (lacakbuzzer.web.id) • Kanan: Balasan publik otomatis dari Bot X (@lacakbuzzer)
- Apa itu Lacak Buzzer?
- Preview
- Anggota Kelompok
- Detail Tech Stack
- Arsitektur Sistem & Alur Request (Workflows)
- Metodologi & Formula Penilaian (Scoring & Feature Extraction)
- Struktur Proyek
- Tabel Keamanan (Security Table)
- Instalasi & Cara Menjalankan
- Status X Bot & Contoh Respon
- Komunitas & Tata Kelola
- Catatan Keamanan
| Nama | Tugas (Backend/Frontend) |
|---|---|
| Ridwan | Backend 1 |
| Dandy | Backend 2 |
| Naufal | Frontend 1 |
| Falen | Frontend 2 |
- React.js (v18): Framework utama untuk pembuatan Single Page Application (SPA).
- Vite: Alat build super cepat untuk manajemen aset dan hot module replacement (HMR).
- CSS Kustom / Tailwind CSS: Desain visual responsif, premium, dan gelap (dark mode) dengan transisi halus.
- Cloudflare Pages: Media hosting statis untuk frontend.
- Python (v3.12): Bahasa pemrograman utama backend.
- FastAPI: Framework web asinkron dengan performa tinggi yang menyediakan endpoint REST API.
- Uvicorn: Server web ASGI untuk menjalankan FastAPI.
- Hugging Face Spaces: Platform hosting backend menggunakan kontainer Docker.
- Firebase Firestore: Database dokumen NoSQL untuk menyimpan statistik global dan riwayat pemindaian (
scan_history). - twscrape: Kakas scraping data X/Twitter secara terprogram tanpa API X resmi.
- all-MiniLM-L6-v2: Model Sentence-Transformers lokal untuk memproses kemiripan semantik antar-tweet.
- OpenRouter (LLM): Model AI eksternal untuk menyusun eksplanasi perilaku dalam Bahasa Indonesia secara ramah dan terstruktur.
Aplikasi ini berjalan secara terpisah (decoupled):
- Frontend Client terhubung ke FastAPI Backend via HTTP/HTTPS.
- Backend menggunakan penyimpanan lokal untuk rate-limiting metadata (stateless JSON files) dan terhubung ke Firebase Firestore untuk leaderboard.
- Backend memanggil model AI lokal untuk semantik, dan OpenRouter API untuk eksplanasi teks.
Berikut adalah visualisasi alur request ketika pengguna melakukan analisis akun baru:
sequenceDiagram
autonumber
actor User as Pengguna (Browser)
participant FE as Frontend (React)
participant BE as Backend (FastAPI)
participant Scraper as twscrape (X/Twitter)
participant ML as MiniLM (Embeddings)
participant OR as OpenRouter (LLM)
participant DB as Firestore (Firebase)
User->>FE: Input Username Target (misal: @username)
FE->>BE: POST /api/analyze {target, source: 'website'}
Note over BE: Cek Rate Limit (Berbasis IP)
alt Jika Kena Rate Limit
BE-->>FE: Error 429: Batas analisis tercapai
FE-->>User: Tampilkan Pesan Batas Analisis Tercapai
else Valid & Aman
BE->>Scraper: Ambil 100 Tweet Terbaru & Profil
Scraper-->>BE: Data Profil & Tweets (Text, Hashtag, URL, Mentions)
alt Tweets < 10
BE-->>FE: Error: Data tweet tidak cukup
FE-->>User: Tampilkan Pesan "Data Tidak Cukup"
else Data Cukup (>= 10)
BE->>ML: Bandingkan Kemiripan Semantik (MiniLM)
ML-->>BE: Skor Kemiripan
Note over BE: Hitung Metrik & Formula Scoring Baku
BE->>OR: Minta Eksplanasi (Metrik Ringkasan)
OR-->>BE: Teks Eksplanasi (Bahasa Indonesia)
BE->>DB: Simpan Riwayat Tanpa Tweets (Firestore)
BE-->>FE: Response (Score, Metrics, Signals, Explanations, raw_tweets)
FE-->>User: Tampilkan ResultCard & Hubungkan ke Modal Detail (Lihat Detail)
end
end
Berikut adalah alur saat pengguna mengeklik akun dari papan Leaderboard (tanpa scraping ulang):
sequenceDiagram
autonumber
actor User as Pengguna (Browser)
participant FE as Frontend (React)
participant BE as Backend (FastAPI)
participant DB as Firestore (Firebase)
User->>FE: Klik Akun di Leaderboard
FE->>BE: GET /api/history/{username}
BE->>DB: Cari di Koleksi scan_history
alt Ditemukan
DB-->>BE: full_report (Skor, Metrik, Penjelasan, dll)
BE-->>FE: Response full_report (tanpa raw_tweets)
FE-->>User: Tampilkan Laporan (Modal Detail menunjukkan "Data Terlindungi" demi Privasi)
else Tidak Ditemukan
BE-->>FE: Error 404
FE-->>User: Tampilkan Pesan Error
end
Sistem Lacak Buzzer dirancang transparan, deterministik, dan dapat diuji secara terbuka (white-box). Seluruh proses penilaian profil dilakukan melalui dua tahap: Ekstraksi Fitur Perilaku (backend/services/feature_extraction.py) dan Formula Pembobotan Risiko Tetap (backend/services/scoring.py).
Important
Prinsip Keamanan Produk:
Skor yang dihasilkan adalah Indikator Risiko Amplifikasi Terkoordinasi (0–100) berbasis pola statistik perilaku. Formula ini bukan bukti hukum/ilmiah bahwa suatu akun adalah buzzer, bot bayaran, palsu, memiliki agenda politik, atau terkoordinasi secara jahat.
Skor ini adalah indikator risiko berbasis pola perilaku, bukan bukti bahwa akun tersebut terkoordinasi, palsu, dibayar, atau memiliki niat tertentu.
Sistem mengumpulkan maksimum 100 tweet terkini dari target dan mengekstrak 7 parameter perilaku:
Menggunakan model Sentence-Transformers lokal sentence-transformers/all-MiniLM-L6-v2 (berjalan hemat memori pada CPU 2GB). Setiap teks tweet diubah menjadi vektor embedding
Interpretasi: Nilai tinggi mengindikasikan akun sering mengulang narasi atau template teks serupa secara masif (copy-paste / blast messaging).
Rata-rata jumlah tagar (hashtags) per tweet:
Frekuensi rata-rata posting per hari berdasarkan rentang waktu tweet tertua dan terbaru:
Proporsi posting yang memuat link eksternal atau lampiran gambar/video:
Proporsi posting yang menyebut akun lain (mention) atau merupakan balasan (reply):
Menilai risiko awal berdasarkan umur akun sejak tanggal pendaftaran dan kelengkapan bio:
Mengukur tingkat keacakan jeda waktu posting
Interpretasi: Entropi rendah ($E \to 0$) berarti jeda waktu antar-tweet sangat konsisten dan terjadwal secara mekanis (otomatisasi / cron bot).
Sebelum pembobotan, seluruh metrik mentah dipetakan ke skala terstandardisasi
| Komponen Metrik ( |
Rumus Normalisasi Internal | Bobot ( |
Indikator |
|---|---|---|---|
|
Semantic Similarity ( |
30% | Tingkat pengulangan narasi pesan | |
|
Hashtag Density ( |
20% | Kepadatan spam tagar kampanye | |
|
Activity Intensity ( |
15% | Intensitas posting harian abnormal | |
|
Media & URL Ratio ( |
10% | Penyebaran tautan keluar dan media | |
|
Interaction Behavior ( |
10% | Pola interaksi balasan/mention terarah | |
|
Profile Risk ( |
10% | Akun baru dibuat (<90 hari) & bio kosong | |
|
Interval Regularity ( |
5% | Keteraturan jeda posting (jadwal otomatis) |
Kombinasi linear berbobot dari seluruh metrik terstandardisasi:
Untuk mencegah akun personal aktif, jurnalis, atau kreator konten mendapatkan skor risiko tinggi secara tidak sengaja, sistem menerapkan pengurang skor otomatis (penalty reducers):
diversity_score = 1 - semantic_similarity
# 1. Reduksi Keberagaman Topik: narasi tweet sangat bervariasi
if diversity_score > 0.6:
final_score *= 0.70
# 2. Reduksi Aktivitas Rendah: frekuensi posting wajar di bawah 5 tweet/hari
if posts_per_day < 5:
final_score *= 0.80
# 3. Reduksi Percakapan Alami: bukan akun yang terus-menerus reply/mention terarah
if reply_ratio < 0.3 and mention_ratio < 0.3:
final_score *= 0.85Skor akhir dibatasi dalam rentang
| Rentang Skor | Kategori Risiko (Risk Band) | Karakteristik Perilaku |
|---|---|---|
| 0 – 35 | 🟢 Rendah | Aktivitas organik, topik percakapan bervariasi, pola waktu alami. |
| 36 – 65 | 🟡 Sedang | Terdeteksi pola repetisi ringan atau intensitas posting tertentu. |
| 66 – 85 | 🟠 Tinggi | Terdeteksi kemiripan pesan kuat, kepadatan tagar padat, atau pola terjadwal. |
| 86 – 100 | 🔴 Ekstrem | Kombinasi repetisi teks sangat tinggi, akun baru, aktivitas posting sangat intensif. |
- < 10 Tweet: Insufficient Data (sistem menolak kalkulasi skor demi menjaga keadilan analisis).
- 10 – 49 Tweet: Rendah ("Kepercayaan hasil rendah karena jumlah tweet yang tersedia terbatas.").
-
$\ge$ 50 Tweet: Normal (data cukup representatif untuk evaluasi statistik).
lacak-buzzer/
├── .github/
│ ├── changelog-config.json # Konfigurasi kategori changelog otomatis
│ └── workflows/
│ ├── auto-release.yml # Workflow Github Action untuk rilis versi
│ └── advanced-security.yml # Pemindaian Gitleaks (Secrets) & Trivy (Container)
├── frontend/ # Website SPA (React + Vite)
│ ├── public/
│ │ ├── metadata.json # Meta data aplikasi
│ │ ├── robots.txt # Aturan indexing mesin pencari
│ │ ├── sitemap.xml # Peta situs pencarian
│ │ └── _headers # Aturan CSP dan header keamanan (Cloudflare)
│ ├── src/
│ │ ├── components/
│ │ │ ├── Footer.jsx # Komponen catatan/disclaimer footer
│ │ │ ├── Header.jsx # Komponen navigasi atas
│ │ │ ├── ResultCard.jsx # Komponen penampil hasil skor risiko + detail modal
│ │ │ ├── SearchBar.jsx # Komponen pencarian username
│ │ │ └── TweetDetailsModal.jsx # Pop-up rincian tweet & metrik detail (See Details)
│ │ ├── pages/
│ │ │ └── Home.jsx # Halaman utama Lacak Buzzer dengan Skeleton Loaders
│ │ ├── App.jsx # Root komponen UI
│ │ ├── index.css # Global CSS (Tailwind directives)
│ │ └── main.jsx # Entry point aplikasi React
│ ├── index.html # Kerangka HTML utama
│ ├── package.json # Dependensi library NPM Node.js
│ ├── postcss.config.js # Konfigurasi postcss (Tailwind)
│ ├── tailwind.config.js # Konfigurasi Tailwind CSS
│ ├── vite.config.js # Konfigurasi Vite bundler
│ └── wrangler.toml # Konfigurasi Cloudflare Pages
├── backend/ # Backend API & Bot (FastAPI)
│ ├── api/
│ │ ├── analyze.py # Endpoint `/analyze` FastAPI
│ │ └── leaderboard.py # Endpoint stats, leaderboard, & detail history
│ ├── bot/
│ │ ├── mention_parser.py # Ekstraktor username dari teks tweet bot
│ │ └── x_bot.py # Proses monitoring dan membalas tweet (Bot X)
│ ├── data/ # Folder internal data (e.g. rate limit JSON)
│ ├── schemas/
│ │ └── analysis.py # Schema validasi pydantic (Model Data)
│ ├── services/
│ │ ├── explanation.py # Generator penjelasan via OpenRouter LLM
│ │ ├── feature_extraction.py # Logika metrik hashtag, dll (NLP/Math)
│ │ ├── firebase_service.py # Integrasi database Firestore & global stats
│ │ ├── rate_limits.py # Pengecekan limit akses harian
│ │ ├── scoring.py # Implementasi formula penilaian baku
│ │ └── scraper.py # Wrapper twscrape untuk mengambil tweets
│ ├── tests/
│ │ ├── test_analyze_api.py # Unit test endpoint analyze dan leaderboard
│ │ ├── test_bot_mentions.py # Unit test parser mention bot
│ │ ├── test_confidence.py # Unit test kalkulasi kepercayaan
│ │ ├── test_firebase_service.py # Unit test integrasi Firebase Firestore
│ │ ├── test_rate_limits.py # Unit test rate limiter
│ │ └── test_scoring.py # Unit test algoritma scoring & reducers
│ ├── Dockerfile # Konfigurasi container Hugging Face Spaces
│ ├── main.py # Entry point ASGI FastAPI (Uvicorn)
│ └── requirements.txt # Daftar pustaka Python backend
├── docs/ # Dokumen progres dan manajerial
│ └── PROGRESS.md # Pelacakan status rilis MVP
├── AGENTS.md # Dokumen PRD / Panduan agen AI proyek
├── BRAND_RESOURCES.md # Panduan identitas visual & copywriting
├── DESIGN.md # Spesifikasi teknis desain & UI komponen
├── DESIGN_RESEARCH.md # Logika riset desain (ATM Method)
├── .env.example # Template variabel environment rahasia
├── .gitignore # Daftar file yang diabaikan Git
└── Procfile # Konfigurasi perintah runner production
Berikut adalah mekanisme keamanan yang diterapkan pada proyek Lacak Buzzer untuk menjamin integritas data dan proteksi sistem:
| Fitur / Komponen | Ancaman / Risiko | Solusi & Mekanisme Proteksi |
|---|---|---|
| Kredensial API & Firebase | Kebocoran kunci otentikasi di repositori publik | Kredensial disimpan dalam .env dan backend/secrets/ — keduanya diabaikan melalui .gitignore. Pipeline GitHub Actions dilengkapi dengan Gitleaks untuk menyaring kebocoran rahasia secara otomatis. |
| Docker Container | Celah keamanan (vulnerabilities) sistem operasi di image | Integrasi Trivy Image Scanner pada CI workflow untuk memindai OS/library di backend. Direktori data/ berjalan dengan izin 755 (bukan 777) untuk membatasi akses write hanya pada proses aplikasi. |
| Stateless Tweets | Pelanggaran privasi / memori server penuh | Raw tweets tidak disimpan ke Firestore maupun dikirim ke LLM OpenRouter. Data hanya hidup sementara di memori selama kalkulasi, lalu langsung dibersihkan. |
| Rate Limiting — Website | Pengurasan kuota token OpenRouter & Scraping (DDOS) | Rate limiting lokal berbasis IP: maks 5 permintaan sukses per menit per IP. Menggunakan X-Forwarded-For header untuk membaca IP klien yang sesungguhnya di balik reverse proxy (Hugging Face). |
| Rate Limiting — Bot X | Spam analisis & duplikasi mention | Tiga lapis limit bot: maks 10 reply global/menit, maks 5 request per requester/menit, maks 1 analisis per target/menit. Operasi baca-tulis file JSON dilindungi threading.Lock untuk mencegah race condition pada concurrent requests. |
| Validasi Input Username | Injeksi karakter aneh / input tak terbatas | Setiap username divalidasi dengan regex [A-Za-z0-9_] dan dibatasi maksimum 50 karakter sebelum diteruskan ke scraper. |
| Validasi Mention ID (Bot) | Manipulasi format mention_id / DoS pada file JSON |
mention_id divalidasi sebagai string numerik Twitter (maks 25 digit). List bot_processed_mentions dibatasi maksimum 500 entri terakhir agar file tidak tumbuh tak terbatas. |
| Privasi Log ke Firestore | Penyimpanan IP address pengguna secara permanen di database | Identifier (IP/username requester) dihapus dari execution logs sebelum disimpan ke Firestore. |
| CORS | Akses API dari domain tidak sah | allow_origins di-whitelist secara eksplisit. Method dibatasi hanya GET & POST, header dibatasi hanya Content-Type & Authorization. |
| Manipulasi Skor | Penilaian bias atau salah diagnosis | Penerapan logika Anti-False-Positive Reducers secara permanen. Pengurangan skor otomatis jika variansi semantik tinggi, total tweet harian kecil, atau aktivitas interaksi minim. |
| Bot Polling Backoff | Rate limit ban dari Twitter akibat polling agresif saat error | Bot menerapkan exponential backoff saat terjadi error polling: jeda berlipat ganda per error (1× → 2× → 4× → 8×) dan reset kembali ke normal setelah berhasil. |
| Dependency Pinning | Pembaruan library tak terduga yang membawa breaking changes atau CVE baru | Semua dependency Python di-pin ke versi spesifik di requirements.txt. Dependabot dikonfigurasi untuk membuka PR otomatis setiap ada versi terbaru (setiap Senin). |
Bagi anggota kelompok yang baru bergabung, ikuti langkah-langkah berikut:
-
Clone Repositori
git clone https://github.com/Yogs4R/lacak-buzzer.git cd lacak-buzzer -
Alur Kerja Git (2 Opsi)
Opsi A: Simple Workflow (Pemula) Gunakan alur ini jika tidak ingin pusing dengan branching.
- Siapkan perubahan:
git add . - Simpan perubahan:
git commit -m "pesan singkat tentang fitur/perbaikan" - Ambil update teman:
git pull origin main - Unggah pekerjaan:
git push origin main
Opsi B: Advanced Workflow (Standar Industri) Gunakan alur ini jika sudah terbiasa dengan Git.
- Ambil update terbaru:
git pull origin main - Buat branch fitur:
git checkout -b nama-tugas - Simpan perubahan:
git add .lalugit commit -m "feat: nama tugas" - Unggah & gabungkan:
git push origin nama-tugaslalu buat Pull Request di GitHub.
- Siapkan perubahan:
Semua berkas kredensial sensitif diabaikan oleh Git demi keamanan. Pengembang yang melakukan clone atau fork dapat menyiapkan berkas-berkas berikut menggunakan template .example yang telah disediakan:
| Berkas Asli (Sensitif/Lokal) | Berkas Template (.example) | Tujuan Impor / Penempatan | Fungsi & Keterangan |
|---|---|---|---|
backend/secrets/firebase-key.json |
backend/secrets/firebase-key.json.example |
Letakkan di backend/secrets/ atau copy isinya ke env FIREBASE_CREDENTIALS |
Service Account Google Cloud / Firebase Firestore untuk riwayat pemindaian & leaderboard. (Opsional: jika tidak diisi, backend otomatis jalan dalam mode offline tanpa database). |
backend/twitter_accounts.json |
backend/twitter_accounts.json.example |
Copy seluruh string JSON ke env TWITTER_ACCOUNTS_JSON di .env / Hugging Face Secrets |
Kredensial dan session cookies (auth_token & ct0) untuk scraping X/Twitter tanpa API berbayar. |
backend/accounts.txt |
backend/accounts.txt.example |
Digunakan sebagai input CLI twscrape add_accounts |
Format teks baris (user:pass:email:email_pass) untuk inisialisasi akun scraper secara manual via terminal. |
accounts.db |
(Dihasilkan Otomatis) | Direktori backend atau TWS_DATA_DIR |
Basis data SQLite sesi Twitter. Terbuat secara otomatis saat backend dijalankan jika TWITTER_ACCOUNTS_JSON terisi. |
backend/data/rate_limits.json |
(Dihasilkan Otomatis) | Direktori backend/data/ |
Cache rate limit (IP website & mention bot). Terbuat secara otomatis saat runtime oleh aplikasi. |
Anda dapat menjalankan seluruh stack (Backend FastAPI + Frontend Nginx SPA) secara mandiri hanya dengan satu perintah:
# 1. Salin template konfigurasi environment
cp .env.example .env
# 2. Isi OPENROUTER_API_KEY dan TWITTER_ACCOUNTS_JSON pada file .env
# 3. Jalankan seluruh layanan
docker compose up --build- Website (Frontend): http://localhost:3000
- API Backend & Dokumentasi Swagger: http://localhost:8000/docs
Langkah 1: Setup Awal (Cukup dilakukan sekali) Buka PowerShell, lalu jalankan perintah berikut untuk membuat virtual environment menggunakan Python 3.12:
cd backend
py -3.12 -m venv venv(Jika perintah py tidak dikenali, gunakan python -m venv venv asalkan versi Python adalah 3.12).
Langkah 2: Menjalankan Backend
cd backend
# Aktifkan virtual environment
.\venv\Scripts\Activate.ps1
# Install atau perbarui dependensi
pip install -r requirements.txt
# Jalankan server API
uvicorn main:app --reloadPerintah twscrape CLI (Jika Menyiapkan Akun via accounts.txt):
# 1. Tambah akun dari file accounts.txt
twscrape add_accounts accounts.txt username:password:email:email_password
# 2. Login seluruh akun
twscrape login_accounts
# 3. Cek status akun
twscrape accounts
# 4. Relogin atau reset locks jika terblokir sementara
twscrape relogin
twscrape reset_locksKeluar dari Virtual Environment:
deactivatecd frontend
npm install
npm run devWarning
Status X Bot (@lacakbuzzer): DALAM TAHAP EKSPERIMEN & PENYELIDIKAN (WIP)
Meskipun arsitektur dual-channel (twifork dan twscrape) telah diintegrasikan, deteksi mention otomatis di lingkungan cloud hosting saat ini masih mengalami kendala teknis akibat pembatasan IP data center oleh Twitter/X serta filter kualitas notifikasi internal.
Gunakan Web App Resmi: Untuk analisis instan dan akurat yang 100% aktif dan stabil, silakan gunakan antarmuka web di lacakbuzzer.web.id.
Jika bot dijalankan secara mandiri dengan kredensial cookies yang valid, format balasan otomatis di Twitter/X adalah sebagai berikut:
Risiko: Tinggi | Skor: 74/100
- Kemiripan pesan cukup tinggi
- Pola penggunaan tagar terlihat padat
⚠️ Indikator pola perilaku, bukan bukti koordinasi.
🔍 Cek analisis lengkap & coba gratis di sini:
https://lacakbuzzer.web.id atau mentions @lacakbuzzer
Catatan: Bot X membatasi panjang teks agar ketat berada di bawah batas 280 karakter Twitter/X dengan pemotongan otomatis.
Tip
Cukup mention @lacakbuzzer beserta username target di X/Twitter!
Contoh: @lacakbuzzer analisis akun @detikcom
Bot akan otomatis membalas dengan hasil analisis dalam beberapa saat.
Kami menyambut baik partisipasi komunitas dalam mengembangkan dan menjaga integritas proyek ini:
- 📜 Kode Etik (CODE_OF_CONDUCT.md) — Standar perilaku dan komitmen lingkungan inklusif.
- 🤝 Panduan Kontribusi (CONTRIBUTING.md) — Alur kerja git, standar pengujian, dan pedoman etika analisis.
- 🔒 Kebijakan Keamanan (SECURITY.md) — Tata cara pelaporan kerentanan secara privat dan bertanggung jawab.
- 👥 Daftar Kontributor (CONTRIBUTORS.md) — Pengembang inti dan kontributor komunitas.
Skor yang dihasilkan adalah indikator risiko berbasis pola perilaku, bukan bukti bahwa akun tersebut terkoordinasi, palsu, dibayar, atau memiliki niat tertentu.


