# Inicio rápido de RowTether

## Instalar

Cierra el editor. Copia la carpeta completa de RowTether en la carpeta `Plugins` de tu proyecto C++. Genera los archivos del proyecto y compila el objetivo `Development Editor` con Unreal 5.8 y la cadena C++ compatible con tu instalación. Activa RowTether en **Edit > Plugins**, reinicia y abre **Tools > RowTether**. Solo funciona en el editor de Windows; este módulo de editor no se carga en juegos empaquetados. El plugin solo depende de módulos del motor.

## Revisar

1. Selecciona en el Content Browser las DataTables consumidoras que quieras inspeccionar. Incluye la tabla destino del CSV si vas a comparar una importación.
2. Pulsa **Use selected DataTables**. El panel mostrará exactamente las DataTables seleccionadas; otros tipos de asset no se añaden. Al cambiar la selección, se conservan las reglas de las tablas que permanecen, se eliminan —tras confirmación— las reglas de tablas retiradas y se limpia la selección CSV.
3. Los row handles se detectan automáticamente. Una columna `Name` o `String` solo se considera relación si aparece en un perfil explícito. Carga el perfil JSON después de seleccionar sus tablas origen. Por defecto los row handles son obligatorios; una regla puede marcar la propiedad como nullable. El destino real del handle sigue siendo la autoridad.
4. Para comparar un CSV, elige el destino entre las DataTables seleccionadas y elige un CSV. Puedes hacerlo en cualquier orden; cuando ambos están seleccionados, la comparación comienza automáticamente. Usa **Clear comparison** para volver a las comprobaciones actuales. El candidato se lee, no se importa.
5. **Review tables** inicia una revisión nueva. Puedes cancelar o cerrar el panel para detener la recopilación. RowTether no guarda, renombra, reimporta, repara ni marca como modificadas las tablas. Evita editarlas durante la revisión: los cambios detectados hacen fallar la revisión y bloquean la exportación.
6. Lee el estado y la cobertura antes de interpretar los hallazgos. Haz doble clic en un hallazgo para abrir la DataTable origen y localiza la fila y la propiedad indicadas.
7. **Export report...** crea una carpeta de ejecución nueva dentro de la carpeta elegida. Los resultados incompletos requieren la acción separada **Export incomplete report**. Nunca se reemplaza un destino de ejecución duplicado.

## Perfil schema 1

Guarda los perfiles compartidos en `Config/RowTether` del proyecto. El plugin no crea esa carpeta al iniciarse. **Save profile as** solo escribe cuando se solicita explícitamente y rechaza archivos existentes. Los resultados pueden guardarse en `Saved/RowTether`; son locales y no se transmiten automáticamente.

```json
{
  "schemaVersion": 1,
  "maxRecords": 10000,
  "rules": [
    {
      "tablePath": "/Game/RowTetherExample/Consumers.Consumers",
      "propertyPath": "Link",
      "targetTablePath": "",
      "nullable": true
    }
  ]
}
```

Todos los campos de una regla son obligatorios y la tabla origen debe estar seleccionada. Las asignaciones duplicadas, rutas anidadas de propiedades y versiones futuras se rechazan antes de recopilar datos. En estructuras propias usa el nombre de propiedad escrito en Unreal. No se infieren claves foráneas desde propiedades `Name` arbitrarias. Se inspeccionan arrays y sets superiores de row handles; referencias anidadas, maps, arrays estáticos y contenedores no compatibles no se inspeccionan y producen `Partial` con un motivo.

## Proyecto de pruebas separado

