@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.
Files changed (162) hide show
  1. package/dist/bin/yf.js +0 -0
  2. package/dist/chat/claude.d.ts +8 -0
  3. package/dist/chat/claude.d.ts.map +1 -1
  4. package/dist/chat/claude.js.map +1 -1
  5. package/dist/chat/claude_cli.d.ts +23 -0
  6. package/dist/chat/claude_cli.d.ts.map +1 -1
  7. package/dist/chat/claude_cli.js +76 -2
  8. package/dist/chat/claude_cli.js.map +1 -1
  9. package/dist/chat/doctrine_digest.d.ts.map +1 -1
  10. package/dist/chat/doctrine_digest.js +2 -1
  11. package/dist/chat/doctrine_digest.js.map +1 -1
  12. package/dist/chat/server.d.ts.map +1 -1
  13. package/dist/chat/server.js +11 -0
  14. package/dist/chat/server.js.map +1 -1
  15. package/dist/chat/tools/pending.d.ts +11 -0
  16. package/dist/chat/tools/pending.d.ts.map +1 -1
  17. package/dist/chat/tools/pending.js +55 -8
  18. package/dist/chat/tools/pending.js.map +1 -1
  19. package/dist/chat/tools/shell.d.ts +39 -4
  20. package/dist/chat/tools/shell.d.ts.map +1 -1
  21. package/dist/chat/tools/shell.js +167 -7
  22. package/dist/chat/tools/shell.js.map +1 -1
  23. package/dist/chat/tools/urazuke.d.ts.map +1 -1
  24. package/dist/chat/tools/urazuke.js +8 -5
  25. package/dist/chat/tools/urazuke.js.map +1 -1
  26. package/dist/chat/urazuke_section.d.ts +26 -4
  27. package/dist/chat/urazuke_section.d.ts.map +1 -1
  28. package/dist/chat/urazuke_section.js +115 -9
  29. package/dist/chat/urazuke_section.js.map +1 -1
  30. package/dist/commands/pending.d.ts.map +1 -1
  31. package/dist/commands/pending.js +116 -12
  32. package/dist/commands/pending.js.map +1 -1
  33. package/dist/commands/urazuke.d.ts +3 -0
  34. package/dist/commands/urazuke.d.ts.map +1 -1
  35. package/dist/commands/urazuke.js +80 -3
  36. package/dist/commands/urazuke.js.map +1 -1
  37. package/dist/core/ascii_purity.d.ts +69 -0
  38. package/dist/core/ascii_purity.d.ts.map +1 -0
  39. package/dist/core/ascii_purity.js +141 -0
  40. package/dist/core/ascii_purity.js.map +1 -0
  41. package/dist/core/battery_stamp.d.ts +85 -0
  42. package/dist/core/battery_stamp.d.ts.map +1 -0
  43. package/dist/core/battery_stamp.js +237 -0
  44. package/dist/core/battery_stamp.js.map +1 -0
  45. package/dist/core/ci_gaps.d.ts +129 -0
  46. package/dist/core/ci_gaps.d.ts.map +1 -0
  47. package/dist/core/ci_gaps.js +352 -0
  48. package/dist/core/ci_gaps.js.map +1 -0
  49. package/dist/core/doc_citations.d.ts +133 -0
  50. package/dist/core/doc_citations.d.ts.map +1 -0
  51. package/dist/core/doc_citations.js +271 -0
  52. package/dist/core/doc_citations.js.map +1 -0
  53. package/dist/docs/doctrine/urazuke.md +173 -2
  54. package/dist/nac3/internal_manifest.d.ts.map +1 -1
  55. package/dist/nac3/internal_manifest.js +28 -2
  56. package/dist/nac3/internal_manifest.js.map +1 -1
  57. package/dist/pending/store.d.ts +29 -0
  58. package/dist/pending/store.d.ts.map +1 -1
  59. package/dist/pending/store.js +51 -1
  60. package/dist/pending/store.js.map +1 -1
  61. package/dist/pending/types.d.ts +23 -0
  62. package/dist/pending/types.d.ts.map +1 -1
  63. package/dist/pending/types.js.map +1 -1
  64. package/dist/telemetry/usage.d.ts +18 -0
  65. package/dist/telemetry/usage.d.ts.map +1 -1
  66. package/dist/telemetry/usage.js +16 -1
  67. package/dist/telemetry/usage.js.map +1 -1
  68. package/dist/urazuke/announce.d.ts +7 -0
  69. package/dist/urazuke/announce.d.ts.map +1 -1
  70. package/dist/urazuke/announce.js +20 -0
  71. package/dist/urazuke/announce.js.map +1 -1
  72. package/dist/urazuke/catalog.d.ts +1 -1
  73. package/dist/urazuke/catalog.d.ts.map +1 -1
  74. package/dist/urazuke/catalog.js.map +1 -1
  75. package/dist/urazuke/close_gate.d.ts +31 -4
  76. package/dist/urazuke/close_gate.d.ts.map +1 -1
  77. package/dist/urazuke/close_gate.js +70 -13
  78. package/dist/urazuke/close_gate.js.map +1 -1
  79. package/dist/urazuke/current.d.ts +28 -0
  80. package/dist/urazuke/current.d.ts.map +1 -1
  81. package/dist/urazuke/current.js +18 -5
  82. package/dist/urazuke/current.js.map +1 -1
  83. package/dist/urazuke/cycle.d.ts +3 -0
  84. package/dist/urazuke/cycle.d.ts.map +1 -1
  85. package/dist/urazuke/cycle.js +5 -3
  86. package/dist/urazuke/cycle.js.map +1 -1
  87. package/dist/urazuke/evidence.d.ts +14 -1
  88. package/dist/urazuke/evidence.d.ts.map +1 -1
  89. package/dist/urazuke/evidence.js +88 -2
  90. package/dist/urazuke/evidence.js.map +1 -1
  91. package/dist/urazuke/evidence_env.d.ts +78 -0
  92. package/dist/urazuke/evidence_env.d.ts.map +1 -0
  93. package/dist/urazuke/evidence_env.js +341 -0
  94. package/dist/urazuke/evidence_env.js.map +1 -0
  95. package/dist/urazuke/freeze.d.ts.map +1 -1
  96. package/dist/urazuke/freeze.js +16 -9
  97. package/dist/urazuke/freeze.js.map +1 -1
  98. package/dist/urazuke/gate.d.ts +48 -0
  99. package/dist/urazuke/gate.d.ts.map +1 -1
  100. package/dist/urazuke/gate.js +251 -25
  101. package/dist/urazuke/gate.js.map +1 -1
  102. package/dist/urazuke/gates_data.d.ts +30 -3
  103. package/dist/urazuke/gates_data.d.ts.map +1 -1
  104. package/dist/urazuke/gates_data.js +51 -5
  105. package/dist/urazuke/gates_data.js.map +1 -1
  106. package/dist/urazuke/gates_pull.d.ts +40 -0
  107. package/dist/urazuke/gates_pull.d.ts.map +1 -1
  108. package/dist/urazuke/gates_pull.js +118 -8
  109. package/dist/urazuke/gates_pull.js.map +1 -1
  110. package/dist/urazuke/manual_cases.d.ts +11 -1
  111. package/dist/urazuke/manual_cases.d.ts.map +1 -1
  112. package/dist/urazuke/manual_cases.js +1 -0
  113. package/dist/urazuke/manual_cases.js.map +1 -1
  114. package/dist/urazuke/overrides.d.ts +107 -0
  115. package/dist/urazuke/overrides.d.ts.map +1 -0
  116. package/dist/urazuke/overrides.js +128 -0
  117. package/dist/urazuke/overrides.js.map +1 -0
  118. package/dist/urazuke/probes.d.ts.map +1 -1
  119. package/dist/urazuke/probes.js +51 -0
  120. package/dist/urazuke/probes.js.map +1 -1
  121. package/dist/urazuke/profiles.d.ts +135 -0
  122. package/dist/urazuke/profiles.d.ts.map +1 -0
  123. package/dist/urazuke/profiles.js +470 -0
  124. package/dist/urazuke/profiles.js.map +1 -0
  125. package/dist/urazuke/receipt_audit.d.ts +67 -0
  126. package/dist/urazuke/receipt_audit.d.ts.map +1 -0
  127. package/dist/urazuke/receipt_audit.js +103 -0
  128. package/dist/urazuke/receipt_audit.js.map +1 -0
  129. package/dist/urazuke/receipts.d.ts +22 -0
  130. package/dist/urazuke/receipts.d.ts.map +1 -1
  131. package/dist/urazuke/receipts.js +44 -0
  132. package/dist/urazuke/receipts.js.map +1 -1
  133. package/dist/urazuke/report.d.ts +30 -0
  134. package/dist/urazuke/report.d.ts.map +1 -1
  135. package/dist/urazuke/report.js +39 -0
  136. package/dist/urazuke/report.js.map +1 -1
  137. package/dist/urazuke/reset.d.ts +35 -0
  138. package/dist/urazuke/reset.d.ts.map +1 -0
  139. package/dist/urazuke/reset.js +150 -0
  140. package/dist/urazuke/reset.js.map +1 -0
  141. package/dist/urazuke/retro.d.ts +5 -1
  142. package/dist/urazuke/retro.d.ts.map +1 -1
  143. package/dist/urazuke/retro.js +21 -8
  144. package/dist/urazuke/retro.js.map +1 -1
  145. package/dist/urazuke/section.d.ts.map +1 -1
  146. package/dist/urazuke/section.js +17 -2
  147. package/dist/urazuke/section.js.map +1 -1
  148. package/dist/urazuke/semantics.d.ts +173 -0
  149. package/dist/urazuke/semantics.d.ts.map +1 -0
  150. package/dist/urazuke/semantics.js +232 -0
  151. package/dist/urazuke/semantics.js.map +1 -0
  152. package/dist/urazuke/start.d.ts +8 -0
  153. package/dist/urazuke/start.d.ts.map +1 -1
  154. package/dist/urazuke/start.js +10 -2
  155. package/dist/urazuke/start.js.map +1 -1
  156. package/dist/version.d.ts +1 -1
  157. package/dist/version.js +1 -1
  158. package/dist/workflow/orchestrator.d.ts.map +1 -1
  159. package/dist/workflow/orchestrator.js +6 -7
  160. package/dist/workflow/orchestrator.js.map +1 -1
  161. package/docs/doctrine/urazuke.md +173 -2
  162. package/package.json +24 -20
