Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions docs/06-design-system/design-system.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,11 @@ src/styles/
`@layer` fija la precedencia: `reset` < `tokens` < `base` < `layout` < `components` <
`utilities` < `overrides`. Una capa solo contiene lo que le corresponde.

**Entrega web (Forge / Vite):** con CSP `style-src 'self'` (DEC-009), el runtime no inyecta
`<style>` desde `import` de CSS. Tokens + monolito `apps/web/src/styles.css` se sirven como
`<link rel="stylesheet" href="/forge-face.css">` (plugin Vite). La capa `overrides` en el
monolito queda vacía salvo excepción `AUD-*` documentada (post-#172).

| Capa | Contiene | No contiene | Ejemplo |
| ---------- | ------------------------------------------- | ----------------------------------- | ----------------------------------- |
| reset | normalización de agente de usuario | tokens ni estilos de marca | `box-sizing`, `margin: 0` |
Expand Down
42 changes: 21 additions & 21 deletions docs/10-delivery/closure/e2e-product-audit.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,41 +20,41 @@ dependsOn:

## Alcance verificable (CONDITIONAL-CLEAR)

| Verificable | Fuera de alcance |
| --- | --- |
| Recorrido Forge 6 pasos | Imagen Arch real / ISO |
| Verificable | Fuera de alcance |
| ------------------------------------------------------------------- | ----------------------------- |
| Recorrido Forge 6 pasos | Imagen Arch real / ISO |
| Controles esenciales (rail, cabecera, Continuar, Generar, Exportar) | root, discos, pacstrap, shell |
| `archmaker-profile` bytes íntegros | Instalación en hardware |
| SHA-256(archivo) == `binaryDigest` (toast) | Runner / sidecars |
| Fidelidad F3: hostname + cifrado como **intención** | «La imagen se instala» |
| `archmaker-profile` bytes íntegros | Instalación en hardware |
| SHA-256(archivo) == `binaryDigest` (toast) | Runner / sidecars |
| Fidelidad F3: hostname + cifrado como **intención** | «La imagen se instala» |

Si el operador pide «imagen se instala»: no aplica bajo el veredicto vigente. Se verifica en su lugar la paridad **selección → export → digest**.

## Inventario (apps/web)

Pasos (`RAIL_STEPS`): Intención → Sistema base → Entorno → Apps → Identidad → Revisión.
Pasos (`RAIL_STEPS`): Disco y particiones → Sistema base → Entorno → Apps → Identidad y seguridad → Revisión (experiencia única; sin Sencillo/Avanzado). Ver `honest-ux.md`.

Controles esenciales: ver `ESSENTIAL_CONTROLS` en `apps/web/e2e-fidelity-helpers.ts` (asserido en mock-flow).

## Pruebas

| Suite | Qué cubre |
| --- | --- |
| `mock-flow.playwright.test.ts` | Inventario + ejercicio F3 mock |
| `wasm-flow.playwright.test.ts` | Motor real + digest + ejercicio F3 WASM |
| `product-acceptance.playwright.test.ts` | P5: T-MIG sesión/cuota, teclado, stale/reentrada |
| `consented-import` / `export-delivery` / `a11y` | F4 / F2 / axe (ya existentes) |
| `pnpm --dir apps/web test-e2e:fidelity` | Subconjunto inventario + F3 mock |
| `pnpm --dir apps/web test-f7:e2e-wasm-x3` | Tres invocaciones WASM separadas |
| Suite | Qué cubre |
| ----------------------------------------------- | ------------------------------------------------ |
| `mock-flow.playwright.test.ts` | Inventario + ejercicio F3 mock |
| `wasm-flow.playwright.test.ts` | Motor real + digest + ejercicio F3 WASM |
| `product-acceptance.playwright.test.ts` | P5: T-MIG sesión/cuota, teclado, stale/reentrada |
| `consented-import` / `export-delivery` / `a11y` | F4 / F2 / axe (ya existentes) |
| `pnpm --dir apps/web test-e2e:fidelity` | Subconjunto inventario + F3 mock |
| `pnpm --dir apps/web test-f7:e2e-wasm-x3` | Tres invocaciones WASM separadas |

## Escritorio (F5)

| Comprobación | Resultado |
| --- | --- |
| `pnpm --dir apps/web` vite build → `apps/web/dist` | ok (corrida documentada; asociar a `sourceSha` + `RUN_ID` en evidencia externa) |
| `cargo build -p archmaker` → ELF `target/debug/archmaker` | ok |
| Tests unitarios `save_export*` (picker simulado) | ok (suite lib) |
| Humo GUI interactivo del diálogo `rfd` | **no ejecutado** — requiere portal de escritorio estable; no se lanza GUI en el agent |
| Comprobación | Resultado |
| --------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| `pnpm --dir apps/web` vite build → `apps/web/dist` | ok (corrida documentada; asociar a `sourceSha` + `RUN_ID` en evidencia externa) |
| `cargo build -p archmaker` → ELF `target/debug/archmaker` | ok |
| Tests unitarios `save_export*` (picker simulado) | ok (suite lib) |
| Humo GUI interactivo del diálogo `rfd` | **no ejecutado** — requiere portal de escritorio estable; no se lanza GUI en el agent |

Lógica de cancelar/sobrescribir/atómico: `f5-desktop-notes.md` + tests Tauri. Web verifica descarga + digest (paridad selección→export).

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ reviewers:
- Plan: FORGE-INTEGRITY-2026-10-18
- SHA auditado / inicial: `ff1c4fa24d8ae818fab3cc4f38c8f3cb8ab80e07`
- SHA de trabajo (baseline residual): `dcb96b726efd2ec5e50a9732168c5e6e41898669` (`origin/main` al abrir la serie residual)
- SHA candidato de esta serie residual: `c0cbc25dd6e51d6320cac5953103bc353709e4ed` (rama `fix/forge-integrity-residual-tests`; fusionar #168/#169/#170)
- SHA tip post-GUI (H17 + higiene + as-built + AGENTS): `2aaf5a3a591e7fa6ce835a5edda6e386dda97665` (`main` tras #171–#174)
- Dictamen: **NO-GO** de cierre completo. Subconjunto web/core de integridad de cara y contratos v2 corregido en PRs; desktop/offline **blocked**; revisión independiente **pending**. `technicalResult` V8: **no emitido**.

## Autoridad y bloqueos explícitos
Expand Down Expand Up @@ -73,16 +73,19 @@ reviewers:

## Nota de mantenibilidad GUI (post-H17)

Higiene de tokens en `styles.css` (CSS muerto Sencillo/Avanzado, literales → tokens, capa `overrides` vacía; rail current documentado como herencia selected). Sin V8/GO. PR de higiene de diseño tras #171.
Higiene de tokens en `styles.css` (CSS muerto Sencillo/Avanzado, literales → tokens, capa `overrides` vacía; rail current documentado como herencia selected) en #172. As-built `App.tsx` refrescado en #173. Hechos en `AGENTS.md` (#174). Sin V8/GO.

## PRs de la serie residual (2026-10-18)
## PRs de la serie residual y follow-ups GUI (2026-10-18)

| PR | Tema |
| ---- | ------------------------------------- |
| #168 | H15 foco residual |
| #169 | H06/H09/H10 catálogo y etiquetas |
| #170 | H16 T42 + H01 cadena + este registro |
| #171 | H17 CSP `/forge-face.css` + boot gate |
| #172 | Higiene tokens / baselines / a11y F6 |
| #173 | Hash as-built `App.tsx` |
| #174 | `AGENTS.md` CSP + integridad |

## Comandos locales de referencia (serie residual)

Expand Down
1 change: 1 addition & 0 deletions docs/10-delivery/closure/inventory.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ dependsOn:
- Documento: DOC-DEL-CLO-INV-001 · Estado: draft · Propietario: Arquitectura
- `BASE_SHA` observado: `56c2a198cc36da3a30d727487f082d13fda1b1f5`
- `SOURCE_SHA_F0` es el commit que contiene este árbol. No se escribe aquí por adelantado y el manifiesto de evidencia no guarda su propio digest.
- Tip post-integridad/GUI (denominadores F0 intactos): `2aaf5a3a591e7fa6ce835a5edda6e386dda97665` (#168–#174). No reescribe este inventario.
- Esto no acepta el alcance ni sustituye a un revisor independiente. No reabre OP-1..OP-8.

## Targets
Expand Down
2 changes: 2 additions & 0 deletions docs/10-delivery/forge-declarative-scope.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ dependsOn:

- Documento: DOC-DEL-FORGE-DECL-001 · Estado: draft · Propietario: Arquitectura · Fecha: 2026-10-17
- Base GitHub: `b6c0b50a6dcb5b42410d5e067019cf323494ccc4` (`origin/main`).
- Tip GUI (CSP/higiene, sin cambio de autoridad): `2aaf5a3a591e7fa6ce835a5edda6e386dda97665` (#171–#174).
`executionStatus` permanece `not-executed`; este alcance sigue `draft` / `pending`.
- **No reescribe** [`mvp5-scope.md`](mvp5-scope.md): MVP-5 sigue cerrado; este documento registra un
alcance _adicional_ pendiente de `accepted` para sondas de solo lectura y UI posteriores.

Expand Down
16 changes: 10 additions & 6 deletions docs/10-delivery/mvp5-gap-spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ approvalStatus: pending
implementationStatus: not-started
verificationStatus: not-verified
releaseStatus: ineligible
# historical-cara: cuerpo «Cara y pasos» / preguntas Sencillo-Avanzado = pre-Forge;
# as-built vigente en docs/10-delivery/closure/ y apps/web (RAIL_STEPS).
owners:
- architecture
- release
Expand Down Expand Up @@ -35,7 +37,7 @@ dependsOn:

1. La autoridad de alcance es DOC-DEL-MVP5-001. Este documento detalla el hueco; no redefine el alcance.
2. La semántica vive en Rust. Las listas de `apps/web/src/forge-face.ts` son presentación duplicada, no una segunda fuente.
3. La cara a conectar es `/home/alexendros/Aplicaciones/Repertorio/archmaker_forge.html` (16 oct, fuera del repo). `reference/v5.1/` sigue inmutable; el canon de opciones sigue siendo [`docs/12-research/html-catalog-matrix.md`](../12-research/html-catalog-matrix.md), regenerado desde `reference/v5.1/index.html`.
3. Referencia visual histórica (fuera del repo): `/home/alexendros/Aplicaciones/Repertorio/archmaker_neubat.html` (nombre de archivo conservado; no es norma G6). Runtime: `apps/web/`. `reference/v5.1/` sigue inmutable; el canon de opciones sigue siendo [`docs/12-research/html-catalog-matrix.md`](../12-research/html-catalog-matrix.md), regenerado desde `reference/v5.1/index.html`.
4. Versiones y megabytes del HTML siguen «no verificada» (CON-011). Kernel 7.1.2, tamaños y refs pacman literales no entran al catálogo como hechos.
5. ADR-0011 permanece `proposed`. No se crean esquemas de cláusula nuevos.
6. MockCorePort del baseline MVP-4 se queda. La paridad posterior es la de las operaciones CorePort que ya existen, en Tauri y WASM.
Expand Down Expand Up @@ -74,13 +76,15 @@ Dejar escrito qué falta para el slice MVP-5 respecto del baseline `implementati

Cuando el alcance esté `accepted`, el producto debe poder seleccionar, resolver, validar y exportar un draft con las opciones de la matriz, sin escribir imagen ni llamar a pacman. Hasta ese acto, nadie implementa el slice: el propio alcance lo dice en el criterio de salida.

## Cara y pasos
## Cara y pasos (histórico pre-Forge; no as-built)

La cara externa y la UI actual (`RAIL_STEPS` en `forge-face.ts`) muestran seis pasos: Intención, Sistema base, Entorno, Apps, Identidad, Revisión, más Sencillo/Avanzado.
> **No as-built.** La cara vigente (2026-10-17+) es experiencia única: Disco y particiones → Sistema base → Entorno → Apps → Identidad y seguridad → Revisión. Sin Sencillo/Avanzado. Ver banner superior y `docs/10-delivery/closure/honest-ux.md`.

El canon semántico de MVP-5 son cinco pasos de la matriz: base, environment, libpacks, apps, build. Intención, identidad, revisión y el modo Sencillo/Avanzado siguen siendo presentación. `archmaker.face.intent`, `archmaker.face.hostname` y `archmaker.face.encrypt` no se promueven a entidades de catálogo. La pantalla de laboratorio puede quedar como prueba, como ya permite el alcance.
Texto histórico (estado _previo_ al incremento Forge): la cara externa y la UI de entonces listaban Intención, Sistema base, Entorno, Apps, Identidad, Revisión, más Sencillo/Avanzado.

Sencillo/Avanzado no añade una regla. Oculta en la vista opciones ya clasificadas. Si el catálogo no tiene el atributo que distingue DE de WM, o la capa que el modo sencillo enseña, ese atributo es un hueco explícito de `catalog-matrix`, no un filtro nuevo en TypeScript ni una regla R005.
El canon semántico de MVP-5 siguen siendo cinco pasos de la matriz: base, environment, libpacks, apps, build. Identidad/revisión y (históricamente) Intención/modo dual son o fueron presentación; `archmaker.face.intent`, `archmaker.face.hostname` y `archmaker.face.encrypt` no se promueven a entidades de catálogo.

Sencillo/Avanzado (histórico) no añadía una regla: solo ocultaba opciones. El atributo ausente DE/WM o capa es hueco de `catalog-matrix`, no filtro nuevo en TypeScript ni R005. **Cerrado en cara:** no se restaura el modo dual.

Controles de la cara que no tienen fila en la matriz no se inventan: se dejan sin opción de catálogo.

Expand Down Expand Up @@ -156,7 +160,7 @@ Rust sigue siendo la única autoridad semántica. TypeScript declara la frontera
## Preguntas abiertas

- Quién firma MVP-5-01. No es un cambio que este documento aplique solo.
- Si, al aceptar el alcance, Sencillo/Avanzado se queda como filtro de vista o pasa a metadato de catálogo. Recomendación de esta spec: filtro de vista; el atributo ausente es hueco, no regla nueva.
- ~~Si Sencillo/Avanzado se queda como filtro de vista o metadato de catálogo.~~ **Cerrada (cara Forge):** experiencia única; sin modo dual. El atributo ausente DE/WM sigue siendo hueco de catálogo, no regla nueva.

## Trazabilidad

Expand Down
Loading