Presjek stanja · 20. 7. 2026.
Lipanjski rad na karti sadnje nikad nije spojen u main, a main je u srpnju otišao dalje — i jednu funkciju sad imamo napravljenu dvaput. Ovdje je točno stanje, kako se povlači zadnji kod, kako sustav radi, koja je shema, gdje su rupe i što je cilj po zadnjim planovima.
Zadnji commit na našoj grani je 24. 6. Nakon toga su se dogodile dvije stvari koje nisu bile planirane.
Grana feature/zs-karta-sadnje stoji od 24. 6. PR-ovi #13–#24 su svi spojeni; naša grana i jedna grana s ograničenjem prijava su jedine dvije bez PR-a. Kompletan lipanjski rad — GPS import, više timova, smjene, lokacije — postoji samo na toj grani. Na mainu je SCHEMA_VERSION = 2 i moduli gps, teams, shifts, locations ne postoje.
PR #21 (9. 7., spojen) radi odabir s karte, s JS modulom web/src/map-picker.js i testovima (tests/map-picker.test.ts). Naša grana radi isto iz popisa parcela, s registrom na strani jezgre (locations.json, funkcije known_locations / forget_location). Obje verzije rade; samo jedna može ostati.
fix/zs-prijave-limit — jedan commit, 9 datoteka, +184/−52: uvodi gornju granicu prijava po smjeni i obavijest koordinatoru, dira api/signup.ts, api/shifts.ts i testove. Sukobljava se s našom granom na 3 mjesta, jer su obje dirale endpointe za prijave.
Jezgra se spaja čisto. Sukobi su samo u sučelju i dokumentaciji — pet datoteka.
git fetch origin --prune
git checkout feature/zs-karta-sadnje
git merge origin/main
Taj merge javlja 5 sukoba: .gitignore, README.md, mobile/src/screens/Karta.tsx, web/src/karta.js, web/src/index.html. Sve ostalo — cijeli zs-core s migracijama V3/V4/V5 — spaja se automatski, što je i najvrjedniji dio.
map-picker.js) i odbaci našu verziju s popisom parcela — mainova je već u produkciji, pokrivena testovima i uklapa se u ostatak sučelja koji je otišao na kartu. Zadrži sve ostalo s grane. Isto vrijedi za README.md: main je upute za agente prebacio u AGENTS.md, pa naše izmjene dokumentacije idu u tu datoteku.
Nakon toga ide PR. Granu s ograničenjem prijava treba spojiti prvo (manja je i starija), pa onda našu na već spojen main — obrnutim redom razrješavaš iste sukobe oko prijava dvaput.
Tri aplikacije nad jednom jezgrom. Osobni podaci volontera nikad ne izlaze van — baza ih čuva, objava rendera javni katalog, sync nosi samo njega.
data/, nikad se ne deploya.zs-core nosi svu logiku: 58 funkcija u Session, 34 izložene kroz HTTP API za portal i admin panel.SQLite u data/zs.db, 16 tablica, migracije V1→V5 u jednoj transakciji. Stupac „verzija" kaže kad je tablica dodana.
| tablica | verzija | čemu služi |
|---|---|---|
| volunteers | V1 | volonteri: ime, kontakt, suglasnost, vještine, dostupnost |
| actions | V1 | akcije sadnje: lokacija, datum, broj sadnica, koordinator, opis |
| action_volunteers | V1 | prijave i poredak — popis je pogled, ne kopija |
| plantings | V1 | zapis sadnje po parceli (samo dodavanje, nikad brisanje) |
| species, planting_species, action_tags | V1 | vrste drveća; planting_species ožičen tek s GPS importom |
| settings, schema_version | V1 | konfiguracija udruge, org_id |
| action_sync | V2 → V4 | pretplate; u V4 ključ postaje (akcija, tim) + scope |
| published_files | V2 → V4 | što je portal objavio; u V4 po odredištu objave |
| sync_state | V2 → V4 | baselines za sync; u V4 po timu |
| gps_tracks, parcel_links | V3 | provenance GPS importa — zato je ponovni import sinkronizacija |
| teams | V4 | više timova po akciji, s koordinatorom u bazi |
| shifts | V4 | smjene i kapaciteti po timu |
| locations | V5 | više lokacija: parcele, rasadnici, zbirna mjesta |
actions, a DROP TABLE uz uključene foreign keyeve kaskadno obriše svaku prijavu na akciju i svaki zapis sadnje. Migracija se zato zagrađuje s PRAGMA foreign_keys OFF. Bez toga se baza otvori bez greške — nad ispražnjenim popisom akcija.
Poredano po tome što te može stvarno ugristi.
Svaki dan bez spajanja znači više divergencije i veću šansu da se neka funkcija napravi dvaput — što se već dogodilo. Dok se ne spoji, GPS import, više timova i lokacije ne postoje u ničemu što pokrećeš s maina.
backup.sh nikad nije isproban na vraćanjuNoćna kopija baze radi se uredno i skripta javlja uspjeh, ali vraćanje iz kopije nikad nije isprobano na čistom serveru. Ako je kopija nepotpuna, to ćemo saznati tek kad nam zatreba. Jedna proba vraćanja na testnom serveru je jedina prava potvrda.
Testiran je nad fixture .gpx datotekom koju smo sami generirali po razumijevanju formata. zs gps scan <tvoj.gpx> ništa ne piše — to je prvi korak koji ja ne mogu odraditi umjesto tebe.
build je konfiguriran za apk i aab, ali nema potpisnog ključa — ovdje postoji samo debug build. Bez potpisa je trgovina aplikacija odbija. Gradi se i pokreće iz izvora; poslati je volonterima još ne možeš.
SyncOutcome.rejected i signup_conflicts vide se u CLI-ju, ne u sučelju.Iz dev-docs/plan-timova.md, kako je dogovoreno 3. 6.
Cilj je koordinacija više timova, lokacija i akcija sadnje, gdje nijedna operacija ne objavljuje osobne podatke volontera osim ako to izričito ne zatražiš.
web) i istovremeno je kanal za sync među koordinatorima (full — popisi sa svim detaljima). To je ono „ono što se vidi na portalu i ono što se ne vidi".web opseg za pregled, koordinator full za vođenje akcije.action_id, svaki tim team_id. Provenance ide u izvještaje operacija, nikad u sinkronizirani sadržaj: id pojedinog uređaja unutar sinkroniziranog dokumenta znači da ista akcija izgleda različito na svakom uređaju i dvije strane si je zauvijek prebacuju. To se doslovno dogodilo i uhvaćeno je u reviewu.Session funkcije s istim invarijantima. Nijedan novi put pisanja ne zaobilazi jezgru.zs: prostor imena — nama čitljiv svugdje, a u javni izvoz nikad ne ulazi. Baza ostaje autoritet.
Provjerio sam kalendar: 12 sastanaka je u lipnju i srpnju, ali kalendar je zajednički za cijelu udrugu i naslovi ne kažu kojem projektu sastanak pripada — od njih se za ovaj projekt sigurno vežu „Pokretanje karte sadnje” (2. 6.), „Timovi i smjene” i „Probna akcija” (oba 24. 6.), a srpanjski niz „Priprema sezone” (14.–16. 7.) vremenski odgovara prelasku dokumentacije na statički host, ali to iz naslova ne mogu potvrditi.
Pouzdan zapis je git: PR-ovi #13–#24 spojeni, dvije grane bez PR-a. Po tome je slika jednoznačna i ne ovisi o tome tko je na kojem sastanku što dogovorio.