Files
fn_registry/functions/infra/vault_layout_ensure.md
T
egutierrez e3c8979e8d chore: auto-commit (95 archivos)
- cmd/fn/doctor.go
- cmd/fn/main.go
- cpp/apps/primitives_gallery/playground/tables/CMakeLists.txt
- cpp/apps/primitives_gallery/playground/tables/data_table.cpp
- cpp/apps/primitives_gallery/playground/tables/data_table_logic.cpp
- cpp/apps/primitives_gallery/playground/tables/data_table_logic.h
- cpp/apps/primitives_gallery/playground/tables/self_test.cpp
- cpp/apps/primitives_gallery/playground/tables/tql.cpp
- cpp/apps/primitives_gallery/playground/tables/viz.cpp
- cpp/apps/primitives_gallery/playground/tables/viz.h
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 00:50:34 +02:00

4.0 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
vault_layout_ensure function go infra 1.0.0 impure func VaultLayoutEnsure(vaultPath string, dryRun bool) (LayoutReport, error) Normaliza el layout de un vault al esquema hibrido canónico data/{raw,processed,exports} + knowledge/{decisions,domains,models,benchmarks,test_documents}. Migra directorios legacy en la raíz del vault a su ubicación correcta; idempotente.
vault
layout
migration
infra
filesystem
idempotent
false error_go_core
fmt
os
path/filepath
strings
name desc
vault_path Ruta al directorio raíz del vault. Puede ser absoluta, relativa o un symlink — se resuelve con filepath.Abs + filepath.EvalSymlinks. Trailing slashes se ignoran.
name desc
dry_run Si true, calcula el reporte completo (qué se crearía, migraría, etc.) pero no modifica el disco. Util para previsualizar antes de ejecutar.
LayoutReport con: VaultPath (ruta resuelta), Created (dirs creados), Migrated (renombres ejecutados, formato 'src -> dst'), AlreadyOK (destinos que ya existían), Skipped (entradas en raíz no reconocidas, no tocadas), DryRun (flag). Error si el path no existe, no es directorio, o hay conflicto de merge (mismo nombre de archivo en src y dst). true
TestVaultLayoutEnsure_DryRun_NoChange
TestVaultLayoutEnsure_FreshDir_CreatesLayout
TestVaultLayoutEnsure_LegacyDataLayout_Migrates
TestVaultLayoutEnsure_LegacyKnowledgeLayout_Migrates
TestVaultLayoutEnsure_AlreadyMigrated_Idempotent
TestVaultLayoutEnsure_Mixed_PartialMigration
TestVaultLayoutEnsure_MergeConflict_Errors
TestVaultLayoutEnsure_UnknownFiles_Skipped
TestVaultLayoutEnsure_NotADir_Errors
functions/infra/vault_layout_ensure_test.go functions/infra/vault_layout_ensure.go

Ejemplo

// Previsualizar sin tocar disco:
report, err := VaultLayoutEnsure("/home/lucas/vaults/turismo_spain", true)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("Would migrate: %v\n", report.Migrated)
fmt.Printf("Would create:  %v\n", report.Created)

// Ejecutar la migración:
report, err = VaultLayoutEnsure("/home/lucas/vaults/turismo_spain", false)
if err != nil {
    log.Fatalf("migration failed: %v", err)
}
fmt.Printf("Migrated: %v\n", report.Migrated)
fmt.Printf("Created:  %v\n", report.Created)
fmt.Printf("Skipped:  %v\n", report.Skipped)

Comportamiento detallado

Directorios gestionados:

Raíz (legacy) Destino canónico
raw/ data/raw/
processed/ data/processed/
exports/ data/exports/
decisions/ knowledge/decisions/
domains/ knowledge/domains/
models/ knowledge/models/
benchmarks/ knowledge/benchmarks/
test_documents/ knowledge/test_documents/
README.md / README.txt knowledge/README.md

Lógica de migración (por cada entrada conocida):

  • Solo src existe → rename atómico srcdst, registrado en Migrated.
  • Solo dst existe → ya migrado, registrado en AlreadyOK.
  • Ambos existen (dir) → merge: mueve cada hijo de src/ a dst/; error si mismo nombre. Registrado en Migrated por hijo.
  • Ambos existen (archivo README) → error inmediato con paths concretos.
  • Ninguno existe → crea dst vacío, registrado en Created.

Archivos/dirs no reconocidos en la raíz (.git, vault_index.db, archivos custom) se registran en Skipped y no se tocan.

Idempotencia: segunda ejecución sobre un vault ya migrado reporta todo en AlreadyOK y no toca disco.

Notas

LayoutReport es un tipo local de esta función (no un tipo del registry). El struct exportado vive en functions/infra/vault_layout_ensure.go junto con la función.

Para aplicar la migración a múltiples vaults en batch, invocar desde un pipeline que lea los paths de vault.yaml (ver vault_manifest_read_go_infra) y llame a VaultLayoutEnsure en cada uno.