Cierre de la fase C del P0: tras C2a (la bolsa resuelve el contrato) y C2b
(una sola computación), el efecto era doble-escritura idempotente sin
función. Se retira entero: `syncPartAttrs`, el flag del tipo y las ~71
registraciones que lo pasaban (tabs-provider y radio-group-provider viajaron
en `8ac23047f` del eje theming con la retirada declarada en su cuerpo —
coordinación por canal entre sesiones, historia completa desde ambos lados).
El único escritor imperativo sancionado que queda es el prewrite de
`trigger` (un commit que el morfo declara).
La PRIMERA pasada de la suite completa de la historia (nadie la corría — el
hallazgo original del informe demostrándose solo) destapó la cola: ~258
asserts en 34 ficheros de test de provider (jsdom, elementos sueltos)
ejercitaban las escrituras DOM del efecto retirado, no el contrato. Todos
re-firmados a asserts de bolsa, con tres leyes que salieron del trabajo:
- la bolsa entrega valores CRUDOS (número 20, no '20'; booleans donde el
getter los produce) — Svelte stringifica al render, el DOM no cambia;
- una AUSENCIA se aserta contra la bolsa del PART (`'x' in props === false`),
no contra un getter de provider que añada la clave explícita `undefined`;
- el prewrite (`data-last-action`) SIGUE siendo assert de DOM — es el
escritor imperativo que sobrevive.
De la misma pasada: `skin-media-player` entra en `COMPETING_ROOTS` de
lint.test (viste el contrato de media-player, clase audio-player — nació sin
registrarse y nada lo corría), y los ~10 comentarios que describían el
efecto (dialog-001, sticky, knob, field, media-player, editable, anchor-nav)
pasan a describir la bolsa, verificados spread a spread antes de tocar nada.
Verificación: runtime 49/49 · ssr-contract 6/6 · morfo:check 161/161
post-strip («All routed morfos validate» — el detector definitivo) · los 34
ficheros re-firmados en verde · suite completa con únicos rojos residuales
los flaky de carga ya adjudicados (timeouts que pasan en solitario) ·
svelte-check src/ a 0 (71 = ledger exacto de web/).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>