@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,11 @@
|
|
|
1
|
+
# Los nombres de los clientes que Arketum lee o escribe por función (ag-t01): el código de src/ no los escribe.
|
|
2
|
+
# En varios catálogos, cada lista es la unión de las suyas, en orden.
|
|
3
|
+
#
|
|
4
|
+
# - instrucciones: los ficheros de instrucciones que se generan para los agentes, en la raíz del proyecto, con el
|
|
5
|
+
# mismo texto (`action: instructions`); el estado avisa si el que hay ya no es el que se generaría.
|
|
6
|
+
# - configuracion: las carpetas de configuración de editores y agentes que la herramienta crea solo por abrir la
|
|
7
|
+
# carpeta: en la raíz, no cuentan para clasificar el arranque y se proponen como andamiaje.
|
|
8
|
+
# - andamiaje: el andamiaje mínimo que propone el arranque, además de los ficheros de instrucciones.
|
|
9
|
+
instrucciones: [AGENTS.md, CLAUDE.md]
|
|
10
|
+
configuracion: [.claude/, .vscode/, .idea/, .cursor/]
|
|
11
|
+
andamiaje: [.git/, node_modules/, dist/]
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Un ajuste: un cambio chico sobre piezas que ya existen (la 35).
|
|
2
|
+
#
|
|
3
|
+
# Artefacto de trabajo del carril `ajuste`: vive en la carpeta de la unidad y
|
|
4
|
+
# alimenta al paso de sistema. Su primer nivel es el radio corto (qué pieza toca
|
|
5
|
+
# y qué más podría tocar); el último, los requisitos, con su cita literal del
|
|
6
|
+
# pedido de la persona.
|
|
7
|
+
name: ajuste
|
|
8
|
+
version: 1.0.0
|
|
9
|
+
description: >-
|
|
10
|
+
Un cambio chico sobre piezas que ya existen: qué pieza toca, qué más podría tocar y cómo se notaría, y los requisitos con su cita del pedido de la persona. Es el artefacto de trabajo del carril `ajuste`; para algo nuevo o grande corresponde un PRD.
|
|
11
|
+
tags: [proceso, requisitos, ajuste]
|
|
12
|
+
|
|
13
|
+
kinds:
|
|
14
|
+
- name: toca
|
|
15
|
+
describes: "una pieza de un tocado que el cambio toca: `artefacto` (uno de los tocados) y `pieza` (el id de un elemento del nivel de piezas de su línea base)"
|
|
16
|
+
- name: riesgo
|
|
17
|
+
describes: lo que más podría tocar el cambio y cómo se notaría en la comprobación; si no hay, uno solo con id `ninguno` y su `porque`
|
|
18
|
+
- name: requisito
|
|
19
|
+
describes: algo concreto que el sistema tiene que hacer o cumplir, con su cita del pedido
|
|
20
|
+
- name: documento
|
|
21
|
+
describes: el fichero del ajuste, en la carpeta de trabajo del paso
|
|
22
|
+
|
|
23
|
+
extractors:
|
|
24
|
+
- mechanism: path
|
|
25
|
+
kind: documento
|
|
26
|
+
pattern: "<nombre>.md"
|
|
27
|
+
|
|
28
|
+
levels:
|
|
29
|
+
- id: L0
|
|
30
|
+
requiredRoles: []
|
|
31
|
+
title: RADIO
|
|
32
|
+
instruction: >
|
|
33
|
+
Declara qué pieza toca el cambio, una `toca` por pieza, con `artefacto` (uno
|
|
34
|
+
de los tocados; cada tocado, al menos una) y `pieza` (el id de un elemento
|
|
35
|
+
del nivel de piezas de su último descenso certificado, el que se va a
|
|
36
|
+
heredar). Y pregúntate qué más toca esto: un `riesgo` por cada cosa que
|
|
37
|
+
podría romperse, con cómo se notaría en la comprobación (por ejemplo, que
|
|
38
|
+
las corridas guardadas se reproduzcan igual). Si de verdad no hay ninguno,
|
|
39
|
+
un solo `riesgo` con id `ninguno` y su `porque`.
|
|
40
|
+
- id: L1
|
|
41
|
+
requiredRoles: []
|
|
42
|
+
title: REQUISITOS
|
|
43
|
+
instruction: >
|
|
44
|
+
Declara los requisitos del ajuste y el fichero del ajuste (tipo
|
|
45
|
+
`documento`, con su `location`). Cada requisito lleva los atributos `tipo`
|
|
46
|
+
(`funcional` o `tecnico`), `requisito` (su id corto; con el de uno que ya
|
|
47
|
+
existe es una versión nueva), `titulo`, `sale_de` (la frase literal del
|
|
48
|
+
pedido de la persona, o de su respuesta a una pregunta), `porque` en un
|
|
49
|
+
`tecnico`, `aceptacion` y, si la unidad toca varios artefactos,
|
|
50
|
+
`artefacto`. Pocos: si hacen falta más de los que admite el carril, no es
|
|
51
|
+
un ajuste.
|
|
52
|
+
fanout:
|
|
53
|
+
min: 1
|
|
54
|
+
max: 10
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Autoría de un arquetipo.
|
|
2
|
+
#
|
|
3
|
+
# El arquetipo que se escribe es un fichero YAML de la carpeta de trabajo; el
|
|
4
|
+
# descenso llega hasta él. Al aprobarse el paso, Arketum lo publica en el
|
|
5
|
+
# catálogo que elige la persona; el hito del carril `arquetipo` lo confirma.
|
|
6
|
+
#
|
|
7
|
+
# Cambios:
|
|
8
|
+
# - 1.3.0: crea también formas de sistema (tipo `forma_de_sistema`, en `formas/`), cuando el levantamiento eligió una nueva.
|
|
9
|
+
# - 1.2.0: varios candidatos en un mismo paso (los que agrega la arquitectura).
|
|
10
|
+
# - 1.1.0: también un stack (`stacks/<nombre>.yaml` de la carpeta de trabajo),
|
|
11
|
+
# que se publica en `stacks/` del catálogo elegido.
|
|
12
|
+
name: arquetipo-autor
|
|
13
|
+
version: 1.3.0
|
|
14
|
+
description: >-
|
|
15
|
+
Escritura de un arquetipo nuevo: para qué tipo de artefacto, con qué tipos de elemento, extractores y niveles, hasta el fichero YAML que lo declara. Es el artefacto de trabajo del carril de arquetipo y, opcional, de los de producto nuevo y funcionalidad. Elígelo cuando ningún arquetipo de los catálogos describe lo que se va a construir.
|
|
16
|
+
tags: [proceso, arquetipo, politica]
|
|
17
|
+
|
|
18
|
+
kinds:
|
|
19
|
+
- name: objetivo
|
|
20
|
+
describes: "pieza de la solicitud (L0): qué tipo de artefacto describe el arquetipo"
|
|
21
|
+
- name: forma
|
|
22
|
+
describes: un tipo de elemento, un extractor o un nivel de la escalera que el arquetipo declara
|
|
23
|
+
- name: arquetipo
|
|
24
|
+
describes: el fichero YAML del arquetipo, en la carpeta de trabajo del paso
|
|
25
|
+
- name: stack
|
|
26
|
+
describes: "el fichero YAML de un stack (con qué se construye), en `stacks/` de la carpeta de trabajo del paso"
|
|
27
|
+
- name: forma_de_sistema
|
|
28
|
+
describes: "el fichero YAML de una forma de sistema (señales, `aplica`, diseño, huecos, variantes y escalones), en `formas/` de la carpeta de trabajo del paso"
|
|
29
|
+
|
|
30
|
+
extractors:
|
|
31
|
+
- mechanism: path
|
|
32
|
+
kind: arquetipo
|
|
33
|
+
pattern: "<nombre>.yaml"
|
|
34
|
+
- mechanism: path
|
|
35
|
+
kind: stack
|
|
36
|
+
pattern: "stacks/<nombre>.yaml"
|
|
37
|
+
- mechanism: path
|
|
38
|
+
kind: forma_de_sistema
|
|
39
|
+
pattern: "formas/<nombre>.yaml"
|
|
40
|
+
|
|
41
|
+
levels:
|
|
42
|
+
- id: L0
|
|
43
|
+
requiredRoles: []
|
|
44
|
+
title: SOLICITUD
|
|
45
|
+
instruction: >
|
|
46
|
+
Declara qué tipo de artefacto describirá el arquetipo y por qué ninguno de
|
|
47
|
+
los catálogos sirve.
|
|
48
|
+
- id: L1
|
|
49
|
+
requiredRoles: []
|
|
50
|
+
title: FORMA
|
|
51
|
+
instruction: >
|
|
52
|
+
Declara la forma: tipos de elemento, cómo se reconoce cada uno en el árbol
|
|
53
|
+
(extractores) y los niveles de la escalera con su instrucción.
|
|
54
|
+
fanout:
|
|
55
|
+
min: 1
|
|
56
|
+
max: 40
|
|
57
|
+
- id: L2
|
|
58
|
+
requiredRoles: []
|
|
59
|
+
title: ARQUETIPO
|
|
60
|
+
instruction: >
|
|
61
|
+
Declara el fichero del arquetipo (tipo `arquetipo`, con `location` a un
|
|
62
|
+
YAML de la carpeta de trabajo) o el de un stack (tipo `stack`, con
|
|
63
|
+
`location` a `stacks/<name>.yaml`). Tiene que cargar, su `name` es un slug
|
|
64
|
+
y el fichero se llama `<name>.yaml`. Si la arquitectura agrega varios,
|
|
65
|
+
uno por cada uno. Si el levantamiento eligió una forma de sistema nueva
|
|
66
|
+
(«no_calza»), declara también su fichero (tipo `forma_de_sistema`, con
|
|
67
|
+
`location` a `formas/<name>.yaml`), con señales que su `aplica` cumple,
|
|
68
|
+
y, si sus variantes piden suelo o e2e, un stack con las fijaciones de
|
|
69
|
+
esa forma.
|
|
70
|
+
fanout:
|
|
71
|
+
min: 1
|
|
72
|
+
max: 20
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Arquitectura del sistema.
|
|
2
|
+
#
|
|
3
|
+
# Su último nivel es una propuesta de proyecto: los artefactos con su raíz, su
|
|
4
|
+
# arquetipo, sus dependencias y lo que se toca con ellos; el andamiaje; y la
|
|
5
|
+
# cobertura. Al aprobarse, fija los tocados (elementos de tipo `artefacto`).
|
|
6
|
+
#
|
|
7
|
+
# Cambios:
|
|
8
|
+
# - 1.1.0: un artefacto declara su arquetipo de una sola capa (`archetype`) o,
|
|
9
|
+
# con capas, `stack` (con qué se construye) y `componente` (de la variante de
|
|
10
|
+
# la forma del proyecto); Arketum compone el arquetipo efectivo.
|
|
11
|
+
# - 1.2.0: cada artefacto lleva su juicio de ajuste (`ajuste`, `por_que` y, si
|
|
12
|
+
# nada calza, `nuevo`): se entrega la mejor alternativa para el caso de uso, no
|
|
13
|
+
# la que hay a mano (convención `ajuste: obligatorio`).
|
|
14
|
+
name: arquitectura-de-sistema
|
|
15
|
+
version: 1.2.0
|
|
16
|
+
description: >-
|
|
17
|
+
Propuesta de cómo se parte un sistema en artefactos: raíz, arquetipo, dependencias y `touchWith` de cada uno, el andamiaje y la cobertura. Es el artefacto de trabajo de un producto nuevo y, opcional, de una funcionalidad que añade artefactos. Elígelo para decidir la forma del proyecto, no la de un artefacto.
|
|
18
|
+
tags: [proceso, arquitectura, proyecto]
|
|
19
|
+
|
|
20
|
+
kinds:
|
|
21
|
+
- name: objetivo
|
|
22
|
+
describes: "pieza de la solicitud (L0): qué sistema se quiere y con qué restricciones"
|
|
23
|
+
- name: componente
|
|
24
|
+
describes: una responsabilidad del sistema, antes de decidir en qué artefacto vive
|
|
25
|
+
- name: artefacto
|
|
26
|
+
describes: "un artefacto del proyecto; id = el del artefacto; atributos `root`, `archetype` (nombre o nombre@versión) o, con capas, `stack` (nombre o nombre@versión) y `componente` (de la variante de la forma del proyecto), `dependsOn` y `touchWith` (ids separados por comas); y el juicio de ajuste: `ajuste` («calza», «calza_con_reservas» o «no_calza»), `por_que` (los elementos del caso de uso que inclinan a esta elección; con reservas, cuáles) y, con «no_calza», `nuevo` (por qué ninguno de los que hay calza y qué tendría el que se agrega)"
|
|
27
|
+
- name: andamiaje
|
|
28
|
+
describes: "algo que ningún arquetipo gobierna; atributo `path` (acabado en / para una carpeta)"
|
|
29
|
+
- name: cobertura
|
|
30
|
+
describes: "la cobertura del proyecto; atributo `value`: aviso o bloquea"
|
|
31
|
+
- name: documento
|
|
32
|
+
describes: el fichero de la arquitectura o un diagrama, en la carpeta de trabajo del paso
|
|
33
|
+
|
|
34
|
+
extractors:
|
|
35
|
+
- mechanism: path
|
|
36
|
+
kind: documento
|
|
37
|
+
pattern: "<nombre>.md"
|
|
38
|
+
|
|
39
|
+
levels:
|
|
40
|
+
- id: L0
|
|
41
|
+
requiredRoles: []
|
|
42
|
+
title: SOLICITUD
|
|
43
|
+
instruction: >
|
|
44
|
+
Declara qué sistema se quiere, para qué y con qué restricciones (equipo,
|
|
45
|
+
plataforma, plazos).
|
|
46
|
+
- id: L1
|
|
47
|
+
requiredRoles: []
|
|
48
|
+
title: COMPONENTES
|
|
49
|
+
instruction: >
|
|
50
|
+
Declara las responsabilidades del sistema y cómo se relacionan, antes de
|
|
51
|
+
decidir cuántos artefactos hay.
|
|
52
|
+
fanout:
|
|
53
|
+
min: 1
|
|
54
|
+
max: 30
|
|
55
|
+
- id: L2
|
|
56
|
+
requiredRoles: []
|
|
57
|
+
title: PROYECTO
|
|
58
|
+
instruction: >
|
|
59
|
+
Declara la propuesta de proyecto: un elemento `artefacto` por artefacto (su
|
|
60
|
+
id es el del artefacto; atributos `root`, `archetype` —o, con capas,
|
|
61
|
+
`stack` y `componente`—, `dependsOn` y `touchWith`), un elemento
|
|
62
|
+
`andamiaje` por ruta que ningún arquetipo
|
|
63
|
+
gobierna (atributo `path`), un elemento `cobertura` (atributo `value`) y
|
|
64
|
+
el fichero de la arquitectura (tipo `documento`, con su `location`).
|
|
65
|
+
Cada `artefacto` lleva su juicio de ajuste: si lo elegido calza con el caso de uso (`ajuste`: calza, calza_con_reservas o no_calza), los elementos del caso que inclinan a esa elección (`por_que`) y, si nada de lo que hay en los catálogos calza, `nuevo`: por qué ninguno calza y qué tendría el que se agrega, con un nombre propio que no exista. Elige la mejor alternativa para el caso de uso, no la que está a mano: crear uno nuevo siempre es una alternativa; si se agrega, Arketum incluye el paso que lo crea y la persona lo aprueba allí.
|
|
66
|
+
fanout:
|
|
67
|
+
min: 1
|
|
68
|
+
max: 60
|
|
69
|
+
|
|
70
|
+
# El juicio de ajuste de cada artefacto de la propuesta lo exige Arketum al entregar el último nivel.
|
|
71
|
+
conventions:
|
|
72
|
+
ajuste: obligatorio
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Despliegue con Docker Compose.
|
|
2
|
+
#
|
|
3
|
+
# Artefacto del sistema de una sola capa: la definición del despliegue, la
|
|
4
|
+
# configuración de cada entorno (de ejemplo, nunca la real), su documentación y,
|
|
5
|
+
# si se quiere, una prueba de humo (`humo.sh`, ubicación sugerida, no exigida).
|
|
6
|
+
#
|
|
7
|
+
# Cambios:
|
|
8
|
+
# - 1.1.0: `verificacion` (`humo.sh`) deja de ser obligatoria: el hito `despliegue <entorno>` lo cumple la
|
|
9
|
+
# confirmación de la persona, y Arketum no exige una forma concreta de comprobar el despliegue. Su raíz es `despliegue/`, para no solaparse con una raíz
|
|
10
|
+
# `.`: el compose se invoca como `docker compose -f despliegue/compose.yaml`.
|
|
11
|
+
# Los demás modos (pipeline, script…) se publican por el paso `arquetipo`.
|
|
12
|
+
name: despliegue-compose
|
|
13
|
+
version: 1.1.0
|
|
14
|
+
description: >-
|
|
15
|
+
Despliegue de un sistema con Docker Compose: la definición (`compose.yaml`), la configuración de ejemplo de cada entorno (`<entorno>.env.example`, nunca `.env`), su documentación (`DESPLIEGUE.md`) y, si se quiere, una prueba de humo (`humo.sh`), en la raíz `despliegue/`. Elígelo cuando el levantamiento de infraestructura acuerde el modo `compose`.
|
|
16
|
+
tags: [despliegue, infraestructura, compose]
|
|
17
|
+
# Gobierna un artefacto de despliegue: el carril `despliegue` exige uno así entre los tocados. Un arquetipo propio de
|
|
18
|
+
# otro modo (pipeline, script…) lo declara igual.
|
|
19
|
+
despliegue: true
|
|
20
|
+
|
|
21
|
+
kinds:
|
|
22
|
+
- name: objetivo
|
|
23
|
+
describes: "pieza de la solicitud (L0): lo que se despliega y en qué entorno, de los técnicos del levantamiento"
|
|
24
|
+
- name: definicion
|
|
25
|
+
describes: la definición del despliegue (`compose.yaml`, o `compose.<entorno>.yaml` si un entorno la cambia)
|
|
26
|
+
- name: entorno
|
|
27
|
+
describes: "la configuración de ejemplo de un entorno (`<entorno>.env.example`): variables con marcadores, nunca valores secretos"
|
|
28
|
+
- name: verificacion
|
|
29
|
+
describes: "opcional: la prueba de humo (`humo.sh`), que comprueba contra lo desplegado que funciona, sin imprimir secretos"
|
|
30
|
+
- name: documentacion
|
|
31
|
+
describes: cómo se despliega, se verifica y se revierte cada entorno (`DESPLIEGUE.md`)
|
|
32
|
+
|
|
33
|
+
extractors:
|
|
34
|
+
- mechanism: path
|
|
35
|
+
kind: definicion
|
|
36
|
+
pattern: "compose.yaml"
|
|
37
|
+
alternatives: ["compose.<entorno>.yaml"]
|
|
38
|
+
- mechanism: path
|
|
39
|
+
kind: entorno
|
|
40
|
+
pattern: "<entorno>.env.example"
|
|
41
|
+
- mechanism: path
|
|
42
|
+
kind: verificacion
|
|
43
|
+
pattern: "humo.sh"
|
|
44
|
+
- mechanism: path
|
|
45
|
+
kind: documentacion
|
|
46
|
+
pattern: "DESPLIEGUE.md"
|
|
47
|
+
|
|
48
|
+
# Una definición sin documentación no la sabe operar nadie más. La prueba de humo
|
|
49
|
+
# no se exige: si corrió lo confirma la persona en el hito.
|
|
50
|
+
coRequirements:
|
|
51
|
+
- when: definicion
|
|
52
|
+
requires: [documentacion]
|
|
53
|
+
scope: artifact
|
|
54
|
+
|
|
55
|
+
conventions:
|
|
56
|
+
oficio.1: >-
|
|
57
|
+
Los secretos no van en el repositorio: un `.env` dentro de `despliegue/` queda sin reclamar y no cierra la unidad.
|
|
58
|
+
Sácalo del repositorio, declara en su lugar su referencia (`<esquema>:<ruta>`) en el levantamiento de
|
|
59
|
+
infraestructura y deja en `<entorno>.env.example` la variable con un marcador (`DB_PASSWORD=<desde vault:kv/app/db>`).
|
|
60
|
+
oficio.2: >-
|
|
61
|
+
La validación en seco es `docker compose -f despliegue/compose.yaml config --quiet`, desde la raíz del proyecto;
|
|
62
|
+
la exige el paso `preparado` como una ejecución `on: change` con código 0. No necesita el daemon de Docker (solo
|
|
63
|
+
lee y valida la definición): se ejecuta de verdad aunque no se pueda levantar nada.
|
|
64
|
+
oficio.3: >-
|
|
65
|
+
`humo.sh`, si lo hay, comprueba lo desplegado por el camino real (una petición HTTP, una orden del programa) y
|
|
66
|
+
termina con 0 si funciona; recibe el entorno como argumento y no imprime ningún secreto. Es una ayuda, no una
|
|
67
|
+
exigencia: el hito `despliegue <entorno>` lo cumple la persona al confirmar que se desplegó y corrió; su ejecución
|
|
68
|
+
`on: entorno` (o el reporte del CI) se entrega como respaldo y sale en la pregunta.
|
|
69
|
+
oficio.4: >-
|
|
70
|
+
`DESPLIEGUE.md` dice, por entorno, cómo se despliega, cómo se comprueba que corrió (con `humo.sh` si lo hay), cómo se revierte y de dónde salen
|
|
71
|
+
las variables de cada `<entorno>.env.example`.
|
|
72
|
+
|
|
73
|
+
levels:
|
|
74
|
+
- id: L0
|
|
75
|
+
requiredRoles: []
|
|
76
|
+
title: OBJETIVO
|
|
77
|
+
instruction: >
|
|
78
|
+
Declara qué se despliega y en qué entornos, atendiendo a los técnicos del
|
|
79
|
+
levantamiento de infraestructura (la entrada): el modo, cada entorno y lo
|
|
80
|
+
acordado de cada uno.
|
|
81
|
+
- id: L1
|
|
82
|
+
requiredRoles: []
|
|
83
|
+
title: PIEZAS
|
|
84
|
+
instruction: >
|
|
85
|
+
Propón las piezas: la definición, la configuración de ejemplo de cada
|
|
86
|
+
entorno (nunca la real: los secretos van por su referencia), la
|
|
87
|
+
documentación y, si ayuda, la prueba de humo. Un `.env` no es una pieza: queda fuera del
|
|
88
|
+
repositorio.
|
|
89
|
+
fanout:
|
|
90
|
+
min: 3
|
|
91
|
+
max: 20
|
|
92
|
+
- id: L2
|
|
93
|
+
requiredRoles: []
|
|
94
|
+
title: FICHEROS
|
|
95
|
+
instruction: >
|
|
96
|
+
Declara cada fichero con su `location`, relativa a `despliegue/`:
|
|
97
|
+
`compose.yaml`, `<entorno>.env.example`, `DESPLIEGUE.md` y, si lo hay,
|
|
98
|
+
`humo.sh`. Si
|
|
99
|
+
dentro de `despliegue/` hay un `.env`, sácalo del repositorio y declara su
|
|
100
|
+
referencia en el levantamiento de infraestructura: aquí no lo reclama
|
|
101
|
+
nadie, y una unidad con un fichero sin reclamar no cierra.
|
|
102
|
+
fanout:
|
|
103
|
+
min: 3
|
|
104
|
+
max: 30
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Digestión de un código que ya existe.
|
|
2
|
+
#
|
|
3
|
+
# Su último nivel es la estructura base del proyecto: los artefactos (con su
|
|
4
|
+
# stack y su componente, o su arquetipo), la forma con sus señales (cada una con
|
|
5
|
+
# las rutas del árbol que la sostienen), el andamiaje y la cobertura. Arketum
|
|
6
|
+
# añade en la guía de cada nivel lo que calcula del árbol: las raíces candidatas
|
|
7
|
+
# (por las ubicaciones de raíz de los stacks), el encaje de cada stack y lo que
|
|
8
|
+
# queda fuera. La variante y los escalones los deriva Arketum de las señales.
|
|
9
|
+
#
|
|
10
|
+
# Cambios:
|
|
11
|
+
# - 1.1.0: cada artefacto lleva su juicio de ajuste (`ajuste`, `por_que` y, si
|
|
12
|
+
# nada calza, `nuevo`), como en la arquitectura (convención `ajuste: obligatorio`).
|
|
13
|
+
# - 1.2.0: la forma también lleva su juicio de ajuste (`ajuste` y `por_que`); una
|
|
14
|
+
# digestión no crea formas: si ninguna calza, se crea antes con el carril de
|
|
15
|
+
# arquetipo, o se digiere con reservas (convención `ajuste_forma: obligatorio`).
|
|
16
|
+
# - 1.3.0: forzar una forma que no cumple su `aplica` lo elige la persona: su
|
|
17
|
+
# respuesta, en el atributo `eleccion` de la `forma`.
|
|
18
|
+
name: digestion
|
|
19
|
+
version: 1.3.0
|
|
20
|
+
description: >-
|
|
21
|
+
Digestión de un código que ya existe: de lo que hay en el árbol a la estructura base de Arketum (artefactos, forma con sus señales, andamiaje y cobertura), sin cambiar código ni inferir requisitos. Es el artefacto de trabajo del carril `digestion`.
|
|
22
|
+
tags: [proceso, digestion, proyecto]
|
|
23
|
+
|
|
24
|
+
kinds:
|
|
25
|
+
- name: raiz
|
|
26
|
+
describes: "una raíz candidata del árbol (L0); atributo `path`"
|
|
27
|
+
- name: fuera
|
|
28
|
+
describes: "un grupo de rutas que no cae en ninguna raíz candidata (L0); atributo `path`"
|
|
29
|
+
- name: decision
|
|
30
|
+
describes: "qué es una raíz o un grupo (L1): un artefacto con capas (`stack` y `componente`), uno de una sola capa (`archetype`) o andamiaje"
|
|
31
|
+
- name: artefacto
|
|
32
|
+
describes: "un artefacto del proyecto (L2); id = el del artefacto; atributos `root`, `archetype` (nombre o nombre@versión) o, con capas, `stack` y `componente`, `dependsOn` y `touchWith` (ids separados por comas); y el juicio de ajuste: `ajuste` («calza», «calza_con_reservas» o «no_calza»), `por_que` (los elementos del caso de uso que inclinan a esta elección; con reservas, cuáles) y, con «no_calza», `nuevo` (por qué ninguno de los que hay calza y qué tendría el que se agrega)"
|
|
33
|
+
- name: andamiaje
|
|
34
|
+
describes: "algo que ningún arquetipo gobierna (L2); atributo `path` (acabado en / para una carpeta)"
|
|
35
|
+
- name: cobertura
|
|
36
|
+
describes: "la cobertura del proyecto (L2); atributo `value`: aviso o bloquea"
|
|
37
|
+
- name: forma
|
|
38
|
+
describes: "la forma de sistema (L2); atributo `name`, su juicio de ajuste (`ajuste`: «calza», que cumple su `aplica`, o «calza_con_reservas», con lo que se fuerza; y `por_que`, lo que en el árbol inclina a ella) y, si no cumple su `aplica` sin reservas, `motivo`; si no cumple su `aplica`, `eleccion`: lo que respondió la persona a forzarla o crear una nueva; la variante y los escalones los deriva Arketum (si los declaras, `variante` y `escalones`, tienen que casar; si ninguna variante aplica, `motivo_variante`)"
|
|
39
|
+
- name: senal
|
|
40
|
+
describes: "una señal de la forma (L2); id = la señal; atributos `valor` (con su tipo), `porque` y `rutas` (rutas del árbol que la sostienen, separadas por comas)"
|
|
41
|
+
- name: retirar
|
|
42
|
+
describes: "en un proyecto con artefactos, uno que sale de `proyecto.yaml` (L2); id = el artefacto (sin raíz, sin unidad viva y sin requisitos vivos)"
|
|
43
|
+
|
|
44
|
+
levels:
|
|
45
|
+
- id: L0
|
|
46
|
+
requiredRoles: []
|
|
47
|
+
title: RAÍCES
|
|
48
|
+
instruction: >
|
|
49
|
+
Lee el árbol (rutas, no contenidos) y lo que Arketum calcula de él en esta
|
|
50
|
+
guía. Declara un elemento `raiz` por cada raíz que vayas a proponer
|
|
51
|
+
(atributo `path`; `.` es la raíz del proyecto) y un elemento `fuera` por
|
|
52
|
+
cada grupo de rutas que no cae en ninguna (atributo `path`).
|
|
53
|
+
fanout:
|
|
54
|
+
min: 1
|
|
55
|
+
max: 40
|
|
56
|
+
- id: L1
|
|
57
|
+
requiredRoles: []
|
|
58
|
+
title: STACKS
|
|
59
|
+
instruction: >
|
|
60
|
+
Por cada raíz y cada grupo de fuera, un elemento `decision` (con su padre
|
|
61
|
+
en L0): con capas, `stack` y `componente` (el stack con más encaje no es
|
|
62
|
+
obligatorio, pero lo que dejas sin reclamar sale en el gate); de una sola
|
|
63
|
+
capa, `archetype`; o `andamiaje`. Lee del código lo justo para decidir la
|
|
64
|
+
forma del sistema: cuántos despliegues, pantallas, actores e integraciones,
|
|
65
|
+
y qué rutas lo muestran.
|
|
66
|
+
fanout:
|
|
67
|
+
min: 1
|
|
68
|
+
max: 40
|
|
69
|
+
- id: L2
|
|
70
|
+
requiredRoles: []
|
|
71
|
+
title: ESTRUCTURA BASE
|
|
72
|
+
instruction: >
|
|
73
|
+
Declara la estructura base, cada elemento con su padre en L1: un
|
|
74
|
+
`artefacto` por artefacto (atributos `root` y `stack` y `componente`, o
|
|
75
|
+
`archetype`; `dependsOn` y `touchWith` si hacen falta), un `andamiaje` por
|
|
76
|
+
ruta que no gobierna nadie (atributo `path`), una `cobertura` (`aviso` sobre
|
|
77
|
+
un código que ya existe), la `forma` (atributo `name`) y una `senal` por
|
|
78
|
+
cada señal de la forma, con `valor`, `porque` y `rutas` (las rutas del árbol
|
|
79
|
+
que la sostienen). Lo que dejes fuera de toda raíz y del andamiaje no se
|
|
80
|
+
rechaza: sale en el gate como lo que queda fuera (será deriva
|
|
81
|
+
`fuera_de_raiz`), y la persona decide caso a caso.
|
|
82
|
+
La variante y los escalones los deriva Arketum de las señales. En un
|
|
83
|
+
proyecto con artefactos, `retirar` los que ya no tienen raíz. No declares
|
|
84
|
+
requisitos: sembrarlos es otra unidad.
|
|
85
|
+
La `forma` lleva también su juicio de ajuste (`ajuste` y `por_que`): una digestión no crea formas; si ninguna calza, se crea antes con el carril de arquetipo, o se digiere con reservas. Si la más cercana no cumple su `aplica`, forzarla lo elige la persona, no tú: Arketum te da la pregunta, y su respuesta va en el atributo `eleccion` de la `forma`.
|
|
86
|
+
Cada `artefacto` lleva su juicio de ajuste: si lo elegido calza con el caso de uso (`ajuste`: calza, calza_con_reservas o no_calza), los elementos del caso que inclinan a esa elección (`por_que`) y, si nada de lo que hay en los catálogos calza, `nuevo`: por qué ninguno calza y qué tendría el que se agrega, con un nombre propio que no exista. Elige la mejor alternativa para el caso de uso, no la que está a mano: crear uno nuevo siempre es una alternativa; si se agrega, Arketum incluye el paso que lo crea y la persona lo aprueba allí.
|
|
87
|
+
# Un elemento por artefacto y por andamiaje, la cobertura, la forma, sus
|
|
88
|
+
# señales (hasta siete en el catálogo de ejemplo) y lo que se retira: 120
|
|
89
|
+
# deja sitio a un monorepo de unas cien piezas sin partir la digestión.
|
|
90
|
+
fanout:
|
|
91
|
+
min: 1
|
|
92
|
+
max: 120
|
|
93
|
+
|
|
94
|
+
# El juicio de ajuste de cada artefacto de la estructura base lo exige Arketum al entregar el último nivel.
|
|
95
|
+
conventions:
|
|
96
|
+
ajuste: obligatorio
|
|
97
|
+
ajuste_forma: obligatorio
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# Documento académico. LaTeX.
|
|
2
|
+
#
|
|
3
|
+
# Declara la forma de un documento que sostiene afirmaciones —una tesis, un
|
|
4
|
+
# artículo, un informe de investigación—, no el contenido de ninguno. No sabe
|
|
5
|
+
# de qué trata.
|
|
6
|
+
#
|
|
7
|
+
# Este arquetipo existe además para probar algo: si la escalera solo sirviera
|
|
8
|
+
# para código, aquí se rompería.
|
|
9
|
+
name: documento-academico
|
|
10
|
+
version: 1.0.0
|
|
11
|
+
description: >-
|
|
12
|
+
Documento que sostiene afirmaciones con fuentes (tesis, artículo, informe de investigación), en LaTeX. Desciende de la pregunta a la estructura, las afirmaciones y sus dependencias, hasta el manuscrito. Elígelo cuando el artefacto sea prosa que tiene que poder defenderse, no documentación de un sistema.
|
|
13
|
+
tags: [documento, investigacion, latex]
|
|
14
|
+
|
|
15
|
+
kinds:
|
|
16
|
+
- name: objetivo
|
|
17
|
+
describes: "pieza de la solicitud (L0): qué se quiere demostrar"
|
|
18
|
+
- name: capitulo
|
|
19
|
+
describes: sección mayor con una tesis propia
|
|
20
|
+
- name: afirmacion
|
|
21
|
+
describes: lo que un capítulo sostiene y que puede ser falso
|
|
22
|
+
- name: figura
|
|
23
|
+
describes: imagen, diagrama o gráfico
|
|
24
|
+
- name: pie
|
|
25
|
+
describes: texto que explica una figura y la hace citable
|
|
26
|
+
- name: referencia
|
|
27
|
+
describes: entrada bibliográfica
|
|
28
|
+
- name: dato
|
|
29
|
+
describes: fichero de datos que respalda una afirmación
|
|
30
|
+
- name: dependencia
|
|
31
|
+
describes: arista del cableado (L3) entre dos piezas declaradas
|
|
32
|
+
- name: documento
|
|
33
|
+
describes: fichero de política o de notas
|
|
34
|
+
|
|
35
|
+
extractors:
|
|
36
|
+
- mechanism: path
|
|
37
|
+
kind: capitulo
|
|
38
|
+
pattern: "capitulos/<nombre>.tex"
|
|
39
|
+
- mechanism: path
|
|
40
|
+
kind: figura
|
|
41
|
+
pattern: "figuras/<nombre>.pdf"
|
|
42
|
+
- mechanism: path
|
|
43
|
+
kind: pie
|
|
44
|
+
pattern: "figuras/<nombre>.tex"
|
|
45
|
+
- mechanism: path
|
|
46
|
+
kind: referencia
|
|
47
|
+
pattern: "bibliografia/<nombre>.bib"
|
|
48
|
+
- mechanism: path
|
|
49
|
+
kind: dato
|
|
50
|
+
pattern: "datos/<nombre>.csv"
|
|
51
|
+
|
|
52
|
+
# Una figura sin pie no se puede citar ni entender fuera de su página. Es el
|
|
53
|
+
# mismo co-requisito que «implementación necesita prueba», en otro dominio.
|
|
54
|
+
coRequirements:
|
|
55
|
+
- when: figura
|
|
56
|
+
requires: [pie]
|
|
57
|
+
scope: artifact
|
|
58
|
+
|
|
59
|
+
levels:
|
|
60
|
+
- id: L0
|
|
61
|
+
requiredRoles: []
|
|
62
|
+
title: PREGUNTA
|
|
63
|
+
instruction: >
|
|
64
|
+
Declara qué se quiere demostrar y ante quién. Una pregunta que no puede
|
|
65
|
+
responderse «no» no es una pregunta de investigación.
|
|
66
|
+
- id: L1
|
|
67
|
+
requiredRoles: [introduccion, desarrollo, conclusion]
|
|
68
|
+
title: ESTRUCTURA
|
|
69
|
+
instruction: >
|
|
70
|
+
Propón la estructura de capítulos y qué cubre cada uno. Todo documento que
|
|
71
|
+
sostiene algo plantea, desarrolla y concluye; si tu estructura no distingue
|
|
72
|
+
esas tres funciones, no está estructurada.
|
|
73
|
+
fanout:
|
|
74
|
+
min: 3
|
|
75
|
+
max: 15
|
|
76
|
+
- id: L2
|
|
77
|
+
requiredRoles: []
|
|
78
|
+
title: AFIRMACIONES
|
|
79
|
+
instruction: >
|
|
80
|
+
Declara qué afirma cada capítulo y con qué evidencia lo sostiene. Una
|
|
81
|
+
afirmación que ninguna evidencia puede desmentir no es una afirmación:
|
|
82
|
+
decláralo si es el caso, en vez de disfrazarla.
|
|
83
|
+
fanout:
|
|
84
|
+
min: 1
|
|
85
|
+
max: 40
|
|
86
|
+
- id: L3
|
|
87
|
+
requiredRoles: []
|
|
88
|
+
title: DEPENDENCIAS
|
|
89
|
+
instruction: >
|
|
90
|
+
Declara qué afirmación se apoya en cuál. Si una cadena de apoyos vuelve
|
|
91
|
+
sobre sí misma, el documento razona en círculo y este nivel es donde se ve.
|
|
92
|
+
fanout:
|
|
93
|
+
min: 1
|
|
94
|
+
max: 50
|
|
95
|
+
- id: L4
|
|
96
|
+
requiredRoles: []
|
|
97
|
+
title: MANUSCRITO
|
|
98
|
+
instruction: >
|
|
99
|
+
Escribe el texto. Cada figura viene con su pie y cada afirmación con la
|
|
100
|
+
referencia o el dato que la sostiene.
|
|
101
|
+
fanout:
|
|
102
|
+
min: 1
|
|
103
|
+
max: 60
|
|
104
|
+
|
|
105
|
+
# La autorrevisión: qué tiene que comprobar quien entrega, y con qué acción.
|
|
106
|
+
#
|
|
107
|
+
# La escalera comprueba los saltos ENTRE niveles. Nadie comprueba que el
|
|
108
|
+
# manuscrito responda la pregunta que se declaró en L0, porque no hay peldaño
|
|
109
|
+
# anterior contra el que reconciliar. Eso es lo que cierra esta sección.
|
|
110
|
+
selfReview:
|
|
111
|
+
criteria:
|
|
112
|
+
- check: Toda cita tiene fuente localizable y la fuente dice lo que se le atribuye
|
|
113
|
+
how: >
|
|
114
|
+
Recorre las citas una a una, abre la fuente y contrasta la afirmación con
|
|
115
|
+
el pasaje. Una fuente que no se pudo abrir cuenta como no comprobada.
|
|
116
|
+
evidence: medida
|
|
117
|
+
- check: El formato de referencias es el declarado y es uniforme en todo el documento
|
|
118
|
+
how: Compara todas las entradas contra el estilo declarado en L1.
|
|
119
|
+
evidence: medida
|
|
120
|
+
- check: No hay afirmaciones que se contradigan entre secciones
|
|
121
|
+
how: >
|
|
122
|
+
Contrasta cada afirmación de L2 con las demás, en particular las de
|
|
123
|
+
secciones distintas que hablen del mismo objeto.
|
|
124
|
+
evidence: juicio
|
|
125
|
+
- check: La estructura entregada es la que se declaró en L1
|
|
126
|
+
evidence: juicio
|
|
127
|
+
- check: El manuscrito responde la pregunta declarada en L0, y no otra
|
|
128
|
+
evidence: juicio
|
|
129
|
+
groundingCheck: true
|
|
130
|
+
groundingScope: alguna fuente, cita, dato o afirmación
|
|
131
|
+
assumptionsMustDeclare: true
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Inventario funcional de un sistema existente.
|
|
2
|
+
#
|
|
3
|
+
# Antes de migrar, qué hace hoy el sistema: las funciones que no se pueden
|
|
4
|
+
# perder. Es la línea de partida del plan de migración.
|
|
5
|
+
name: inventario-funcional
|
|
6
|
+
version: 1.1.0
|
|
7
|
+
description: >-
|
|
8
|
+
Qué hace hoy un sistema existente, función a función, antes de migrarlo: lo que no se puede perder. Es el primer artefacto de trabajo del carril de migración. Elígelo para describir un sistema que ya existe; para pedir algo nuevo corresponde un PRD.
|
|
9
|
+
tags: [proceso, migracion, inventario]
|
|
10
|
+
|
|
11
|
+
kinds:
|
|
12
|
+
- name: objetivo
|
|
13
|
+
describes: "pieza de la solicitud (L0): qué sistema se inventaría y para qué migración"
|
|
14
|
+
- name: funcion
|
|
15
|
+
describes: algo que el sistema hace hoy y que alguien usa
|
|
16
|
+
- name: documento
|
|
17
|
+
describes: el fichero del inventario, 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: SISTEMA
|
|
28
|
+
instruction: >
|
|
29
|
+
Declara qué sistema se inventaría, dónde vive y hacia dónde se migra.
|
|
30
|
+
- id: L1
|
|
31
|
+
requiredRoles: []
|
|
32
|
+
title: FUNCIONES
|
|
33
|
+
instruction: >
|
|
34
|
+
Declara las funciones del sistema actual, cada una con quién la usa, y el
|
|
35
|
+
fichero del inventario (tipo `documento`, con su `location`). Una función
|
|
36
|
+
que nadie usa se declara igual: decidir si se pierde es del plan. Una
|
|
37
|
+
función puede sembrar el índice de requisitos del sistema con los mismos
|
|
38
|
+
atributos que un requisito del PRD (`tipo`, `requisito`, `titulo`,
|
|
39
|
+
`sale_de` y los demás): aprobar el inventario los acuerda.
|
|
40
|
+
fanout:
|
|
41
|
+
min: 1
|
|
42
|
+
max: 80
|