Servizi privilegiati (Tier 3)
Mai raggiungibili da un workspace. Accettano structured intent dal gateway, mai comandi.
workspace-orchestrator
Possiede: il ciclo di vita dei workspace dei collaboratori. Il servizio più importante per il modello di isolamento.
Responsabilità:
- Provisioning di un workspace da un template al momento del claim
- Montare solo il path autorizzato — isolamento per assenza, non per permesso
- Configurare il sparse checkout corrispondente all'assegnazione
- Ibernazione su inattività, distruzione al rilascio
- Applicare quote di risorse
Note di design:
- Non costruire questo da zero. Coder (self-hosted) risolve già provisioning, templating, ibernazione e accesso sicuro, con un provider Docker — Terraform in Coder descrive il workspace, non implica VM.
- La scelta del runtime è il modello di sicurezza. Il Docker semplice condivide il
kernel host; Docker + gVisor (
runsc) è il punto di equilibrio sensato per collaboratori esterni verificati. VM per collaboratore sono più robuste ma confliggono con il modello "lavora quando vuoi" a meno che l'ibernazione non sia aggressiva.
Il Docker socket non deve mai essere raggiungibile da un workspace. È il percorso di escape più comune e rende ogni altro controllo decorativo.
vcs-service
Possiede: tutte le operazioni Git e le credenziali GitHub.
Responsabilità:
- Snapshot del working tree e calcolo dell'hash del contenuto
- Commit e push per conto di un collaboratore, sotto l'account condiviso
- Impostare
user.name/user.emailper collaboratore e aggiungere trailerContributor:/Task-Id:/Content-Hash: - Applicare la branch policy: branch per-task, mai
main, nessun force push
Note di design:
- I collaboratori condividono un account GitHub centrale, quindi l'identità Git non prova nulla. I trailer sono utili per il debug; il ledger di audit è la fonte di verità per l'attribuzione.
- Il token non entra mai nel workspace. Il collaboratore non lo ha mai visto.
build-service
Possiede: build delle immagini e le relative credenziali.
Responsabilità:
- Fresh checkout dall'hash dello snapshot — mai riutilizzare la working directory del collaboratore
- Build dell'immagine, taggata per utente e branch
- Push al registry; registrazione del container per il routing
- Cleanup TTL di container di test e immagini
Note di design:
- Il Dockerfile è modificabile dal collaboratore e deve essere trattato come input
ostile: build rootless,
--security-opt=no-new-privileges, nessun mount del socket host, egress filtrato. - Effimero è meglio di persistente: spawn, build, termina.
- Le build concorrenti non devono condividere cache o filesystem temporaneo.
audit-service
Possiede: il registro append-only di chi ha fatto cosa.
Responsabilità:
- Log immutabile: attore, azione, target, timestamp, hash del contenuto, esiti dei check, SHA del commit risultante
- API di query per il profile-service e per la revisione interna
- Retention allineata con obblighi contrattuali e contabili
Con un account Git condiviso, questo è l'unico registro di attribuzione autorevole nel sistema. Non è un application log — trattalo come un ledger: append-only, nessun aggiornamento, nessuna cancellazione.