Qué es. El humano trae la idea, las restricciones y el material de referencia; la skill trae la forma: interroga hasta que exista una forma compartida del sistema y escribe los documentos sobre la marcha — no le pide al humano que diseñe el sistema por ella.
Cuándo. "discovery", "modelá esto desde una idea", "solo tengo la idea,
no sé el cómo todavía". Cuándo NO: feature con forma clara → uscha-adr-refine;
sistema existente a migrar → uscha-reverse-discovery.
Principios no negociables
- Una pregunta por vez, cada una CON respuesta recomendada. La inversión que hace funcionar el discovery: la skill propone (entidades, endpoints, arquitectura, un default), el humano confirma o corrige. Jamás una lista de 20 preguntas.
- Explorar antes de preguntar. Si un doc de referencia, el codebase o un
CONTEXT.md/docs/adr/responde la pregunta, se lee primero. - Proponer la forma. Entidades núcleo, superficie de operaciones y 2–3 opciones de arquitectura con trade-offs; el árbol de diseño se camina rama por rama.
- Interrogar, no acordar. Contradicciones, términos difusos, modos de falla ausentes. Un discovery donde la skill acordó con todo, falló.
- Archivos lazy e inline. Un archivo se crea recién cuando hay algo real que escribir y se actualiza cuando la decisión cristaliza — nunca batch al final.
La agenda de interrogatorio (en orden; se saltea lo que las referencias ya responden)
- Propósito / valor / por qué ahora — qué trabajo elimina, qué cuesta no hacerlo.
- Modelo de dominio — la skill propone entidades núcleo y relaciones.
- Superficie de operaciones / API — endpoints, contratos, idempotencia, códigos.
- Decisiones grandes (→ ADR) — 2–3 opciones con trade-offs y default recomendado.
- Comportamiento y casos sucios — happy path y DESPUÉS fallas, reintentos, estados parciales, concurrencia, qué NO debe pasar.
- Restricciones inviolables (→ CONSTITUTION.md) — un invariante por línea, CWE donde mapee; alimentan el severity gate y una violación es BLOCKER, nunca trade-off.
- Out of scope — límites explícitos con referencias forward.
- Acceptance / DoD — criterios concretos y chequeables + métricas.
- Quality bar (→ config, 1.17.0) — "¿qué nivel de calidad BASTA y qué es negociable?". Lo declarado va a
uscha.config.jsony lee como requerimiento (config); lo no declarado queda como default del kit (opinión) y así se etiqueta. Declarar es commitear el config. - Riesgos y dependencias — por cada riesgo de incertidumbre ALTA (1.19.0): "¿amerita un spike time-boxed?". El spike corre en rama
spike/*y su único output legítimo es un ADR con lecciones —phase --require pr-readyrechaza esa rama, estilo INV-GOLDEN-01.
Artefactos (lazy, a medida que cristaliza)
| Archivo | Qué lleva |
|---|---|
| CONTEXT.md | Glosario de dominio — solo términos con sentido para expertos, desacoplado de implementación. |
| CONSTITUTION.md | Invariantes que ningún ADR/SPEC puede violar; la capa ARRIBA de los ADRs. |
| DOMAIN-MODEL.md | Entidades propuestas y aprobadas — el modelo, no el vocabulario. |
| SPEC.md | Objetivo/valor, riesgo, scope/out-of-scope, comportamiento, entradas/salidas/errores, acceptance, test plan, operación, rollback. |
| docs/adr/ADR-NNN-*.md | Una por decisión durable, con Implementation Plan y Verification (checkboxes) — el ADR como spec ejecutable. |
| ACCEPTANCE.md | DoD como checkboxes con ID trazable estable (- [ ] AC-01 — cuando X entonces Y, secuenciales, nunca reusados). Aguas abajo un criterio solo cierra MEDIDO con un testcase verde que lleve su tag. |
| RISKS.md | Riesgos residuales, supuestos, puntos que requieren aprobación humana. |
| HANDOFF.md | Qué leer antes de codear + reglas duras de "no hacer" + evidencia exigida. |
Se escribe un ADR solo si se cumplen LAS TRES: difícil de revertir · sorprendente sin contexto · trade-off real. Lo demás es ruido que entierra los importantes.
Termina cuando hay forma compartida: entidades, operaciones y decisiones grandes tomadas (o registradas como supuestos explícitos), cada modo de falla con comportamiento definido, out-of-scope explícito, DoD chequeable. La skill lo declara, finaliza el paquete y entrega el handoff — que instruye al implementador a resumir el comportamiento, marcar ambigüedades y proponer plan de archivos+tests ANTES de tocar código, y a no editar la SPEC para que su implementación parezca correcta.