From 9bbc58502f43e31b1203b64aa3c179930bf78df6 Mon Sep 17 00:00:00 2001 From: dev Date: Mon, 24 Aug 2026 02:15:46 +0200 Subject: [PATCH] =?UTF-8?q?docs(theming):=20la=20cola=20eran=20TREINTA=20Y?= =?UTF-8?q?=20CUATRO,=20no=20once=20=E2=80=94=20y=20dos=20huecos=20m=C3=A1?= =?UTF-8?q?s=20del=20instrumento?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ejecuta P3, P4 y P5 del plan de la revisión del 24. P4 — LA COLA DEL HANDOFF ESTABA MAL, Y ERA MI ERROR La bala que escribí al cerrar la tanda listaba once pendientes. Contados contra el censo y el registro §8 son treinta y cuatro, y la lista sin separar tampoco servía, porque mezcla dos cosas distintas: - 16 que NUNCA han pasado por el eje (sin entrada §8 ni README): field-langs, chronos, mockup, sidebar, image-adjustments, separator, chat-message, fab, tags-input, chat-typing, collapsible, toolbar, scroll-area, tabs, slider, toast. Ésa es la cola de verdad. - 18 que SÍ pasaron y sólo les falta el README «Talla y tema»: el paso se volvió obligatorio después de que cerraran y e522e04e6 recuperó 21, pero éstos quedaron fuera. No es cola de tokenización, es deuda de documentación. Queda escrito además cómo regenerar la lista, para que nadie la escriba de memoria otra vez: alcance < 100 % y sin sección «Talla y tema», y el desempate entre A y B es si tiene entrada en §8. P3 — LA FECHA DE MEDIDA DE SEIS FICHAS select, calendar, radio-group, rating-group, toggle y card se midieron y commitearon pasada la medianoche; sus fichas decían 23. La fecha es parte del artefacto. P5 — DOS HUECOS DE INSTRUMENTO EN §13 - eidos-lint no conoce las exenciones que el test de vitest SÍ tiene (CSS_ONLY_LAYERS, WIP_TRACKS, KNOWN_MISSING_MORFO, raíces competidoras): sobre spin-field muere con «No morfo file» en vez de eximirlo. El guard de la suite y el script de línea de comandos discrepan sobre la misma ley, y el que se corre a mano es el que miente. - La columna `size` del censo se apaga cuando el eje de talla SUBE al contrato: la calcula leyendo bloques [data-size] del CSS, así que promover una escala con scope 'size:{k}' —la forma canónica— la borra del recuento. Bajó de 57 a 55 justo al hacerlo mejor. El instrumento premia la forma vieja. Co-Authored-By: Claude Opus 5 --- docs/audit/theming/calendar.md | 2 +- docs/audit/theming/card.md | 2 +- docs/audit/theming/radio-group.md | 2 +- docs/audit/theming/rating-group.md | 2 +- docs/audit/theming/select.md | 2 +- docs/audit/theming/toggle.md | 2 +- docs/next-features.md | 22 ++++++++++++++++++++++ docs/process/CONTINUE-theming.md | 28 +++++++++++++++++++++++++--- 8 files changed, 53 insertions(+), 9 deletions(-) diff --git a/docs/audit/theming/calendar.md b/docs/audit/theming/calendar.md index 60e464568..e485794c6 100644 --- a/docs/audit/theming/calendar.md +++ b/docs/audit/theming/calendar.md @@ -5,7 +5,7 @@ > Vista de conjunto: [README](./README.md) · método y protocolo: > [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7. -- **Medido**: 2026-08-23 · **Alcance**: **89%** — 57 de 64 knobs por token público +- **Medido**: 2026-08-24 · **Alcance**: **89%** — 57 de 64 knobs por token público - **Knobs de apariencia**: 67 — público 57 · privado 7 · global 0 · literal 0 · sistema 3 · excepción 4 _(los dos últimos, fuera del ratio)_ - **Contrato hoy** (`lib/recipes/base.ts`): 74 pública(s) — `gap`, `padding-xs`, `padding-sm`, `padding-md`, `padding-lg`, `radius`, `border-width`, `border`, `invalid-border`, `bg`, `outline-bg`, `outline-shadow`, `fg`, `shadow`, `font-family`, `font-size-xs`, `font-size-sm`, `font-size-md`, `font-size-lg`, `line-height`, `header-gap`, `heading-fg`, `heading-font-size`, `heading-font-weight`, `control-size-xs`, `control-size-sm`, `control-size-md`, `control-size-lg`, `control-radius`, `control-border-width`, `control-border`, `hover-control-border`, `control-bg`, `control-fg`, `hover-control-fg`, `select-min-width`, `select-padding-inline`, `months-gap`, `grid-gap`, `weekday-size`, `weekday-fg`, `weekday-font-size`, `weekday-font-weight`, `day-size-xs`, `day-size-sm`, `day-size-md`, `day-size-lg`, `day-radius`, `day-border-width`, `day-border`, `hover-day-border`, `day-bg`, `day-fg`, `hover-day-fg`, `day-font-weight`, `day-selected-fg`, `range-start-solid`, `range-start-solid-hover`, `range-start-border`, `range-start-text`, `range-end-solid`, `range-end-solid-hover`, `range-end-border`, `range-end-text`, `day-today-border`, `day-today-fg`, `day-today-font-weight`, `day-outside-fg`, `day-outside-opacity`, `day-weekend-fg`, `day-unavailable-decoration`, `transition-duration`, `transition-ease`, `disabled-opacity` · 5 privada(s) forward — `_palette-solid`, `_palette-solid-hover`, `_palette-track`, `_palette-border`, `_palette-text` - **Eje `size`**: no · **ficheros**: `calendar-select.css`, `calendar.css` diff --git a/docs/audit/theming/card.md b/docs/audit/theming/card.md index 64675f7fe..eca87ce67 100644 --- a/docs/audit/theming/card.md +++ b/docs/audit/theming/card.md @@ -5,7 +5,7 @@ > Vista de conjunto: [README](./README.md) · método y protocolo: > [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7. -- **Medido**: 2026-08-23 · **Alcance**: **78%** — 28 de 36 knobs por token público +- **Medido**: 2026-08-24 · **Alcance**: **78%** — 28 de 36 knobs por token público - **Knobs de apariencia**: 37 — público 28 · privado 8 · global 0 · literal 0 · sistema 1 · excepción 0 _(los dos últimos, fuera del ratio)_ - **Contrato hoy** (`lib/recipes/base.ts`): 98 pública(s) — `padding-inline-xs`, `padding-inline-sm`, `padding-inline-md`, `padding-inline-lg`, `padding-inline-xl`, `padding-block-xs`, `padding-block-sm`, `padding-block-md`, `padding-block-lg`, `padding-block-xl`, `gap-xs`, `gap-sm`, `gap-md`, `gap-lg`, `gap-xl`, `font-family`, `line-height`, `title-font-family`, `title-font-size-xs`, `title-font-size-sm`, `title-font-size-md`, `title-font-size-lg`, `title-font-size-xl`, `title-font-weight`, `title-line-height`, `title-letter-spacing`, `description-font-family`, `description-font-size-xs`, `description-font-size-sm`, `description-font-size-md`, `description-font-size-lg`, `description-font-size-xl`, `description-line-height`, `description-fg`, `body-font-size-xs`, `body-font-size-sm`, `body-font-size-md`, `body-font-size-lg`, `body-font-size-xl`, `body-line-height`, `border-width`, `radius-sm`, `radius-md`, `radius-lg`, `header-gap`, `footer-gap`, `footer-padding-start`, `footer-border-fg`, `emerge-duration`, `emerge-ease`, `emerge-distance`, `hover-lift`, `hover-shadow`, `press-scale`, `press-duration`, `selected-ring-width`, `disabled-opacity`, `outline-bg`, `primary-solid`, `primary-text`, `primary-contrast`, `secondary-solid`, `secondary-text`, `secondary-contrast`, `neutral-solid`, `neutral-text`, `neutral-contrast`, `affirm-solid`, `affirm-text`, `affirm-contrast`, `fulfill-track`, `fulfill-border`, `fulfill-solid`, `fulfill-text`, `fulfill-contrast`, `risk-solid`, `risk-text`, `risk-contrast`, `threat-solid`, `threat-text`, `threat-contrast`, `loss-track`, `loss-border`, `loss-solid`, `loss-text`, `loss-contrast`, `primary-track`, `primary-border`, `secondary-track`, `secondary-border`, `neutral-track`, `neutral-border`, `affirm-track`, `affirm-border`, `risk-track`, `risk-border`, `threat-track`, `threat-border` · 5 privada(s) forward — `_palette-track`, `_palette-border`, `_palette-solid`, `_palette-text`, `_palette-contrast` - **Eje `size`**: sí · **ficheros**: `card.css` diff --git a/docs/audit/theming/radio-group.md b/docs/audit/theming/radio-group.md index 9913205cf..6e8fe5dbe 100644 --- a/docs/audit/theming/radio-group.md +++ b/docs/audit/theming/radio-group.md @@ -5,7 +5,7 @@ > Vista de conjunto: [README](./README.md) · método y protocolo: > [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7. -- **Medido**: 2026-08-23 · **Alcance**: **81%** — 46 de 57 knobs por token público +- **Medido**: 2026-08-24 · **Alcance**: **81%** — 46 de 57 knobs por token público - **Knobs de apariencia**: 59 — público 46 · privado 10 · global 1 · literal 0 · sistema 2 · excepción 0 _(los dos últimos, fuera del ratio)_ - **Contrato hoy** (`lib/recipes/base.ts`): 69 pública(s) — `gap-vertical`, `gap-horizontal`, `item-size-xs`, `item-size-sm`, `item-size-md`, `item-size-lg`, `item-size-xl`, `dot-size-xs`, `dot-size-sm`, `dot-size-md`, `dot-size-lg`, `dot-size-xl`, `item-gap`, `font-family`, `font-size-xs`, `font-size-sm`, `font-size-md`, `font-size-lg`, `font-size-xl`, `item-size`, `dot-size`, `font-size`, `font-weight`, `line-height`, `item-label-fg`, `disabled-item-label-fg`, `invalid-item-label-fg`, `indicator-radius`, `indicator-border-width`, `indicator-bg`, `indicator-border`, `hover-indicator-border`, `disabled-indicator-bg`, `disabled-indicator-border`, `checked-disabled-indicator-bg`, `invalid-indicator-border`, `invalid-ring`, `invalid-ring-gap`, `dot-fg`, `disabled-dot-fg`, `transition-duration`, `transition-ease`, `disabled-opacity`, `primary-solid`, `primary-solid-hover`, `neutral-solid`, `neutral-solid-hover`, `secondary-solid`, `secondary-solid-hover`, `affirm-solid`, `affirm-solid-hover`, `label-font-family`, `label-font-size`, `label-font-weight`, `label-line-height`, `label-fg`, `segmented-track-bg`, `segmented-track-shadow`, `segmented-track-padding`, `segmented-track-radius`, `segmented-segment-padding-inline`, `segmented-segment-padding-block`, `segmented-segment-fg`, `hover-segmented-segment-fg`, `segmented-segment-font-weight`, `segmented-pill-shadow`, `segmented-pill-radius`, `segmented-transition-duration`, `segmented-transition-ease` · 3 privada(s) forward — `_palette-solid`, `_palette-solid-hover`, `_palette-text` - **Eje `size`**: no · **ficheros**: `radio-group.css` diff --git a/docs/audit/theming/rating-group.md b/docs/audit/theming/rating-group.md index 6faec9198..f0fbcc2a6 100644 --- a/docs/audit/theming/rating-group.md +++ b/docs/audit/theming/rating-group.md @@ -5,7 +5,7 @@ > Vista de conjunto: [README](./README.md) · método y protocolo: > [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7. -- **Medido**: 2026-08-23 · **Alcance**: **100%** — 13 de 13 knobs por token público +- **Medido**: 2026-08-24 · **Alcance**: **100%** — 13 de 13 knobs por token público - **Knobs de apariencia**: 14 — público 13 · privado 0 · global 0 · literal 0 · sistema 1 · excepción 2 _(los dos últimos, fuera del ratio)_ - **Contrato hoy** (`lib/recipes/base.ts`): 29 pública(s) — `gap-xs`, `gap-sm`, `gap-md`, `gap-lg`, `gap-xl`, `item-size-xs`, `item-size-sm`, `item-size-md`, `item-size-lg`, `item-size-xl`, `font-family`, `font-size-xs`, `font-size-sm`, `font-size-md`, `font-size-lg`, `font-size-xl`, `gap`, `item-size`, `font-size`, `line-height`, `item-fg`, `active-item-fg`, `partial-item-fg`, `invalid-item-fg`, `item-hover-offset`, `focus-radius`, `transition-duration`, `transition-ease`, `disabled-opacity` - **Eje `size`**: no · **ficheros**: `rating-group.css` diff --git a/docs/audit/theming/select.md b/docs/audit/theming/select.md index c1e2aae80..3a3c2e1b5 100644 --- a/docs/audit/theming/select.md +++ b/docs/audit/theming/select.md @@ -5,7 +5,7 @@ > Vista de conjunto: [README](./README.md) · método y protocolo: > [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7. -- **Medido**: 2026-08-23 · **Alcance**: **92%** — 57 de 62 knobs por token público +- **Medido**: 2026-08-24 · **Alcance**: **92%** — 57 de 62 knobs por token público - **Knobs de apariencia**: 69 — público 57 · privado 5 · global 0 · literal 0 · sistema 7 · excepción 3 _(los dos últimos, fuera del ratio)_ - **Contrato hoy** (`lib/recipes/base.ts`): 103 pública(s) — `stack-gap`, `font-family`, `font-size-xs`, `font-size-sm`, `font-size-md`, `font-size-lg`, `font-size-xl`, `line-height`, `fg`, `primary-text`, `secondary-text`, `neutral-text`, `affirm-text`, `fulfill-track`, `fulfill-border`, `fulfill-text`, `risk-text`, `threat-text`, `loss-track`, `loss-border`, `loss-text`, `trigger-height-xs`, `trigger-height-sm`, `trigger-height-md`, `trigger-height-lg`, `trigger-height-xl`, `trigger-padding-inline-xs`, `trigger-padding-inline-sm`, `trigger-padding-inline-md`, `trigger-padding-inline-lg`, `trigger-padding-inline-xl`, `trigger-gap-xs`, `trigger-gap-sm`, `trigger-gap-md`, `trigger-gap-lg`, `trigger-gap-xl`, `trigger-border-width`, `trigger-border`, `hover-trigger-border`, `trigger-radius`, `trigger-bg`, `trigger-shadow`, `trigger-fg`, `trigger-indicator-fg`, `trigger-indicator-size`, `placeholder-fg`, `disabled-border`, `disabled-bg`, `disabled-fg`, `invalid-border`, `content-z`, `content-padding-block-xs`, `content-padding-block-sm`, `content-padding-block-md`, `content-padding-block-lg`, `content-padding-block-xl`, `content-padding-inline-xs`, `content-padding-inline-sm`, `content-padding-inline-md`, `content-padding-inline-lg`, `content-padding-inline-xl`, `content-min-width`, `content-max-width`, `content-max-height`, `content-radius`, `content-fg`, `open-duration`, `close-duration`, `viewport-gap`, `viewport-padding`, `group-gap`, `group-padding-block`, `group-heading-padding-block`, `group-heading-padding-inline`, `group-heading-font-family`, `group-heading-font-size`, `group-heading-font-weight`, `group-heading-letter-spacing`, `group-heading-fg`, `separator-size`, `separator-margin-block`, `separator-bg`, `item-gap`, `item-padding-inline`, `item-fg`, `item-indicator-size`, `item-description-mt`, `item-description-fg`, `item-description-font-size`, `transition-duration`, `transition-ease`, `primary-track`, `primary-border`, `secondary-track`, `secondary-border`, `neutral-track`, `neutral-border`, `affirm-track`, `affirm-border`, `risk-track`, `risk-border`, `threat-track`, `threat-border` · 3 privada(s) forward — `_palette-track`, `_palette-border`, `_palette-text` - **Eje `size`**: sí · **ficheros**: `select.css` diff --git a/docs/audit/theming/toggle.md b/docs/audit/theming/toggle.md index 134d9df66..2be62825f 100644 --- a/docs/audit/theming/toggle.md +++ b/docs/audit/theming/toggle.md @@ -5,7 +5,7 @@ > Vista de conjunto: [README](./README.md) · método y protocolo: > [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7. -- **Medido**: 2026-08-23 · **Alcance**: **100%** — 24 de 24 knobs por token público +- **Medido**: 2026-08-24 · **Alcance**: **100%** — 24 de 24 knobs por token público - **Knobs de apariencia**: 25 — público 24 · privado 0 · global 0 · literal 0 · sistema 1 · excepción 3 _(los dos últimos, fuera del ratio)_ - **Contrato hoy** (`lib/recipes/base.ts`): 126 pública(s) — `height-xs`, `height-sm`, `height-md`, `height-lg`, `height-xl`, `padding-inline-xs`, `padding-inline-sm`, `padding-inline-md`, `padding-inline-lg`, `padding-inline-xl`, `gap-xs`, `gap-sm`, `gap-md`, `gap-lg`, `gap-xl`, `font-family`, `line-height`, `letter-spacing`, `font-size-xs`, `font-size-sm`, `font-size-md`, `font-size-lg`, `font-size-xl`, `font-weight-xs`, `font-weight-sm`, `font-weight-md`, `font-weight-lg`, `font-weight-xl`, `radius`, `radius-sm`, `radius-md`, `radius-lg`, `radius-xl`, `radius-full`, `border-width`, `shadow`, `transition-duration`, `transition-ease`, `primary-track`, `primary-element`, `primary-hover`, `primary-border`, `primary-solid`, `primary-solid-hover`, `primary-text`, `primary-contrast`, `neutral-track`, `neutral-element`, `neutral-hover`, `neutral-border`, `neutral-solid`, `neutral-solid-hover`, `neutral-text`, `neutral-contrast`, `risk-track`, `risk-element`, `risk-hover`, `risk-border`, `risk-solid`, `risk-solid-hover`, `risk-text`, `risk-contrast`, `threat-track`, `threat-element`, `threat-hover`, `threat-border`, `threat-solid`, `threat-solid-hover`, `threat-text`, `threat-contrast`, `secondary-track`, `secondary-element`, `secondary-hover`, `secondary-border`, `secondary-solid`, `secondary-solid-hover`, `secondary-text`, `secondary-contrast`, `affirm-track`, `affirm-element`, `affirm-hover`, `affirm-border`, `affirm-solid`, `affirm-solid-hover`, `affirm-text`, `affirm-contrast`, `palette-track`, `palette-element`, `palette-hover`, `palette-border`, `palette-solid`, `palette-solid-hover`, `palette-text`, `palette-contrast`, `solid-bg`, `solid-fg`, `solid-border`, `solid-hover-bg`, `solid-hover-border`, `solid-on-bg`, `solid-on-fg`, `solid-on-border`, `solid-on-hover-bg`, `solid-on-hover-border`, `outline-bg`, `outline-fg`, `outline-border`, `outline-hover-bg`, `outline-hover-border`, `outline-on-bg`, `outline-on-fg`, `outline-on-border`, `outline-on-hover-bg`, `outline-on-hover-border`, `ghost-bg`, `ghost-fg`, `ghost-border`, `ghost-hover-bg`, `ghost-hover-border`, `ghost-on-bg`, `ghost-on-fg`, `ghost-on-border`, `ghost-on-hover-bg`, `ghost-on-hover-border`, `disabled-opacity`, `invalid-border` - **Eje `size`**: sí · **ficheros**: `toggle.css` diff --git a/docs/next-features.md b/docs/next-features.md index 3521b03a6..702dfe13a 100644 --- a/docs/next-features.md +++ b/docs/next-features.md @@ -1443,6 +1443,28 @@ Lo que `chart` destapó (2026-08-22): chevron, con lo que los dos tokens de reposo del trigger leen muertos. Miden bien con el panel CERRADO. No hay arreglo dentro de una corrida: el instrumento sólo puede estar en un estado a la vez; se adjudica. +- **⚠ `eidos-lint` no conoce las exenciones que el test de vitest SÍ tiene** + (medido 2026-08-24 revisando la tanda). `src/uix/eidos/lint.test.ts` mantiene + cuatro conjuntos de exención declarados y razonados —`CSS_ONLY_LAYERS` + (`spin-field`: una capa CSS compartida que consumen css-field y number-field + por identidad estructural, sin morfo POR DISEÑO), `WIP_TRACKS`, + `KNOWN_MISSING_MORFO` y las raíces competidoras—, pero + `scripts/eidos-lint.ts` no los conoce: sobre `spin-field` muere con + «No morfo file» en vez de eximirlo. **El guard de la suite y el script de + línea de comandos discrepan sobre la misma ley**, y el que se corre a mano + es el que miente. Arreglo: que el script importe los mismos conjuntos, o que + vivan en un módulo que los dos lean. Preexistente, no de esta tanda. + +- **⚠ La columna `size` del censo se apaga cuando el eje de talla SUBE al + contrato** (medido 2026-08-24 en `radio-group` y `rating-group`). La columna + se calcula leyendo bloques `[data-size]` en el CSS; cuando una escala privada + se promueve al TSC con `scope: 'size:{k}'` —que es la forma CANÓNICA— esos + bloques desaparecen de la receta y el censo deja de marcar el eje: el total + bajó de 57 a 55 justo al hacerlo mejor. **El instrumento premia la forma + vieja.** No afecta al ratio de alcance, pero sí a la tabla §9 y a cualquiera + que la lea para decidir si un componente tiene talla. Arreglo: leer también + los `scope: 'size:*'` del contrato, no sólo el CSS. + - **⚠⚠ EL ÍNDICE DE GIT ES COMPARTIDO: VERIFICAR EL ÁRBOL INDEXADO NO BASTA** (medido 2026-08-24, con ocho sesiones sobre el mismo worktree). Hay UN solo `.git/index`. La técnica que esta rama daba por segura —construir el índice diff --git a/docs/process/CONTINUE-theming.md b/docs/process/CONTINUE-theming.md index 19feb564c..59ca11d73 100644 --- a/docs/process/CONTINUE-theming.md +++ b/docs/process/CONTINUE-theming.md @@ -145,9 +145,31 @@ declarar ruido reproduciéndolo sobre código idéntico.** Los dos lo hicieron. - **La demo de `chat-log` se TOCÓ como instrumento** (montaba tres de sus seis partes sólo en la prosa, así que once claves no tenían nodo que pintar). Roza la regla de que las demos quedan fuera del eje: queda dicho, no escondido. -- Quedan en la cola, por alcance: `chat-message` 84 · `fab` 88 · - `tags-input` 88 · `chat-typing` 89 · `collapsible` 90 · `accordion` 91 · - `toolbar` 91 · `scroll-area` 94 · `tabs` 96 · `slider` 97 · `toast` 98. +- **LA COLA, con la separación que la primera redacción se dejó** (corregido + 2026-08-24 al revisar: decía once y son treinta y cuatro, contados contra el + censo y el registro §8). + + **A. Nunca han pasado por el eje — 16.** Sin entrada en §8 y sin README: + `field-langs` 0 % (bloqueado por el mandato Field) · `chronos` 1 % (carril + WIP) · `mockup` 38 % (⚠ sin ruta de demo) · `sidebar` 55 % (eje propio) · + `image-adjustments` 67 % · `separator` 67 % · `chat-message` 84 % · + `fab` 88 % · `tags-input` 88 % · `chat-typing` 89 % · `collapsible` 90 % · + `toolbar` 91 % · `scroll-area` 94 % · `tabs` 96 % · `slider` 97 % · + `toast` 98 %. + + **B. Pasaron por el eje pero les FALTA el README «Talla y tema» — 18.** Su + número está adjudicado y su commit hecho; lo que falta es el artefacto del + paso §7 que se volvió obligatorio después de que cerraran (`e522e04e6` + recuperó 21, éstos quedaron fuera): `proof-of-human` · `palabras` · + `audio-player` · `drawer` · `radio-cards` · `password-field` · `tag-group` · + `popover` · `color-picker` · `timeline` · `stepper` · `aura` · `metrics` · + `float-panel` · `chart` · `accordion` · `gradient-builder` · `nav-tree`. + **No es cola de tokenización: es deuda de documentación**, y se salda con un + barrido derivado del contrato como el que ya se hizo una vez. + + Regenera siempre esta lista del censo, nunca de memoria: el criterio es + «alcance < 100 % y sin sección `## Talla y tema`», y el desempate entre A y B + es si tiene entrada en el registro §8. ## LO QUE DEJÓ LA SESIÓN DEL 2026-08-23