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>
2.3 KiB
2.3 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, file_path, params, output
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | tested | file_path | params | output | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| audit_services_spec | function | go | infra | 1.0.0 | impure | func AuditServicesSpec(registryRoot string) ([]ServiceSpecAudit, error) | Audita apps con tag 'service': reporta drift entre el bloque service: del app.md y los datos requeridos por el monitor (port, health_endpoint, systemd_unit, pc_targets). Lee registry.db read-only via sql.Open. Issue 0105. |
|
false | error_go_core |
|
false | functions/infra/audit_services_spec.go |
|
Slice de ServiceSpecAudit (uno por app con tag service). OK=false si Issues no esta vacio. |
audit_services_spec
Reporta apps con tag service cuya service: block esta incompleta.
Cuando usarla
- Subcomando
fn doctor services-spec(este es su unico consumer hoy). - Antes de desplegar
services_monitor(issue 0106) — si esta funcion devuelveOK=falsepara alguna app, el monitor no puede reconciliar estado. - En CI/cron para detectar regresiones cuando alguien crea app
tag: servicesin bloque.
Ejemplo
audits, err := infra.AuditServicesSpec("$HOME/fn_registry")
for _, a := range audits {
if !a.OK {
fmt.Println(a.AppID, "issues:", a.Issues)
}
}
Reglas que valida
- bloque presente (alguno de runtime/systemd_unit/port/health_endpoint != default).
runtimedeclarado y en allowlist (systemd-user,systemd-system,docker-compose,stdio,manual).pc_targetscon al menos 1 pc_id (cruzado contra tablaservice_targets).runtimeempieza consystemd-⇒systemd_unitobligatorio.restart_policy(si declarada) enalways,on-failure,none.
Gotchas
- Lee
registry.dben modo?mode=ro; si la base no existe o esta locked retorna error. service:bloque parcial pasa el checkHasBlock=truepero falla validaciones especificas — verIssues[]para detalles.- No valida que el
porteste libre o elsystemd_unitexista en disco; eso lo haceservices_status_go_infra(runtime check).