Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.5 KiB
id, title, status, type, domain, scope, priority, depends, blocks, related, created, updated, tags
| id | title | status | type | domain | scope | priority | depends | blocks | related | created | updated | tags | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0059 | Resolver doble tracking de `apps/*/app.md` (fn_registry + sub-repo) | pendiente | infra |
|
app-scoped | media | 2026-05-17 | 2026-05-17 |
0059 — Resolver doble tracking de apps/*/app.md (fn_registry + sub-repo)
APP Metadata
| Campo | Valor |
|---|---|
| ID | 0059 |
| Estado | pendiente |
| Prioridad | media |
| Tipo | infra — git, .gitignore, indexer |
Dependencias
- ADR 0002 (apps_analyses_as_dataforge_master): cada app es su propio repo.
.gitignoreraiz:apps/*/.
Contexto
Detectado en sesion 2026-05-07:
.gitignoredefn_registryexcluyeapps/*/.- Pero
apps/dag_engine/app.mdaparece tracked tambien porfn_registry(legado pre-gitignore). - Resultado: el mismo archivo fisico es tracked por DOS repos:
fn_registryYdataforge/dag_engine(sub-repo). - Cualquier cambio crea conmits duplicados, status confuso, riesgo de divergencia.
$ git status # en fn_registry
M apps/dag_engine/app.md
$ git -C apps/dag_engine status
M app.md
Mismo archivo. Dos git add distintos.
Objetivo
Eliminar el doble tracking. Decidir source of truth y limpiar la otra.
Decisiones a tomar
Opcion A: source of truth = sub-repo.
git rm --cached apps/*/app.mden fn_registry (sin borrar archivo).app.mdsolo se commitea desde el sub-repo.fn indexlee desde disco igual.- PRO: consistente con ADR 0002 (sub-repo es la unidad).
- CONTRA:
app.mdno se versiona junto con cambios al registry que lo rompan (ej. funciones referenciadas que se borran).
Opcion B: source of truth = fn_registry.
- Sub-repo NO trackea
app.md(anadir a su.gitignore). fn_registrylo versiona.- PRO: el indexer y el registry tienen control directo.
- CONTRA: el sub-repo es incompleto (falta su propia ficha de identidad).
Opcion C: ambos lo trackean conscientemente.
- Documentar en regla nueva.
- Hook que bloquea desync (post-commit en uno avisa para commitear en el otro).
- PRO: cada repo es self-describing.
- CONTRA: complejidad operacional alta, riesgo de drift.
Recomendada: Opcion A. Alinea con ADR 0002. La cobertura "registry rompe app.md" se cubre con fn doctor uses-functions + pre-commit hook v2.
Arquitectura
Archivos afectados
.gitignoreraiz — verificar queapps/*/cubre todo.- Posiblemente otros
apps/*/app.mdtracked legacy (auditar). docs/adr/0004-app-md-source-of-truth.md— NUEVO ADR.
Tareas
Fase 1 — auditar
1.1 git ls-files apps/ | grep app.md — listar todos los app.md tracked en fn_registry.
1.2 Cruzar con sub-repos para confirmar duplicacion.
Fase 2 — decision (humano)
2.1 Confirmar Opcion A o cambiar a B/C con razon documentada.
Fase 3 — implementacion (Opcion A)
3.1 Para cada app.md duplicado: confirmar que existe identico en el sub-repo.
3.2 git rm --cached apps/<name>/app.md en fn_registry.
3.3 Commit limpio en fn_registry.
3.4 No tocar el sub-repo (ya esta correcto).
Fase 4 — ADR + docs
4.1 Crear docs/adr/0004-app-md-source-of-truth.md con la decision y razon.
4.2 Actualizar .claude/rules/cpp_apps.md y apps_vs_functions.md si mencionan tracking.
Riesgos
- Si el indexer asume que
app.mdesta tracked en fn_registry (no es el caso, lee de disco), cero impacto. - Si
fn syncopc_locationsasumen tracking, validar que solo dependen del archivo fisico.
Decisiones de diseno
- Opcion A es coherente con ADR 0002 — apps son sub-repos completos.