OpenADS — Plan de ejecución (2026-06-27)

Hoja de ruta acordada tras la revisión del proyecto. Los ítems marcados con [x] están hechos en esta sesión o antes; el resto sigue el orden de prioridad.

Backlog técnico detallado: TODO.md en la raíz del repo.


Fase 0 — Endurecer lo desplegado (hecho v1.5.1)

  • Path jail en Connect remoto (resolve_under_root)
  • LockMgr: unlock anidado coherente con refcount
  • ABI remoto: AdsGetMemoDataType, AdsSetStringW, AdsSetJulian, AdsSetFieldRaw
  • TLS: verificación por defecto; OPENADS_TLS_INSECURE=1 para dev
  • Límite kMaxWireFields en cliente wire
  • creds_mu_ thread-safe en servidor
  • Actualizar docs/known-issues.md y sección VFP en TODO.md

Fase 1 — Confianza en CI (casi listo)

1.1 Harbour smoke en CI Windows [x] local / [ ] CI

  • tools/scripts/run_harbour_smoke.ps1 — script portable (fix PS5.1: sin em-dash)
  • tools/scripts/bootstrap_harbour_ci.ps1 — instala Harbour en caché CI
  • tests/smoke/harbour/smoke.hbp — proyecto hbmk2
  • Job harbour-smoke en .github/workflows/ci.yml
  • Verificado local: EXIT=0 con C:\harbour + build\default
  • Calentar caché Harbour en primer run de CI (puede tardar ~45-90 min una vez)
  • Opcional: self-hosted runner con C:\harbour preinstalado

Criterio de éxito: smoke.exe sale con código 0 en windows-2022 tras cada push a main.

1.2 Remote AdsSetRelation [x] core / [ ] extras

  • Estado de relaciones por ADSHANDLE (local + tcp://)
  • active_index_id en RemoteTable para seek de hijo
  • apply_relations_for_handle() tras nav remota (Skip / Goto*)
  • Test unitario loopback tcp://127.0.0.1 (4/4 tests, 127 aserciones)
  • Fix firma AdsOpenTable en test wire (9 args, no 5)
  • AdsSetScopedRelation remoto con scopes (mismo motor; seek scoped ya en código)
  • Test Harbour con SET RELATION sobre servidor remoto
  • Caso local parent → remote child (hoy cubierto remote→remote)

Criterio de éxito: tests abi_set_relation_test verdes incl. caso wire — cumplido local.


Fase 2 — Cerrar gaps remotos — cerrada v1.5.1

# Tarea Estado
2.1 AdsAggregate / AdsFetchWhere en ABI local [x]
2.2 AdsSetRecord remoto [x]
2.3 AdsCustomizeAOF remoto [x]
2.4 Fixtures ADT/ADI en repo + tests CI sin skip [x]
2.5 VFP header 0x32 (autoinc + NULL juntos) + test [x]

Plus write (post-Fase 2, mismo release): SQLite y MSSQL nativo — write navegacional (AdsAppendRecord / AdsSetString / AdsWriteRecord / AdsDeleteRecord).


Fase 3 — Decisión Data Dictionary (estratégico)

Decisión recomendada: DD propio OpenADS (objetos + JSON en .am) como formato oficial; import SAP una sola vez vía tools/import_dd; no perseguir round-trip binario SAP.

# Tarea  
3.1 Documento de diseño DD v2 (objetos, permisos bitmask, caché en servidor) [x] docs/dd-v2-design.md
3.2 Migrar import_dd al formato v2  
3.3 Suite de tests DD v2 (usuarios, grupos, RI, triggers, permisos efectivos)  
3.4 DaWeb: leer solo DD v2; dejar de depender de blobs SAP  

No hacer ahora: decodificar blobs de permisos SAP sin instancia ADS 11.x viva.


Fase 4 — Compatibilidad SAP (solo si hay caso de uso)

# Tarea Bloqueador
4.1 Matriz rddtst vs ADS 11.x/12.x Instancia SAP + wire SAP
4.2 SapWireTransport (ads:// / sap://) Clean-room wire spec
4.3 docs/ace-coverage.md con divergencias medidas 4.1

Fase 5 — Producto y docs

# Tarea Estado
5.1 Release v1.5.1 con changelog [x]
5.2 DDL ALTER/DROP — enganchar hooks backend (ya parseado en v1.5.0) [x]
5.3 DaWeb: RI dropdown, grupos de usuario, grupos DB:Public [ ]
5.4 Harbour smoke Linux en CI (después de Windows estable) [ ]
5.5 README: openace64.dll rename, bindings/php vs php_ext [ ]

Orden de trabajo inmediato (próxima sesión)

  1. Fase 3.2 — import_dd escribe formato nativo v2 (ver docs/dd-v2-design.md §8)
  2. Fase 3.3 — suite de tests DD v2
  3. CI: verificar harbour-smoke verde tras fix bootstrap (win-make, no CMake) + x86 forward-decl
  4. Test live MSSQL con OPENADS_TEST_MSSQL_CONNSTR (read padding + write)

Referencias

  • Plan original de revisión: conversación 2026-06-27
  • TODO.md — backlog técnico detallado (DD, VFP, SQL…)
  • roadmap.txt — hitos históricos SAP vs OpenADS
  • docs/known-issues.md — estado v1.5.1+

This site uses Just the Docs, a documentation theme for Jekyll.