You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte-kit-vice/docs/process/TRIAGE-revision-externa-age...

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 EngineAgent a 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-busy en 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 runs returned(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):
    1. vinculación autorización↔plan con escalada por deriva (F3a+F8d),
    2. origen-de-contexto en la resolución de política N5 (F8b),
    3. decidir la propagación causal del actor ANTES del primer provider (F6a).

Powered by TurnKey Linux.