Genera y mantiene la documentación de referencia GENERADA de un repo (By the Numbers, mapa del repo, inventarios de funciones/migraciones/edge-functions/rutas) computándola del código con un generador determinístico, y la cablea a CI (check en PR). Sigue la taxonomía AutoWiki de Factory.ai (doc = build artifact). Usar cuando se pida instalar/regenerar docs generadas, "documentación que no envejece", un wiki del codebase, o cablear generación de docs en CI. Complementa a docs-architect (que audita la doc AUTHORED escrita a mano).
How this skill is triggered — by the user, by Claude, or both
Slash command
/Wachines-Plugin-Ironman:autowikiThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generás la parte **GENERATED** de la documentación de un repo: las secciones mecánicas
Generás la parte GENERATED de la documentación de un repo: las secciones mecánicas
(conteos, inventarios, mapa de directorios) que un humano nunca mantiene al día y que envejecen
apenas cambia el código. La computás del código con un generador determinístico y
zero-dependency, y la regenerás al mergear (push a la branch de integración) — los PRs NO
la llevan. Lee primero references/taxonomy.md (el estándar
AutoWiki + el eje GENERATED/AUTHORED).
Par con
docs-architect: esta skill genera lo GENERATED (docs/reference/).docs-architectaudita lo AUTHORED (el por qué: arquitectura, ADRs). No se pisan.
docs/reference/ (clase reference).assets/gen-docs.mjs) enumera archivos vía git ls-files → CI y local
dan idéntico resultado sin importar cruft local. Salida sin fechas/SHAs → determinística.docs/reference/by-the-numbers.md y repo-map.md
dependen del árbol entero (LOC, # archivos por carpeta) → si cada PR los commitea y los
chequea, dos PRs cualesquiera que agreguen/saquen un archivo se pisan (conflicto + check
stale). Por eso el workflow NO es un check de PR: corre en push a la branch de
integración y auto-commitea docs/reference con [skip ci]. Los PRs no tocan
docs/reference; se refresca solo al mergear. Cero conflictos cruzados.El glue por proyecto NO se hardcodea: lo descubre un subagente que lee el repo y produce el config. Pasos:
supabase/functions/), las
rutas, los tipos autogenerados grandes (para excluir del LOC). Que produzca un
docs-gen.config.json (esquema abajo). Verificá que cada root del config EXISTA.assets/gen-docs.mjs → scripts/gen-docs.mjs.assets/docs-generate.yml → .github/workflows/docs-generate.yml,
y reemplazá __INTEGRATION_BRANCH__ por la branch donde aterrizan los features (main /
staging / preview según el repo). Corre en push a esa branch y auto-commitea."docs:gen": "node scripts/gen-docs.mjs" al
package.json root (si existe) — para regenerar a mano cuando quieras.node scripts/gen-docs.mjs dos veces y
confirmá que la 2da corrida NO produce diff (diff -r). Commiteá ese docs/reference inicial.
Si hay diff, el generador no es determinístico — revisá (causa típica: contar archivos no
trackeados → ya resuelto vía git ls-files; o incluir la propia salida → ya se excluye outDir).CLAUDE.md/AGENTS.md: "docs/reference/ es
GENERADO, no editar a mano, NO regenerarlo en tu PR — se refresca solo al mergear; el
resto de docs/ es AUTHORED; auditar con docs-architect".push.docs/reference, salvo el commit inicial de install).docs-gen.config.json)Ver assets/docs-gen.config.example.json. Campos:
project — nombre legible. outDir — "docs/reference".exclude — nombres de directorio a saltear (por segmento de path).loc.exts — extensiones para contar LOC. loc.excludeFiles — archivos generados grandes a
excluir del LOC (tipos autogenerados, dumps SQL).byTheNumbers[] — métricas: {type:"ext",exts} · {type:"name-suffix",suffixes} ·
{type:"filename",name}. Evitá filename:"index.ts" como proxy de edge functions
(cuenta barrels) — usá el inventario dirs.inventories[] — tipos:
{type:"files",root,ext?,limit?} — lista archivos (ej. migraciones).{type:"dirs",root} — subdirectorios (ej. edge functions).{type:"grep",roots[],ext?,pattern} — cuenta coincidencias regex. Para funciones:
pattern:"create\\s+(or\\s+replace\\s+)?function" cuenta ocurrencias DDL, NO funciones
únicas — etiquetalo honesto (o mejor usá functions, abajo).{type:"routes",root,limit?} — rutas reales de Next.js App Router: por cada route.ts
emite la URL (/api/...) + métodos HTTP detectados, no el basename repetido. root = la
carpeta app (ej. web/src/app, grass-dashboard/src/app).{type:"functions",roots[],schema?,limit?} — funciones SQL distintas + su
COMMENT ON FUNCTION. Con schema:"api" → catálogo de RPCs agent-operables. Las
firmas/params NO van acá: viven en el OpenAPI vivo de PostgREST (ver abajo) — una sola
fuente, anti-drift.repoMap.describe — {dir: "descripción"} de los directorios top-level reales.Si el repo expone RPCs en un schema (ej. api) vía PostgREST (Data API de Supabase), ese
schema autogenera un OpenAPI (cada COMMENT ON FUNCTION → description). Esa es la
referencia viva con firmas/params (renderizable con Scalar/Redoc/Swagger UI o Mintlify).
Por eso el inventory functions schema:"api" solo lista nombre + COMMENT (índice grep-able)
y deja las firmas al OpenAPI. Caveat de PostgREST: no documenta argumentos de función (no se
puede COMMENT ON los args) → para params, tabla dentro del COMMENT, postgrest-openapi, o un
overlay a mano del envelope/errores.
Automático al mergear: el workflow de push regenera y auto-commitea docs/reference en la
branch de integración. No tenés que hacer nada en tu PR. Para verlo localmente cuando quieras:
npm run docs:gen (o node scripts/gen-docs.mjs) — pero no lo commitees en el PR.
docs-architect.npx claudepluginhub perennia-regeneracion/wachines-plugin-ironman --plugin Wachines-Plugin-IronmanPrevents silent decimal mismatch bugs across EVM chains with runtime lookup, chain-aware caching, and safe normalization for bots, dashboards, and DeFi tools.