---
name: sanitize_for_path
kind: function
lang: py
domain: core
version: "1.0.0"
purity: pure
signature: "def sanitize_for_path(text: str, max_length: int = 50) -> str"
description: "Convierte texto a nombre seguro para uso en paths. Remueve caracteres especiales, reemplaza espacios con _, trunca con hash suffix si excede max_length."
tags: [path, sanitize, string, filesystem, slug, pendiente-usar]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: [re, hashlib]
params:
  - name: text
    desc: "Texto a convertir en nombre seguro para filesystem"
  - name: max_length
    desc: "Longitud máxima permitida del resultado"
output: "String sanitizado apto para usar en paths y nombres de archivos"
tested: true
tests:
  - "texto normal produce slug con underscores"
  - "caracteres especiales son removidos"
  - "texto muy largo trunca con hash suffix"
  - "texto vacio retorna section"
  - "texto CJK es preservado"
test_file_path: "python/functions/core/parse_markdown_test.py"
file_path: "python/functions/core/core.py"
---

## Ejemplo

```python
sanitize_for_path("Hello World!")       # "Hello_World"
sanitize_for_path("中文标题")             # "中文标题"
sanitize_for_path("a" * 100)           # "aaa...aaa_<sha256[:8]>" (max 50 chars)
sanitize_for_path("")                  # "section"
sanitize_for_path("price: $100 @2024") # "price__100_2024"
```

## Notas

Funcion pura. Caracteres permitidos: `\w` (letras, digitos, _), rangos CJK `[\u4e00-\u9fff\u3040-\u30ff\uac00-\ud7af]`, espacios (convertidos a `_`) y guiones. El sufijo hash es `_` + primeros 8 caracteres del sha256 del texto original, lo que hace la truncacion determinista y evita colisiones entre textos largos similares. Si el texto es todo caracteres especiales y queda vacio tras limpiar, retorna `"section"` como fallback seguro.
