@nac3/forge-cli 1.23.6 → 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 (166) 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/core/turn_classifier.d.ts +4 -3
  54. package/dist/core/turn_classifier.d.ts.map +1 -1
  55. package/dist/core/turn_classifier.js +65 -20
  56. package/dist/core/turn_classifier.js.map +1 -1
  57. package/dist/docs/doctrine/urazuke.md +173 -2
  58. package/dist/nac3/internal_manifest.d.ts.map +1 -1
  59. package/dist/nac3/internal_manifest.js +28 -2
  60. package/dist/nac3/internal_manifest.js.map +1 -1
  61. package/dist/pending/store.d.ts +29 -0
  62. package/dist/pending/store.d.ts.map +1 -1
  63. package/dist/pending/store.js +51 -1
  64. package/dist/pending/store.js.map +1 -1
  65. package/dist/pending/types.d.ts +23 -0
  66. package/dist/pending/types.d.ts.map +1 -1
  67. package/dist/pending/types.js.map +1 -1
  68. package/dist/telemetry/usage.d.ts +18 -0
  69. package/dist/telemetry/usage.d.ts.map +1 -1
  70. package/dist/telemetry/usage.js +16 -1
  71. package/dist/telemetry/usage.js.map +1 -1
  72. package/dist/urazuke/announce.d.ts +7 -0
  73. package/dist/urazuke/announce.d.ts.map +1 -1
  74. package/dist/urazuke/announce.js +20 -0
  75. package/dist/urazuke/announce.js.map +1 -1
  76. package/dist/urazuke/catalog.d.ts +1 -1
  77. package/dist/urazuke/catalog.d.ts.map +1 -1
  78. package/dist/urazuke/catalog.js.map +1 -1
  79. package/dist/urazuke/close_gate.d.ts +31 -4
  80. package/dist/urazuke/close_gate.d.ts.map +1 -1
  81. package/dist/urazuke/close_gate.js +70 -13
  82. package/dist/urazuke/close_gate.js.map +1 -1
  83. package/dist/urazuke/current.d.ts +28 -0
  84. package/dist/urazuke/current.d.ts.map +1 -1
  85. package/dist/urazuke/current.js +18 -5
  86. package/dist/urazuke/current.js.map +1 -1
  87. package/dist/urazuke/cycle.d.ts +3 -0
  88. package/dist/urazuke/cycle.d.ts.map +1 -1
  89. package/dist/urazuke/cycle.js +5 -3
  90. package/dist/urazuke/cycle.js.map +1 -1
  91. package/dist/urazuke/evidence.d.ts +58 -1
  92. package/dist/urazuke/evidence.d.ts.map +1 -1
  93. package/dist/urazuke/evidence.js +203 -27
  94. package/dist/urazuke/evidence.js.map +1 -1
  95. package/dist/urazuke/evidence_env.d.ts +78 -0
  96. package/dist/urazuke/evidence_env.d.ts.map +1 -0
  97. package/dist/urazuke/evidence_env.js +341 -0
  98. package/dist/urazuke/evidence_env.js.map +1 -0
  99. package/dist/urazuke/freeze.d.ts.map +1 -1
  100. package/dist/urazuke/freeze.js +16 -9
  101. package/dist/urazuke/freeze.js.map +1 -1
  102. package/dist/urazuke/gate.d.ts +48 -0
  103. package/dist/urazuke/gate.d.ts.map +1 -1
  104. package/dist/urazuke/gate.js +251 -25
  105. package/dist/urazuke/gate.js.map +1 -1
  106. package/dist/urazuke/gates_data.d.ts +30 -3
  107. package/dist/urazuke/gates_data.d.ts.map +1 -1
  108. package/dist/urazuke/gates_data.js +51 -5
  109. package/dist/urazuke/gates_data.js.map +1 -1
  110. package/dist/urazuke/gates_pull.d.ts +40 -0
  111. package/dist/urazuke/gates_pull.d.ts.map +1 -1
  112. package/dist/urazuke/gates_pull.js +118 -8
  113. package/dist/urazuke/gates_pull.js.map +1 -1
  114. package/dist/urazuke/manual_cases.d.ts +11 -1
  115. package/dist/urazuke/manual_cases.d.ts.map +1 -1
  116. package/dist/urazuke/manual_cases.js +1 -0
  117. package/dist/urazuke/manual_cases.js.map +1 -1
  118. package/dist/urazuke/overrides.d.ts +107 -0
  119. package/dist/urazuke/overrides.d.ts.map +1 -0
  120. package/dist/urazuke/overrides.js +128 -0
  121. package/dist/urazuke/overrides.js.map +1 -0
  122. package/dist/urazuke/probes.d.ts.map +1 -1
  123. package/dist/urazuke/probes.js +51 -0
  124. package/dist/urazuke/probes.js.map +1 -1
  125. package/dist/urazuke/profiles.d.ts +135 -0
  126. package/dist/urazuke/profiles.d.ts.map +1 -0
  127. package/dist/urazuke/profiles.js +470 -0
  128. package/dist/urazuke/profiles.js.map +1 -0
  129. package/dist/urazuke/receipt_audit.d.ts +67 -0
  130. package/dist/urazuke/receipt_audit.d.ts.map +1 -0
  131. package/dist/urazuke/receipt_audit.js +103 -0
  132. package/dist/urazuke/receipt_audit.js.map +1 -0
  133. package/dist/urazuke/receipts.d.ts +22 -0
  134. package/dist/urazuke/receipts.d.ts.map +1 -1
  135. package/dist/urazuke/receipts.js +44 -0
  136. package/dist/urazuke/receipts.js.map +1 -1
  137. package/dist/urazuke/report.d.ts +30 -0
  138. package/dist/urazuke/report.d.ts.map +1 -1
  139. package/dist/urazuke/report.js +39 -0
  140. package/dist/urazuke/report.js.map +1 -1
  141. package/dist/urazuke/reset.d.ts +35 -0
  142. package/dist/urazuke/reset.d.ts.map +1 -0
  143. package/dist/urazuke/reset.js +150 -0
  144. package/dist/urazuke/reset.js.map +1 -0
  145. package/dist/urazuke/retro.d.ts +5 -1
  146. package/dist/urazuke/retro.d.ts.map +1 -1
  147. package/dist/urazuke/retro.js +21 -8
  148. package/dist/urazuke/retro.js.map +1 -1
  149. package/dist/urazuke/section.d.ts.map +1 -1
  150. package/dist/urazuke/section.js +17 -2
  151. package/dist/urazuke/section.js.map +1 -1
  152. package/dist/urazuke/semantics.d.ts +173 -0
  153. package/dist/urazuke/semantics.d.ts.map +1 -0
  154. package/dist/urazuke/semantics.js +232 -0
  155. package/dist/urazuke/semantics.js.map +1 -0
  156. package/dist/urazuke/start.d.ts +8 -0
  157. package/dist/urazuke/start.d.ts.map +1 -1
  158. package/dist/urazuke/start.js +10 -2
  159. package/dist/urazuke/start.js.map +1 -1
  160. package/dist/version.d.ts +1 -1
  161. package/dist/version.js +1 -1
  162. package/dist/workflow/orchestrator.d.ts.map +1 -1
  163. package/dist/workflow/orchestrator.js +6 -7
  164. package/dist/workflow/orchestrator.js.map +1 -1
  165. package/docs/doctrine/urazuke.md +173 -2
  166. package/package.json +24 -20
