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
1 change: 1 addition & 0 deletions .github/workflows/docs-validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,7 @@ jobs:
# Dependencias fijadas (supply-chain). Autoridad de gates: contracts/governance/gates/.
python3 -m pip install --no-input --disable-pip-version-check pyyaml==6.0.2 "jsonschema==4.23.0"
python3 tools/validate_front_matter.py
python3 tools/html_catalog_matrix.py --check
python3 tools/validate_schema_refs.py
python3 tools/gates.py
python3 tools/validate_traceability.py
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

## Restricciones

- No desarrollar funcionalidades mientras `planning-v1` sea No-Go.
- Funcionalidad nueva solo dentro del veredicto vigente (CONDITIONAL-CLEAR hasta MVP-4). Runner, imagen real, root, discos y shell siguen cerrados hasta un alcance `accepted` y una reevaluación del veredicto.
- No ejecutar strings heredados `cmd`, hooks, `pacstrap` ni shell.
- Rust es la única autoridad semántica; TypeScript no duplica reglas.
- MVP no usa root, discos, shell, sidecars ni instalación real.
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ Repositorio de baseline MVP-0.1 — walking skeleton stabilizado. Este repositor
- Gate global (mecánico): **Clear** — todos los gates G0–G10 están `complete`. Autoridad: [`docs/00-governance/go-no-go.md`](docs/00-governance/go-no-go.md) y [`docs/10-delivery/gates.md`](docs/10-delivery/gates.md).
- Veredicto de gobierno (R13): **CONDITIONAL-CLEAR — walking skeleton MVP-0 únicamente**. Autoriza el vertical slice de [`docs/10-delivery/walking-skeleton.md`](docs/10-delivery/walking-skeleton.md); el MVP completo, el runner, los privilegios y Enterprise quedan bloqueados.
- Desarrollo funcional: autorizado walking skeleton MVP-0.1 (rebanada vertical, sin runner ni privilegios).
- Siguiente fase planificada: MVP-1 (domain/schema/catalog/migrations) — ver [`docs/10-delivery/mvp1-scope.md`](docs/10-delivery/mvp1-scope.md).
- Baseline vigente: `implementation-baseline-mvp4`. Los slices MVP-1..MVP-4 están en el árbol; el README antiguo que señalaba MVP-1 como siguiente fase quedó atrás.
- Siguiente slice del roadmap, todavía sin aceptar: MVP-5 ([`docs/10-delivery/mvp5-scope.md`](docs/10-delivery/mvp5-scope.md)). Empaquetado en [`docs/10-delivery/mvp6-scope.md`](docs/10-delivery/mvp6-scope.md). Imagen en [`docs/10-delivery/iso-scope.md`](docs/10-delivery/iso-scope.md). Ninguno de esos borradores autoriza implementación.
- Fuentes históricas: `reference/v5.1/`, conservadas por hash; walking skeleton en [`docs/10-delivery/walking-skeleton.md`](docs/10-delivery/walking-skeleton.md) y [`docs/10-delivery/implementation-plan-mvp0.md`](docs/10-delivery/implementation-plan-mvp0.md).
- Rust: autoridad de dominio y casos de uso (compilable nativo + WASM).
- React: presentación e interacción (adapters Tauri y WASM).
Expand Down
3 changes: 2 additions & 1 deletion docs/00-governance/plan-status.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ reviewers:
- Estado: in-review
- Gate global: CONDITIONAL-CLEAR — walking skeleton MVP-0 + slices MVP-1..MVP-4 (sin runner)
- Baseline vigente: `implementation-baseline-mvp4` (predecesores mvp0.1..mvp3 intactos)
- Fecha de corte: 2026-10-12
- Borradores posteriores, sin ampliar el veredicto: `docs/10-delivery/mvp5-scope.md`, `docs/10-delivery/mvp6-scope.md`, `docs/10-delivery/iso-scope.md`
- Fecha de corte: 2026-10-14

## Bloqueos P0

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
---
id: ADR-0010
phase: planning
priority: P0
documentStatus: in-review
approvalStatus: pending
implementationStatus: not-started
verificationStatus: not-verified
releaseStatus: ineligible
owners:
- product
reviewers:
- independent-reviewer
---

# ADR-0010: Marca y nombre de artefacto público

