docs(blocks): el shell dejó cinco filas, y una explica por qué nadie la había visto

Handoff reescrito para mañana y las cinco filas que abrió el `app-shell`
fichadas en el ledger (A-111…A-115). La puerta de entrada de mañana es la
primera.

**A-111 — `NavigationMenu` deja su landmark ANÓNIMO.** El `aria-label` del
consumidor se reenvía al `<ul>` de la parte `List` y el `<nav>` se queda sin
nombre; el morfo lo declara así a propósito («the root delegates its name to the
list it wraps»). Pero un `<ul>` no es una región: quien navega por landmarks ve
el `<nav>`, y lo ve anónimo. Con UNA navegación en la página es admisible —y por
eso lleva tres semanas de tier sin salir—; con dos ámbitos incumple la APG, y un
shell de aplicación monta dos por definición. Medido en el preview:
`navigation: ['Navegación principal', null, 'Migas de pan']`.

La ficha lleva la forma propuesta en cuatro pasos: mover el default de naming de
la `List` al `Provider` y que la lista apunte al root con `aria-labelledby`;
precedencia de clase «naming» (el consumidor gana si dice algo); un guard que
falle si un componente con `defaultElement: 'nav'` no puede recibir nombre en su
root; y re-medir el censo. Toca morfo + soma, así que va con el aviso de mirar
antes si la sesión del `sidebar` sigue viva ahí.

Las otras cuatro: **A-112** `Toolbar.Button` tipa contra el `ButtonProps` de
soma y no acepta `variant`/`color` · **A-113** la foundation emite los estilos
semánticos y no los aplica a ningún elemento —Times New Roman en los 19
previews—, ARREGLADA en el reset del arnés pero con la pregunta de canon abierta
· **A-114** `Sidebar.Inset` impone `overflow: auto` y se lleva el `sticky` de
dentro · **A-115** no existe `description-list` y el panel de detalle del shell
es el «primer detail-view real» que su propia ficha F5 pone como disparador.

El handoff recoge además la corrección de fondo del día (la barra y el raíl son
dos ÁMBITOS, no la misma navegación en dos tamaños), las dos averías del arnés
que este block destapó, y lo que NO se ejecutó: la app de referencia en modo
attach, que sigue siendo el único sitio donde el ecosistema entero se
demostraría cableado.

docs:check 0/0 (639).

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

File diff suppressed because it is too large Load Diff

