--- name: file_delete kind: function lang: go domain: infra version: "1.0.0" purity: impure signature: "func FileDelete(path string) error" description: "Elimina un archivo del disco. Rechaza paths con \"..\" para evitar path traversal. Retorna error si el archivo no existe o si falla el remove." tags: [file, delete, disk, storage, security, infra] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt, os, path/filepath, strings] params: - name: path desc: "ruta del archivo a eliminar (no debe contener \"..\")" output: "nil si el archivo se elimino correctamente, error si el path es vacio, contiene path traversal, no existe o falla la operacion" tested: true tests: ["elimina archivo existente", "rechaza path con ..", "rechaza path vacio", "retorna error si no existe"] test_file_path: "functions/infra/file_delete_test.go" file_path: "functions/infra/file_delete.go" --- ## Ejemplo ```go err := FileDelete("./uploads/a1b2c3d4.png") if err != nil { log.Printf("delete fallo: %v", err) } ``` ## Notas La proteccion contra path traversal es defensiva pero NO es suficiente por si sola: la app debe pasar paths que ya estan resueltos al directorio de storage (usar `filepath.Join(baseDir, storedName)`). Esta funcion es un cinturon adicional contra bugs en la app que llamaria. NO sigue symlinks de forma especial — `os.Remove` borra el symlink, no el target.