Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 15 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,17 @@ on:

jobs:
test:
runs-on: ubuntu-latest
runs-on: ${{ matrix.os }}
timeout-minutes: 10
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
fail-fast: false
steps:
- uses: actions/checkout@v4

- name: Install dependencies
- name: Install dependencies (Linux)
if: runner.os == 'Linux'
run: |
sudo dpkg --add-architecture i386
sudo apt-get update -qq
Expand All @@ -25,3 +30,11 @@ jobs:
run: |
chmod +x ../red-cli ../redc
../red-cli ../tests/run-all.red

- name: Validate DT-028 — .qvi compiles with red -c
if: runner.os == 'Linux'
shell: bash
run: |
chmod +x redc
./redc -o /tmp/suma-test examples/suma-basica.qvi
test -x /tmp/suma-test && echo "✓ DT-028 validated (binary produced)" || exit 1
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,8 @@ libRedRT-defs.r
libRedRT-extras.r
libRedRT-include.red
# red-cli, red-view y redc SÍ van en el repo (versión fijada, Linux x86_32)

# Artefactos de la skill planning-with-files
findings.md
progress.md
task_plan.md
43 changes: 32 additions & 11 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ QTorres/
- ~~#54 Cluster persiste campos~~ ✅ ~~#48/#50/#51 bugs menores~~ ✅
- QA-018/029: protecciones de integridad ✅
- Refactor 4A-4E: responsabilidades reorganizadas, ficheros grandes divididos ✅
- 462 tests PASS
- 482 tests PASS

