# Changelog `@ralyoo/sdk`

Mengikuti [semver](https://semver.org/lang/id/). Aturan kompatibilitas antara versi SDK game dan platform ada di [COMPATIBILITY.md](kompatibilitas.md).

## 1.1.0 (belum dirilis)

SDK jadi paket yang bisa dipasang di luar repo Ralyoo (AZKA-287).

### Ditambahkan

- **Lisensi MIT.**
- **Paket mandiri.** Hasil build `dist/` (ES module + deklarasi tipe), tanpa dependensi runtime. `vite` hanya peer dependency opsional untuk `@ralyoo/sdk/vite`.
- **Manifest lengkap** (`@ralyoo/sdk/manifest`): `title`, `description`, `controls`, `badge`, `author`, dan `media` (`icon`, `cover`, `color`) di `ralyoo.json`. Batas teks mengikuti yang muat di lobi: `title` ≤ 22 karakter (satu baris), `description` ≤ 100 (dua baris). `validateManifest()` memeriksanya terhadap `MANIFEST_SCHEMA`; skema yang sama terbit sebagai `@ralyoo/sdk/schema.json`.
- **Kontrak katalog** (`@ralyoo/sdk/catalog`): bentuk `/catalog.json` yang diterbitkan registry dan dibaca host-shell, plus `readCatalog()` yang membuang entri tidak valid satu per satu. Folder bundel boleh berupa path di origin host atau URL `https:` (bucket sendiri).
- **Aturan bundel** (`@ralyoo/sdk/bundle`): isi wajib, tipe file yang boleh, batas ukuran, dan pemeriksaan skrip (`checkBundle`, `checkScript`).
- **Harness tes** (`@ralyoo/sdk/testing`): `createTestHost(game)` menjalankan game terhadap runtime dan bridge yang asli tanpa browser, relay, atau HP.
- **`ctx.gameId`, `ctx.locale`, `ctx.platformSdk`.**
- **`BUTTON_BITS` dan `isDown(state, 'A')`** untuk membaca `ctx.input(player).buttons`.
- **Statistik frame** untuk HUD performa: platform meminta (`perf`), SDK mengukur di dalam iframe dan melapor sekali per detik. Mati secara bawaan, jadi tanpa biaya saat main biasa.
- `@ralyoo/sdk/semver`: `satisfies(version, range)` untuk rentang `sdk` di manifest.
- `@ralyoo/sdk/widgets` dan `@ralyoo/sdk/vendor`: kontrak layout controller dan daftar pustaka bersama, sebelumnya paket internal.

### Diubah

- `gameViteConfig()` ikut menyalin `ralyoo.json` ke `dist/`, sehingga `dist/` adalah isi bundel apa adanya.
- `defineGame()` di luar browser (tes unit) mengembalikan definisinya tanpa mencari platform.

### Kompatibilitas

Kontrak pesan tetap mayor 1. Game yang dibangun dengan 1.0.0 jalan di platform 1.1.0 tanpa perubahan, dan sebaliknya (lihat COMPATIBILITY.md).

## 1.0.0

Versi yang dipakai empat game pertama di monorepo: `defineGame`, `ctx` (pemain, controller, `end`/`exit`, audio, aset, storage, input, random, i18n), hook alur layar (`onPause`/`onResume`, `end(…, { screen: 'game' })`, `opening`, `theme`), dan `ResolutionGovernor`.