- Estado: proposed
- Fecha: 2026-10-14
- Propietario: Producto
- Requisitos: NFR-MARK-001, FR-EXPORT-001, DEC-005, DEC-008

## Contexto

La política de marcas de Arch Linux, versión 2021-04-18
(<https://terms.archlinux.org/docs/trademark-policy/>), dice: «Any mark beginning with the
letters ARCH is sufficiently similar to one or more of the trademarks that permission will be
needed in order to use it.» Desaconseja nombres del estilo ArchMan o ArchTools para una
herramienta hecha para Arch. Un derivado con cambios sustanciales —otro kernel, paquetes fuera
de los repos oficiales, otro escritorio— puede decir «based on Arch Linux» o «derived from
Arch Linux», y no puede llamar al producto Arch Linux ni usar el logo. El uso comercial y
cualquier uso no listado piden licencia a `trademarks@archlinux.org`.

El id técnico del repo y de los crates ya usa ese prefijo. El HTML de `reference/v5.1/` mete
kernels alternativos y paquetes `-bin`. Publicar una tienda o una imagen con ese nombre, o con
el logo de Arch, antes de una respuesta escrita deja el artefacto en el supuesto que la propia
política marca como pendiente de permiso.

## Drivers

- NFR-MARK-001: ningún artefacto público usa un signo que empiece por ARCH, ni el logo de Arch,
hasta permiso escrito o un nombre nuevo aceptado en este ADR.
- DEC-008: el host de la imagen es Arch x86_64; eso no concede la marca.
- DEC-005: la licencia del código es Apache-2.0 y no sustituye a la política de marcas.
- Coste: retirar una release ya anunciada sale más caro que congelar el nombre visible.

## Opciones

1. Seguir publicando el nombre actual en tiendas e imágenes, sin preguntar.
2. Congelar el nombre visible y el de la imagen hasta respuesta de `trademarks@archlinux.org`,
y mientras tanto describir la imagen como derivada de Arch Linux, sin logo de Arch.
3. Elegir ya otro nombre público y dejar el id técnico de los crates como está.

## Decisión

Se adopta la opción 2 como propuesta, no como permiso de publicación. El id técnico en crates,
contratos y catálogo no se renombra en este ADR. La cadena visible en una ficha de tienda, en
el nombre de la imagen y en cualquier logo queda congelada hasta que ocurra una de estas dos
cosas: respuesta escrita del Project Lead, o una revisión accepted de este ADR que fije la
opción 3. No se abre un `DEC-*` accepted hasta esa aceptación: el registro de decisiones no
gana una fila nueva en este documento.

## Consecuencias

- MVP-6 y el alcance de ISO citan NFR-MARK-001 y no dan por hecho el nombre de la imagen.
- Los documentos internos pueden nombrar el repositorio. Un artefacto que el usuario descarga
no puede presentarse como Arch Linux oficial ni usar el lema «A simple, lightweight Linux
distribution».
- Los paquetes `-bin` no se incrustan en la imagen. Incluirlos aleja el resultado de un remix
y acerca el conflicto de marca y de licencia.

## Riesgos

- Publicar antes de la respuesta: el Project Lead puede exigir el cambio con la release ya fuera.
- Renombrar crates a la vez que la marca: coste de migración que este ADR deja fuera.

## Verificación

- Ningún workflow de release escribe un nombre de imagen ni un metainfo de tienda hasta que
este ADR pase a accepted con la opción 2 cerrada por correo o con la opción 3.
- Revisión del diff de empaquetado: ausencia de logo de Arch y del lema oficial.

## Sustituye

—

## Sustituido por

—
1 change: 1 addition & 0 deletions docs/02-architecture/adr/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ Propietario, Requisitos) y las secciones de `templates/adr.md`. Estados posibles
| [ADR-0007](ADR-0007-canonicalizacion-y-hashing.md) | Canonicalización y hashing | accepted | 2026-10-06 |
| [ADR-0008](ADR-0008-catalogos-firmados-y-procedencia.md) | Catálogos firmados y procedencia | accepted | 2026-10-05 |
| [ADR-0009](ADR-0009-actualizacion-firmada-mvp.md) | Actualización firmada en MVP | accepted | 2026-10-05 |
| [ADR-0010](ADR-0010-marca-y-nombre-de-artefacto.md) | Marca y nombre de artefacto público | proposed | 2026-10-14 |

