@nac3/forge-cli 1.24.1 → 1.26.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 (122) hide show
  1. package/dist/chat/agent_session.d.ts.map +1 -1
  2. package/dist/chat/agent_session.js +132 -12
  3. package/dist/chat/agent_session.js.map +1 -1
  4. package/dist/chat/cache_ttl.d.ts +143 -0
  5. package/dist/chat/cache_ttl.d.ts.map +1 -0
  6. package/dist/chat/cache_ttl.js +165 -0
  7. package/dist/chat/cache_ttl.js.map +1 -0
  8. package/dist/chat/claude.d.ts +1 -0
  9. package/dist/chat/claude.d.ts.map +1 -1
  10. package/dist/chat/claude.js +47 -5
  11. package/dist/chat/claude.js.map +1 -1
  12. package/dist/chat/claude_cli.d.ts +24 -0
  13. package/dist/chat/claude_cli.d.ts.map +1 -1
  14. package/dist/chat/claude_cli.js +76 -10
  15. package/dist/chat/claude_cli.js.map +1 -1
  16. package/dist/chat/panel.d.ts.map +1 -1
  17. package/dist/chat/panel.js +133 -21
  18. package/dist/chat/panel.js.map +1 -1
  19. package/dist/chat/server.d.ts.map +1 -1
  20. package/dist/chat/server.js +32 -3
  21. package/dist/chat/server.js.map +1 -1
  22. package/dist/chat/tools/evidence.d.ts +15 -0
  23. package/dist/chat/tools/evidence.d.ts.map +1 -1
  24. package/dist/chat/tools/evidence.js +16 -0
  25. package/dist/chat/tools/evidence.js.map +1 -1
  26. package/dist/chat/tools/keys.d.ts.map +1 -1
  27. package/dist/chat/tools/keys.js +22 -2
  28. package/dist/chat/tools/keys.js.map +1 -1
  29. package/dist/chat/tools/pending.d.ts +3 -0
  30. package/dist/chat/tools/pending.d.ts.map +1 -1
  31. package/dist/chat/tools/pending.js +40 -3
  32. package/dist/chat/tools/pending.js.map +1 -1
  33. package/dist/chat/tools/session_verbs.d.ts +83 -0
  34. package/dist/chat/tools/session_verbs.d.ts.map +1 -1
  35. package/dist/chat/tools/session_verbs.js +251 -18
  36. package/dist/chat/tools/session_verbs.js.map +1 -1
  37. package/dist/chat/tools/shell.d.ts +11 -0
  38. package/dist/chat/tools/shell.d.ts.map +1 -1
  39. package/dist/chat/tools/shell.js +68 -1
  40. package/dist/chat/tools/shell.js.map +1 -1
  41. package/dist/commands/chat.d.ts +6 -0
  42. package/dist/commands/chat.d.ts.map +1 -1
  43. package/dist/commands/chat.js +25 -0
  44. package/dist/commands/chat.js.map +1 -1
  45. package/dist/commands/limits.d.ts.map +1 -1
  46. package/dist/commands/limits.js +85 -6
  47. package/dist/commands/limits.js.map +1 -1
  48. package/dist/commands/pending.d.ts.map +1 -1
  49. package/dist/commands/pending.js +26 -1
  50. package/dist/commands/pending.js.map +1 -1
  51. package/dist/commands/urazuke.d.ts.map +1 -1
  52. package/dist/commands/urazuke.js +82 -0
  53. package/dist/commands/urazuke.js.map +1 -1
  54. package/dist/core/brain_pin.d.ts +74 -0
  55. package/dist/core/brain_pin.d.ts.map +1 -0
  56. package/dist/core/brain_pin.js +113 -0
  57. package/dist/core/brain_pin.js.map +1 -0
  58. package/dist/core/cost_router.d.ts.map +1 -1
  59. package/dist/core/cost_router.js +56 -0
  60. package/dist/core/cost_router.js.map +1 -1
  61. package/dist/core/limits_config.d.ts +61 -0
  62. package/dist/core/limits_config.d.ts.map +1 -1
  63. package/dist/core/limits_config.js +78 -0
  64. package/dist/core/limits_config.js.map +1 -1
  65. package/dist/core/provider_keys.d.ts +33 -0
  66. package/dist/core/provider_keys.d.ts.map +1 -1
  67. package/dist/core/provider_keys.js +40 -3
  68. package/dist/core/provider_keys.js.map +1 -1
  69. package/dist/docs/doctrine/session-orchestration.md +109 -86
  70. package/dist/llm/sse_stream.d.ts +5 -0
  71. package/dist/llm/sse_stream.d.ts.map +1 -1
  72. package/dist/llm/sse_stream.js +26 -3
  73. package/dist/llm/sse_stream.js.map +1 -1
  74. package/dist/mcp/bridge_registry.d.ts +1 -1
  75. package/dist/nac3/internal_manifest.d.ts.map +1 -1
  76. package/dist/nac3/internal_manifest.js +2 -0
  77. package/dist/nac3/internal_manifest.js.map +1 -1
  78. package/dist/pending/store.d.ts +12 -0
  79. package/dist/pending/store.d.ts.map +1 -1
  80. package/dist/pending/store.js +20 -0
  81. package/dist/pending/store.js.map +1 -1
  82. package/dist/pending/types.d.ts +11 -0
  83. package/dist/pending/types.d.ts.map +1 -1
  84. package/dist/pending/types.js.map +1 -1
  85. package/dist/tasks/supervisor.d.ts +31 -0
  86. package/dist/tasks/supervisor.d.ts.map +1 -1
  87. package/dist/tasks/supervisor.js +61 -5
  88. package/dist/tasks/supervisor.js.map +1 -1
  89. package/dist/telemetry/usage.d.ts +107 -0
  90. package/dist/telemetry/usage.d.ts.map +1 -1
  91. package/dist/telemetry/usage.js +186 -13
  92. package/dist/telemetry/usage.js.map +1 -1
  93. package/dist/urazuke/close_gate.d.ts +47 -3
  94. package/dist/urazuke/close_gate.d.ts.map +1 -1
  95. package/dist/urazuke/close_gate.js +57 -3
  96. package/dist/urazuke/close_gate.js.map +1 -1
  97. package/dist/urazuke/evidence.d.ts +10 -0
  98. package/dist/urazuke/evidence.d.ts.map +1 -1
  99. package/dist/urazuke/evidence.js +63 -3
  100. package/dist/urazuke/evidence.js.map +1 -1
  101. package/dist/urazuke/external_audit.d.ts +89 -0
  102. package/dist/urazuke/external_audit.d.ts.map +1 -0
  103. package/dist/urazuke/external_audit.js +309 -0
  104. package/dist/urazuke/external_audit.js.map +1 -0
  105. package/dist/urazuke/receipts.d.ts +28 -1
  106. package/dist/urazuke/receipts.d.ts.map +1 -1
  107. package/dist/urazuke/receipts.js +59 -6
  108. package/dist/urazuke/receipts.js.map +1 -1
  109. package/dist/version.d.ts +1 -1
  110. package/dist/version.js +1 -1
  111. package/docs/doctrine/session-orchestration.md +109 -86
  112. package/package.json +1 -1
  113. package/src/i18n/catalogs/ar.json +570 -568
  114. package/src/i18n/catalogs/de.json +570 -568
  115. package/src/i18n/catalogs/en.json +570 -568
  116. package/src/i18n/catalogs/es.json +570 -568
  117. package/src/i18n/catalogs/fr.json +570 -568
  118. package/src/i18n/catalogs/hi.json +570 -568
  119. package/src/i18n/catalogs/it.json +570 -568
  120. package/src/i18n/catalogs/ja.json +570 -568
  121. package/src/i18n/catalogs/pt.json +570 -568
  122. package/src/i18n/catalogs/zh.json +570 -568
