crbro-memory 2.9.0 → 2.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,7 +10,9 @@
10
10
  // values, who holds a role (default window: 90 days)
11
11
  // normal — any other fact (365 days)
12
12
  // durable — decisions, procedures (patterns) (730 days)
13
- // permanent — history: preferences, errors, debts, a fact marked so (never)
13
+ // permanent — history: preferences, errors, debts, a fact marked so, and
14
+ // (2.9.1) a dated record of something done or a line the
15
+ // miner imported (never)
14
16
  //
15
17
  // The windows are a policy choice, not a measurement: nothing in this
16
18
  // repository measures how long a port or a price stays true. They are set so
@@ -23,10 +25,14 @@ exports.stalenessEnabled = stalenessEnabled;
23
25
  exports.shelfWindows = shelfWindows;
24
26
  exports.isShelfLife = isShelfLife;
25
27
  exports.mostVolatile = mostVolatile;
28
+ exports.isDatedRecord = isDatedRecord;
29
+ exports.recordVerdict = recordVerdict;
26
30
  exports.detectShelf = detectShelf;
27
31
  exports.shelfOfFact = shelfOfFact;
28
32
  exports.shelfOfKind = shelfOfKind;
33
+ exports.isLegacyBrain = isLegacyBrain;
29
34
  exports.stalenessContext = stalenessContext;
35
+ exports.stalenessContextOf = stalenessContextOf;
30
36
  exports.plausibleCheck = plausibleCheck;
31
37
  exports.spreadOf = spreadOf;
32
38
  exports.factStaleness = factStaleness;