## Crear un ADR

Expand Down
179 changes: 179 additions & 0 deletions docs/10-delivery/iso-scope.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
---
id: DOC-DEL-ISO-001
phase: v1
priority: P0
documentStatus: in-review
approvalStatus: pending
implementationStatus: not-started
verificationStatus: not-verified
releaseStatus: ineligible
owners:
- architecture
reviewers:
- independent-reviewer
dependsOn:
- id: ADR-0010
- id: ADR-0003
expectedDocumentStatus: accepted
- id: ADR-0004
expectedDocumentStatus: accepted
- id: DOC-RES-HTML-001
- id: DOC-GOV-GNG-001
---

# Alcance de imagen — perfil, descarga y constitución

- Documento: DOC-DEL-ISO-001 · Estado: in-review · Propietario: Arquitectura · Fecha: 2026-10-14
- Fase de producto: v1. El veredicto vigente no autoriza runner, root, discos ni shell.
- Aceptar este documento es condición necesaria y no suficiente: hace falta una línea nueva
en `docs/00-governance/go-no-go.md` antes de escribir el exporter o llamar a `mkarchiso`.

## Objetivo

Un manifiesto sellado produce un perfil archiso declarativo. Un runner separado, cuando el
veredicto lo abra, ejecuta una sola corrida de `mkarchiso` y publica el digest. archiso no se
reimplementa. `pacstrap` no es el constructor. El dominio Rust no importa archiso (ADR-0003).

Estructura de perfil, según <https://wiki.archlinux.org/title/Archiso> y
`README.profile.rst` del proyecto archiso: `airootfs/`, arranque, `packages.x86_64` (un
nombre por línea), `pacman.conf`, `profiledef.sh` con `arch=x86_64`. El nombre de la imagen
no dice Arch Linux (ADR-0010, NFR-MARK-001). aarch64 queda fuera (DEC-008) aunque el HTML lo liste.

## FR-ART-ISO-001 — Perfil declarativo desde el manifiesto

- Prioridad: P0
- Fase: v1
- Estado: draft
- Journey/UC: JNY-001 / UC-001

### Enunciado

Dado un manifiesto sellado, el exporter escribe un perfil archiso: `packages.x86_64` con los
nombres de paquete redistribuibles, y `profiledef.sh` como configuración generada, no como
script que el usuario pegue.

### Motivo

Hoy una persona edita el perfil a mano por cada variante. El manifiesto ya es el digest común.
El ahorro está en esa autoría, no en la CPU de la corrida.

### Criterios Given/When/Then

- **Positivo:** Given un manifiesto sin errores bloqueantes, When se exporta el perfil, Then `packages.x86_64` lista esos nombres, uno por línea, y el fichero no contiene `pacstrap` ni `cmd`.
- **Positivo:** Given el mismo manifiesto, When se exporta dos veces, Then los bytes del perfil coinciden.
- **Negativo:** Given una opción de clase `no-redistribuible-candidato`, When se exporta, Then su binario no se copia a `airootfs/` y el perfil solo puede nombrar la obtención diferida.
- **Negativo:** Given un manifiesto con diagnóstico bloqueante, When se exporta, Then no hay perfil.

### Datos e interfaces

`DM-MANIFEST`, `DM-ARTIFACT`, target nuevo distinto de `archmaker-profile`, `archinstall-profile` y `report`. El target nuevo no existe en contrato hasta un ADR de export que siga a la aceptación de este alcance. DEC-001 fija el conjunto actual; ampliarlo es parte del issue ISO-01, no un cambio silencioso.

### Validación y seguridad

VAL del exporter: rechazo de líneas con shell. THR-IMP-001. El dominio no enlaza archiso.

### Pruebas

Golden del perfil a partir de un manifiesto fixture. Inspección de que `pacstrap` no aparece.

### Exclusiones

No ejecuta `mkarchiso`. No llama a archinstall. No instala en disco.

## FR-FETCH-001 — Descarga tipada

- Prioridad: P0
- Fase: v1
- Estado: draft
- Journey/UC: JNY-001

### Enunciado

La obtención de paquetes del espejo es una operación tipada del runner: conjunto cerrado de
nombres salidos del manifiesto, digest cuando el espejo lo da, error tipado si no hay red.

### Motivo

