You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte-kit-vice/docs/process/CONTINUE-lectura-doctrina.md

12 KiB

CONTINUE — lectura del corpus doctrinal

Registro de lectura. Existe porque la lectura del corpus no cabe en una sola ventana de contexto (~19.000 líneas) y sin este fichero cada sesión la reempieza o se la salta — que es exactamente cómo se auditó a ciegas el 2026-07-29/30 y hubo que revertir 7 commits (3097cfcb6).

No es fuente de verdad. Es un marcador de posición.

La regla que lo motiva

La instrucción del usuario fue: «audita el sistema, para ello previamente lee toda la documentación». Es una precondición bloqueante, no contexto opcional. Incumplirla produjo tres hallazgos falsos, un commit dedicado a retirarlos, y preguntas al usuario cuya respuesta estaba escrita.

El orden lo fija el propio corpus en docs/README.md §«Reading order for a fresh start»: overview → active-architecture → CANON → el capítulo de la capa que se toque.

⚠️ Contaminación: 7 documentos leídos en estado editado

Lo primero que hay que saber. El commit revertido c39170abb editaba 12 documentos. La lectura del 2026-07-30 se hizo sobre el árbol con esas ediciones dentro, así que parte de lo que se leyó como «doctrina» era la escritura del propio agente que luego se revirtió.

Consecuencia: esos 7 hay que releerlos en su estado actual (original).

Dos ejemplos medidos de cómo engañó:

  • testing-and-tooling.md — el original dice «a guard fails when an active provider ships without one». La edición lo había cambiado a «This is a convention, not a guard — the mechanical check does not exist». Se citó como doctrina para justificar una decisión de arnés de tests. Era autocita.
  • overview.md — el original documenta provider.commitState() / provider.emitEvent() («Three Soma scenarios»). La edición lo sustituyó por «One door: runtime.trigger» + la frase «neither has ever existed in the code». Con eso se «descubrió» una contradicción contra soma-architecture.md que la propia edición había creado. Tras el revert ambos documentos coinciden.

Lección para quien siga: antes de citar un documento como doctrina, comprobar que la línea citada no la escribió una sesión previa. git log -p -- <fichero> sobre el párrafo en cuestión.

Inventario

Estado: LIMPIO = leído sobre el original · RELEER = leído contaminado · — = sin empezar.

Núcleo de arquitectura

Doc Líneas Estado
README.md (el mapa) 155 LIMPIO
architecture/sema.md 1024 LIMPIO
architecture/eidos.md 1055 LIMPIO — leída completa 2026-07-30
architecture/overview.md 503 RELEER
architecture/active-architecture.md 837 RELEER
architecture/active-uix.md 115 RELEER
architecture/soma.md 471 RELEER
architecture/soma-architecture.md 1034 RELEER (iba por ~669)
testing-and-tooling.md 110 RELEER
CANON.md 305 RELEER
architecture/morfo.md 888 LIMPIO — leída completa 2026-07-30
architecture/active-app.md 351 —
architecture/agent.md 472 —
architecture/packs.md 86 RELEER
architecture/blocks.md 113 —

morfo.md era la prioridad y ya está leída (era la capa del contrato, la más tocada durante la auditoría fallida, y se llegó a escribir criterio en su §Step 2 sin haberla leído nunca). Lo que salió, en «Hallazgos».

Canon

Doc Líneas Estado
canon/tsc.md (Token Scope Contract) 329 —
canon/vocabularies.md (conjuntos cerrados, generados) 153 —
canon/recipe-contract.md 184 —

Theming y motion

Doc Líneas Estado
theming/reference.md 1822 —
theming/motion.md 791 RELEER
theming/gradient-finish.md 475 —
theming/guide.md 241 —
theming/motion-guide.md 232 RELEER
theming/notes.md 179 —
theming/channels.md 143 —

Guías y decisiones