@@ -162,14 +168,296 @@ const ROLE_THEN_NAME = new RegExp(`\\b(?:${roleAlt})\\b[^.\\n]{0,60}?(?:\\b(?:is
162
168
  * The article is required: "Docker es responsable de aislar…" is not a person.
163
169
  */
164
170
  const NAME_THEN_ROLE = new RegExp(`${NAME}\\s+(?:is|es)\\s+(?:(?:now|ahora)\\s+)?(?:the|el|la|our|nuestr[oa])\\s+(?:(?:new|nuev[oa])\\s+)?(?:${roleAlt})\\b`, 'u');
171
+ // ─── History: a dated record of something done (2.9.1) ───────────
172
+ //
173
+ // "FASE 2 completada (ago 2026)", "2026-08-11: VERIFICADO que …", "RECHAZO
174
+ // de la tienda v3.4.0 (9 jul 2026)", "Deployed v2.3.1 on 2026-06-18":
175
+ // a line that says what was done and when does not go stale — it tells what
176
+ // happened, and it carries its own date, so whoever reads it sees how old it
177
+ // is. Before 2.9.1 the version, URL or path inside such a record made the
178
+ // whole line volatile, and on a real personal brain records were a large
179
+ // share of what the detector flagged (docs/design/staleness.md §15).
180
+ //
181
+ // The rule, all on the line's HEAD (its text up to the first sentence end —
182
+ // ". ", "! ", "? " — or line break; details after it are not judged):
183
+ // 1. the head names a date: 2026-06-18, 18/06/2026, 18-jun-2026, 18 de
184
+ // junio (de 2026), jun 2026, June 18, 2026;
185
+ // 2. the head has a word of finished action: a Spanish participle
186
+ // (completado, implementada, resueltos, desplegado, publicado, verificado,
187
+ // corregido, migrado, creado, añadido, rechazado, medido…), an
188
+ // unambiguous Spanish preterite (desplegó, migró, corrigió, resolvió, or
189
+ // any of them after "se": "se publicó"), an English past form (fixed,
190
+ // deployed, released, completed, verified, migrated, checked…) or an
191
+ // event noun (fix, hotfix, rechazo, incidente, outage, release,
192
+ // ejecución…);
193
+ // 3. and none of these turns it back into a statement of state:
194
+ // - a date that opens a period: "desde el 18-sep", "since", "a partir
195
+ // de", "as of", "from", "hasta", "until", "a 4-oct", "al 4-oct";
196
+ // - a word of the future or of a deadline: will, planned, previsto,
197
+ // programado, pendiente, caduca, expires, vence, renews, next,
198
+ // próximo, "para el <date>", "by <date>", "antes del <date>" ("tarea
199
+ // programada" and "scheduled task" name a kind of job and do not count);
200
+ // - a word of the present: actualmente, currently, current, actual,
201
+ // ahora, now, todavía, still, vigente, último, last, latest;
202
+ // - a verb of state BEFORE the first finished-action word: "la API
203
+ // corre en el puerto 8443, desplegada el 2026-06-18" is a port that
204
+ // also says when it went up, so it stays volatile;
205
+ // 4. and, when the head carries a changeable value (a volatile rule fires
206
+ // on it with its dates blanked), none of these says the value holds:
207
+ // - a verb of state anywhere in it, or pasa a, queda, sigue, devuelve,
208
+ // responde, abierto, becomes, returns ("Fix (4-oct-2026): el webhook
209
+ // apunta a https://…", "La release 2.3 usa el puerto 8443 (jun 2026)");
210
+ // - a check — verificado, comprobado, confirmado, probado, medido,
211
+ // detectado, verified, checked… — with the value before it ("Puerto
212
+ // 9443 verificado el 2026-09-18", "Plan: $499/año (confirmado …)"): a
213
+ // dated check of a value is that value, with the day it was seen;
214
+ // - a move to a place: migrado, desplegado, instalado, migrated,
215
+ // deployed… followed within four words by a/al/en/to/into/on/at and a
216
+ // port, host, URL or path ("se migró el panel al puerto 9443",
217
+ // "Deployed to https://app.example.com on 2026-06-18");
218
+ // - a schedule: a cycle word with a time of day ("ejecución diaria 03:00
219
+ // en /var/backups") or cada/every with a unit ("cada lunes");
220
+ // - a word that also describes a state — cerrado, aprobado, completo,
221
+ // medida, closed, approved, complete — when it is the only
222
+ // finished-action word ("Presupuesto aprobado (…): 1.200 € al mes").
223
+ // Quoted titles and asides in parentheses are not read for the verbs.
224
+ // Words that introduce a new current value without telling an event —
225
+ // actualizado, cambiado, configurado, updated, changed, set, renovado — are
226
+ // deliberately not finished-action words. The adjective "completa" counts
227
+ // fully only after a kind of work ("FASE 4 completa"). A line with no date
228
+ // is never history, however past its verbs are: it cannot show its age.
229
+ //
230
+ // Limits, said once: the head decides, so "Migrado a Hetzner (3-oct-2026).
231
+ // El host es 10.0.0.5." is history whole; the line's own date is what tells
232
+ // the reader how old that host is. Only Spanish and English. A record without
233
+ // a date ("Publicado el artículo en https://…") is not history. A version is
234
+ // not a place: "Instalado Node 20.11.0 en el servidor (3-oct-2026)" and
235
+ // "Migrado a PostgreSQL 16 el 3-oct-2026" are records of an upgrade.
236
+ /** Month names and the abbreviations people write, es/en, longest first. */
237
+ const MONTH = '(?:enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|setiembre|octubre|noviembre|diciembre|'
238
+ + 'january|february|march|april|june|july|august|september|october|november|december|'
239
+ + 'ene|feb|mar|abr|may|jun|jul|ago|sept|sep|oct|nov|dic|jan|apr|aug|dec)\\.?(?![a-z])';
240
+ /** A calendar date as people write it, on folded text. Year optional only after a day and a month name. */
241
+ const DATE = '(?:'
242
+ // A numeric date is not glued to a word, a version or a path: in "/api/v1/12/24" there is no day.
243
+ + '(?<![\\w./-])20\\d{2}[-/]\\d{1,2}[-/]\\d{1,2}(?![\\d])' // 2026-06-18
244
+ + '|(?<![\\w./-])\\d{1,2}/\\d{1,2}/(?:20)?\\d{2}(?![\\d./])' // 18/06/2026
245
+ + '|(?<![\\w./-])\\d{1,2}-\\d{1,2}-(?:20)?\\d{2}(?![\\d./-])' // 18-06-2026
246
+ + '|(?<![\\w./-])\\d{1,2}\\.\\d{1,2}\\.20\\d{2}(?![\\d.])' // 18.06.2026 (not a version)
247
+ // Day + month. A bare "may" followed by another word is the English modal ("Node 18 may be removed"), not May.
248
+ + `|(?<!\\d)\\d{1,2}º?(?:\\s+de\\s+|[\\s-]+)(?!may\\s+(?!de\\s+20)[a-z])${MONTH}(?:(?:\\s+de\\s+|,?\\s+|-)20\\d{2}(?!\\d))?` // 18-jun(-2026), 18 de junio de 2026
249
+ + `|(?<![a-z])${MONTH}(?:\\s+de\\s+|\\s+|-)20\\d{2}(?!\\d)` // jun 2026, junio de 2026
250
+ + `|(?<![a-z])${MONTH}\\s+\\d{1,2}(?:st|nd|rd|th)?,?\\s+20\\d{2}(?!\\d)` // June 18, 2026
251
+ + ')';
252
+ const DATE_RE = new RegExp(DATE);
253
+ const DATE_ALL = new RegExp(DATE, 'g');
254
+ /** Not part of a path, a branch name or an identifier: "fix-newsletter/", "hotfix/login" are not events. */
255
+ const W0 = '(?<![a-z0-9_/.\\-])';
256
+ const W1 = '(?![a-z0-9_/\\-])';
257
+ /** Kinds of work that can be "complete": "FASE 4 COMPLETA", "Auditoría SEO completa". Not a list or a configuration. */
258
+ const WORK = '(?:fase|fases|etapa|auditoria|migracion|tarea|tareas|revision|repaso|implementacion|instalacion|ejecucion'
259
+ + '|integracion|prueba|pruebas|limpieza|sesion|sprint|refactor|refactorizacion|traduccion|importacion|indexacion|copia|backup)';
260
+ const DONE = new RegExp(W0 + '(?:'
261
+ // Spanish participles, any gender and number. Cerrado and aprobado are in STATIVE below: they also
262
+ // describe a state ("puerto 22 cerrado", "presupuesto aprobado: 1.200 €/mes").
263
+ + '(?:completad|implementad|resuelt|desplegad|publicad|verificad|comprobad|confirmad|corregid|migrad|cread'
264
+ + '|anadid|rechazad|denegad|arreglad|terminad|finalizad|lanzad|instalad|eliminad|borrad|enviad|entregad'
265
+ + '|auditad|integrad|solucionad|probad|testead|validad|detectad|reparad|restaurad|revertid|fusionad|renombrad|retirad'
266
+ + '|descartad|construid|realizad|ejecutad|aplicad|cancelad|abortad|reescrit|rehech)(?:o|a|os|as)'
267
+ // The adjective "completa" only after a kind of work: "Lista completa de precios" is not an event.
268
+ + `|(?<=(?:^|[^a-z])${WORK}(?:\\s+\\S+){0,3}\\s+)complet(?:o|a|os|as)`
269
+ // "medido"; "medida" only when it is not the noun ("a medida", "medida de seguridad").
270
+ + '|medid(?:o|os)|(?<!(?:^|[^a-z])(?:a|la|las|una|unas|de|del|sus?) )medidas?(?! de(?![a-z]))'
271
+ // Spanish preterites that are not also a common noun, adjective or present tense.
272
+ + '|desplego|desplegue|migro|migre|corrigio|corregi|resolvio|resolvi|rechace|arregle|verifique|verifico|finalizo'
273
+ + '|finalice|elimino|elimine|aprobo|publique|implemente|implemento|hizo|hice|hicimos'
274
+ // "se" + preterite is unambiguous even where the bare form is not ("se publicó" vs "público").
275
+ + '|se (?:publico|creo|anadio|lanzo|instalo|elimino|borro|desplego|corrigio|resolvio|migro|cerro|aprobo|envio|entrego'
276
+ + '|termino|completo|implemento|aplico|ejecuto|cancelo|midio|arreglo|reparo|verifico|comprobo|rechazo)'
277
+ // Event nouns.
278
+ + '|fix|hotfix|bugfix|rechazo|incidente|incidencia|incident|outage|caida|post-?mortem|release|lanzamiento|ejecucion'
279
+ // English past forms.
280
+ + '|fixed|deployed|released|completed|implemented|resolved|published|verified|confirmed|migrated|created|added'
281
+ + '|rejected|shipped|merged|launched|installed|removed|deleted|done|finished|sent|audited|tested'
282
+ + '|validated|detected|repaired|restored|reverted|solved|delivered|submitted|renamed|built|rolled back|refactored|applied'
283
+ + '|checked|measured|executed|uploaded|posted|cancell?ed|aborted'
284
+ + ')' + W1);
285
+ /**
286
+ * Words that tell an event or describe a state: "FASE 0 APROBADA el 2-sep",
287
+ * "Tanda CERRADA el 21-sep", "DIAGNÓSTICO COMPLETO (21-08-2026)" are records,
288
+ * "Puerto 22 cerrado (…): SSH en el 65002", "Presupuesto aprobado (…): 1.200 €
289
+ * al mes", "Lista completa de precios (…)" are states. They count as a
290
+ * finished action only in a head that carries no changeable value.
291
+ */
292
+ const STATIVE = new RegExp(W0 + '(?:(?:cerrad|aprobad|complet)(?:o|a|os|as)|(?<!(?:^|[^a-z])(?:a|la|las|una|unas|de|del|sus?) )medidas?|closed|approved|complete)' + W1);
293
+ /** A date that opens a period, or a moment that does: the line states what holds from then on. */
294
+ const OPENS_PERIOD = new RegExp(`(?<![a-z])(?:desde|since|a partir del?|as of|as from|from|effective(?: from)?|con efecto(?: desde)?|a fecha de|hasta|until|till|a|al)\\s+`
295
+ + `(?:(?:el|la|los|the|dia|day)\\s+)*(?:${DATE}|entonces|then|hoy|today|ahora|now|ese dia|that day)`);
296
+ /** The future, a deadline or a renewal: something still to happen is not a record. */
297
+ const FUTURE = new RegExp(
298
+ // "Tarea programada" and "scheduled task" name a kind of job, not a future: they stay out.
299
+ '(?<![a-z])(?:will|shall|going to|planned|planificad[oa]s?|previst[oa]s?|(?<!(?:tarea|rutina)s? )programad[oa]s?'
300
+ + '|scheduled(?! (?:tasks?|jobs?|routines?))|pendientes?|pending'
301
+ + '|por hacer|to-do|deadline|fecha limite|plazo|vencen?|vencimiento|caducan?|caducidad|expiran?|expires?|expiry'
302
+ + '|renuevan?|renews?|renewal|next|proxim[oa]s?|siguientes?)(?![a-z])'
303
+ + `|(?<![a-z])(?:para el|para|by|antes del?|before|no later than)\\s+(?:(?:el|la|the)\\s+)?${DATE}`);
304
+ /** The present: the line says what holds now, whatever else it records. */
305
+ const PRESENT = /(?<![a-z])(?:actualmente|currently|current|actual|actuales|ahora|now|todavia|aun|still|hoy en dia|a dia de hoy|vigente|en vigor|in force|ultim[oa]s?|last|latest)(?![a-z])/;
306
+ /**
307
+ * Verbs that state how something is. Before the first finished-action word
308
+ * they make the line a statement of state. Not inside a domain or a path:
309
+ * the "es" of "garza.es" is not a verb.
310
+ */
311
+ const STATE_WORDS = 'es|son|is|are|corre|corren|runs?|usa|usan|uses?|tiene|tienen|cuesta|cuestan|costs?|vale|valen|apunta|apuntan'
312
+ + '|points?|escucha|escuchan|listens?|requiere|requieren|requires?|sirve|sirven|serves?|vive|viven|lives?|funciona|funcionan'
313
+ + '|works?|contiene|contienen|contains?|ocupa|ocupan';
314
+ const STATE_VERB = new RegExp(`(?<![a-z0-9_./-])(?:${STATE_WORDS}|esta|estan)(?![a-z])`);
315
+ /**
316
+ * The same verbs and a few more that say what holds (pasa a, queda, sigue,
317
+ * devuelve, responde, abierto, becomes, returns…), looked for anywhere in a
318
+ * head that carries a changeable value: "Desplegado el 18-jun-2026: la API
319
+ * corre en el puerto 8443" is a port, whatever came first. "Esta" counts only
320
+ * as the verb ("está en", "está caído"), not as "this" ("esta web").
321
+ */
322
+ const STATE_AFTER = new RegExp('(?<![a-z0-9_./-])(?:'
323
+ + STATE_WORDS
324
+ + '|estan?(?= (?:en|a|al|ahora|caid|activ|disponible|abiert|operativ|online|offline|rot|vaci|llen|list|apuntando|corriendo|usando|sirviendo))'
325
+ + '|pasan? a|quedan?|siguen?|devuelven?|returns?|responden?|responds?|becomes?|abiert[oa]s?|open'
326
+ + ')(?![a-z])');
327
+ /** A check of something: dated, it tells what held that day, and what held is the value. */
328
+ const CHECK = /^(?:verificad|comprobad|confirmad|probad|testead|validad|detectad|medid|verifique|verifico|se verifico|se comprobo|se midio|verified|confirmed|checked|tested|validated|measured|detected)/;
329
+ /** A move to a place: "migrado al puerto 9443", "deployed to https://…" says where the thing lives now. */
330
+ const MOVE = /^(?:migrad|desplegad|instalad|trasladad|movid|migro|migre|desplego|desplegue|se migro|se desplego|se instalo|migrated|deployed|installed|moved)/;
331
+ /** What follows a move, up to four words later, when it names the destination. */
332
+ const TO_PLACE = /^[^\s]*(?:\s+[^\s]+){0,4}?\s+(?:a|al|en|hacia|to|into|on|at)\s+(.*)$/;
333
+ /**
334
+ * Something done on a cycle is a schedule, not an event: "ejecución diaria
335
+ * 03:00 en /var/backups". A cycle word alone is not enough — "Ejecución
336
+ * diaria del 31-ago-2026: publicados…" is one run of a daily job, a record —
337
+ * so it takes a time of day right after it, or cada/every with a unit.
338
+ */
339
+ const RECURRING = new RegExp('(?<![a-z])(?:'
340
+ + '(?:diari[oa]s?|diariamente|semanal(?:es|mente)?|mensual(?:es|mente)?|daily|nightly|weekly|monthly|hourly)'
341
+ + '(?:\\s+(?:a las|at))?\\s+\\d{1,2}[:h]\\d{2}'
342
+ + '|(?:cada|every)\\s+(?:\\d+\\s+)?(?:dia|dias|hora|horas|semana|semanas|mes|meses|minutos?|lunes|martes|miercoles|jueves|viernes|sabado|domingo'
343
+ + '|day|days|hour|hours|week|weeks|month|months|minutes?|monday|tuesday|wednesday|thursday|friday|saturday|sunday|night|noche)'
344
+ + ')(?![a-z0-9])');
345
+ /** Month abbreviations a period may follow without ending the sentence: "jun. 2026", "Sept. 18". */
346
+ const MONTH_ABBR_DOT = /(?<![a-z])(?:ene|feb|mar|abr|may|jun|jul|ago|sept|sep|oct|nov|dic|jan|apr|aug|dec)$/;
347
+ /** The head of a line: up to the first sentence end or line break. */
348
+ function headOf(folded) {
349
+ const re = /[.!?](?=\s|$)|\n/g;
350
+ let m;
351
+ while ((m = re.exec(folded))) {
352
+ if (m[0] === '.' && MONTH_ABBR_DOT.test(folded.slice(0, m.index)))
353
+ continue;
354
+ return folded.slice(0, m.index);
355
+ }
356
+ return folded;
357
+ }
358
+ /**
359
+ * Which volatile rule fires on a piece of a line, with its dates blanked out
360
+ * (a date is not a value). `raw` and `folded` are the same piece; folding is
361
+ * length-preserving for Latin text, so a date found in one is blanked in both.
362
+ */
363
+ function valueIn(raw, folded) {
364
+ let r0 = raw, f0 = folded;
365
+ if (r0.length === f0.length) {
366
+ for (const m of folded.matchAll(DATE_ALL)) {
367
+ const a = m.index ?? 0, b = a + m[0].length, gap = ' '.repeat(b - a);
368
+ r0 = r0.slice(0, a) + gap + r0.slice(b);
369
+ f0 = f0.slice(0, a) + gap + f0.slice(b);
370
+ }
371
+ }
372
+ else {
373
+ r0 = f0 = folded.replace(DATE_ALL, ' ');
374
+ }
375
+ for (const r of RULES)
376
+ if (r.test(r0, f0))
377
+ return r.reason;
378
+ return undefined;
379
+ }
165
380
  /**
166
- * The class an unmarked fact gets from its text: volatile when a rule fires
167
- * (and which one), normal otherwise.
381
+ * True when the text reads as a dated record of something done (see the
382
+ * rule above). Exported for the tests and the design doc's examples.
383
+ */
384
+ function isDatedRecord(text) {
385
+ return recordVerdict(text).record;
386
+ }
387
+ /** Quoted titles say nothing about state: «… que siguen trabajando …» is a headline. Blanked, length kept. */
388
+ const QUOTED = /«[^»\n]*»|"[^"\n]*"|“[^”\n]*”/g;
389
+ /** Nor does an aside in parentheses: "publicado en npm (no es repo git)" is a record with a remark. */
390
+ const ASIDE = /\([^()\n]*\)/g;
391
+ const blankAsides = (s) => s.replace(QUOTED, m => ' '.repeat(m.length)).replace(ASIDE, m => ' '.repeat(m.length));
392
+ /**
393
+ * The same decision with the rule that made it, for the tests and for
394
+ * diagnosing a real brain: 'record', or the first rule that said no.
395
+ */
396
+ function recordVerdict(text) {
397
+ const no = (why) => ({ record: false, why });
398
+ const raw = String(text || '');
399
+ if (!raw.trim())
400
+ return no('empty');
401
+ const folded = fold(raw);
402
+ const head = headOf(folded);
403
+ if (!DATE_RE.test(head))
404
+ return no('no-date');
405
+ const strict = DONE.exec(head);
406
+ const done = strict ?? STATIVE.exec(head);
407
+ if (!done)
408
+ return no('no-done');
409
+ if (OPENS_PERIOD.test(head))
410
+ return no('opens-period');
411
+ if (FUTURE.test(head))
412
+ return no('future');
413
+ if (PRESENT.test(head))
414
+ return no('present');
415
+ if (STATE_VERB.test(head.slice(0, done.index)))
416
+ return no('state-before');
417
+ // Rule 4: only a head that carries a changeable value can state it as current.
418
+ const rawHead = raw.length === folded.length ? raw.slice(0, head.length) : head;
419
+ if (!valueIn(rawHead, head))
420
+ return { record: true, why: 'record' };
421
+ if (!strict)
422
+ return no(`stative-with-value:${done[0]}`);
423
+ const plain = blankAsides(head);
424
+ const after = STATE_AFTER.exec(plain);
425
+ if (after)
426
+ return no(`state-after:${after[0]}`);
427
+ if (RECURRING.test(plain))
428
+ return no('recurring');
429
+ const word = done[0];
430
+ if (CHECK.test(word)) {
431
+ const before = valueIn(rawHead.slice(0, done.index), head.slice(0, done.index));
432
+ // A bare domain before a check is usually the site being checked, not the value.
433
+ if (before && before !== 'host')
434
+ return no('check-of-value');
435
+ }
436
+ if (MOVE.test(word)) {
437
+ const end = done.index + word.length;
438
+ const to = TO_PLACE.exec(head.slice(end));
439
+ if (to) {
440
+ const start = head.length - to[1].length;
441
+ // The destination is the few words after the preposition, not the rest of the line.
442
+ const object = /^\S+(?:\s+\S+){0,2}/.exec(to[1])?.[0] ?? '';
443
+ const where = valueIn(rawHead.slice(start, start + object.length), object);
444
+ if (where === 'port' || where === 'host' || where === 'url' || where === 'path')
445
+ return no('move-to-place');
446
+ }
447
+ }
448
+ return { record: true, why: 'record' };
449
+ }
450
+ /**
451
+ * The class an unmarked fact gets from its text: permanent when it is a dated
452
+ * record of something done (2.9.1), else volatile when a rule fires (and
453
+ * which one), normal otherwise.
168
454
  */
169
455
  function detectShelf(text) {
170
456
  const raw = String(text || '');
171
457
  if (!raw.trim())
172
458
  return { shelf: 'normal' };
459
+ if (isDatedRecord(raw))
460
+ return { shelf: 'permanent', reason: 'history' };
173
461
  const t = fold(raw);
174
462
  for (const r of RULES) {
175
463
  if (r.test(raw, t))
@@ -179,10 +467,23 @@ function detectShelf(text) {
179
467
  return { shelf: 'volatile', reason: 'role' };
180
468
  return { shelf: 'normal' };
181
469
  }
182
- /** The class that applies to a fact: its explicit shelf_life, or the one its text implies. */
470
+ /**
471
+ * The class that applies to a fact: its explicit shelf_life; else permanent
472
+ * when the miner imported it (2.9.1: an imported note is a copy of something
473
+ * written elsewhere, at some other time, and was never a claim this memory
474
+ * made about the present — warning on it is noise); else the one its text
475
+ * implies.
476
+ *
477
+ * Once a session has said the same line too, it is no longer only an
478
+ * imported note: the duplicate branch of learn keeps `source: "miner"` but
479
+ * sets `verified` or adds a confirmation, and from then on the line is judged
480
+ * by its text like any other claim about the present.
481
+ */
183
482
  function shelfOfFact(f) {
184
483
  if (isShelfLife(f.shelf_life))
185
484
  return { shelf: f.shelf_life, inferred: false };
485
+ if (f.source === 'miner' && !f.verified && (f.confirmations ?? 1) <= 1)
486
+ return { shelf: 'permanent', inferred: true, reason: 'miner' };
186
487
  const d = detectShelf(f.text);
187
488
  return { shelf: d.shelf, inferred: true, ...(d.reason ? { reason: d.reason } : {}) };
188
489
  }
@@ -203,10 +504,42 @@ function shelfOfKind(kind) {
203
504
  return null;
204
505
  }
205
506
  }
206
- function stalenessContext(since, env = process.env, nowMs = Date.now()) {
507
+ /**
508
+ * How long after `created` a stamp may come and still belong to a brain born
509
+ * stamped: initialize() writes both in the same call, an upgrade writes the
510
+ * stamp at the first boot of a new version, days or months later.
511
+ */
512
+ const LEGACY_MARGIN_MS = 60_000;
513
+ /**
514
+ * Whether a brain predates shelf life, from its manifest: not stamped yet, a
515
+ * creation date that cannot be read, or a stamp later than its creation by
516
+ * more than LEGACY_MARGIN_MS.
517
+ */
518
+ function isLegacyBrain(created, since) {
519
+ const s = parseMs(since ?? undefined);
520
+ if (s === null)
521
+ return true;
522
+ const c = parseMs(created ?? undefined);
523
+ if (c === null)
524
+ return true;
525
+ return s - c > LEGACY_MARGIN_MS;
526
+ }
527
+ /**
528
+ * `created` is the manifest's: pass it (see stalenessContextOf) and the
529
+ * context knows whether the brain is legacy. Left out, it is not legacy —
530
+ * the 2.9.0 behaviour, where a volatile fact never got the grace.
531
+ */
532
+ function stalenessContext(since, env = process.env, nowMs = Date.now(), created) {
207
533
  if (!stalenessEnabled(env))
208
534
  return null;
209
- return { nowMs, windows: shelfWindows(env), ...(since ? { since } : {}) };
535
+ const legacy = created !== undefined && isLegacyBrain(created, since);
536
+ return { nowMs, windows: shelfWindows(env), ...(since ? { since } : {}), ...(legacy ? { legacy: true } : {}) };
537
+ }
538
+ /** The context for a brain, from its manifest (or none, when it could not be read: no legacy, full grace). */
539
+ function stalenessContextOf(manifest, env = process.env, nowMs = Date.now()) {
540
+ if (!manifest)
541
+ return stalenessContext(undefined, env, nowMs);
542
+ return stalenessContext(manifest.staleness_since, env, nowMs, manifest.created ?? null);
210
543
  }
211
544
  const parseMs = (iso) => {
212
545
  if (!iso || typeof iso !== 'string')
@@ -294,10 +627,14 @@ function factStaleness(f, ctx) {
294
627
  // the recorded date, never from a day that has not come.
295
628
  const verified = plausibleCheck(f.verified, ctx.nowMs);
296
629
  const clock = verified ?? f.added;
297
- // Legacy grace: never re-checked, nobody chose its class, not volatile.
298
- // Volatile facts get none: a port saved months ago deserves the warning on
299
- // the first recall that serves it — that is the case this exists for.
300
- const graceable = !verified && s.inferred && s.shelf !== 'volatile';
630
+ // Legacy grace: never re-checked, nobody chose its class. A volatile fact
631
+ // gets it only in a brain that predates shelf life (2.9.1): there the
632
+ // detector's volatile lines are hundreds, written before anyone could mark
633
+ // them, and flagging them all on upgrade day buries the few that matter. A
634
+ // fact marked volatile by hand gets none (not inferred), and in a brain
635
+ // born with shelf life neither does an inferred one: a port saved months
636
+ // ago deserves the warning on the first recall that serves it.
637
+ const graceable = !verified && s.inferred && (s.shelf !== 'volatile' || ctx.legacy === true);
301
638
  return judge(s.shelf, s.inferred, s.reason, clock, graceable, ctx, (0, ops_js_1.entryId)(f.text));
302
639
  }
303
640
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"shelf.js","sourceRoot":"","sources":["../../src/engine/shelf.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shelf.js","sourceRoot":"","sources":["../../src/engine/shelf.ts"],"names":[],"mappings":"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"}
@@ -917,12 +917,12 @@ class SearchEngine {
917
917
  // read for every candidate, so it costs one lookup per row and nothing in
918
918
  // the index. The ranking below does not look at it: the server partitions
919
919
  // the rows AFTER they are chosen. Off with CRBRO_STALENESS=0.
920
- let since;
920
+ let manifiesto;
921
921
  try {
922
- since = (await this.brain.getManifest()).staleness_since;
922
+ manifiesto = await this.brain.getManifest();
923
923
  }
924
924
  catch { /* no manifest yet: full grace */ }
925
- const vida = (0, shelf_js_1.stalenessContext)(since);
925
+ const vida = (0, shelf_js_1.stalenessContextOf)(manifiesto);
926
926
  // Provenance (2.7) needs two small files — which space a neuron is shared
927
927
  // in, and who "me" is — but only when a result is a teammate's. Read at
928
928
  // most once per call, and never on a brain nobody shares with.