El plugin comercial no incluye tablas de ejemplo, carpeta `Content` ni directorio `Examples`. Los datos de formación pertenecen a un proyecto de pruebas separado. En ese proyecto, abre `Content/RowTetherExample`, selecciona `Targets` y `Consumers`, carga `Fixtures/BundledHandles.json` y pulsa **Review tables**: deben aparecer dos errores actuales. Selecciona la DataTable destino `Targets` y elige `Fixtures/Candidate.csv`: cuando ambos están seleccionados, la comparación comienza automáticamente y deben aparecer dos avisos adicionales para C1 y C2. Para el ejemplo limpio, selecciona `Targets` y `ConsumersValid`, carga `Fixtures/BundledValid.json` y limpia el destino candidato.

## Ejemplos CSV reproducibles

Los fixtures descargables contienen entradas CSV y JSON, no assets instalados automáticamente. Crea una estructura propia con una propiedad `Label` de tipo `String` y otra con una propiedad `Link` de tipo `Data Table Row Handle`. Crea `Targets` con la primera estructura y `Consumers` con la segunda bajo `/Game/RowTetherExample`. Importa `Targets.csv` y después `Consumers.csv`. Tras seleccionar ambas tablas, carga `nullable-handles.json`.

Las tablas tienen diez filas cada una. C1 y C2 usan T1, C3 usa T2, C4 usa una fila inexistente, C5 tiene destino nulo y clave T1, y C6-C10 tienen handles opcionales vacíos. Deben aparecer dos errores actuales. `Candidate.csv` contiene T2-T10 y debe producir exactamente dos avisos adicionales para C1 y C2. `ConsumersValid.csv` es el ejemplo corregido: todos los handles no vacíos resuelven y no debe haber errores actuales. Importa estos archivos solo en las tablas nuevas de ejemplo, nunca en tablas de producción. `Candidate.csv` se elige en RowTether; no se importa.

Para una columna `Name`, crea la misma estructura con `Link` de tipo `Name` y usa una regla que apunte a `Targets`. Los valores vacíos o `None` son válidos cuando la relación es opcional; las claves no vacías deben resolver.

## Contrato CSV

Se acepta CSV UTF-8 con comas, campos entrecomillados y comillas duplicadas escapadas. La primera columna debe ser `Name`, la columna exportada `---` o el `ImportKeyField` configurado de la tabla. Las demás cabeceras deben cubrir exactamente las columnas de la tabla, sin distinguir mayúsculas, y no puede haber cabeceras ni claves `FName` duplicadas. La estructura de comillas y el número de campos deben ser válidos. El impacto de eliminación se calcula solo con identidades de fila y cabeceras de esquema; no se ejecutan hooks arbitrarios de importación. Un cambio solo de mayúsculas es informativo porque la identidad `FName` de Unreal no distingue mayúsculas. La fuente original no se modifica, incluso si el candidato es inválido.

## Cobertura y límites

`Completed` significa que se procesaron las relaciones declaradas y compatibles dentro del ámbito de consumidores seleccionado. No significa que se haya buscado todo el proyecto ni que no existan hallazgos. `Partial` indica límites, propiedades no compatibles o un candidato inválido. `Cancelled` descarta el snapshot incompleto: ejecuta otra revisión antes de tomar una decisión. `NoApplicableData` describe una entrada vacía y `Failed` indica que la petición no pudo ejecutarse o que el origen cambió durante la recopilación; los resultados fallidos descartan los hallazgos inconsistentes y no se pueden exportar.

El presupuesto predeterminado es de 10.000 filas consumidoras y como máximo 10.000 relaciones capturadas. El perfil puede fijar entre 1 y 100.000. Los índices de claves destino están limitados a 100.000 por tabla; destinos demasiado grandes o no utilizables quedan sin resolver con cobertura `Partial`, no se convierten en fallos falsos de fila ausente. El panel limita el CSV a 16 MiB, el JSON de perfil a 1 MiB y las peticiones a 1.000 tablas y reglas. La recopilación se ejecuta en pequeños lotes del hilo de juego. Por encima de 256 relaciones capturadas, la evaluación usa un snapshot sin `UObject` en un worker; la carga de assets y la exportación siguen usando el hilo del editor. La cancelación descarta el trabajo incompleto.

