Internal Documentation internal
TalkIDE internal documentation

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

OperaceGit akce
Create Project UCgit init v projectDir + generování .gitignore + initial commit
Mara taskCompletiongit add . && git commit -m "<descriptive message>" (plugin script)
Delete Project UCrm -rf /projects/<slug>/ — smaže i .git
User prohlíží historiifuture 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

  1. 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.
  2. 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.
  3. 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 commit nad 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

OdkazObsah
talkide-be#41Stopa B.0.6 — implementace git init, commit plugin script, .gitignore template
talkide-be#42Curated Export to External Git — post-alpha future feature
talkide-infra#12NFS backup strategy — nutné před public alpha
talkide-be#43CI placeholder validator — related dev process improvement

Was this page helpful?

Thanks for the feedback.