@@ -0,0 +1,271 @@
1
+ /**
2
+ * LAS CITAS A LA NADA -- la compuerta que el dueno pidio (2026-11-01).
3
+ *
4
+ * EL DEFECTO, en sus palabras: "un documento que afirma una compuerta con
5
+ * confianza es mas convincente que uno que falta. La ausencia se nota; la
6
+ * afirmacion falsa no." Van tres citas a la nada medidas en dos lotes
7
+ * -- `docs/PROGRAMMING_NORMS.md` citado por `.github/workflows/ci.yml` cinco
8
+ * meses sin existir, cuatro jobs y dos crons descritos en
9
+ * `docs/CI_PIPELINE.md` que nunca existieron, y un comentario de
10
+ * `.github/workflows/ci.yml` al que remitia `CLAUDE.md` -- y las tres
11
+ * describian compuertas. Esta compuerta cierra la familia: todo archivo de
12
+ * este repositorio citado en un documento VIGENTE tiene que existir.
13
+ *
14
+ * POR QUE EL DETECTOR ES CONSERVADOR. Una compuerta ruidosa se desactiva, y
15
+ * un gancho desactivado es peor que ninguno porque figura como existente
16
+ * (el mismo argumento con el que el dueno acoto F-15). Asi que esto NO
17
+ * intenta encontrar toda cita: encuentra las que son inequivocamente una
18
+ * afirmacion sobre ESTE repositorio HOY. Las reglas, en orden:
19
+ *
20
+ * 1. Los bloques de codigo cercados no se miran. Un `ls docs/FOO.md` de
21
+ * ejemplo no es una afirmacion sobre el repositorio.
22
+ * 2. Solo cuentan los tramos entre acentos graves y los destinos de los
23
+ * enlaces markdown. Una ruta en prosa suelta no se toca.
24
+ * 3. Con `/`: el primer segmento tiene que ser un directorio que EXISTE en
25
+ * la raiz y no ser generado (`dist/`, `test-results/`, `.forge/`...).
26
+ * La cita afirma una UBICACION, asi que se verifica tal cual.
27
+ * Sin `/`: es un NOMBRE, no una ubicacion, y se verifica como tal --
28
+ * basta que un archivo con ese nombre exista en algun lugar del
29
+ * repositorio. Medido: tratar `claude.ts` como archivo de la raiz daba
30
+ * cientos de falsos positivos, y descartarlo del todo dejaba pasar
31
+ * nombres que ya no existen en ninguna parte (`relay_error.ts`).
32
+ * 4. Nada con comodin (`*`, `?`), hueco (`<x>`, `{x}`, `$x`), dos puntos
33
+ * (rutas de Windows, `repo:ruta`) ni esquema (`http://`). Son formas
34
+ * que no afirman un archivo concreto.
35
+ *
36
+ * Y LOS DOCUMENTOS HISTORICOS NO ENTRAN, por una razon que no es comodidad:
37
+ * un changelog, un traspaso o un informe fechado describen el estado del
38
+ * repositorio EN SU FECHA, y un archivo que existia entonces y se renombro
39
+ * despues es historia correcta, no una cita a la nada. Medido: de 2378 citas
40
+ * verificables, 762 estaban muertas y la enorme mayoria vivia justamente
41
+ * ahi. Meterlas obligaria a una lista de permisos de cientos de entradas sin
42
+ * motivo real, que es la misma afirmacion sin respaldo que esto persigue. La
43
+ * exclusion se DECLARA (`isHistoricalDoc`) y la corrida dice cuantos
44
+ * documentos salteo, nunca en silencio.
45
+ *
46
+ * ASCII-only.
47
+ */
48
+ /** Directorios de la raiz que existen pero NO son fuente: lo que hay dentro
49
+ * lo genera una corrida o lo escribe un producto en ejecucion, asi que un
50
+ * documento puede nombrarlos legitimamente sin que esten en disco. */
51
+ export const GENERATED_ROOTS = [
52
+ 'dist', 'node_modules', 'test-results', 'qa_reports', 'coverage', 'build',
53
+ ];
54
+ /** Extensiones que hacen que un token sin `/` cuente como cita de un nombre
55
+ * de archivo. Corta a proposito: un token cualquiera no es una cita. */
56
+ const NAME_EXT = [
57
+ '.md', '.json', '.yml', '.yaml', '.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs',
58
+ '.toml', '.sql', '.sh', '.py', '.php',
59
+ ];
60
+ /** Sufijos de puntuacion que la prosa deja pegados a una ruta. */
61
+ function trimPunctuation(s) {
62
+ return s.replace(/^[('"`]+/, '').replace(/[)'"`,.;:!?]+$/, '');
63
+ }
64
+ /** La forma de la cita, o el motivo por el que no es una cita verificable. */
65
+ export function classifyToken(token, rootDirs) {
66
+ const t = token.trim();
67
+ if (!t)
68
+ return { reject: 'vacio' };
69
+ if (/\s/.test(t))
70
+ return { reject: 'tiene espacios' };
71
+ if (/^[a-z][a-z0-9+.-]*:\/\//i.test(t))
72
+ return { reject: 'es una URL' };
73
+ if (t.startsWith('#') || t.startsWith('mailto:'))
74
+ return { reject: 'es un ancla o un correo' };
75
+ if (/[*?<>{}$|]/.test(t))
76
+ return { reject: 'tiene comodin o hueco' };
77
+ if (t.includes(':'))
78
+ return { reject: 'tiene dos puntos (ruta ajena o de Windows)' };
79
+ if (t.includes('\\'))
80
+ return { reject: 'usa separador de Windows' };
81
+ if (t.includes('..'))
82
+ return { reject: 'sube de directorio' };
83
+ if (t.startsWith('/'))
84
+ return { reject: 'es absoluta' };
85
+ if (t.startsWith('~'))
86
+ return { reject: 'es del home del usuario' };
87
+ const clean = t.replace(/^\.\//, '').replace(/\/+$/, '');
88
+ if (!clean)
89
+ return { reject: 'vacio' };
90
+ const dot = clean.lastIndexOf('.');
91
+ const ext = dot > 0 ? clean.slice(dot).toLowerCase() : '';
92
+ if (clean.includes('/')) {
93
+ const segs = clean.split('/');
94
+ const first = segs[0];
95
+ if (!rootDirs.includes(first))
96
+ return { reject: 'su primer segmento no es un directorio de este repositorio' };
97
+ if (first.startsWith('.') && first !== '.github')
98
+ return { reject: 'vive en un directorio de estado local' };
99
+ /* Generado en CUALQUIER tramo, no solo en el primero: la salida de un
100
+ * build de CI (`apps/x/android/app/build/outputs/...`) la produce la
101
+ * corrida, asi que nombrarla no afirma un archivo en disco. */
102
+ if (segs.some((s) => GENERATED_ROOTS.includes(s)))
103
+ return { reject: 'vive en un directorio generado' };
104
+ return 'path';
105
+ }
106
+ if (!ext)
107
+ return { reject: 'no parece un archivo' };
108
+ if (!NAME_EXT.includes(ext))
109
+ return { reject: 'extension no reconocida' };
110
+ return 'name';
111
+ }
112
+ /** Las citas verificables de un documento markdown. */
113
+ export function extractCitations(md, rootDirs) {
114
+ const out = [];
115
+ const lines = md.split(/\r?\n/);
116
+ let fence = null;
117
+ for (let i = 0; i < lines.length; i++) {
118
+ const line = lines[i];
119
+ const fenceMatch = /^\s*(```+|~~~+)/.exec(line);
120
+ if (fenceMatch) {
121
+ const mark = fenceMatch[1];
122
+ if (fence === null)
123
+ fence = mark[0];
124
+ else if (mark[0] === fence)
125
+ fence = null;
126
+ continue;
127
+ }
128
+ if (fence !== null)
129
+ continue;
130
+ /* Lineas sangradas cuatro espacios: bloque de codigo indentado. */
131
+ if (/^ {4,}\S/.test(line) && !/^ {0,3}[-*+]/.test(line))
132
+ continue;
133
+ const tokens = [];
134
+ for (const m of line.matchAll(/`([^`\n]+)`/g))
135
+ tokens.push(m[1]);
136
+ for (const m of line.matchAll(/\]\(([^)\s]+)\)/g))
137
+ tokens.push(m[1]);
138
+ for (const raw of tokens) {
139
+ /* El ancla (`docs/X.md#seccion`) no es parte del archivo. */
140
+ const target0 = trimPunctuation(raw).split('#')[0];
141
+ const target = target0.replace(/^\.\//, '').replace(/\/+$/, '');
142
+ const shape = classifyToken(target, rootDirs);
143
+ if (typeof shape !== 'string')
144
+ continue;
145
+ if (out.some((c) => c.line === i + 1 && c.target === target))
146
+ continue;
147
+ out.push({ line: i + 1, target, raw, shape });
148
+ }
149
+ }
150
+ return out;
151
+ }
152
+ /** Un documento que describe el estado del repositorio en su fecha, no hoy.
153
+ * La lista es de FORMAS de nombre, no de rutas: una lista de rutas se
154
+ * desactualiza con cada documento nuevo y acaba siendo una lista de
155
+ * permisos. */
156
+ export function isHistoricalDoc(rel) {
157
+ const p = rel.replace(/\\/g, '/');
158
+ const base = p.split('/').pop();
159
+ if (base === 'CHANGELOG.md')
160
+ return true;
161
+ /* Carpetas de contexto volcado de una sesion. */
162
+ if (/(^|\/)context-from-/.test(p))
163
+ return true;
164
+ if (/(^|\/)handoff\//i.test(p))
165
+ return true;
166
+ /* Nombre con fecha: un documento fechado afirma sobre su fecha. Los dos
167
+ * separadores se mezclan de verdad en este repositorio
168
+ * (`CATCHUP_PRELIMINAR_2026-06-11.md`), asi que la forma los acepta
169
+ * mezclados en vez de pedir uno solo. */
170
+ if (/[_-]\d{4}[_-]\d{2}[_-]\d{2}/.test(base))
171
+ return true;
172
+ /* Generos que son registro, no especificacion vigente. */
173
+ if (/^(HANDOFF|SESSION|SESION|AUTOPILOT|CODE_REVIEW|INFORME|PROMPT|RETRO|SNAPSHOT|PENDING_REGISTRY_SNAPSHOT)[_-]/i.test(base))
174
+ return true;
175
+ return false;
176
+ }
177
+ /** Las citas de un archivo de MAQUINARIA (workflow, lefthook, manifiesto):
178
+ * ahi una ruta no viene entre acentos graves, viene en un comentario o en
179
+ * un valor. Se buscan por forma y se pasan por el mismo clasificador.
180
+ *
181
+ * Esto NO se usa sobre fuentes TypeScript a proposito: un especificador de
182
+ * import (`./tools/x.js`) tiene forma de ruta, es relativo al archivo y
183
+ * apunta al transpilado, asi que daria cientos de falsos positivos.
184
+ * Medido antes de acotar: 307.
185
+ *
186
+ * Y aca la cita tiene que llevar EXTENSION. En un archivo de maquinaria no
187
+ * hay acentos graves que delimiten el token, asi que un tramo sin extension
188
+ * suele ser otra cosa con forma de ruta -- medido: `src/version\.ts` dentro
189
+ * de una expresion regular de `lefthook.yml` se lee como `src/version`. Las
190
+ * tres citas a la nada que este repositorio ya pago llevaban extension. */
191
+ export function extractMachineryCitations(text, rootDirs) {
192
+ const out = [];
193
+ const lines = text.split(/\r?\n/);
194
+ const re = /[A-Za-z0-9_.][A-Za-z0-9_./-]*\/[A-Za-z0-9_][A-Za-z0-9_./-]*/g;
195
+ for (let i = 0; i < lines.length; i++) {
196
+ for (const m of lines[i].matchAll(re)) {
197
+ const target = trimPunctuation(m[0]).replace(/^\.\//, '').replace(/\/+$/, '');
198
+ if (!/\.[a-z0-9]{1,6}$/i.test(target))
199
+ continue;
200
+ const shape = classifyToken(target, rootDirs);
201
+ if (shape !== 'path')
202
+ continue;
203
+ if (out.some((c) => c.line === i + 1 && c.target === target))
204
+ continue;
205
+ out.push({ line: i + 1, target, raw: m[0], shape });
206
+ }
207
+ }
208
+ return out;
209
+ }
210
+ /** EL ALCANCE QUE BLOQUEA, y por que es este y no "todos los documentos".
211
+ *
212
+ * Medido en este repositorio: de 1331 citas verificables en documentos
213
+ * vigentes, 206 apuntan a archivos que no existen -- y casi todas son
214
+ * correctas. El espacio `docs/` esta SOBRECARGADO: `docs/SQ.md` exige
215
+ * `docs/USER_MANUAL.md` al proyecto ADOPTANTE, `src/urazuke/catalog.ts`
216
+ * nombra `docs/GATES.md` como artefacto que produce el proyecto que corre
217
+ * el metodo, y `docs/worker/README.md` cita `src/relay.js` relativo a su
218
+ * propio componente. Prescribir rutas para otros proyectos es el negocio
219
+ * de este repositorio, asi que "toda ruta citada existe" es FALSO como
220
+ * regla general y una compuerta que lo exija pide una lista de permisos de
221
+ * cientos de entradas -- que es la misma afirmacion sin respaldo que esto
222
+ * persigue.
223
+ *
224
+ * Lo que si se puede exigir sin excepciones es este conjunto: los archivos
225
+ * que se leen como AUTORIDAD sobre la maquinaria de este repositorio. Es
226
+ * donde vivieron los tres defectos medidos y es chico y verificable. El
227
+ * resto se MIDE y se informa en la misma salida, nunca en silencio.
228
+ *
229
+ * Y dentro de ese conjunto bloquean solo las citas con forma de RUTA. Un
230
+ * nombre suelto (`nac-bridge.js`, `pilot.bundle.js` en el README) no afirma
231
+ * una ubicacion de este repositorio: nombra un artefacto de otro paquete.
232
+ * Una ruta si afirma: dice "esta aca". Esa es la afirmacion que las tres
233
+ * citas a la nada hicieron y la que esto verifica. */
234
+ export const AUTHORITY_SCOPE = [
235
+ 'CLAUDE.md',
236
+ 'README.md',
237
+ 'PROJECT.md',
238
+ 'docs/PROGRAMMING_NORMS.md',
239
+ 'docs/CI_PIPELINE.md',
240
+ 'lefthook.yml',
241
+ 'package.json',
242
+ /* mas .github/workflows/*.yml, que el script expande del disco. */
243
+ ];
244
+ export function renderCitationReport(r) {
245
+ const out = [];
246
+ out.push('doc-citations [compuerta]: ' + r.authority_files + ' archivos de autoridad, '
247
+ + r.authority_checked + ' citas verificadas'
248
+ + (r.allowed ? ', ' + r.allowed + ' permitidas por declaracion' : '')
249
+ + ', ' + r.violations.length + ' a la nada.');
250
+ out.push('doc-citations [relevamiento, NO bloquea]: ' + r.survey_docs
251
+ + ' documentos vigentes (' + r.survey_skipped_historical + ' historicos salteados), '
252
+ + r.survey_checked + ' citas, ' + r.survey_dead + ' sin archivo en disco.');
253
+ out.push(' El relevamiento no bloquea porque este repositorio PRESCRIBE rutas para otros');
254
+ out.push(' proyectos (docs/SQ.md exige docs/USER_MANUAL.md al adoptante), asi que una ruta');
255
+ out.push(' sin archivo no es por si misma un defecto. El numero esta a la vista para que');
256
+ out.push(' nadie lo descubra midiendo de nuevo.');
257
+ if (!r.violations.length)
258
+ return out.join('\n');
259
+ out.push('');
260
+ out.push('CITAS A LA NADA EN EL ALCANCE QUE BLOQUEA (' + r.violations.length + '):');
261
+ for (const v of r.violations) {
262
+ out.push(' ' + v.doc + ':' + v.line + ' -> ' + v.target
263
+ + (v.shape === 'name' ? ' (no existe con ese nombre en ninguna parte)' : ' (no existe)'));
264
+ }
265
+ out.push('');
266
+ out.push('Un documento que afirma un archivo que no existe es peor que uno que falta:');
267
+ out.push('la ausencia se nota, la afirmacion falsa no. Arregla la cita, crea el archivo,');
268
+ out.push('o declara la excepcion con su motivo en docs/.doc-citations-allow.');
269
+ return out.join('\n');
270
+ }
271
+ //# sourceMappingURL=doc_citations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc_citations.js","sourceRoot":"","sources":["../../src/core/doc_citations.ts"],"names":[],"mappings":"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"}
@@ -14,9 +14,10 @@
14
14
  * shows what happened. The chat NEVER blocks on classifier
15
15
  * availability.
16
16
  *
17
- * Cache: LRU keyed by sha256 of the user text + previous tier.
18
- * 50 entries / 5 min TTL. Saves the classifier call on repeated
19
- * short prompts ("hola", "ok", "si").
17
+ * Cache: LRU keyed by sha256 of the user text + previous tier +
18
+ * QUIEN contesta (provider, modelo, huella de la key). 50 entries
19
+ * / 5 min TTL. Saves the classifier call on repeated short
20
+ * prompts ("hola", "ok", "si"). Un NO-veredicto no se guarda.
20
21
  *
21
22
  * ASCII-only.
22
23
  */
@@ -1 +1 @@
1
- {"version":3,"file":"turn_classifier.d.ts","sourceRoot":"","sources":["../../src/core/turn_classifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC;AAErE;;;;uDAIuD;AACvD,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,WAAW,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb;4CACwC;IACxC,SAAS,EAAE,KAAK,GAAG,UAAU,CAAC;IAC9B,iEAAiE;IACjE,aAAa,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC;IACnC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,IAAI,EAAE,KAAK,GAAG,UAAU,CAAC;IACzB;oCACgC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,2DAA2D;IAC3D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gDAAgD;IAChD,MAAM,EAAE,OAAO,CAAC;CACjB;AAoED,8CAA8C;AAC9C,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAiLD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwEpF"}
1
+ {"version":3,"file":"turn_classifier.d.ts","sourceRoot":"","sources":["../../src/core/turn_classifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC;AAErE;;;;uDAIuD;AACvD,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,WAAW,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb;4CACwC;IACxC,SAAS,EAAE,KAAK,GAAG,UAAU,CAAC;IAC9B,iEAAiE;IACjE,aAAa,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC;IACnC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,IAAI,EAAE,KAAK,GAAG,UAAU,CAAC;IACzB;oCACgC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,2DAA2D;IAC3D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gDAAgD;IAChD,MAAM,EAAE,OAAO,CAAC;CACjB;AAuHD,8CAA8C;AAC9C,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAiLD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsEpF"}
@@ -14,9 +14,10 @@
14
14
  * shows what happened. The chat NEVER blocks on classifier
15
15
  * availability.
16
16
  *
17
- * Cache: LRU keyed by sha256 of the user text + previous tier.
18
- * 50 entries / 5 min TTL. Saves the classifier call on repeated
19
- * short prompts ("hola", "ok", "si").
17
+ * Cache: LRU keyed by sha256 of the user text + previous tier +
18
+ * QUIEN contesta (provider, modelo, huella de la key). 50 entries
19
+ * / 5 min TTL. Saves the classifier call on repeated short
20
+ * prompts ("hola", "ok", "si"). Un NO-veredicto no se guarda.
20
21
  *
21
22
  * ASCII-only.
22
23
  */
@@ -46,11 +47,42 @@ const SYSTEM_PROMPT = ('You are a routing classifier inside a developer tool. Gi
46
47
  const CACHE_MAX = 50;
47
48
  const CACHE_TTL_MS = 5 * 60 * 1000;
48
49
  const _cache = new Map();
49
- function cacheKey(text, prev) {
50
+ /**
51
+ * La clave del cache: el texto, el tier anterior Y QUIEN VA A CONTESTAR.
52
+ *
53
+ * El provider / modelo / identidad de la key entraron el 31-oct-2026. Antes
54
+ * la clave era solo (prev|texto), o sea "la misma pregunta" sin importar a
55
+ * quien se le preguntaba, y eso tiene dos consecuencias reales:
56
+ *
57
+ * 1. Una respuesta obtenida con el proveedor eco A seguia sirviendo despues
58
+ * de que el usuario cambiara a B (o rotara la key) durante 5 minutos.
59
+ * La respuesta de un clasificador es la respuesta DE ESE clasificador.
60
+ * 2. Un turno SIN key (vault vacio, key todavia sin cargar) comparte ranura
61
+ * con un turno CON key. Asi se colaba un veredicto de un lado al otro:
62
+ * es como se cruzaron dos archivos de la bateria el 31-oct-2026
63
+ * (turn_classifier deja cacheado "abrime una tab" -> simple con su fetch
64
+ * de juguete, y sticky_tier -- en el mismo worker, dentro del TTL de 5
65
+ * min -- recibia ese veredicto en vez del fallo que esperaba). El rojo
66
+ * aparecia o no segun que archivos compartian worker: una compuerta de
67
+ * publicacion que no es reproducible.
68
+ *
69
+ * De la key va solo una huella (sha256 truncado): la clave nunca lleva el
70
+ * secreto, y alcanza para distinguir una rotacion.
71
+ */
72
+ function cacheKey(i) {
73
+ const huella = i.apiKey
74
+ ? createHash('sha256').update(i.apiKey).digest('hex').slice(0, 16)
75
+ : 'sin-key';
50
76
  const h = createHash('sha256');
51
- h.update(prev || '');
77
+ h.update(i.prev || '');
52
78
  h.update('|');
53
- h.update(text);
79
+ h.update(i.provider);
80
+ h.update('|');
81
+ h.update(i.model);
82
+ h.update('|');
83
+ h.update(huella);
84
+ h.update('|');
85
+ h.update(i.text);
54
86
  return h.digest('hex');
55
87
  }
56
88
  function cacheGet(key) {
@@ -66,7 +98,22 @@ function cacheGet(key) {
66
98
  _cache.set(key, e);
67
99
  return { ...e.result, cached: true };
68
100
  }
101
+ /**
102
+ * Guarda un veredicto. UN NO-VEREDICTO NO SE GUARDA (31-oct-2026).
103
+ *
104
+ * Un `verdict: null` no es una respuesta: es "no se pudo preguntar" (sin key,
105
+ * inalcanzable, ilegible). Guardarlo 5 minutos convierte un parpadeo en
106
+ * politica: la key que entra un segundo despues, o el proveedor que vuelve,
107
+ * no se usan hasta que expire el TTL. Y como el fallo cae a frontier por
108
+ * politica (cost_router), el costo del cache del fallo se paga en plata.
109
+ *
110
+ * No es un disyuntor: la clave incluye el texto, asi que cachear el fallo no
111
+ * frenaba ninguna ronda de reintentos general -- solo silenciaba el reintento
112
+ * de ESE texto.
113
+ */
69
114
  function cacheSet(key, result) {
115
+ if (result.verdict === null)
116
+ return;
70
117
  if (_cache.size >= CACHE_MAX) {
71
118
  /* Drop oldest (first inserted) -- Map iteration order is
72
119
  * insertion order. */
@@ -254,28 +301,30 @@ async function callAnthropic(text, apiKey, model, fetchImpl, timeoutMs) {
254
301
  */
255
302
  export async function classifyTurn(input) {
256
303
  const text = typeof input.text === 'string' ? input.text : '';
257
- const key = cacheKey(text, input.previous_tier);
304
+ const apiKey = input.api_key ?? null;
305
+ /* Resueltos ANTES de tocar el cache: son parte de la clave, asi que los
306
+ * defaults tienen que ser los mismos que usa la llamada. */
307
+ const provider = input.provider ?? 'google_ai';
308
+ const model = input.model
309
+ ?? (provider === 'anthropic' ? 'claude-haiku-4-5-20251001' : 'gemini-2.5-flash-lite');
310
+ const key = cacheKey({ text, prev: input.previous_tier, provider, model, apiKey });
258
311
  const cached = cacheGet(key);
259
312
  if (cached)
260
313
  return cached;
261
314
  const signals = [];
262
- const apiKey = input.api_key ?? null;
263
315
  if (!apiKey) {
264
316
  signals.push('classifier_no_api_key');
265
- const r = {
317
+ /* Sin cacheSet: ver la politica en cacheSet (un no-veredicto no se
318
+ * guarda). Vale para los tres caminos de fallo de abajo. */
319
+ return {
266
320
  tier: input.gate_tier,
267
321
  confidence: 0.50,
268
322
  verdict: null,
269
323
  signals,
270
324
  cached: false,
271
325
  };
272
- cacheSet(key, r);
273
- return r;
274
326
  }
275
327
  const fetchImpl = input.fetchImpl ?? fetch;
276
- const provider = input.provider ?? 'google_ai';
277
- const model = input.model
278
- ?? (provider === 'anthropic' ? 'claude-haiku-4-5-20251001' : 'gemini-2.5-flash-lite');
279
328
  const timeoutMs = input.timeoutMs ?? 2500;
280
329
  let raw = '';
281
330
  try {
@@ -286,28 +335,24 @@ export async function classifyTurn(input) {
286
335
  catch (err) {
287
336
  const msg = err instanceof Error ? err.message : String(err);
288
337
  signals.push('classifier_unreachable[' + msg.slice(0, 60) + ']');
289
- const r = {
338
+ return {
290
339
  tier: input.gate_tier,
291
340
  confidence: 0.50,
292
341
  verdict: null,
293
342
  signals,
294
343
  cached: false,
295
344
  };
296
- cacheSet(key, r);
297
- return r;
298
345
  }
299
346
  const verdict = parseVerdict(raw);
300
347
  if (!verdict) {
301
348
  signals.push('classifier_unparseable[' + raw.slice(0, 30) + ']');
302
- const r = {
349
+ return {
303
350
  tier: input.gate_tier,
304
351
  confidence: 0.50,
305
352
  verdict: null,
306
353
  signals,
307
354
  cached: false,
308
355
  };
309
- cacheSet(key, r);
310
- return r;
311
356
  }
312
357
  signals.push('classifier_verdict[' + verdict + ']');
313
358
  const tier = verdictToTier(verdict, input.gate_tier);
@@ -1 +1 @@
1
- {"version":3,"file":"turn_classifier.js","sourceRoot":"","sources":["../../src/core/turn_classifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"turn_classifier.js","sourceRoot":"","sources":["../../src/core/turn_classifier.ts"],"names":[],"mappings":"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"}