@@ -0,0 +1,470 @@
1
+ /**
2
+ * EL EJE DE LOS PERFILES -- los tres evaluadores que faltaban (Pieza 6,
3
+ * D-044).
4
+ *
5
+ * La definicion publicada (schema 2) declara doce evaluadores y esta
6
+ * instalacion contaba nueve. Los tres que faltaban son el eje de los perfiles,
7
+ * y son REQUERIDOS en tres anclas del lazo de construccion: `pendings_profiles`
8
+ * en el peldano 5, `profile_matrix` en el 8 y `manual_cases_per_profile` en el
9
+ * 10. Mientras no existan, adoptar la definicion publicada congela tres
10
+ * peldanos permanentemente inmedibles.
11
+ *
12
+ * LA REGLA QUE COMPARTEN LOS TRES, y que decidio cada eleccion de abajo
13
+ * (dueno, 2026-11-01): lo que sostiene cada condicion es que LA MATRIZ SEA
14
+ * EL PRODUCTOR. Un evaluador que se conforma con que el artefacto exista
15
+ * certifica que alguien escribio un archivo, no que la matriz lo produjo. De
16
+ * ahi que la huella de la navegacion se RECALCULE y nunca se lea, y de ahi
17
+ * que la lista de alcanzado se compare contra la fila en las DOS
18
+ * direcciones.
19
+ *
20
+ * LO QUE ESTA DECLARADO POR EL METODO (y aca solo se implementa):
21
+ * profile_matrix "the functionality-by-profile matrix exists and
22
+ * is consistent: every functionality has at least
23
+ * one profile, every profile has at least one
24
+ * functionality and its entry point, and
25
+ * navigation is derived from the matrix rather
26
+ * than hand-written. And for every profile, the
27
+ * end-to-end test compares what is reachable
28
+ * against its row: neither less nor more."
29
+ * manual_cases_per_profile "every manual test case was run once per
30
+ * affected profile, derived from the matrix. A
31
+ * case run with a single profile does not count
32
+ * as executed."
33
+ * pendings_profiles "every pending item that touches a screen
34
+ * declares its functional convergence group, the
35
+ * profiles that have it and one acceptance
36
+ * criterion per profile. Without that declaration
37
+ * the pending item does not pass the step."
38
+ * Y las cuatro columnas de la matriz las fija el Anexo H B2: funcionalidad,
39
+ * hogar, perfiles, ruta de entrada, "nada mas".
40
+ *
41
+ * LO QUE ES CONVENCION DE FORGE, dicho para que no se lea como del metodo:
42
+ * las RUTAS de los dos artefactos derivados (.forge/profile-navigation.json
43
+ * y .forge/profile-reachability.json) y la forma de sus campos. El metodo
44
+ * declara QUE hay que comparar, no donde lo deja el proyecto. Los mensajes
45
+ * rojos nombran la ruta para que nadie tenga que adivinarla.
46
+ *
47
+ * ASCII-only.
48
+ */
49
+ import fs from 'node:fs/promises';
50
+ import path from 'node:path';
51
+ import { createHash } from 'node:crypto';
52
+ export const MATRIX_REL = 'docs/PROFILE_MATRIX.md';
53
+ export const NAVIGATION_REL = '.forge/profile-navigation.json';
54
+ export const REACHABILITY_REL = '.forge/profile-reachability.json';
55
+ const COLUMN_SYNONYMS = [
56
+ ['functionality', /funcionalidad|functionality/i],
57
+ ['home', /hogar|home/i],
58
+ ['profiles', /perfil|profile/i],
59
+ ['entry_point', /ruta de entrada|entry ?point|entrada/i],
60
+ ];
61
+ function splitRow(line) {
62
+ return line.replace(/^\s*\|/, '').replace(/\|\s*$/, '').split('|').map((c) => c.trim());
63
+ }
64
+ /** La matriz, leida de la tabla markdown que trae las cuatro columnas.
65
+ *
66
+ * Se busca por CABECERA y no por posicion: una tabla con las columnas en
67
+ * otro orden es la misma matriz, y una tabla cualquiera del documento no lo
68
+ * es. Si ninguna tabla tiene las cuatro, eso es un problema nombrado -- no
69
+ * una matriz vacia. */
70
+ export function parseProfileMatrix(markdown) {
71
+ const lines = markdown.split(/\r?\n/);
72
+ const problems = [];
73
+ for (let i = 0; i < lines.length; i++) {
74
+ const line = lines[i];
75
+ if (!line.includes('|'))
76
+ continue;
77
+ const header = splitRow(line);
78
+ if (header.length < 4)
79
+ continue;
80
+ const index = {};
81
+ for (const [key, re] of COLUMN_SYNONYMS) {
82
+ const at = header.findIndex((h) => re.test(h));
83
+ if (at >= 0 && index[key] == null)
84
+ index[key] = at;
85
+ }
86
+ const missing = COLUMN_SYNONYMS.filter(([k]) => index[k] == null).map(([k]) => k);
87
+ if (missing.length)
88
+ continue;
89
+ /* La linea siguiente tiene que ser el separador de la tabla. */
90
+ const sep = lines[i + 1] ?? '';
91
+ if (!/^\s*\|?\s*:?-{2,}/.test(sep))
92
+ continue;
93
+ const rows = [];
94
+ for (let j = i + 2; j < lines.length; j++) {
95
+ const body = lines[j];
96
+ if (!body.includes('|'))
97
+ break;
98
+ const cells = splitRow(body);
99
+ if (cells.length < 4)
100
+ break;
101
+ const get = (k) => (cells[index[k]] ?? '').trim();
102
+ const functionality = get('functionality');
103
+ if (!functionality)
104
+ continue;
105
+ rows.push({
106
+ functionality,
107
+ home: get('home'),
108
+ profiles: get('profiles').split(/[,;/]/).map((p) => p.trim()).filter(Boolean),
109
+ entry_point: get('entry_point'),
110
+ });
111
+ }
112
+ if (!rows.length)
113
+ problems.push('la matriz tiene las cuatro columnas y ninguna fila');
114
+ return { rows, problems };
115
+ }
116
+ problems.push('ninguna tabla de ' + MATRIX_REL + ' trae las cuatro columnas del Anexo H B2'
117
+ + ' (funcionalidad, hogar, perfiles, ruta de entrada)');
118
+ return { rows: [], problems };
119
+ }
120
+ /** Los perfiles que la matriz nombra, ordenados. */
121
+ export function profilesOf(m) {
122
+ return [...new Set(m.rows.flatMap((r) => r.profiles))].sort();
123
+ }
124
+ /** Las funcionalidades que un perfil tiene, segun su fila. */
125
+ export function functionalitiesFor(m, profile) {
126
+ return m.rows.filter((r) => r.profiles.includes(profile)).map((r) => r.functionality).sort();
127
+ }
128
+ /* ---------------- la huella de la navegacion (UX-10) ---------------- */
129
+ /** La huella, AUTODESCRIPTA. Misma regla que el congelado y que el sello de
130
+ * la bateria: una huella que no se puede reproducir desde afuera no es
131
+ * evidencia, asi que la definicion viaja con el dato.
132
+ *
133
+ * Y la condicion que decide si sirve (dueno, 2026-11-01): la huella se
134
+ * RECALCULA desde la matriz y se compara contra la que el artefacto
135
+ * declara. Leer la declarada y compararla consigo misma daria verde sobre
136
+ * cualquier archivo. */
137
+ export const NAVIGATION_FINGERPRINT_SPEC = {
138
+ algorithm: 'sha256',
139
+ encoding: 'utf8',
140
+ canonical_form: 'una linea por fila, "<funcionalidad>|<hogar>|<perfil,perfil>|<ruta de entrada>",'
141
+ + ' perfiles ordenados alfabeticamente, filas ordenadas por funcionalidad, unidas por \\n',
142
+ covers: 'las cuatro columnas de cada fila de ' + MATRIX_REL,
143
+ excludes: 'el orden de las filas en el documento, la prosa alrededor de la tabla,'
144
+ + ' el formato del markdown y todo lo que el artefacto generado agregue por su cuenta',
145
+ };
146
+ export function navigationCanonicalForm(m) {
147
+ return [...m.rows]
148
+ .map((r) => [r.functionality, r.home, [...r.profiles].sort().join(','), r.entry_point].join('|'))
149
+ .sort()
150
+ .join('\n');
151
+ }
152
+ export function navigationFingerprint(m) {
153
+ return createHash('sha256').update(navigationCanonicalForm(m), 'utf8').digest('hex');
154
+ }
155
+ export async function readJsonArtifact(root, rel) {
156
+ try {
157
+ return JSON.parse(await fs.readFile(path.join(root, rel), 'utf8'));
158
+ }
159
+ catch {
160
+ return undefined;
161
+ }
162
+ }
163
+ export async function readProfileMatrix(root) {
164
+ try {
165
+ return parseProfileMatrix(await fs.readFile(path.join(root, MATRIX_REL), 'utf8'));
166
+ }
167
+ catch {
168
+ return { rows: [], problems: ['falta ' + MATRIX_REL + ': sin matriz no hay de donde derivar'
169
+ + ' la navegacion, los perfiles de un pendiente ni los perfiles afectados de un caso'] };
170
+ }
171
+ }
172
+ /** `profile_matrix` -- el peldano 8. */
173
+ export function checkProfileMatrix(input) {
174
+ const { matrix } = input;
175
+ const out = [];
176
+ if (matrix.problems.length || !matrix.rows.length) {
177
+ return [{
178
+ label: 'la matriz de funcionalidad por perfil',
179
+ status: 'fail',
180
+ path: MATRIX_REL,
181
+ detail: matrix.problems.join('; ') || 'la matriz no tiene filas',
182
+ }];
183
+ }
184
+ out.push({
185
+ label: 'la matriz de funcionalidad por perfil',
186
+ status: 'ok',
187
+ path: MATRIX_REL,
188
+ detail: matrix.rows.length + ' funcionalidades, ' + profilesOf(matrix).length + ' perfiles',
189
+ });
190
+ /* 1. consistencia, en los dos sentidos que el metodo nombra. */
191
+ const noProfile = matrix.rows.filter((r) => !r.profiles.length).map((r) => r.functionality);
192
+ out.push(noProfile.length
193
+ ? {
194
+ label: 'cada funcionalidad tiene al menos un perfil',
195
+ status: 'fail', path: MATRIX_REL,
196
+ detail: 'sin perfil: ' + noProfile.join(', '),
197
+ }
198
+ : { label: 'cada funcionalidad tiene al menos un perfil', status: 'ok', detail: 'las ' + matrix.rows.length });
199
+ const profiles = profilesOf(matrix);
200
+ const noEntry = profiles.filter((p) => !matrix.rows
201
+ .some((r) => r.profiles.includes(p) && r.entry_point.trim() !== ''));
202
+ out.push(noEntry.length
203
+ ? {
204
+ label: 'cada perfil tiene funcionalidad y ruta de entrada',
205
+ status: 'fail', path: MATRIX_REL,
206
+ detail: 'sin ruta de entrada: ' + noEntry.join(', '),
207
+ }
208
+ : { label: 'cada perfil tiene funcionalidad y ruta de entrada', status: 'ok', detail: profiles.join(', ') });
209
+ /* 2. la navegacion DERIVADA de la matriz (UX-10). */
210
+ const expected = navigationFingerprint(matrix);
211
+ const nav = input.navigation;
212
+ if (!nav) {
213
+ out.push({
214
+ label: 'la navegacion se deriva de la matriz',
215
+ status: 'fail', path: NAVIGATION_REL,
216
+ detail: 'falta ' + NAVIGATION_REL + ': lo que esta condicion protege es que la matriz sea'
217
+ + ' el PRODUCTOR, y una navegacion escrita a mano no se distingue de una generada sin'
218
+ + ' el artefacto y su huella. Huella esperada ahora: ' + expected.slice(0, 12),
219
+ });
220
+ }
221
+ else if (!nav.fingerprint?.value) {
222
+ out.push({
223
+ label: 'la navegacion se deriva de la matriz',
224
+ status: 'fail', path: NAVIGATION_REL,
225
+ detail: NAVIGATION_REL + ' no declara ninguna huella: sin huella no hay forma de ver la deriva',
226
+ });
227
+ }
228
+ else {
229
+ const spec = nav.fingerprint;
230
+ const missingSpec = ['algorithm', 'encoding', 'canonical_form', 'covers', 'excludes']
231
+ .filter((k) => !String(spec[k] ?? '').trim());
232
+ if (missingSpec.length) {
233
+ out.push({
234
+ label: 'la huella de la navegacion es autodescripta',
235
+ status: 'fail', path: NAVIGATION_REL,
236
+ detail: 'la huella no declara ' + missingSpec.join(', ')
237
+ + ': una huella que no se puede reproducir desde afuera no es evidencia',
238
+ });
239
+ }
240
+ else {
241
+ out.push({ label: 'la huella de la navegacion es autodescripta', status: 'ok', detail: spec.algorithm });
242
+ }
243
+ /* RECALCULADA, nunca leida: comparar la declarada consigo misma daria
244
+ * verde sobre cualquier archivo. */
245
+ out.push(spec.value === expected
246
+ ? {
247
+ label: 'la navegacion se deriva de la matriz',
248
+ status: 'ok', path: NAVIGATION_REL,
249
+ detail: 'huella recalculada ' + expected.slice(0, 12) + ' = la declarada',
250
+ }
251
+ : {
252
+ label: 'la navegacion se deriva de la matriz',
253
+ status: 'fail', path: NAVIGATION_REL,
254
+ detail: 'la huella declarada (' + String(spec.value).slice(0, 12) + ') no es la que la matriz'
255
+ + ' produce ahora (' + expected.slice(0, 12) + '): la navegacion quedo de una version'
256
+ + ' anterior de la matriz, o no salio de la matriz',
257
+ });
258
+ }
259
+ /* 3. lo alcanzable por perfil, en las DOS direcciones (UX-12). */
260
+ const reach = input.reachability;
261
+ if (!reach?.per_profile) {
262
+ out.push({
263
+ label: 'el e2e compara lo alcanzable contra la fila de cada perfil',
264
+ status: 'fail', path: REACHABILITY_REL,
265
+ detail: 'falta ' + REACHABILITY_REL + ': con un test que solo nombra el perfil pasa un test'
266
+ + ' que no verifica nada. El artefacto lista lo ALCANZADO por perfil, con el id del recibo',
267
+ });
268
+ return out;
269
+ }
270
+ for (const profile of profiles) {
271
+ const entry = reach.per_profile[profile];
272
+ const expectedFns = functionalitiesFor(matrix, profile);
273
+ if (!entry) {
274
+ out.push({
275
+ label: 'perfil ' + profile + ': corrida e2e',
276
+ status: 'fail', kind: 'missing', path: REACHABILITY_REL,
277
+ detail: 'sin resultado para ' + profile + ': la matriz le da ' + expectedFns.length
278
+ + ' funcionalidades y nadie midio que las alcance',
279
+ });
280
+ continue;
281
+ }
282
+ /* El recibo: el artefacto declara el id y el evaluador lo contrasta
283
+ * contra el registro. Un artefacto sin recibo es prosa. */
284
+ if (!entry.receipt) {
285
+ out.push({
286
+ label: 'perfil ' + profile + ': recibo e2e',
287
+ status: 'fail', kind: 'missing', path: REACHABILITY_REL,
288
+ detail: 'el resultado de ' + profile + ' no declara ningun recibo',
289
+ });
290
+ }
291
+ else if (!input.receipts) {
292
+ out.push({
293
+ label: 'perfil ' + profile + ': recibo e2e',
294
+ status: 'unknown',
295
+ detail: 'el artefacto declara ' + entry.receipt + ' y el registro de recibos no se'
296
+ + ' consulto en esta corrida: no se pudo mirar, y eso no es verde',
297
+ });
298
+ }
299
+ else {
300
+ const rc = input.receipts.find((r) => r.id === entry.receipt);
301
+ out.push(rc && rc.kind === 'e2e' && rc.verdict === 'ok'
302
+ ? { label: 'perfil ' + profile + ': recibo e2e', status: 'ok', detail: entry.receipt }
303
+ : {
304
+ label: 'perfil ' + profile + ': recibo e2e',
305
+ status: 'fail', kind: 'missing',
306
+ detail: !rc
307
+ ? 'el artefacto declara el recibo ' + entry.receipt + ' y el registro no lo tiene'
308
+ : 'el recibo ' + entry.receipt + ' es kind=' + rc.kind + ' verdict=' + rc.verdict
309
+ + ': hace falta un e2e en verde',
310
+ });
311
+ }
312
+ const reached = [...new Set(entry.reached ?? [])];
313
+ const less = expectedFns.filter((f) => !reached.includes(f));
314
+ const more = reached.filter((f) => !expectedFns.includes(f));
315
+ /* LAS DOS DIRECCIONES NO SON LO MISMO, y no se juntan en un rojo que
316
+ * diga "la fila no coincide" (dueno, 2026-11-01). */
317
+ if (less.length) {
318
+ out.push({
319
+ label: 'perfil ' + profile + ': alcanza su fila',
320
+ status: 'fail', kind: 'missing', path: REACHABILITY_REL,
321
+ detail: 'FALTANTE -- la construccion esta incompleta: ' + profile + ' no alcanza '
322
+ + less.join(', '),
323
+ });
324
+ }
325
+ if (more.length) {
326
+ out.push({
327
+ label: 'perfil ' + profile + ': no alcanza mas que su fila',
328
+ status: 'fail', kind: 'authorization', path: REACHABILITY_REL,
329
+ detail: 'DEFECTO DE AUTORIZACION (gravedad ALTA por definicion escrita) -- ' + profile
330
+ + ' llega a donde no debe: ' + more.join(', ') + '. No es "la fila no coincide"',
331
+ });
332
+ }
333
+ if (!less.length && !more.length) {
334
+ out.push({
335
+ label: 'perfil ' + profile + ': ni menos ni mas que su fila',
336
+ status: 'ok',
337
+ detail: reached.length + ' funcionalidades, exactamente las de la fila',
338
+ });
339
+ }
340
+ }
341
+ return out;
342
+ }
343
+ /** `pendings_profiles` -- el peldano 5. */
344
+ export function checkPendingsProfiles(p) {
345
+ if (!p) {
346
+ return [{
347
+ label: 'pendientes con su eje de perfiles',
348
+ status: 'unknown',
349
+ detail: 'el registro de pendientes no se consulto en esta corrida (no se inyecto la sonda):'
350
+ + ' no se pudo mirar, y eso no es ni verde ni la firma del dueno',
351
+ }];
352
+ }
353
+ const out = [];
354
+ if (p.undeclared.length) {
355
+ /* Tri-estado a proposito: un pendiente que no declara si toca pantalla
356
+ * no se lee como "no toca". Es la misma regla del cero: no mirar no es
357
+ * no haber. */
358
+ out.push({
359
+ label: 'cada pendiente declara si toca pantalla',
360
+ status: 'unknown',
361
+ detail: p.undeclared.length + ' pendientes no declaran touches_screen ('
362
+ + p.undeclared.slice(0, 8).join(', ') + (p.undeclared.length > 8 ? ', ...' : '')
363
+ + '): sin esa declaracion no se sabe a cuales les corresponde el eje de perfiles',
364
+ });
365
+ }
366
+ const incomplete = p.touching.filter((t) => t.missing.length);
367
+ if (incomplete.length) {
368
+ out.push({
369
+ label: 'cada pendiente que toca pantalla declara grupo, perfiles y criterio por perfil',
370
+ status: 'fail',
371
+ detail: incomplete.map((t) => t.id + ' (falta ' + t.missing.join(', ') + ')').join('; ')
372
+ + ' -- sin esa declaracion el pendiente no pasa el peldano',
373
+ });
374
+ }
375
+ else if (p.touching.length) {
376
+ out.push({
377
+ label: 'cada pendiente que toca pantalla declara grupo, perfiles y criterio por perfil',
378
+ status: 'ok',
379
+ detail: p.touching.length + ' pendientes de pantalla, los ' + p.touching.length + ' completos',
380
+ });
381
+ }
382
+ else if (!p.undeclared.length) {
383
+ out.push({
384
+ label: 'cada pendiente que toca pantalla declara grupo, perfiles y criterio por perfil',
385
+ status: 'ok',
386
+ detail: 'ningun pendiente abierto declara tocar pantalla (plan de ' + p.plan + ' items)',
387
+ });
388
+ }
389
+ return out;
390
+ }
391
+ /** `manual_cases_per_profile` -- el peldano 10. */
392
+ export function checkManualCasesPerProfile(input) {
393
+ const { matrix, cases } = input;
394
+ if (matrix.problems.length || !matrix.rows.length) {
395
+ return [{
396
+ label: 'los casos manuales, una corrida por perfil afectado',
397
+ status: 'fail', path: MATRIX_REL,
398
+ detail: 'sin matriz no se pueden derivar los perfiles afectados: '
399
+ + (matrix.problems.join('; ') || 'la matriz no tiene filas'),
400
+ }];
401
+ }
402
+ if (!cases.length) {
403
+ return [{
404
+ label: 'los casos manuales, una corrida por perfil afectado',
405
+ status: 'fail',
406
+ detail: 'el registro de casos manuales esta vacio: nadie firmo ningun caso',
407
+ }];
408
+ }
409
+ const out = [];
410
+ const noLink = [...new Set(cases.filter((c) => !c.functionality?.trim()).map((c) => c.rule))];
411
+ if (noLink.length) {
412
+ out.push({
413
+ label: 'cada caso dice que funcionalidad ejercita',
414
+ status: 'fail',
415
+ detail: 'sin funcionalidad: ' + noLink.join(', ') + ' -- los perfiles afectados se DERIVAN'
416
+ + ' de la matriz, y sin el eslabon caso -> funcionalidad habria que confiar en un campo'
417
+ + ' escrito a mano',
418
+ });
419
+ }
420
+ const byKey = new Map();
421
+ for (const c of cases) {
422
+ const fn = c.functionality?.trim();
423
+ if (!fn)
424
+ continue;
425
+ const key = c.rule + '|' + fn;
426
+ const entry = byKey.get(key) ?? { rule: c.rule, functionality: fn, profiles: new Set() };
427
+ if (c.profile)
428
+ entry.profiles.add(c.profile);
429
+ byKey.set(key, entry);
430
+ }
431
+ const unknownFn = [];
432
+ const missing = [];
433
+ let complete = 0;
434
+ for (const entry of byKey.values()) {
435
+ const row = matrix.rows.find((r) => r.functionality === entry.functionality);
436
+ if (!row) {
437
+ unknownFn.push(entry.rule + ' -> ' + entry.functionality);
438
+ continue;
439
+ }
440
+ const pending = row.profiles.filter((p) => !entry.profiles.has(p));
441
+ if (pending.length) {
442
+ missing.push(entry.rule + ' (' + entry.functionality + '): falta ' + pending.join(', ')
443
+ + (entry.profiles.size <= 1
444
+ ? ' -- un caso corrido con un solo perfil NO cuenta como ejecutado'
445
+ : ''));
446
+ continue;
447
+ }
448
+ complete++;
449
+ }
450
+ if (unknownFn.length) {
451
+ out.push({
452
+ label: 'la funcionalidad de cada caso esta en la matriz',
453
+ status: 'fail', path: MATRIX_REL,
454
+ detail: 'la matriz no tiene esa funcionalidad: ' + unknownFn.join('; '),
455
+ });
456
+ }
457
+ out.push(missing.length
458
+ ? {
459
+ label: 'los casos manuales, una corrida por perfil afectado',
460
+ status: 'fail', kind: 'missing',
461
+ detail: missing.join(' | '),
462
+ }
463
+ : {
464
+ label: 'los casos manuales, una corrida por perfil afectado',
465
+ status: 'ok',
466
+ detail: complete + ' casos con una corrida por cada perfil afectado',
467
+ });
468
+ return out;
469
+ }
470
+ //# sourceMappingURL=profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/urazuke/profiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * AUDITORIA DE RECIBOS YA PRODUCIDOS -- F-02c (pedido del dueno,
3
+ * 2026-11-01, segunda vuelta).
4
+ *
5
+ * LA PREGUNTA. El defecto F-02c era el runner de evidencia spawneando por
6
+ * cmd.exe sin las dos guardas: un comando con un salto de linea salia VERDE
7
+ * habiendo corrido solo la primera linea, y uno por encima del tope de
8
+ * cmd.exe se truncaba. Arreglado. Queda saber si algun recibio YA PRODUCIDO
9
+ * paso por ese camino, porque si paso, hay retrabajo.
10
+ *
11
+ * Y LA PREGUNTA DE LA PREGUNTA, que es la que decide si el numero vale.
12
+ * Palabras del dueno: "una medicion que puede informar cero tiene que
13
+ * distinguir cero porque no hay de cero porque no mire". La marca que se
14
+ * busca es el COMANDO TEXTUAL guardado en el recibo. Entonces un cero sobre
15
+ * 821 recibos solo significa "no hay" si los 821 registran el comando. Los
16
+ * que no lo registran NO son limpios: son no auditables por esta via, y eso
17
+ * se informa como un numero propio.
18
+ *
19
+ * Por eso esto es un modulo con casos y no un grep: el numero va a un
20
+ * paper.
21
+ *
22
+ * ASCII-only.
23
+ */
24
+ /** El tope de una linea de comando en cmd.exe, medido en esta maquina el
25
+ * 2026-11-01: 8150 caracteres pasan, 8180 fallan. El limite documentado
26
+ * por Microsoft es 8191 incluyendo el `cmd /c `. */
27
+ export declare const CMD_LINE_CEILING = 8150;
28
+ export interface ReceiptAuditRow {
29
+ store: string;
30
+ id: string;
31
+ /** El recibo registra el comando textual (la marca que esta auditoria
32
+ * busca). `false` -> este recibo no se puede auditar por esta via. */
33
+ has_command: boolean;
34
+ /** El comando lleva un salto de linea: el camino que corria solo la
35
+ * primera linea y salia verde. */
36
+ multiline: boolean;
37
+ /** El comando pasa el tope de cmd.exe: el camino que se truncaba. */
38
+ over_ceiling: boolean;
39
+ length: number;
40
+ }
41
+ export interface ReceiptAuditReport {
42
+ stores: number;
43
+ total: number;
44
+ /** Los que registran el comando: el denominador REAL de la auditoria. */
45
+ auditable: number;
46
+ /** Los que NO lo registran: el numero que acompana al cero. */
47
+ not_auditable: number;
48
+ multiline: ReceiptAuditRow[];
49
+ over_ceiling: ReceiptAuditRow[];
50
+ /** El recibo mas largo que se encontro, para que el margen contra el tope
51
+ * sea un dato y no una impresion. */
52
+ longest: ReceiptAuditRow | null;
53
+ /** Lo que no se pudo leer: un store ilegible no se cuenta como limpio. */
54
+ unreadable: Array<{
55
+ store: string;
56
+ reason: string;
57
+ }>;
58
+ }
59
+ export interface RawStore {
60
+ store: string;
61
+ /** El JSON ya parseado, o el error de lectura. */
62
+ items?: Array<Record<string, unknown>>;
63
+ error?: string;
64
+ }
65
+ export declare function auditReceipts(stores: RawStore[]): ReceiptAuditReport;
66
+ export declare function renderReceiptAudit(r: ReceiptAuditReport): string;
67
+ //# sourceMappingURL=receipt_audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt_audit.d.ts","sourceRoot":"","sources":["../../src/urazuke/receipt_audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;qDAEqD;AACrD,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX;2EACuE;IACvE,WAAW,EAAE,OAAO,CAAC;IACrB;uCACmC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC;0CACsC;IACtC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAChC,0EAA0E;IAC1E,UAAU,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,kBAAkB,CAsCpE;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAiChE"}