fix(fn-run): propagar stdout/stderr de bash functions library-style #1

Open
dataforge wants to merge 537 commits from auto/0077-fn-run-bash-mudo into master
Owner

Resumen

  • Issue: 0077 — fn run <bash_function> mudo (sin stdout/stderr)
  • task_run_id: task_98831b93cbf263ee
  • branch: auto/0077-fn-run-bash-mudo

Causa raíz

El bug NO estaba en la conexión de Stdout/Stderr (ya se hacía correctamente).
El problema: scripts bash library-style definen función <basename>() pero NO la llaman al nivel top-level → bash ejecuta el script, define la función, y sale en silencio.

Afectados: ~62 scripts en bash/functions/

Fix

buildBashCommand en cmd/fn/run.go detecta ahora tres casos:

  1. Guarda BASH_SOURCE[0]==$0 → ejecutar directamente
  2. Library-style con función <basename>() → source + llamada explícita
  3. Pipeline top-level sin función ni guarda → ejecutar directamente

Bonus: fix en scan_secrets_in_dirty.sh y git_hook_audit_app_drift.sh para worktrees git.

Validación

  • build ✓
  • bash_stdout_propagation ✓
  • bash_exit_nonzero ✓
  • tests (4 nuevos) ✓

🤖 Auto generado por fn-orquestador (issue 0069)

## Resumen - **Issue**: 0077 — `fn run <bash_function>` mudo (sin stdout/stderr) - **task_run_id**: task_98831b93cbf263ee - **branch**: auto/0077-fn-run-bash-mudo ### Causa raíz El bug NO estaba en la conexión de Stdout/Stderr (ya se hacía correctamente). El problema: scripts bash library-style definen función `<basename>()` pero NO la llaman al nivel top-level → bash ejecuta el script, define la función, y sale en silencio. Afectados: ~62 scripts en `bash/functions/` ### Fix `buildBashCommand` en `cmd/fn/run.go` detecta ahora tres casos: 1. Guarda BASH_SOURCE[0]==$0 → ejecutar directamente 2. Library-style con función `<basename>()` → source + llamada explícita 3. Pipeline top-level sin función ni guarda → ejecutar directamente Bonus: fix en `scan_secrets_in_dirty.sh` y `git_hook_audit_app_drift.sh` para worktrees git. ### Validación - build ✓ - bash_stdout_propagation ✓ - bash_exit_nonzero ✓ - tests (4 nuevos) ✓ 🤖 Auto generado por fn-orquestador (issue 0069)
dataforge added 1 commit 2026-05-15 11:53:06 +00:00
Scripts bash del registry siguen dos patrones:
- Con guarda BASH_SOURCE[0]==$0: se auto-invocan al ejecutar directamente
- Library-style (sin guarda): definen una función <basename>() pero no la
  llaman al nivel top-level → bash <script> args produce silencio total

El dispatcher en buildBashCommand detecta ahora tres casos:
1. Tiene guarda BASH_SOURCE[0]==$0 → ejecutar directamente (sin cambio)
2. Library-style con función <basename>() → source + llamada explícita:
   bash -c 'source "$1"; shift; fn_name "$@"' -- <script> [args...]
3. Pipeline top-level (sin función ni guarda) → ejecutar directamente

También corrige scan_secrets_in_dirty.sh y git_hook_audit_app_drift.sh
para aceptar worktrees git (donde .git es un archivo, no un directorio).

Añade bashFunctionName() helper y 4 tests unitarios/integración.
Fix reportado en issue 0077 con gradle_unit_test como caso canario.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Checking for merge conflicts…
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin auto/0077-fn-run-bash-mudo:auto/0077-fn-run-bash-mudo
git checkout auto/0077-fn-run-bash-mudo
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dataforge/fn_registry#1