Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
7.2 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 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0096 | Estandarizar ubicacion de apps: fuera de carpetas por lenguaje | pendiente | feature |
|
app-scoped | alta | 2026-05-17 | 2026-05-17 |
0096 — Estandarizar ubicacion de apps: fuera de carpetas por lenguaje
Status: pendiente Created: 2026-05-15 Type: refactor Priority: alta Blocks: 0097 (data_factory) — no se arranca app nueva mientras la convencion esta rota
Problema
La regla esta documentada (.claude/rules/apps_vs_functions.md, memoria apps_location): toda app vive en apps/ (independiente) o projects/<p>/apps/ (de proyecto). NUNCA en una carpeta nombrada por lenguaje (cpp/apps/, python/apps/, etc.).
Violacion actual: cpp/apps/ contiene 8 apps:
| Actual | Tipo | Destino propuesto |
|---|---|---|
cpp/apps/altsnap_jitter_test |
test ad-hoc | apps/altsnap_jitter_test |
cpp/apps/chart_demo |
demo standalone | apps/chart_demo |
cpp/apps/dag_engine_ui |
companion apps/dag_engine |
apps/dag_engine_ui |
cpp/apps/engine_smoke |
smoke runtime | apps/engine_smoke |
cpp/apps/primitives_gallery |
demo componentes registry | apps/primitives_gallery |
cpp/apps/runtime_test |
smoke runtime | apps/runtime_test |
cpp/apps/shaders_lab |
tooling shaders | apps/shaders_lab (existe homonimo en apps/shaders_lab — VERIFICAR antes) |
cpp/apps/text_editor_smoke |
smoke editor | apps/text_editor_smoke |
Carpetas python/apps/, bash/apps/, frontend/apps/ no existen — convencion solo rota por C++ historicamente.
Por que importa
- Auto-discovery:
fn doctor cpp-apps,fn doctor artefacts, indexador,pc_locationsasumenapps/oprojects/<p>/apps/. Soporte decpp/apps/esparcido por codigo, ramas if-else, paths hardcodeados. - Sub-repos Gitea: cada app es
dataforge/<name>(ADR 0002). Path en disco no afecta al remoto pero la entradapc_locations.dir_pathdiverge. - Onboarding: nueva persona/agente lee la regla, ve
cpp/apps/, asume que aplica solo a Go/Py. Confusion. - Scaffolder roto:
init_cpp_app_bash_pipelinespuede haber generado encpp/apps/historicamente; debe forzarapps/.
Objetivo
- Mover los 8 directorios
cpp/apps/*->apps/*. - Actualizar
cpp/CMakeLists.txtpara apuntar a los nuevos paths. - Actualizar
dir_pathen cadaapp.md. fn indexpara refrescar registro.fn syncpara actualizarpc_locationsen BD remota.- Modificar scaffolder
init_cpp_app_bash_pipelinespara escribir siempre enapps/(oprojects/<p>/apps/si flag--project), nunca encpp/apps/. - Anadir check
fn doctor artefacts(o nuevo subcomandofn doctor app-location) que falle si encuentra cualquier artefacto bajo carpeta de lenguaje (cpp/apps,python/apps,bash/apps,frontend/apps, ademascpp/analysis, etc.). - Borrar
cpp/apps/vacio al final.
Aceptacion
ls cpp/apps/ 2>/dev/nulldevuelve vacio (o el directorio no existe).ls apps/incluye los 8 nuevos.cmake --build cpp/build -jcompila todos los targets (mismo binario, distinto path source).- Cada app sigue ejecutandose y pasando su
e2e_checks(si declarado). fn doctor artefactsyfn doctor cpp-appssin nuevos warnings.fn doctor app-location(nuevo) reporta 0 violaciones.mcp__registry__fn_show id="<app>"devuelvedir_path: "apps/<app>"para los 8.init_cpp_app_bash_pipelinescon destino default crea enapps/, nocpp/apps/.- ADR / regla
.claude/rules/cpp_apps.mdactualizada: tabla "Ubicacion" elimina la fila "App independiente |cpp/apps/<nombre>/" -> "App independiente |apps/<nombre>/".
Plan de ejecucion
Por cada app <X> (en orden de dependencia: tests primero, luego demos, luego apps):
# 1. Verificar que no hay homonimo en apps/
test -d apps/<X> && echo "CONFLICT" || true
# 2. Mover (preserva .git interno del sub-repo)
git mv cpp/apps/<X> apps/<X>
# o si .git esta dentro y git mv complica: cp -a + rm + commit en sub-repo
# 3. Editar dir_path en apps/<X>/app.md
sed -i 's|dir_path: "cpp/apps/<X>"|dir_path: "apps/<X>"|' apps/<X>/app.md
# 4. Editar cpp/CMakeLists.txt para usar _DIR pattern como graph_explorer:
# set(_<X>_DIR ${CMAKE_SOURCE_DIR}/../apps/<X>)
# add_subdirectory(${_<X>_DIR} ${CMAKE_BINARY_DIR}/apps/<X>)
# 5. Re-build
cmake --build cpp/build -j --target <X>
# 6. Validar binario
./cpp/build/apps/<X>/<X> --self-test || ./cpp/build/apps/<X>/<X> --help
Una vez los 8 movidos:
rmdir cpp/apps/ # debe estar vacio
./fn index
./fn sync
./fn doctor app-location # subcomando nuevo
Sub-tareas (recomendado: una rama TBD por bloque)
| Rama | Apps | Comentario |
|---|---|---|
issue/0096-tests |
altsnap_jitter_test, engine_smoke, runtime_test, text_editor_smoke | smoke tests, riesgo bajo |
issue/0096-demos |
chart_demo, primitives_gallery | demos |
issue/0096-tools |
shaders_lab, dag_engine_ui | tooling. shaders_lab CHECK homonimo en apps/shaders_lab primero |
issue/0096-scaffolder |
— | parche a init_cpp_app_bash_pipelines + fn doctor app-location + regla .md |
Merge --no-ff a master tras cada bloque, validar build entre uno y otro.
Riesgos
| Riesgo | Mitigacion |
|---|---|
Homonimo en apps/<X> ya existente (caso shaders_lab) |
Verificar ls apps/<X> antes de mover. Si existe: decidir merge / rename. |
git mv rompe sub-repo interno con su propio .git/ |
El .git/ viaja con el directorio. Verificar git -C apps/<X> status tras mv. Si rompe, cp -a + delete + commit. |
pc_locations queda desincronizado en otros PCs |
fn sync push tras cambios + /full-git-pull en otros PCs lo reconcilia. Documentar. |
cpp/CMakeLists.txt con paths absolutos sucios |
Usar variable _<X>_DIR con ${CMAKE_SOURCE_DIR}/../apps/<X> igual que graph_explorer. Convencion ya probada. |
| Sub-repo tiene gitignore o config que asume path | Improbable. Verificar tras primer mv. |
| Memoria del usuario / claude assumes paths viejos | Actualizar .claude/rules/cpp_apps.md + memoria apps_location con nota explicita. |
No-objetivos
- Mover
cpp/functions/,python/functions/,bash/functions/,frontend/functions/. Estos NO son artefactos — son codigo del registry organizado por lenguaje. La regla solo aplica a apps/analysis/vaults/projects. - Mover
cpp/build/,cpp/vendor/,cpp/framework/. Son infraestructura compartida del registry C++, no artefactos. - Renombrar apps. Solo se mueve directorio.
- Cambiar identidad de sub-repo Gitea (
dataforge/<name>queda igual).
Nueva regla: detector
Funcion nueva (delegar a fn-constructor): audit_app_location_go_infra (puro: scan filesystem). Reglas:
- Si encuentra
app.mdconlang: cpp(o cualquier lang) bajocpp/apps/,python/apps/,bash/apps/,frontend/apps/-> reporta violacion. - Lo mismo para
analysis.mdbajo carpetas de lenguaje. - Wrap en
fn doctor app-location.
Add al fn doctor agregador.
Telemetria objetivo
- 8 entradas en
pc_locationsactualizadas (entity_type='app',dir_pathcambia decpp/apps/*aapps/*). function_statsdeinit_cpp_app_bash_pipelines: incremento de version (v1.x.0 -> v1.(x+1).0) por el cambio de default path.fn doctor app-locationcon 0 violaciones tras ejecucion.