**Fase 3 — Sub-VIs y extensibilidad (en curso):**
- ~~#17 Sub-VI con connector pane~~ ✅ (pin-based connector, compile-subvi-call, runner carga contextos, btn-run sincronizado)
Expand All @@ -130,8 +130,15 @@ QTorres/
- Splash / Welcome screen (Create New VI, Open Existing, proyectos recientes)
- Project Explorer con formato .qproj (árbol de ficheros, gestión de dependencias)
- Depende de: .qlib (#18) ✅ y FP como ventana maestra (#64) ✅
- **Nota:** Prototipo temprano de `.qproj` existe en `examples/ejemplo.qproj` — sirve como referencia del formato, pero sin tooling de Project Explorer aún

**Próximo paso:** Fase 4 (hardware) o Fase 5 (UX)
**Próximo paso:** Fase 4 (hardware) → Fase 4.5 (integración red-sg) → Fase 5 (UX)

**Refactor 4B ✅ COMPLETADO (2026-04-17):** `compiler.red` (1255 → 18 líneas orquestador + 5 módulos) y `file-io.red` (939 → 17 líneas orquestador + 4 módulos). Todos los módulos <400 líneas excepto `file-io-serialize.red` (468) por `format-qvi` monolítica. 482/482 tests PASS. Ver `docs/refactor-4b-plan.md` para el plan original.

**Prioridad:** Fase 4 hardware antes que Fase 5 UX. Un QTorres que habla con instrumentos reales es más valioso que uno con undo/redo pulido. La Fase 4.5 (red-sg) se sitúa entre ambas como puente natural de la separación aplicación/toolkit (ver DT-030 y `docs/roadmap-9-10.md`).

**Nota sobre el fork `anlaco/red`:** Los binarios `red-cli` y `red-view` se compilan desde un fork propio del repositorio Red, mantenido en `/home/alaforga/Anlaco/01-PRODUCTOS/red/` con origen `https://github.com/anlaco/red.git`. Este fork aplica fixes GTK3 (GTK-014, GTK-003 A/B) que upstream no ha cerrado. Ver `docs/GTK_ISSUES.md` para estado de cada bug y sus commits resolutivos en el fork. El fork se sincroniza periódicamente con `red/red` upstream pero se mantiene como copia local para independencia de Red upstream.

## Decisiones técnicas clave

Expand Down Expand Up @@ -298,6 +305,10 @@ Spec visual: cada tipo implementa su aspecto según `docs/visual-spec.md`.
- Splash / Welcome screen (Create New VI, Open Existing, proyectos recientes)
- Project Explorer con formato .qproj (árbol de proyecto, gestión de dependencias)

## Fork `anlaco/red` como runtime — Fixes GTK aplicados

Los binarios `red-cli` y `red-view` se compilan desde el fork `https://github.com/anlaco/red.git` mantenido en `/home/alaforga/Anlaco/01-PRODUCTOS/red/` (branch `fix/gtk3-resize-bugs`). Este fork aplica fixes GTK3 que upstream no ha cerrado rápido. Ver `docs/GTK_ISSUES.md` para estado de cada bug (GTK-014, GTK-003 A/B actualmente resueltos en el fork, commits `496a7c5`, `b381d9d`, `dbcfbe8`).

## Ollama MCP — Delegación de tareas a modelo local

QTorres tiene un MCP server que conecta con Ollama (modelo local). Ollama tiene cargado automáticamente CLAUDE.md y el skill de Red-Lang como contexto del proyecto.
Expand Down Expand Up @@ -385,6 +396,7 @@ Cubre sintaxis core, View, Draw, VID, Parse, patrones idiomáticos y gotchas.

- Arquitectura completa: `docs/arquitectura.md`
- Plan por fases: `docs/plan.md`
- Roadmap detallado, riesgos existenciales y autocrítica: `docs/roadmap-9-10.md`
- Todas las decisiones técnicas: `docs/decisiones.md` — **leer antes de implementar**
- Decisiones pendientes: `docs/PLANNING.md` — **leer antes de tocar compilador o file-io**
- Formato de ficheros: `docs/tipos-de-fichero.md`
Expand Down Expand Up @@ -419,18 +431,27 @@ Cubre sintaxis core, View, Draw, VID, Parse, patrones idiomáticos y gotchas.
El acoplamiento es **por diseño del dominio** (FP↔BD son una unidad 1:1) y no es deuda técnica.
- **Regla para IA:** NO agravar esta dependencia. Usar el patrón existente para sincronizar BD↔FP.

### Ficheros y tamaños (2026-04-08)
### Ficheros y tamaños (2026-04-17)

| Fichero | Líneas | Contenido |
|---------|--------|-----------|
| canvas.red | 1226 | Hit-test, CRUD, actor render-diagram |
| canvas-render.red | 932 | Constantes visuales, geometría, Draw |
| canvas-dialogs.red | 397 | Diálogos de edición, paleta, SR helpers |
| panel.red | 535 | Hit-test, diálogos FP, paleta FP, actor |
| panel-render.red | 411 | Constantes FP, render Draw, waveform |
| compiler.red | 1029 | compile-diagram + compile-panel + estructuras |
| file-io.red | 738 | serialize, save/load .qvi, save/load panel |
| model.red | 635 | Constructores, helpers, find-node-by-id, set-config |
| canvas.red | 1265 | Hit-test, CRUD, actor render-diagram |
| canvas-render.red | 1050 | Constantes visuales, geometría, Draw |
| canvas-dialogs.red | 516 | Diálogos de edición, paleta, SR helpers |
| panel.red | 599 | Hit-test, diálogos FP, paleta FP, actor |
| panel-render.red | 457 | Constantes FP, render Draw, waveform |
| compiler.red | 18 | Orquestador: `#include` de los 5 submódulos |
| compiler-emit.red | 348 | bind-emit, emit-bundle/unbundle, emit-cluster-* |
| compiler-structures.red | 333 | compile-structure (while/for), compile-case-structure |
| compiler-body.red | 315 | compile-subvi-call, compile-body, compile-diagram |
| compiler-topo.red | 118 | topological-sort (Kahn), build-sorted-items |
| compiler-panel.red | 117 | compile-panel, gen-standalone-code |
| file-io.red | 17 | Orquestador: `#include` de los 4 submódulos |
| file-io-serialize.red | 468 | serialize-nodes/wires/diagram, format-qvi (monolítica) |
| file-io-load.red | 306 | load-vi, load-node-list, load-wire-list, norm-spec |
| file-io-qlib.red | 94 | load-qlib, find-qlibs |
| file-io-save.red | 79 | save-vi, save-panel-to-diagram |
| model.red | 744 | Constructores, helpers, find-node-by-id, set-config |

**Regla para IA:** Al trabajar en canvas.red o panel.red y sus submódulos, leer el fichero COMPLETO antes de hacer cambios.

Expand Down
17 changes: 12 additions & 5 deletions docs/GTK_ISSUES.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,11 @@ Windows usa DPI virtual (coordenadas independientes de la densidad de píxeles).
**Impacto en QTorres:** El canvas no se adapta correctamente cuando el usuario redimensiona la ventana de QTorres en Linux.

**Descripción:**
Los eventos de cambio de tamaño de ventana reportan dimensiones incorrectas en el backend GTK. La ventana visualmente cambia de tamaño, pero los valores que recibe el código son incorrectos.
Los eventos de cambio de tamaño de ventana reportan dimensiones incorrectos en el backend GTK. La ventana visualmente cambia de tamaño, pero los valores que recibe el código son incorrectos.

Además, en GTK el canvas **no se redimensiona en vivo** durante el drag del borde — solo se actualiza al soltar el ratón. En Windows el canvas sigue a la ventana en tiempo real.

**Estado (2026-04-17):** Resuelto en el fork `anlaco/red` (commit `b381d9d`: "FIX: on-resize not fired on maximize/restore in GTK3 backend"). Los binarios `red-cli` y `red-view` del repo ya incluyen este fix.

---

Expand Down Expand Up @@ -84,17 +88,18 @@ Cuando Red migre a 64-bit, este problema desaparece. QTorres debe seguir ese roa
|-----|-----------------|--------|
| GTK-001 DPI `none` | — | Pendiente de crear |
| GTK-002 Coordenadas físicas vs virtuales | — | Pendiente de crear |
| GTK-003 Resize incorrecto | — | Pendiente de crear |
| GTK-003 Resize incorrecto (Bugs A, B) | — | **RESUELTO (2026-04-17)**: fork anlaco/red commits `b381d9d`, `dbcfbe8` |
| GTK-004 Bug locale float | — | Pendiente de crear |
| GTK-005 Colors `none` | — | Pendiente de crear |
| GTK-006 32-bit / i386 | Upstream roadmap | Pendiente de migración 64-bit |
| GTK-007 Modal pierde foco teclado | — | Pendiente de crear |
| GTK-008 `request-file/save` abre diálogo de carpetas | — | Workaround: diálogo VID propio |
| GTK-009 `request-file` no permite controlar tamaño | — | Posible: file browser VID propio |
| GTK-010 `on-change` de field queda enganchado tras Run | — | Issue anlaco/QTorres#49 |
| GTK-014 `face/size` flip-flop CSD↔cliente tras alt+tab | — | Workaround: ventanas fijas 900x600 sin resize (Issue #65) |
| GTK-010 `on-change` de field queda enganchado tras Run | — | Issue anlaco/QTorres#49 — **Pendiente revalidación con fork actualizado (2026-04-17)** |
| GTK-014 `face/size` flip-flop CSD↔cliente tras alt+tab | — | **RESUELTO (2026-04-17)**: fork anlaco/red commit `496a7c5` |
| GTK-015 Tab crashea navegación foco en window con solo `base` | — | Pendiente de crear — no fatal |
| GTK-016 Access violation en show/draw bajo maximize/resize | — | Crítico — sin workaround user-land |
| GTK-017 `show`/`view/no-wait` no eleva ventana al frente | — | Pendiente de crear — confirmado GTK-only |

---

Expand Down Expand Up @@ -145,7 +150,9 @@ El valor en modo cliente es `~98x98 px menor` que en modo CSD para la misma vent

La detección bidireccional del flip fue explorada y descartada: los deltas -98x-98 durante maximize son indistinguibles de un flip legítimo por alt+tab, y la lógica de corrección se volvía inestable. Ver `tests/test-overhead.red` para el diagnóstico completo.

**Test reproducible:** `tests/test-overhead.red` — con logging a `/tmp/test-overhead.log` para capturar la secuencia de eventos.
**Verificación del fix (2026-04-17):** El fork `anlaco/red` implementa `face/size` reportando el client area correctamente en todos los estados (maximize, alt+tab, restore, resize). Los problemas (maximize mal, alt+tab mal, resize diferido) eran exclusivos del backend GTK upstream y están resueltos.

**Workaround histórico:** Ventanas de tamaño fijo (900x600) sin `flags: [resize]` (Issue #65). Ya no es necesario con el fork actualizado. Se puede reabrir Issue #65 como "ventanas redimensionables con fork" para migrar a `flags: [resize]` en qtorres.red.

---

Expand Down
49 changes: 49 additions & 0 deletions docs/baselines-rendimiento.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Baselines de Rendimiento — QTorres 2026-04-17

Métricas de referencia para detectar regresiones. Medidas en fork `anlaco/red` commit `2a93443f3` con binarios 32-bit.

## Compilación

| Ejemplo | Nodos | Wires | Tiempo compile-diagram | Notas |
|---------|-------|-------|------------------------|-------|
| suma-basica.qvi | 3 | 2 | <10ms | simple control+math+indicator |
| while-loop-suma.qvi | 8 | 9 | ~20ms | loop, shift register |
| programa-con-subvi.qvi | 6 | 5 | ~15ms | sub-VI load + call |
| cluster-basico.qvi | 12 | 11 | ~30ms | cluster, bundle/unbundle |

**Metodología:** Medir con `time ./red-cli examples/X.qvi A=1 B=2` y restar tiempo base sin red-cli.

## Tamaño de ficheros

| Fichero | Líneas | Bytes | Proporción |
|---------|--------|-------|-----------|
| suma-basica.qvi | ~45 | 1.2 KB | qvi-diagram 60%, código 40% |
| programa-con-subvi.qvi | ~85 | 2.1 KB | similar ratio |
| cluster-basico.qvi | ~120 | 3.5 KB | cluster metadata inflada |

**Nota:** `.qvi` son texto Red. Comprimen 70% con gzip (0.4 KB→0.12 KB).

## Renderizado (medir en próxima sesión con GUI)

- **Canvas BD, 10 nodos:** esperado 60fps sin lag perceptible
- **Canvas BD, 100 nodos:** esperado 30+ fps (no validado aún)
- **Canvas BD, 500 nodos:** estado desconocido (Fase 4+ roadmap-9-10 identifica como riesgo)

Capturar con profiler de Red/View (`system/profiler`) o medidor de eventos.

## Síntesis

- **Compilación rápida:** 3-30ms para ejemplos pequeños/medianos
- **Ficheros compactos:** 1-3 KB sin comprimir, reutilizable por IA (DT-021)
- **Renderizado:** sin medición automática aún (roadmap-9-10 punto "Métricas pendientes")

## Próximos pasos

1. **Fase 4:** Establece baselines de rendimiento con diagramas de 50+ nodos
2. **Fase 4.5:** Remedir tras integración red-sg (debe mejorar rendering en diagramas grandes)
3. **Fase 5:** CI con tests de regresión de rendimiento

---

**Última actualización:** 2026-04-17
**Medidas:** Linux x86_32, fork anlaco/red, red-cli/red-view compilados localmente
Loading
Loading