17 KiB
| title | type | status | informe |
|---|---|---|---|
| Triage de revisiones externas — eje agéntico | process / triage acumulativo | vivo — una sección por revisor; los veredictos ACEPTAR quedan EN COLA hasta firma del usuario | INFORME-eje-agentico-revision-externa.md |
Triage de revisiones externas — eje agéntico
Veredictos: ACEPTAR (integrar, pendiente de firma) · PARCIAL (idea buena, forma distinta) · REFUTAR (incorrecto para esta arquitectura) · DELEGAR (pertenece a otro track).
R1 · Gemini (2026-07-21)
| # | Hallazgo | Veredicto | Decisión tocada |
|---|---|---|---|
| G1 | Session/Subscription como primitivo; Run = materialización transaccional de un delegate dentro de ella |
PARCIAL — Run sigue primario; se clarifica que la instancia ActiveAgent ES la sesión (N7/N8 ya lo implicaban); modo pasivo/watcher (sugerencias → delegate.offer) queda RESERVADO, no construido |
N1 (redacción) |
| G2 | Timeout de red con act ya ejecutado → estado fantasma | ACEPTAR — idempotencia: dedupe por toolCallId en la puerta de capacidad; reintentos seguros |
D-AG.3d / N3 |
| G3 | Falta presupuesto de tokens/bytes de contexto + política de truncado local | ACEPTAR | N3 |
| G4 | Estado superseded (la premisa del run destruida por cambio externo) |
ACEPTAR en forma de CAUSA tipada de cierre (returned/cancelled con reason superseded), no necesariamente estado nuevo — forma a discutir; sema puede distinguir por causa |
N2 |
| G5 | escalated sin salida si el usuario ignora → timeout escalated → returned |
ACEPTAR — el presupuesto de run cubre también la espera de escalada | N2/N3 |
| G6 | Propagación del actor en cascadas (bus/orca): eventos secundarios pierden actor:'agent' |
ACEPTAR con matiz crítico: la atribución ambiental de orca usa AsyncLocalStorage con FALLBACK a root-event en navegador — justo nuestro runtime; el actor debe viajar EXPLÍCITO en el envelope/trace, hilado desde la puerta de capacidad | N6 |
| G7 | OCC: cada read exporta _version; cada act la exige; mismatch → error de dominio recuperable |
ACEPTAR — es LA respuesta a TOCTOU (§7.2); complementa (no tumba) D-AG.2c | D-AG.3 / §7.2 |
| G8 | Data fencing (delimitadores de contenido no confiable inyectados por el adaptador) | PARCIAL — fencing sí, pero insuficiente solo: + metadato de origen por read + ESCALADA DE POLÍTICA (auto→review) cuando el contexto contiene material no confiable | §7.1 / N5 |
| G9 | Blast radius: riesgo dinámico por payload (misma capacidad, riesgo distinto) → escalada por invocación | ACEPTAR — la capacidad declara clasificador de riesgo sobre args; auto puede escalar a review por invocación |
N5 / D-AG.3 |
| G10 | Concurrencia espacial: ¿lock a nivel componente o nodo/parte? | ACEPTAR como eje declarado: el run declara su write-scope (componente | parte | rango) y hold/pintura aplican solo a ese scope. Materialización → DELEGAR al track palabras | doctrina + track palabras |
| G11 | Lazy context / pointer reads: resumen topológico + tool implícito read_node(id) del motor |
ACEPTAR — resuelve §7.4 (contexto a escala) e identidad de instancia por ids estables; converge con los readables jerárquicos de CopilotKit | D-AG.2c / D-AG.3 / §7.4 |
| G12 | A11y: no aria-live por delta; consolidar anuncio en delegate.return (polite); log off-screen aria-relevant="additions"; aria-details → contenedor Aura |
ACEPTAR — entra al contrato a11y del eje (announce en return/escalate, nunca por delta) | superficie/a11y |
| G13a | Swarm/LangGraph handoffs: el toolset muta MID-RUN | PARCIAL — la declaración de tools es por-turno (granularidad correcta en protocolos LLM); lo que falta: calls pendientes contra capacidad revocada fallan TIPADO → escalate | D-AG.3c |
| G13b | Jupyter Kernel Protocol como referencia (preempted, aborted-by-mutation) | ACEPTAR — a la lista de referencias del estudio | §8 |
| G13c | Figma-style: «orca necesita transaction.begin() para agrupar acts» | REFUTAR la forma — viola el invariante de orca (solo la app registra acciones) y confunde compensación con undo; la transacción va en la PUERTA DEL PROVIDER (api.transact del componente), ya corregido en la auto-crítica. La referencia Figma sí vale como precedente del patrón | — |
Impacto neto: ninguna decisión firmada cae. D-AG.2c se complementa (OCC), D-AG.3 (abierta) absorbe G2/G7/G9/G11/G13a; N1/N2/N3/N5/N6 acumulan enmiendas pendientes de firma; §7.1/7.2/7.4 obtienen sus mitigaciones estándar.
R2 · ChatGPT (2026-07-21)
Valida explícitamente las tres tesis nucleares (señal fuerte de triangulación):
delegate como fundamento actor-agnóstico («elimina el concepto de IA»), el
agente no conoce componentes (todo por capacidades), y misma API pública +
actor («exactamente donde suelen romper todos los sistemas de copilotos»).
No tocó TOCTOU/OCC ni seguridad (hueco de su revisión, cubierto por R1).
| # | Hallazgo | Veredicto | Decisión tocada |
|---|---|---|---|
| C1 | El Run está «demasiado arriba»; el verdadero objeto es CapabilityCall; el Run podría ser solo transacción de coordinación | PARCIAL — CapabilityCall ES la unidad de mutación, pero el Run es la unidad de DELEGACIÓN (presupuesto, autorización, agrupado de undo, devolución de control) — no puede haber mutación agéntica sin ese envoltorio. Se acepta: documentar la escalera explícita (ActiveAgent=sesión → Run=delegación → Turn=coordinación → CapabilityCall=mutación) y el Run degenerado (una sola call, auto-autorizada — el caso macro/workflow del libro) | N1 (doctrina) |
| C2 | La máquina delegate es demasiado lineal para agentes que replanifican mientras ejecutan (plan→tool→plan→review parcial→…) | PARCIAL/ACEPTAR — leyó los estados como fases cognitivas; son custodia del control, no cognición: el ciclo plan→tool→plan vive DENTRO de acting (turns). Lo que sí falta y se acepta: review re-entrante (acting ↔ reviewing en bucle, aprobaciones parciales/incrementales) + declararlo en la doctrina («la máquina modela quién tiene el control, no cómo piensa el agente») |
N2 |
| C3 | Falta la iniciativa (por qué actúa: pedido por el usuario vs decidido por el sistema), no solo el actor | ACEPTAR — su mejor aporte. initiative: 'user' | 'system' | 'scheduled' como identidad del Run + viaja en el contexto de actor de cada call. Encaja natural: el verbo de ENTRADA al ciclo ya la insinúa (offer-first = iniciativa del sistema). Alimenta política (N5: techos más estrictos para iniciativa autónoma — sinergia con G8), a11y (anuncios distintos) y audit |
N1/N5/N6 |
| C4 | Las capacidades parecen RPC; deberían ser comandos semánticos (rewriteSelection, summarize…) — «una capa semántica sobre la API mecánica»; su «mayor riesgo» | PARCIAL con refutación de la forma — summarize/translate son cognición del MODELO, no capacidades del componente: meterlas en el manifiesto pondría lógica LLM dentro del componente (dirección equivocada). El split correcto: capacidades = mutaciones mecánicas del mundo (pocas, con la ALTITUD correcta — riesgo real que sí se acepta vigilar) · operaciones semánticas = razonamiento del modelo o skills agent-side reservadas (equivalente a MCP prompts, tier futuro). La semántica perceptiva ya la da sema | D-AG.3 (doctrina de altitud) |
| C5 | Disponibilidad binaria; faltan rasgos para el razonador (experimental/slow/expensive/unsafe/stale/approximate) | ACEPTAR como traits/annotations del manifiesto (clase de coste/latencia, estabilidad, staleness de reads) — no estados nuevos de disponibilidad. Precedente directo: MCP tool annotations (readOnly/destructive/idempotent hints). Se proyecta al modelo vía D-AG.3b |
D-AG.3 |
| C6 | Sin hueco para delegación distribuida (otro agente/runtime/dispositivo) — dejar hueco explícito | ACEPTAR como hueco reservado — el diseño ya es compatible por construcción: handler opaco (D-AG.3a) = location-transparency; se reserva parentRunId (sub-runs / agente-como-capacidad) y A2A entra como referencia de paridad futura. Nada se construye en v1 |
N1/D-AG.3 (reserva) |
Cruce R1×R2: G1 (Session↑) y C1 (CapabilityCall↓) atacan N1 desde direcciones opuestas — el Run como unidad de delegación queda en pie entre ambos, pero exige la escalera documentada. C3 (iniciativa) × G8 (escalada por contexto no confiable) convergen en enriquecer las ENTRADAS de la política N5. C5 (traits) × G11 (lazy context) convergen en enriquecer el manifiesto. Nadie desafió el OCC de G7 ni D-AG.1/2 firmadas.
R3 · z.ai (2026-07-21) — ⚠️ revisión-eco
No es una revisión independiente del informe: asimila R1 (Gemini) casi punto por punto y la presenta como «la reestructuración v2». Peligro si se toma al pie de la letra: «acepta» cosas que nuestro triage ya había refutado o matizado, SIN argumentos nuevos. Donde decide contra nuestro veredicto, se reafirma el veredicto:
| # | Punto z.ai | Veredicto |
|---|---|---|
| Z1 | Session/Subscription como «corrección de raíz» sobre Run |
REAFIRMAR G1-PARCIAL — sin argumento nuevo; F2 (R4) aporta además precedente de producción PRO-Run (OpenAI Assistants Thread/Run/Step) |
| Z2 | context_budget + truncado FIFO+resumen semántico |
ACEPTAR detalle (se pliega a G3/F4b) |
| Z3 | Idempotencia con resultado cacheado en backend | ACEPTAR detalle (se pliega a G2) |
| Z4 | superseded como estado nuevo + timeout 60s |
REAFIRMAR G4 (causa/outcome tipado, no estado) |
| Z5–Z8, Z10–Z11, Z13 | Actor en cascada · OCC (StateStaleError) · fencing · riesgo dinámico · lazy context · a11y (aria-busy ✓ útil) · Jupyter |
SECUNDAN R1 — votos adicionales, sin cambio |
| Z9 | Lock espacial «a nivel nodo» universal | REAFIRMAR G10 — el run DECLARA su write-scope (componente|parte|rango); nodo-universal ignora componentes sin esa granularidad; materialización → track palabras |
| Z12 | orca.transaction.begin() |
RE-REFUTADO — sigue violando el invariante de orca; la transacción vive en la puerta del provider |
| Z14 | Mutación de tools mid-turn | REAFIRMAR C13a — declaración por-turno + fallo tipado para calls pendientes; F5c (R4) añade re-gating de grants |
Valor neto: 2ª votación de R1 + tres detalles de implementación. Cero hallazgos estructurales propios.
R4 · Fable (2026-07-21) — la más profunda de las cuatro
Valida la tesis del eje contra las tres alternativas y aporta ~25 hallazgos. Casi todo ACEPTADO; tres cazas estructurales que nadie más vio (F3a, F6b, F1b).
Estructurales nuevos
| # | Hallazgo | Veredicto | Toca |
|---|---|---|---|
| F3a | Vinculación autorización↔plan (deriva del plan): authorized debe fijar allowlist de capacidades + presupuesto DERIVADOS del plan; act fuera de alcance ⇒ escalate automático a re-review; reviewing re-entrable (converge con C2) |
ACEPTAR — el agujero por el que un run revisado hace cosas no revisadas | N2/N5 |
| F6b | Acuñación del contexto de actor: token opaco emitido SOLO por el motor por CapabilityCall (no literal construible); guard verifica que nadie fabrica actores a mano | ACEPTAR — anti-falsificación, nadie más lo vio | N6/guard |
| F6a | Propagación causal: síncrono trivial (pila ambient), CUALQUIER frontera async la rompe → decidir YA: propagación solo-síncrona documentada vs bus transporta causalidad. La decisión con mayor coste de retrofit del documento | ACEPTAR como decisión pre-F1 — eleva G6 | N6 |
| F1b | Run sin superficie montada = ciclo perceptualmente invisible (contradice «¿quién actúa?») → doctrina dura: autonomía > suggest exige superficie de presencia registrada (Aura mínima); verificable mecánicamente | ACEPTAR | N5/N6/superficies |
| F3b | returned con outcome tipado: completed | partial | rolled-back | aborted | error + política de fallo a mitad (rollback a inicio-de-run vs parcial informado) |
ACEPTAR — absorbe G4/Z4 | N2 |
| F3c | Pausa sin verbo nuevo: pausa = return con contexto reanudable; reanudar = run nuevo encadenado en la sesión — coincide con la mecánica resume de AG-UI |
ACEPTAR — preserva el vocabulario cerrado del libro | N2 |
| F3e | Divergencia AG-UI resuelta: estados semánticos en el motor, interop en el cable — review/elicitación viajan como confirmation-tool (capacidad reservada del sistema) | ACEPTAR — cierra la pregunta embebida de §8.2 | D-AG.2a |
| F8b | La unificación §7.1↔N5: origen no-confiable en el contexto del turno BAJA el techo de autonomía vía la maquinaria prefs/deny-overrides existente (contexto sucio ⇒ techo review) — la inyección deja de ser amenaza abierta y pasa a ser fila de la resolución de política |
ACEPTAR — completa G8/C3; mismo guard, misma doctrina | N5/§7.1 |
| F8d | TOCTOU completo: autorización vinculada a fingerprint F de los reads (no al texto del plan); deriva ⇒ recomputar diff (idéntico → re-aprobación automática opcional); TTL de autorización; OT/CRDT como modelo mental para usuario↔agente | ACEPTAR — extiende G7 | D-AG.3/§7.2 |
| F9 | Identidad a escala: push→pull — índice siempre presente (id+tipo+etiqueta+resumen, jerárquico) + read(instanceId) bajo demanda + priorización por foco/viewport (señal UIX-nativa) + ambigüedad ⇒ elicitación N4, no heurística |
ACEPTAR — completa G11 con lo que solo nosotros tenemos | D-AG.3/§7.4 |
| F7 | El protocolo debe tipar la DIRECCIÓN del canal de estado (AG-UI snapshot/delta = agente→UI; nuestros reads = UI→agente) o se sobrecargará una para la otra | ACEPTAR | D-AG.2c |
Endurecimientos aceptados
- F1a Tiers de madurez de manifiesto (solo-reads → acts reversibles → completos) con guard auditando el tier — el camino incremental para ~110 componentes. → D-AG.3/secuencia.
- F1c Portabilidad de
EngineAgenta servidor como requisito explícito. - F2a Asistencia ambiental (always-on): decidir EXPLÍCITAMENTE dentro (micro-run coalescido) o fuera — si queda fuera sin decirlo crecerá un segundo sistema de agencia paralelo. → nueva D-AG con G1/C6.
- F4a Topología de credenciales: adapter-proxy al backend como topología de primera clase; presupuestos cliente = cortesía UX, no frontera de seguridad (declararlo honesto).
- F4c Schema-válido ≠ seguro: límites de tamaño por arg; doctrina §7.1 aplicada a RESULTADOS de capacidades; clase de fallo
unknown-capability(tool alucinada → error como tool-result, acotado). - F5a Reversibilidad por-efecto (no por-capacidad); efectos externos (enviar/publicar/notificar) = irreversibles por definición; guard de veracidad sube de prioridad.
- F5b Fatiga de aprobación: grants persistentes con TTL + alcance explícito; review basada en diff computado, no en prosa del plan.
- F5c capabilities-changed ⇒ re-gate de grants (conecta D-AG.3c con N5).
- F11 Contrato a11y concreto: live region
politeÚNICA propiedad de Aura, anuncios atribuidos y coalescidos por lote; no-robo-de-foco como invariante del motor (WCAG 3.2.x);aria-busyen la región mutándose; elicitaciones posponibles (2.2.4); cancelar/return alcanzable global (doctrina Esc). Oportunidad: fijar el patrón que otros citarán. - F12 Kill switch global (
disable→ todos los runsreturned(aborted)) · identidad de usuario en el vocabulario de actor (multiusuario, reserva) · journal write-ahead mínimo por run vía storage (v1: sessionStorage — detección de runs huérfanos; enmienda a N8) · i18n del agente (identity/system-context lleva locale; en qué idioma anuncia — cruce con el eje langs) · guard de CALIDAD de manifiesto (descriptions vacías, acts sin clase de fallo — lintable) · versionado de protocolo y manifiestos en el handshake del run.
Referencias que cambian decisiones (a §8/§10)
OpenAI Assistants/Responses (Run-primario + requires_action = nuestro
escalated en producción) · MCP sampling · A2A · OpenAI Agents SDK (handoffs:
el «segundo agente» llegará por handoff antes que por 2ª instancia) ·
seguridad: CaMeL, dual-LLM, lethal trifecta, instruction hierarchy,
spotlighting, OWASP LLM Top 10 (§8 no tenía NI UNA referencia de
seguridad) · statecharts Harel/SCXML (escalated con subestado de
elicitación) · OT/CRDT (Yjs) · OpenTelemetry GenAI semconv: definir YA el
puerto de trazas con forma OTel (run=trace, CapabilityCall=span) y el
vehículo llega después — responde §7.3 · LSP capability negotiation
(precedente de D-AG.3c).
Estado tras 4 revisiones
- Las tres apuestas de la mesa: Run-primario SOBREVIVE a los 4 (atacado desde arriba G1/Z1, desde abajo C1, validado con precedente F2) con enmiendas: sesión nombrada + escalera documentada + decisión explícita del modo ambiental. OCC secundado por unanimidad y EXTENDIDO (vinculación autorización↔fingerprint + TTL). Split mecánico/semántico de C4 sin desafíos; complementado por tiers de madurez F1a.
- Firmadas D-AG.1/D-AG.2: intactas tras 4 revisiones. D-AG.2a gana el mapeo confirmation-tool (F3e); D-AG.2c gana dirección tipada (F7).
- Prioridad de la próxima iteración (top-3 de R4, compartido):
- vinculación autorización↔plan con escalada por deriva (F3a+F8d),
- origen-de-contexto en la resolución de política N5 (F8b),
- decidir la propagación causal del actor ANTES del primer provider (F6a).