El configurador tiene que seguir usable sin red (NFR-OFF-001). La constitución de la imagen
no puede disfrazarse de string `cmd` ni de `pacstrap` en la UI (CON-005, CON-012).

### Criterios Given/When/Then

- **Positivo:** Given un perfil sellado y red disponible, When el runner descarga, Then cada paquete pedido está en el conjunto del perfil y el journal cita el digest.
- **Negativo:** Given el mismo perfil sin red, When el configurador arranca, Then la UI opera y la constitución falla con error tipado, sin colgar el proceso.
- **Negativo:** Given un nombre que no está en el perfil, When se pide descargarlo, Then el runner lo rechaza.
- **Negativo:** Given un paquete `-bin` no redistribuible, When se constituye la imagen, Then el blob no viaja dentro de `airootfs/`.

### Datos e interfaces

`DM-PLAN`, `DM-SESSION`, transporte ya decidido en DEC-004 y todavía no implementado. Operación nueva del runner, no un shell libre.

### Validación y seguridad

THR-RUN y NFR-SEC-001. Pruebas con fixture local. Ningún test llama a `pacstrap` en el puesto del operador.

### Pruebas

Fixture de espejo local. Caso sin red. Caso de nombre fuera de conjunto.

### Exclusiones

No abre el disco del host. No eleva privilegios dentro del WebView (ADR-0004).

## FR-ISO-001 — Una corrida y un digest

- Prioridad: P0
- Fase: v1
- Estado: draft
- Journey/UC: JNY-001

### Enunciado

El runner, en proceso separado, ejecuta una corrida de `mkarchiso` sobre el perfil sellado y
publica la imagen x86_64 UEFI más `SHA256SUMS`.

### Motivo

archiso ya construye la imagen. Volver a escribir ese constructor no baja el coste de CPU.
Lo que este requisito añade es el digest ligado al manifiesto y la prueba de arranque en VM.

### Criterios Given/When/Then

- **Positivo:** Given un perfil sellado, When la corrida termina, Then existe un fichero de imagen cuyo SHA-256 está en `SHA256SUMS` y el nombre no usa la marca de Arch (NFR-MARK-001).
- **Positivo:** Given la imagen, When una VM UEFI x86_64 arranca, Then llega al entorno vivo previsto por el perfil.
- **Negativo:** Given ADR-0010 sin aceptar, When alguien pide la corrida, Then no se publica imagen.
- **Negativo:** Given el pipeline del HTML, When se genera el perfil, Then la etapa `pacstrap` no se copia.

### Datos e interfaces

Perfil de FR-ART-ISO-001. Herramienta externa `mkarchiso`, citada y no vendada. Host de build: Arch x86_64.

### Validación y seguridad

La corrida no ocurre en el portátil del operador como efecto de pulsar Exportar. Job aislado. Sin telemetría (DEC-010).

### Pruebas

Job de CI o de runner desechable, más evidencia de arranque UEFI. Minutos y tarifa anotados según NFR-COST-001. En repo público y runner estándar la tarifa de Actions es 0 USD; un runner grande se anota aparte.

### Exclusiones

aarch64. Instalación en el disco del operador. Reimplementar archinstall. Llamar a la imagen Arch Linux.

## Coste de este lado

La corrida de `mkarchiso` es la misma que la de un perfil a mano: no hay ahorro de CPU ni de
espejo. El ahorro es el número de ficheros que una persona edita: cero, porque `packages.x86_64`
sale del manifiesto. archinstall sigue siendo el instalador; el sobre experimental ya existente
no se convierte en otro instalador.

## Issues

| # | Issue | Depende de | Gate | Owner | Criterio Done |
| ------ | ------------------------------------------------------------------------ | ---------- | ----------- | ------------ | ------------------------------------------- |
| ISO-01 | Aceptar este alcance, ADR-0010 y una reevaluación del veredicto | — | G2, G8, G10 | product | `go-no-go.md` nombra el slice |
| ISO-02 | Target de export del perfil, con corpus, sin ampliar DEC-001 en silencio | 01 | G4, G5 | architecture | Golden sin `pacstrap` ni `cmd` |
| ISO-03 | Operación de descarga tipada con fixture | 02 | G8 | security | Rechazo sin red y rechazo de nombres ajenos |
| ISO-04 | Corrida `mkarchiso` en runner separado y prueba de VM | 03 | G10 | release | Imagen + SHA-256 + arranque UEFI anotado |