## Códigos estables

| Código | Significado | Siguiente paso |
|---|---|---|
| `ROWTETHER-TABLE-MISSING` | Falta o no está disponible la DataTable destino | Revisa la ruta declarada o el row handle |
| `ROWTETHER-ROW-MISSING` | Existe el destino, pero falta la clave | Revisa escritura y datos destino |
| `ROWTETHER-REFERENCE-INVALID` | La clave no puede representarse en Unreal | Acorta la clave y revisa el campo origen |
| `ROWTETHER-REFERENCE-EMPTY` | La clave obligatoria está vacía o es `None` | Añade una clave o declara nullable la relación |
| `ROWTETHER-GAME-RULE` | Una regla de juego declarada falla o no se puede evaluar | Comprueba el resultado, la aplicabilidad y los campos obligatorios |
| `ROWTETHER-ROW-REMOVED` | El candidato elimina una fila usada por este consumidor | Revisa el consumidor antes de importar |
| `ROWTETHER-CSV-INVALID` | La sintaxis, esquema o clave del candidato es inválida o ambigua | Corrige el CSV; el impacto no se marca como completo |
| `ROWTETHER-CASE-CHANGE` | Cambia la escritura, pero no la identidad `FName` | Es informativo; no es una fila eliminada |

## Exportación y soporte local

El esquema JSON incluye versiones del plugin y del motor, identidad de ejecución, huellas de origen y perfil, cobertura, omisiones, relaciones capturadas y evidencia de hallazgos. Las huellas identifican semántica capturada, no son firmas de seguridad. Entradas idénticas producen un orden semántico estable, aunque los IDs de ejecución cambian. CSV protege prefijos de fórmulas de hoja de cálculo; HTML escapa el texto de origen y no contiene scripts. JSON es el informe tipado de autoridad; CSV y HTML resumen los hallazgos.

Las exportaciones se preparan junto a la carpeta de ejecución final, se vuelven a leer y se publican mediante un cambio de nombre en el mismo volumen. Se conservan las exportaciones existentes. Se rechazan enlaces de filesystem, reparse points y traversal en la raíz de salida. Usa una carpeta local normal si un placeholder de nube o junction es rechazado. Tras un fallo solo se limpian temporales actuales. Revisa el informe antes de compartirlo: las rutas, nombres y valores pueden contener información del proyecto. No hay subida automática, telemetría, listener ni integración con Telegram.

Fuera de alcance: reescritura o renombrado automático, búsquedas arbitrarias de `FName`, relaciones inferidas, análisis completo de Blueprints, juegos empaquetados y combinaciones de motor o plataforma no verificadas.

## Flujos adicionales

**Review this table** en el editor de una DataTable ejecuta una revisión de una sola tabla con las políticas y reglas activas. No compara un CSV ni sustituye la selección general del panel. Para perfiles Name/String, reglas de juego y el flujo completo para resolver hallazgos, consulta las [guías online de RowTether](/es/docs/rowtether/).

Para resolver un hallazgo, lee primero su código y cobertura, corrige la fila de origen, el destino, el perfil o la regla previstos y ejecuta una revisión nueva. Desactivar una regla o quitar una tabla puede ocultar un hallazgo; no demuestra que los datos sean correctos. Consulta [Resolver un hallazgo](/es/docs/rowtether/resolve-finding).

El flujo opcional con IA requiere el paquete distribuido por separado `RowTetherTools`, los plugins Unreal MCP y Toolset Registry de Epic y un cliente compatible. Sigue [Conectar RowTether con IA](/es/docs/rowtether/ai-setup). Si el paquete no llegó con la entrega de tu proyecto, contacta con soporte; no uses una copia no documentada.

## Contacto

Soporte: support@nomomicantpause.com. Incluye versiones, código de hallazgo y una reproducción mínima. Revisa cualquier información del proyecto antes de compartirla.
