@rlabs-cl/arketum 0.0.0-stage → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +140 -0
- package/LICENSE +42 -0
- package/README.md +67 -2
- package/THIRD-PARTY-NOTICES +2428 -0
- package/catalogo-de-ejemplo/agentes.yaml +11 -0
- package/catalogo-de-ejemplo/arquetipos/ajuste.yaml +54 -0
- package/catalogo-de-ejemplo/arquetipos/arquetipo-autor.yaml +72 -0
- package/catalogo-de-ejemplo/arquetipos/arquitectura-de-sistema.yaml +72 -0
- package/catalogo-de-ejemplo/arquetipos/despliegue-compose.yaml +104 -0
- package/catalogo-de-ejemplo/arquetipos/digestion.yaml +97 -0
- package/catalogo-de-ejemplo/arquetipos/documento-academico.yaml +131 -0
- package/catalogo-de-ejemplo/arquetipos/inventario-funcional.yaml +42 -0
- package/catalogo-de-ejemplo/arquetipos/levantamiento-de-infraestructura.yaml +117 -0
- package/catalogo-de-ejemplo/arquetipos/plan-de-migracion.yaml +40 -0
- package/catalogo-de-ejemplo/arquetipos/prd.yaml +62 -0
- package/catalogo-de-ejemplo/arquetipos/radio-de-alcance.yaml +141 -0
- package/catalogo-de-ejemplo/arquetipos/rca.yaml +68 -0
- package/catalogo-de-ejemplo/arquetipos/servicio-con-integracion.yaml +154 -0
- package/catalogo-de-ejemplo/carriles/ajuste.yaml +14 -0
- package/catalogo-de-ejemplo/carriles/arquetipo.yaml +13 -0
- package/catalogo-de-ejemplo/carriles/comprobacion.yaml +23 -0
- package/catalogo-de-ejemplo/carriles/correccion.yaml +25 -0
- package/catalogo-de-ejemplo/carriles/despliegue.yaml +36 -0
- package/catalogo-de-ejemplo/carriles/digestion.yaml +14 -0
- package/catalogo-de-ejemplo/carriles/funcionalidad.yaml +34 -0
- package/catalogo-de-ejemplo/carriles/migracion.yaml +27 -0
- package/catalogo-de-ejemplo/carriles/nuevo.yaml +30 -0
- package/catalogo-de-ejemplo/formas/aplicacion-por-capas.yaml +185 -0
- package/catalogo-de-ejemplo/formas/juego-terminal.yaml +161 -0
- package/catalogo-de-ejemplo/formas/monorepo-de-aplicaciones.yaml +207 -0
- package/catalogo-de-ejemplo/incluido.yaml +3 -0
- package/catalogo-de-ejemplo/stacks/go/e2e-terminal/e2e_http.py +36 -0
- package/catalogo-de-ejemplo/stacks/go/e2e-terminal/pytest.ini +5 -0
- package/catalogo-de-ejemplo/stacks/go/e2e-terminal/requirements.txt +2 -0
- package/catalogo-de-ejemplo/stacks/go/e2e-terminal/terminal_e2e.py +112 -0
- package/catalogo-de-ejemplo/stacks/go/e2e-terminal/terminal_prueba.py +118 -0
- package/catalogo-de-ejemplo/stacks/go/suelo-aplicacion-por-capas/requirements.txt +1 -0
- package/catalogo-de-ejemplo/stacks/go/suelo-aplicacion-por-capas/suelo.py +102 -0
- package/catalogo-de-ejemplo/stacks/go/suelo-aplicacion-por-capas/terminal_prueba.py +118 -0
- package/catalogo-de-ejemplo/stacks/go/suelo-juego-terminal/requirements.txt +1 -0
- package/catalogo-de-ejemplo/stacks/go/suelo-juego-terminal/suelo.py +86 -0
- package/catalogo-de-ejemplo/stacks/go/suelo-juego-terminal/terminal_prueba.py +118 -0
- package/catalogo-de-ejemplo/stacks/go.yaml +74 -0
- package/catalogo-de-ejemplo/stacks/python/e2e-terminal/e2e_http.py +36 -0
- package/catalogo-de-ejemplo/stacks/python/e2e-terminal/pytest.ini +5 -0
- package/catalogo-de-ejemplo/stacks/python/e2e-terminal/requirements.txt +2 -0
- package/catalogo-de-ejemplo/stacks/python/e2e-terminal/terminal_e2e.py +112 -0
- package/catalogo-de-ejemplo/stacks/python/e2e-terminal/terminal_prueba.py +118 -0
- package/catalogo-de-ejemplo/stacks/python/suelo-aplicacion-por-capas/requirements.txt +1 -0
- package/catalogo-de-ejemplo/stacks/python/suelo-aplicacion-por-capas/suelo.py +102 -0
- package/catalogo-de-ejemplo/stacks/python/suelo-aplicacion-por-capas/terminal_prueba.py +118 -0
- package/catalogo-de-ejemplo/stacks/python/suelo-juego-terminal/requirements.txt +1 -0
- package/catalogo-de-ejemplo/stacks/python/suelo-juego-terminal/suelo.py +86 -0
- package/catalogo-de-ejemplo/stacks/python/suelo-juego-terminal/terminal_prueba.py +118 -0
- package/catalogo-de-ejemplo/stacks/python.yaml +167 -0
- package/catalogo-de-ejemplo/stacks/typescript/e2e-node/app.mjs +182 -0
- package/catalogo-de-ejemplo/stacks/typescript/e2e-node/requirements.txt +1 -0
- package/catalogo-de-ejemplo/stacks/typescript/e2e-node/terminal_prueba.py +118 -0
- package/catalogo-de-ejemplo/stacks/typescript/e2e-node/terminal_puente.py +51 -0
- package/catalogo-de-ejemplo/stacks/typescript/e2e-node/vitest.config.mjs +12 -0
- package/catalogo-de-ejemplo/stacks/typescript/suelo-aplicacion-por-capas/requirements.txt +1 -0
- package/catalogo-de-ejemplo/stacks/typescript/suelo-aplicacion-por-capas/suelo.py +102 -0
- package/catalogo-de-ejemplo/stacks/typescript/suelo-aplicacion-por-capas/terminal_prueba.py +118 -0
- package/catalogo-de-ejemplo/stacks/typescript/suelo-juego-terminal/requirements.txt +1 -0
- package/catalogo-de-ejemplo/stacks/typescript/suelo-juego-terminal/suelo.py +86 -0
- package/catalogo-de-ejemplo/stacks/typescript/suelo-juego-terminal/terminal_prueba.py +118 -0
- package/catalogo-de-ejemplo/stacks/typescript.yaml +88 -0
- package/dist/mcp/arketum.js +3 -0
- package/dist/mcp/ci-cli.js +2 -0
- package/dist/mcp/cli.js +2 -0
- package/dist/mcp/comun-ZEXDDERM.js +1 -0
- package/dist/mcp/comun-ZTEHRDHC.js +1 -0
- package/dist/mcp/panel-cli.js +2 -0
- package/dist/mcp/telemetria-cli.js +1 -0
- package/package.json +33 -4
- package/server.json +15 -0
- package/telemetria.json +27 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Levantamiento de infraestructura.
|
|
2
|
+
#
|
|
3
|
+
# Artefacto de trabajo del carril `despliegue`: va en un paso con la marca
|
|
4
|
+
# `pendientes`, lo llevan los papeles de la fase 1 (el analista habla con la
|
|
5
|
+
# persona; el arquitecto deduce lo técnico, propone el modo y redacta los
|
|
6
|
+
# pendientes) y alimenta al paso de sistema y al de evidencia `preparado`.
|
|
7
|
+
# Indaga: dónde se despliega, en qué entornos, con qué accesos y
|
|
8
|
+
# configuraciones, quién opera, hasta dónde se automatiza y cómo se sabe que
|
|
9
|
+
# funciona. No rellena una lista.
|
|
10
|
+
#
|
|
11
|
+
# Lo que no se puede responder en la sesión es un `pendiente` (L1): Arketum
|
|
12
|
+
# genera el cuestionario, la unidad se pausa y las respuestas entran en el
|
|
13
|
+
# último nivel (L2), hijas de su pendiente. El vocabulario de los pendientes
|
|
14
|
+
# (`entorno`, `pendiente`, `respuesta`, `referencia`) es del núcleo.
|
|
15
|
+
name: levantamiento-de-infraestructura
|
|
16
|
+
version: 1.0.0
|
|
17
|
+
description: >-
|
|
18
|
+
Levantamiento completo de la infraestructura donde se despliega un sistema: alcance y entornos, accesos, configuración, operación, automatización y verificación, con lo que falta como pendientes que la persona trae fuera de la sesión. Termina en el modo de despliegue y en los requisitos técnicos de cada entorno. Elígelo antes de preparar un despliegue; para pedir funcionalidad corresponde un PRD.
|
|
19
|
+
tags: [proceso, despliegue, infraestructura]
|
|
20
|
+
|
|
21
|
+
kinds:
|
|
22
|
+
- name: desplegable
|
|
23
|
+
describes: "alcance (L0): un artefacto del proyecto que se despliega"
|
|
24
|
+
- name: entorno
|
|
25
|
+
describes: "alcance (L0): un entorno donde se despliega (`local`, `staging`, `produccion`), con su id como slug y `despliega: si|no` (si esta unidad lo despliega o solo lo prepara)"
|
|
26
|
+
- name: tema
|
|
27
|
+
describes: "lo que hay que saber de un entorno (L1), con su rol: `acceso`, `configuracion`, `operacion`, `automatizacion`, `verificacion`, u otro (`red`, `datos`, `coste`, `cumplimiento`, `recuperacion`…)"
|
|
28
|
+
- name: pendiente
|
|
29
|
+
describes: "lo que no se puede responder en la sesión (L1): `que`, `porque` (obligatorio), `donde`, `quien`, `respuesta` (`valor`, `referencia` o `confirmacion`) y `antes_de` (`preparar` o `desplegar:<entorno>`)"
|
|
30
|
+
- name: requisito
|
|
31
|
+
describes: "lo acordado (L2), como requisito: `tecnico` (con `entorno` el de cada entorno, con `modo` el del modo) o `decision` (con `antes_de: desplegar:<entorno>` la de un pendiente de antes de desplegar)"
|
|
32
|
+
- name: respuesta
|
|
33
|
+
describes: "la respuesta a un pendiente de antes de preparar (L2): `de` (el pendiente) y su `valor`, su `referencia` o su `confirmacion`"
|
|
34
|
+
- name: referencia
|
|
35
|
+
describes: "dónde vive un secreto que el despliegue necesita (L2): `referencia: <esquema>:<ruta>` y su verificación (`evidence: execution`, `expect: success`, `on: entorno`), o `verificable: no` con su `motivo`"
|
|
36
|
+
- name: documento
|
|
37
|
+
describes: el fichero del levantamiento, en la carpeta de trabajo del paso (nunca el cuestionario, que va fuera del repositorio)
|
|
38
|
+
|
|
39
|
+
extractors:
|
|
40
|
+
- mechanism: path
|
|
41
|
+
kind: documento
|
|
42
|
+
pattern: "<nombre>.md"
|
|
43
|
+
|
|
44
|
+
levels:
|
|
45
|
+
- id: L0
|
|
46
|
+
requiredRoles: []
|
|
47
|
+
title: ALCANCE
|
|
48
|
+
instruction: >
|
|
49
|
+
Declara qué se despliega (un `desplegable` por artefacto del proyecto) y en
|
|
50
|
+
qué entornos (un `entorno` por entorno, con su id como slug: `local`,
|
|
51
|
+
`staging`, `produccion`). Pregúntale a la persona dónde quiere tenerlo
|
|
52
|
+
funcionando y quién lo va a usar en cada sitio; no propongas todavía cómo.
|
|
53
|
+
Cada `entorno` lleva el atributo `despliega`: `si` si esta unidad lo
|
|
54
|
+
despliega y lo deja funcionando (entonces la unidad lleva el hito
|
|
55
|
+
`despliegue <entorno>`), `no` si solo lo prepara. Sale de lo que pide la
|
|
56
|
+
persona, no de lo que te resulte más cómodo: si dice «quiero verla
|
|
57
|
+
funcionando en mi portátil ya», `local` lleva `despliega: si`. Como mucho
|
|
58
|
+
un entorno se despliega en una unidad; los demás, en otra.
|
|
59
|
+
- id: L1
|
|
60
|
+
requiredRoles: [acceso, configuracion, operacion, automatizacion, verificacion]
|
|
61
|
+
title: LO QUE HAY QUE SABER
|
|
62
|
+
instruction: >
|
|
63
|
+
Indaga cada entorno: cada `entorno` del alcance tiene hijos aquí, y entre
|
|
64
|
+
todos cubren al menos los roles `acceso` (cuentas, permisos, credenciales:
|
|
65
|
+
dónde viven), `configuracion` (variables, dominios, puertos, registros de
|
|
66
|
+
imágenes), `operacion` (quién lo opera, cómo se actualiza, qué pasa si se
|
|
67
|
+
cae), `automatizacion` (hasta dónde se automatiza y qué despliega cada
|
|
68
|
+
cual) y `verificacion` (cómo se sabe que funciona después de desplegar).
|
|
69
|
+
La lista NO está cerrada: pregunta qué más hay (`red`, `datos`, `coste`,
|
|
70
|
+
`cumplimiento`, `recuperacion`…) y decláralo con su rol. En lo técnico de
|
|
71
|
+
infraestructura esta instrucción manda sobre el texto del papel: el
|
|
72
|
+
arquitecto sí nombra tecnologías, puertos, rutas y comandos. Lo que no se
|
|
73
|
+
puede responder en la sesión (un acceso que hay que pedir, un dato de otro
|
|
74
|
+
equipo) es un `pendiente`, hijo de su entorno, con `que`, `porque`
|
|
75
|
+
(obligatorio: para qué hace falta), `donde` (otro equipo, la consola del
|
|
76
|
+
proveedor, un contrato), `quien` (quién lo trae), `respuesta` (`valor` si
|
|
77
|
+
es un dato que no es secreto, `referencia` si es dónde vive un secreto,
|
|
78
|
+
nunca el secreto, o `confirmacion` si es algo hecho) y `antes_de`
|
|
79
|
+
(`preparar` si sin él no se puede preparar, o `desplegar:<entorno>` si
|
|
80
|
+
solo hace falta antes de desplegar ese entorno). Al aceptarse este nivel
|
|
81
|
+
con pendientes, Arketum devuelve el cuestionario.
|
|
82
|
+
fanout:
|
|
83
|
+
min: 5
|
|
84
|
+
max: 40
|
|
85
|
+
- id: L2
|
|
86
|
+
requiredRoles: []
|
|
87
|
+
title: LO ACORDADO
|
|
88
|
+
instruction: >
|
|
89
|
+
Declara el alcance acordado como requisitos (atributos `tipo`,
|
|
90
|
+
`requisito`, `titulo`, `sale_de` —la frase de la persona o el requisito
|
|
91
|
+
del que se deduce—, `porque` en un `tecnico`, `aceptacion` y `artefacto`:
|
|
92
|
+
el id del artefacto de despliegue del proyecto, donde viven). Un `tecnico`
|
|
93
|
+
por entorno con el atributo `entorno` (los entornos del proyecto son los
|
|
94
|
+
de esos técnicos), y el modo como un `tecnico` con el atributo `modo`
|
|
95
|
+
(`compose`, `pipeline`, `script` u otro) y su `porque`, que la persona
|
|
96
|
+
confirma en el gate; los demás técnicos con su `porque` («se automatiza
|
|
97
|
+
hasta staging», «producción la despliega operaciones con el script»). Las
|
|
98
|
+
`decision` que siguen abiertas. Una `referencia` por secreto que el
|
|
99
|
+
despliegue necesita (`referencia: <esquema>:<ruta>`; habituales: `vault`,
|
|
100
|
+
`aws-sm`, `gcp-sm`, `azure-kv`, `github-secret`, `1password`,
|
|
101
|
+
`k8s-secret`, `env`), con su verificación —`evidence: execution`,
|
|
102
|
+
`expect: success` y `on: entorno`: un comando que demuestra el acceso sin
|
|
103
|
+
imprimir el valor, como `aws sts get-caller-identity` o `gh secret list`
|
|
104
|
+
filtrado por nombre— o `verificable: no` con su `motivo`. Cada pendiente
|
|
105
|
+
del nivel anterior tiene aquí su hijo (en `parents`): si es `antes_de:
|
|
106
|
+
preparar`, una `respuesta` con `de: <pendiente>` y su `valor`, su
|
|
107
|
+
`referencia` o su `confirmacion`, según lo que pidió; si es
|
|
108
|
+
`desplegar:<entorno>`, una `decision` con `antes_de:
|
|
109
|
+
desplegar:<entorno>`, que queda por decidir y bloquea el hito de ese
|
|
110
|
+
entorno. UNA RESPUESTA `valor` DE LA QUE DEPENDA EL DESPLIEGUE (la región,
|
|
111
|
+
el dominio, el nombre del registro) SE RECOGE TAMBIÉN EN UN `tecnico`:
|
|
112
|
+
la `respuesta` no entra en la entrada del paso de sistema, y el técnico
|
|
113
|
+
sí. Nunca un secreto: Arketum rechaza lo que tenga su forma. Y el
|
|
114
|
+
fichero del levantamiento (tipo `documento`, con su `location`).
|
|
115
|
+
fanout:
|
|
116
|
+
min: 3
|
|
117
|
+
max: 80
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Plan de migración.
|
|
2
|
+
#
|
|
3
|
+
# Los movimientos que llevan del sistema actual al nuevo, cada uno con los
|
|
4
|
+
# artefactos que toca. Al aprobarse, fija los tocados de la unidad.
|
|
5
|
+
name: plan-de-migracion
|
|
6
|
+
version: 1.0.0
|
|
7
|
+
description: >-
|
|
8
|
+
Los movimientos que llevan un sistema existente a su forma nueva, en orden y con los artefactos que toca cada uno. Es el artefacto de trabajo del carril de migración que fija los tocados. Elígelo para planificar una migración; para acotar un cambio sin migrar corresponde el radio de alcance.
|
|
9
|
+
tags: [proceso, migracion, plan]
|
|
10
|
+
|
|
11
|
+
kinds:
|
|
12
|
+
- name: objetivo
|
|
13
|
+
describes: "pieza de la solicitud (L0): de dónde a dónde se migra"
|
|
14
|
+
- name: movimiento
|
|
15
|
+
describes: "un paso de la migración; atributo `touches`: los artefactos del proyecto que toca, separados por comas"
|
|
16
|
+
- name: documento
|
|
17
|
+
describes: el fichero del plan, en la carpeta de trabajo del paso
|
|
18
|
+
|
|
19
|
+
extractors:
|
|
20
|
+
- mechanism: path
|
|
21
|
+
kind: documento
|
|
22
|
+
pattern: "<nombre>.md"
|
|
23
|
+
|
|
24
|
+
levels:
|
|
25
|
+
- id: L0
|
|
26
|
+
requiredRoles: []
|
|
27
|
+
title: MIGRACIÓN
|
|
28
|
+
instruction: >
|
|
29
|
+
Declara de dónde a dónde se migra y qué no se puede perder (el inventario
|
|
30
|
+
funcional).
|
|
31
|
+
- id: L1
|
|
32
|
+
requiredRoles: []
|
|
33
|
+
title: MOVIMIENTOS
|
|
34
|
+
instruction: >
|
|
35
|
+
Declara los movimientos en orden, cada uno con el atributo `touches` (los
|
|
36
|
+
artefactos del proyecto que toca, separados por comas), y el fichero del
|
|
37
|
+
plan (tipo `documento`, con su `location`).
|
|
38
|
+
fanout:
|
|
39
|
+
min: 1
|
|
40
|
+
max: 60
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Documento de requisitos de producto (PRD).
|
|
2
|
+
#
|
|
3
|
+
# Artefacto de trabajo: vive en la carpeta de la unidad y alimenta al paso de
|
|
4
|
+
# sistema. Lo que pide pasa a ser intención de los artefactos tocados cuando
|
|
5
|
+
# declara cómo se comprueba (`projection`); lo demás queda como prosa.
|
|
6
|
+
name: prd
|
|
7
|
+
version: 1.1.0
|
|
8
|
+
description: >-
|
|
9
|
+
Requisitos de un cambio de producto: qué se pide, para quién y cómo se sabrá que está hecho. Es el artefacto de trabajo con que empiezan los carriles de producto nuevo y de funcionalidad, y alimenta al paso de sistema. Elígelo para pedir algo; para explicar un fallo corresponde un RCA.
|
|
10
|
+
tags: [proceso, requisitos, producto]
|
|
11
|
+
|
|
12
|
+
kinds:
|
|
13
|
+
- name: objetivo
|
|
14
|
+
describes: "pieza de la solicitud (L0): qué se quiere conseguir y para quién"
|
|
15
|
+
- name: necesidad
|
|
16
|
+
describes: un problema o una capacidad que pide quien usa el sistema
|
|
17
|
+
- name: requisito
|
|
18
|
+
describes: algo concreto que el sistema tiene que hacer o cumplir; con `projection` si se puede comprobar
|
|
19
|
+
- name: documento
|
|
20
|
+
describes: el fichero del PRD, en la carpeta de trabajo del paso
|
|
21
|
+
|
|
22
|
+
extractors:
|
|
23
|
+
- mechanism: path
|
|
24
|
+
kind: documento
|
|
25
|
+
pattern: "<nombre>.md"
|
|
26
|
+
|
|
27
|
+
levels:
|
|
28
|
+
- id: L0
|
|
29
|
+
requiredRoles: []
|
|
30
|
+
title: SOLICITUD
|
|
31
|
+
instruction: >
|
|
32
|
+
Declara qué se quiere conseguir, para quién y por qué ahora. Una pieza por
|
|
33
|
+
objetivo; un objetivo que no se puede dar por cumplido o no no es un objetivo.
|
|
34
|
+
- id: L1
|
|
35
|
+
requiredRoles: []
|
|
36
|
+
title: NECESIDADES
|
|
37
|
+
instruction: >
|
|
38
|
+
Declara las necesidades que atiende cada objetivo: el problema de quien usa
|
|
39
|
+
el sistema, no la solución.
|
|
40
|
+
fanout:
|
|
41
|
+
min: 1
|
|
42
|
+
max: 15
|
|
43
|
+
- id: L2
|
|
44
|
+
requiredRoles: []
|
|
45
|
+
title: REQUISITOS
|
|
46
|
+
instruction: >
|
|
47
|
+
Declara los requisitos de cada necesidad y el fichero del PRD (tipo
|
|
48
|
+
`documento`, con su `location`). Un requisito que se puede comprobar lleva
|
|
49
|
+
`projection` (relación y argumentos): es el que pasa a ser intención de los
|
|
50
|
+
artefactos tocados. Uno sin proyección queda como prosa y no se comprueba.
|
|
51
|
+
Para que entre en el índice de requisitos del artefacto, lleva los
|
|
52
|
+
atributos `tipo` (`funcional`, `tecnico` o `decision`) y `requisito` (su id
|
|
53
|
+
corto, estable entre versiones), con `titulo` (hasta 80 caracteres),
|
|
54
|
+
`sale_de` (la frase de la persona o el requisito del que se deduce),
|
|
55
|
+
`porque` (obligatorio en un `tecnico`), `aceptacion` y, si la unidad toca
|
|
56
|
+
varios artefactos, `artefacto`; la versión la pone Arketum. Con el id de
|
|
57
|
+
uno que ya existe es una versión nueva de ese requisito. Si contradice a un
|
|
58
|
+
`tecnico` o a una `decision` del mismo artefacto, lo declara con
|
|
59
|
+
`choca_con` (su id, `<artefacto>:<id>`).
|
|
60
|
+
fanout:
|
|
61
|
+
min: 1
|
|
62
|
+
max: 60
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Radio de alcance de un cambio.
|
|
2
|
+
#
|
|
3
|
+
# Declara la forma de una afirmación que casi nadie escribe y de la que depende
|
|
4
|
+
# todo lo demás: QUÉ PUEDE TOCAR un cambio. No qué tocó — qué puede tocar.
|
|
5
|
+
#
|
|
6
|
+
# Sirve para dos procesos con la misma forma y distinta fuente: en una migración
|
|
7
|
+
# la fuente es el grafo de dependencias; en un requerimiento normativo, la norma.
|
|
8
|
+
#
|
|
9
|
+
# Regla que este arquetipo existe para hacer cumplir: «acotado» no lo declara
|
|
10
|
+
# quien hizo el cambio, y cuando no se puede acotar el radio, el cambio es
|
|
11
|
+
# MASIVO por definición. La frontera se declara con evidencia, igual que lo
|
|
12
|
+
# alcanzado — porque la frontera es la afirmación arriesgada, no la lista.
|
|
13
|
+
name: radio-de-alcance
|
|
14
|
+
version: 1.1.0
|
|
15
|
+
description: >-
|
|
16
|
+
Análisis de lo que PUEDE tocar un cambio antes de hacerlo: fuentes, alcanzados, fronteras con evidencia y certificaciones. Es un artefacto de trabajo del carril de funcionalidad y de las migraciones. Elígelo para acotar un cambio; para explicar un fallo ya ocurrido corresponde un RCA.
|
|
17
|
+
tags: [proceso, impacto, analisis]
|
|
18
|
+
|
|
19
|
+
kinds:
|
|
20
|
+
- name: objetivo
|
|
21
|
+
describes: "pieza de la solicitud (L0): qué cambio se acota y quién lo declara"
|
|
22
|
+
- name: fuente
|
|
23
|
+
describes: de dónde sale el alcance — grafo de dependencias, norma, contrato
|
|
24
|
+
- name: alcanzado
|
|
25
|
+
describes: algo que el cambio puede tocar
|
|
26
|
+
- name: frontera
|
|
27
|
+
describes: algo que se declara FUERA del radio, con la razón por la que queda fuera
|
|
28
|
+
- name: evidencia
|
|
29
|
+
describes: lo que sostiene que algo está dentro o fuera
|
|
30
|
+
- name: certificacion
|
|
31
|
+
describes: certificación vigente que cae dentro del radio y hay que reverificar
|
|
32
|
+
- name: dependencia
|
|
33
|
+
describes: arista del cableado (L3) entre dos piezas declaradas
|
|
34
|
+
- name: documento
|
|
35
|
+
describes: fichero de notas o de política
|
|
36
|
+
|
|
37
|
+
extractors:
|
|
38
|
+
- mechanism: path
|
|
39
|
+
kind: fuente
|
|
40
|
+
pattern: "fuentes/<nombre>.md"
|
|
41
|
+
- mechanism: path
|
|
42
|
+
kind: alcanzado
|
|
43
|
+
pattern: "alcanzados/<nombre>.md"
|
|
44
|
+
- mechanism: path
|
|
45
|
+
kind: frontera
|
|
46
|
+
pattern: "fronteras/<nombre>.md"
|
|
47
|
+
- mechanism: path
|
|
48
|
+
kind: evidencia
|
|
49
|
+
pattern: "evidencia/<nombre>.md"
|
|
50
|
+
- mechanism: path
|
|
51
|
+
kind: certificacion
|
|
52
|
+
pattern: "certificaciones/<nombre>.md"
|
|
53
|
+
- mechanism: path
|
|
54
|
+
kind: documento
|
|
55
|
+
pattern: "<nombre>.md"
|
|
56
|
+
|
|
57
|
+
# Lo alcanzado y la frontera pesan igual. Una frontera sin evidencia es la
|
|
58
|
+
# forma en que un radio se declara acotado sin serlo.
|
|
59
|
+
coRequirements:
|
|
60
|
+
- when: alcanzado
|
|
61
|
+
requires: [evidencia]
|
|
62
|
+
scope: artifact
|
|
63
|
+
- when: frontera
|
|
64
|
+
requires: [evidencia]
|
|
65
|
+
scope: artifact
|
|
66
|
+
|
|
67
|
+
levels:
|
|
68
|
+
- id: L0
|
|
69
|
+
requiredRoles: []
|
|
70
|
+
title: CAMBIO
|
|
71
|
+
instruction: >
|
|
72
|
+
Declara qué cambió, quién lo hizo, y QUIÉN DECLARA ESTE RADIO — que no
|
|
73
|
+
puede ser quien hizo el cambio. Declara también contra qué se acota: un
|
|
74
|
+
grafo de dependencias, una norma, un contrato.
|
|
75
|
+
- id: L1
|
|
76
|
+
requiredRoles: [fuentes, frescura]
|
|
77
|
+
title: FUENTES
|
|
78
|
+
instruction: >
|
|
79
|
+
Declara de dónde sale el alcance y CUÁNDO se midió esa fuente. Una fuente
|
|
80
|
+
con deriva conocida —un índice que se refresca por hora, un grafo cuya cola
|
|
81
|
+
de fallos crece en silencio— produce un radio corto, y un radio corto
|
|
82
|
+
produce una recertificación corta que se firma igual. Si no puedes
|
|
83
|
+
establecer la frescura, dilo aquí: es lo que convierte el radio en masivo.
|
|
84
|
+
fanout:
|
|
85
|
+
min: 1
|
|
86
|
+
max: 10
|
|
87
|
+
- id: L2
|
|
88
|
+
requiredRoles: [directos, indirectos, fronteras]
|
|
89
|
+
title: ALCANCE
|
|
90
|
+
instruction: >
|
|
91
|
+
Declara qué puede tocar el cambio: lo que lo usa directamente, lo que llega
|
|
92
|
+
por transitividad, y lo que queda FUERA. Las tres. Un radio sin fronteras
|
|
93
|
+
declaradas no está acotado: está sin mirar.
|
|
94
|
+
fanout:
|
|
95
|
+
min: 3
|
|
96
|
+
max: 80
|
|
97
|
+
- id: L3
|
|
98
|
+
requiredRoles: []
|
|
99
|
+
title: CERTIFICACIONES
|
|
100
|
+
instruction: >
|
|
101
|
+
Qué certificaciones vigentes caen dentro del radio. Recuerda que una
|
|
102
|
+
certificación muere por dos causas y solo una deja rastro: cambió el
|
|
103
|
+
artefacto, o cambió el criterio. La segunda no la dispara ningún commit.
|
|
104
|
+
fanout:
|
|
105
|
+
min: 0
|
|
106
|
+
max: 60
|
|
107
|
+
- id: L4
|
|
108
|
+
requiredRoles: []
|
|
109
|
+
title: RADIO
|
|
110
|
+
instruction: >
|
|
111
|
+
Escribe el veredicto: ACOTADO o MASIVO, y qué hay que reverificar. Si es
|
|
112
|
+
acotado, declara qué se da por bueno sin volver a probar. Si no pudiste
|
|
113
|
+
acotar, es masivo — y masivo significa todo lo que se intentó, sin muestreo.
|
|
114
|
+
Declara también el fichero del radio (tipo `documento`, con su `location`):
|
|
115
|
+
es lo que la fidelidad compara en este último nivel.
|
|
116
|
+
fanout:
|
|
117
|
+
min: 1
|
|
118
|
+
max: 80
|
|
119
|
+
|
|
120
|
+
selfReview:
|
|
121
|
+
criteria:
|
|
122
|
+
- check: Quien declara el radio no es quien hizo el cambio
|
|
123
|
+
evidence: juicio
|
|
124
|
+
- check: La fuente del alcance tiene fecha de medición y esa fecha es fresca
|
|
125
|
+
how: >
|
|
126
|
+
Nombra la fuente y cuándo se consultó. Si es un índice, comprueba su cola
|
|
127
|
+
de fallos y su última corrida. Un índice sucio no informa el radio.
|
|
128
|
+
evidence: medida
|
|
129
|
+
- check: Cada elemento alcanzado tiene evidencia de por qué está dentro
|
|
130
|
+
how: Recorre la lista de L2 y contrasta cada uno contra la fuente declarada.
|
|
131
|
+
evidence: medida
|
|
132
|
+
- check: Cada frontera tiene evidencia de por qué está fuera
|
|
133
|
+
how: >
|
|
134
|
+
Recorre las fronteras y comprueba, contra la misma fuente, que no hay
|
|
135
|
+
camino desde el cambio. Una frontera sostenida solo en intuición no vale.
|
|
136
|
+
evidence: medida
|
|
137
|
+
- check: Si el radio no se pudo acotar, el veredicto dice MASIVO y no acotado
|
|
138
|
+
evidence: juicio
|
|
139
|
+
groundingCheck: true
|
|
140
|
+
groundingScope: alguna fuente, evidencia o certificación
|
|
141
|
+
assumptionsMustDeclare: true
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Análisis de causa raíz (RCA).
|
|
2
|
+
#
|
|
3
|
+
# Parte de no saber: la señal registra que algo falló, y el RCA investiga hasta
|
|
4
|
+
# confirmar la causa con evidencia. Su último nivel fija qué se toca (atributo
|
|
5
|
+
# `touches`) y cómo se verifica el arreglo (atributos `evidence`, `expect`, `on`).
|
|
6
|
+
name: rca
|
|
7
|
+
version: 1.0.0
|
|
8
|
+
description: >-
|
|
9
|
+
Investigación de un fallo desde la señal hasta la causa confirmada con evidencia, con lo que hay que tocar y cómo se verifica el arreglo. Es el artefacto de trabajo del carril de corrección: fija los tocados y la verificación. Elígelo para explicar un fallo; para pedir algo nuevo corresponde un PRD.
|
|
10
|
+
tags: [proceso, fallo, causa]
|
|
11
|
+
|
|
12
|
+
kinds:
|
|
13
|
+
- name: objetivo
|
|
14
|
+
describes: "pieza de la solicitud (L0): el fallo tal como se reportó o se detectó"
|
|
15
|
+
- name: hipotesis
|
|
16
|
+
describes: una explicación posible del fallo (código, pipeline, entorno o datos)
|
|
17
|
+
- name: causa
|
|
18
|
+
describes: la hipótesis confirmada, con la evidencia que la confirma
|
|
19
|
+
- name: remedio
|
|
20
|
+
describes: "lo que hay que cambiar; atributo `touches`: los artefactos del proyecto, separados por comas"
|
|
21
|
+
- name: verificacion
|
|
22
|
+
describes: "cómo se comprueba el arreglo; atributos `evidence` (clases separadas por comas), `expect` y `on`"
|
|
23
|
+
- name: documento
|
|
24
|
+
describes: el fichero del RCA, en la carpeta de trabajo del paso
|
|
25
|
+
|
|
26
|
+
extractors:
|
|
27
|
+
- mechanism: path
|
|
28
|
+
kind: documento
|
|
29
|
+
pattern: "<nombre>.md"
|
|
30
|
+
|
|
31
|
+
levels:
|
|
32
|
+
- id: L0
|
|
33
|
+
requiredRoles: []
|
|
34
|
+
title: SEÑAL
|
|
35
|
+
instruction: >
|
|
36
|
+
Declara el fallo tal como llegó: qué se observó, dónde y quién lo reportó.
|
|
37
|
+
Todavía no se sabe la causa; no la escribas aquí.
|
|
38
|
+
- id: L1
|
|
39
|
+
requiredRoles: []
|
|
40
|
+
title: HIPÓTESIS
|
|
41
|
+
instruction: >
|
|
42
|
+
Declara las hipótesis: en el código, el pipeline, el entorno o los datos.
|
|
43
|
+
Cada una dice qué se esperaría ver si fuera cierta.
|
|
44
|
+
fanout:
|
|
45
|
+
min: 1
|
|
46
|
+
max: 20
|
|
47
|
+
- id: L2
|
|
48
|
+
requiredRoles: []
|
|
49
|
+
title: CAUSA
|
|
50
|
+
instruction: >
|
|
51
|
+
Declara la causa confirmada y con qué evidencia se confirmó. Las hipótesis
|
|
52
|
+
descartadas se quedan en L1; aquí solo lo que resistió la prueba.
|
|
53
|
+
fanout:
|
|
54
|
+
min: 1
|
|
55
|
+
max: 10
|
|
56
|
+
- id: L3
|
|
57
|
+
requiredRoles: []
|
|
58
|
+
title: REMEDIO Y VERIFICACIÓN
|
|
59
|
+
instruction: >
|
|
60
|
+
Declara el remedio (tipo `remedio`, atributo `touches` con los artefactos
|
|
61
|
+
del proyecto que hay que tocar, separados por comas; ninguno si el fallo no
|
|
62
|
+
está en el proyecto), la verificación (tipo `verificacion`, atributos
|
|
63
|
+
`evidence` con las clases que valen, `expect` si admite ejecución y `on`:
|
|
64
|
+
`before` para una prueba que falla antes del cambio, `change` para la que
|
|
65
|
+
pasa con él) y el fichero del RCA (tipo `documento`, con su `location`).
|
|
66
|
+
fanout:
|
|
67
|
+
min: 1
|
|
68
|
+
max: 30
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Servicio que depende de otro sistema. Go.
|
|
2
|
+
#
|
|
3
|
+
# Declara la forma de un servicio con fronteras externas —una pasarela, un
|
|
4
|
+
# sincronizador, un webhook con reintentos—, no la de ninguno. No sabe con qué
|
|
5
|
+
# se integra.
|
|
6
|
+
#
|
|
7
|
+
# La política de este arquetipo es una sola idea: TODA FRONTERA SE DECLARA Y SE
|
|
8
|
+
# PUEDE SUSTITUIR. Lo que no se puede sustituir no se puede probar, y lo que no
|
|
9
|
+
# se puede probar es donde caen los sistemas integrados.
|
|
10
|
+
#
|
|
11
|
+
# Cambios:
|
|
12
|
+
# - 1.1.0: los extractores de código excluyen `<nombre>_test.go` (una prueba
|
|
13
|
+
# junto a lo que prueba solo la reclama `prueba`); tipos nuevos `modulo`
|
|
14
|
+
# (go.mod y go.sum) y `arranque` (cmd/<binario>/main.go). La huella cambia:
|
|
15
|
+
# un proyecto que ya lo usa ve `stale_policy` y recertifica sus artefactos.
|
|
16
|
+
# `templates/` y `static/` de una web siguen sin tipo.
|
|
17
|
+
name: servicio-con-integracion
|
|
18
|
+
version: 1.1.0
|
|
19
|
+
description: >-
|
|
20
|
+
Servicio que depende de otros sistemas (pasarela, sincronizador, webhook con reintentos), en Go. Toda frontera externa se declara como puerto y tiene un doble sustituible para probarla. Elígelo cuando lo central del artefacto sea integrarse; para una web con persistencia propia hay otros.
|
|
21
|
+
tags: [codigo, servicio, integracion, go]
|
|
22
|
+
|
|
23
|
+
kinds:
|
|
24
|
+
- name: objetivo
|
|
25
|
+
describes: pieza de la solicitud (L0), sin ubicación en el árbol
|
|
26
|
+
- name: frontera
|
|
27
|
+
describes: interfaz que describe un sistema ajeno tal como este lo necesita
|
|
28
|
+
- name: adaptador
|
|
29
|
+
describes: implementación de una frontera contra el sistema real
|
|
30
|
+
- name: doble
|
|
31
|
+
describes: implementación de una frontera para probar sin el sistema real
|
|
32
|
+
- name: servicio
|
|
33
|
+
describes: lógica propia, que no habla con nadie de fuera
|
|
34
|
+
- name: dependencia
|
|
35
|
+
describes: arista del cableado (L3) entre dos piezas declaradas
|
|
36
|
+
- name: prueba
|
|
37
|
+
describes: fichero de prueba
|
|
38
|
+
- name: modulo
|
|
39
|
+
describes: la definición del módulo de Go y sus sumas (go.mod, go.sum)
|
|
40
|
+
- name: arranque
|
|
41
|
+
describes: el punto de entrada de un binario (cmd/<binario>/main.go)
|
|
42
|
+
- name: documento
|
|
43
|
+
describes: fichero de documentación o de política
|
|
44
|
+
|
|
45
|
+
# Una prueba vive junto a lo que prueba (`x_test.go`): cada extractor de código
|
|
46
|
+
# la excluye, para que solo la reclame `prueba`.
|
|
47
|
+
extractors:
|
|
48
|
+
- mechanism: path
|
|
49
|
+
kind: frontera
|
|
50
|
+
pattern: "internal/fronteras/<nombre>.go"
|
|
51
|
+
excluding: ["internal/fronteras/<nombre>_test.go"]
|
|
52
|
+
- mechanism: path
|
|
53
|
+
kind: adaptador
|
|
54
|
+
pattern: "internal/adaptadores/<nombre>.go"
|
|
55
|
+
excluding: ["internal/adaptadores/<nombre>_test.go"]
|
|
56
|
+
- mechanism: path
|
|
57
|
+
kind: doble
|
|
58
|
+
pattern: "internal/dobles/<nombre>.go"
|
|
59
|
+
excluding: ["internal/dobles/<nombre>_test.go"]
|
|
60
|
+
- mechanism: path
|
|
61
|
+
kind: servicio
|
|
62
|
+
pattern: "internal/servicios/<nombre>.go"
|
|
63
|
+
excluding: ["internal/servicios/<nombre>_test.go"]
|
|
64
|
+
- mechanism: path
|
|
65
|
+
kind: prueba
|
|
66
|
+
pattern: "internal/<paquete>/<nombre>_test.go"
|
|
67
|
+
# go.mod y go.sum: un extractor por tipo, y el marcador casa con media palabra.
|
|
68
|
+
- mechanism: path
|
|
69
|
+
kind: modulo
|
|
70
|
+
pattern: "go.<fichero>"
|
|
71
|
+
- mechanism: path
|
|
72
|
+
kind: arranque
|
|
73
|
+
pattern: "cmd/<binario>/main.go"
|
|
74
|
+
|
|
75
|
+
# Un adaptador sin doble es una frontera que solo se puede ejercitar contra el
|
|
76
|
+
# sistema real: la prueba se vuelve lenta, frágil y acaba desactivada.
|
|
77
|
+
coRequirements:
|
|
78
|
+
- when: adaptador
|
|
79
|
+
requires: [doble]
|
|
80
|
+
scope: artifact
|
|
81
|
+
- when: servicio
|
|
82
|
+
requires: [prueba]
|
|
83
|
+
scope: artifact
|
|
84
|
+
|
|
85
|
+
levels:
|
|
86
|
+
- id: L0
|
|
87
|
+
requiredRoles: []
|
|
88
|
+
title: SOLICITUD
|
|
89
|
+
instruction: >
|
|
90
|
+
Declara qué tiene que conseguir el servicio y con qué sistemas ajenos
|
|
91
|
+
necesita hablar para conseguirlo. Nombra los sistemas; no cómo se les
|
|
92
|
+
llama por dentro.
|
|
93
|
+
- id: L1
|
|
94
|
+
requiredRoles: [fronteras, adaptadores, servicios]
|
|
95
|
+
title: PARTES
|
|
96
|
+
instruction: >
|
|
97
|
+
Propón las partes, separando lo que es tuyo de lo que es de otro. Una
|
|
98
|
+
pieza que mezcle lógica propia con una llamada a un sistema ajeno no
|
|
99
|
+
podrá probarse sin ese sistema, y este nivel existe para impedirlo.
|
|
100
|
+
fanout:
|
|
101
|
+
min: 3
|
|
102
|
+
max: 14
|
|
103
|
+
- id: L2
|
|
104
|
+
requiredRoles: []
|
|
105
|
+
title: CONTRATOS
|
|
106
|
+
instruction: >
|
|
107
|
+
Declara cada frontera tal como TU servicio la necesita, no como la
|
|
108
|
+
documenta el proveedor. Y declara qué pasa cuando el sistema ajeno falla,
|
|
109
|
+
tarda o responde algo que no esperabas: eso también es el contrato.
|
|
110
|
+
fanout:
|
|
111
|
+
min: 1
|
|
112
|
+
max: 30
|
|
113
|
+
- id: L3
|
|
114
|
+
requiredRoles: []
|
|
115
|
+
title: CABLEADO
|
|
116
|
+
instruction: >
|
|
117
|
+
Declara qué depende de qué, y en particular qué pieza depende de qué
|
|
118
|
+
frontera. Ninguna pieza de lógica propia debería depender de un adaptador:
|
|
119
|
+
si lo hace, la frontera no está haciendo su trabajo.
|
|
120
|
+
fanout:
|
|
121
|
+
min: 1
|
|
122
|
+
max: 40
|
|
123
|
+
- id: L4
|
|
124
|
+
requiredRoles: []
|
|
125
|
+
title: IMPLEMENTACIÓN
|
|
126
|
+
instruction: >
|
|
127
|
+
Escribe el código. Cada adaptador viene con su doble, y la lógica propia
|
|
128
|
+
se prueba sin levantar nada de fuera.
|
|
129
|
+
fanout:
|
|
130
|
+
min: 1
|
|
131
|
+
max: 70
|
|
132
|
+
|
|
133
|
+
# La autorrevisión: qué comprobar del servicio entregado, y con qué acción.
|
|
134
|
+
selfReview:
|
|
135
|
+
criteria:
|
|
136
|
+
- check: La cobertura de pruebas unitarias del código propio es al menos del 80%
|
|
137
|
+
how: Corre la suite con reporte de cobertura y lee el total de líneas.
|
|
138
|
+
evidence: medida
|
|
139
|
+
- check: No hay hallazgos de OWASP Top 10 en lo entregado
|
|
140
|
+
how: >
|
|
141
|
+
Revisa entrada sin validar, autenticación y control de acceso, secretos
|
|
142
|
+
en el árbol, y qué se registra de lo que llega de fuera.
|
|
143
|
+
evidence: medida
|
|
144
|
+
- check: Ninguna pieza de lógica propia depende de un adaptador
|
|
145
|
+
how: Sigue las dependencias declaradas en L3 desde cada servicio.
|
|
146
|
+
evidence: medida
|
|
147
|
+
- check: Cada frontera declarada en L2 tiene doble, y el doble cubre el fallo y la demora
|
|
148
|
+
how: Contrasta la lista de fronteras contra la de dobles, y lee cada doble.
|
|
149
|
+
evidence: medida
|
|
150
|
+
- check: Lo implementado cumple la intención declarada en L0, y no una parecida
|
|
151
|
+
evidence: juicio
|
|
152
|
+
groundingCheck: true
|
|
153
|
+
groundingScope: alguna api, módulo, clase, función o dato
|
|
154
|
+
assumptionsMustDeclare: true
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Un ajuste: un cambio chico sobre piezas que ya existen (la 35). Se piensa por
|
|
2
|
+
# cambio (la cita literal del pedido y un radio corto) y se prueba en grupo: cierra
|
|
3
|
+
# sin las condiciones 9 y 10, que juzga una `comprobacion` de los ajustes sin
|
|
4
|
+
# comprobar. Su tamaño lo mide Arketum contra la línea base: si se excede, se
|
|
5
|
+
# descarta y se continúa en `funcionalidad` (`continua`), con su foto.
|
|
6
|
+
name: ajuste
|
|
7
|
+
version: 1.0.0
|
|
8
|
+
when: Un cambio chico sobre piezas que ya existen. Si resulta más grande, Arketum lo dice y sube a `funcionalidad`.
|
|
9
|
+
comprobacion: agrupada
|
|
10
|
+
tope_sin_comprobar: 5
|
|
11
|
+
max_cambios_sin_comprobar: 16
|
|
12
|
+
steps:
|
|
13
|
+
- { id: ajuste, kind: artifact, archetype: { name: ajuste }, gate: true, levantamiento: breve, max_requisitos: 3, feeds: [sistema] }
|
|
14
|
+
- { id: sistema, kind: system, fedBy: [ajuste], max_cambios: 8, piezas: L1 }
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Un arquetipo nuevo: se escribe y se publica en el catálogo que elija la
|
|
2
|
+
# persona.
|
|
3
|
+
name: arquetipo
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
when: Ningún arquetipo de los catálogos describe un tipo de artefacto que se va a construir.
|
|
6
|
+
milestones: [entrega]
|
|
7
|
+
steps:
|
|
8
|
+
- { id: arquetipo, kind: artifact, archetype: { name: arquetipo-autor }, gate: true }
|
|
9
|
+
- id: hito
|
|
10
|
+
kind: milestone
|
|
11
|
+
gate: true
|
|
12
|
+
requires:
|
|
13
|
+
- { id: publicado, describes: la persona confirma que el arquetipo está publicado en el catálogo que eligió, classes: [statement] }
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# La comprobación agrupada (la 35): comprueba juntos los ajustes sin comprobar.
|
|
2
|
+
# Recertifica cada tocado contra el árbol de ahora (con descenso heredado; los
|
|
3
|
+
# arreglos van aquí, con el mismo tope que un ajuste) y exige las salidas: el
|
|
4
|
+
# suelo, la suite e2e entera y la e2e de cada funcional de los ajustes.
|
|
5
|
+
name: comprobacion
|
|
6
|
+
version: 1.0.0
|
|
7
|
+
when: Comprobar juntos los ajustes sin comprobar, antes de desplegar o cuando se acumulan.
|
|
8
|
+
comprueba: true
|
|
9
|
+
milestones: [despliegue, entrega, ejecucion]
|
|
10
|
+
steps:
|
|
11
|
+
- { id: sistema, kind: system, max_cambios: 8, piezas: L1 }
|
|
12
|
+
- id: comprobacion
|
|
13
|
+
salidas: true
|
|
14
|
+
kind: evidence
|
|
15
|
+
requires:
|
|
16
|
+
- { id: no-regresion, describes: lo que ya funcionaba sigue funcionando, classes: [execution], expect: success }
|
|
17
|
+
- id: hito
|
|
18
|
+
kind: milestone
|
|
19
|
+
optional: true
|
|
20
|
+
gate: true
|
|
21
|
+
confirmacion: true
|
|
22
|
+
requires:
|
|
23
|
+
- { id: cumplido, describes: la persona confirma que el hito se cumplió, classes: [statement] }
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Una corrección parte de no saber: la señal registra el fallo, el RCA
|
|
2
|
+
# investiga y fija qué se toca y cómo se verifica.
|
|
3
|
+
#
|
|
4
|
+
# Cambios:
|
|
5
|
+
# - 1.1.0: el hito `despliegue <entorno>` cuenta (`humo: true`): exige la prueba de humo y que el entorno exista.
|
|
6
|
+
# - 1.2.0: el hito `despliegue <entorno>` lo cumple la confirmación de la persona por el canal interactivo («¿se desplegó en <entorno> y corrió?», sí o no): la marca `humo` pasa a llamarse `confirmacion` y la prueba de humo deja de exigirse.
|
|
7
|
+
name: correccion
|
|
8
|
+
version: 1.2.0
|
|
9
|
+
when: Un fallo reportado o detectado, del que todavía no se sabe la causa.
|
|
10
|
+
milestones: [despliegue, entrega, ejecucion]
|
|
11
|
+
steps:
|
|
12
|
+
- id: senal
|
|
13
|
+
kind: evidence
|
|
14
|
+
requires:
|
|
15
|
+
- { id: fallo, describes: el fallo tal como llegó, classes: [execution, report, statement], expect: failure, on: before }
|
|
16
|
+
- { id: rca, kind: artifact, archetype: { name: rca }, gate: true, fixesTouches: true, feeds: [sistema, verificacion] }
|
|
17
|
+
- { id: sistema, kind: system, optional: true, fedBy: [rca] }
|
|
18
|
+
- { id: verificacion, kind: evidence, fedBy: [rca] }
|
|
19
|
+
- id: hito
|
|
20
|
+
kind: milestone
|
|
21
|
+
optional: true
|
|
22
|
+
gate: true
|
|
23
|
+
confirmacion: true
|
|
24
|
+
requires:
|
|
25
|
+
- { id: cumplido, describes: la persona confirma que el hito se cumplió, classes: [statement] }
|