refactor(sema,chronos,palabras): tambien los dos componentes excluidos

Me excuse dos veces en la regla de escritura excluida cuando el autor ya
habia dicho «todos la documentacion y componentes». Su decision, repetida:
se arreglan.

CHRONOS

- El pack tenia CUATRO reglas con solo un selector — restos de la migracion
  automatica, que no dicen absolutamente nada. Borradas. Y las dos de
  `handle-drag` / `handle-resize` tambien: llevaban muertas desde que se
  escribieron porque ningun proveedor emite esos eventos (S-37). Con ellas
  se van sus dos excepciones firmadas del censo — la mejor forma de retirar
  un waiver es que deje de haber defecto que excusar.
- Queda un pack de tres reglas, todas hapticas y todas justificadas: una
  entrada de calendario es un blanco pequeño, y el tacto dice CUAL
  acertaste, cosa que el sonido no puede.
- `SPEC.md` §8 describia el modelo de tunings entero (`soundTuning('commit.soft')`,
  «no sobrescriben pitch/gain/contour del intent (capa 2)»). Reescrito: lo
  que Chronos suena lo dice el mapa, y ninguna regla PUEDE tocar una
  primitiva porque el tipo no lo admite.
- El morfo afirmaba «Haptic-only by doctrine (no sound per frame)» para
  `handle-drag`. Esa doctrina murio: un gesto suena por REPETICION. El
  comentario dice ahora lo que es cierto — que nadie lo emite todavia.

PALABRAS

- `INTERACCION.md` citaba `SOUND_TUNINGS`. Ahora dice lo que hace de verdad:
  palabras no nombra ningun sonido propio, cada suceso toma el de su familia
  y verbo, y `commit.save` + `fulfill` encuentra `tick.fulfill` — que sigue
  siendo, como decia la tabla, la unica celebracion audible.
- El proveedor justificaba no emitir `contact-focus` por «una base sound
  signature en SEMA_MAP (pitch 800, gain 0.25)». Esa base ya no existe: hoy
  la familia NOMBRA `touch`. La decision de callar sigue siendo correcta y
  ahora esta explicada por el mecanismo real.

⚠️ Prettier volvio a reformatear entero `palabras-provider.svelte.ts` (no
estaba formateado en HEAD): revertido y reaplicado a mano, 4 lineas en vez
de 61.

VERIFICADO: sema+morfo+soma 1076/1076 · docs:check 0/618 · check sin
errores nuevos.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
alpha-0.1-dir-prefs
dev 2 months ago
parent c16ad18bc3
commit 9b70379abb

@ -404,18 +404,27 @@ src/uix/soma/components/chronos/
## 8. Sema — `sema/components/chronos.ts`
Pack opcional con `cascade` construido vía `semaSelector(chronosMorfo, part, matchers)`.
Sin canales nuevos (sound + haptic son los únicos canónicos). Reusa *tunings* existentes:
- `commit-create` / `commit-update` → `soundTuning('commit.soft')` + `haptic: tap`.
- `commit-delete` → tuning de `loss` (descendente) + `haptic: error` suave.
- `shift-navigate` → `commit.subtle` ascendente/descendente según dirección.
- `handle-drag` / `handle-resize` → solo `haptic` (la familia `handle` activa haptic; **no
emitir sonido por frame** — misma doctrina que `virtual-*` `handle-scroll`).
- `emerge-open` / `emerge-close` → `emerge.soft` / `emerge.dismiss.passive`.
Las reglas **no** sobrescriben las primitivas `pitch/gain/contour` del intent (capa 2);
solo añaden carácter (kind/pattern/easing).
Pack construido vía `semaSelector(chronosMorfo, part, matchers)`, y deliberadamente
**sin una sola regla de sonido**: todo lo que Chronos suena lo dice el mapa.
- `commit-save` / `commit-move` → el `tick` de la familia `commit`, más un
`haptic: tap` que sí se escribe aquí — una entrada de calendario es un blanco
pequeño y el tacto confirma que diste con el correcto, cosa que el sonido no
puede decir.
- `commit-delete` → `tick.loss` por su verbo, sin escribir nada: la celda de
pérdida vive en `SEMA_MAP.families.commit.sounds`.
- `shift-navigate` → el `slide` de la familia `shift`.
- `emerge-open` / `emerge-close` → `open` / `close`, por la tabla de verbos.
Ninguna regla puede tocar una primitiva: el tipo acepta un NOMBRE del pack de
sonidos o `SILENT`, y el intent selecciona la variante. Ver
[`architecture/sema.md`](../../../../docs/architecture/sema.md) §the sound pack.
> ⚠️ `handle-drag` / `handle-resize` están declarados en el morfo y **ningún
> proveedor los emite** (hallazgo S-37 de la auditoría 2026-08-05). Sus dos
> reglas de pack se retiraron el 2026-08-07 por ser código muerto. La
> manipulación directa de Chronos es hoy muda; si se cablea, un gesto suena por
> REPETICIÓN (`step` por emisión) como el resto de arrastres del framework.
---

