construct — una idea de producto, fundamentada en un SRD construible
construct convierte una idea de producto en un conjunto de Documentos de Requisitos de Software (SRD) cuyos requisitos y decisiones están fundamentados en investigación real, no en la memoria del modelo. El motor determinista (scripts/construct.mjs, Node sin dependencias) realiza la búsqueda, el ensamblaje del dossier, el renderizado del SRD y la validación con código; tu trabajo es realizar la entrevista, dirigir la investigación y enriquecer el andamio renderizado hasta obtener un SRD preciso y bien fundamentado.
La regla principal: prefiere un requisito fundamentado a uno supuesto. Utiliza la investigación que el motor recupera (competidores, proyectos OSS similares, documentación técnica, StackOverflow) para justificar el alcance, los requisitos no funcionales (NFR) y las decisiones arquitectónicas, y cita la evidencia con
[E#]. La fundamentación es consultiva aquí —construct checkinforma la cobertura pero nunca falla por ello — así que el rigor depende de ti.
El script
Un paquete único, sin dependencias: node scripts/construct.mjs <comando>. No requiere npm install, ni claves API. Ejecuta --help para ver todas las opciones. Comandos clave:
init --idea "<idea en una línea>" --out <ejecución>— crea la carpeta de ejecución +brief.json.research --out <ejecución> [--angles market,oss,tech,semantic] [--q "<enfoque>"] [--semantic]— recopila evidencia en diferentes ángulos dentro de<ejecución>/evidence/(un dossierEVIDENCE.md+evidence.jsoncon identificadores[E#]). Ángulos predeterminados:market,oss,tech.analyze --out <ejecución> [--json]— el informe "qué falta": nombra cada característica/competidor/tecnología/semilla que se renderizará SIN FUNDAMENTAR, y muestra el comando de profundización que corrige cada vacío. Informativo, nunca bloquea.web|oss|tech|so --out <ejecución> [--q "<enfoque>"] [--url ...] [--seeds ...] [--docs-url <u,...>]— profundiza en UN ángulo (salida estándar, sin dossier). Úsalo para indagar más en un hilo débil;--docs-urlfundamenta páginas de documentación conocidas directamente.render --out <ejecución> [--level light|complex] [--merge]— renderiza el árbol SRD +SRD.jsona partir debrief.jsony el dossier.check --out <ejecución> [--min-grounding <0-100>] [--semantic] [--json]— la validación ESTRUCTURAL (código de salida ≠ 0 si el SRD está incompleto) más el informe CONSULTIVO de cobertura de fundamentación.--min-grounding Nactiva una segunda compuerta que falla si hay menos del N% de afirmaciones fundamentadas;--semanticincluyeVERIFY.json(verreview) y falla si hay afirmaciones refutadas o sin soporte. (Distinto deresearch --semantic, que solo reordena la evidencia según relevancia de embeddings).review --out <ejecución> [--apply <verdictos.json>] [--max-review N] [--json]— el sistema de soporte de afirmaciones. Sin--applyescribe una lista de trabajo afirmación↔evidencia (VERIFY.todo.json+VERIFY.md): cada afirmación fundamentada emparejada con cada fragmento[E#]citado para su adjudicación.--apply <verdictos.json>reduce tus veredictos (supported|partial|refuted|unsupported) enVERIFY.json, quecheck --semanticvalida. Divídelo segúnreferences/orchestration.md.verify --out <ejecución> [--app <dir>] [--run-tests] [--strict] [--json]— el árbitro de construcción: BUILD-PLAN.json bien formado y acíclico, cada referencia de tarea resuelta en SRD.json, archivos de tareas completadas existentes, cada requisito referenciado por una prueba.--run-teststambién ejecuta los comandos de prueba declarados;--strictfalla si una característica obligatoria construida no tiene ninguna prueba que la referencie.status --out <ejecución> [--json]— qué existe en la ejecución hasta ahora;--jsonañade la frontera de construcción (qué tareas de BUILD-PLAN se pueden construir ahora vs. están bloqueadas).semantic up|down|status— pila Docker local opcional (Qdrant + Ollama + SearXNG).
Flujo de trabajo
Se te invoca una vez y se espera que devuelvas un SRD completo y fundamentado. Conduce el bucle hasta completarlo; solo haz una pausa para preguntar al usuario una decisión real.
-
Entrevista al usuario — una pregunta a la vez. Establece el producto antes de investigar. Sigue
references/interview-playbook.md: problema, usuarios objetivo, valor principal, características obligatorias/deberían/podrían, restricciones (presupuesto, cronograma, equipo, cumplimiento normativo), tecnologías candidatas y cualquier semilla de competidor / OSS. Recomienda una respuesta con cada pregunta; no sueltes un cuestionario. Escribe las respuestas enbrief.json(inícialo conconstruct init). -
Investiga — fundamenta la idea. Ejecuta:
node scripts/construct.mjs research --out <ejecución> --angles market,oss,techEsto descubre competidores en la web, extrae proyectos OSS comparables (y sus issues/PRs para problemas reales) y obtiene documentación de tecnologías candidatas + StackOverflow. Lee
<ejecución>/evidence/EVIDENCE.md. -
Profundiza — hasta que
analyzeesté limpio o el usuario te detenga. Ejecuta:node scripts/construct.mjs analyze --out <ejecución>Identifica exactamente qué es débil — características, competidores, tecnologías candidatas y semillas OSS sin evidencia coincidente — y muestra el comando de profundización que corrige cada vacío. Distribuye: si puedes lanzar subagentes en paralelo, envía uno por cada vacío; cada uno recibe la idea en una línea, el vacío, su comando de profundización y su propia BúsquedaWeb, y devuelve un resumen de ≤5 líneas más URLs valiosas para fundamentar. Los subagentes NO DEBEN escribir en la carpeta de ejecución — las profundizaciones imprimen en salida estándar; solo
construct researchescribe el dossier, y solo TÚ lo ejecutas. Incorpora los hallazgos en serie:construct web --url <u,...> --out <ejecución>→ volver a ejecutarresearch→ volver a ejecutaranalyze. (¿No tienes subagentes? Trabaja los vacíos tú mismo, una profundización a la vez.) Informa al usuario lo que encontraste y déjale dirigir — prioriza las características obligatorias y las decisiones críticas, detente cuando él diga que es suficiente. Consultareferences/orchestration.mdyreferences/research-playbook.md. -
Renderiza el SRD. Cuando el brief sea sólido y el dossier esté completo:
node scripts/construct.mjs render --out <ejecución> --level complexElige
complexsiempre que sea posible construir algo; cambiar de nivel más tarde renumerará los IDs de FR (consultareferences/srd-authoring.md). Esto escribe el árbol SRD (ver más abajo). El modelo de datos y las interfaces vienen preinicializados por inferencia del brief — verifícalos, no confíes en ellos. Luego enriquécelo: resuelve cada nota🧠 Decide:, afina los criterios de aceptación plantillados y las métricas NFR en declaraciones comprobables y acotadas (siguereferences/acceptance-criteria.md—checkadvierte mientras queden plantillados), corrige/amplía el modelo de datos y las interfaces, y añade citas[E#]del dossier a los requisitos y decisiones que las sustentan. Consultareferences/srd-authoring.mdyreferences/citation-format.md. En nivelcomplex, enriquece también el sistema de diseño (design/): reemplaza los tokens de diseño inicializados con los valores reales de la marca del producto, verifica el inventario de componentes y pantallas/flujos, y afina los criterios de accesibilidad según el estándar objetivo (derivado del brief, por defecto WCAG 2.2 AA). Consultareferences/design-system-authoring.md. -
Revisión adversarial — deja que ojos nuevos lo rompan. Lanza un subagente revisor SIN contexto más allá de la ruta de la carpeta de ejecución y
references/adversarial-review.md(¿no tienes subagentes? haz la revisión tú mismo, siguiendo estrictamente esa lista de verificación como un lector hostil). Debe intentar romper el SRD — ambigüedad, criterios no comprobables, rutas de fallo faltantes, blanqueo de citas, contradicciones — y devolver hallazgos etiquetados. Corrige cada[blocker], usa tu criterio con[advisory], luego vuelve a ejecutarcheck. Repite mientras aparezcan nuevos bloqueadores (límite: 3 rondas, luego presenta lo que quede al usuario). Para una ADR genuinamente controvertida y difícil de revertir en nivelcomplex, ejecuta también el panel de 3 jueces dereferences/orchestration.md. -
Valida (tres capas).
- Estructural (rígida):
node scripts/construct.mjs check --out <ejecución>. Falla si hay🧠sin resolver, ningún requisito funcional, un FR sin criterios de aceptación, una referencia a entidad/interfaz/NFR colgante, una categoría NFR requerida faltante o una ADR mal formada. Corrige hasta que pase. - Fundamentación (consultiva): el mismo comando imprime la cobertura — qué fracción de requisitos/decisiones citan evidencia. Auméntala donde importe (las decisiones críticas); consulta
references/grounding-coverage.md. Por defecto nunca hace fallar la construcción, así que usa tu criterio. Cuando el usuario quiera que la fundamentación sea obligatoria, añade la compuerta opcional:check --out <ejecución> --min-grounding 70. - Soporte de afirmaciones (consultiva → compuerta opcional): la cobertura cuenta citas; no verifica que sean válidas.
construct review --out <ejecución>construye una lista de trabajo afirmación↔evidencia; adjudica cada par (distribuye segúnreferences/orchestration.mdPatrón 4), ensamblaverdictos.json,review --apply verdictos.json, luegocheck --out <ejecución> --semanticpara bloquear afirmaciones refutadas o sin soporte. Vale la pena una pasada sobre los FR/ADRs críticos antes de presentar. Repite los pasos 3–6 hasta quecheckpase estructuralmente, el revisor no encuentre nuevos bloqueadores y la fundamentación sea honesta.
- Estructural (rígida):
-
Presenta. Entrega al usuario el conjunto SRD: la visión, el panorama competitivo, los requisitos fundamentados y las decisiones clave (con su evidencia
[E#]y enlaces). Señala explícitamente cualquier incógnita en lugar de adivinar. -
Construye (cuando el usuario quiera la aplicación, no solo el SRD). El renderizado también emitió
BUILD-PLAN.json— un DAG de tareas legible por máquina (esqueleto T-000 + una tarea por FR, obligatorio → debería → podría, dependencias conscientes de entidades) cuyas entradasacceptanceAPUNTAN aSRD.json. Tú escribes todo el código de la aplicación; el motor actúa como árbitro. Siguereferences/build-playbook.md:- Haz T-000 (andamio, soporte de pruebas, CI); establece
conventions.appDiryconventions.testCommandenBUILD-PLAN.json. - Por tarea, en orden topológico: lee los criterios de aceptación de
SRD.json; aplícalos con TDD — cada prueba nombra su ID de FR (ej.describe("FR-001 …"); eso es lo queverifybusca); registraartifacts+tests; establecestatus: "done"; ejecutanode scripts/construct.mjs verify --out <ejecución>y corrige cualquier error antes de la siguiente tarea. - Las tareas del mismo hito no tienen aristas entre sí, por lo que su frontera lista (
status --out <ejecución> --json) se puede construir en paralelo — un árbol de trabajo git aislado por tarea; tú solo integras los resultados enBUILD-PLAN.json(Patrón 5 enreferences/orchestration.md). - Por hito:
verify --out <ejecución> --run-tests --strict, luego una revisión adversarial del hito — ojos nuevos buscando un criterio de aceptación que ninguna prueba ejercite realmente (consulta el playbook;references/verify.mdexplica qué puede y qué no puede demostrar verify). - Si un FR resulta incorrecto durante la construcción, modifica el brief, vuelve a renderizar (el progreso se fusiona por título de característica), reetiqueta los IDs de FR desplazados, vuelve a ejecutar
check.
- Haz T-000 (andamio, soporte de pruebas, CI); establece
Lo que produce (el árbol SRD, en --out)
00-overview/ VISION.md · SCOPE.md (+ decisiones abiertas 🧠)
requirements/ FUNCTIONAL.md (FR-NNN · prioridad · Dado/Cuando/Entonces · [E#])
NON-FUNCTIONAL.md (NFR-NNN por categoría · métrica · [E#])
architecture/ SYSTEM-CONTEXT.md · DATA-MODEL.md · INTERFACES.md
decisions/NNNN-*.md (ADRs)
design/ PRINCIPLES.md · DESIGN-TOKENS.md (+ design-tokens.json) · COMPONENTS.md
SCREENS.md · ACCESSIBILITY.md (solo complex; --no-design para omitir)
competitive/ LANDSCAPE.md (competidores + proyectos OSS similares)
BUILD-PLAN.md · BUILD-PLAN.json (DAG de tareas para la fase de construcción)
TRACEABILITY.md (FR ↔ NFR ↔ ADR ↔ entidad ↔ interfaz ↔ componente ↔ pantalla)
evidence/ EVIDENCE.md · evidence.json · meta.json · brief.json · SRD.json
light lo mantiene ligero; complex añade el conjunto completo de NFR, una segunda ADR, criterios de aceptación de rutas de fallo, la matriz de trazabilidad completa y un subárbol de sistema de diseño (design/: principios, tokens, componentes, pantallas/flujos, un contrato de accesibilidad — --no-design lo omite). Añade --merge para un único archivo SRD.md.
Modo semántico opcional (totalmente local, sin clave API)
Los ángulos market/OSS/tech solo necesitan acceso a la red. Para una pasada de relevancia sobre la evidencia recopilada, puedes habilitar un modelo de embeddings local:
node scripts/construct.mjs semantic up # docker: Qdrant + Ollama + SearXNG
node scripts/construct.mjs research --out <ejecución> --angles market,oss,tech,semantic --semantic
Todo se ejecuta en contenedores Docker locales — sin clave, ningún dato sale de la máquina. Si la pila no está activa, --semantic registra un aviso y mantiene la clasificación léxica. Consulta references/semantic-setup.md.
Referencias
references/interview-playbook.md— cómo obtener el brief, una pregunta a la vez.references/research-playbook.md— cómo elegir ángulos y profundizar hasta que sea "suficientemente bueno".references/orchestration.md— el modelo de flujo de trabajo dinámico de tres niveles y los patrones de subagentes: distribución de investigación, equipo rojo, panel de jueces, distribución de revisión de soporte de afirmaciones, distribución de construcción (y la regla de un solo escritor).references/adversarial-review.md— la lista de verificación del equipo rojo y su contrato de hallazgos.references/srd-authoring.md— cómo resolver las notas 🧠, escribir requisitos y ADRs comprobables.references/design-system-authoring.md— cómo enriquecer el sistema de diseñocomplex: tokens, componentes, pantallas/flujos y el contrato de accesibilidad.references/acceptance-criteria.md— reescrituras de Dado/Cuando/Entonces de malo a bueno y patrones de métricas NFR medibles.references/citation-format.md— la convención de fundamentación[E#].references/grounding-coverage.md— qué significa el informe consultivo de cobertura y cómo mejorarlo.references/build-playbook.md— el bucle de construcción: TDD de tareas, convención de etiquetas FR, compuertas de hito, la revisión de hito.references/verify.md— qué demuestra cada verificación deverifyy qué aún necesita ojos humanos.references/provider-apis.md— cómo se obtienen issues/PRs de OSS por host, sin clave.references/web-discovery.md— la búsqueda web en capas sin clave.references/semantic-setup.md— la pila Docker local opcional.