feat: tabla apps en registry — modelo, parser, indexer y CLI
Agrega soporte completo para indexar aplicaciones del directorio apps/. Cada app tiene un descriptor app.md con frontmatter YAML que el indexer recoge automaticamente. Incluye migracion 004, modelo App, ParseAppMD, ValidateApp, store CRUD con FTS5, y soporte en fn list/search/show. Crea descriptores app.md para docker_tui, pipeline_launcher y metabase_registry.
This commit is contained in:
@@ -161,6 +161,44 @@ func ValidateProposal(p *Proposal) *ValidationError {
|
||||
return nil
|
||||
}
|
||||
|
||||
// ValidateApp checks integrity rules for apps.
|
||||
func ValidateApp(a *App, knownFunctions, knownTypes map[string]bool) *ValidationError {
|
||||
var errs []string
|
||||
|
||||
if a.Name == "" {
|
||||
errs = append(errs, "name is required")
|
||||
}
|
||||
if a.Lang == "" {
|
||||
errs = append(errs, "lang is required")
|
||||
}
|
||||
if a.Domain == "" {
|
||||
errs = append(errs, "domain is required")
|
||||
}
|
||||
if a.Description == "" {
|
||||
errs = append(errs, "description is required")
|
||||
}
|
||||
|
||||
if a.DirPath != "" && strings.HasPrefix(a.DirPath, "/") {
|
||||
errs = append(errs, "dir_path must be relative to registry root")
|
||||
}
|
||||
|
||||
for _, ref := range a.UsesFunctions {
|
||||
if !knownFunctions[ref] {
|
||||
errs = append(errs, fmt.Sprintf("uses_functions references unknown function: %s", ref))
|
||||
}
|
||||
}
|
||||
for _, ref := range a.UsesTypes {
|
||||
if !knownTypes[ref] {
|
||||
errs = append(errs, fmt.Sprintf("uses_types references unknown type: %s", ref))
|
||||
}
|
||||
}
|
||||
|
||||
if len(errs) > 0 {
|
||||
return &ValidationError{ID: a.ID, Errors: errs}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ValidateType checks integrity rules for types.
|
||||
func ValidateType(t *Type, knownTypes map[string]bool) *ValidationError {
|
||||
var errs []string
|
||||
|
||||
Reference in New Issue
Block a user