From a31cdb8f9186f3603583b5e3433d8f1cbf688e6a Mon Sep 17 00:00:00 2001 From: Agando Date: Fri, 23 Oct 2026 21:24:04 +0200 Subject: fix(newos4): the audit stops inventing '999d unused' (v4.6.85) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit getStaleSkills() returned daysUnused=999 for a skill that had useCount 0 and no lastUsed — a placeholder rendered by the audit as '999d unused', indistinguishable from a measurement. It told the operator to archive procedural memory that had simply never been instrumented. Now: daysUnused null + neverUsed true when there is no lastUsed; real day count otherwise; the audit prints '(never used)'. Verified: probe skill with no telemetry -> {daysUnused: null, neverUsed: true}; one last used 2026-08-01 -> 83; no 999 anywhere in getStaleSkills() or the audit output. --- modules/core/core-bundle.js | 7 +++++-- modules/core/module-loader.js | 2 +- modules/core/module-memory-graph.js | 7 +++++-- 3 files changed, 11 insertions(+), 5 deletions(-) (limited to 'modules/core') diff --git a/modules/core/core-bundle.js b/modules/core/core-bundle.js index 0b2795a..c8a4c2e 100644 --- a/modules/core/core-bundle.js +++ b/modules/core/core-bundle.js @@ -17912,8 +17912,11 @@ class MemoryGraphModule { var useCount = stats.useCount || 0; var lastUsed = stats.lastUsed ? new Date(stats.lastUsed).getTime() : 0; if (useCount === 0 && (now - lastUsed > staleThreshold || lastUsed === 0)) { - var daysUnused = lastUsed > 0 ? Math.floor((now - lastUsed) / 86400000) : 999; - stale.push({ name: name, daysUnused: daysUnused }); + // v4.6.85: never fabricate a measurement. A skill with useCount 0 and no + // lastUsed has NEVER been used — reporting it as "999d unused" invented a + // number that then appeared in the audit as if it had been observed. + var daysUnused = lastUsed > 0 ? Math.floor((now - lastUsed) / 86400000) : null; + stale.push({ name: name, daysUnused: daysUnused, neverUsed: lastUsed === 0 }); } } this._untrackedSkills = untracked; diff --git a/modules/core/module-loader.js b/modules/core/module-loader.js index 9a373a6..1b0f6d9 100644 --- a/modules/core/module-loader.js +++ b/modules/core/module-loader.js @@ -4,7 +4,7 @@ // Core module bundle loaded synchronously in main.html. // This loader only handles version cache-busting, splash, terminal init, and optional ext modules. - const LATEST_VER = 'v4.6.84'; + const LATEST_VER = 'v4.6.85'; const CACHE = '?v=' + LATEST_VER; const stored = localStorage.getItem('webx11_cache_ver'); if (stored !== LATEST_VER) { diff --git a/modules/core/module-memory-graph.js b/modules/core/module-memory-graph.js index 093d2e4..1cb0919 100644 --- a/modules/core/module-memory-graph.js +++ b/modules/core/module-memory-graph.js @@ -482,8 +482,11 @@ class MemoryGraphModule { var useCount = stats.useCount || 0; var lastUsed = stats.lastUsed ? new Date(stats.lastUsed).getTime() : 0; if (useCount === 0 && (now - lastUsed > staleThreshold || lastUsed === 0)) { - var daysUnused = lastUsed > 0 ? Math.floor((now - lastUsed) / 86400000) : 999; - stale.push({ name: name, daysUnused: daysUnused }); + // v4.6.85: never fabricate a measurement. A skill with useCount 0 and no + // lastUsed has NEVER been used — reporting it as "999d unused" invented a + // number that then appeared in the audit as if it had been observed. + var daysUnused = lastUsed > 0 ? Math.floor((now - lastUsed) / 86400000) : null; + stale.push({ name: name, daysUnused: daysUnused, neverUsed: lastUsed === 0 }); } } this._untrackedSkills = untracked; -- cgit v1.2.3