blun-king-cli 9.1.578 → 9.1.580

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,20 @@
1
+ ## 9.1.580 - 2026-09-08
2
+
3
+ - Research collections reject impossible calendar dates and unparseable date-time
4
+ suffixes in optional historical source metadata before saving a new report.
5
+ - Recall skips legacy snapshots containing invalid source dates and reports a
6
+ diagnostic without rewriting or deleting them. Separate valid snapshots remain
7
+ searchable; valid date strings keep their original offset and precision.
8
+ - Includes the 9.1.579 research ordering and earlier Telegram repairs unchanged.
9
+ This release does not change model latency or incoming message addressing.
10
+
11
+ ## 9.1.579 - Research capture ordering
12
+
13
+ - Saved research passages with equal relevance are ordered by their actual UTC retrieval time, including mixed second and millisecond timestamp formats.
14
+ - Duplicate passages retain the newest capture's provenance. Equal instants retain the existing stable order; relevance still takes priority over time.
15
+ - Existing snapshots are not rewritten or called fresh. This is a local research-recall correction, not a search ranking, model latency or Telegram routing change.
16
+ - Includes the 9.1.578 Telegram reply repair and bounded thinking-only retry unchanged.
17
+
1
18
  ## 9.1.578 - 2026-09-08
2
19
 
3
20
  - Bound thinking-only recovery to one additional attempt per step. A second thinking-only timeout stops that step instead of repeatedly issuing the same request. The chosen reasoning effort and existing timeout remain unchanged; this is not a promise of faster first-token response times.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blun-king-cli",
3
- "version": "9.1.578",
3
+ "version": "9.1.580",
4
4
  "description": "BLUN CLI - your own AI agent with a Telegram channel. Get it done. With BLUN.",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -79,8 +79,12 @@ function normalizeReport(report) {
79
79
  passages++;
80
80
  return { startOffset: entry.startOffset, endOffset: entry.endOffset, text: entry.text, textSha256: entry.textSha256 };
81
81
  });
82
+ // Check the written calendar day, not the UTC day shifted by a time-zone offset.
82
83
  ensure(source.sourceDate === undefined || source.sourceDate === null
83
- || typeof source.sourceDate === 'string' && /^\d{4}-\d{2}-\d{2}(?:T[^\s]{1,40})?$/.test(source.sourceDate), 'report-source-date');
84
+ || typeof source.sourceDate === 'string' && /^\d{4}-\d{2}-\d{2}(?:T[^\s]{1,40})?$/.test(source.sourceDate)
85
+ && Number.isFinite(Date.parse(source.sourceDate))
86
+ && new Date(source.sourceDate.slice(0, 10) + 'T00:00:00Z').toISOString().slice(0, 10)
87
+ === source.sourceDate.slice(0, 10), 'report-source-date');
84
88
  return { id: source.id, url: source.url, retrievedAt: source.retrievedAt,
85
89
  sourceDate: source.sourceDate || null, contentSha256: source.contentSha256, status: source.status,
86
90
  totalChars: entries.length ? source.totalChars : null, passages: normalized };
@@ -209,7 +213,7 @@ function query({ home, project, query: question, limit = 5, maxChars = 8000, off
209
213
  output.diagnostics = [...new Set(output.diagnostics)];
210
214
  if (output.diagnostics.length) output.availability = 'partial';
211
215
  const seen = new Set();
212
- for (const match of found.sort((a, b) => b.rank - a.rank || b.retrievedAt.localeCompare(a.retrievedAt))) {
216
+ for (const match of found.sort((a, b) => b.rank - a.rank || Date.parse(b.retrievedAt) - Date.parse(a.retrievedAt))) {
213
217
  const key = revisionKey(match) + '\0' + match.textSha256;
214
218
  if (seen.has(key)) continue;
215
219
  seen.add(key);