--- title: PLAN — Eje agéntico ($agent) · track del agente como tal type: process / plan de ejecución status: v2.2 — D-AG.1/D-AG.2 + bloque §3 + ⚖️1/⚖️2/⚖️3 FIRMADOS (2026-07-21). F0 desbloqueada. date: 2026-07-21 docs: informe: INFORME-eje-agentico-revision-externa.md triage: TRIAGE-revision-externa-agente.md doctrina-futura: docs/architecture/agent.md (F0, no existe aún) scope: | ESTE track = el agente como tal (motor, protocolo, contratos, ciclo, semántica, superficies propias). La integración en palabras (4 ejes F-B, provenance en su modelo, puertas mudas, transact, concurrencia espacial) pertenece al TRACK DE PALABRAS, que consume el contrato definido aquí. provenance: | Ids entre corchetes = origen: N* (propuesta propia) · G* (Gemini) · C* (ChatGPT) · F* (Fable) · Z* (z.ai). Detalle y veredictos en el triage. --- # PLAN — Eje agéntico (`$agent`) ## §1 · Tesis y principios (doctrina, no negociable sin re-firma) 1. **Es un eje, no un componente**: motor (art) + contrato de participación por componente + registro + superficies propias. Instancia el patrón de eje ortogonal existente (motor + módulo-por-componente + wiring + canon + guard). 2. **Regla de oro**: el agente actúa por la MISMA API pública del provider; la ruta de llamada no se bifurca, pero la **concreción semántica depende del actor** (eventos polimórficos `allowedFamilies` → `{family:'delegate', verb:'act'}` cuando el actor es el agente). Puerta ausente ⇒ se promociona al componente; nunca bypass. 3. **Actor-agnóstico** (libro cap. 29): macro, regla, workflow o LLM — todos son «otro actor». Nada del eje depende de un proveedor LLM concreto. 4. **Degradación total**: con el eje ausente, todo componente funciona al 100%. Fila §0 de contratos mínimos obligatoria en F0. 5. **Presupuestos cliente = cortesía de UX, no frontera de seguridad** [F4a]: la frontera vive donde vive la credencial (proxy/backend). Se declara así de honesto en la doctrina. ## §2 · Decisiones FIRMADAS (2026-07-21, vinculantes) | D | Decisión | | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **D-AG.1a** | Arte `agent` · `$agent` · `EngineAgent` (puro) + `ActiveAgent` (reactivo, contrato ActiveEngine) | | **D-AG.1b** | Factory feature-scoped `defineActiveAgent(...)` a nivel app (patrón auth/session); NADA en ActiveUix v1; promoción a accessor `uix.agent` con el consumidor canónico (precedente scene-D4) | | **D-AG.1c** | Adaptadores de proveedor en `$agent/adapters/*` fuera del barrel (precedente `$logger/adapters`); **ScriptedAgentTransport determinista first-class** (tests sin mocks, demos estáticas) | | **D-AG.2a** | Protocolo de eventos PROPIO espejo de AG-UI (5 categorías: run · deltas · tool-calls · estado · custom), nombres alineados con el canon; AG-UI = baseline de paridad (patrón ethereal) | | **D-AG.2b** | El streaming lo posee cada adaptador (fetch+ReadableStream/SSE local); `$http`/`$connection` intactos | | **D-AG.2c** | Estado = snapshot-por-turno v1; categoría snapshot/delta RESERVADA tipada; JSON Patch en la generalización | Enmiendas menores a D-AG.2 aceptadas en triage (no alteran lo firmado, se firman con el bloque §3): dirección tipada del canal de estado [F7], mapeo wire de review/elicitación como confirmation-tool [F3e], versionado de protocolo y manifiestos en el handshake del run [F12]. ## §3 · Decisiones A FIRMAR (consolidadas del triage) > Cada bloque es una decisión firmable. ⚖️ marca las bifurcaciones con > alternativas reales donde hace falta TU elección; el resto lleva la forma > recomendada ya consensuada por la revisión cruzada. ### D-AG.3 — Modelo de dominio y sesión [N1 · G1 · C1 · C3 · F2] - **La escalera, documentada**: `ActiveAgent` = **sesión** (larga vida, contexto entre runs — «hazlo otra vez en la sección 2») → `Run` = **delegación** (presupuesto, autorización, agrupado de undo, devolución de control) → `Turn` = coordinación → `CapabilityCall` = **mutación** (lo único que toca el mundo). Conversation = superficie opcional que encadena runs. - **Run degenerado**: una sola call auto-autorizada (macro/regla/workflow — el caso no-IA del libro) es un Run válido y barato. - **`initiative`** [C3]: `'user' | 'system' | 'scheduled'` en la identidad del Run, viajando en el contexto de actor de cada call. Alimenta política (D-AG.7), a11y y audit. El verbo de entrada la insinúa (`offer`-first = iniciativa del sistema). - **Reservas** (huecos declarados, no construidos): `parentRunId` (sub-runs / agente-como-capacidad / A2A) [C6]; identidad de usuario en el vocabulario de actor (multiusuario, llega con `connection`) [F12]. - ✅ **Modo ambiental** (always-on) [F2a·G1·C6] — **FIRMADO ⚖️1: fuera del eje v1, RESERVADO CON NOMBRE**: `Subscription`/watcher que emite `delegate.offer`; micro-runs coalescidos = diseño futuro (F5). Deja constancia para que no crezca un segundo sistema de agencia paralelo por la puerta de atrás. ### D-AG.4 — Máquina de estados del run [N2 · C2 · G4 · G5 · F3] - Estados = verbos `delegate`, **como custodia del control, no fases cognitivas** [C2]: el ciclo plan→tool→plan del modelo vive DENTRO de `acting`. - **`reviewing` re-entrante** desde `acting` [C2·F3a] (aprobaciones parciales/incrementales). - **La autorización fija alcance** [F3a]: `authorized` deriva del plan un **allowlist de capacidades + presupuesto**; un act fuera de alcance ⇒ `escalate` automático a re-review (ni fallo ni silencio). Sin esto, la review es teatro. - **`returned` con outcome tipado** [F3b·G4]: `completed | partial | rolled-back | aborted | error`, con `reason` (p. ej. `superseded` — la premisa cambió por mutación externa; `budget-exhausted`; `killed`). **Política de fallo a mitad de secuencia — FIRMADO ⚖️3: rollback a inicio-de-run por defecto** (el usuario autorizó el plan entero, no la mitad; reversión vía historia nativa); una capacidad puede DECLARAR en su manifiesto que admite cierre parcial cuando tenga sentido. - **`escalated`**: no terminal; `reason` tipado (`elicitation | insufficient-scope | budget-exhausted | out-of-plan`) [F3d]; **timeout → auto-return** (escalada abandonada) [G5]. - **Pausa sin verbo nuevo** [F3c]: pausa = `return` con contexto reanudable; reanudar = run nuevo encadenado en la sesión (coincide con el `resume` de AG-UI — la mecánica wire y nuestra semántica convergen). - **Interrupción del usuario = `return` inmediato**, jamás error. - **Kill switch global** [F12]: primitiva del motor (`disable()`) → todos los runs `returned(aborted)`. Cubre «agente presente pero desactivado YA». ### D-AG.5 — Tool-loop y presupuestos [N3 · G2 · G3 · F4] - Loop en `EngineAgent`, cliente, v1; **portabilidad a servidor como requisito explícito** del núcleo (sin DOM, sin runes en el Engine) [F1c]. - Acts **secuenciales** v1. Fallos tipados → verbos (recuperable→retry acotado · alcance→`escalate` · abortado→`return`); clase **`unknown-capability`** (tool alucinada) devuelta como tool-result para auto-corrección, acotada por presupuesto [F4c]. - **Presupuestos first-class**: máx. acts/run · máx. turns · timeout (uix.timers) · **tokens/contexto con política de truncado local** (FIFO + resumen) [G3·Z2] · `AbortSignal` en cada capacidad. Agotamiento ⇒ `escalate`, jamás silencio. (Los guards de orca NO alcanzan este loop — verificado.) - **Idempotencia** [G2·Z3]: dedupe por `toolCallId` en la puerta de capacidad; reintento tras timeout de red devuelve el resultado cacheado, nunca re-ejecuta. - **Topología de credenciales** [F4a]: adapter-proxy hacia el backend del app como topología de primera clase documentada; directo-a-proveedor desde el navegador = footgun señalado a gritos. ### D-AG.6 — Contrato de capacidades y reads [D-AG.3 previa · G7 · G11 · C5 · F1a · F4c · F5a · F9] - **6a Hogar**: contrato estructural en el arte (`AgentCapability`/`AgentRead`: ids string, args Standard-Schema vía sium, handler opaco — patrón MotionDom/SceneDom); los manifiestos uix (`src/uix/agent/components/{x}.ts`) lo satisfacen tipando contra la API del provider. El handler opaco da location-transparency gratis (reserva distribuida) [C6]. - **6b Proyección model-facing**: emisor **sium→JSON Schema** + `description` obligatoria por read/act/arg. **Límites de tamaño por arg** en el contrato [F4c]. - **6c Instancias y contexto — push→pull** [F9·G11]: índice siempre presente (id estable + tipo + etiqueta + resumen de una línea, jerárquico — valida el parentId de CopilotKit) + reads profundos como capacidad pull (`read(instanceId)`) + **priorización por foco/viewport** (señal UIX-nativa) - ambigüedad de direccionado ⇒ **elicitación**, no heurística. `available` reactivo por act + `capabilities-changed` entre turnos; call pendiente contra capacidad revocada ⇒ fallo tipado → escalate [C13a]. - **6d Resultados**: tipados con sium; los RESULTADOS de reads/acts con contenido de terceros son tan no-confiables como un documento importado (misma doctrina de origen) [F4c]. - **6e Traits** [C5]: annotations para el razonador (coste, latencia, estabilidad, staleness) — precedente MCP tool annotations. - **6f OCC** [G7·F8d]: cada read exporta `_version`; cada act la exige; mismatch ⇒ `StateStaleError` recuperable (re-read → re-plan). - **6g Altitud** [C4]: capacidades = mutaciones MECÁNICAS del mundo, pocas y a la altura correcta (`replaceRange`, no 12 micro-inserts). Operaciones semánticas (`summarize`, `translate`) = cognición del modelo; «skills» agent-side reutilizables (equivalente MCP prompts) = tier RESERVADO. - **6h Tiers de madurez del manifiesto** [F1a]: `reads-only` → `acts reversibles` → `acts completos`; el guard audita el tier declarado; los ~110 componentes entran incrementalmente sin gatear el eje. - **6i Reversibilidad POR-EFECTO** [F5a]: no por-capacidad; efectos externos (enviar/publicar/notificar) = irreversibles por definición; la autoridad de reversión es la historia nativa del componente (nunca compensación de orca). ### D-AG.7 — Autorización, consentimiento y política [N5 · G8 · G9 · C3 · F5 · F8] - Tres niveles (`suggest | review | auto`), resolución estilo prefs (app = techo, usuario ajusta por debajo, la capacidad exige MÁS control, nunca menos), **deny-overrides**; irreversible ⇒ review SIEMPRE. - **Riesgo dinámico por payload** [G9]: el manifiesto declara clasificador de riesgo sobre args; `auto` escala a `review` por invocación. - **Origen del contexto en la resolución** [F8b — la unificación]: cada read lleva etiqueta de origen (`authored-by-user | imported | third-party | other-participant`); **cualquier origen no-confiable en el turno BAJA el techo** (⇒ `review`, o `suggest` para capacidades sensibles). §7.1 del informe deja de ser amenaza abierta: es una fila más de esta resolución. - **`initiative` afecta techos** [C3]: iniciativa autónoma (`system` / `scheduled`) ⇒ defaults más estrictos que la pedida por el usuario. - **Autorización vinculada al estado, no a la prosa** [F8d]: la review computa contra fingerprint F de los reads relevantes; la autorización se liga a F + **TTL**; deriva ⇒ recomputar diff (idéntico → re-aprobación automática opcional; distinto → re-review). Cierra TOCTOU (§7.2 del informe). - **Fatiga de aprobación** [F5b]: grants persistentes («siempre permitir X») con TTL y alcance explícito (sesión/componente/tipo de act); la review muestra **el cambio concreto propuesto en el dominio del app, nunca prosa** (enmendado 2026-07-22 — el contenido de la review es del APP; ver doctrina «The review surface» en agent.md §7). - **`capabilities-changed` ⇒ re-gate** de grants [F5c]. - **perm** solo para scopes que tocan servidor (aplicado en el proxy/tool-loop server-side); el caso base es política local sin dependencia de perm. - **`reads` = sujetos de permiso simétricos a `acts`** (consentimiento de qué viaja al modelo; componentes sensibles no registran reads). ### D-AG.8 — Semántica, actor y a11y [N6 · G6 · G12 · F1b · F6 · F11] - El motor NO emite (art sin DOM); expone el run como estado reactivo. Las **superficies** declaran el ciclo en sus morfos (`delegate-*`; `sustain-processing` es de Aura, stateBound, limpiado al cerrar). Los **componentes actuados** concretan `delegate.act` vía `allowedFamilies` con contexto de actor. - **Acuñación del actor** [F6b]: el contexto de run es un **token opaco emitido solo por el motor** por CapabilityCall — no un literal construible; el guard verifica que nadie en el canon fabrica actores a mano. - ✅ **Propagación causal del actor** [G6·F6a] — **FIRMADO ⚖️2: híbrido (d)**. El actor es un **token opaco acuñado solo por el motor** (F6b), llevado como UN slot reservado en el **envelope causal que el framework ya propaga** (`OrcaEventMeta` en la vía orca; el bag `context` del envelope de bus en la vía bus), heredado profundidad-a-profundidad **igual que `traceId` ya lo hace**, y leído por sema SÍNCRONAMENTE vía un campo `actor?: ActorToken` en `TriggerOptions → SemanticSignal` (verificado: legible antes del primer `await` de `EngineSemantic.emit` para `pre`/`coincident`). AsyncContext/ALS (la cadena `als.ts` de orca) es **auto-relleno oportunista, NUNCA la garantía** — en navegador degrada a root, que sema no tolera. Esto COMPARTE el primitivo de propagación con la traza OTel de D-AG.9 (run=trace, CapabilityCall=span, **actor=baggage**) sin bifurcar la agencia (⚖️1). La hipótesis OTel-baggage se confirma, corregida por el caveat browser-await: la fiabilidad viene del envelope explícito; lo ambiental es azúcar. **Enmiendas vinculantes del stress-test**: 1. **Justificación corregida**: explícito gana a ambiental por integridad de **AUDIT / provenance de efectos secundarios** (WAL D-AG.9 + traza OTel), NO por anuncio síncrono per-emit — el anuncio va COALESCIDO POR PLAN por Aura (WCAG 4.1.3), nunca per-act, y `data-actor` es pintura derivada del MODELO (eidos lee el estado reactivo del run). Sema lee `signal.message` verbatim y NO resuelve el token de actor. 2. **Hogar del tipo**: el tipo branded `ActorToken` vive en una **hoja bajo orca Y agent** (`$libs` o arte-hoja) para evitar el ciclo orca→agent; la autoridad de acuñar/resolver queda en `EngineAgent`. La vía bus lleva el actor en el bag `context` sin tipar → su defensa anti-forja es el lint de `agent-check` (D-AG.11), no el sistema de tipos. 3. **«Ya propaga» corregido**: el contexto causal NO cruza hoy la suscripción bus→orca (solo `payload`), ni `publishCausedBy` (solo causation/correlation), ni `withOptionalEnvelopeFields`; incluso `traceId` se re-enraiza ahí. El retrofit es **acotado y presupuestado en ~6 costuras**: `OrcaEventMeta.actor`, `OrcaALSContext.actor`, forwarding de `ctx.emit`, copia en `buildChildEnvelope`, forwarding de `busEnvelope.context.actor` en la suscripción, y `publishCausedBy` + `withOptionalEnvelopeFields` con merge del padre. 4. **Garantía acotada + fasing**: la garantía síncrona/autoritativa se entrega para el **puente A→B autorado explícitamente** que hila `opts.actor`. Agente-mueve-componente-de-stock por la API pública NO tiene call-site → en navegador (ALS muerto) resuelve al **sentinel `USER` branded** = best-effort, fuera de v1, NO se cierra con plumbing pervasivo en providers. La atribución IN-SCOPE viaja por el `data-actor` derivado del modelo (sin hilar `opts.actor`); la baggage del envelope es específicamente para **efectos secundarios out-of-scope + audit**. **F1 construye SOLO el primitivo** (ActorToken branded + sentinel USER + registro privado + guard anti-forja + `actor?` en TriggerOptions leído en el prepare-loop de emit). **El retrofit de propagación (enmienda 3) se DIFIERE** a la fase con un consumidor real de cascada async out-of-scope (F3+), gateado por el drift-check del guard (ambiental nunca es el único portador en un puente cross-componente). - **Run sin superficie = prohibido por encima de suggest** [F1b]: autonomía > `suggest` exige superficie de presencia registrada (Aura mínima); el motor rehúsa (o advierte) al entrar en `acting` sin ella. Verificable. - **Write-scope declarado** [G10]: el run declara su alcance de escritura (componente | parte | rango); hold y pintura aplican solo a ese scope. (Materialización por componente → track palabras.) - **Contrato a11y del eje** [F11·G12·Z11]: 1. UNA live region `polite` propiedad de Aura; anuncios **atribuidos** («Agente: …») y **coalescidos por lote/plan** — jamás por delta ni por act individual (WCAG 4.1.3). 2. **No-robo-de-foco como invariante del MOTOR** (WCAG 3.2.1/3.2.2), no cortesía de cada superficie. 3. `aria-busy` en la región mutándose durante streaming; anuncio de completitud al cerrar. 4. Elicitaciones **posponibles**, no modales por defecto (WCAG 2.2.4). 5. **Salida global por teclado** (doctrina Esc): cancelar/return alcanzable sin ratón. Aura `reduce: 'static-frame'`, jamás `hide`. Oportunidad §8.3: nadie tiene este patrón — documentarlo es fijarlo. ### D-AG.9 — Persistencia, audit y observabilidad [N8 · F10 · F12] - v1: sesión en memoria (`snapshot()`) **+ journal write-ahead mínimo por run** vía `$storage` (sessionStorage vale): autorizaciones + acts aplicados; detección de runs huérfanos al recargar [F12]. (Orca no puede ser store — verificado.) - **Puerto de trazas con forma OTel GenAI** [F10]: run = trace, CapabilityCall = span — el puerto se define YA, el vehículo de almacenamiento llega después. Responde §7.3 del informe. **Comparte el primitivo de propagación con el actor** (⚖️2, D-AG.8): un solo carrier de contexto causal, cargas distintas (traza = export async/tolerante a pérdida; actor = lectura síncrona/autoritativa). En el borde de export se emite una etiqueta no-autoritativa (`'agent'`) para observabilidad; el token resoluble nunca se serializa (anti-forja F6b). - Persistencia de conversaciones/historial entre sesiones: adapter `$storage` opcional, diferida con hueco. ### D-AG.10 — i18n del agente [F12 · cruce con eje langs] `identity`/system-context lleva el locale efectivo (`prefs.language`); el idioma en que el agente responde y en que se ANUNCIA (live region, superficies de review del app) sigue el eje langs como cualquier superficie. Los textos del eje (anuncios, estados) = catálogos `langs/components/` normales. ### D-AG.11 — Guard mecánico `agent-check` [F1a · F5a · F6b · F12 · crítica previa] Nace CON el árbol de manifiestos (no después). Audita: manifiesto ↔ API pública real (drift tipado) · tier de madurez declarado [F1a] · veracidad de reversibilidad por-efecto (review-always para APIs de reemplazo destructivo) [F5a] · **calidad model-facing** (descriptions no vacías, args descritos, clases de fallo declaradas — determina si el modelo usa bien las capacidades) [F12] · anti-falsificación de actor (ningún sitio del canon construye contextos a mano) [F6b] · no-bypass (todo act mapea a puerta emisora). ## §4 · Secuencia de fases > Regla heredada del precedente blocks/scene: decisiones firmadas ANTES de > código; guard en la misma fase que crea la superficie que vigila; doctrina > con gate propio. | Fase | Contenido | Verifica / guard | | ----------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | | **F0 · Doctrina** ✅ (doc) | `docs/architecture/agent.md` ESCRITA + registrada en el índice: capítulo comparativo (matriz 6 refs + bibliografía de seguridad) · tesis+principios · dominio+máquina de estados · contrato de participación · **fila §0** · actor primitivo (⚖️2) · autorización · a11y · amenazas. **Corrección**: la fila §0 vive en la DOCTRINA (§4 del doc), no en `src/uix/contracts.ts` — el agente es un arte APP-level (D-AG.1b), no una capa UIX; su degradación se verifica en la suite del arte (`arts:check`) cuando F1 cree `arts/agent`, no en el boundary-test de UIX | `docs:check` ✅ 0/0 · (degradación → `arts:check` en F1) | | **F1 · Motor mínimo** ✅ (2026-07-21) | **ENTREGADO** — `src/libs/actor` (ActorToken branded + sentinel `USER_ACTOR`) · `src/arts/agent` (24º arte, alias `$agent`): `EngineAgent` (máquina D-AG.4 completa — suggest/review/auto, escalated con reason+timeout, returned outcome-tipado, cancelled pre-autorización, kill switch, autorización journaled incluso auto; loop D-AG.5 — acts secuenciales, fallos→verbos, unknown-capability acotado, idempotencia por callId, presupuestos acts/turns/wall-clock, AbortSignal; techo por origen no-confiable F8b; acuñación de actor con registro privado WeakMap — forjados resuelven a null) + `ActiveAgent` (sesión reactiva, contrato ActiveEngine, `activeRun` para Aura) + puerto `AgentTransport` + protocolo v1 (`protocol.ts`: 5 categorías + dirección tipada + reservas state/elicitación + versionado) + `ScriptedAgentTransport` (`$agent/adapters/scripted`, fuera del barrel) + journal WAL (memory + webStorage, detección de huérfanos) + puerto de trazas OTel (run=trace, call=span, label no-autoritativa) + emisor sium→JSON Schema (`toJsonSchema`, nota de promoción a $sium al 2º consumidor) + costura `actor?` en `TriggerOptions→SemanticSignal` (runtime copia verbatim; sema no resuelve) + **`defineActiveAgent`** (service-factory app-level D-AG.1b: adapta el `ActiveTimers` del core al puerto `AgentTimersPort` + logger del core — cero setTimeout a pelo en runtime; tests con puerto manual determinista + flush `settle()` nombrado). | ✅ suite 18/18 · ✅ arts:check 0/0 (24 arts) · ✅ portabilidad (Engine sin DOM/runes) · ✅ anti-forja testeado · ✅ sema 178/178 · check: 0 errores propios | | **F2 · Piloto palabras** | ESTE track entrega: capacidad tipada contra la API de palabras + OCC (\_version) + write-scope + journal. El TRACK PALABRAS entrega su lado (4 ejes F-B firmados allí, puertas mudas promocionadas, `api.transact`, concurrencia espacial). Corre contra ScriptedAgentTransport | run end-to-end en demo estática · un run = un undo · Playwright | | **F3 · Semántica + superficies** ✅ CERRADA (2026-07-22) | `allowedFamilies` delegate en el 1er componente actuado (→ REUBICADO a F2: su hogar natural es el piloto, el primer componente actuado real) · **Aura** (dueña de sustain-processing; live region; reduce static-frame) · ~~review-card~~ **DESCARTADA como componente** (anclaje dev-tools; resolución 2026-07-22 con el usuario: framework = estados del ciclo expresados + afordancias authorize/reject/cancel — que Aura YA da — + semántica de «propuesto por otro actor»; el CONTENIDO de la review es del APP en su propio dominio; una tarjeta-diff es legítima a nivel de una app concreta, jamás canon — doctrina «The review surface» en agent.md §7) · pack sema de los eventos de superficie (resuelto: family-default, decisión firmada de capa 1). **Progreso 2026-07-21 — Aura fases 0–1 ✅**: decisión de pertenencia (SOMA; compose-first: orb=$scene en eidos, cancel=Button asChild, región propia espejo de Announce) + **morfo `aura.ts`** — EL PRIMER morfo del repo con eventos familia `delegate` (delegate-offer · delegate-escalate untilAction · delegate-return, los tres con requiresLiveRegion) + `sustain-processing` stateBound (dueña Aura, target indicator) + 5 partes (provider/indicator/status/**region** role=status aria-live=polite aria-atomic/cancel trigger) + texts (estados + anuncios atribuidos «Agent: …») + `expression: 'family-default'` (el perfil bajo de delegate es decisión firmada de capa 1; la modulación por intent de §F6 es visual → eidos/scene). Verificado: morfo:vocabulary limpio (solo WARN preexistente de cropper) · esquemas 114/114. Gotcha de convención: la clave de `stateRef` debe ser un VALOR representativo del vocabulario declarado (precedente progress/file-upload), no un nombre conceptual. **Fase 2 soma ✅ (2026-07-21)**: `soma/components/aura/` completo — provider raíz con puerto estructural `AuraAgentSource` (duck-type de ActiveAgent; soma NO importa $agent — degradación total: sin agente = idle válido), watcher de transiciones en constructor ($effect + untrack, cero write-loops), mapeo custody-of-control (authorized→acting; terminales→idle), `sustain-processing` stateBound con clearSignal al salir + guard de carrera (si el run avanzó antes de resolver el emit), `delegate-escalate` untilAction + clear en resolución, `delegate-return` = anuncio único consolidado atribuido en la Region PROPIA (role=status/polite/atomic — sin doble anuncio por la vía compartida), cancel() = salida global (disabled en idle, aria-label langs) + 5 wrappers + types + exports + README + catálogo `langs/components/aura.ts` (es/en) registrado + barrel soma. **Test 6/6** con `EngineSemantic({visual:false})` REAL (la degradación explícita del §0) — prueba emits/persistencias/clears de verdad; contracts sweep verde (solo los 2 fallos AJENOS preexistentes); svelte-check 0 errores propios. **Fases 4–5 eidos+recipe ✅ (2026-07-21)**: `eidos/components/aura/` completo — root `` (data-size responsive sm/md/lg) · `` = el orb: **aurora `$scene` real** montada con el patrón de ciudadanía del pack (engine por superficie DOM WeakMap — eidos NO importa $packs, frontera dura), params modulados por estado según §F6 (velocidad/amplitud/hue: idle .35/.45 neutral → acting 1.2/1 primary → escalated 1.7/1.15 **threat**; reviewing **risk** — mapeo canon de intents), colores vía `eidos.resolveToken('--color-{role}-solid')` (jamás getComputedStyle), fallback = gradiente radial CSS del recipe (ES el render bajo reduced-motion static-frame del engine / SSR / effect off — la presencia nunca desaparece) · `` compone `