Status: Accepted Datum: 2026-05-07 Oblast: Stopa B / Workspace management
Context
Situace
TalkIDE workspace umožňuje userovi vytvářet projekty. Mara tým (Theo, Eli, Mara) generuje zdrojový kód, který žije v per-project working tree na NFS:
/projects/<slug>/
├── .talkide/
├── src/
└── ...
Otázka: Jak verzovat user-generated code? Kde žije Git?
Verzování je klíčové pro:
- možnost rollbacku (“vrat co jsi rozbil”)
- auditní stopu taskCompletion Mařina workflow
- budoucí export feature (“pošli mi to na GitHub”)
Uvažované varianty
Varianta 1 — Git inside NFS, lokální only (zvolená)
.git/ adresář žije přímo v /projects/<slug>/. Žádný external remote.
Všechny git operace jsou čisté FS operace nad NFS.
Varianta 2 — Git inside NFS + auto-push na external remote (GitLab / GitHub)
Po každém taskCompletion by Mara automaticky pushovala na remote.
Odmítnuto — viz Reasons níže.
Varianta 3 — External Git only (žádný lokální .git) Working tree by neměl lokální historii; vše by šlo přímo do remote přes API. Odmítnuto: každý commit = auth roundtrip na external service, latence, složitost, závislost na dostupnosti external providera.
Varianta 4 — Custom DB-backed versioning Vlastní implementace verzování v Postgres (snapshoty, diffy). Odmítnuto: zbytečné reinventování kola. Git tuto doménu řeší lépe a robustněji.
Decision
Git inside NFS, žádný external remote auto-push.
Per-project Git lifecycle
| Operace | Git akce |
|---|---|
| Create Project UC | git init v projectDir + generování .gitignore + initial commit |
| Mara taskCompletion | git add . && git commit -m "<descriptive message>" (plugin script) |
| Delete Project UC | rm -rf /projects/<slug>/ — smaže i .git |
| User prohlíží historii | future UI feature — git log read-only (post-MVP) |
Co explicitně NEDĚLÁ alfa verze
git remote add— žádný remote se nepřidávágit push— žádný auto-push nikam- Žádná integrace s GitLab / GitHub / Bitbucket v alpha fázi
Důvody odmítnutí auto-push (Varianta 2)
Privacy — “private playground” filosofie
TalkIDE je soukromé prostředí pro iteraci. User code nesdílíme bez explicitního user action. Auto-push by vystavoval code externímu systému bez vědomého souhlasu při každém tasku.
Product positioning — curated export
Git history generovaná Marou obsahuje iterační bugfixes typického AI workflow:
"fix: missing import", "oops typo in SQL", "Eli rewrite endpoint".
Tyto commity jsou interně hodnotné (rollback, audit), ale nereflektují profesionální
obraz TalkIDE-generated kódu.
Budoucí “Export to GitHub” feature (talkide-be#42) bude curated — TalkIDE squash-mergne iterační commity a připraví čisté commit messages před push. Raw auto-push by tento UX záměr sabotoval.
Workflow simplicity
Mara (plugin script) nemusí řešit auth tokeny k external provideru, push errors, merge conflicts s remote, nebo rate limity. Všechny git operace jsou lokální FS volání — vždy úspěšné (pokud NFS dostupný), deterministické, bez sítě.
User lock-in mitigation
Neexistence auto-push neznamená, že user nemůže code dostat ven — znamená to, že export je vědomá akce s curated výsledkem. Toto je feature, ne bug.
HARD RULES
- Git je lokální. Žádný auto-push. Ani Mara, ani BE, ani žádný plugin script nesmí bez explicitního user action pushovat na external remote.
- Backup je separátní zodpovědnost (talkide-infra#12). Git lokální history není backup — NFS crash = ztráta dat. Backup strategie musí být vyřešena před public alpha.
- Future export = curated (talkide-be#42). Implementace exportu nesmí být
raw
git push origin main. Vždy squash + polish.
Consequences
Pozitiva
- Zero-config pro user — user nemusí mít GitHub účet, nevyplňuje tokeny, nic nenastavuje. Git funguje transparentně na pozadí.
- Jednoduchý Mara workflow — plugin script je prostý
git commitnad lokálním FS, žádné auth, žádné error handling pro network failures. - Privacy-friendly — user code neopouští TalkIDE infrastrukturu bez vědomé akce.
- Speed — žádný network roundtrip per commit. Commit latence = FS write na NFS.
- Product positioning — TalkIDE je “private playground, not a public stage”. Toto rozhodnutí tuto filosofii architektonicky zakotvuje.
Rizika a omezení
- NFS je source of truth → backup nutný před public alpha. Bez funkčního backupu (talkide-infra#12) je disaster recovery slabá. NFS Block Volume crash bez snapshotu = ztráta všech user projektů. Toto je vědomě přijatý risk pro alpha fázi — musí být uzavřen před veřejným spuštěním.
- User nemůže projekt externally sdílet dokud není k dispozici curated export (talkide-be#42). V alpha fázi je to záměr; post-alpha je to chybějící feature.
- Disaster recovery zatím spoléhá na pravidelné NFS snapshoty (talkide-infra#12). Granularita Git history nezachraňuje před fyzickou ztrátou NFS volume.
Implementation References
| Odkaz | Obsah |
|---|---|
| talkide-be#41 | Stopa B.0.6 — implementace git init, commit plugin script, .gitignore template |
| talkide-be#42 | Curated Export to External Git — post-alpha future feature |
| talkide-infra#12 | NFS backup strategy — nutné před public alpha |
| talkide-be#43 | CI placeholder validator — related dev process improvement |
Thanks for the feedback.