La ficha de Pricing.Compare reservaba dos decisiones y ahora las tiene, resueltas
por doctrina y no por gusto: los planes los declara el createTable del app y la
parte lo compone —B-5 admite datos sólo donde el canon compuesto ya es
data-driven, y Table lo es—, y en móvil la tabla scrollea con la columna de
características fijada, porque el canon ya da el pinning.
Eso último es una corrección de mi propia fase 0: el README de Table lo lista
como gap diferido y es falso a fecha de hoy — el engine, soma y el recipe lo
implementan los tres. Me apoyé en el README y di un dato equivocado; el primer
paso del plan lo corrige donde vive.
Seis pasos con su verificación cada uno, y los riesgos del árbol compartido
escritos para el agente que lo ejecute.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ -736,6 +736,86 @@ términos, y el primero es el que más trabajo hace:
| **V5** | `cta` | split-with-media | tercer **`layout="split"`** + slot `media` (el nombre que ya usa `hero`); el `Mockup` existe. Es suelo: el dossier la lista | bajo |
| **V8** | `pricing` | single-price | ✅ **HECHA 2026-08-17 — y NO era gratis.** Medido: la fila es `auto-fill`, así que RESERVA las pistas que caben aunque nadie las ocupe → un plan solo daba 315px pegados al borde con 677px de vacío, y `columns={1}` lo cambiaba por una card de 992px. Resuelto con **`.Plans maxWidth`** (tope de fila, centrado, reenviado nombrado por A-94); el número lo pone el app. Detalle: README del block §«The row cap» | ~0 → bajo |
#### Plan de ejecución de V1 — `Pricing.Compare` (firmado 2026-08-17)
**Fase 0 hecha, y con una corrección propia**: el README de `Table` lista el
pinning de columnas como gap diferido, y **es falso a fecha de hoy** — el engine
tiene `enablePinning` por columna e `initialColumnPinning`, soma escribe
`position: sticky` con su offset (`buildColumnStyle`) y el recipe pinta
`[data-pinned]` con un borde que revela lo que hay detrás. La primera versión de
esta fase 0 se apoyó en el README y dio un dato equivocado; el paso 1 lo corrige.
**Las dos decisiones que la ficha reservaba, resueltas por doctrina:**
- **(a) Quién declara los planes → el `createTable` del app, y `.Compare` lo
COMPONE.** B-5 admite `items={…}` «sólo donde el canon compuesto ya es
data-driven», y `Table` lo es: exige la instancia de `createTable`. Así que
`.Compare` NO inventa un formato de matriz propio ni lo traduce por dentro: el
app crea la tabla como en cualquier otra del ecosistema y `.Compare` la recibe.
`.Plans` y `.Compare` CONVIVEN (las refs muestran ambos), alimentados por el
MISMO array del app — sin registro por contexto (acoplamiento por orden de
montaje) y sin sustitución. Descartadas: matriz propia (viola B-5 y duplica el
engine) · registro de `.Plan` en contexto (acopla dos partes que no se hablan).
- **(b) Móvil → scroll horizontal con la columna de características FIJADA.**
Es lo que hacen las referencias y el canon ya lo da (`enablePinning` +