Svo znanje
Learning: Vercel Root Directory + committed memory snapshot (admin/ panel)
protos-agent-vercel-root-dir-admin·Protos-Agent
vercelroot-directorynextjs16memory-data-snapshotprepare-memory
Learning: Vercel Root Directory + committed memory snapshot (admin/ panel)
Kontekst: Protos-Agent admin/ je Next.js 16 app koji na Vercelu builda s
Root Directory = admin/. Panel mora čitati Protos-Agent/memory/ (sessions,
learnings, projects, index.jsonl) za memory hub.
Problem
- Vercel, kad mu je Root Directory
admin/, NIJE u stanju čitati fajlove izvan root dir-a na build time (process.cwd()=/vercel/path0, a../memoryne postoji). - Dinamički filesystem pristup (
fs.readdir/readFileSync) u build time na Vercelu puca ili daje prazno — statička generacija ruta ovisi o podacima koji moraju biti unutar root dir-a.
Rješenje: committed memory-data/ snapshot
Protos-Agent/
memory/ ← izvorna, git-versionirana baza znanja (izvan root dir)
admin/
memory-data/ ← COMMITTED snapshot (statički scoped data root)
prepare-memory.mjs ← prebuild hook
prepare-memory.mjs(prebuild):- Kad je source
../memorydostupan (lokalni dev/build) → obriši i regenerirajmemory-data/snapshot iz izvorne memorije. - Kad source ne postoji (Vercel) → NIŠTA ne diraj; koristi committed snapshot.
- Kad je source
- Ključni bug koji je ubio prve deploye: skripta je BEZUVJETNO brisala
snapshot (
rm(target, recursive)) prije provjere da li source postoji. Na Vercelu source nema → snapshot nestane → build puca. Fix: brisati+regenerirati samo ako source postoji. .gitignoremora dopuštatimemory-data/(committed!) dok ignorira/out/,/node_modules/,.next/, itd.
Pravila
- Kad gradiš Next.js app na Vercelu s Root Directory subfolderom, svaki podatak koji treba statička generacija MORA biti unutar tog root dir-a — bilo izvorno ili kroz committed snapshot.
- Prebuild hook mora biti idempotentan i siguran na Vercelu: ako source
ne postoji, ne smije ništa brisati. Provjera
fs.existsSync(source)prije svakogrm. - Snapshot se regenerira lokalno (
npm run prebuildili build) i commit-a zajedno s izmjenama memorije — inače live panel ne odražava novu memoriju. - Za memory hub podatke koristi statički scoped root (
memory-data/), nepath.join(process.cwd(), '../memory').
Kada koristiti (i kada ne)
Da:
- Next.js app koji čita podatke izvan vlastitog Root Directory-ja na Vercelu
- Admin panel / dokumentacijski hub s commit-iranim podacima (JSON/MD snapshot)
Ne:
- Kada root dir appa SADRŽI sve podatke (nema snapshota ni
../pristupa) - Kada su podaci u Supabase/DB (tada se dohvaćaju runtime, ne build time)
Zapamti
- Vercel Root Directory = subfolder koji Vercel builda kao zaseban app.
prepare-memory.mjsfix:1e175f3("ne briše snapshot kad ../memory ne postoji").- Live panel: https://admin-jet-xi.vercel.app