docs(blocks): handoff del día — cinco filas cerradas, y el eje que cambió el método

Deja escrito por dónde entrar mañana, en este orden:

§0 EL EJE VIVO — el chasis de sección, que es lo que hay que retomar. Con la
frase del autor que lo abrió («lo estás convirtiendo en una mierda a base de
parches, ninguna es profesional ni de alcance») y su pregunta, que es la que
tenía razón: si no debería haber un componente del que se basen todos los
bloques. El censo que la confirmó (16 · 15 · 9 · 8 copias del Header), la firma
(que CREZCA Section, no que nazca un hermano), por qué el nombre Block se
descartó (ya significa «a todo el ancho» en el canon), los tres commits, las
dos trampas que costaron —el Background que se capa dentro de la medida, y la
raíz que extiende SectionProps y no HTMLAttributes— y las tres cosas que
quedan: los 19 README describen el nido viejo, el contrato del tier no dice
todavía que la raíz de un block ES un Section, y nada más.

§1 LA COLA, REENCUADRADA — con el aviso de que más de la mitad de lo que sigue
archivado bajo un block tiene la causa en el canon (A-48, A-53, A-60, A-62,
A-65), así que bajarlas dentro de la frontera del tier fabrica parches. Y el
trabajo honesto que sí queda dentro: A-74, A-96 y A-71.

A-11 replanteada en su ficha por la misma razón: su arreglo profesional es que
el canon publique el CATÁLOGO en runtime de sus escalas —como ya hace
EIDOS_VARIANTS— y no siete líneas de exhaustividad repartidas por las demos.
Queda medido lo que hoy está derivado: ContainerSize sin xxl, Breakpoint con 3
de 6, Decor con 5 de 8.

docs:check 0/0 (813). Los avisos de prettier de los dos ficheros son
preexistentes (CRLF), comprobado contra HEAD.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
alpha-0.1-background
dev 2 months ago
parent cc98444343
commit 6e501f4fdf

@ -591,7 +591,26 @@ _Una ficha por `id` verificado. La reclamación completa vive en el fichero del
**Evidencia** — `web/routes/blocks/site-header/SiteHeaderSite.svelte:25-26` y `web/routes/blocks/hero/HeroSite.svelte:30-31` (cuatro uniones copiadas). El block hace lo correcto: `site-header/types.ts` importa los tipos del canon.
**Disposición** — Importar los tipos del canon en las demos. Fase 3.
**Disposición** — ⚠️ **REPLANTEADA 2026-08-19 por el autor, y la anterior queda
retirada.** Se propuso importar los tipos y blindar los chips con una línea de
exhaustividad por fichero; el autor lo paró: es boilerplate repetido en siete
sitios para compensar algo que le falta al framework, no un arreglo.
**El defecto real no es que las demos copien uniones.** Es que el canon publica
**tipos sin catálogo en runtime**: `ContainerSize`, `SectionSize` y
`BackgroundPatternKind` sólo existen como tipo, así que cualquiera que necesite
enumerarlos —una demo, una pantalla de ajustes, una página de docs— escribe la
lista a mano y se queda atrás cuando el canon crece. El framework ya tiene la
forma buena en dos sitios (`EIDOS_VARIANTS`, `BREAKPOINTS_DEFAULT`) y no la
aplica al resto.
Medido en el árbol el 2026-08-19: `ContainerSize` copiada **sin `xxl`** en dos
demos, `Breakpoint` con **3 de 6** valores, `Decor` con **5 de 8** patrones, y
los propios chips como literales escritos a mano.
Se cierra **una vez, en el canon** —cada escala publica su lista y los
consumidores derivan—, no demo a demo. Fuera del eje mientras esté acotado a
`blocks/`.
### A-12 — ARREGLADO · `feature-grid` · doctrina · MEDIA

