diff --git a/CLAUDE.md b/CLAUDE.md index 051c351..c19801f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -7,6 +7,29 @@ Git: github.com/goon-foss/goon (remote: `goonfoss`). Public OSS repo. 18+ — se --- +## Zmiany mobilne (Expo) → publikuj przez OTA, nie zostawiaj w gicie + +Klient `mobile/` (React Native + Expo) aktualizuje się przez **self-hosted Expo Updates (OTA)**, nie przez sklep ani rebuild APK. Zmiany JS (ekrany, komponenty, `api.ts`) lecą silent. + +**KRYTYCZNE: `git commit` NIE publikuje OTA.** Sam commit (ani push) nie zmienia NIC na telefonie. Po zmianie w `mobile/` trzeba zbudować bundle i opublikować: + +``` +# z roota repo; konkretne wartości env w .env.local / prywatnej pamięci (NIE hardcoduj IP tutaj) +GOON_VPS_SSH= GOON_VPS_UPDATES_DIR=/root/goon/app/static/expo-updates \ +GOON_PUBLIC_UPDATES_URL=https://api.goon-foss.org/expo-updates/asset \ +python scripts/publish_update.py --runtime 1.1 +``` + +Skrypt: `expo export` (build) → scp bundla na VPS pod `app/static/expo-updates///` → przełącza `current.json` (endpoint `GET /expo-updates/manifest` serwuje aktywny). Apka pobiera przy następnym launchu. + +Reguły: +- **runtime = `1.1`** (== `runtimeVersion` w `app.json`/APK). Bump TYLKO przy native change (wtedy też nowy APK przez PackageInstaller). `RUNTIME_DEFAULT` w skrypcie = 1.1. +- **Apply dwustopniowy**: 1. launch pobiera w tle, 2. launch aplikuje → po publish **restart apki 2×**. +- **Publish odpala AI** (nie człowiek, nie git-hook). Skrypt działa one-shot też na Windows git-bash (fix 2026-06-02: scp source `.`+`cwd=DIST`, `MSYS_NO_PATHCONV`, defensywne odkręcanie zmanglowanej ścieżki). +- **Backend (`app/`) to OSOBNY deploy** — scp `app/`→VPS + `docker compose restart` (worker/api). NIE przez OTA. `./app` i `./scripts` są wolumenami w compose, więc restart wystarcza (bez rebuildu obrazu). + +--- + ## Kanban (auto-aggregation) Ten workspace ma własny Kanban (custom tracker type `kanban` w `.nimbalyst/trackers/kanban.yaml`) z kolumnami: