@nac3/forge-cli 1.23.7 → 1.24.0
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/dist/bin/yf.js +0 -0
- package/dist/chat/claude.d.ts +8 -0
- package/dist/chat/claude.d.ts.map +1 -1
- package/dist/chat/claude.js.map +1 -1
- package/dist/chat/claude_cli.d.ts +23 -0
- package/dist/chat/claude_cli.d.ts.map +1 -1
- package/dist/chat/claude_cli.js +76 -2
- package/dist/chat/claude_cli.js.map +1 -1
- package/dist/chat/doctrine_digest.d.ts.map +1 -1
- package/dist/chat/doctrine_digest.js +2 -1
- package/dist/chat/doctrine_digest.js.map +1 -1
- package/dist/chat/server.d.ts.map +1 -1
- package/dist/chat/server.js +11 -0
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/tools/pending.d.ts +11 -0
- package/dist/chat/tools/pending.d.ts.map +1 -1
- package/dist/chat/tools/pending.js +55 -8
- package/dist/chat/tools/pending.js.map +1 -1
- package/dist/chat/tools/shell.d.ts +39 -4
- package/dist/chat/tools/shell.d.ts.map +1 -1
- package/dist/chat/tools/shell.js +167 -7
- package/dist/chat/tools/shell.js.map +1 -1
- package/dist/chat/tools/urazuke.d.ts.map +1 -1
- package/dist/chat/tools/urazuke.js +8 -5
- package/dist/chat/tools/urazuke.js.map +1 -1
- package/dist/chat/urazuke_section.d.ts +26 -4
- package/dist/chat/urazuke_section.d.ts.map +1 -1
- package/dist/chat/urazuke_section.js +115 -9
- package/dist/chat/urazuke_section.js.map +1 -1
- package/dist/commands/pending.d.ts.map +1 -1
- package/dist/commands/pending.js +116 -12
- package/dist/commands/pending.js.map +1 -1
- package/dist/commands/urazuke.d.ts +3 -0
- package/dist/commands/urazuke.d.ts.map +1 -1
- package/dist/commands/urazuke.js +80 -3
- package/dist/commands/urazuke.js.map +1 -1
- package/dist/core/ascii_purity.d.ts +69 -0
- package/dist/core/ascii_purity.d.ts.map +1 -0
- package/dist/core/ascii_purity.js +141 -0
- package/dist/core/ascii_purity.js.map +1 -0
- package/dist/core/battery_stamp.d.ts +85 -0
- package/dist/core/battery_stamp.d.ts.map +1 -0
- package/dist/core/battery_stamp.js +237 -0
- package/dist/core/battery_stamp.js.map +1 -0
- package/dist/core/ci_gaps.d.ts +129 -0
- package/dist/core/ci_gaps.d.ts.map +1 -0
- package/dist/core/ci_gaps.js +352 -0
- package/dist/core/ci_gaps.js.map +1 -0
- package/dist/core/doc_citations.d.ts +133 -0
- package/dist/core/doc_citations.d.ts.map +1 -0
- package/dist/core/doc_citations.js +271 -0
- package/dist/core/doc_citations.js.map +1 -0
- package/dist/docs/doctrine/urazuke.md +173 -2
- package/dist/nac3/internal_manifest.d.ts.map +1 -1
- package/dist/nac3/internal_manifest.js +28 -2
- package/dist/nac3/internal_manifest.js.map +1 -1
- package/dist/pending/store.d.ts +29 -0
- package/dist/pending/store.d.ts.map +1 -1
- package/dist/pending/store.js +51 -1
- package/dist/pending/store.js.map +1 -1
- package/dist/pending/types.d.ts +23 -0
- package/dist/pending/types.d.ts.map +1 -1
- package/dist/pending/types.js.map +1 -1
- package/dist/telemetry/usage.d.ts +18 -0
- package/dist/telemetry/usage.d.ts.map +1 -1
- package/dist/telemetry/usage.js +16 -1
- package/dist/telemetry/usage.js.map +1 -1
- package/dist/urazuke/announce.d.ts +7 -0
- package/dist/urazuke/announce.d.ts.map +1 -1
- package/dist/urazuke/announce.js +20 -0
- package/dist/urazuke/announce.js.map +1 -1
- package/dist/urazuke/catalog.d.ts +1 -1
- package/dist/urazuke/catalog.d.ts.map +1 -1
- package/dist/urazuke/catalog.js.map +1 -1
- package/dist/urazuke/close_gate.d.ts +31 -4
- package/dist/urazuke/close_gate.d.ts.map +1 -1
- package/dist/urazuke/close_gate.js +70 -13
- package/dist/urazuke/close_gate.js.map +1 -1
- package/dist/urazuke/current.d.ts +28 -0
- package/dist/urazuke/current.d.ts.map +1 -1
- package/dist/urazuke/current.js +18 -5
- package/dist/urazuke/current.js.map +1 -1
- package/dist/urazuke/cycle.d.ts +3 -0
- package/dist/urazuke/cycle.d.ts.map +1 -1
- package/dist/urazuke/cycle.js +5 -3
- package/dist/urazuke/cycle.js.map +1 -1
- package/dist/urazuke/evidence.d.ts +14 -1
- package/dist/urazuke/evidence.d.ts.map +1 -1
- package/dist/urazuke/evidence.js +88 -2
- package/dist/urazuke/evidence.js.map +1 -1
- package/dist/urazuke/evidence_env.d.ts +78 -0
- package/dist/urazuke/evidence_env.d.ts.map +1 -0
- package/dist/urazuke/evidence_env.js +341 -0
- package/dist/urazuke/evidence_env.js.map +1 -0
- package/dist/urazuke/freeze.d.ts.map +1 -1
- package/dist/urazuke/freeze.js +16 -9
- package/dist/urazuke/freeze.js.map +1 -1
- package/dist/urazuke/gate.d.ts +48 -0
- package/dist/urazuke/gate.d.ts.map +1 -1
- package/dist/urazuke/gate.js +251 -25
- package/dist/urazuke/gate.js.map +1 -1
- package/dist/urazuke/gates_data.d.ts +30 -3
- package/dist/urazuke/gates_data.d.ts.map +1 -1
- package/dist/urazuke/gates_data.js +51 -5
- package/dist/urazuke/gates_data.js.map +1 -1
- package/dist/urazuke/gates_pull.d.ts +40 -0
- package/dist/urazuke/gates_pull.d.ts.map +1 -1
- package/dist/urazuke/gates_pull.js +118 -8
- package/dist/urazuke/gates_pull.js.map +1 -1
- package/dist/urazuke/manual_cases.d.ts +11 -1
- package/dist/urazuke/manual_cases.d.ts.map +1 -1
- package/dist/urazuke/manual_cases.js +1 -0
- package/dist/urazuke/manual_cases.js.map +1 -1
- package/dist/urazuke/overrides.d.ts +107 -0
- package/dist/urazuke/overrides.d.ts.map +1 -0
- package/dist/urazuke/overrides.js +128 -0
- package/dist/urazuke/overrides.js.map +1 -0
- package/dist/urazuke/probes.d.ts.map +1 -1
- package/dist/urazuke/probes.js +51 -0
- package/dist/urazuke/probes.js.map +1 -1
- package/dist/urazuke/profiles.d.ts +135 -0
- package/dist/urazuke/profiles.d.ts.map +1 -0
- package/dist/urazuke/profiles.js +470 -0
- package/dist/urazuke/profiles.js.map +1 -0
- package/dist/urazuke/receipt_audit.d.ts +67 -0
- package/dist/urazuke/receipt_audit.d.ts.map +1 -0
- package/dist/urazuke/receipt_audit.js +103 -0
- package/dist/urazuke/receipt_audit.js.map +1 -0
- package/dist/urazuke/receipts.d.ts +22 -0
- package/dist/urazuke/receipts.d.ts.map +1 -1
- package/dist/urazuke/receipts.js +44 -0
- package/dist/urazuke/receipts.js.map +1 -1
- package/dist/urazuke/report.d.ts +30 -0
- package/dist/urazuke/report.d.ts.map +1 -1
- package/dist/urazuke/report.js +39 -0
- package/dist/urazuke/report.js.map +1 -1
- package/dist/urazuke/reset.d.ts +35 -0
- package/dist/urazuke/reset.d.ts.map +1 -0
- package/dist/urazuke/reset.js +150 -0
- package/dist/urazuke/reset.js.map +1 -0
- package/dist/urazuke/retro.d.ts +5 -1
- package/dist/urazuke/retro.d.ts.map +1 -1
- package/dist/urazuke/retro.js +21 -8
- package/dist/urazuke/retro.js.map +1 -1
- package/dist/urazuke/section.d.ts.map +1 -1
- package/dist/urazuke/section.js +17 -2
- package/dist/urazuke/section.js.map +1 -1
- package/dist/urazuke/semantics.d.ts +173 -0
- package/dist/urazuke/semantics.d.ts.map +1 -0
- package/dist/urazuke/semantics.js +232 -0
- package/dist/urazuke/semantics.js.map +1 -0
- package/dist/urazuke/start.d.ts +8 -0
- package/dist/urazuke/start.d.ts.map +1 -1
- package/dist/urazuke/start.js +10 -2
- package/dist/urazuke/start.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/workflow/orchestrator.d.ts.map +1 -1
- package/dist/workflow/orchestrator.js +6 -7
- package/dist/workflow/orchestrator.js.map +1 -1
- package/docs/doctrine/urazuke.md +173 -2
- package/package.json +24 -20
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EL ENTORNO DEL WORKTREE DE EVIDENCIA -- F-13 (decision del dueno,
|
|
3
|
+
* 2026-11-01).
|
|
4
|
+
*
|
|
5
|
+
* EL DEFECTO, en el orden en que importa. El worktree del red_proof se arma
|
|
6
|
+
* con `git worktree add` mas el overlay de lo no commiteado, y ninguno de
|
|
7
|
+
* los dos lleva lo IGNORADO. Lo que un proyecto necesita para correr --
|
|
8
|
+
* `.env` y compania -- esta justamente en `.gitignore`, asi que el worktree
|
|
9
|
+
* arranca SIN entorno. Hasta aca es una molestia. Lo que lo vuelve grave es
|
|
10
|
+
* lo que se midio despues: el rojo que sale de ahi -- un rojo por falta de
|
|
11
|
+
* entorno, que no distinguio ninguna conducta -- salia con veredicto ok Y
|
|
12
|
+
* contado como rojo FUERTE, asi que la compuerta del cierre lo aceptaba
|
|
13
|
+
* como prueba de que la mutacion fue detectada. Eso es el mecanismo central
|
|
14
|
+
* del metodo certificando que detecto algo que nunca detecto.
|
|
15
|
+
*
|
|
16
|
+
* Palabras del dueno sobre el orden: "el overlay decide CUANTAS VECES va a
|
|
17
|
+
* pasar; la clasificacion decide SI PASA INADVERTIDO". Asi que este modulo
|
|
18
|
+
* trae las dos mitades, y la primera no depende de la segunda:
|
|
19
|
+
*
|
|
20
|
+
* 1. LA CLASIFICACION (no se puede desactivar). `absentEnvironment` mira
|
|
21
|
+
* si quedo en la raiz del proyecto un archivo con forma de entorno que
|
|
22
|
+
* NO llego al worktree. Mientras esa lista no este vacia, el rojo no
|
|
23
|
+
* puede contar como fuerte (receipts.ts/isStrongRed) y el recibo dice
|
|
24
|
+
* el motivo con el nombre del archivo. No afirma que el rojo fue
|
|
25
|
+
* CAUSADO por eso -- afirma que corrio con el entorno incompleto, que
|
|
26
|
+
* es lo unico que se puede medir y es suficiente para no certificarlo.
|
|
27
|
+
*
|
|
28
|
+
* 2. EL ACARREO DECLARADO (opcion (b) del informe, elegida por el dueno).
|
|
29
|
+
* Solo viaja lo que el proyecto DECLARA en `yujin.forge.json`:
|
|
30
|
+
*
|
|
31
|
+
* "urazuke": { "evidence_env": {
|
|
32
|
+
* "include": ["infra/.env", "config/*.local.json"],
|
|
33
|
+
* "max_bytes": 1048576, "max_files": 20
|
|
34
|
+
* } }
|
|
35
|
+
*
|
|
36
|
+
* Sin declaracion no viaja nada: agregar `--ignored` a secas
|
|
37
|
+
* arrastraria node_modules, dist, coverage y los cache, y el worktree
|
|
38
|
+
* quedaria inutilizable. El tope existe para que una declaracion no
|
|
39
|
+
* pueda arrastrar el mundo con un `**`, y lo que no entra en el tope
|
|
40
|
+
* se RECHAZA (no se recorta en silencio) y se nombra en el recibo.
|
|
41
|
+
*
|
|
42
|
+
* 3. LA MITAD DEL RECIBO DE LA OPCION (c). Un archivo declarado que NO
|
|
43
|
+
* esta en disco aparece en `declared_missing` y sale en el recibo. Sin
|
|
44
|
+
* eso, el caso "lo declare y me lo borre" es indistinguible de "nunca
|
|
45
|
+
* lo declare": las dos veces el worktree arranca sin el archivo y las
|
|
46
|
+
* dos veces en silencio.
|
|
47
|
+
*
|
|
48
|
+
* LA FORMA DE LA DECLARACION SIGUE A semantics.ts: la ausencia cae al
|
|
49
|
+
* default (no acarrea nada) y una declaracion que no se entiende se RECHAZA
|
|
50
|
+
* ENTERA y en voz alta. Media declaracion aplicada -- tres de cinco
|
|
51
|
+
* archivos -- es exactamente el worktree a medias que F-13 vino a cerrar.
|
|
52
|
+
*
|
|
53
|
+
* ASCII-only.
|
|
54
|
+
*/
|
|
55
|
+
import fs from 'node:fs/promises';
|
|
56
|
+
import path from 'node:path';
|
|
57
|
+
/* ===================================================================
|
|
58
|
+
* 1. LA DECLARACION
|
|
59
|
+
* ================================================================= */
|
|
60
|
+
/** El tope por default cuando la declaracion no lo dice. Un `.env` real
|
|
61
|
+
* pesa cientos de bytes; un megabyte alcanza para un par de archivos de
|
|
62
|
+
* configuracion y no para un bundle. */
|
|
63
|
+
export const EVIDENCE_ENV_DEFAULT_MAX_BYTES = 1024 * 1024;
|
|
64
|
+
/** El techo que una declaracion no puede levantar. Sin esto, `max_bytes`
|
|
65
|
+
* en un numero enorme mas un `include` generoso es el mismo `--ignored` a
|
|
66
|
+
* secas que esta opcion vino a evitar, escrito por el proyecto. */
|
|
67
|
+
export const EVIDENCE_ENV_HARD_MAX_BYTES = 16 * 1024 * 1024;
|
|
68
|
+
/** Idem por cantidad de archivos. */
|
|
69
|
+
export const EVIDENCE_ENV_DEFAULT_MAX_FILES = 20;
|
|
70
|
+
export const EVIDENCE_ENV_HARD_MAX_FILES = 200;
|
|
71
|
+
/** Una entrada de `include` que este modulo se niega a resolver, con el
|
|
72
|
+
* motivo. Separada de la validacion de la declaracion entera porque una
|
|
73
|
+
* ruta mala NO tiene que tirar abajo las otras cuatro: se nombra y se
|
|
74
|
+
* sigue. Lo que si tira abajo la declaracion entera es que no se entienda
|
|
75
|
+
* su FORMA (ver resolveEvidenceEnvDeclaration). */
|
|
76
|
+
function unsafeInclude(rel) {
|
|
77
|
+
if (!rel.trim())
|
|
78
|
+
return 'entrada vacia';
|
|
79
|
+
if (path.isAbsolute(rel) || /^[A-Za-z]:/.test(rel))
|
|
80
|
+
return 'ruta absoluta';
|
|
81
|
+
if (rel.split(/[\\/]/).some((s) => s === '..'))
|
|
82
|
+
return 'sale del proyecto con ..';
|
|
83
|
+
if (rel.includes('**'))
|
|
84
|
+
return 'usa ** (el acarreo declarado no recorre el arbol: nombra los directorios)';
|
|
85
|
+
if (rel.split(/[\\/]/).includes('node_modules'))
|
|
86
|
+
return 'node_modules nunca viaja';
|
|
87
|
+
if (path.dirname(rel).includes('*'))
|
|
88
|
+
return 'el glob solo aplica al nombre del archivo, no al camino';
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
/** Validar y resolver la declaracion. La ausencia cae al default (no
|
|
92
|
+
* acarrea nada); una forma que no se entiende se rechaza ENTERA. */
|
|
93
|
+
export function resolveEvidenceEnvDeclaration(raw) {
|
|
94
|
+
if (raw === undefined || raw === null)
|
|
95
|
+
return { notices: [] };
|
|
96
|
+
const refuse = (why) => ({
|
|
97
|
+
notices: [why + ' -- no se acarrea NINGUN archivo ignorado al worktree de evidencia.'],
|
|
98
|
+
});
|
|
99
|
+
if (typeof raw !== 'object' || Array.isArray(raw))
|
|
100
|
+
return refuse('urazuke.evidence_env no es un objeto');
|
|
101
|
+
const o = raw;
|
|
102
|
+
if (!Array.isArray(o.include))
|
|
103
|
+
return refuse('urazuke.evidence_env no trae `include` como lista');
|
|
104
|
+
if (!o.include.length)
|
|
105
|
+
return refuse('urazuke.evidence_env declara `include` vacio');
|
|
106
|
+
const notices = [];
|
|
107
|
+
const include = [];
|
|
108
|
+
for (const e of o.include) {
|
|
109
|
+
if (typeof e !== 'string') {
|
|
110
|
+
notices.push('una entrada de `include` no es un texto y NO se acarrea: ' + JSON.stringify(e ?? null));
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
const rel = e.trim().split('\\').join('/');
|
|
114
|
+
const why = unsafeInclude(rel);
|
|
115
|
+
if (why) {
|
|
116
|
+
notices.push('"' + rel + '" NO se acarrea: ' + why);
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
include.push(rel);
|
|
120
|
+
}
|
|
121
|
+
if (!include.length) {
|
|
122
|
+
/* El motivo POR ENTRADA se conserva. Reemplazarlo por "ninguna quedo en
|
|
123
|
+
* pie" deja al que declaro un glob con ** sin saber que fue el `**`: es la
|
|
124
|
+
* misma ausencia sin motivo que M-03, cometida en el arreglo de F-13. */
|
|
125
|
+
return { notices: [...notices, 'ninguna entrada de `include` quedo en pie'
|
|
126
|
+
+ ' -- no se acarrea NINGUN archivo ignorado al worktree de evidencia.'] };
|
|
127
|
+
}
|
|
128
|
+
const num = (v, def, hard, name) => {
|
|
129
|
+
if (v === undefined)
|
|
130
|
+
return def;
|
|
131
|
+
if (typeof v !== 'number' || !Number.isFinite(v) || v <= 0) {
|
|
132
|
+
notices.push('`' + name + '` no es un numero positivo: rige el default ' + def + '.');
|
|
133
|
+
return def;
|
|
134
|
+
}
|
|
135
|
+
if (v > hard) {
|
|
136
|
+
notices.push('`' + name + '` declarado en ' + v + ' supera el techo de esta instalacion ('
|
|
137
|
+
+ hard + '): rige el techo.');
|
|
138
|
+
return hard;
|
|
139
|
+
}
|
|
140
|
+
return Math.floor(v);
|
|
141
|
+
};
|
|
142
|
+
return {
|
|
143
|
+
declaration: {
|
|
144
|
+
include,
|
|
145
|
+
max_bytes: num(o.max_bytes, EVIDENCE_ENV_DEFAULT_MAX_BYTES, EVIDENCE_ENV_HARD_MAX_BYTES, 'max_bytes'),
|
|
146
|
+
max_files: num(o.max_files, EVIDENCE_ENV_DEFAULT_MAX_FILES, EVIDENCE_ENV_HARD_MAX_FILES, 'max_files'),
|
|
147
|
+
},
|
|
148
|
+
notices,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/** Leer la declaracion de `yujin.forge.json`. Nunca tira: un manifiesto
|
|
152
|
+
* ausente o ilegible es "no hay declaracion", y eso se dice. */
|
|
153
|
+
export async function readEvidenceEnvDeclaration(projectRoot) {
|
|
154
|
+
let raw = '';
|
|
155
|
+
try {
|
|
156
|
+
raw = await fs.readFile(path.join(projectRoot, 'yujin.forge.json'), 'utf8');
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return { notices: [] };
|
|
160
|
+
}
|
|
161
|
+
let parsed;
|
|
162
|
+
try {
|
|
163
|
+
parsed = JSON.parse(raw);
|
|
164
|
+
}
|
|
165
|
+
catch (e) {
|
|
166
|
+
return { notices: ['yujin.forge.json no se pudo leer como JSON ('
|
|
167
|
+
+ (e instanceof Error ? e.message : String(e)).slice(0, 160)
|
|
168
|
+
+ '): no se acarrea ningun archivo ignorado al worktree de evidencia.'] };
|
|
169
|
+
}
|
|
170
|
+
const urz = parsed?.urazuke;
|
|
171
|
+
return resolveEvidenceEnvDeclaration(urz?.evidence_env);
|
|
172
|
+
}
|
|
173
|
+
/* ===================================================================
|
|
174
|
+
* 2. LA CLASIFICACION: QUE ENTORNO LE FALTO AL WORKTREE
|
|
175
|
+
* ================================================================= */
|
|
176
|
+
/** La FORMA de un archivo de entorno, no la verdad sobre el proyecto.
|
|
177
|
+
*
|
|
178
|
+
* Se mira solo la raiz y solo estos nombres, a proposito: la lista corta
|
|
179
|
+
* es conservadora en la direccion correcta -- solo puede BAJAR el peso de
|
|
180
|
+
* una evidencia, nunca subirlo -- y el recibo dice que archivo fue, asi
|
|
181
|
+
* que una deteccion de mas se lee y se descarta en un segundo. Un proyecto
|
|
182
|
+
* cuyo entorno no tiene esta forma lo declara con `include` (que es la
|
|
183
|
+
* respuesta completa) y deja de depender de esta heuristica.
|
|
184
|
+
*
|
|
185
|
+
* `.env.example` / `.sample` / `.template` quedan afuera: son plantillas
|
|
186
|
+
* que se commitean, asi que ya viajan, y nombrarlas seria ruido. */
|
|
187
|
+
const ENV_SHAPES = [
|
|
188
|
+
/^\.env$/i,
|
|
189
|
+
/^\.env\.(?!example$|sample$|template$|dist$)[A-Za-z0-9_.-]+$/i,
|
|
190
|
+
];
|
|
191
|
+
/** True cuando el nombre tiene forma de archivo de entorno. */
|
|
192
|
+
export function looksLikeEnvFile(name) {
|
|
193
|
+
return ENV_SHAPES.some((re) => re.test(name));
|
|
194
|
+
}
|
|
195
|
+
/** Los archivos con forma de entorno que estan en la raiz del proyecto y NO
|
|
196
|
+
* llegaron al worktree. Vacio = el entorno de la raiz llego entero (o no
|
|
197
|
+
* habia ninguno, que para esta medicion es lo mismo).
|
|
198
|
+
*
|
|
199
|
+
* Solo la raiz: bajar el arbol buscando `.env` costaria un recorrido
|
|
200
|
+
* completo en cada rojo, y el caso que se midio -- y el unico que se
|
|
201
|
+
* puede nombrar sin adivinar -- es el de la raiz. Un entorno mas abajo se
|
|
202
|
+
* declara. */
|
|
203
|
+
export async function absentEnvironment(projectRoot, wt) {
|
|
204
|
+
let names = [];
|
|
205
|
+
try {
|
|
206
|
+
names = (await fs.readdir(projectRoot, { withFileTypes: true }))
|
|
207
|
+
.filter((d) => d.isFile() && looksLikeEnvFile(d.name))
|
|
208
|
+
.map((d) => d.name)
|
|
209
|
+
.sort();
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
return [];
|
|
213
|
+
}
|
|
214
|
+
const out = [];
|
|
215
|
+
for (const n of names) {
|
|
216
|
+
try {
|
|
217
|
+
await fs.stat(path.join(wt, n));
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
out.push(n);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return out;
|
|
224
|
+
}
|
|
225
|
+
function emptyReport() {
|
|
226
|
+
return { source: 'none', carried: [], declared_missing: [], rejected: [], absent: [], bytes: 0, notices: [] };
|
|
227
|
+
}
|
|
228
|
+
/** Resolver una entrada de `include` a archivos reales. El glob aplica al
|
|
229
|
+
* nombre; el directorio tiene que existir tal cual. */
|
|
230
|
+
async function resolveInclude(projectRoot, rel) {
|
|
231
|
+
const base = path.posix.basename(rel);
|
|
232
|
+
const dirRel = path.posix.dirname(rel);
|
|
233
|
+
const dirAbs = path.join(projectRoot, dirRel === '.' ? '' : dirRel);
|
|
234
|
+
if (!base.includes('*')) {
|
|
235
|
+
try {
|
|
236
|
+
if ((await fs.stat(path.join(dirAbs, base))).isFile()) {
|
|
237
|
+
return [dirRel === '.' ? base : dirRel + '/' + base];
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
catch { /* no esta */ }
|
|
241
|
+
return [];
|
|
242
|
+
}
|
|
243
|
+
const re = new RegExp('^' + base.split('*').map((s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('.*') + '$', 'i');
|
|
244
|
+
let names = [];
|
|
245
|
+
try {
|
|
246
|
+
names = (await fs.readdir(dirAbs, { withFileTypes: true }))
|
|
247
|
+
.filter((d) => d.isFile() && re.test(d.name))
|
|
248
|
+
.map((d) => d.name)
|
|
249
|
+
.sort();
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
return [];
|
|
253
|
+
}
|
|
254
|
+
return names.map((n) => (dirRel === '.' ? n : dirRel + '/' + n));
|
|
255
|
+
}
|
|
256
|
+
/** Acarrear al worktree lo que el proyecto declaro, y medir que entorno le
|
|
257
|
+
* falto de todas formas. Se llama DESPUES del overlay de lo no commiteado:
|
|
258
|
+
* lo declarado gana sobre lo que haya dejado el overlay, porque es lo que
|
|
259
|
+
* el proyecto dijo que su bateria necesita. */
|
|
260
|
+
export async function carryEvidenceEnv(projectRoot, wt, verdict) {
|
|
261
|
+
const rep = emptyReport();
|
|
262
|
+
rep.notices = [...verdict.notices];
|
|
263
|
+
const decl = verdict.declaration;
|
|
264
|
+
if (decl) {
|
|
265
|
+
rep.source = 'declared';
|
|
266
|
+
for (const entry of decl.include) {
|
|
267
|
+
const hits = await resolveInclude(projectRoot, entry);
|
|
268
|
+
if (!hits.length) {
|
|
269
|
+
rep.declared_missing.push(entry);
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
for (const relPosix of hits) {
|
|
273
|
+
if (rep.carried.length >= decl.max_files) {
|
|
274
|
+
rep.rejected.push(relPosix + ': se alcanzo el tope declarado de ' + decl.max_files + ' archivos');
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
const src = path.join(projectRoot, relPosix);
|
|
278
|
+
let size = 0;
|
|
279
|
+
try {
|
|
280
|
+
size = (await fs.stat(src)).size;
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
rep.declared_missing.push(relPosix);
|
|
284
|
+
continue;
|
|
285
|
+
}
|
|
286
|
+
if (rep.bytes + size > decl.max_bytes) {
|
|
287
|
+
rep.rejected.push(relPosix + ': ' + size + ' bytes no entran en el tope declarado de '
|
|
288
|
+
+ decl.max_bytes + ' (ya se acarrearon ' + rep.bytes + ')');
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
const dst = path.join(wt, relPosix);
|
|
292
|
+
try {
|
|
293
|
+
await fs.mkdir(path.dirname(dst), { recursive: true });
|
|
294
|
+
await fs.copyFile(src, dst);
|
|
295
|
+
rep.carried.push(relPosix);
|
|
296
|
+
rep.bytes += size;
|
|
297
|
+
}
|
|
298
|
+
catch (e) {
|
|
299
|
+
rep.rejected.push(relPosix + ': no se pudo copiar -- '
|
|
300
|
+
+ (e instanceof Error ? e.message : String(e)).slice(0, 160));
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/* La clasificacion corre SIEMPRE, con declaracion o sin ella: es la
|
|
306
|
+
* mitad que no se puede desactivar. */
|
|
307
|
+
rep.absent = await absentEnvironment(projectRoot, wt);
|
|
308
|
+
return rep;
|
|
309
|
+
}
|
|
310
|
+
/** Una linea para el recibo. Dice lo que llego Y lo que falto: un recibo
|
|
311
|
+
* que solo dijera lo que llego es el silencio que F-13 vino a cerrar. */
|
|
312
|
+
export function describeEvidenceEnv(rep) {
|
|
313
|
+
const bits = [];
|
|
314
|
+
if (rep.source === 'declared') {
|
|
315
|
+
bits.push('entorno declarado: ' + rep.carried.length + ' acarreado(s)'
|
|
316
|
+
+ (rep.carried.length ? ' (' + rep.carried.join(', ') + ')' : '')
|
|
317
|
+
+ ', ' + rep.bytes + ' bytes');
|
|
318
|
+
}
|
|
319
|
+
if (rep.declared_missing.length) {
|
|
320
|
+
bits.push('DECLARADO Y AUSENTE EN DISCO: ' + rep.declared_missing.join(', '));
|
|
321
|
+
}
|
|
322
|
+
if (rep.rejected.length) {
|
|
323
|
+
bits.push('RECHAZADO: ' + rep.rejected.join('; '));
|
|
324
|
+
}
|
|
325
|
+
if (rep.absent.length) {
|
|
326
|
+
bits.push('ENTORNO INCOMPLETO en el worktree: falto ' + rep.absent.join(', ')
|
|
327
|
+
+ ' -- este rojo NO cuenta como fuerte (corrio sin el entorno; declaralo en'
|
|
328
|
+
+ ' yujin.forge.json urazuke.evidence_env.include para que viaje)');
|
|
329
|
+
}
|
|
330
|
+
return bits.join('; ');
|
|
331
|
+
}
|
|
332
|
+
/** El texto que la compuerta del cierre agrega cuando el unico rojo que hay
|
|
333
|
+
* corrio sin entorno. Vive aca, al lado de la medicion, para que no haya
|
|
334
|
+
* dos redacciones del mismo motivo. */
|
|
335
|
+
export function envIncompleteCloseHelp(n) {
|
|
336
|
+
return 'y hay ' + n + ' rojo(s) descartado(s) por ENTORNO INCOMPLETO: corrieron en un worktree'
|
|
337
|
+
+ ' al que le falto un archivo de entorno, asi que su rojo no prueba que la mutacion fue'
|
|
338
|
+
+ ' detectada. Declara los archivos que tu bateria necesita en yujin.forge.json'
|
|
339
|
+
+ ' (urazuke.evidence_env.include) y volve a correr el rojo';
|
|
340
|
+
}
|
|
341
|
+
//# sourceMappingURL=evidence_env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence_env.js","sourceRoot":"","sources":["../../src/urazuke/evidence_env.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freeze.d.ts","sourceRoot":"","sources":["../../src/urazuke/freeze.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"freeze.d.ts","sourceRoot":"","sources":["../../src/urazuke/freeze.ts"],"names":[],"mappings":"AAwDA,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,SAAS,GACT,iBAAiB,GACjB,QAAQ,CAAC;AAEb,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;8CAE0C;IAC1C,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,sEAAsE;IACtE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,4DAA4D;AAC5D,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAUpD;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAwE/G"}
|
package/dist/urazuke/freeze.js
CHANGED
|
@@ -24,15 +24,22 @@
|
|
|
24
24
|
* could overwrite would be that lock without the number.
|
|
25
25
|
*
|
|
26
26
|
* 2. THE GATES FREEZE FROM THE COMPILED CATALOGUE, NOT FROM THE PORTAL.
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
27
|
+
* The reason this was deliberate is now HISTORY, and the number is the
|
|
28
|
+
* record of it: the published catalogue names twelve evaluators, this
|
|
29
|
+
* Forge implements TWELVE since 2026-11-01 (Pieza 6 -- the profiles
|
|
30
|
+
* axis: `pendings_profiles`, `profile_matrix`,
|
|
31
|
+
* `manual_cases_per_profile`), and zero steps are left blocked by an
|
|
32
|
+
* evaluator nobody here can measure. Before that, freezing the
|
|
33
|
+
* published definition froze three permanently unmeasurable steps into
|
|
34
|
+
* the project -- correct by the compatibility clause, catastrophic in
|
|
35
|
+
* practice. The comment has been wrong twice by going stale (it said
|
|
36
|
+
* "eight implemented, four missing, five anchors" after `heuristics`
|
|
37
|
+
* landed): a number in a comment is a citation too, and a stale one
|
|
38
|
+
* reads as current, so tests/urazuke-gates-data.test.ts derives the
|
|
39
|
+
* word from KNOWN_EVALUATORS.length and turns this paragraph red when
|
|
40
|
+
* it drifts. The freeze still comes from the compiled catalogue by
|
|
41
|
+
* default: the portal becomes a source only through the double lock
|
|
42
|
+
* and with the owner's written reason.
|
|
36
43
|
*
|
|
37
44
|
* 3. A FREEZE THAT WOULD BE WRONG IS NOT WRITTEN. The prompts resolve
|
|
38
45
|
* portal-first; if the portal did not answer, resolution falls back to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freeze.js","sourceRoot":"","sources":["../../src/urazuke/freeze.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"freeze.js","sourceRoot":"","sources":["../../src/urazuke/freeze.ts"],"names":[],"mappings":"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"}
|
package/dist/urazuke/gate.d.ts
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URAZUKE GATE -- the mechanical evaluator of each step.
|
|
3
|
+
*
|
|
4
|
+
* One rule: the evaluator never asks the brain. It reads the project root
|
|
5
|
+
* (artifacts by path, CI definitions), the Forge registries (sizing,
|
|
6
|
+
* pendings, evidence receipts) and nothing else. A step is GREEN when every
|
|
7
|
+
* check passes, RED when at least one fails, and OWNER when the method
|
|
8
|
+
* leaves the verification to the owner (nothing mechanical to look at).
|
|
9
|
+
*
|
|
10
|
+
* The result is consumed by three places: the prompt section (so the brain
|
|
11
|
+
* knows what is red BEFORE it claims a step is done), the close gate of
|
|
12
|
+
* workflow tasks (a red step cannot be closed without a written override)
|
|
13
|
+
* and the CLI / panel (so the owner reads the ladder without reading code).
|
|
14
|
+
*
|
|
15
|
+
* ASCII-only.
|
|
16
|
+
*/
|
|
17
|
+
import { type UrazukeStatusRule } from './semantics.js';
|
|
1
18
|
import { type UrazukeEvaluator, type UrazukeStep, type UrazukeStation } from './catalog.js';
|
|
2
19
|
import type { ResolvedGates } from './gates_data.js';
|
|
3
20
|
/** The evaluators THIS Forge knows how to measure.
|
|
@@ -77,19 +94,50 @@ export interface UrazukeProbes {
|
|
|
77
94
|
with_report: number;
|
|
78
95
|
without_report: number;
|
|
79
96
|
}>;
|
|
97
|
+
/** Step 5 (Pieza 6): the profiles axis of the open plan items. */
|
|
98
|
+
pendingsProfiles?: () => Promise<import('./profiles.js').PendingsProfilesProbe>;
|
|
99
|
+
/** Step 8 (Pieza 6): the receipt index, so the per-profile e2e result can
|
|
100
|
+
* be contrasted against the registry instead of believed. */
|
|
101
|
+
receiptIndex?: () => Promise<Array<{
|
|
102
|
+
id: string;
|
|
103
|
+
kind: string;
|
|
104
|
+
verdict: string;
|
|
105
|
+
}>>;
|
|
80
106
|
}
|
|
81
107
|
export interface UrazukeGateOptions {
|
|
82
108
|
projectRoot: string;
|
|
83
109
|
probes?: UrazukeProbes;
|
|
84
110
|
/** Clock, for freshness checks (tests). */
|
|
85
111
|
now?: number;
|
|
112
|
+
/** La regla de estado EN VIGOR. Sin ella rige la compilada, que es la
|
|
113
|
+
* misma precedencia que Forge aplicaba antes de que fuera declarable:
|
|
114
|
+
* un llamador que no la pasa evalua exactamente como siempre. */
|
|
115
|
+
status_rule?: UrazukeStatusRule;
|
|
86
116
|
}
|
|
117
|
+
/** LA REGLA, EN UN SOLO LUGAR. La dice la compuerta cuando un artefacto
|
|
118
|
+
* falta, y la dice la doctrina para todos. Una sola redaccion porque dos
|
|
119
|
+
* se desincronizan -- que es el argumento con el que se eligio esta
|
|
120
|
+
* opcion, y seria pobre cometerlo al implementarla. */
|
|
121
|
+
export declare const ARTIFACT_NAMES_ARE_PROTOCOL: string;
|
|
87
122
|
/** CI definition present: GitHub Actions, GitLab, Azure, Jenkins, CircleCI,
|
|
88
123
|
* Bitbucket, or a generic ci/ directory. */
|
|
89
124
|
export declare function detectCi(root: string): Promise<{
|
|
90
125
|
ok: boolean;
|
|
91
126
|
detail: string;
|
|
92
127
|
}>;
|
|
128
|
+
/** QUE ESTA FALLANDO, en una lista, para todo el que tenga que explicarlo.
|
|
129
|
+
*
|
|
130
|
+
* Vive aca y no en cada consumidor porque M-04 dejo claro el costo de que
|
|
131
|
+
* cada uno arme su propia lista: la compuerta del cierre construia la suya
|
|
132
|
+
* con `r.checks` nada mas, asi que un peldano bloqueado por un insumo
|
|
133
|
+
* ausente salia como "a cargo del dueno" con la lista VACIA -- el dueno
|
|
134
|
+
* veia que no podia cerrar y no que se le estaba pidiendo algo.
|
|
135
|
+
*
|
|
136
|
+
* Incluye lo medido y fallado, y tambien lo que no se pudo medir: dejar
|
|
137
|
+
* afuera lo segundo es como un peldano sin medir termina en pantalla sin
|
|
138
|
+
* ninguna razon al lado. Los insumos van marcados, porque "falta un
|
|
139
|
+
* artefacto" y "falta algo que tenes que traer vos" se arreglan distinto. */
|
|
140
|
+
export declare function failingOfResult(r: UrazukeStepResult): string[];
|
|
93
141
|
/** Evaluate one step of the new-project ladder, as the caller hands it over.
|
|
94
142
|
* Prefer `evaluateStepInForce` in production: this one measures whatever
|
|
95
143
|
* definition it is given, which for a compiled `UrazukeStep` means the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../../src/urazuke/gate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../../src/urazuke/gate.ts"],"names":[],"mappings":"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"}
|