Cierra el primer componente del eje agéntico de punta a punta (las 9 fases de la ruta). `component:audit` PASS. - README eidos con comparativa (5 refs adyacentes — thinking-indicators, CopilotKit activity, Vercel useChat.status, presencia colaborativa Figma/Docs, assistant-ui) reconociendo el paisaje escaso: nadie tiene una semántica perceptiva de la delegación con a11y (informe §8.3). Decisiones + Gaps con disposición. - Fixes del audit: opacity literal `0.5` → `var(--opacity-50)` (R-4.2); excepción R-1.5 documentada (único focusable = Cancel, que compone Button); `apg: 'none — …'` en el morfo (A-1.4). Gates: component:audit PASS · morfo:vocabulary limpio · eidos-lint aura 0 inválidos · recipe-contract verde. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>alpha-0.1-sec-dom
parent
ef85b9223d
commit
2c175c5d95
File diff suppressed because one or more lines are too long
@ -0,0 +1,91 @@
|
||||
# Aura
|
||||
|
||||
The **agent presence surface** — the eidos face of the canonical materializer
|
||||
of the `delegate` family (book ch. 29: *¿quién actúa ahora?*). Soma owns the
|
||||
custody-of-control state, the axis's one polite live region and the global
|
||||
exit; Eidos adds the living orb (a `$scene` aurora modulated by state) and the
|
||||
size axis. Doctrine:
|
||||
[`docs/architecture/agent.md`](../../../../../docs/architecture/agent.md) §7.
|
||||
|
||||
## Baseline
|
||||
|
||||
- **Classification**: interactive (a `Cancel` trigger). Composes the soma
|
||||
headless provider (`$soma/components/aura`) over a structural agent port;
|
||||
with no agent the surface is a valid `idle` (§0 degradation).
|
||||
- **Anatomy**: `Aura` (root, `data-state`) → `.Indicator` (decorative orb,
|
||||
`aria-hidden` — the `$scene` aurora paints inside; the recipe's radial
|
||||
gradient is the static truth underneath) + `.Status` (localized state
|
||||
label) + `.Region` (the axis's ONE `role="status"` polite live region) +
|
||||
`.Cancel` (the global exit, composes `<Button>` via asChild).
|
||||
- **Two axes**: `size` (sm | md | lg — orb + label scale, orb derived from
|
||||
the **Avatar** primitive `--avatar-size-*`) and the semantic `data-state`
|
||||
tint (soma-owned; the recipe maps it to role slots — reviewing = risk,
|
||||
escalated = threat, acting/offered/planned = primary, idle = neutral). Aura
|
||||
has **no `color` prop by design**: the tint is evaluative, not decorative;
|
||||
a theme re-tints via the `--aura-orb-color-*` role tokens.
|
||||
- **The orb is the D4 consumer**: `.Indicator` prefers the shared `uix.scene`
|
||||
engine (global concurrent-scene budget) with a per-dom fallback outside a
|
||||
uix tree; under reduced motion the engine's mandatory `static-frame` policy
|
||||
keeps the gradient — presence never disappears.
|
||||
|
||||
## Comparativa
|
||||
|
||||
Agent-presence-with-a11y is a near-empty landscape — no shipping framework
|
||||
has a perceptual surface for the *delegation cycle*. The refs are adjacent, not
|
||||
equivalent; the comparativa maps what each does and what Aura adds.
|
||||
|
||||
| Ref | Equivalente | Qué adoptamos | Qué no |
|
||||
| --- | --- | --- | --- |
|
||||
| ChatGPT / Claude "thinking" indicator | pulsing dot while the model works | la continuidad *pensando → actuando* como estado perceptible | indicador SOLO visual, sin región viva ni máquina de estados — un usuario de lector de pantalla no sabe que el agente actúa |
|
||||
| CopilotKit activity / generative-UI | render de actividad de tool en el transcript | la idea de superficie de presencia del agente | acoplado al chat (no hay presencia sin conversación); sin semántica de «quién actúa» ni a11y dedicada |
|
||||
| Vercel AI SDK `useChat.status` | `submitted / streaming / ready` | mapear el estado del run a una superficie | un **string de estado**, no un canal perceptivo (sin sonido/motion/hold ni anuncio atribuido) |
|
||||
| Presencia colaborativa (Figma / Google Docs) | «X está editando» (cursores/avatares) | el **precedente a11y de anunciar a otro actor** (live region, «quién») | modela HUMANOS concurrentes, no el ciclo de delegación (offer→review→act→return) ni la autoridad/autonomía |
|
||||
| assistant-ui | estado `running` por mensaje | — | estado por-mensaje, no una presencia del agente con salida global y ciclo tipado |
|
||||
|
||||
**Lo que Aura añade y nadie tiene** (informe §8.3): una semántica perceptiva
|
||||
de la delegación (`delegate` + `sustain` con sonido/motion/hold), anuncios
|
||||
**atribuidos y coalescidos por plan** (WCAG 4.1.3), reduced-motion que conserva
|
||||
la presencia (`static-frame`, nunca `hide`), y una salida global por teclado.
|
||||
|
||||
## Decisiones
|
||||
|
||||
- **Sin prop `color`**: el tinte es la valoración del estado (evaluativo), no
|
||||
decoración — cargar `color` invitaría al antipatrón «marco rojo». El tema
|
||||
re-tinta los slots de rol `--aura-orb-color-*`.
|
||||
- **`expression: 'family-default'`**: el perfil sonoro bajo de `delegate` es
|
||||
decisión firmada de capa 1 (los canales fuertes aparecen en composición con
|
||||
signal/commit); la modulación por intent reservada en scene §F6
|
||||
(velocidad/amplitud/hue ≈ pitch/gain/contour) es VISUAL → recipe + `$scene`,
|
||||
no un pack de sonido.
|
||||
- **Orb = Avatar**: el tamaño deriva de la primitiva canónica del disco de
|
||||
presencia/identidad (`--avatar-size-{sm,md,lg}` = 32/40/48); un tema que
|
||||
retoca avatares retoca el orb. (Los 14/20/28 iniciales eran magic numbers
|
||||
inventados — corregido.)
|
||||
- **Cancel compone `<Button>`** vía asChild (nunca el `<button>` nativo del
|
||||
soma); `variant`/`size`/`color` diferidos a los defaults del Button.
|
||||
- **La Region es sr-only en el recipe** (present para AT, silenciosa a la
|
||||
vista); el orb es la presencia visible.
|
||||
|
||||
R-1.5 exception: the only focusable part is `Cancel`, which composes
|
||||
`<Button>` — the focus-ring is owned by the Button recipe (THM §32). The orb,
|
||||
status and region are non-interactive, so the aura recipe declares no focus
|
||||
treatment of its own.
|
||||
|
||||
## Sema events
|
||||
|
||||
Four — the `delegate` cycle (first eidos component to react to the family):
|
||||
`sustain-processing` (stateBound; orb tint + optional scene intensity while
|
||||
acting), `delegate-offer` / `delegate-escalate` (untilAction) /
|
||||
`delegate-return`. The visual weight is state tint + the scene; the transient
|
||||
`data-event-family="delegate"` stamp gets its hint from the shared events
|
||||
layer. Full table in the soma README
|
||||
([`$soma/components/aura`](../../../soma/components/aura/README.md)).
|
||||
|
||||
## Gaps
|
||||
|
||||
| Gap | Disposition |
|
||||
| --- | --- |
|
||||
| Presets de escena por estado (carácter de aurora distinto más allá de speed/amplitude/hue) | **diferir** — la modulación actual cubre el ciclo; se especializa cuando el diseño lo pida |
|
||||
| Superficie de elicitación en `escalated` (pregunta tipada vía `Form.AutoFields`) | **diferir** a PLAN-agent F4 — la categoría del protocolo existe (reservada); se materializa con la superficie de conversación |
|
||||
| Variante compacta/inline (solo orb, sin status/cancel) para toolbars | **diferir** — hasta que un host real lo pida (la barra de admisión) |
|
||||
| Prop `color` decorativo | **descartar** — el tinte es evaluativo (estado del run); un `color` invitaría al antipatrón «marco rojo». El tema re-tinta los slots de rol |
|
||||
Loading…
Reference in new issue