ws.agency
Ilustrativni predložak · illustrative sample. Cijeli izvještaj u nastavku izmišljen je primjer o projektu „Zelena šuma” koji pokazuje sadržaj i dizajn predloška; projekt, datumi, brojke, grane i nalazi nisu stvarni. Prije objave zamijenite projekt, datume, brojke, nalaze, naredbe, tablice, dijagrame, opise i zaključke vlastitim provjerenim sadržajem. Source: https://claude.ai/artifact/75nqtTCiuAjAK5NvDhEHUz. Design copied from the supplied published source; ws.agency branding added. No Claude toolbar or runtime is included.

Presjek stanja · 20. 7. 2026.

Presjek Zelena šuma

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.

grana
18 commita nespojeno
main otišao dalje
11 commita
shema: main / grana
V2 → V5
testovi na grani
212 + 187

01Gdje smo stali

Zadnji commit na našoj grani je 24. 6. Nakon toga su se dogodile dvije stvari koje nisu bile planirane.

4be19c0 2. 6. PR #21 · 9. 7. karta, filteri, prijave PR #22–24 · 11. 7. AGENTS.md, zaglavlje 16. 7. docs → statički host origin/main shema V2 · spojeno V3 · GPS import + GeoJSON slojevi V4 · više timova + smjene V5 · lokacije parcele, rasadnici zs-karta-sadnje shema V5 · bez PR-a ista funkcija dvaput: odabir lokacije sadnje
Dvije linije od iste baze. Gore: main je dobio srpanjske PR-ove i ostao na shemi baze V2. Dolje: naša grana nosi sheme V3–V5 i četiri nova modula, ali nikad nije predložena za spajanje. Crtkana crvena linija je isti posao obavljen dvaput.

Glavno18 commita nikad nije dobilo pull request

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.

SukobOdabir lokacije sadnje napravljen je dvaput, različito

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.

Druga granaOgraničenje prijava od 3. 7. također visi nespojeno

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.

02Kako povući zadnji kod

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.

Preporuka za razrješenje: uzmi mainovu verziju odabira lokacije (karta + 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.

03Kako sustav radi

Tri aplikacije nad jednom jezgrom. Osobni podaci volontera nikad ne izlaze van — baza ih čuva, objava rendera javni katalog, sync nosi samo njega.

Prijave web obrazac mobilna aplikacija uvoz iz tablice (CSV) signups Baza volonteri, akcije timovi i smjene karte, izvozi data/zs.db Javni katalog akcije, karta, broj sadnica, bez imena public/akcije Portal statičke stranice, karta akcija, prijave posjetitelji Interni arhiv popisi, kontakti suglasnosti.json arhiv/ Koordinatori preuzimaju popise i smjene, vode akciju upis provjera i potvrda objava sync · web pull · full sync · full zaobilazi objavu imena se nikad ne objavljuju
Dva opsega synca, dva različita izvora. Web nosi javni katalog — akcije, kartu i brojke koje portal pokazuje. Full ide iz baze direktno, zaobilazi objavu i nosi popise, kontakte i suglasnosti u interni arhiv na istom serveru, pa koordinatori mogu voditi akciju. Portal taj prostor nikad ne poslužuje.

Tri aplikacije

04Shema baze

SQLite u data/zs.db, 16 tablica, migracije V1→V5 u jednoj transakciji. Stupac „verzija" kaže kad je tablica dodana.

tablicaverzijačemu služi
volunteersV1volonteri: ime, kontakt, suglasnost, vještine, dostupnost
actionsV1akcije sadnje: lokacija, datum, broj sadnica, koordinator, opis
action_volunteersV1prijave i poredak — popis je pogled, ne kopija
plantingsV1zapis sadnje po parceli (samo dodavanje, nikad brisanje)
species, planting_species, action_tagsV1vrste drveća; planting_species ožičen tek s GPS importom
settings, schema_versionV1konfiguracija udruge, org_id
action_syncV2 → V4pretplate; u V4 ključ postaje (akcija, tim) + scope
published_filesV2 → V4što je portal objavio; u V4 po odredištu objave
sync_stateV2 → V4baselines za sync; u V4 po timu
gps_tracks, parcel_linksV3provenance GPS importa — zato je ponovni import sinkronizacija
teamsV4više timova po akciji, s koordinatorom u bazi
shiftsV4smjene i kapaciteti po timu
locationsV5više lokacija: parcele, rasadnici, zbirna mjesta
Migracijska zamka koja je već uhvaćena: V5 prepravlja tablicu 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.

05Rupe u projektu

Poredano po tome što te može stvarno ugristi.

1Pet tjedana nespojenog rada, i to se povećava

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.

2backup.sh nikad nije isproban na vraćanju

Noć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.

3GPS čitač nikad nije vidio pravi zapis s terena

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.

4Mobilna aplikacija nije zapakirana

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š.

5Svjesne odgode

06Cilj po zadnjim planovima

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š.

Tri pravila koja to drže na mjestu

GeoJSON, kako je odlučeno: razmjenski format, ne izvor istine. Standardna polja (koordinate, naziv, površina parcele) su javna i svi alati ih čitaju — njih uvozimo i izvozimo. Podaci o volonterima u GeoJSON-u ne mogu biti javni: to su osobni podaci, pa idu pod vlastiti zs: prostor imena — nama čitljiv svugdje, a u javni izvoz nikad ne ulazi. Baza ostaje autoritet.

07O sastancima

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.