|
|
|
|
@ -0,0 +1,156 @@
|
|
|
|
|
# CONTINUE — P0 de la auditoría arquitectónica (handoff, act. 2026-08-26 madrugada)
|
|
|
|
|
|
|
|
|
|
**Estado**: **P0 = A + B + C, EJECUTADO Y VERIFICADO.** Fase A cerrada (árbol en
|
|
|
|
|
verde con instrumento afinado) · fase B cerrada (la puerta existe, sabe fallar y
|
|
|
|
|
pasó en verde sobre HEAD; hook con fuente commiteada) · fase C cerrada entera
|
|
|
|
|
(C2a bolsa=contrato · C2b renderProps muerto · C2c efecto muerto — **una sola
|
|
|
|
|
tubería de attrs**). **D (desacoplar emit del handler) quedó FUERA de P0 por
|
|
|
|
|
decisión de diseño**: la versión barata (D-lite) creaba un contrato condicional
|
|
|
|
|
(`TriggerResult.id` a-veces-definido) y se retiró; la correcta es **D-full**
|
|
|
|
|
(`emit()` → `{id, settled}`) y reabre el eje sema con su handoff — ver §D abajo.
|
|
|
|
|
|
|
|
|
|
**Origen**: informe de auditoría (artifact `Auditoría ActiveUix`,
|
|
|
|
|
https://claude.ai/code/artifact/02076a7a-9a51-4c89-a610-dfd2f6948954) — 70
|
|
|
|
|
hallazgos, 10 verificados adversarialmente (7 confirmados / 3 refutados), dos
|
|
|
|
|
comparativas de mercado. El plan P0→P3 vive en su §5.
|
|
|
|
|
|
|
|
|
|
## Commits de este eje (todos en `alpha-0.1-background`, sin push)
|
|
|
|
|
|
|
|
|
|
- `58fa3021c` — fase A: `close` huérfano de connection (4 errores) · stepper
|
|
|
|
|
`'completed'`→`'complete'` (el test pineaba la deriva) · langs stop/record.
|
|
|
|
|
- `2ec018107` — fase B: `check:gate` (src/=0 duro; web/ contra ledger menguante
|
|
|
|
|
`scripts/check-debt.ts`, 34 ficheros/71 errores congelados) · `eidos:lint` ·
|
|
|
|
|
`gate` (SIN `lint` — deliberado, ver deuda) · fuente del hook en
|
|
|
|
|
`scripts/hooks/pre-push` · `.prettierrc` endOfLine:auto.
|
|
|
|
|
- `3ca138e91` — C2a: `partPropsForRegistration` resuelve el contrato entero;
|
|
|
|
|
nace `ssr-contract.test.ts` (rojo antes, 6/6 después); pin viejo re-firmado.
|
|
|
|
|
- `9dffa541e` — fase A cierre: los 6 rojos del censo adjudicados (2 escrituras
|
|
|
|
|
«soma posee el valor» · menu-dial estampa olvidada · calendar/fab al allowlist
|
|
|
|
|
compartido nuevo `scripts/eidos-only-attrs.ts` que consumen morfo-check Y
|
|
|
|
|
eidos-lint · palabras.handle declarado). morfo:check 160/161→**161/161**.
|
|
|
|
|
- `<C2b>` — codemod `renderProps()`→`.props` (83 ficheros, 262 call sites) +
|
|
|
|
|
borrado del método/tipo, sin shim; comentarios re-nombrados a «render bag».
|
|
|
|
|
- `<C2c pendiente de commit al cierre>` — efecto `syncPartAttrs` + flag
|
|
|
|
|
BORRADOS; ~71 registraciones limpias; suite del runtime re-firmada de
|
|
|
|
|
asertos-DOM a asertos-de-bolsa; 5 tests de provider (dialog, drawer,
|
|
|
|
|
pagination×2, popover) re-firmados igual. **tabs-provider y
|
|
|
|
|
radio-group-provider viajaron en `8ac23047f` del eje theming** con la
|
|
|
|
|
retirada declarada en su cuerpo (coordinación por canal, opción A).
|
|
|
|
|
|
|
|
|
|
## Verificación con la que cerró C2c
|
|
|
|
|
|
|
|
|
|
runtime 49/49 · ssr-contract 6/6 · soma-attr-audit verde · **morfo:check
|
|
|
|
|
161/161 post-strip** («All routed morfos validate» — el detector definitivo:
|
|
|
|
|
una parte dependiente del efecto habría perdido sus attrs requeridos) ·
|
|
|
|
|
las 4 suites re-firmadas 13/13 · check con src/ a 0 (71 = ledger exacto).
|
|
|
|
|
|
|
|
|
|
**La PRIMERA pasada de la suite COMPLETA de la historia** (nadie la corría —
|
|
|
|
|
el hallazgo original demostrándose) destapó y se adjudicó así:
|
|
|
|
|
|
|
|
|
|
- **51 asserts de la clase C2c** en ~29 tests de provider jsdom (elementos
|
|
|
|
|
sueltos + getAttribute esperando el efecto retirado → null). Re-firmados a
|
|
|
|
|
asserts de bolsa en serie (3 agentes con contrato de conversión; los 5
|
|
|
|
|
primeros a mano: dialog, drawer, pagination×2, popover). REGLA: prewrite
|
|
|
|
|
(`data-last-action`) SIGUE siendo assert de DOM; el resto, bolsa.
|
|
|
|
|
- **1 preexistente real**: `lint.test` — `skin-media-player` nació (bf12b8a57)
|
|
|
|
|
sin registrarse en `COMPETING_ROOTS` (viste el contrato de media-player,
|
|
|
|
|
clase audio-player). Registrado con razón.
|
|
|
|
|
- **4 flaky de CARGA** (pasan en solitario): cookie-adapter y orca (timeouts
|
|
|
|
|
10 s) · soma-attr-audit y recipe-css-contract (5 s justos bajo CPU
|
|
|
|
|
saturada). Ley: un timeout con la máquina cargada NO es un rojo — re-correr
|
|
|
|
|
en solitario antes de adjudicar.
|
|
|
|
|
|
|
|
|
|
## Los 8 guards rojos de `contracts.test.ts` (preexistentes, PRIMERA tarea de mañana)
|
|
|
|
|
|
|
|
|
|
Nunca los vio nadie (mi patrón de extracción no capturaba el fichero raíz;
|
|
|
|
|
sin CI nadie corría la suite). Sujetos verificados AJENOS a los diffs de P0:
|
|
|
|
|
|
|
|
|
|
1. Barrel de soma: falta `waveform -> Waveform` en el export público.
|
|
|
|
|
2. Filenames de provider filtrándose a un barrel público (1).
|
|
|
|
|
3. **MOR-4**: `audio-player` y `skin-media-player` sin morfo — invisibles a
|
|
|
|
|
component-audit/eidos-lint (los competing roots necesitan su propia
|
|
|
|
|
respuesta en la enumeración, como ya la tienen en lint.test).
|
|
|
|
|
4. **THEME-SYS-1**: `recipes/base.ts` `'header-z': '2'` z-index crudo ×2 —
|
|
|
|
|
territorio theming.
|
|
|
|
|
5. Soma importando su propio alias público (1).
|
|
|
|
|
6. Escritura DOM mutable directa en soma (1).
|
|
|
|
|
7. **Hardcoded data attrs (8)**: aura-status ×2 · media-player sliders
|
|
|
|
|
`data-size` ×2 · waveform played/remaining ×2 · **radio-group y tabs
|
|
|
|
|
`data-ready`** — estos DOS son de `8ac23047f` (§14 theming, HOY): su
|
|
|
|
|
constructor estampa `data-ready` a mano y el guard exige declaración o
|
|
|
|
|
exención. Avisado al eje por canal.
|
|
|
|
|
8. Namespaces de traducción no-kebab (4).
|
|
|
|
|
|
|
|
|
|
Cada uno se adjudica leyendo (¿guard exige razón nueva, o deriva real?) —
|
|
|
|
|
la clase skin-media-player/lint.test de ayer es el precedente del método.
|
|
|
|
|
⚠ El hook NO se armó por esto (promesa: solo en verde). Armarlo = cerrar
|
|
|
|
|
estos 8 + política para los 4 flaky de carga (¿timeouts subidos? ¿retry?).
|
|
|
|
|
|
|
|
|
|
## Qué queda mañana (en orden)
|
|
|
|
|
|
|
|
|
|
1. **Los 8 guards de contracts.test** (sección de arriba) — adjudicar uno a
|
|
|
|
|
uno; con ellos verdes y la política de flaky decidida, el `gate` entero
|
|
|
|
|
queda verde por primera vez.
|
|
|
|
|
2. **Re-armar el hook**: `cp scripts/hooks/pre-push .git/hooks/pre-push` y
|
|
|
|
|
AVISAR a la sesión del eje theming por SendMessage (prometido dos veces;
|
|
|
|
|
está conforme). Solo con fase A verde en el árbol.
|
|
|
|
|
3. **P1 del plan** (informe §5): ejes muertos de morfo (focus: ejecutar desde
|
|
|
|
|
`compiled.focus` o amputar+censo · keyboard: censo declaración↔implementación
|
|
|
|
|
· ARIA: vocabulario cerrado de nombres/roles + separar `attrs[]` de `aria[]`
|
|
|
|
|
· `part-present` desde registro vivo) · **logger en `Soma.runtime()`** (una
|
|
|
|
|
línea que resucita TODO el diagnóstico — la más barata de P1) · a11y
|
|
|
|
|
auditable (capa inert/hide-others para modales, axe en el proyecto client,
|
|
|
|
|
morfo:check con role/aria) · saneo de `svrs/auth` (adaptadores test a
|
|
|
|
|
`$svrs/auth/testing` con guard de producción — el patrón ya existe en
|
|
|
|
|
memory-store; `crypto-web` real sin node:crypto; guard de longitudes en
|
|
|
|
|
verifyPassword; barrera `*.server.ts`; snippet del docs-site).
|
|
|
|
|
4. **D-full como eje propio**: `emit()` → `{id, settled}`; reabre sema
|
|
|
|
|
(S-07 intocable, handoff CONTINUE-sema-audit), re-firma su suite (~40
|
|
|
|
|
asserts) y la prosa doctrinal (engine.ts:639 · morfo.md:801 · sema.md:652).
|
|
|
|
|
El test A-36 pinea `open=post` y NO estorba. El argumento completo del
|
|
|
|
|
refutador (por qué el hold no sirve a su razón declarada) está en el informe.
|
|
|
|
|
5. **P2/P3**: eidos ops (color-scheme, SSR de tema, memo de renderStaticCss,
|
|
|
|
|
foundation una vez, data-motion='allow' real) · sema tubería (canales antes
|
|
|
|
|
de deltas, stack de persistencia, coincident real o borrado, háptica sin
|
|
|
|
|
reduced-motion, engine.explain) · distribución + LangBase + generación de
|
|
|
|
|
wrappers.
|
|
|
|
|
|
|
|
|
|
## Deudas EXPLÍCITAS abiertas (nunca silenciosas)
|
|
|
|
|
|
|
|
|
|
- **`lint` fuera del gate**: ~2.300 ficheros de deuda de formato preexistente
|
|
|
|
|
(bump de prettier-plugin-svelte 3.4→3.5 + clases nunca formateadas; el pin a
|
|
|
|
|
3.4.1 NO movió el número — no es el plugin, es histórico). One-shot pendiente:
|
|
|
|
|
`npm run format` en árbol QUIETO como commit propio + re-añadir
|
|
|
|
|
`npm run lint &&` al `gate`. Jamás sobre rama con sesiones vivas.
|
|
|
|
|
- **Ledger `check-debt.ts`**: 71 errores de `web/` congelados; solo mengua.
|
|
|
|
|
`web/routes/alpha/**` está TERMINATED (memoria) — si se borra, sus 16
|
|
|
|
|
entradas salen del ledger.
|
|
|
|
|
- **`gradient-builder.track` `data-kind`**: emite `provider.kind` crudo, que
|
|
|
|
|
incluye `'mesh'` fuera del enum del morfo `[linear|radial|conic]` — misma
|
|
|
|
|
exposición que el preview (paridad deliberada). Si una demo monta mesh,
|
|
|
|
|
morfo-check lo flagueará: decidir entonces (ensanchar enum o guardar).
|
|
|
|
|
- **`natural-time-picker` en morfo:check**: clase flaky «demo que navega bajo
|
|
|
|
|
el eval» (como `link`); si reincide, endurecer el script (reintento por ruta),
|
|
|
|
|
no el componente. En la última pasada fue verde.
|
|
|
|
|
|
|
|
|
|
## Leyes de este eje (caro de re-aprender)
|
|
|
|
|
|
|
|
|
|
- ⚠⚠ **Rama compartida con 2-3 sesiones VIVAS**: add selectivo por lista
|
|
|
|
|
explícita + `git diff --cached --stat` + commit EN LA MISMA invocación;
|
|
|
|
|
selección por contenido con `git diff -G"patrón" --name-only` cuando el
|
|
|
|
|
status mezcla ejes; JAMÁS stash ni checkout de ficheros ajenos.
|
|
|
|
|
- ⚠ **Coordinación entre sesiones por SendMessage FUNCIONA**: avisar ANTES de
|
|
|
|
|
tocar ficheros de otro eje; el peer re-lee del disco; inclusión-declarada
|
|
|
|
|
(opción A) para cambios triviales mezclados — precedente `8ac23047f`.
|
|
|
|
|
- ⚠ **Un gate se arma DESPUÉS del verde, nunca antes** — armado en caliente
|
|
|
|
|
bloqueó el push legítimo del peer (y de paso demostró que sabe fallar).
|
|
|
|
|
- ⚠ **La bolsa entrega valores CRUDOS** (número 20, no '20'); Svelte
|
|
|
|
|
stringifica al render. Asertos de bolsa ≠ asertos de DOM.
|
|
|
|
|
- ⚠ **El único escritor imperativo sancionado es el prewrite** de `trigger`
|
|
|
|
|
(commit declarado por el morfo). Todo lo demás: bolsa.
|
|
|
|
|
- ⚠ `npm run dev` lleva `--force`: primer morfo:check tras arrancar servidor
|
|
|
|
|
paga compilación fría → timeouts falsos (accordion/background/link).
|
|
|
|
|
Pasarlo DOS veces o precalentar. `morfo-check`/`perm`/`smoke` aceptan la URL
|
|
|
|
|
como argv[2] — usar el servidor PROPIO (5201), nunca el de otra sesión.
|
|
|
|
|
- ⚠ `| tail` enmascara exit codes TAMBIÉN en los scripts del gate (medido en
|
|
|
|
|
vivo: check con 76 errores salió 0 por un tail).
|