Diario
Secciones
Ajustes de lectura
Ninguna voz para este idioma en este navegador.
Más voces
Código y términos técnicos en inglés
Desactivado: la voz de la página lo lee todo, sin pausa entre dos voces.
Ninguna voz para este idioma en este navegador.
Más voces
Más voces: Microsoft Edge ofrece voces naturales en línea, y Windows (Configuración › Hora e idioma › Voz), macOS y Android instalan otras.
Progreso
Sección titulada «Progreso»- Revisión fijada elegida y extraída limpia; cada comando se volvió a ejecutar sobre ella
- Lección 1: el problema, los cuatro ejes, la doctrina
- Lección 2: los seis verbos, con un intercambio real entre tres actores
- Lección 3: el registro de eventos, el protocolo de commit,
verify - Lección 4: el trazador de coordinación, la fábrica de agentes, los recibos y el digest del árbol
- Lección 5: la escalera de carriles y los veredictos del ecosistema
- Lección 6: continuidad acotada, reconciliación exacta del wake y cadena de recibos Gaia-Demerzel
-
factory:agentejecutado de extremo a extremo con turnos reales de Claude y Codex - Versiones en francés y en español
- Una lección sobre la bomba alojada — el lado de GitHub Actions — que ha crecido en
mainy que este curso no cubre
Hallazgos al ejecutar la bomba alojada de Gaia sobre su propio repositorio, observados en main 8ed4dfc.
| Esperado | Lo que pasa | Dónde | Medida | Estado |
|---|---|---|---|---|
| Una issue etiquetada puede convertirse en Draft | El intake exige exactamente una rama con los trailers de evidencia de la issue, y nada la producía; cero ramas se rechazan como dos, con HeadIdentityAmbiguous |
src/hosted-draft-collector.mjs:319 |
2 de 79 ramas llevaban los trailers, ambas hechas a mano; el intake programado devolvía EXPECTED_NONE desde hacía días |
Corrección propuesta en gaia#155, y observada funcionando en vivo 2026-09-25 |
| Una operación de Draft ambigua se reconcilia | La operación de la issue 127 sigue en EFFECT_AMBIGUOUS y se salta en cada ejecución programada; no bloquea la cola, pero nada la resuelve |
src/hosted-draft-pump.mjs:310 |
Presente en cada recibo de intake del 2026-09-15 al 2026-09-24 | Reportado como gaia#161 |
| Un seeder que escribió una rama lo dice | Una conexión interrumpida durante la relectura lo hacía salir en fail-closed aunque la rama existía | src/evidence-head-seeder.mjs:147 (tras la corrección) |
1 caso, en la issue 106 | Corregido en gaia#155 (49d5fb3) |
| Una issue cuyo trabajo se entregó está cerrada | La issue 108 seguía abierta aunque su puerta de control estaba en main; el worker de la fábrica no editó nada |
tests/hexagonal-direction.test.mjs |
0 ediciones, 1 ejecución de la fábrica gastada | Cerrada como completada, gaia#108 |
| Un trabajo de la fábrica termina tras su worker | El trabajo de la issue 108 seguía en STARTED unas diez horas después de terminar su worker, ocupando el único hueco del host |
C:/Gaia/state, portfolio:autonomous status |
Worker terminado a las 00:25 hora local, trabajo STARTED a las 10:00 |
Explicado: watch se detiene con RECONCILIATION_REQUIRED (scripts/github-portfolio-autonomous.mjs:207); trabajo retirado con retire-closed 2026-09-26 |
Un candidato marcado CANDIDATE_READY y aprobado ha pasado sus pruebas |
Nunca se ejecuta ninguna prueba: las herramientas del worker excluyen un shell, el revisor es de solo lectura, y el «supervisor» que según el prompt ejecuta las pruebas no existe en src/ |
src/factory-visible-claude.mjs:354 |
Candidato aprobado de la issue 104: 16/17 de sus propias pruebas, recuento del README sin actualizar | Reportado como gaia#163; candidato corregido a mano 2026-09-26 |
2026-09-15 — Preparación y versiones
Sección titulada «2026-09-15 — Preparación y versiones»- Gaia en
d68e900, la cabeza demainel 2026-09-13. Extraído como worktree enlazado en modo detached, para que el árbol estuviera limpio y nada local se colara en una salida. - Node.js v24.12.0 en Windows 11. Gaia fija una versión exacta —
.node-versionyengines.nodedicen ambos 26.8.1 — y nada lo impone cuando invocasnodetú mismo, así que todo lo de estas lecciones se ejecutó con 24.12.0 sin ninguna advertencia ni fallo. Ejecutarlo con la versión fijada está por verificar; la ruta de CI es Windows con esa versión, y Ubuntu se describe como exploración de portabilidad, no como una puerta. - Cero dependencias, así que nada de
npm installantes de todo esto, ninode_modulesen un checkout limpio. La afirmación no es marketing:package.jsonno tiene ninguna clavedependenciesnidevDependencies, y el ejecutor de pruebas esnode --test. - Cada comando del bus se ejecutó sobre un directorio de datos desechable mediante
GAIA_INTERAGENT_DATA_DIR, así que nada tocó un espacio de trabajo real. Las salidas se pegan sin editar, salvo las rutas absolutas acortadas a….
2026-09-15 — Lo que informaron de verdad los comandos
Sección titulada «2026-09-15 — Lo que informaron de verdad los comandos»| Comando | Resultado |
|---|---|
doctor, directorio vacío |
ok: true, salida 0, supportedMaxLiveLanes: 4, y una nota que dice que ejecutes initialize --apply |
initialize |
simulación por defecto; --apply añadió exactamente un actor.registered |
bus-cli tools |
exactamente 6: register, send, inbox, ack, heartbeat, handoff |
verify |
37 comprobaciones superadas, 0 fallidas, en 8 secciones, evidenceGatesResult: false |
node --test |
2075 pruebas, 2074 superadas, 0 fallidas, 1 omitida, 38.9 s |
factory:smoke |
completed, punto fijo del registro de evidencias sha256:256a51d2… sobre 15 eventos y 6 315 bytes, evidenceGatesResult: true |
inventory-digest |
323 archivos, 5 937 493 bytes, ordinal-path-bytes-sha256/1 dccabe8f… |
El intercambio completo entre tres actores de la lección 2 ocupó 10 eventos y 3 617 bytes en disco. Merece la pena tener presente ese número junto al modelo de coste de la lección 5: la reproducción es O(eventos × actores), y una sesión real de coordinación entre varias partes es minúscula.
2026-09-15 — Sorpresas
Sección titulada «2026-09-15 — Sorpresas»Un rechazo es un evento. Dirigirse a un nombre de actor ambiguo devuelve ok: false, sale con 1 y añade command.rejected al registro. Esperaba que el rechazo fuera un valor de retorno y nada más. Es el detalle que hace que el registro responda a «¿qué intentó esta sesión?» y no solo a «¿qué consiguió?», y una vez visto cuesta aceptar un sistema que solo registra los éxitos.
verify antes imprimía una comprobación en rojo y salía con 0. El README recoge la corrección: tanto doctor como verify salían antes con 0 sobre un registro cuyo traspaso había transferido autoridad, mientras verify mostraba su propia comprobación en rojo diciendo lo contrario. Un lector que se fiara del código de salida, o de ok, lo leía como un aprobado. Una herramienta que informa de un fallo y devuelve éxito es exactamente el modo de fallo del que trata la lección 1, encontrado dentro del verificador — lo que es un buen argumento a favor de los controles negativos que ahora siempre bloquean.
Las comprobaciones de evidencia se dividen en dos regímenes, y es deliberado. Cinco de ellas — tres actores, más de un tipo de actor, un hilo correlacionado, un acuse de recibo, un traspaso — son legítimamente falsas en un espacio de trabajo vacío y correcto, así que informan sin bloquear, salvo que quien llama afirme que el registro es evidencia. Yo suponía que un verificador o comprueba algo o no lo comprueba. Que el eje sea la afirmación de quien llama y no la opinión de la herramienta es un diseño mejor que cualquiera de las dos alternativas.
resolveLaneLimit recibe un objeto de opciones. Llamada con un argumento posicional devuelve en silencio el valor por defecto, y así fue como lo medí mal la primera vez. resolveLaneLimit({ requested: 6 }) lanza una excepción con la declaración completa de evidencias; resolveLaneLimit(6) devuelve { limit: 4 }. Merece señalarse, dado que todo el argumento del módulo es que recortar en silencio es el error — el rechazo es real, pero solo con la forma de llamada documentada.
Los residuos se publican, no se entierran. El documento de diseño de la fábrica afirma que no se puede demostrar que un worker que se ejecuta con el usuario del host haya evitado la red, los secretos o las escrituras en otros sitios, y que un recibo que afirmara contención necesitaría una frontera separada del sistema operativo. La mayoría de los proyectos habrían escrito «ejecuta los agentes en un espacio de trabajo aislado». Este nombra el hueco y la capacidad que lo cerraría.
main ha crecido mucho más allá de lo que cubre este curso. La bomba de Drafts alojada en GitHub Actions, la red de Petri de drenaje, la sala de control, la búsqueda híbrida, la sonda de capacidades del runner, las rondas gestionadas de entrega de PR, la ingesta de observaciones de pruebas — docs/ contiene unos cincuenta registros de diseño en la revisión fijada. Las cinco lecciones cubren el bus, el registro, la fábrica y los límites. Es una porción deliberada de bala trazadora, no un mapa completo.
2026-09-15 — Correcciones hechas durante la redacción
Sección titulada «2026-09-15 — Correcciones hechas durante la redacción»- Primero cité el
AGENTS.mddel repositorio para la regla de que «el privilegio se impide por ausencia». Ese archivo no existe end68e900— era un archivo sin seguimiento en un checkout local de una rama más antigua. La cita se sustituyó por la declaración delREADME.mdy por la propia cabecera del módulo del operador, ambas verificadas en la revisión fijada. Por la misma razón, todas las demás citas se volvieron a comprobar contra el árbol fijado. - La copia de trabajo local de la que partí estaba en una rama del 2026-08-29 cuyo
README.mddifería del demain, y que no tenía niARCHITECTURE.mdniCONTEXT.md. Partir de un worktree fijado y limpio, en lugar del checkout que estaba abierto en ese momento, es el hábito que lo detectó.
2026-09-20 — Candidato de continuidad de la issue 76
Sección titulada «2026-09-20 — Candidato de continuidad de la issue 76»- El Design Receipt v7.4 recibió revisión independiente antes de implementar. El candidato se limita a una identidad, un slot y un reemplazo de generación 0 a 1.
- Gaia aislado: 2.261 pruebas, 2.259 pasaron, 0 fallaron, 2 omitidas; regresión enfocada 87/87;
verify37/37; verificador de arquitectura correcto. - Demerzel aislado: 787 pruebas Python con 1 omitida y 10/10 controles IXQL, validando esquemas/fixtures de Gaia en solo lectura.
- Revisión e integración corrigieron la importación directa de persistencia, la decisión antes de entrega, la reproducción de otra entrada con la misma clave y una prueba sin sidecar. La simplificación eliminó escaneos y asignaciones evitables.
- Son mediciones de worktrees candidatos, no prueba de publicación, fusión o release. El recibo de revisión formal, gates del commit final y PR seguían pendientes.
2026-09-25 — La bomba alojada, de extremo a extremo hasta la Draft
Sección titulada «2026-09-25 — La bomba alojada, de extremo a extremo hasta la Draft»- Por qué no salía nada.
hosted-draft-intake.ymlse ejecutaba cada 6 h, con éxito, y devolvíaEXPECTED_NONEdesde hacía días. Dos causas, ambas del lado de Gaia: ninguna issue abierta llevabaready-for-agent, y el colector exige exactamente una rama cuya punta lleveGaia-Issue: NyGaia-Ready-Receipt: <hash del evento de etiqueta>. Ningún código producía esa rama. Las dos únicas que existieron se hicieron a mano, y cero ramas se rechazan igual que dos (HeadIdentityAmbiguous, porque la prueba esmatching.length !== 1). Las automatizaciones de Augment Cosmos eran una pista falsa: la bomba nunca dependió de ellas. - La reparación, gaia#155:
npm run draft:seed-evidence -- --issue N --applycreagaia/issue-N-ready-K, un commit que reutiliza el árbol de la rama por defecto, así que no cambia ningún archivo. Calcula el recibo con la propia función del colector, extraída en lugar de copiada, nunca pone la etiqueta, y deja que la relectura decida el resultado. - Observado en vivo en la issue 108: etiqueta → seed
CREATED→ intakeADMIT→ Draft gaia#156 → la fábrica local (portfolio:autonomous watch, activada una vez con un presupuesto de 20 ejecuciones) la tomó en menos de un minuto. La misma cadena produjo gaia#158 para la issue 104. - Dos rechazos que eran correctos: la issue 148 volvió como
StaleRevisionporque la bomba ya la había convertido en Draft el 2026-09-13 (#149): una sola Draft por unidad de trabajo. El worker de la fábrica en 108 no hizo ninguna edición, porquetests/hexagonal-direction.test.mjsya estaba enmain: la issue había quedado abierta después de que su trabajo se entregara. - Un defecto encontrado al ejecutarla: una conexión interrumpida durante la relectura, tras una escritura correcta, hacía salir al seeder en fail-closed, lo que daba a entender que no se había escrito nada, aunque la rama sí existía. Ahora responde
AMBIGUOUS, y una nueva ejecución respondePRESENT. - Lo que la bomba no hace, por diseño: decidir qué está listo.
ready-for-agentes el acto de autoridad del operador. Un alimentador que elegía y etiquetaba su propio trabajo fue rechazado por el clasificador de permisos del agente como agente inseguro, la misma línea que el «nada se autoautoriza» de Gaia. En su lugar, una clasificación de solo lectura (gaia#157). Hoy encuentra una candidata entre 38 issues abiertas, porque 34 todavía llevanneeds-triage: el cuello de botella es el grooming, no la bomba.
2026-09-26 — El candidato de la fábrica, y las pruebas que nadie ejecutó
Sección titulada «2026-09-26 — El candidato de la fábrica, y las pruebas que nadie ejecutó»- Por qué
watchse había callado. No se había colgado, había terminado. Tras un worker sin ediciones en la issue 108, el trabajo acabó enRECONCILIATION_REQUIRED, ywatchse detiene con ese estado por diseño (scripts/github-portfolio-autonomous.mjs:207). El trabajo ocupaba entonces el único hueco. Como la issue y su Draft estaban cerradas,retire-closedlo retiró comoABANDONEDtras una vista previa. Hice la copia de seguridad de la base que pide la documentación después en lugar de antes; no se perdió nada. - La issue 104 produjo un candidato real:
CANDIDATE_READY, revisorAPPROVE, tres archivos (un manifiesto puro de reanudación de carril, su documento y 17 pruebas). Se quedó en local: la fábrica nunca publica. - La aprobación no significaba que las pruebas pasen. Ejecutado con el Node fijado 26.8.1, el candidato fallaba una de sus propias pruebas y la prueba del recuento del README. La causa es estructural. El prompt del worker dice «run the narrowest relevant tests», pero sus herramientas son
Read,Write,Edit,Glob,Grep(src/factory-visible-claude.mjs:354), y el prompt añade que «tests are run separately by the supervisor». Ningún código desrc/las ejecuta. Reportado como gaia#163, que propone un paso de verificación determinista, a cargo del host, antes de la revisión, en lugar de un shell para el modelo. - La prueba estaba mal, no el código. Añadía
src/extra.mjsdespués desrc/resume-manifest.mjs. El módulo exige artefactos ordenados por ruta, así que la observación se rechazaba como malformada antes de cualquier comparación. Añadirtests/extra.mjsconserva la intención de la prueba; con el recuento del README actualizado, el candidato pasa y se publicó en la Draft gaia#158.
Por verificar
Sección titulada «Por verificar»factory:agentde extremo a extremo. Gasta un turno real de Claude y un turno real de Codex con las suscripciones instaladas. La lección 4 lo describe a partir desrc/factory-agent.mjs, de su documento de diseño y del esquema de su recibo; ninguna afirmación de esa lección procede de una ejecución observada. Qué capturar cuando se ejecute: la forma del recibo con y sin reparación, las líneas de progreso(not an ETA), y si la comprobación de modificaciones del revisor llega a saltar en la práctica con archivos ignorados.- Node 26.8.1, la versión fijada. Todo lo de aquí se ejecutó con 24.12.0.
- Linux y macOS. El protocolo de commit está escrito y probado pensando primero en Windows, y el repositorio dice que Linux es exploración, no una puerta. El enfoque del directorio de cerrojo debería comportarse igual; los reintentos de liberación propios de Windows simplemente no se ejercitarían.
- Un segundo carril concurrente sobre el mismo directorio de datos. Todas las salidas de estas lecciones proceden de llamadas secuenciales en una sola shell. La unicidad de los identificadores entre procesos es lo que afirma la batería de pruebas, no lo que yo observé.
- El indicador
authority-language-detected. Lo vi saltar con «Please merge this.». No he mirado qué detecta, y la tasa de falsos negativos de una heurística es el número interesante. - La issue 76 después de la revisión final. Repetir las gates de Gaia y Demerzel sobre commits exactos, publicar mediante PR normales y reemplazar evidencia candidata por enlaces inmutables.
Preguntas abiertas
Sección titulada «Preguntas abiertas»- El bus serializa las escrituras y no tiene autenticación — la confianza es posicional, así que cualquier proceso capaz de lanzar el servidor puede registrarse como cualquier actor. La lección 5 muestra que es uno de los dos bloqueos nombrados para la integración con IX. ¿Cuál es el mecanismo de identidad de actores más pequeño que no convertiría el bus en un almacén de credenciales?
- La reproducción es O(eventos × actores) sobre un registro que nunca se compacta, e
inboxescribe un evento. Un carril que sondea hace, por tanto, que cada llamada posterior sea más lenta. ¿Hay una ruta de lectura que conserveinbox.polledcomo evidencia sin pagarla en cada reproducción — una instantánea más la cola, como sugiere el documento de escala? - La cifra de cuatro carriles es honesta al reconocer que no está replicada con clientes reales. Ejecutar esa sonda requiere cuatro carriles de agentes reales simultáneos, lo que cuesta turnos reales de modelo. ¿Cuál es el experimento más barato que discriminaría de verdad — y una mezcla de un carril real y tres sintéticos demostraría algo, o es otra vez la sonda de workers de Node con pasos adicionales?