9.7 KiB
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:closehué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 menguantescripts/check-debt.ts, 34 ficheros/71 errores congelados) ·eidos:lint·gate(SINlint— deliberado, ver deuda) · fuente del hook enscripts/hooks/pre-push·.prettierrcendOfLine:auto.3ca138e91— C2a:partPropsForRegistrationresuelve el contrato entero; nacessr-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 nuevoscripts/eidos-only-attrs.tsque consumen morfo-check Y eidos-lint · palabras.handle declarado). morfo:check 160/161→161/161.<C2b>— codemodrenderProps()→.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>— efectosyncPartAttrs+ 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 en8ac23047fdel 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-playernació (bf12b8a57) sin registrarse enCOMPETING_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:
- Barrel de soma: falta
waveform -> Waveformen el export público. - Filenames de provider filtrándose a un barrel público (1).
- MOR-4:
audio-playeryskin-media-playersin 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). - THEME-SYS-1:
recipes/base.ts'header-z': '2'z-index crudo ×2 — territorio theming. - Soma importando su propio alias público (1).
- Escritura DOM mutable directa en soma (1).
- Hardcoded data attrs (8): aura-status ×2 · media-player sliders
data-size×2 · waveform played/remaining ×2 · radio-group y tabsdata-ready— estos DOS son de8ac23047f(§14 theming, HOY): su constructor estampadata-readya mano y el guard exige declaración o exención. Avisado al eje por canal. - 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)
- 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
gateentero queda verde por primera vez. - Re-armar el hook:
cp scripts/hooks/pre-push .git/hooks/pre-pushy AVISAR a la sesión del eje theming por SendMessage (prometido dos veces; está conforme). Solo con fase A verde en el árbol. - P1 del plan (informe §5): ejes muertos de morfo (focus: ejecutar desde
compiled.focuso amputar+censo · keyboard: censo declaración↔implementación · ARIA: vocabulario cerrado de nombres/roles + separarattrs[]dearia[]·part-presentdesde registro vivo) · logger enSoma.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 desvrs/auth(adaptadores test a$svrs/auth/testingcon guard de producción — el patrón ya existe en memory-store;crypto-webreal sin node:crypto; guard de longitudes en verifyPassword; barrera*.server.ts; snippet del docs-site). - 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 pineaopen=posty NO estorba. El argumento completo del refutador (por qué el hold no sirve a su razón declarada) está en el informe. - 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)
lintfuera 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 formaten árbol QUIETO como commit propio + re-añadirnpm run lint &&algate. Jamás sobre rama con sesiones vivas.- Ledger
check-debt.ts: 71 errores deweb/congelados; solo mengua.web/routes/alpha/**está TERMINATED (memoria) — si se borra, sus 16 entradas salen del ledger. gradient-builder.trackdata-kind: emiteprovider.kindcrudo, 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-pickeren morfo:check: clase flaky «demo que navega bajo el eval» (comolink); 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 congit diff -G"patrón" --name-onlycuando 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 devlleva--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/smokeaceptan la URL como argv[2] — usar el servidor PROPIO (5201), nunca el de otra sesión. - ⚠
| tailenmascara exit codes TAMBIÉN en los scripts del gate (medido en vivo: check con 76 errores salió 0 por un tail).