Hasta ISO-01 el producto exporta `archmaker-profile`, el sobre experimental `archinstall-profile` y `report`. No constituye una imagen.
71 changes: 71 additions & 0 deletions docs/10-delivery/mvp5-scope.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
---
id: DOC-DEL-MVP5-001
phase: MVP
priority: P0
documentStatus: in-review
approvalStatus: pending
implementationStatus: not-started
verificationStatus: not-verified
releaseStatus: ineligible
owners:
- architecture
reviewers:
- independent-reviewer
dependsOn:
- id: DOC-DEL-MVP4-001
expectedDocumentStatus: accepted
- id: DOC-RES-HTML-001
- id: DOC-GOV-GNG-001
---

# Alcance MVP-5 — paridad de adaptadores y UI de cinco pasos

- Documento: DOC-DEL-MVP5-001 · Estado: in-review · Propietario: Arquitectura · Fecha: 2026-10-14
- Entrada: baseline `implementation-baseline-mvp4`. El veredicto CONDITIONAL-CLEAR no se amplía
por existir este borrador.
- Este alcance no autoriza implementación hasta pasar a `accepted`.

## Objetivo

Recorrer en la UI de producto los cinco pasos del canon visual
(`reference/v5.1/index.html`, matriz en `docs/12-research/html-catalog-matrix.md`) contra el
catálogo local, y acercar Tauri y WASM a la misma frontera CorePort. La semántica sigue en
Rust. No se construye ISO, no se descarga el espejo y no se llama a pacman.

## Incluido

| Área | Contenido | Anclas |
| -------- | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------- |
| Catálogo | Cada opción de la matriz entra como definición sin `cmd`, sin versión inventada y sin tamaño presentado como hecho | DOC-RES-HTML-001, FR-CAT-001, CON-011 |
| UI | Cinco pasos: base, environment, libpacks, apps, build. Tokens y contratos ya escritos | DOC-UX-COMP-001, DEC-009 |
| Paridad | Las operaciones ya existentes del CorePort devuelven el mismo resultado en Tauri y WASM | NFR-DET-001, NFR-PORT-001 |
| Reglas | Las cuatro reglas del HTML, reescritas al AST aceptado | DOC-VAL-OP-001 |

## Excluido

- Runner, root, discos, shell, `pacstrap`, `mkarchiso`, catálogo remoto, firma de catálogo en carga.
- Presets (`FR-PRESET-001` sigue deferred). La UI no finge aplicarlos.
- Cifras de versión o de megabytes del HTML.
- Nombre público de tienda o de imagen (ADR-0010).
- Rediseño visual. La pantalla de laboratorio de seis pasos puede quedar como prueba.

## Issues

| # | Issue | Depende de | Gate | Owner | Criterio Done |
| -------- | ------------------------------------------------------------------------ | ---------- | ------- | ------------ | ---------------------------------------------------------- |
| MVP-5-01 | Aceptar este alcance | — | G2, G10 | product | Documento `accepted` |
| MVP-5-02 | Ampliar el catálogo local con la matriz, sin afirmaciones no verificadas | 01 | G4 | data | Cada id HTML está en catálogo o sigue como hueco explícito |
| MVP-5-03 | UI de cinco pasos con los contratos existentes | 02 | G6 | ux | Seleccionar, resolver, validar y exportar sin escribir ISO |
| MVP-5-04 | Paridad Tauri/WASM del mismo draft | 02 | G5, G9 | architecture | Mismos bytes de manifiesto |
| MVP-5-05 | Tag de baseline solo tras 01–04 y CI verde | 04 | G10 | release | Tag nuevo; los anteriores no se mueven |

## Trazabilidad

- Requisitos: FR-CAT-001, FR-DRAFT-001, FR-RESOLVE-001, FR-VALIDATE-001, FR-MANIFEST-001, FR-EXPORT-001, NFR-DET-001, NFR-ACC-001, NFR-OFF-001, NFR-PORT-001.
- Riesgos: RSK-004, RSK-009.
- Amenazas: THR-IMP-001.
- Pruebas: las de paridad y a11y ya existentes, más la matriz regenerada en CI.

## Criterio de salida

Los issues 01–05 cerrados o con residual fechado. Hasta el 01, nadie implementa el slice.
Loading
Loading