@ -200,6 +200,38 @@ Spinner `bars`/`dots`/`ring`, Button `'plain'`) viven en cada
match the declared type union` valida bidireccionalmente que CSS
selectors y type unions coincidan.
## Words extension system — estado y siguiente sprint
**Hecho** (commits `1805b081` skeleton + `088d31ec` F2.3a):
- F1.1 fix evento `contact-focus` molesto (transition-only + popover scope)
- F1.2 declarar 9 `data-*` hardcoded en morfo
- F1.3 i18n keys kebab-case
- F1.4 canonizar 9 event names a forma `{family}-{verb}-{variant}`
- F1.5 toolbarLayout `grouped|inline` con ResponsiveProp
- F2.1 audit + design de `WordsExtension` interface (9 hooks)
- F2.2 skeleton: `extension-types.ts` + `extension-registry.ts` con 14 tests verdes
- F2.3a tipos de table movidos a `extensions/table/types.ts` con re-export en `engine/document.ts`
**Siguiente sprint dedicado — F2.3b-j** (migración completa de table):
Orden propuesto (incremental, commit por sub-paso, tests verdes en cada uno):
1. **F2.3b** — factories de table (createTable, createTableRow, createTableCell) → `extensions/table/factories.ts`
2. **F2.3c** — serialize-html.ts table-specific code → `extensions/table/serialize-html.ts` (~150 LoC)
3. **F2.3d** — serialize-markdown.ts pipe-table code → `extensions/table/serialize-markdown.ts` (~50 LoC)
4. **F2.3e** — render.ts table-specific code → `extensions/table/render.ts` (~100 LoC)
5. **F2.3f** — path.ts deep-path helpers → `extensions/table/path.ts` (~80 LoC)
6. **F2.3g** — normalize.ts table normalization → `extensions/table/normalize.ts` (~70 LoC)
7. **F2.3h** — operations.ts insertTable / table-row / table-cell / etc. → `extensions/table/operations.ts` (~400-500 LoC, lo más entrelazado)
8. **F2.3i** — wire `tableExtension: WordsExtension` al registry desde la construction del engine. El engine consulta el registry para rutas table; fallback al hardcoded path si no se encuentra.
9. **F2.3j** — verify: engine.test.ts 129/129 + contracts + visual smoke
Después F2.4 (code-block, similar plan), F2.5 (docs `EXTENSIONS.md` ), F2.6 (verify final).
**Riesgos del F2.3 completo**:
- operations.ts es 2620 líneas con table refs muy entrelazadas con el normalize cascade
- Importante: NO mover operations sin haber cabledado el registry primero (sino tests del motor rompen)
- Sugerencia: hacer F2.3i (wire registry con stub table extension vacía) ANTES de F2.3h, así operations.ts se reescribe contra una API estable
## Cómo retomar mañana
1. **Probar toggle-group en navegador** :