39edbc8db dejaba la apariencia como OPCION del que renderiza
(RenderThemeCssOptions.appearance, pasada a mano por generated-css.ts):
apply() y renderCss() salian mudos, y habia DOS fuentes de verdad porque
la apariencia ya vivia implicita en el sufijo del id (/-(light|dark)$/).
Forma firmada por el autor:
- ThemeDefinition.appearance: ThemeEffective (el tipo de $libs/theme, sin
union nueva), OBLIGATORIO. Tres palabras: mode = la preferencia
(data-mode) · theme = lo pintado (data-theme) · appearance = que ES el
tema. No `colorScheme`: ese nombre es de la paleta derivada de seed.
- renderThemeCss lo lee del TEMA y lo emite SIEMPRE como primera
declaracion; la opcion desaparece sin shim. apply(), renderCss() y el
generador lo emiten gratis.
- El sufijo del id baja a convencion de BUSQUEDA del resolver: el
validador exige el campo (gate de forma, el que protege documentos) y
cierra la contradiccion sufijo<->apariencia (gate semantico). Un tema
nuevo por EidosConfigPatch sin el campo cae en el primero.
- Todo bloque que pinta una apariencia la declara: el bloque del seed
(applyColorScheme, que admite forzar el donante) emite color-scheme
desde la apariencia del tema DONANTE resuelto, no del mode crudo;
helper #resolveSchemeDonorThemeId compartido para resolverlo una vez.
- Documento persistido v1 -> v2, sin migracion: nadie puede adivinar la
apariencia de un tema viejo.
generated/ no cambia ni un byte (las dos lineas ya estaban; ahora vienen
del tema): renderGeneratedBaseEidosCss() sigue en 5751 nombres unicos /
8034 ocurrencias, contrato y censo quietos. Suite eidos + value-channels
460/460 (8 tests nuevos, 4 mutaciones probadas). check 71 -> 73: los dos
son web/routes/alpha/lib/docs-theme.ts sin appearance — el arbol
congelado pierde el tipo por diseño y entra en el ledger con la unica
excepcion escrita (crece SOLO cuando el framework se mueve bajo el arbol
provisional); grafito.ts y theme-variants.ts ya fallaban por literal y no
suben. src/ a cero. check:gate OK, eidos:lint 0.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>