Goal — la meta que hoy construiremos juntos
Empezamos viendo a dónde vamos. Una extensión Business Central real, funcionando, con MCP API y agente interactivo. Todo construido con ALDC.
Qué os voy a enseñar en estos 7 minutos
Una demo de IncidenciasFrontier, mi extensión de producción real para Business Central. No es un caso de juguete. Es código que funciona, que resuelve un problema operativo, y que comparte el 80% del ADN con lo que vosotros vais a construir en los próximos 45 minutos.
El objetivo es que salgáis de este Step 1 con una imagen mental clara del destino. Luego ya hablamos de cómo se llega.
Extensión AL funcionando
Role Center con cues reales, wizard de setup, ciclo de vida con validaciones, maestro propio de técnicos. Compilada y desplegada en sandbox.
MCP Server con REST API
El mismo proyecto expone un servidor MCP que los agentes de IA pueden consumir. Integración lista para chatbots y copilotos externos.
Agente interactivo en Claude.ai
Una app conversacional dentro de Claude que consulta y crea incidencias. El ciclo completo de "BC ↔ API ↔ Agente" en acción.
Este caso existe porque ALDC funcionó
La primera versión tomó una tarde. No es marketing: es el flujo real del architect → spec → conductor aplicado a un caso de negocio concreto. En los próximos steps vais a replicar este flujo con vuestras manos.
Green field — pipeline ALDC de principio a fin
Empezáis desde cero con el PRD mini v0.1. Ejecutáis architect, spec, conductor y Phase 1 en vuestra máquina. Al final compila y tenéis 11-12 objetos AL generados por vosotros.
El alcance del Sprint 0
En un proyecto real, ALDC puede ejecutar el PRD completo en ~3 horas. Hoy no tenemos 3 horas. Lo que sí vamos a hacer es el patrón que un partner usa en producción: un Sprint 0 mínimo para validar que ALDC ha entendido el dominio antes de soltar el alcance completo.
| Dimensión | v0.1-live (lo que hacemos hoy) | v1.0 completa (referencia) |
|---|---|---|
| Tablas | 4 | 5 (+Cue) |
| TableExtensions | 0 | 1 |
| Enums | 3 | 4 |
| Codeunits | 1 | 2 |
| Pages | 3 | 8 |
| Profile + RoleCenter | — | ✓ |
| Wizard | — | 3 pasos |
| Demo Data | — | idempotente |
| Permission Sets | 2 | 3 |
| TOTAL OBJETOS | ~11 | ~25 |
| TIEMPO ALDC | ~15 min | ~3 h |
Pasos a realizar
Seguid los pasos en orden. Cada paso tiene su prompt para copiar y pegar en Copilot Chat o en el agente que uséis. Si algo se atasca, mirad el "Plan B" de cada paso.
Preparar el workspace
Clonad el repo de ejercicios (workshop-v-valley-aldc-2026-04-EJERCICIOS) y abrid la carpeta 04-greenfield-starter/ en VS Code. Esta carpeta tiene el proyecto AL vacío con app.json ya pre-configurado con prefijo BRI, rango 50900-50929 y las dependencias base.
En la subcarpeta prd/ encontraréis el documento PRD-v0.1-live-mini.md. Ese es el único documento que vais a usar hoy para el green field.
Abrid Copilot Chat lateral (o el cliente de agente que uséis) y verificad que puede leer los ficheros del workspace.
04-greenfield-starter/. Copilot Chat activo. Archivo prd/PRD-v0.1-live-mini.md visible.
Lanzar architect con el PRD mini
Pegad este prompt en Copilot Chat. ALDC leerá el PRD mini, generará la architecture.md y después el spec.md. Al terminar, hará un HITL gate explícito: os pedirá confirmación.
@al-architect Soy el consultor técnico del partner implantador de Barista Incidents para CRONUS USA, Inc. Te paso el documento PRD v0.1-live que encontrarás en `prd/PRD-v0.1-live-mini.md`. Es una versión reducida del PRD completo — un Sprint 0 para validar que ALDC ha entendido el dominio antes de soltarle el alcance completo. Por favor: 1. Lee el PRD completo. 2. Genera `architecture.md` siguiendo tu guía habitual, respetando estrictamente: - Prefijo BRI en TODOS los objetos - Rango IDs 50900-50929 - Publisher Circe Innovation - 4 tablas principales + 3 enums + 1 codeunit + 3 pages + 2 permission sets = ~11 objetos - El campo Assigned To de Incident DEBE tener TableRelation a Support Technician (NO a la tabla User estándar de BC — la PK de User es User Security ID, no User Name) - Los 2 permission sets DEBEN incluir entradas X sobre las 3 pages y el codeunit, no solo tabledata 3. Aplica Skills Evidencing al top del documento: declara las skills que usas (skill-architecture, skill-data-model, skill-permissions). 4. Si detectas ambigüedades en el PRD, documéntalas en una sección "Open Questions" al final. NO rellenes por tu cuenta. 5. Tras generar architecture.md, PARA y pregúntame "¿Apruebas avanzar a al-spec.create?" antes de continuar. 6. Cuando apruebe, genera spec.md con el detalle de implementación completo. Empieza cuando estés listo.
architecture.md y spec.md generados en .github/plans/barista-mini/. El architect te habrá pedido confirmación antes de spec.
04-greenfield-starter/reference/ tenéis reference-architecture.md y reference-spec.md ya generados. Si ALDC diverge mucho o tarda más de 7 minutos, pasad a usar estos archivos de referencia y seguid con el paso 3.
Ejecutar Phase 1 Foundation con el conductor
El conductor es el agente que ejecuta el spec fase por fase. Le decimos que solo haga Phase 1 (Foundation): las 4 tablas + 3 enums + 2 permission sets base. Todavía no la lógica ni las pages.
@al-conductor Tienes architecture.md y spec.md aprobados del proyecto Barista Incidents Sprint 0. Procede con Phase 1 Foundation exclusivamente. No avances a ninguna otra fase hasta que yo apruebe. Objetivos de Phase 1: - Crear las 4 tablas: Incident, Incident Category, Incident Comment, Support Technician - Crear los 3 enums: Status (5 valores), Priority (4 valores), CommentType (3 valores) - Crear los 2 permission sets base con entradas tabledata RIMD/R según el rol Reglas operativas: - Prefijo BRI obligatorio en todos los objetos - IDs en rango 50900-50929 - NoImplicitWith activo, usar Rec. prefix y Enum::"..."::"..." cualificados - Incident Comment debe ser append-only: OnModify y OnDelete con Error - Support Technician con campos Code, Name, Email, Active + keys PK y SK(Active) - Campo Assigned To de Incident con TableRelation a Support Technician WHERE Active=CONST(true). NUNCA usar tabla User. Al finalizar: - Compilar y verificar 0 errores - Generar phase-1-complete.md con el resumen - PARAR y preguntarme "¿Apruebas Phase 2 Core Logic + UI?" antes de continuar Empieza cuando estés listo.
.Table.al + 3 .Enum.al + 2 .PermissionSet.al generados en src/. Compilación limpia. El conductor os pregunta si seguir.
reference-architecture.md explícitamente con "Usa exactamente estos IDs y nombres".
Ejecutar Phase 2 Core Logic + UI
Aprobáis el HITL gate anterior. El conductor genera ahora el codeunit Incident Management + las 3 pages + actualiza los permission sets con entradas X.
Phase 1 aprobada. Procede con Phase 2 Core Logic + UI. Objetivos de Phase 2: - Codeunit BRI Incident Management con los 5 procedures públicos: * CreateIncident (asigna No. vía NoSeriesManagement, Status=New) * UpdateStatus (valida transición, genera comentario StatusChange) * AssignIncident (valida técnico activo, genera comentario Assignment) * AddComment (inserta comentario tipo User) * ValidateStatusTransition (procedure público para consultar validez) - 3 pages: * BRI Incident List (UsageCategory=Lists, StyleExpr en Status y Priority, CardPageId) * BRI Incident Card (3 FastTabs, FactBox Comments, 3 acciones cableadas al codeunit) * BRI Incident Comments Part (ListPart, editable=false, SubPageLink) - Actualizar los 2 permission sets añadiendo entradas X sobre las 3 pages y el codeunit Reglas críticas: - TODA mutación de tabla Incident va vía procedure del codeunit (cero Rec.Modify en actions) - Las acciones de la Card (ChangeStatus, AssignTechnician, AddComment) deben llamar al codeunit REALMENTE. No stubs con Message(). - Para AddComment usa RunModal de una page StandardDialog pequeña si necesitas capturar input del usuario - Matriz de transiciones según spec (no permitir Closed directo desde New) - Compilar limpio Al finalizar: - phase-2-complete.md - Pregúntame si procedo con el commit final Empieza.
AddComment cableado al codeunit. Compila. Extensión lista para publicar.
Guinda — solo si queda tiempo
Si habéis terminado el Sprint 0 con margen, podéis pedir a ALDC que añada UNA sola de estas 3 piezas (elegid la que más os apetezca ver):
Opción G-A · Wizard simple — NavigatePage de 3 pasos para setup de serie numérica.
Opción G-B · Demo Data Generator — Codeunit idempotente que crea 5 categorías + 5 técnicos + 15 incidencias demo.
Opción G-C · Una API Page — API page OData v4 para incidents con GET/POST.
Una sola, no las tres. Quien llegue a este paso que levante la mano y votamos en sala.
Brown field — auditar, diagnosticar, corregir
Imaginad que os llega un proyecto ya construido con 2 issues reportados por el cliente. Hoy aprendéis a usar ALDC + auditoría para detectar causas y aplicar correcciones.
El cliente CRONUS ha realizado smoke test del fin de semana y os ha escrito esta mañana reportando dos problemas bloqueantes. El go-live estaba previsto para el viernes.
Issue #1 · Role Center · cue "My Open Incidents" muestra contador incorrecto Media
Reporta Alice Martinez (agente de soporte): el cue "My Open Incidents" del Role Center muestra 8 incidencias, pero al hacer clic solo aparecen 5 realmente abiertas. Las otras 3 ya están en estado Resolved desde la semana pasada.
Esperado: el cue cuenta solo incidencias NO Resolved ni Closed ni Cancelled. Observado: cuenta todas las asignadas al usuario, sin filtrar por estado.
Issue #2 · Card · acción "Add Comment" no añade comentarios Alta
Reportan Bob Chen y David Patel (agentes de soporte): al pulsar "Add Comment" en la ficha de una incidencia, aparece un mensaje informativo pero no se añade ningún comentario a la tabla. Los comentarios automáticos (Status Change, Assignment) sí funcionan. El problema es que la acción de la UI no está cableada al procedure del codeunit.
Impacto: bloqueante. Los agentes no pueden dejar notas libres sobre el progreso de cada incidencia.
TICKET DE SOPORTE · CRONUS-2026-042 De: soporte@cronus-usa.com Para: partner-implantacion@example.com Fecha: lunes 27 de abril de 2026, 09:15 AM Asunto: Incidencias detectadas en smoke test funcional de Barista Incidents v1.0 Prioridad: Alta Estado: Abierto --- Buenos días equipo, Os escribo con dos incidencias detectadas durante el smoke test funcional que hemos realizado este fin de semana sobre la extensión Barista Incidents v1.0 que nos entregasteis el viernes. El equipo de soporte al completo (6 personas) ha estado trabajando con la aplicación durante el sábado y domingo con datos reales. Hemos encontrado dos problemas que necesitan resolución antes de dar luz verde al despliegue en producción. El resto de funcionalidades se comporta correctamente y el equipo está contento con el Role Center y el flujo general. Os agradecemos una resolución esta misma semana si es posible, el go-live estaba previsto para el viernes 1 de mayo. Saludos, JP — Jefe de Proyecto · CRONUS USA, Inc. --- ISSUE #1 — Role Center · cue "My Open Incidents" muestra contador incorrecto Severidad: Media Reportado por: Alice Martinez (agente de soporte) Descripción: Alice reporta que al iniciar sesión con su perfil "Barista Support Agent", el cue "My Open Incidents" del Role Center le muestra 8 incidencias, pero al hacer clic y abrirse la lista filtrada solo ve 5 realmente abiertas. Alice ha investigado y ha identificado que entre las 8 contadas están 3 incidencias que ella resolvió la semana pasada y que ya están en estado Resolved. No deberían contar para este cue. Comportamiento esperado: El cue "My Open Incidents" debe contar únicamente las incidencias asignadas al usuario actual que NO estén en estado Resolved ni Closed ni Cancelled. Solo las que aún requieren trabajo activo. Comportamiento observado: El cue está contando todas las incidencias asignadas al usuario actual, sin filtrar por estado. Incluye las Resolved que ya están cerradas desde el punto de vista operativo. Información técnica: El cue vive en la tabla BRI Incident Cue como FlowField My Open Incidents. --- ISSUE #2 — Card Incident · acción "Add Comment" no añade comentarios Severidad: Alta Reportado por: Bob Chen y David Patel (agentes de soporte) Descripción: Bob y David reportan que al pulsar la acción "Add Comment" en la ficha de una incidencia, no se añade ningún comentario. El sistema muestra un mensaje informativo tipo "Add Comment feature will be available soon" pero al cerrarlo y revisar el FactBox de comentarios, no aparece nada nuevo. Bob ha verificado que los comentarios automáticos SÍ funcionan: cuando cambia el estado aparece un comentario de tipo "Status Change". Cuando asigna a otro técnico aparece un comentario "Assignment". Lo que no funciona es añadir un comentario libre. Esto bloquea el caso de uso principal del agente: registrar el progreso de la resolución en sus propias palabras (ej: "llamado al cliente, confirma lote 2025-B-142", "pendiente de que finanzas apruebe el abono"). Comportamiento esperado: Al pulsar "Add Comment" debería aparecer un diálogo que permita al agente escribir texto libre. Al confirmar, el sistema debería guardar ese comentario en la tabla BRI Incident Comment con Comment Type = User, Created By = UserId, Created At = ahora, Incident No. = incidencia actual. Tras guardar, el comentario debería aparecer inmediatamente en el FactBox sin refrescar. Comportamiento observado: La acción está presente y clicable. Al pulsarla se muestra un Message informativo pero no se llama al procedure de añadir comentario. El comentario no se guarda. El FactBox no se actualiza. Información técnica: El codeunit BRI Incident Management tiene un procedure público AddComment(var Incident: Record Incident; CommentText: Text[2048]) que está implementado correctamente — si se llama directamente desde AL, inserta el comentario sin problema. El problema está en la UI: la acción de la Card no está cableada a ese procedure. Impacto: bloqueante para el despliegue. --- Qué os pedimos: 1. Analizar el repositorio con la metodología ALDC + auditor de pipeline. 2. Resolver los dos issues aplicando las correcciones necesarias. 3. Devolvernos el repositorio corregido con: - Documentación de las correcciones aplicadas - Test manual de verificación por issue - Changelog describiendo qué cambió Quedamos a vuestra disposición. JP — CRONUS USA, Inc.
Pasos a realizar
Clonar el repo v3 (brown field)
Cerrad el workspace del green field y abrid 04-brownfield-starter/ del repo de ejercicios. Este es el proyecto completo de Barista Incidents v1.0 (25 objetos) tal y como lo recibió el cliente. Ya tiene los dos issues dentro del código.
Abridlo en una nueva ventana de VS Code. Este workspace tiene la estructura completa con 5 phase-complete docs pero sin ficha de auditoría. La vais a generar vosotros.
04-brownfield-starter/. Copilot Chat activo sobre este workspace.
Lanzar el auditor sobre el repo
Pegad este prompt en Copilot Chat con @workspace. El auditor recorrerá los artefactos del pipeline ALDC y generará una ficha estructurada con 19 secciones. No modifica código, solo observa.
@workspace IMPORTANTE: No eres un agente de ALDC. No propongas mejoras al código ni al pipeline. No sugieras refactors. Tu única función es observar, extraer y reportar hechos. Si detectas algo cuestionable, lo reportas en la sección 19 como observación factual, sin proponer solución. Actúa como auditor del pipeline ALDC. Tienes acceso al workspace del proyecto Barista Incidents v1.0. Tu trabajo es recorrer los artefactos generados por ALDC y producir una FICHA ESTRUCTURADA que permita diagnosticar la salud del proyecto. ARTEFACTOS QUE DEBES REVISAR: - app.json (metadata de la extensión) - .github/plans/*.md (architecture, spec, plan, phase-complete summaries, memory.md) - src/ completo (todos los objetos AL generados) - Permission sets - Cualquier fichero memory.md, decisions.md o REFINEMENTS-LOG.md INSTRUCCIONES CRÍTICAS: 1. NO generes código ni modifiques nada. Solo lee y extrae. 2. NO especules. Si un dato no está, escribe "no encontrado". 3. Céntrate en hechos verificables, no en opiniones. 4. La ficha debe caber en aproximadamente 120 líneas. 5. NO incluyas sección de git history. Los partners trabajan sobre un clone reciente sin historial propio. Produce la ficha con estas 19 secciones: 0. Identificación (workspace, ruta local) 1. app.json (id, name, publisher, version, idRanges, runtime) 2. Inventario de objetos AL (conteo por tipo) 3. Catálogo completo de objetos (ID, Tipo, Nombre, Fichero) 4. Modelo de datos (campos, PK, keys, FlowFields por tabla) 5. Enums (nombre, valores, Extensible) 6. Lógica de negocio (codeunits, procedures públicos, IntegrationEvents) 7. Capa UI (pages, StyleExpr, FactBoxes, acciones) 8. Wizard (pasos, registro en Assisted Setup) 9. Capa API / integración 10. Permission Sets (entradas tabledata + X sobre pages/codeunits) 11. Demo data (categorías, técnicos, incidencias, idempotencia) 12. Cumplimiento criterios de aceptación del PRD 13. Skills Evidencing declaradas en phase-complete docs 14. HITL gates documentados 15. Desviaciones respecto a spec/architecture 16. Open Questions heredadas 17. Tiempos (si están documentados) 18. Calidad de compilación 19. NOTAS DEL AUDITOR — observaciones factuales sobre red flags detectadas Presta especial atención a: - El comportamiento real del cue "My Open Incidents" (tabla BRI Incident Cue, FlowField CalcFormula) - El cableado real de la acción AddComment en la page BRI Incident Card Cuando termines, presenta la ficha completa. No añadas comentarios antes ni después.
Cruzar la ficha con los issues reportados
Con la ficha del auditor y el ticket CRONUS-2026-042 delante, tomad 3 minutos para localizar exactamente dónde están los defectos:
- Issue #1 → revisar sección 4 (Modelo de datos) de la ficha. Buscar el CalcFormula del FlowField
My Open Incidentsen la tablaBRI Incident Cue. ¿Incluye filtro por Status? - Issue #2 → revisar sección 7 (Capa UI) y sección 19 (Notas del auditor). Buscar referencias a la acción
AddCommentenBRI Incident Card. ¿Dice "stub" o "Message placeholder"?
Opcional: si queréis un análisis más elaborado, podéis copiar la ficha del auditor + el ticket a Claude.ai o Gemini o ChatGPT con acceso al repo y pedir un plan de corrección razonado. Es exactamente el flujo que haríais en un proyecto real.
src/DataModel/BRIIncidentCue.Table.al (FlowField filter) y src/Pages/BRIIncidentCard.Page.al (acción AddComment).
Análisis cruzado, reporte y resolución
Aquí aplicamos una metodología ALDC más madura: planificar antes de ejecutar, documentar al cerrar. En lugar de lanzar correcciones directas, pedimos a ALDC que primero cruce el audit con el ticket y produzca un reporte de análisis. Revisamos el reporte (HITL gate). Después ejecuta las correcciones. Al terminar, adjunta documentación final.
4.a · Análisis cruzado + reporte
Tras tener la ficha del auditor y el ticket, pedimos a ALDC que elabore un reporte de análisis por issue. Esto permite revisar el diagnóstico antes de tocar código.
Contexto: - Tienes la ficha de auditoría generada en el paso anterior - Tienes el ticket CRONUS-2026-042 con 2 issues reportados por el cliente - El workspace es el proyecto Barista Incidents v1.0 que el cliente recibió Tarea: Cruza la información de la ficha de auditoría con los 2 issues del ticket y genera un documento `analysis-report.md` en `.github/plans/barista-incidents/` con esta estructura: 1. Resumen ejecutivo (2-3 frases) 2. Issue #1 · My Open Incidents cue filter - Observación del auditor (cita de la sección relevante) - Fichero y field afectados exactamente identificados - Hipótesis causal (por qué pasa) - Plan de corrección (qué hay que cambiar, cómo de invasivo) - Test manual propuesto para verificar resolución 3. Issue #2 · AddComment UI - Observación del auditor - Fichero y action afectados - Hipótesis causal - Plan de corrección (con opciones si hay varias vías) - Test manual propuesto 4. Riesgos colaterales (¿algún cambio puede romper algo no relacionado?) 5. Orden de ejecución recomendado (qué corregir primero y por qué) Pistas técnicas útiles para tu análisis: - Para el Issue #1, investiga si el enum "BRI Incident Status" incluye Resolved como valor a excluir del CalcFormula del FlowField. La plataforma BC aplica automáticamente el FlowFilter "User ID Filter" con UserId() en CueParts dentro de RoleCenter, así que el filtro por usuario funciona por convención — el problema suele estar solo en el filtro de Status. - Para el Issue #2, evalúa estas alternativas para capturar input del usuario en AL: A) ConfirmationDialog con RunModal (tiene timing issues conocidos con FactBox refresh) B) List con AutoSplitKey + DelayedInsert + MultipleNewLines (patrón Sales Comment Sheet, estándar BC, más robusto) Recomendación: evaluar ambas y proponer la B salvo que haya razón de peso, porque evita los problemas de timing entre RunModal y OnInsert que has podido ver en proyectos previos. Reglas: - NO apliques correcciones aún. Solo analiza y propone. - Si tienes dudas sobre el plan de corrección del Issue #2, enuncia las alternativas con pros/contras. - Al terminar, muéstrame el reporte y pregúntame "¿Apruebas el plan de corrección propuesto?" como HITL gate. - NO avances a ejecutar correcciones hasta que yo apruebe explícitamente.
analysis-report.md generado con diagnóstico razonado de los 2 issues. ALDC detenido esperando tu aprobación.
4.b · Ejecución de correcciones + documentación
Aprobado el análisis, ALDC aplica las correcciones siguiendo su propio plan y al cerrar adjunta las soluciones finales para changelog.
Plan de corrección aprobado. Procede con la ejecución siguiendo el orden recomendado del analysis-report.md. Reglas operativas: 1. Aplica los cambios en orden (primero el issue marcado como "corregir primero") 2. Tras cada cambio: - Compila y verifica 0 errores ni warnings nuevos - Muestra el diff del fichero modificado - Resume en 2-3 líneas qué hiciste 3. Si durante la ejecución encuentras una dificultad no prevista en el plan (por ejemplo, la sintaxis AL del FILTER, o la falta de InputDialog nativo en BC 28), para y pregunta antes de improvisar. 4. NO hagas commits intermedios. Todo va en un único commit al final. Cuando ambos issues estén corregidos y compilando limpio: 5. Genera un documento final `solution-notes.md` en `.github/plans/barista-incidents/` con esta estructura: - Resumen de correcciones aplicadas - Issue #1: fichero modificado, diff exacto aplicado, test manual de verificación con pasos concretos - Issue #2: fichero modificado, diff exacto aplicado, test manual de verificación con pasos concretos - Cambios colaterales aplicados (si hubo alguno: cambios de permisos, nuevos objetos creados, etc.) - Changelog listo para incluir en release notes 6. Pregúntame si procedo con el commit final con mensaje `fix(brownfield): resolve CRONUS-2026-042 issues #1 and #2`.
solution-notes.md generado con diff + test manual por issue + changelog. Listo para commit.
<> Resolved al filtro de Status del CalcFormula. 30 segundos, una línea. El filtro por usuario ya funciona (BC aplica automáticamente User ID Filter con UserId() en CueParts de RoleCenter).
Issue #2 — más interesante: la solución óptima NO es ConfirmationDialog + RunModal (tiene timing issues con FactBox refresh). El patrón canónico BC es un List page con AutoSplitKey + DelayedInsert + MultipleNewLines, igual que la Sales Comment Sheet estándar. BC gestiona Line No. automáticamente y el OnInsert de la tabla popula Created At/By. Si ALDC no propone este patrón en el analysis-report, pedídselo explícitamente en el HITL gate.
Permisos colaterales: la nueva page creada para capturar comentarios requiere entradas X en BRI-USER y BRI-ADMIN (no en BRI-READ). Asegúrate de que ALDC lo incluye en solution-notes.md.
Hemos cerrado el ciclo completo
Proyecto recibido → auditoría ALDC → diagnóstico cruzado con ticket → corrección dirigida. Esto es exactamente lo que haréis en cualquier proyecto brown field con herencia técnica. Y lo habéis hecho en 15 minutos.
Lessons — lo que nos llevamos
4 conclusiones prácticas tras tres iteraciones reales de ALDC sobre el mismo caso. Con evidencia empírica, no con marketing.
Lo determinista y lo creativo de ALDC
Lancé el mismo PRD tres veces en tres fines de semana consecutivos. Publisher, modelo de datos nuclear, ciclo de vida: idénticos. Prefijos, capa de integración, interpretación de "asignar a usuario": divergieron. ALDC es determinista en lo fundamental y creativo en los detalles. Por eso los HITL gates no son opcionales.
El bug de User Name que me pilló dos veces
Las dos primeras iteraciones fallaron en lo mismo: User Name no es PK de la tabla User de BC. ALDC interpreta "asignar a usuario" y cae en la trampa. La v3 lo resolvió con una tabla propia Support Technician porque el PRD lo anticipó explícitamente. Escribir PRDs es anticipar patrones BC conocidos.
Audit as code
Tres fichas de auditoría generadas en tres lunes. Cada una reveló lo que el ojo humano no ve leyendo código: HITL gates decorativos, memory.md contaminada, discrepancias entre documentación y filesystem. La auditoría no es opcional. Es parte del pipeline.
El PRD como ingeniería de prompts
v1 cumplió 6 de 8 criterios de aceptación. v2 cumplió 4 de 8. v3 cumplió 9 de 9. Mismo ALDC, mismo sandbox, misma metodología — solo cambió el PRD. En el brown field de hoy: 2 issues resueltos en 7.5 min (vs 35 estimados) cuando ALDC recibió el patrón BC correcto como pista. Escribir PRDs y saber guiar al agente hacia patrones canónicos es la nueva skill que un partner BC necesita para trabajar con ALDC en producción.
Gracias por tocar teclas
En el repo público tenéis: el PRD v1.0-workshop completo, las 3 iteraciones con sus auditorías, los prompts del pipeline, el prompt del auditor reutilizable, los fallbacks, y las 4 lecciones aprendidas en extenso. Y todo lo que no cabía hoy: APIs, CIRCE, MCP, tests.
github.com/javiarmesto/workshop-v-valley-aldc-2026-04-EJERCICIOSJavier Armesto · VS Sistemas · MVP Business Central & Azure AI