@@ -29,11 +29,20 @@
29
29
  */
30
30
  import { promises as fs } from 'node:fs';
31
31
  import path from 'node:path';
32
+ import os from 'node:os';
32
33
  import { configDir } from '../license/index.js';
33
34
  /* Defaults reflect early-2026 Anthropic + Google Cloud pricing.
34
35
  * Users can override via ~/.yujin-forge/pricing.json. */
35
36
  export const DEFAULT_PRICING = {
36
37
  models: {
38
+ /* Linea vigente al 2026-11-03. Faltaba entera, y sin fila el evento se
39
+ * valuaba en CERO: el reporte decia que una sesion de Opus 5 no habia
40
+ * costado nada (PND-273). */
41
+ 'claude-fable-5-1': { in_per_mtok: 10, out_per_mtok: 50 },
42
+ 'claude-fable-5': { in_per_mtok: 10, out_per_mtok: 50 },
43
+ 'claude-opus-5': { in_per_mtok: 5, out_per_mtok: 25 },
44
+ 'claude-opus-4-8': { in_per_mtok: 5, out_per_mtok: 25 },
45
+ 'claude-sonnet-5': { in_per_mtok: 2, out_per_mtok: 10 },
37
46
  'claude-opus-4-7': { in_per_mtok: 15, out_per_mtok: 75 },
38
47
  'claude-opus-4': { in_per_mtok: 15, out_per_mtok: 75 },
39
48
  'claude-sonnet-4-6': { in_per_mtok: 3, out_per_mtok: 15 },
@@ -47,27 +56,150 @@ export const DEFAULT_PRICING = {
47
56
  tts_per_million_chars: 16, /* Google Cloud TTS Neural2 */
48
57
  stt_per_minute: 0.006, /* Google Cloud STT enhanced */
49
58
  },
59
+ cache: {
60
+ read_multiplier: 0.10,
61
+ write_5m_multiplier: 1.25,
62
+ write_1h_multiplier: 2.00,
63
+ },
50
64
  };
51
- function usageFile() {
52
- return path.join(configDir(), 'usage.jsonl');
65
+ /** Normalizar el id de modelo para buscarlo en la tabla de precios.
66
+ *
67
+ * POR QUE (PND-273): el camino CLI informa el id con la fecha pegada
68
+ * ("claude-haiku-4-5-20251001"), y la busqueda era exacta, asi que NINGUN
69
+ * turno del camino CLI encontraba su fila y todos se valuaban en cero. La
70
+ * fecha no cambia el precio: se saca antes de buscar. */
71
+ export function normaliseModelId(model) {
72
+ return String(model || '').replace(/-20\d{6}$/, '');
53
73
  }
54
- function pricingFile() {
55
- return path.join(configDir(), 'pricing.json');
74
+ function priceFor(pricing, model) {
75
+ const m = pricing.models ?? {};
76
+ return m[model] ?? m[normaliseModelId(model)];
56
77
  }
57
- async function ensureDir() {
58
- try {
59
- await fs.mkdir(configDir(), { recursive: true });
78
+ /** Valuar la ENTRADA de un evento en dolares.
79
+ *
80
+ * Con desglose: cada componente a su multiplicador. Sin desglose (eventos
81
+ * viejos): `tokens_in` a precio base, que es lo unico que se sabe de ellos
82
+ * -- y se declara como tal en el reporte para que nadie compare peras con
83
+ * manzanas. */
84
+ export function inputUsd(ev, base_per_mtok, cache) {
85
+ const tieneDesglose = typeof ev.tokens_fresh === 'number'
86
+ || typeof ev.tokens_cache_write === 'number'
87
+ || typeof ev.tokens_cache_read === 'number';
88
+ if (!tieneDesglose) {
89
+ return ((ev.tokens_in ?? 0) / 1_000_000) * base_per_mtok;
90
+ }
91
+ const mulLectura = cache?.read_multiplier ?? 0.10;
92
+ const mulEscritura = ev.cache_ttl === '1h'
93
+ ? (cache?.write_1h_multiplier ?? 2.00)
94
+ : (cache?.write_5m_multiplier ?? 1.25);
95
+ const porMtok = base_per_mtok / 1_000_000;
96
+ return (ev.tokens_fresh ?? 0) * porMtok
97
+ + (ev.tokens_cache_write ?? 0) * porMtok * mulEscritura
98
+ + (ev.tokens_cache_read ?? 0) * porMtok * mulLectura;
99
+ }
100
+ /** La bateria NO escribe en la telemetria del dueno.
101
+ *
102
+ * MEDIDO AL CABLEAR EL DESGLOSE (2026-11-03, PND-273): de los 9.062
103
+ * eventos de la ventana de 30 dias en el usage.jsonl de la maquina, 2.347
104
+ * -- el 26% -- tenian modelo "claude", "m" o "claude-test", con marca de
105
+ * tiempo exacta de las corridas de la bateria de hoy. Son los tests que
106
+ * ejercitan ClaudeClient con un fetch falso y no aislan YF_CONFIG_DIR:
107
+ * recordUsage les escribe en el archivo real.
108
+ *
109
+ * Por que importa y no es cosmetico: este archivo es la unica fuente del
110
+ * reporte de costos, y el reporte es lo que acaba de volverse exacto. Una
111
+ * bateria que le mete un cuarto de los eventos lo vuelve inexacto de
112
+ * nuevo, por otra puerta -- y los eventos de test valen cero dolares, asi
113
+ * que bajan el promedio y hacen parecer mas barato de lo que es.
114
+ *
115
+ * Por que se frena ACA y no moviendo YF_CONFIG_DIR para toda la bateria:
116
+ * mover la config entera es un override ANCHO, y este repositorio ya tiene
117
+ * la cicatriz de uno (src/chat/instance_lock.ts: "un override angosto es
118
+ * el arreglo; uno ancho era el bug"). Hay tests que SI necesitan la config
119
+ * real. La telemetria, en cambio, no es nunca lo que un test afirma: el
120
+ * que mide costos se arma su propio YF_CONFIG_DIR, y ahi esta funcion no
121
+ * se niega -- solo se niega al archivo de la MAQUINA.
122
+ *
123
+ * Un test que quiera verificar el recibo pone su YF_CONFIG_DIR y sigue
124
+ * andando, que es como esta escrito tests/cache-ttl-y-desglose.test.ts. */
125
+ export function telemetryWritesAllowed(env = process.env) {
126
+ return usageDestination(env).allowed;
127
+ }
128
+ /** La carpeta de configuracion de la MAQUINA: la del dueno, la que ningun
129
+ * test puede tocar. Se calcula aparte de configDir() a proposito -- hace
130
+ * falta poder comparar el destino CONTRA ella. */
131
+ function carpetaDeLaMaquina(env = process.env) {
132
+ const home = env['USERPROFILE'] || env['HOME'] || os.homedir();
133
+ return path.join(home, '.yujin-forge');
134
+ }
135
+ function mismaCarpeta(a, b) {
136
+ const n = (x) => path.resolve(x).replace(/[\\/]+$/, '').toLowerCase();
137
+ return n(a) === n(b);
138
+ }
139
+ /**
140
+ * EL DESTINO DEL RECIBO, DECIDIDO DE UNA SOLA VEZ Y SIN AWAITS EN EL MEDIO.
141
+ *
142
+ * MEDIDO EL 2026-11-03, DESPUES DE DECLARAR ESTO ARREGLADO (y por eso esta
143
+ * escrito aca y no solo en un commit). La guarda de arriba, sola, NO
144
+ * alcanzaba: la bateria completa de 5.777 pruebas siguio escribiendo CUATRO
145
+ * eventos en el usage.jsonl del dueno. La causa es una carrera, no un
146
+ * permiso:
147
+ *
148
+ * 1. el test pone YF_CONFIG_DIR y llama al cliente;
149
+ * 2. el cliente hace `void recordUsage(...)` -- no lo espera;
150
+ * 3. recordUsage pasa la guarda (YF_CONFIG_DIR esta puesto) y se duerme
151
+ * en el primer await;
152
+ * 4. el test termina, su afterEach BORRA YF_CONFIG_DIR y borra el tmp;
153
+ * 5. recien ahi recordUsage despierta, llama usageFile() -> configDir()
154
+ * -- que lee el entorno DE NUEVO, y ya no esta -- y appendea en
155
+ * ~/.yujin-forge/usage.jsonl.
156
+ *
157
+ * La guarda miraba el entorno en el momento correcto; el PATH se resolvia
158
+ * en otro. Dos lecturas del mismo entorno en dos instantes distintos es la
159
+ * forma general del defecto, y por eso el arreglo no es mover la guarda:
160
+ * es resolver el destino COMPLETO antes del primer await y no volver a
161
+ * mirar el entorno en esa llamada.
162
+ *
163
+ * Y fail-closed: dentro de la bateria se niega TAMBIEN cuando el
164
+ * YF_CONFIG_DIR declarado apunta a la carpeta de la maquina. Si alguien
165
+ * vuelve a introducir una lectura tardia del entorno, el peor caso es que
166
+ * un recibo se pierda en un test, no que contamine la unica medicion de
167
+ * costo honesta que hay.
168
+ */
169
+ export function usageDestination(env = process.env) {
170
+ const override = env['YF_CONFIG_DIR'];
171
+ const tiene = typeof override === 'string' && override.trim() !== '';
172
+ const dir = tiene ? override.trim() : carpetaDeLaMaquina(env);
173
+ const enBateria = env['VITEST'] === 'true' || env['VITEST'] === '1';
174
+ if (enBateria) {
175
+ if (!tiene) {
176
+ return { allowed: false, why: 'bateria sin YF_CONFIG_DIR: el recibo iria al archivo del dueno' };
177
+ }
178
+ if (mismaCarpeta(dir, carpetaDeLaMaquina(env))) {
179
+ return { allowed: false, why: 'bateria con YF_CONFIG_DIR apuntando a la carpeta de la maquina (' + dir + ')' };
180
+ }
60
181
  }
61
- catch { /* best effort */ }
182
+ return { allowed: true, dir, file: path.join(dir, 'usage.jsonl') };
183
+ }
184
+ function pricingFile() {
185
+ return path.join(configDir(), 'pricing.json');
62
186
  }
63
187
  /**
64
188
  * Append a usage event. Never throws -- failures swallowed.
65
189
  */
66
190
  export async function recordUsage(ev) {
67
191
  try {
68
- await ensureDir();
192
+ /* Primero el destino, y de aca en adelante NO se vuelve a leer el
193
+ * entorno: ver usageDestination(). */
194
+ const destino = usageDestination();
195
+ if (!destino.allowed || !destino.file || !destino.dir)
196
+ return;
69
197
  const line = { ts: ev.ts ?? new Date().toISOString(), ...ev };
70
- await fs.appendFile(usageFile(), JSON.stringify(line) + '\n', 'utf-8');
198
+ try {
199
+ await fs.mkdir(destino.dir, { recursive: true });
200
+ }
201
+ catch { /* best effort */ }
202
+ await fs.appendFile(destino.file, JSON.stringify(line) + '\n', 'utf-8');
71
203
  }
72
204
  catch {
73
205
  /* swallow -- telemetry must never break user flow */
@@ -83,6 +215,7 @@ export async function loadPricing() {
83
215
  return {
84
216
  models: { ...(DEFAULT_PRICING.models ?? {}), ...(override.models ?? {}) },
85
217
  voice: { ...(DEFAULT_PRICING.voice ?? {}), ...(override.voice ?? {}) },
218
+ cache: { ...(DEFAULT_PRICING.cache ?? {}), ...(override.cache ?? {}) },
86
219
  };
87
220
  }
88
221
  catch {
@@ -94,7 +227,9 @@ export async function loadPricing() {
94
227
  */
95
228
  export async function readUsage() {
96
229
  try {
97
- const raw = await fs.readFile(usageFile(), 'utf-8');
230
+ /* La LECTURA no pasa por usageDestination(): leer el archivo del dueno
231
+ * no lo contamina, y un reporte de costos tiene que poder leerlo. */
232
+ const raw = await fs.readFile(path.join(configDir(), 'usage.jsonl'), 'utf-8');
98
233
  return raw.split('\n')
99
234
  .filter((l) => l.trim().length > 0)
100
235
  .map((l) => {
@@ -129,6 +264,7 @@ export async function computeCosts(sinceDays = 30) {
129
264
  events_total: events.length,
130
265
  events_window: inWindow.length,
131
266
  window_label: sinceDays === 0 ? 'all-time' : 'last ' + sinceDays + ' days',
267
+ input: { fresh: 0, cache_write: 0, cache_read: 0, cache_write_1h: 0, events_sin_desglose: 0 },
132
268
  subscription: { events: 0, tokens_in: 0, tokens_out: 0 },
133
269
  };
134
270
  for (const ev of inWindow) {
@@ -143,9 +279,25 @@ export async function computeCosts(sinceDays = 30) {
143
279
  }
144
280
  if (ev.kind.startsWith('claude.')) {
145
281
  const m = ev.model ?? 'unknown';
146
- const p = pricing.models?.[m];
282
+ const p = priceFor(pricing, m);
283
+ /* El desglose se acumula para TODOS los eventos de modelo, incluidos
284
+ * los de suscripcion: ahi no hay dolares pero si hay consumo del plan,
285
+ * y la re-escritura de cache lo quema igual. */
286
+ const tieneDesglose = typeof ev.tokens_fresh === 'number'
287
+ || typeof ev.tokens_cache_write === 'number'
288
+ || typeof ev.tokens_cache_read === 'number';
289
+ if (tieneDesglose) {
290
+ breakdown.input.fresh += ev.tokens_fresh ?? 0;
291
+ breakdown.input.cache_write += ev.tokens_cache_write ?? 0;
292
+ breakdown.input.cache_read += ev.tokens_cache_read ?? 0;
293
+ if (ev.cache_ttl === '1h')
294
+ breakdown.input.cache_write_1h += ev.tokens_cache_write ?? 0;
295
+ }
296
+ else {
297
+ breakdown.input.events_sin_desglose += 1;
298
+ }
147
299
  if (p && !bySubscription) {
148
- usd = ((ev.tokens_in ?? 0) / 1_000_000) * p.in_per_mtok
300
+ usd = inputUsd(ev, p.in_per_mtok, pricing.cache)
149
301
  + ((ev.tokens_out ?? 0) / 1_000_000) * p.out_per_mtok;
150
302
  }
151
303
  if (!breakdown.by_model[m]) {
@@ -186,6 +338,27 @@ export function formatCosts(b) {
186
338
  lines.push('Events total: ' + b.events_total);
187
339
  lines.push('Events in window:' + b.events_window);
188
340
  lines.push('Total USD: $' + b.total_usd.toFixed(4));
341
+ /* El desglose de la entrada, que es lo que hace comparable el numero de
342
+ * arriba: tres componentes con precios que difieren doce veces. */
343
+ const inTot = b.input.fresh + b.input.cache_write + b.input.cache_read;
344
+ if (inTot > 0) {
345
+ const pct = (n) => (inTot > 0 ? (100 * n / inTot).toFixed(0) : '0') + '%';
346
+ lines.push('Entrada: ' + inTot + ' tokens'
347
+ + ' frescos=' + b.input.fresh + ' (' + pct(b.input.fresh) + ', 1x)'
348
+ + ' cache escrita=' + b.input.cache_write + ' (' + pct(b.input.cache_write) + ', '
349
+ + (b.input.cache_write_1h > 0 ? '1,25x/2x' : '1,25x') + ')'
350
+ + ' cache leida=' + b.input.cache_read + ' (' + pct(b.input.cache_read) + ', 0,10x)');
351
+ if (b.input.cache_write > b.input.cache_read && b.input.cache_read > 0) {
352
+ lines.push(' AVISO: se escribio a la cache MAS de lo que se leyo. '
353
+ + 'Un prefijo que se re-escribe en vez de leerse paga hasta 20 veces de mas; '
354
+ + 'ver src/chat/cache_ttl.ts.');
355
+ }
356
+ }
357
+ if (b.input.events_sin_desglose > 0) {
358
+ lines.push(' ' + b.input.events_sin_desglose
359
+ + ' evento(s) sin desglose (anteriores al cambio): valuados a precio base '
360
+ + 'sobre el total de entrada, asi que su costo es un PISO, no el exacto.');
361
+ }
189
362
  if (b.subscription.events > 0) {
190
363
  /* Lo que se consumio del plan, dicho aparte: no es dinero, es cuota. */
191
364
  lines.push('Suscripcion: ' + b.subscription.events + ' turnos, '
@@ -1 +1 @@
1
- {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/telemetry/usage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/telemetry/usage.ts"],"names":[],"mappings":"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"}
@@ -51,9 +51,53 @@ export declare function evidenceForClose(slug: string, pending_id: string, opts?
51
51
  * resolverla falla) rige la compilada: una compuerta que no puede leer su
52
52
  * regla no se queda sin regla. */
53
53
  export declare function closeRuleInForce(projectRoot?: string): Promise<UrazukeCloseRule>;
54
- /** Does the evidence gate apply to this item? Only inside an open Urazuke
55
- * workflow, only for plan items (not the ladder's own canonical tasks,
56
- * which have the artifact gate instead), only for reason=shipped. */
54
+ /**
55
+ * PND-260 -- LA TERNA DE RECIBOS SE EXIGE EN TODO CIERRE CON `shipped`,
56
+ * NO SOLO DENTRO DE UN PROYECTO URAZUKE.
57
+ *
58
+ * Lo que habia: `evidenceGateApplies` (abajo) limitaba la exigencia a un
59
+ * proyecto con instancia Urazuke abierta. Fuera de eso, `pending.close` con
60
+ * `shipped` exigia `functional` y `use_cases`, y PEDIA POR DESCRIPCION
61
+ * `tests_status` y `commit` -- en el texto del error. El resultado medido
62
+ * (experimento A/B, peldano 13): un item cerrado con `shipped`, un
63
+ * `functional` largo, un caso de uso y CERO recibos, y el verbo no dijo nada.
64
+ * El propio comentario de esa funcion enuncia el principio que no se estaba
65
+ * aplicando a los recibos: "Si el dato importa, el verbo tiene que negarse
66
+ * sin el".
67
+ *
68
+ * Asi que la exigencia es universal, y la escapatoria es declarada: cuando la
69
+ * terna no esta, quien cierra escribe `sin_recibos_porque` EN EL MOMENTO. La
70
+ * excepcion legitima existe (un peldano sin bateria todavia, un cambio que no
71
+ * es de codigo) y lo que se gana es que quede escrita por quien sabia, en vez
72
+ * de reconstruida por un auditor cuatro semanas despues.
73
+ *
74
+ * NO aplica a las tareas canonicas de la escalera: esas tienen la compuerta
75
+ * de artefactos (evaluateStep), que es otra y mas fuerte.
76
+ */
77
+ export declare function receiptsRequiredForShipped(item: {
78
+ workflow?: {
79
+ urazuke?: unknown;
80
+ ad_hoc?: boolean;
81
+ };
82
+ }, reason: string): boolean;
83
+ /** El minimo del motivo escrito. Mismo criterio que FUNCTIONAL_MIN: lo
84
+ * bastante para que no pase un "no hay", lo bastante poco para que una
85
+ * linea honesta alcance. */
86
+ export declare const SIN_RECIBOS_MIN = 25;
87
+ /** Valida la escapatoria. Devuelve el problema, o null si sirve. */
88
+ export declare function evidenceEscapeProblem(reason: unknown): string | null;
89
+ /** Does the STRICT evidence gate apply to this item? Only inside an open
90
+ * Urazuke workflow, only for plan items (not the ladder's own canonical
91
+ * tasks, which have the artifact gate instead), only for reason=shipped.
92
+ *
93
+ * LA DIFERENCIA CON `receiptsRequiredForShipped` ES LA ESCAPATORIA, Y ES
94
+ * DELIBERADA (PND-260, 2026-11-02). Donde este gate estricto rige, la unica
95
+ * salida sigue siendo `force_reason` + `force_kind`, que son DEL DUENO y
96
+ * quedan contables en el reporte. `sin_recibos_porque` la escribe el agente,
97
+ * asi que aceptarla aca seria regalarle al agente un bypass de una compuerta
98
+ * disenada precisamente para negarselo. Fuera del gate estricto no habia
99
+ * NINGUNA exigencia, asi que ahi la escapatoria del agente es una mejora
100
+ * estricta sobre el silencio. */
57
101
  export declare function evidenceGateApplies(slug: string, item: {
58
102
  workflow?: {
59
103
  urazuke?: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"close_gate.d.ts","sourceRoot":"","sources":["../../src/urazuke/close_gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAuB,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAG5E,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE;QACJ,UAAU,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAChG;;0EAEkE;QAClE,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;kDAiBkD;AAClD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAChC,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,gBAAgB,CAAA;CAAO,GAC3D,OAAO,CAAC,kBAAkB,CAAC,CAqC7B;AAED;;mCAEmC;AACnC,wBAAsB,gBAAgB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAQtF;AAED;;sEAEsE;AACtE,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUtJ"}
1
+ {"version":3,"file":"close_gate.d.ts","sourceRoot":"","sources":["../../src/urazuke/close_gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAuB,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAG5E,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE;QACJ,UAAU,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAChG;;0EAEkE;QAClE,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;kDAiBkD;AAClD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAChC,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,gBAAgB,CAAA;CAAO,GAC3D,OAAO,CAAC,kBAAkB,CAAC,CAqC7B;AAED;;mCAEmC;AACnC,wBAAsB,gBAAgB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAQtF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,EAAE,MAAM,EAAE,MAAM,GAC3E,OAAO,CAIT;AAED;;6BAE6B;AAC7B,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,oEAAoE;AACpE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQpE;AAED;;;;;;;;;;;kCAWkC;AAClC,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUtJ"}
@@ -84,9 +84,63 @@ export async function closeRuleInForce(projectRoot) {
84
84
  return COMPILED_CLOSE_RULE;
85
85
  }
86
86
  }
87
- /** Does the evidence gate apply to this item? Only inside an open Urazuke
88
- * workflow, only for plan items (not the ladder's own canonical tasks,
89
- * which have the artifact gate instead), only for reason=shipped. */
87
+ /**
88
+ * PND-260 -- LA TERNA DE RECIBOS SE EXIGE EN TODO CIERRE CON `shipped`,
89
+ * NO SOLO DENTRO DE UN PROYECTO URAZUKE.
90
+ *
91
+ * Lo que habia: `evidenceGateApplies` (abajo) limitaba la exigencia a un
92
+ * proyecto con instancia Urazuke abierta. Fuera de eso, `pending.close` con
93
+ * `shipped` exigia `functional` y `use_cases`, y PEDIA POR DESCRIPCION
94
+ * `tests_status` y `commit` -- en el texto del error. El resultado medido
95
+ * (experimento A/B, peldano 13): un item cerrado con `shipped`, un
96
+ * `functional` largo, un caso de uso y CERO recibos, y el verbo no dijo nada.
97
+ * El propio comentario de esa funcion enuncia el principio que no se estaba
98
+ * aplicando a los recibos: "Si el dato importa, el verbo tiene que negarse
99
+ * sin el".
100
+ *
101
+ * Asi que la exigencia es universal, y la escapatoria es declarada: cuando la
102
+ * terna no esta, quien cierra escribe `sin_recibos_porque` EN EL MOMENTO. La
103
+ * excepcion legitima existe (un peldano sin bateria todavia, un cambio que no
104
+ * es de codigo) y lo que se gana es que quede escrita por quien sabia, en vez
105
+ * de reconstruida por un auditor cuatro semanas despues.
106
+ *
107
+ * NO aplica a las tareas canonicas de la escalera: esas tienen la compuerta
108
+ * de artefactos (evaluateStep), que es otra y mas fuerte.
109
+ */
110
+ export function receiptsRequiredForShipped(item, reason) {
111
+ if (reason !== 'shipped')
112
+ return false;
113
+ if (item.workflow?.urazuke && !item.workflow.ad_hoc)
114
+ return false;
115
+ return true;
116
+ }
117
+ /** El minimo del motivo escrito. Mismo criterio que FUNCTIONAL_MIN: lo
118
+ * bastante para que no pase un "no hay", lo bastante poco para que una
119
+ * linea honesta alcance. */
120
+ export const SIN_RECIBOS_MIN = 25;
121
+ /** Valida la escapatoria. Devuelve el problema, o null si sirve. */
122
+ export function evidenceEscapeProblem(reason) {
123
+ const t = typeof reason === 'string' ? reason.trim() : '';
124
+ if (!t)
125
+ return 'falta `sin_recibos_porque`';
126
+ if (t.length < SIN_RECIBOS_MIN) {
127
+ return '`sin_recibos_porque` tiene ' + t.length + ' caracteres y el minimo es ' + SIN_RECIBOS_MIN
128
+ + ': hace falta el motivo, no una palabra';
129
+ }
130
+ return null;
131
+ }
132
+ /** Does the STRICT evidence gate apply to this item? Only inside an open
133
+ * Urazuke workflow, only for plan items (not the ladder's own canonical
134
+ * tasks, which have the artifact gate instead), only for reason=shipped.
135
+ *
136
+ * LA DIFERENCIA CON `receiptsRequiredForShipped` ES LA ESCAPATORIA, Y ES
137
+ * DELIBERADA (PND-260, 2026-11-02). Donde este gate estricto rige, la unica
138
+ * salida sigue siendo `force_reason` + `force_kind`, que son DEL DUENO y
139
+ * quedan contables en el reporte. `sin_recibos_porque` la escribe el agente,
140
+ * asi que aceptarla aca seria regalarle al agente un bypass de una compuerta
141
+ * disenada precisamente para negarselo. Fuera del gate estricto no habia
142
+ * NINGUNA exigencia, asi que ahi la escapatoria del agente es una mejora
143
+ * estricta sobre el silencio. */
90
144
  export async function evidenceGateApplies(slug, item, reason) {
91
145
  if (reason !== 'shipped')
92
146
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"close_gate.js","sourceRoot":"","sources":["../../src/urazuke/close_gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"close_gate.js","sourceRoot":"","sources":["../../src/urazuke/close_gate.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,11 @@ export interface RunEvidenceInput {
21
21
  * the receipt. For the first block of a new project, where the previous
22
22
  * version does not even have the module. */
23
23
  mutation_diff?: string;
24
+ /** PND-127 -- 'exit_code' declara que el comando NO es un runner de
25
+ * tests (un escaneo, un verificador) y que su exit code es toda la
26
+ * evidencia. Viaja tal cual al recibo: es una declaracion del autor y
27
+ * tiene que quedar auditable ahi, no inferirse al leer. */
28
+ evidence?: 'tests' | 'exit_code';
24
29
  note?: string;
25
30
  }
26
31
  export interface RunEvidenceResult {
@@ -28,6 +33,11 @@ export interface RunEvidenceResult {
28
33
  /** For red_proof: the worktree was created at this path (already removed). */
29
34
  worktree?: string;
30
35
  }
36
+ /** Lo que un mutation_diff puede medir para entrar entero al recibo. Un
37
+ * mutante planta UN defecto: los 15 del proyecto medido miden entre 280 y
38
+ * 1900 caracteres. Por arriba de esto el verbo se niega con el numero
39
+ * (PND-261); lo que NO hace mas es recortar en silencio. */
40
+ export declare const MUTATION_DIFF_MAX = 20000;
31
41
  export declare const EVIDENCE_DEFAULT_TIMEOUT_MS: number;
32
42
  export declare const EVIDENCE_MAX_TIMEOUT_MS: number;
33
43
  /** El tope que de verdad se va a aplicar a una corrida.
@@ -1 +1 @@
1
- {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/urazuke/evidence.ts"],"names":[],"mappings":"AAsBA,OAAO,EAA8B,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAS3F,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;+CAE2C;IAC3C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;;;iDAK6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAGD,eAAO,MAAM,2BAA2B,QAAiB,CAAC;AAC1D,eAAO,MAAM,uBAAuB,QAAiB,CAAC;AAEtD;;;;;mEAKmE;AACnE,wBAAgB,0BAA0B,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtE;AAiBD;;;;;;;;;;;;;wEAawE;AACxE,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAsCpK;AAED;;;;;uCAKuC;AACvC,MAAM,WAAW,aAAa;IAC5B,wDAAwD;IACxD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;6BACyB;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;mDAC+C;IAC/C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mEAAmE;IACnE,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAOD;;;;;;;;;;;;;;;;;;;;yDAoByD;AACzD,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA2E/F;AAED;;uCAEuC;AACvC,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAI1D;AAOD;;wBAEwB;AACxB,wBAAsB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxD;AAMD;kDACkD;AAClD,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA8JrF;AAuBD;;0DAE0D;AAC1D,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACpD,4EAA4E;IAC5E,IAAI,EAAE,CAAC,CAAC;CACT;AAED,yDAAyD;AACzD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAOhF;AAED;;sCAEsC;AACtC,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAYtF"}
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/urazuke/evidence.ts"],"names":[],"mappings":"AAsBA,OAAO,EAA8B,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAS3F,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;+CAE2C;IAC3C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;;;iDAK6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;gEAG4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;6DAG6D;AAC7D,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AAGvC,eAAO,MAAM,2BAA2B,QAAiB,CAAC;AAC1D,eAAO,MAAM,uBAAuB,QAAiB,CAAC;AAEtD;;;;;mEAKmE;AACnE,wBAAgB,0BAA0B,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtE;AAiBD;;;;;;;;;;;;;wEAawE;AACxE,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAsCpK;AAED;;;;;uCAKuC;AACvC,MAAM,WAAW,aAAa;IAC5B,wDAAwD;IACxD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;6BACyB;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;mDAC+C;IAC/C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mEAAmE;IACnE,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAOD;;;;;;;;;;;;;;;;;;;;yDAoByD;AACzD,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA2E/F;AAED;;uCAEuC;AACvC,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAI1D;AAOD;;wBAEwB;AACxB,wBAAsB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxD;AAMD;kDACkD;AAClD,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAqNrF;AAuBD;;0DAE0D;AAC1D,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACpD,4EAA4E;IAC5E,IAAI,EAAE,CAAC,CAAC;CACT;AAED,yDAAyD;AACzD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAOhF;AAED;;sCAEsC;AACtC,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAYtF"}
@@ -24,6 +24,11 @@ import { appendReceipt, parseCounts } from './receipts.js';
24
24
  import { carryEvidenceEnv, describeEvidenceEnv, readEvidenceEnvDeclaration, } from './evidence_env.js';
25
25
  import { describeWindowsCommandProblem, windowsCommandProblem } from '../chat/tools/shell.js';
26
26
  const execFileP = promisify(execFile);
27
+ /** Lo que un mutation_diff puede medir para entrar entero al recibo. Un
28
+ * mutante planta UN defecto: los 15 del proyecto medido miden entre 280 y
29
+ * 1900 caracteres. Por arriba de esto el verbo se niega con el numero
30
+ * (PND-261); lo que NO hace mas es recortar en silencio. */
31
+ export const MUTATION_DIFF_MAX = 20000;
27
32
  const TAIL_CHARS = 4000;
28
33
  export const EVIDENCE_DEFAULT_TIMEOUT_MS = 10 * 60 * 1000;
29
34
  export const EVIDENCE_MAX_TIMEOUT_MS = 30 * 60 * 1000;
@@ -300,11 +305,38 @@ export async function runEvidence(input) {
300
305
  const started = Date.now();
301
306
  if (input.kind === 'red_proof') {
302
307
  const files = (input.test_files ?? []).map((f) => f.trim()).filter(Boolean);
303
- const mutation = (input.mutation_diff ?? '').trim();
308
+ /* PND-261 -- EL SALTO DE LINEA FINAL ES PARTE DEL DIFF.
309
+ *
310
+ * Aca habia un `.trim()`, y el valor trimado era el que se archivaba.
311
+ * Un diff unificado sin salto de linea final no pasa `git apply`:
312
+ * "corrupt patch at line N". Medido sobre el registro del proyecto c1,
313
+ * fueron 15 recibos de mutacion de 15 -- todos legibles, ninguno
314
+ * reproducible. Y tres quedaron archivados como `not_ok` por esta misma
315
+ * falla, con la culpa atribuida al parche en vez de al guardado.
316
+ *
317
+ * El trim se queda SOLO para decidir si vino vacio; lo que se usa para
318
+ * plantar el mutante y lo que se archiva es el MISMO texto, terminado en
319
+ * salto de linea. Un caracter. */
320
+ const mutationRaw = input.mutation_diff ?? '';
321
+ const mutation = mutationRaw.trim()
322
+ ? (mutationRaw.endsWith('\n') ? mutationRaw : mutationRaw + '\n')
323
+ : '';
304
324
  if (!files.length && !mutation)
305
325
  throw new Error('red_proof needs test_files (the new test(s) to carry into the base worktree) or mutation_diff (a defect planted in the new code, D-037)');
306
326
  if (mutation && !/^(diff --git|--- |\+\+\+ |@@ )/m.test(mutation))
307
327
  throw new Error('mutation_diff must be a unified diff (diff --git / --- / +++ / @@ hunks)');
328
+ /* PND-261 (segunda mitad) -- EL TOPE SE AVISA, NO SE RECORTA.
329
+ *
330
+ * El guardado recortaba a 6000 caracteres y le pegaba '...[truncated]'.
331
+ * Un diff recortado tampoco aplica, y ademas no lo dice donde se mira:
332
+ * el recibo se ve completo. Un mutante planta UN defecto, asi que el
333
+ * tope sobra por lejos -- y cuando no sobre, el que pidio la corrida se
334
+ * entera con el numero en la mano en vez de recibir un documento mudo. */
335
+ if (mutation.length > MUTATION_DIFF_MAX) {
336
+ throw new Error('mutation_diff mide ' + mutation.length + ' caracteres y el tope del recibo es '
337
+ + MUTATION_DIFF_MAX + '. No lo recorto: un diff recortado no aplica y el recibo no lo dice '
338
+ + '(PND-261). Un mutante planta UN defecto -- acota la mutacion.');
339
+ }
308
340
  const baseRef = mutation ? 'HEAD' : (input.base_ref ?? 'HEAD').trim();
309
341
  const wt = await fs.mkdtemp(path.join(os.tmpdir(), 'yf-redproof-'));
310
342
  const link = path.join(wt, 'node_modules');
@@ -337,7 +369,10 @@ export async function runEvidence(input) {
337
369
  + overlay.errors.slice(0, 5).join('; ');
338
370
  }
339
371
  const patch = path.join(wt, '.yf-mutant.diff');
340
- await fs.writeFile(patch, mutation.endsWith('\n') ? mutation : mutation + '\n', 'utf8');
372
+ /* El MISMO texto que se archiva, byte por byte: si lo que se aplica y
373
+ * lo que se guarda pueden diferir, la verificacion de abajo no prueba
374
+ * nada sobre el recibo. */
375
+ await fs.writeFile(patch, mutation, 'utf8');
341
376
  try {
342
377
  /* No point applying a mutant onto the wrong code, and the
343
378
  * message has to name the REAL cause: an apply error reported
@@ -383,6 +418,29 @@ export async function runEvidence(input) {
383
418
  linked = true;
384
419
  }
385
420
  catch { /* no node_modules or cannot link: the command may still work */ }
421
+ /* PND-261 -- UN RECIBO QUE NO SE PUEDE REPRODUCIR NO NACE.
422
+ *
423
+ * applyError y overlayError no son la misma clase de falla y no se
424
+ * tratan igual:
425
+ *
426
+ * - overlayError dice "el worktree NO es el codigo actual". El recibo
427
+ * se escribe igual, marcado, porque eso es lo que PND-240 pedia:
428
+ * que un rojo contaminado deje rastro en vez de desaparecer.
429
+ * - applyError dice "el diff archivado no se puede volver a aplicar".
430
+ * Ahi no hay nada que marcar: el recibo entero existe para que otro
431
+ * plante el mismo defecto, y si el diff no aplica, el documento es
432
+ * ilegible como evidencia. Eso falla CERRADO, sin escribir, y el que
433
+ * pidio la corrida se entera ahora -- no cuatro semanas despues,
434
+ * leyendo un `not_ok` que le echa la culpa al parche.
435
+ *
436
+ * El error se tira ACA y no antes porque la unica forma honesta de
437
+ * saber si un diff aplica es que git lo intente, y git lo intenta sobre
438
+ * el worktree que este bloque arma. */
439
+ if (applyError && !overlayError) {
440
+ throw new Error('evidencia: no escribi recibo porque el mutation_diff no se puede volver a '
441
+ + 'aplicar sobre el codigo actual, y un recibo de mutacion que no se puede reproducir no '
442
+ + 'es evidencia de nada (PND-261). ' + applyError);
443
+ }
386
444
  const setupError = overlayError || applyError;
387
445
  r = setupError
388
446
  ? { exit_code: 0, output: '[forge] ' + setupError, duration_ms: 0, timed_out: false }
@@ -414,9 +472,10 @@ export async function runEvidence(input) {
414
472
  kind: 'red_proof', command: input.command, cwd: input.projectRoot,
415
473
  ref: head.ref, dirty: head.dirty, base_ref: baseShort,
416
474
  mode: mutation ? 'mutation' : 'base',
417
- ...(mutation ? { mutation_diff: mutation.length > 6000 ? mutation.slice(0, 6000) + '\n...[truncated]' : mutation } : {}),
475
+ ...(mutation ? { mutation_diff: mutation } : {}),
418
476
  exit_code: r.exit_code, started_at: started, duration_ms: r.duration_ms,
419
477
  counts, output_tail: tail(r.output),
478
+ ...(input.evidence ? { evidence: input.evidence } : {}),
420
479
  ...(input.pending_id ? { pending_id: input.pending_id } : {}),
421
480
  ...(input.step != null ? { step: input.step } : {}),
422
481
  /* F-13 -- el entorno va al RECIBO y no solo a la nota: isStrongRed lo
@@ -448,6 +507,7 @@ export async function runEvidence(input) {
448
507
  ref: head.ref, dirty: head.dirty,
449
508
  exit_code: r.exit_code, started_at: started, duration_ms: r.duration_ms,
450
509
  counts, output_tail: tail(r.output),
510
+ ...(input.evidence ? { evidence: input.evidence } : {}),
451
511
  ...(input.pending_id ? { pending_id: input.pending_id } : {}),
452
512
  ...(input.step != null ? { step: input.step } : {}),
453
513
  ...(input.note ? { note: input.note } : {}),