---
name: regenerate_app_icons
kind: pipeline
lang: py
domain: pipelines
version: "1.2.0"
purity: impure
signature: "def regenerate_app_icons(only: list[str] | None = None, style: str = 'fill_white') -> dict"
description: "Escanea todas las apps C++ del registry, lee el bloque `icon: {phosphor, accent}` de cada app.md y regenera el appicon.ico via generate_app_icon. Soporta param `style` ('fill_white' default | 'adaptive_duotone' | 'white_duotone' bg accent + glyph duotone Phosphor con fill blanco). CLI flags: `--adaptive`, `--white`, o `--style=<valor>`. Reemplaza el script ad-hoc dev/gen_app_icons.py."
tags: [cpp-windows, icon, phosphor, batch]
uses_functions: [generate_app_icon_py_infra]
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: [os, sys, pathlib, typing, yaml]
params:
  - name: only
    desc: "Lista opcional de nombres de app (campo `name` del frontmatter) a procesar. Si None, regenera todas las apps C++ con icon: declarado."
  - name: style
    desc: "'fill_white' (default, glyph blanco), 'adaptive_duotone' (bg accent + duotone con tono claro/oscuro adaptativo) o 'white_duotone' (bg accent + duotone Phosphor blanco). CLI: `--adaptive`, `--white`, o `--style=<valor>`."
output: "dict {ok: [name], skipped: [{name, reason}], failed: [{name, error}]}"
tested: false
tests: []
test_file_path: ""
file_path: "python/functions/pipelines/regenerate_app_icons.py"
---

## Ejemplo

```bash
# Regenerar todas las apps C++ con icon: declarado (estilo clasico)
./fn run regenerate_app_icons

# Estilo adaptive_duotone (dark/light glyph segun luminancia del accent)
python/.venv/bin/python3 python/functions/pipelines/regenerate_app_icons.py --adaptive

# Solo una app
./fn run regenerate_app_icons chart_demo
```

```python
import sys
sys.path.insert(0, "python/functions")
from pipelines.regenerate_app_icons import regenerate_app_icons

result = regenerate_app_icons()
print(f"OK: {len(result['ok'])}, FAIL: {len(result['failed'])}")
```

Bloque `icon:` esperado en `app.md`:
```yaml
icon:
  phosphor: "chart-bar"
  accent: "#0ea5e9"
```

## Cuando usarla

Cuando anades una app C++ nueva (anades `icon:` a su `app.md` y corres el pipeline), cambias el color/glyph de una app existente, o pulleas cambios de iconos desde otra rama. Antes de `redeploy_cpp_app_windows` para que el `.exe` lleve el icono actualizado.

## Gotchas

- **Sobreescribe `appicon.ico` sin warning** — igual que `generate_app_icon`. Hacer backup si necesitas preservar version anterior.
- **Requiere `sources/phosphor-core/`**: clonar con `git clone --depth=1 https://github.com/phosphor-icons/core.git sources/phosphor-core` si no existe.
- **Solo procesa apps con `lang: cpp`** en frontmatter — apps Go/Python se ignoran aunque tengan `icon:`.
- **Apps sin `icon:` se reportan en `skipped`**, no son error. Util para detectar apps C++ a las que falta declarar el icono.
- **No invalida el cache de iconos de Windows** — si Explorer no muestra el icono nuevo tras redeploy: `ie4uinit.exe -show` o reiniciar Explorer.
