Versi: 1.0 — 2026-04-19 Status: HIDUP — update setiap kali ada incident atau best-practice baru Audience: developer kontributor + Claude agent + maintainer
Privasi user adalah amanah. Server adalah aset. Identitas owner adalah hak privat. Pelanggaran salah satu = pelanggaran kepercayaan.
SIDIX dibangun di atas IHOS — Hifdz al-Nafs (jaga jiwa) termasuk jaga data pribadi. Maqashid Syariah eksplisit: data user = bagian hifdz al-nafs.
- ✅ Anonimisasi ID user di log (UUID hash, bukan email/nama)
- ✅ Encryption at rest untuk database (Supabase default OK)
- ✅ HTTPS only (TLS via Cloudflare/Let's Encrypt)
- ✅ Rate limit per IP (anti abuse + DOS)
- ✅ Default opt-out untuk training corpus contribution
- ✅ Right to delete: user bisa request hapus data mereka
- ❌ Log konten chat user ke file publik
- ❌ Bagikan log ke 3rd party tanpa izin user explicit
- ❌ Simpan password/token user dalam plaintext
- ❌ Tracking analytics pihak ke-3 default ON
- ✅ SSH key auth (no password) untuk admin
- ✅ UFW firewall: port 22 (SSH), 80, 443 (HTTPS), 8765 (backend localhost-only)
- ✅ Fail2ban untuk brute force prevention
- ✅ Auto-update security patches (
unattended-upgrades) - ✅ Backup harian database + corpus (off-site)
- ✅ Monitor disk usage (alert >80%)
- ❌ Expose IP server di public file (CLAUDE.md, README, research notes publik)
- ❌ Expose admin port (PM2 dashboard, aaPanel) ke public
- ❌ Hardcode credentials di kode atau Dockerfile
- ❌ Default password (PostgreSQL/Redis/SSH)
- IP address (gunakan placeholder
<server-ip>) /opt/sidix/...paths absolut (gunakan<repo-root>)- Aapanel admin URL/port
- Supabase project URL spesifik (gunakan
<supabase-url>)
Owner SIDIX = Mighan Lab untuk public-facing.
- Nama asli pribadi (Fahmi, Wolhuter)
- Email pribadi (
*@gmail.com,*@yahoo.com, dll) - Threads handle pribadi (
@fahmiwol, dll) - Telpon, alamat, dokumen ID
- Email:
contact@sidixlab.com - Threads:
@sidixlab - Domain:
sidixlab.com - Org name:
Mighan Lab
LLM provider eksternal (Groq, Gemini, Anthropic) TIDAK BOLEH disebut
di public output. Pakai alias via apps/brain_qa/brain_qa/identity_mask.py:
| Internal | Public-Facing Mask |
|---|---|
| groq, groq_llama3 | mentor_alpha |
| gemini, gemini_flash | mentor_beta |
| anthropic, claude-3-* | mentor_gamma |
| openai, gpt-4 | mentor_delta |
| ollama, qwen2.5 | sidix_local |
| pollinations | image_engine_free |
| gtts | tts_engine_free |
- ❌ TIDAK ekspose
llm_providersliteral - ✅ Ekspose
internal_mentor_poolaggregate (ready/redundancy_level)
- ✅ Setiap claim diberi label epistemik (
[FACT]/[OPINION]/[SPECULATION]/[UNKNOWN]) - ✅ Sanad chain di setiap research note (CAS hash + Merkle root via
sanad_builder.py) - ✅ Mentor LLM disebut sebagai
mentor_alpha/beta/gammadi sanad publik - ✅ Quality gate sebelum publish (≥6 findings, narrative ≥250 char, no mock)
- ❌ Ekspose system prompt internal di output ke user
- ❌ Konfirmasi/sangkal nama provider real di chat
- ❌ Output yang membahayakan user (advice medis tanpa disclaimer, dll)
- ❌ Konten yang melanggar Maqashid Syariah (cek via
maqashid_filter.py— TODO)
# Quick audit:
git diff --cached | grep -iE "fahmi|wolhuter|72\.62|fkgnmrnckcnqvjsyunla|password=|api_key=|secret=|gmail\.com|@fahmiwol"Kalau ada match → STOP, bersihkan dulu.
.env
.env.local
*.key
*.pem
*.p12
secrets/
.kaggle/
.aws/
.ssh/
node_modules/
__pycache__/
*.pyc
.DS_Store
.env.sample(template tanpa value)kaggle.json.sampleapps/brain_qa/scripts/*.sh(asal tidak hardcode credentials)- Markdown docs publik
.env(real values)kaggle.json(real)*.tar.gzmodel adapter dengan training data- Dataset user yang punya PII
Audit checklist (run setiap kali deploy):
- Tidak ada nama owner pribadi di copy/meta tags
- Tidak ada email pribadi (gunakan contact@sidixlab.com)
- Tidak ada IP server di privacy.html / footer
- Schema.org author =
Organization "Mighan Lab"(bukan Person nama) - Twitter/Threads handle =
@sidixlab(bukan handle pribadi) - Form placeholder generic ("Nama kamu", bukan nama spesifik)
- Bahasa generic, tidak sebut nama provider eksternal
- Pakai istilah "internal mentor pool", "reasoning_pool", "image engine free"
- USP unik tetap dimention (sanad/standing-alone/opensource)
- Immediate: rotate credential yang bocor (API key, password, dll)
- Within 1 hour: identify scope (mana saja file yang expose)
- Within 24 hours:
- Public statement (jika user data terdampak)
- Force-push history clean (kalau commit baru, sebelum lebih banyak fork)
- Update SECURITY.md dengan lesson learned
- Post-mortem di
docs/incidents/<date>_<topic>.md
- Disable affected user account (
passwd -l) - Snapshot disk untuk forensic
- Rebuild dari backup terakhir yang clean
- Notify user terdampak
- Email:
security@sidixlab.com(ataucontact@sidixlab.comkalau yang pertama belum live) - PGP key: TODO publish
- Scan repo untuk credential bocor (TruffleHog / git-secrets)
- Check disk usage server (
df -h) - Backup integrity verify (restore test ke staging)
- Review
apps/brain_qa/.data/sidix_sanad/*.json— pastikan tidak ada PII - Review CHANGELOG drafted (sebelum publish) — opsec check
- Update CLAUDE.md + SECURITY.md kalau ada pattern baru
brain/public/research_notes/142_sidix_entitas_mandiri_guru_menciptakan_murid_hebat.md— mandate mandiribrain/public/research_notes/143_opsec_masking_dan_lora_pipeline_sprint20m.md— opsec maskingbrain/public/research_notes/128_identity_shield_adversarial_thinking.md— identity shieldapps/brain_qa/brain_qa/identity_mask.py— implementasi maskingdocs/SIDIX_BIBLE.md— Pasal "Identity Shield (Opsec)"CLAUDE.md— Aturan Keras #7 (Security Mindset)
Privasi adalah komitmen, bukan checklist. Setiap kali kamu edit kode atau tulis copy publik, tanyakan 3 hal:
- Apakah ini ekspose info user yang seharusnya privat?
- Apakah ini ekspose info infrastructure yang bisa dieksploitasi?
- Apakah ini ekspose identitas owner yang seharusnya anonim?
Kalau jawaban "ya" untuk salah satu → STOP, masking dulu, baru commit.
Kalau ragu → tanya. Lebih baik delay 1 jam daripada leak 1 detik.