Skip to content

Latest commit

 

History

History
127 lines (93 loc) · 4.66 KB

File metadata and controls

127 lines (93 loc) · 4.66 KB

Pertanyaan matang sebelum export v1 (Fase DS)

Status: dikunci 2026-09-26 (default plan DS; override hanya via PR). Fase B (Flutter SQLite) tidak dimulai sampai gate DS hijau.

Legenda: [x] dikunci.


A. Ruang lingkup & identitas artifact

  1. Repo: sambasku/database = satu-satunya sumber publik dataset (bukan monorepo, bukan backup).
  2. Sumber export pertama: staging. Production belakangan (channel sama / Release berikutnya setelah siap).
  3. Lisensi: MIT di root cukup untuk v1; notice data bisa menyusul di README bila legal minta.
  4. Trigger Release DS: maintainer CLI / workflow_dispatch saja. Console = Fase D.

B. Tabel: boleh masuk / tidak

  1. Allowlist v1.md cukup untuk search + detail + list A-Z v1.
  2. Count sosial / vote / komentar: tetap API (bukan snapshot).
  3. discussions permanen di luar dataset (API + L1).
  4. Referensi (languages, dialects, word_classes, categories): export semua baris aktif (deleted_at IS NULL).

C. Kolom & PII (termasuk users)

  1. users: Tidak diekspor (tabel penuh).
  2. Atribusi offline: (A) kosong di L2 (tanpa "dibuat oleh").
  3. N/A (karena A).
  4. Semua FK *_by strip.
  5. Metadata takedown / soft-delete strip (baris sudah di-filter).
  6. notes pada words/meanings/examples: ikut (anggap publik).
  7. lemma_allows_comma / translation_allows_comma: tidak masuk L2.
  8. Images/audios: url + metadata tampilan; provider / provider_file_id / sha tidak masuk.

D. Filter baris & status anak

  1. Anak: status = 'published' + deleted_at IS NULL (jika kolom ada).
  2. Meaning placeholder (- / is_have_definition = false): tetap masuk.
  3. Relasi: kedua ujung published; lag takedown sampai release berikutnya = OK.
  4. Browse A-Z filter kasar/diskriminatif: di query konsumen (Fase B); export tetap full published.

E. FTS & parity search

  1. Tokenizer FTS5: unicode61.
  2. Kolom FTS: lemma + variant forms + translation text (bukan definition/examples di v1).
  3. Search lokal v1: FTS (kontrak); hybrid LIKE boleh ditambah di B bila parity kurang.
  4. Ranking lokal boleh beda dari API di v1 (dokumentasikan).
  5. matched_variant / matched_translation: wajib diusahakan parity di konsumen B; export cukup data sumber (variants + translations).

F. Evolusi schema

  1. Kolom non-breaking (nullable): tetap schema_version = 1 + release data.
  2. Breaking (wajib/rename/hapus): naik schema_version + min_app_version.
  3. Tabel baru production: default tidak masuk sampai allowlist + tes.
  4. App lama tolak schema lebih tinggi: copy "Perbarui aplikasi" (Fase B); diam di DB lama sampai update.
  5. Device: selalu full replace (bukan ALTER).

G. Rilis, ukuran, frekuensi

  1. Pointer: metadata/active.json.
  2. Gzip > ~12 MB: warning saja, boleh lanjut.
  3. SLA: on-demand (maintainer); sensitif takedown = release segera.
  4. Sha256 sama dengan aktif: jangan buat Release baru.
  5. Satu repo; field opsional channel di manifest nanti bila perlu (v1 = staging dulu).

H. Keamanan & anti-pola

  1. Tes forbidden wajib. Assert minimal: tabel users, auth_identities, refresh_tokens, contributions, audit_logs, votes, comments, bookmarks, discussions; kolom created_by, updated_by, deleted_by, verified_by, taken_down_by, takedown_reason_code, takedown_note, password_hash, email.
  2. Larangan keras sudah di README; CODEOWNERS opsional menyusul.
  3. Search-miss analytics: hanya jalur remote (kontrak B).

I. Hybrid A & konsumsi (kontrak B, dikunci di DS)

  1. Hybrid A tetap (search CTA; feed/deep-link remote-once + badge).
  2. Remote-once tidak ditulis ke file SQLite release.
  3. First-run B: URL dari https://raw.githubusercontent.com/sambasku/database/main/metadata/active.json

Ringkas jawaban

# Jawaban
1-4 Repo database; staging dulu; MIT; CLI trigger
5-8 Allowlist v1; sosial/TH = API; ref = semua aktif
9-16 No users; atribusi kosong; strip *_by/takedown; no comma flags; media URL only
17-20 Child published; placeholder OK; browse filter di konsumen
21-25 unicode61; lemma+variant+translation; ranking beda OK
26-30 Non-breaking = v1; breaking naik schema; full replace
31-35 active.json; warning ukuran; on-demand; skip bila sha sama
36-41 Tes forbidden; Hybrid A kontrak; active.json raw URL