ec81bf360d
- docs/adr/0002-apps-analyses-as-dataforge-master.md: decision arquitectural con contexto, alternativas descartadas y cambios concretos del 2026-04-28. - CHANGELOG.md: entrada 2026-04-28 con Added/Changed/Fixed. - .claude/CLAUDE.md: nota sobre /full-git-push y dataforge/<name>+master. - .claude/rules/apps_tbd.md: tronco unico master + init.defaultBranch. - cpp/functions/core/app_menubar.md: notas del submenu Settings con About. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.0 KiB
4.0 KiB
ADR 0002 — Apps y analyses como repos dataforge/<name> en branch master
- Fecha: 2026-04-28
- Estado: accepted
Contexto
Cada app (apps/<name>, projects/*/apps/<name>) y cada analysis (analysis/<name>, projects/*/analysis/<name>) en fn_registry vive como repo git independiente: el repo padre los .gitignorea y solo conserva su metadata indexada en registry.db. Esto permite clonar/desplegar/compartir cada artefacto sin arrastrar el monorepo entero.
Hasta 2026-04-28 el sistema tenia tres inconsistencias:
- Owners mezclados en Gitea: la mayoria pusheaba a
dataforge/<name>, peroprojects/element_agents/apps/{agents_and_robots,element_matrix_chat}apuntaban aegutierrez/<name>(uno no existia, otro sin permisos de push). - Apps/analyses sin
.git:apps/{deploy_server,shaders_lab,voice_guide}yanalysis/{agent_coding_eval,ontology_graph}+projects/app_turismo/analysis/turismo_spainno estaban en Gitea — imposibles de recuperar en otro PC. - Mezcla de ramas
mainvsmaster: 10 repos enmain(creados antes de unificar convencion), 14 enmaster. La causa raiz erainit.defaultBranchsin configurar globalmente, asi quegit initdaba lo que la version de git decidiera, y las primeras pushes fijaban el default branch en Gitea.
Decision
- Owner unico en Gitea:
dataforge. Toda app/analysis del registry vive enhttps://gitea.../dataforge/<basename>.dataforgees un user en Gitea (no org), asi quegitea_create_repocae al endpoint/api/v1/user/reposautomaticamente. - Branch unico:
master. Coherente confn_registry(raiz), con la mayoria de apps/analyses, y consubrepos/fn-design-system. Configuracion enforced congit config --global init.defaultBranch masteren cada PC. - Vaults NO siguen esta regla. Los vaults son datos puros — su mecanismo de compartir queda pendiente (TBD: object storage, rsync programado, restic). Hasta entonces, no se versionan en Gitea.
subrepos/NO entran. Son mirrors upstream (Claude Design, etc.); se gestionan con su propio remote dual y no participan de/full-git-push//full-git-pull.
Helpers introducidos
ensure_repo_synced_bash_infra— pipeline idempotente que crea repo Gitea + init local + commit + push./full-git-pushdescubre apps/analyses sin.gity los inicializa./full-git-pulltrasfn syncclona losdataforge/<name>faltantes localmente.
Alternativas descartadas
- Owner por usuario (
egutierrez/<name>): obligaria a tener tokens distintos por PC y limitaria colaboracion. Descartado. - Submodules en
fn_registry: se probo (ver ADR 0001 — GitButler). Bugs con gitlinks, commits cruzados y duplicacion. Descartado. - Branch
main: estandar moderno (GitHub default), perofn_registryraiz, deploy scripts y la mayoria de apps ya estaban enmaster. Migrar todo amainrequeria mas cambios que migrar 10 repos amaster. Decidido por minimizar churn.
Consecuencias
- Recuperar todo el ecosistema en un PC nuevo:
git clone fn_registry+/full-git-pull(clona los dataforge/* registrados viafn sync). - Crear app/analysis nueva: el pipeline
init_jupyter_analysiso el flujo manual debe invocarensure_repo_syncedcon defaultsowner=dataforge branch=master. - Cualquier outlier en otro owner o branch se detecta facilmente con la query del audit (ver
.claude/rules/apps_own_repo.md). - Si se anaden mas branches (feature, issue/*), siguen las reglas de
apps_tbd.md. La convencion solo fija el tronco principal.
Cambios concretos aplicados (2026-04-28)
- 2 repos movidos a
dataforge/:agents_and_robots,element_matrix_chat. - 6 repos creados desde cero:
deploy_server,shaders_lab,voice_guide,agent_coding_eval,ontology_graph,turismo_spain. - 10 repos migrados
main→master:apps/{docker_tui,fuzzygraph,metabase_registry,pipeline_launcher,rapid_dashboards,script_navegador},analysis/{estudio_embeddings,estudio_mercados,pruebas_jupyter,retrieving_graphs}. git config --global init.defaultBranch master.