@ -1,11 +1,12 @@
# CONTINUE — tier blocks (handoff, act. 2026-08-19 · A-111 cerrada)
# CONTINUE — tier blocks (handoff, act. 2026-08-19 noche · el chasis de sección)
**Estado**: F1 CERRADA (8/8) · F2 CERRADA (15/15) · F2b CERRADA ENTERA ·
**F3 ABIERTA — F3.1 `app-shell` CONSTRUIDO, VERIFICADO Y REHECHO**, con su fase
0 firmada (Q1–Q4) y el canon `SkipLink` nacido delante de él.
**A-111, A-112 y A-109 ARREGLADAS** (el landmark anónimo de `NavigationMenu` ·
el `Toolbar.Button` que no podía decir su rango · el `Banner` que reclamaba un
landmark que no es suyo), cada una con su doctrina escrita.
**Cinco filas cerradas** (A-111 · A-112 · A-109 · A-110 · A-29), cada una con su
doctrina escrita. Y después, **el eje que cambió el método**: en vez de seguir
bajando filas, `Section` crece hasta ser la sección de página y los 19 blocks
dejan de reescribir su chasis. **EMPIEZA POR AHÍ** — §0, abajo.
**19 blocks vivos**: site-header · hero · feature-grid · feature-split · pricing ·
testimonials · faq · stats-band · cta · newsletter · site-footer · banner · team ·
@ -17,7 +18,79 @@ hit-test dentro de la cabecera, medido (antes: 49px).
## Por dónde entrar mañana
### 1 · ~~A-111~~ — **CERRADA 2026-08-19**. Lo que dejó, y lo que abrió
### 0 · EL EJE VIVO: el chasis de sección (abierto, tres tandas hechas)
**Idea del autor**, después de parar una cola de parches con una frase que hay
que conservar: *«todo esto es muy engorroso, lo estás ensuciando y convirtiendo
el framework en una mierda a base de parches, ninguna es profesional ni de
alcance»*. Tenía razón, y la pregunta que vino después —*«¿no sería definir un
componente del que se basen todos los bloques?»*— es la que abrió esto.
El censo le dio la razón con números: `containerSize` recableado en **16**
blocks, `sectionSize` en **15**, `decor` en **9**, y **ocho copias del mismo
`Header`**, una ya derivada — la de `article-grid` había perdido su `Motion`.
**Firmado: A — que CREZCA `Section`**, no que nazca un hermano. El nombre que se
propuso, `Block`, se descartó con dato: `block` ya es vocabulario del canon
(`block?: boolean` = «a todo el ancho», 10+ componentes) y colisionaría con el
nombre del tier. Si algún día naciera aparte sería `PageSection`.
**Tres commits, sin push**:
- `4a2771517` — `Section` gana `containerSize`, `decor` y la parte
`Section.Header`, y renderiza un `<section>` real absorbiendo el `{...rest}`.
Para eso **`Box` gana `as`** (lista CERRADA de contenedores, default `div`),
que **cierra F21**. Dos blocks migrados como prueba.
- `ecb23d6a4` — los ocho `Header` pasan a componer `Section.Header`, que gana
`align` para la única variación real. `article-grid` recupera su `Motion`.
- `cc9844434` — las diecisiete raíces restantes. **−420 líneas.**
**Cuatro conservan algo suyo, cada uno por un motivo medido**: `cta` (su
`paddingX` condicional: `full` significa EDGE TO EDGE) · `content-section` (mide
con una rejilla de cinco pistas, no con `Container`) · `site-footer`
(`as="footer"`) · `hero`, que destapó **la trampa del diseño**.
⚠️ **La trampa, y sólo salió MIDIENDO**: si un block pasa `containerSize` Y un
`<Background>` propio como hijo, el fondo queda **atrapado dentro de la medida**
— el `hero` salió con 128px de blanco a cada lado en vez de a sangre. El `decor`
del chasis se pinta FUERA del container justo por eso; un `Background` que llega
como hijo se capa con la copia. Escrito en el sitio donde volvería a morder.
Verificado después: fondo 1280 a sangre, hijo directo de la sección, medida 1024
dentro, en `hero` y en `stats-band`.
⚠️ **Y el paso de tipos que costó 5 + 14 errores**: la raíz de un block extiende
los props del componente del canon que envuelve (**`SectionProps`**), nunca
`HTMLAttributes` — cuya superficie laxa choca con el `style`/`class` refinado
del canon al esparcirse. La regla ya estaba escrita en el `types.ts` de
`stats-band` para las sub-partes; ahora la raíz también envuelve canon.
**Lo que queda de este eje**:
1. **Los 19 README describen el nido viejo** (`Section · Container` en sus mapas
de composición). Es prosa, no está guardada por nada, y ahora miente.
2. **El contrato del tier** (`architecture/blocks.md`) no dice todavía que la
raíz de un block ES un `Section`. Si eso se escribe, `blocks:check` puede
vigilarlo.
3. **Nada más del chasis**: los tres ejes y la parte están migrados y medidos.
### 1 · La cola del ledger, con el aviso que la reencuadra
⚠️ **Antes de bajar otra fila, léete esto**: al revisar la cola con el autor
salió que **más de la mitad de lo que queda archivado bajo un block tiene la
causa en el canon** — A-48 (el `Banner` declara cero eventos), A-62 y A-65 (el
`Button` de soma emite haya o no handler), A-60 (el modelo `auto-fill` de
`AutoGrid`), A-53 (`Link` mudo frente a `Button`). Bajarlas una a una dentro de
la frontera del tier fabrica parches. **A-11 quedó replanteada por eso** (ver su
ficha): su arreglo profesional es que el canon publique el CATÁLOGO en runtime
de sus escalas, como ya hace `EIDOS_VARIANTS`, no siete líneas de exhaustividad
repartidas por las demos.
**Trabajo honesto que queda dentro de la frontera**: A-74 (anclas muertas en la
demo de feature-split) · A-96 (`affixOffset` sin control vivo) · A-71 (el arnés
pinta el block antes del `h1`, en las 15 demos). Media hora, y la cola queda
limpia sin mentir.
### 2 · ~~A-111~~ — **CERRADA 2026-08-19**. Lo que dejó, y lo que abrió
El nombre del landmark vive ya en el `<nav>`. Medido con el árbol AX de Chrome:
`/blocks/app-shell/preview` → `navigation: ['Navegación principal', 'Menú de la

Loading…
Cancel
Save

Powered by TurnKey Linux.