Fase 0 de F3.1 `app-shell`, firmada. La ficha original se escribió antes de que
existieran el canon `Sidebar` y la capa `affix`, y el autor preguntó lo que
había que preguntar: si su alcance tenía delante `active-app` y `active-uix`
enteros. No los tenía.
Las cuatro decisiones que se firman, y lo que las obligó:
- **Q1 — el block NO cablea servicios.** La integración del ecosistema se
demuestra en una app de referencia en app-land, no dentro del block. Un shell
que leyera `App.session` para dibujar el menú de usuario sería una raíz de
composición disfrazada: funcionaría, y metería el arranque del ecosistema
dentro de una pieza que ha de poder caer en cualquier app.
- **Q2 — dos modelos de scroll por prop.** `main` (rejilla 100dvh, sin fixed,
sin números) es lo que cierra A-95 por construcción; `body` es lo que
`docs-shell` necesitará para anclas y TOC pegada.
- **Q3 — cabecera dentro del inset.** El provider del `Sidebar` ES la fila
flex, así que su `Trigger` sólo vive dentro. Una cabecera a todo lo ancho
exigiría partir ese provider: queda como gap de canon para v2.
- **Q4 — canon `skip-link` + uno por región montada** (técnica G124).
De paso, tres cosas que estaban mal escritas y ahora lo dicen:
- El dossier afirmaba que **ninguna referencia trae skip-link** y que era
superación nuestra. Es falso: Polaris lo trae en `Frame` y Atlassian genera
un menú entero. La superación real es generarlos del mismo contrato que
estampa el landmark. Y el icon-rail no es de Mantine (su `collapsed` es
booleano); es de shadcn, AntD, Toolpad y Atlassian. El dossier tampoco miró
nunca el `navigation-system` actual de Atlassian, y el `page-layout` que sí
miró está deprecado.
- **D-BLK.6 ha derivado**: la celda dice «ni prefs ni langs ni eidos» y la
doctrina vigente (`blocks.md` §Services) sancionó dos servicios en julio y
agosto. Queda enmendada con lo que sigue siendo cierto: ningún block CREA ni
cablea servicios.
- **E-5 está desfasada**: `Command.Dialog` ya trae el atajo (`shortcut`,
`mod+k` por defecto). El listener a mano de F4.1 no hay que escribirlo.
- **F3.2 `auth`**: la ficha dice cuatro vistas y el dominio tiene seis. Falta
`update-password`, que no es un lujo — es donde aterriza el enlace de
recuperación, y sin ella el camino de `recover` no termina.
`blocks.md` gana un párrafo «Shells» bajo §Conventions: qué poseen (geometría,
landmarks, alturas) y dónde está la línea (la raíz de composición es de la app).
Verificado en código antes de escribirlo: `Sidebar.Inset` acepta `child`, `Box`
expone minHeight/position/overflow y `Grid` templateRows —la rejilla del shell
no necesita CSS propio—, y `Sticky` expone `root`.
docs:check 0 errores, 0 avisos (635 docs).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>