7913116a8e
- .claude/agents/fn-analizador/SKILL.md - .claude/agents/fn-constructor/SKILL.md - .claude/agents/fn-executor/SKILL.md - .claude/agents/fn-mejorador/SKILL.md - .claude/agents/fn-orquestador/SKILL.md - .claude/agents/fn-recopilador/SKILL.md - .claude/commands/app.md - .claude/commands/compile.md - .claude/commands/cpp-app.md - .claude/commands/create_functions.md - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.1 KiB
4.1 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path, params, output
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | tested | tests | test_file_path | file_path | params | output | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| audit_app_drift | function | go | infra | 1.0.0 | impure | func AuditAppDrift(registryRoot string, windowsDeployRoot string) ([]AppDriftEntry, error) | Escanea todas las apps C++ del registry, extrae las versiones de modulos embebidas en sus artefactos compilados (exe Windows desplegado, modules_generated.cpp Windows/Linux) y las compara contra la version declarada en modules/*/module.md. Retorna una entrada por app con status ok|drift|no-build y la lista de modulos desactualizados. |
|
false | error_go_core |
|
false | functions/infra/audit_app_drift.go |
|
Slice de AppDriftEntry, uno por app C++ encontrada. Status: 'ok' (todas las versiones coinciden), 'drift' (al menos un modulo tiene version distinta), 'no-build' (no se encontro ningun artefacto compilado). Campo Stale lista los nombres de modulos con drift. |
audit_app_drift
Detecta apps C++ cuyos binarios/artefactos enlazan una version de modulo inferior a la que declara el registry.
Cuando usarla
- Despues de bumpar la version de un modulo en
modules/*/module.md— para saber que apps necesitan recompilarse. - Como check en
fn doctor cpp-appspara detectar drift antes de un deploy. - En CI tras actualizar
fn_frameworkofn_module_data_table— lista apps constatus=drift.
Ejemplo
entries, err := infra.AuditAppDrift("$HOME/fn_registry", "/mnt/c/Users/lucas/Desktop/apps")
if err != nil {
log.Fatal(err)
}
for _, e := range entries {
switch e.Status {
case "drift":
fmt.Printf("STALE %s: modules %v (build: %s)\n", e.AppName, e.Stale, e.BuildKind)
case "no-build":
fmt.Printf("NOBLD %s: no compiled artifact found\n", e.AppName)
case "ok":
fmt.Printf("OK %s (%s)\n", e.AppName, e.BuildKind)
}
}
Salida tipica:
STALE app_gestion: modules [data_table] (build: linux-build)
OK chart_demo (windows-deployed)
NOBLD primitives_gallery: no compiled artifact found
Prioridad de artefactos (por app)
<windowsDeployRoot>/<name>/<name>.exe— PE binario: busca patron<module>\x00<version>\x00directo en bytes.cpp/build/windows/apps/<name>/<name>_modules_generated.cpp— parsea literales{ "module", "version", ... }.cpp/build/linux/apps/<name>/<name>_modules_generated.cpp— mismo parser.
Si ninguno existe → status = "no-build", BuildKind = "".
Gotchas
- PE vs ELF string layout: en ELF (Linux) el compilador puede separar las cadenas del struct en distintas regiones del
.rodata, por lo que la busqueda directa en el binario no es fiable. Por eso se prefiere el_modules_generated.cpp(generado porcodegen_app_modules.pyal compilar). El binario PE Windows si tiene el patron contiguo. - Sin registry.db: la funcion lee
module.mddirectamente — no necesita la BD. Si elfn indexno se ha ejecutado tras un bump de version, esta funcion igual detecta el drift porque lee la fuente de verdad (el.md). - Apps sin
uses_modules: si una app C++ no declarauses_modulesni tiene_modules_generated.cpp, aparece constatus=no-buildaunque compile correctamente. Normal para apps que no usan modulos opcionales. - Solo compara modulos del registry: si el binario enlaza un modulo desconocido (que no tiene
module.md), se ignora silenciosamente en el calculo de drift. - windowsDeployRoot vacio: si el usuario no tiene montado
/mnt/c/...(no WSL2), pasar""para evitaros.Statlento en rutas inexistentes.