Cómo se usa
Cómo se cablea el andamiaje en un prototipo: los atributos de trazabilidad, los modos y el export de feedback.
# Andamiaje de prototipo trazable
Maquinaria reutilizable de la **fase 3** de Argui (ver
[methodology/prototype.md](../../methodology/prototype.md)). Convierte un archivo HTML estático en un
prototipo navegable, trazable al PRD (Product Requirements Document) y comentable por los stakeholders — sin backend.
Es **mecanismo, no agente**: idéntico entre proyectos, por eso se distribuye. HTML/CSS/JS vanilla,
sin framework ni build. Portable a cualquier prototipo estático.
## El prototipo es un solo archivo
Un prototipo, un archivo `.html` con todo adentro: las pantallas, el CSS del producto, y el CSS y
el JS de este andamiaje pegados inline. Se abre con doble clic desde el disco, se manda por
correo, no tiene rutas relativas que romper y el feedback de todas las pantallas queda en un
solo lugar. La navegación entre pantallas es cliente (mostrar/ocultar secciones), no enlaces a
otros archivos.
Si el prototipo crece hasta volverse difícil de editar (referencia: más de ~15 pantallas), se
parte por área funcional en varios archivos autónomos. Es la excepción, no el punto de partida —
y cada archivo debe declarar el mismo `data-proyecto` para que el feedback no se fragmente.
El archivo lleva adentro el producto del cliente antes de existir: es confidencial. No va a un
repositorio público; si se publica para que un stakeholder lo abra, va en una URL no adivinable,
con `<meta name="robots" content="noindex, nofollow">`, y se apaga al cerrar la fase. Los datos
de ejemplo son inventados. Ver [methodology/prototype.md](../../methodology/prototype.md) →
*Dónde vive el prototipo*.
## Archivos
| Archivo | Qué es |
|---|---|
| `argui-prototipo.css` | Estilos del marco y del modo prototipo: barra, insignias, notas, panel de feedback. |
| `argui-prototipo.js` | Runtime: switch de modo, trazabilidad, comentarios, export, envío por correo. |
| `check-consistency.mjs` | Valida que cada ID referido en el prototipo esté definido en el PRD (Node 18+). |
| `SKILL.md` | Envoltorio de skill para Claude Code (opcional; el mecanismo no la requiere). |
## Cómo se cablea
1. Pega el contenido de `argui-prototipo.css` en un `<style>` y el de `argui-prototipo.js` en un
`<script>`, dentro del archivo del prototipo:
```html
<style>/* …contenido de argui-prototipo.css… */</style>
...
<script data-proyecto="acme"
data-prd-base="prd.html"
data-formspree="https://formspree.io/f/xxxxxxx">
/* …contenido de argui-prototipo.js… */
</script>
```
- `data-proyecto` (recomendado): identifica el prototipo para guardar el feedback. Si se
omite se usa la ruta del archivo — y el feedback se pierde al renombrarlo o moverlo.
- `data-prd-base` (opcional): documento PRD al que apuntan las insignias por defecto.
- `data-formspree` (opcional): endpoint de [Formspree](https://formspree.io/) para recibir
el feedback por correo. Si se omite, el botón "Enviar por correo" no aparece. Es lo único
del andamiaje que sale a un tercero —y lo que le manda son comentarios sobre el producto
del cliente—, así que se cablea solo con su aprobación; sin él, el canal es el export.
Durante el desarrollo puedes mantenerlos como archivos externos (`<link>` + `<script src>`)
y pegarlos inline al entregar; el runtime funciona igual en ambos casos.
2. Marca cada bloque de UI (interfaz de usuario) con el **ID estable** del requisito que lo define:
```html
<section data-prd="RF-12 · RDA automática">
…contenido del bloque…
</section>
```
- `data-prd`: la referencia visible en la insignia. **Empieza por el ID** (`RF-12`, `MET-3`).
Se traza por ID y no por número de sección porque el ID sobrevive a la partición del PRD
en F3.4.
- `data-prd-href` (opcional): enlace explícito. Si se omite, se construye desde
`data-prd-base` con la convención `RF-12` → `#rf-12`.
3. Anota dudas para el cliente donde correspondan (visibles solo con el modo encendido):
```html
<p data-prd-note="¿El cliente confirma que el tope es de 30 días?">…</p>
```
## Modo prototipo
El prototipo tiene un **marco** —una barra fija arriba— que nunca se confunde con el producto.
Ahí viven el switch de modo, el contador de comentarios y los botones de feedback.
- **Encendido** (por defecto en la primera visita): aparecen las insignias de trazabilidad, las
notas de aclaración y el comentario por bloque.
- **Apagado**: el lienzo se ve como producción; solo queda el marco.
- El estado se recuerda por visitante (`localStorage`) y se puede forzar con `?prototipo=1` o
`?prototipo=0` en la URL.
- **Vista limpia** — `?limpio` en la URL: sin marco y sin anotaciones. Para demo de venta,
capturas de pantalla o mostrarle el producto a un usuario final.
Los comentarios se guardan en `localStorage` y se exportan a **Markdown / JSON** — ese export es
el input para iterar el PRD. Con Formspree configurado, también se envían por correo. Si el
navegador no permite guardar (algunos bloquean `localStorage` en `file://`), el marco lo avisa y
el feedback dura solo la sesión: hay que exportar antes de cerrar.
## Controles del prototipo: Rol · Fase · Escenario
Tres dimensiones declarativas que el marco pinta como selectores. Son el mecanismo del
**refinamiento** (F3.5): sin poder cambiar de escenario no se pueden acordar los estados de
vacío, carga, error y permiso denegado. Funcionan con el modo encendido **y** apagado: pertenecen
al marco, no a la anotación.
1. Declara los valores en el script (cada dimensión es opcional; la que no se declara no aparece):
```html
<script data-proyecto="acme"
data-roles="Admin,Operario"
data-fases="Solicitud,Aprobación,Cierre"
data-escenarios="Normal,Vacío,Carga,Error,Sin permiso">
```
2. El estado seleccionado se refleja en la raíz del documento, con el valor en minúsculas y sin
acentos (`Sin permiso` → `sin-permiso`):
```html
<html data-rol="admin" data-fase="solicitud" data-escenario="normal">
```
3. Los bloques se muestran u ocultan solos con `data-cuando-rol`, `data-cuando-fase` y
`data-cuando-escenario` (varios valores separados por coma o espacio). Sin el atributo, un
bloque siempre se ve:
```html
<div data-cuando-escenario="normal">Lista con datos</div>
<div data-cuando-escenario="vacio">Aún no hay solicitudes</div>
<div data-cuando-escenario="error, sin-permiso">No pudimos cargar esto</div>
<button data-cuando-rol="admin">Eliminar</button>
```
Para lo que no es mostrar/ocultar —un texto o un estilo que cambia según el rol— usa
selectores de atributo en tu CSS: `[data-rol="operario"] .barra-acciones { … }`.
4. Se puede compartir un estado concreto por URL: `?rol=admin&escenario=error`. Combinado con
`?limpio`, sirve para mandar una captura o una demo de un estado puntual.
### API del runtime
`window.ArguiPrototipo`:
| Miembro | Qué hace |
|---|---|
| `refrescar()` | Reaplica visibilidad y anotación tras cambiar de pantalla (también hay un observador automático). |
| `dimension(clave, valor)` | Cambia `rol`, `fase` o `escenario` por código. |
| `modo(bool)` | Enciende o apaga el modo prototipo por código. |
| `controles` | El elemento de la barra donde viven los selectores, por si necesitas agregar uno propio. |
## Validar consistencia
```bash
node check-consistency.mjs --proto prototipo.html --prd prd.md
```
Reporta IDs referidos en el prototipo que no están definidos en ningún PRD (error, sale con
código 1) y requisitos del PRD sin ancla en el prototipo (aviso). Cuenta como definición un ID en
fila de tabla, encabezado o ítem en negrita — no una mención en prosa, para que un ID mal escrito
salga como roto. Útil en un hook de pre-commit o en CI.
## Definition of Done (recordatorio)
Ningún cambio al prototipo está terminado si no actualiza las superficies que toca: el HTML, la
prosa del PRD, la referencia de trazabilidad (`data-prd`), los specs y —cuando el ajuste toca
apariencia— el design system. Ver [methodology/prototype.md](../../methodology/prototype.md).