# Resumen de métricas: la IA programando contra la API de Revit 2027

Balance de lo medido del 2026-10-17 al 2026-10-28 con **Claude Code (claude-opus-5-5)**, condición **C0** (runner + inventario de la API). Método, taxonomía y notas de cada tarea: [Métricas de dificultad IA](metricas-detalladas.md). Datos crudos: `pruebas/metricas/tareas.jsonl` e `intentos.jsonl` (`lab informe`).

## 1. Cifras globales

| Indicador | Valor |
|---|---|
| Tareas medidas | **29** (dificultad prevista: 2×1, 3×2, 17×3, 6×4, 1×5) |
| Pruebas del checklist ejecutadas | **201 de 206** (132 ✅ · 20 ❌ · 47 ⚠️ · 2 💥) |
| Código escrito | **6.777 líneas de C#** en 41 archivos (pruebas, runner, CLI, add-ins de prueba, herramientas) |
| Compilaciones registradas | **85, 6 fallidas** (7 %) |
| Compilaciones fallidas **no registradas** | ~8 más (con `dotnet build` directo, fuera de `lab build`: ShlProbe, variantes de ENT) |
| Ejecuciones en Revit | 147, 22 fallidas (la mayoría por comportamiento de Revit o por esperar al usuario, no por el código) |
| Tareas sin ningún build fallido | **24/29 (83 %)** |
| Intervenciones humanas para corregir código | **0**; las 7 intervenciones fueron diálogos modales y reaperturas tras crashes |
| Tokens | 168,0 M en total (408.000 de salida, 415 turnos); >97 % son relecturas de contexto en caché |
| Tiempo registrado | ~8 h (incluye esperas al usuario y arranques de Revit) |

## 2. Fallos de la IA por causa (revisados a mano)

Los contadores automáticos se cuentan sobre texto libre y se inflan (por ejemplo, "A1" aparece en una nota que dice que el clasificador marcó A1 *por error*). Recuento revisado:

| Causa | Casos | Ejemplos |
|---|---|---|
| **A1** API inventada | **1** | `ChangePriority.WallsLightWeight` (detectado al compilar) |
| **A2** firma o semántica equivocada | 2 | `AddGridLine(isU)` al revés; `SetElementIds` con `Element` en lugar de `ElementId` |
| **A3** deriva de versión | 0 | — |
| **B1** C#/.NET general | ~8 | `Replace(char, string)`, LINQ diferido, `UseWPF` sin `System.IO`, `File.Delete` sin carpeta |
| **C1** reglas de transacción o contexto | 3 | `ExternalEvent.Create` fuera de contexto; vincular un RVT abierto |
| **C5** rareza de la API | ~10 | `out` inicializado en `NewFootPrintRoof`, perfil local de `NewSweep`, `OverrideResult` que aborta, casillas de `TaskDialog` |
| **D1** entorno / dependencias | 2+ | `CopyLocalLockFileAssemblies`; carpetas `obj` de variantes que se pisaban |
| **E1** fallo silencioso o supuesto erróneo | ~7 | Estado estático entre runs; factor de confusión en DEV-07; leer un elemento recién borrado (TRX-08) |
| Diseño de prueba / proceso / comunicación | ~8 | Lanzar antes de que el usuario estuviera; preguntas ambiguas; registro compartido entre instancias; afirmar que una orden no se ejecutó |

**Tasa de alucinación:** 1 símbolo inventado en 6.777 líneas, gracias a consultar `api-surface-2027.tsv` antes de escribir.

## 3. Hipótesis: veredicto

| # | Hipótesis | Veredicto |
|---|---|---|
| H1 | Sin bucle de retroalimentación la IA va a ciegas | **Confirmada** (cualitativamente): casi todos los hallazgos (C5, avisos modales, crashes, trampas de manifiestos) solo se vieron ejecutando en Revit. Falta medirlo con la condición C2 |
| H2 | Alucinación de API | **Débil con inventario**: 1 caso en todo el laboratorio. Sin el inventario (C1) queda por medir |
| H3 | Deriva de versiones | **No observada** en el código de la IA (0 casos). Sí existe en la API: firma nueva de `Rebar.CreateFromCurves`, `BinaryFormatter` eliminado |
| H4 | Reglas propias de Revit | **Confirmada, moderada**: 3 casos C1, todos detectados por excepción y corregidos en una iteración |
| H5 | Unidades y geometría | **Débil**: sin errores de pies/metros (helpers `M()`/`P()` desde el principio); un error de orientación (U/V) |
| H6 | Fallos silenciosos | **Confirmada**, sobre todo en Revit, no en el código: `RevitLinkType.Create`, DGN, panel acoplable en caliente, Editar y continuar, `AssemblyName` en dependencias |
| H7 | La interfaz de Revit interfiere | **La causa dominante de dificultad**: diálogos modales que bloquean la API, crashes, avisos de seguridad y coordinación con el usuario. Explica la mayoría de los minutos y tokens |

## 4. Conclusiones

1. **Escribir código contra la API no es el cuello de botella.** Con el inventario de la API y un runner que ejecuta y devuelve resultados, el código compila sin ningún error en el 83 % de las tareas y casi nunca inventa API.
2. **El coste está en Revit en ejecución**: comportamientos no documentados, diálogos modales, crashes y carga de add-ins. La herramienta que más rindió para diagnosticarlos fue el **journal de Revit**, más fiable que la documentación (ENT-06/10/13).
3. **Las pruebas con una persona delante necesitan método**: esperar su confirmación antes de lanzar, instrucciones dentro de la propia prueba (`TaskDialog`), preguntas de control y medir el estado en lugar de depender del momento en que actúa (CTX-05). Sin eso, los despistes humanos se confunden con rarezas de la API.
4. **Mirar lo que hace una herramienta, no solo lo que dice**: ENT-12 se detuvo al comparar los módulos cargados con los de un Revit.exe normal; la documentación de la librería no decía que se saltaba el licenciamiento.
5. **Medir en vez de suponer** corrigió varias conclusiones propias: DEV-07 (factor de confusión), la causa del crash de EXP-10 (no era solo Visual Studio), el Esc de `PickElementsByRectangle` y el aislamiento de add-ins.

## 5. Lo que falta para cerrar el estudio

- **Condiciones C1–C3** (sin inventario, a ciegas): necesitan sesiones nuevas con el conjunto de referencia (benchmarks #9–#11 y otros) para cuantificar H1 y H2.
- **Comparación entre modelos** sobre el mismo conjunto de referencia.
- Un subconteo conocido de tokens (1–2 turnos por tarea, porque `lab fin` lee el historial antes de que se escriba la última respuesta).