@ -211,8 +211,11 @@ manipulación estructural es nativa de teclado.
| Guardar / exportar | `commit.save` + fulfill | La única celebración audible por defecto |
Reduced-motion: coreografías → fundidos; sonido/háptica siguen las prefs del framework.
Todo desde el catálogo de presets y `SOUND_TUNINGS` (pack sobrio de words, DG-3) —
cero `@keyframes` locales (R-4.5).
Todo desde el catálogo de presets de motion y, para el sonido, desde el pack
del sistema: palabras **no nombra ningún sonido propio** — cada suceso toma el
de su familia y verbo (`commit.save` → `tick`, y con intent `fulfill` →
`tick.fulfill`, que es la única celebración audible de la tabla). Cero
`@keyframes` locales (R-4.5).
---

@ -104,8 +104,12 @@ export const chronosMorfo = {
sequence: 'post'
}
},
// Direct manipulation in flight — move. Haptic-only by doctrine (no sound
// per frame). Intent concentrates on the drop (commit-move), not the carry.
// Direct manipulation in flight — move. Declared, but no provider emits it
// yet (audit S-37), so Chronos drags are currently silent. When it is
// wired, the `handle` family sounds by REPETITION — a 18 ms `step` per
// emission, at the gesture's own rhythm — so «no sound per frame», which
// this comment used to assert, is no longer the doctrine. The intent
// still concentrates on the drop (`commit-move`), not the carry.
{
name: 'handle-drag',
semantic: {

@ -3,49 +3,36 @@ import { chronosMorfo } from '$uix/morfo/components/chronos';
import type { Sema } from '../sema-map';
/**
* Chronos sema pack. Registered in `sema/components/index.ts`. Sema is
* ornamental (sound/haptic default off), so these cascade tunings only surface
* when the app opts into the sound/haptic channels.
* Chronos perceptual defaults — haptic only.
*
* Every sound this component makes comes from the map: a `commit` finds `tick`
* (and `tick.loss` for a delete, by verb), a `shift-navigate` finds `slide`.
* None of it is written here, which is why the pack names nothing.
*
* What IS written here is the tap on the three commits that land on an event
* chip. A calendar entry is a small target you hit with a finger, and the tap
* confirms you hit the right one — the sound alone cannot say WHICH chip.
*
* The two `handle-*` rules this file used to carry were removed on 2026-08-07:
* they had been dead since they were written, because the provider never emits
* those events (audit S-37). Direct manipulation in Chronos is currently
* silent and untouched; if it is ever wired, a gesture sounds by REPETITION
* (`step` per emission) like every other drag in the framework — the old note
* here about «no sound per frame» described a doctrine that no longer exists.
*/
export const chronosSema: Sema = {
name: 'chronos',
cascade: [
// Event landed (create / edit-save / resize-save).
{
selector: semaSelector(chronosMorfo, 'event-chip', { eventName: 'commit-save' }),
haptic: { kind: 'tap' }
},
// Event moved by drag.
{
selector: semaSelector(chronosMorfo, 'event-chip', { eventName: 'commit-move' }),
haptic: { kind: 'tap' }
},
// Event deleted (loss).
{
selector: semaSelector(chronosMorfo, 'event-chip', { eventName: 'commit-delete' }),
haptic: { kind: 'tap' }
},
// Month navigation.
{
selector: semaSelector(chronosMorfo, 'provider', { eventName: 'shift-navigate' })
},
// Undo / redo.
{
selector: semaSelector(chronosMorfo, 'provider', { eventName: 'commit-restore' })
},
{
selector: semaSelector(chronosMorfo, 'provider', { eventName: 'commit-apply' })
},
// Direct manipulation in flight — haptic only (no sound per frame).
{
selector: semaSelector(chronosMorfo, 'event-chip', { eventName: 'handle-drag' }),
haptic: { kind: 'tap' }
},
{
selector: semaSelector(chronosMorfo, 'event-resize-handle', { eventName: 'handle-resize' }),
haptic: { kind: 'tap' }
}
]

@ -274,10 +274,6 @@ const SOMA_LAYERS_DIR = join(__dirname, '..', 'soma', 'layers');
const EIDOS_DIR = join(__dirname, '..', 'eidos', 'components');
const EMISSION_EXCEPTIONS: Record<string, string> = {
'chronos:handle-drag':
'chronos is write-excluded by project policy — audited 2026-08-06 (S-37), the provider never emits it',
'chronos:handle-resize':
'chronos is write-excluded by project policy — audited 2026-08-06 (S-37), the provider never emits it',
// PENDING AUTHOR DECISION (S-14, waived 2026-08-06): the Clear action lives
// in the composed generic Picker, which emits ITS commit-reset with the
// picker pack's firma. Either the event leaves this morfo (the delegated

@ -1094,9 +1094,10 @@ export class PalabrasProvider {
this.ensureSelection();
if (!wasFocused) {
// Note: contact-focus is intentionally NOT emitted. The
// `contact` family carries a base sound signature in
// SEMA_MAP (pitch 800, gain 0.25) that fires even without
// a per-component cascade rule. Per spec: "no puede emitir
// `contact` family NAMES a sound in SEMA_MAP (`touch`), so it
// would fire on every focus return even with no rule in this
// component's pack — silence has to be a decision, and this is
// it. Per spec: "no puede emitir
// eventos es demencial, una vez que está trabajando con el
// no tiene sentido". Telemetry / a11y can re-enable by
// uncommenting; trace via `data-event*` would land on the

Loading…
Cancel
Save

Powered by TurnKey Linux.