---
name: tag_unused_pending
lang: py
domain: pipelines
version: 0.1.0
purity: impure
kind: pipeline
description: "Etiqueta cada funcion del registry sin consumidor con el tag `pendiente-usar` (issue 0062). Lee `fn doctor unused --json`, modifica el frontmatter YAML del .md de cada funcion, y deja la indicacion para correr `fn index`. Idempotente: tambien retira el tag de funciones que han vuelto a usarse."
tags: [registry, governance, deprecate, lifecycle, tag-management, pendiente-usar]
signature: "python tag_unused_pending.py"
error_type: "error_go_core"
returns_optional: false
params: []
output: "Stdout con summary {added, removed, already_tagged, missing_md}. Modifica .md de cada funcion afectada in-place. NUNCA borra archivos."
uses_functions:
  - find_unused_functions_go_infra
uses_types: []
imports:
  - json
  - re
  - sqlite3
  - subprocess
  - sys
  - pathlib
example: |
  ./fn run tag_unused_pending
  ./fn index
  # Despues: buscar las marcadas
  # mcp__registry__fn_search 'tags:"pendiente-usar"'
file_path: "python/functions/pipelines/tag_unused_pending.py"
tested: false
notes: |
  Pipeline impuro: muta archivos `.md` del registry.

  Detecta dos formatos de `tags:` en frontmatter:
   - Inline: `tags: [a, b, c]`
   - Block: `tags:\n  - a\n  - b`

  Si el campo no existe, anade una linea inline al final del frontmatter.

  Idempotente: re-ejecutar no anade duplicados ni cambia archivos cuya
  funcion no esta en la lista de unused. Si una funcion sale de la lista
  (alguien la usa), el tag se retira automaticamente para mantener
  coherencia.

  Tras ejecutar SIEMPRE correr `./fn index` para que `registry.db.tags`
  refleje los cambios. El indexer recalcula `content_hash` por funcion y
  el `function_versions` snapshot la nueva version.

  Filtro de busqueda: `mcp__registry__fn_search` con `tags:"pendiente-usar"`
  o `sqlite3 registry.db "SELECT id FROM functions WHERE tags LIKE '%pendiente-usar%'"`.
---
