TuneCamp — Decisioni di Architettura & Regole IA
Workflow & Linee Guida Git
devè il ramo di integrazione — non committare mai direttamente sumaine non creare mai rami a partire damain. Tutto il lavoro parte dadev: primagit checkout dev && git pull, poigit checkout -b feat/<nome>ofix/<nome>.- Mantiati
devsincronizzato conmain. Prima di iniziare un nuovo lavoro (e prima di effettuare il merge sudev), esegui un fast-forward didevdall'ultimomainin modo che non vada mai in deriva:git checkout dev && git fetch origin && git merge --ff-only origin/main. - I rami di funzionalità/fix effettuano il merge su
dev;devè il ramo che viene promosso sumainper i rilasci. - Prima di ogni push: aggiorna
CHANGELOG.mde incrementa la versione inpackage.json(semver):patch(x.x.X) — fix di bug, refactoring minori, nessuna nuova funzionalitàminor(x.X.0) — nuova funzionalità retrocompatibilemajor(X.0.0) — modifiche breaking, API rimosse, cambi di architettura
- Apri la PR con
gh pr createpuntando adev(non amain).
Decisioni di Architettura
Database
- Rimani su SQLite (better-sqlite3, modalità WAL). Nessun Postgres/Redis in configurazione a macchina singola.
- Il collo di bottiglia è CPU/concorrenza/IO sul singolo processo, non il database.
- Migrare solo in caso di: scalabilità orizzontale (multi-macchina) O contesa di scrittura prolungata (
SQLITE_BUSY).
Filesystem
- I file non vengono mai spostati o rinominati. Il filesystem costituisce la verità di dove si trova un file; il DB contiene i metadati.
consolidateFiles()è stato rimosso — non reintrodurlo né reintrodurre logiche che spostano/rinominano file.sync-tags(riscrittura tag ID3 da DB) è mantenuto solo come azione manuale su richiesta.- La dedup via
file_pathtramitemergeTracksè corretta; la riorganizzazione del filesystem no.
ZEN / ZEN
- ZEN DB / ZEN è stato completamente rimosso (PR #370, 15-06-2026). Non re-importare
zen,zendb.service,zen.workerogun. - La scoperta delle istanze ora utilizza HTTP federato (NodeInfo
/.well-known/nodeinfo, endpoint/peers, gossip crawler). - Le firme Zen SEA & FID SSO (
/api/auth/zen/*) rimangono attive per i passaporti di identità decentralizzata e i collegamenti tra istanze.
Federazione & Autenticazione
- L'autenticazione è username + password + JWT, per-istanza. Nessun SSO cross-istanza, nessuna identità crittografica portabile.
- ActivityPub federati le interazioni, non i login (modello Mastodon/Funkwhale).
- Le transazioni (acquisti/collezioni) sono locali all'istanza dell'artista.
- I feed RSS/Atom possono essere seguiti: salvati come
remote_actorscontype='rss'; elementi salvati comeremote_content.
Pubblicazione & Ruoli
- Gli ascoltatori (ruolo
user) non possono pubblicare. Nessun caricamento, pubblicazione, vendita o post social. - Gate:
VisibilityGuardian.canPublishContent()— root_admin/admin sempre; super_user (curatore) ouser(ascoltatore) solo quando hanno un profilo artista collegato (artistId); chiunque sia sprovvisto di profilo artista non può mai pubblicare. - Il flusso "Diventa un Artista" mantiene il ruolo
userdell'account dopo l'approvazione dell'admin — collega un profilo artista che concede i permessi di pubblicazione tramitecanPublishContent. - Ogni nuovo endpoint di pubblicazione/vendita deve utilizzare
canPublishContente non controlli grezzi suartistId.
Playlist
- Le playlist sono riservate ai membri (401 per anonimi). Tutti gli utenti autenticati (inclusi gli Ascoltatori) possono crearne.
- Modello stage pubblico: un brano privato aggiunto a una playlist pubblica viene deliberatamente pubblicato. Questo rappresenta il canale di curatela, non una fuga di dati.
- Non rendere le playlist visibili agli utenti anonimi né limitarle a ruoli superiori a
user.