Doc Líneas Estado
guides/component-guide.md (pasos + reglas A1–A37) 1568 —
decisions/book-deviations.md 851 —
guides/component-audit.md 369 —
guides/completion-checklist.md 337 RELEER
book-map.md 201 —
authoring.md 136 —
glossary.md 89 RELEER
decisions.md 88 —
building-a-component.md 55 —
rfcs/* (7 ficheros) 1860 —

Total ≈ 19.000 líneas. Válidas hoy: 3 documentos.

Hallazgos que SÍ se sostienen

Salen de documentos limpios y verificados como originales:

  1. «Only composition roots create shared services» — architecture/active-uix.md §Ownership, regla 1: «morfo, soma, sema, eidos and components never create dom, langs, prefs, format, clipboard or equivalents: they receive them from ActiveUix». eidos.md la repite («ActiveEidos creates no shared services»). Las dos puertas son createActiveUix / attachActiveUix; el arranque de un shell son tres líneas (createActiveUix → setActiveUix → Soma.create()). ⚠️ La regla es original, pero el fichero está marcado RELEER por otras ediciones — confirmar el párrafo antes de apoyarse en él.
  2. Overlays: sequence: 'post', no 'pre' — sema.md (LIMPIO), nota destacada: un evento de aparición cuyo provider fija open en el HANDLER debe declarar 'post'; con 'pre' el hold de ~240 ms gatea el montaje.
  3. intentRationale — sema.md (LIMPIO), BK-FRAME-NO-INTENT: una familia estructural (contact/emerge/shift/sustain/delegate) que declare intent no neutro debe justificarlo en MorfoEventSemantic.intentRationale o validateMorfo la rechaza. handle está exento.
  4. El scheduler de los holds — sema.md (LIMPIO): los holds van por uix.timers.schedule (semaDelay, sema/timers.ts), y sólo caen a setTimeout «when a channel is built without a scheduler (direct unit tests)». Matiza la regla 1 para tests unitarios; no la anula.

De morfo.md (leída completa, original)

  1. §Step 2 omite 'private' — CONFIRMADO contra el original. Las líneas 397–399 listan sólo 'public' y 'virtual'; la lista de referencia (líneas 55–59) sí documenta los tres kind. El autor decide en §Step 2, así que el hueco es real. ⚠️ Lo que estaba MAL era el criterio que la sesión revertida escribió ahí como arreglo («el test es mecánico: debe existir <Componente.Parte>»), que clasifica mal a todo primitivo de API plana. El hueco sigue abierto; el arreglo no está decidido.
  2. emit: 'value' es legítimo (línea 436): los data-* no-enum van por defecto a emit: 'presence'; emit: 'value' es para atributos que llevan un valor real (data-value, data-min, data-max).
  3. ⚠️ Y una regla que CUESTIONA la conclusión de la sesión revertida sobre data-color (línea 878, «Common pitfalls»): «Provider emits a data-attr not in the morfo. Strict mode logs a warning at runtime; morfo-check fails in CI. Either add the attr to the morfo or rename the provider's emission to data-_*». Más el incidente 2026-05-20 (línea 868): «A component is not done if the provider or demo emits required data-* that Morfo does not declare». La sesión revertida concluyó que data-color NO debe ir en el morfo porque su vocabulario es de eidos; esta regla dice que lo emitido debe declararse. La distinción a resolver es si un attr estampado por el WRAPPER de eidos (no por el provider de soma) entra en la regla — y eso exige leer eidos.md completo y theming/reference. NO resolver antes.
  4. data-_* es el prefijo reservado para attrs privados, deliberadamente fuera del morfo; validateMorfo() los RECHAZA en una declaración.

De eidos.md (limpia, leída hasta la 750)

  1. Existe una categoría SANCIONADA de data-attrs visuales fuera del morfo. §«From Soma», línea 489: «The wrapper adds the visual token data-attrs (data-variant, data-size, data-block, data-icon-only) and does not reimplement state». Y la tabla §«From morfo» (líneas 451–460) enumera lo que eidos consume del morfo — parts[].kebab, archetype, states + data[].values, data-starting-style/data-ending-style, events[].name, semantic.family/.intent, prewrite[], focus.trap: data-color NO aparece. → Esto es la mitad de la respuesta a la pregunta aparcada (nº 7): la regla de morfo.md línea 878 («lo que el PROVIDER emite, se declara») convive con una categoría de attrs que estampa el WRAPPER y que no van al morfo. data-size es el precedente concreto y verificable (switch.css lo usa en 4 reglas y no está en el morfo de switch). → Falta la otra mitad: si data-color pertenece a esa categoría. La lista de la línea 489 es ilustrativa, no exhaustiva, y no lo incluye. La respuesta está en theming/reference.md §25 («Color model: palette + roles + intents»), que el propio eidos.md señala como canon del color (línea 589). NO resolver antes de leer §25.

  2. --* es namespace de eidos (§«The --* token rule»): «The upper layers (sema, soma, morfo) do NOT consume these tokens and do not use the prefix». Es sobre custom properties, no sobre data-attrs, pero fija el principio de propiedad.

  3. eidos-only es una clasificación VÁLIDA, no un error (§«Selector-drift defense», líneas 850–858). eidos-lint clasifica cada selector en morfo-backed / eidos-only / invalid, y define eidos-only como: «the marker is there, but at least one data-* is not declared in the morfo. Valid by convention (visual tokens like data-variant, data-size come from the wrapper)». Sólo invalid (attr declarado con valor fuera del enum) es bug.

  4. THM-4 (líneas 865–887) da la disposición para el caso inverso: un attr «declared FOR a visual axis and that nothing anywhere consumes — no recipe, no shared layer, no sibling, no behavioral reason» es deuda, y la disposición es «consume it or prune it from the morfo (never leave "declared for styling, styled nowhere")». → Las dos piezas juntas apuntan a que un data-color estampado por el wrapper y ausente del morfo es legítimo (eidos-only), y que un data-color declarado en el morfo sólo por un eje visual es podable. Pero sigue faltando theming/reference.md §25, que eidos.md designa como el canon del color: no dar la pregunta por cerrada hasta leerla.

Hallazgos RETIRADOS (eran autocita)

  • «los tests de provider son convención, no guard» — era la edición revertida. El original afirma que el guard existe. La pregunta sobre el arnés de tests sigue abierta y no está resuelta por el corpus.
  • «soma-architecture.md documenta una API fantasma que overview.md desmiente» — la contradicción la creó la edición revertida.

Cómo continuar

  1. Releer los 7 marcados RELEER, en el orden del corpus.
  2. Luego morfo.md completo — es la prioridad real.
  3. Después el resto por el orden del inventario.
  4. Actualizar este fichero al final de cada sesión de lectura: estado por documento y línea donde se paró.
  5. No escribir código ni doctrina hasta acabar. Un hallazgo sólo se reporta si se puede citar documento + línea, y se ha comprobado que esa línea no la escribió una sesión anterior.
  6. Un analizador heurístico que no resuelve algo dice «no verificado»; no emite un hallazgo.

Powered by TurnKey Linux.