@ -1,81 +1,107 @@
# CONTINUE — tier blocks (handoff, act. 2026-08-19)
# CONTINUE — tier blocks (handoff, act. 2026-08-19 noche)
**Estado: F1 CERRADA (8/8) · F2 CERRADA EN UNIDADES (15/15) · saneamiento
CERRADO ENTERO · fase 5 (guard endurecido) HECHA · fase 7 (contraste doctrinal)
CERRADA 15/15 · F2b (ola de variedad) CERRADA ENTERA con su página compuesta ·
**F3 ABIERTA: F3.1 `app-shell` CONSTRUIDO Y VERIFICADO 2026-08-19**, con su
fase 0 firmada (Q1–Q4) y el canon `SkipLink` nacido delante de él.**
**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.
**19 blocks vivos**: site-header · hero · feature-grid · feature-split · pricing ·
testimonials · faq · stats-band · cta · newsletter · site-footer · banner · team ·
contact · content-section · logo-cloud · article-grid · cookie-consent ·
**app-shell**. Más **una página compuesta**: `/blocks/landing`, con 14 de ellos.
**app-shell**. Más la página compuesta `/blocks/landing`.
**A-95 CERRADA** (la única fila que estaba bloqueada por una pieza inexistente):
con `app-shell` el solape del aviso sobre la cabecera es **0px** y el hit-test
cae en la cabecera, medido. La ficha del ledger lleva las cifras.
---
**A-95 CERRADA** con `app-shell`: solape del aviso sobre la cabecera **0px** y
hit-test dentro de la cabecera, medido (antes: 49px).
## Por dónde entrar mañana
**Sigue pendiente lo que TÚ dejaste pedido: «repasar cada bloque»** — un repaso
block a block con el tier de sitio completo. **No hay ficha escrita**: su forma
se acuerda antes de empezar (qué orden, qué se mira, y si lo que salga va al
ledger o al README de cada block). Pregunta antes de arrancar.
### 1 · PRIMERO: arreglar **A-111** — el landmark anónimo de `NavigationMenu`
**La ficha completa, con mecanismo, evidencia medida y la forma propuesta en
cuatro pasos, está en `AUDIT-blocks-ledger.md` §A-111. Léela antes de tocar
nada.** Resumen para decidir si entras por ahí:
El `aria-label` del consumidor se reenvía al `<ul>` de la parte `List` y el
`<nav>` —que es el landmark— se queda SIN NOMBRE. El morfo lo declara así a
propósito («the root `<nav>` delegates its name to the list it wraps»), pero un
`<ul>` no es una región: quien navega por landmarks ve el `<nav>` anónimo. Con
UNA navegación en la página es admisible —y por eso no había salido en tres
semanas de tier—; con dos ámbitos incumple la APG, y un shell de aplicación
monta dos por definición.
Medido en `/blocks/app-shell/preview`:
`navigation: ['Navegación principal', null, 'Migas de pan']`.
**Toca morfo + soma del `navigation-menu`**, así que ⚠️ **mira primero si la
sesión del `sidebar` sigue viva en `morfo/`** — el árbol es compartido y anoche
tenía tocados `morfo/components/sidebar.ts`, `sema/components/sidebar.ts` y
`soma/components/sidebar/sidebar-provider.svelte.ts`.
**Y ahora hay una segunda puerta, abierta ayer: F3 sigue.** El orden del plan es
`app-shell` (HECHO) → luego, por coste creciente, `error-page` → `user-menu` →
`notifications` → `settings` → `auth` → `dashboard` → `wizard` → `data-table` y
`kanban`. ⚠️ **Recomendación registrada, sin firmar por ti**: subir **`auth`** al
segundo puesto — es lo que a un producto real le falta de verdad, y su ficha ya
tiene anotado lo que hay que resolver en su fase 0 (cuatro vistas frente a las
seis del dominio; y dos hilos de canon abiertos que la esperan: `Form`/SIUM con
`progressive` no expone mensajes, y `ProofOfHuman` escribe su propio `status`).
### 2 · Las otras cuatro filas que dejó el `app-shell` (ledger, todas nuevas)
| Fila | Qué | Estado |
| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
| **A-112** | `Toolbar.Button` tipa contra el `ButtonProps` de SOMA, así que no acepta `variant`/`color`: un cluster no puede decir cuál es su acción principal. Dos salidas en la ficha, hay que elegir una | CONFIRMADO |
| **A-113** | La foundation emite los estilos semánticos y no los aplica a ningún elemento — Times New Roman en los 19 previews del tier | **ARREGLADO** en el reset del arnés; queda la pregunta de canon |
| **A-114** | `Sidebar.Inset` impone `overflow: auto`, y un ancestro con `overflow` se lleva el `position: sticky` de dentro | CONFIRMADO |
| **A-115** | No existe `description-list` y el panel de detalle del shell es el «primer detail-view real» que su ficha F5 pone como disparador | CONFIRMADO |
### 3 · Y sigue pendiente lo que tú dejaste pedido
**«Repasar cada bloque»** — un repaso block a block. **No hay ficha escrita**:
su forma se acuerda antes de empezar (qué orden, qué se mira, y si lo que salga
va al ledger o al README de cada block). Pregunta antes de arrancar.
Y **F3 sigue**: el orden del plan es `app-shell` (HECHO) → `error-page` →
`user-menu` → `notifications` → `settings` → `auth` → `dashboard` → `wizard`
→ `data-table` y `kanban`. ⚠️ Recomendación registrada **sin firmar**: subir
`auth` al segundo puesto. Y ojo — `user-menu` (F3.6) y `notifications` (F3.7)
son justo las piezas que le faltan a la barra del shell, así que hacerlas
seguidas tiene un consumidor real esperando.
### Lo que dejó la sesión del `app-shell` (2026-08-19)
Tres commits: `docs(blocks)` (la fase 0), `uix(skip-link)` (canon nuevo) y
`blocks(app-shell)`.
Ocho commits, de `9fd54c80f` a `edf0639ee`. **Sin push.**
- **Fase 0 firmada, en `PLAN-blocks.md` §F3.1** — Q1 el block NO cablea
servicios (la integración del ecosistema se demuestra en una app de
referencia, no dentro del block) · Q2 dos modelos de scroll por prop · Q3 la
cabecera dentro del inset (el provider del `Sidebar` ES la fila flex) · Q4
- **Fase 0 firmada** en `PLAN-blocks.md` §F3.1 — Q1 el block NO cablea servicios
· Q2 dos modelos de scroll por prop · Q3 la cabecera dentro del inset · Q4
canon `SkipLink` + uno por región montada.
- **`SkipLink` (canon)** — eidos-native, 1 parte, 0 eventos. Posee sus palabras
por ROL de landmark; peldaño propio de z (950, el más alto de la escalera
estática, porque un empate lo rompe el orden del DOM y este enlace es el
primer elemento).
- **Cuatro trampas de layout medidas**, todas escritas en el README del block:
- **`SkipLink` (canon nuevo)** — eidos-native, 1 parte, 0 eventos, posee sus
palabras por ROL de landmark, peldaño de z propio (950).
- **LOS DOS ÁMBITOS, y es la corrección de fondo del día**: la barra lleva la
APLICACIÓN (su menú general, buscar, avisos, cuenta) y no se mueve; el RAÍL
lleva el CONTEXTO (este proyecto, esta tabla) y cambia entero al cambiar de
contexto. Yo había escrito que un menú en la barra sería «una segunda
navegación»: es al revés, dos navegaciones de ámbito distinto son lo correcto
(Atlassian `TopNav`+`SideNav`, Polaris `TopBar`+`Navigation`). El rastro va en
la cabecera de la PÁGINA, no en la barra.
- **Cuatro trampas de layout medidas**, escritas en el README del block:
`minHeight` es un suelo y no un techo · un grid que sólo declara filas tiene
una columna implícita `auto` que se encoge · `Box` declara
`flex-grow/shrink/basis` y pisa al `flex` de la receta de quien lo envuelve ·
**un ancestro con `overflow` se lleva el `position: sticky` de dentro** (por
eso el shell pone su propia caja en vez de `Sidebar.Inset`).
- **Una avería del ARNÉS, no del block**: los previews del tier llevaban los 8px
de margen por defecto del navegador, así que NINGÚN block se enseñaba a
sangre (`x: 8, w: 1264` a 1280), contra la regla dura del tier — la página
compuesta incluida, cuyo README cita cifras a sangre. Arreglado en
`_lib/reset.css`. ⚠️ **Las medidas de anchura tomadas antes del 2026-08-19
llevan ese sesgo.**
- **Gaps de canon que abrió, anotados en el README del block**: el eje `layout`
del `Sidebar` (provider ≠ fila) para una topbar a todo lo ancho, que pedirá
`docs-shell` · `Sidebar.Inset` debería dejar elegir si es contenedor de
scroll · el `Sidebar` no publica su ancho actual · F21 (los primitivos de
layout no cambian de elemento) obliga a dos declaraciones en línea sobre
`<main>` y `<aside>`.
- **Lo que la fase 0 NO ejecutó y sigue sobre la mesa**: la **app de referencia**
`flex-grow/shrink/basis` y pisa al `flex` de quien lo envuelve · un ancestro
con `overflow` se lleva el `sticky` (A-114).
- ⚠️ **Dos averías del ARNÉS que este block destapó, las dos arregladas**: los
previews llevaban los 8px de margen del navegador (así que NINGÚN block se
enseñaba a sangre: `x: 8, w: 1264` a 1280, la página compuesta incluida) y no
anclaban la tipografía del tema (A-113). **Las medidas de anchura anteriores
al 2026-08-19 llevan el sesgo de los 8px.**
- **La demo se rehizo dos veces, y la lección vale para todo el tier**: primero
estaba escrita a mano (`<div style>`, `16rem` clavado, `font-size` en un
`<strong>`) y luego, ya sin literales, seguía sin usar los componentes que
SIGNIFICAN lo que mostraba. Ahora: `Metrics` para los KPI (con la valencia
desacoplada), `Feed` para bandeja y actividad (`role="feed"` + `article` +
`aria-posinset`), `Toolbar` para los clusters, `NavigationMenu` para el menú
de la aplicación, y la tipografía por los estilos SEMÁNTICOS del tema
(`Text style="label|caption|body"`, `Heading level` + `style`), nunca por un
tamaño elegido a ojo.
- **Lo que NO se ejecutó y sigue sobre la mesa**: la **app de referencia**
(`web/routes/blocks/app/`, `kind: 'page'`) — la primera raíz de composición en
modo attach del repo (`createActiveApp` → `attachActiveUix` → `<Uix>` →
modo **attach** del repo (`createActiveApp` → `attachActiveUix` → `<Uix>` →
`ActiveEidos` con sus fuentes → `createActivePrefsDomProjection` →
`setActiveApp`/`setBus`/`setPermsContext`). Hoy **ningún** shell del repo hace
nada de eso: los siete arrancan `createActiveUix` standalone y cada uno
reescribe a mano su `localStorage` y su `Set<listener>` de modo. Era el tramo
F3 del plan de la sesión y no se llegó.
Detrás, por orden: [§Qué queda, por orden](#qué-queda-por-orden) — las filas
CONFIRMADO del ledger (110 filas; **A-95 pasó a ARREGLADO el 2026-08-19**).
nada de eso: los siete arrancan `createActiveUix` standalone.
- **En manos de otra sesión**: el `commit-select` del `Sidebar.MenuButton` (mudo
hoy, mientras `NavigationMenu.Link` sí emite para el mismo acto). No tocar
`sidebar` en morfo/sema/soma.
## ⚠️ LO PRIMERO: la fuente viva es el LEDGER, no el documento del 2026-08-01

Loading…
Cancel
Save

Powered by TurnKey Linux.