diff options
Diffstat (limited to 'modules/test/test-predictor-accuracy.js')
| -rw-r--r-- | modules/test/test-predictor-accuracy.js | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/modules/test/test-predictor-accuracy.js b/modules/test/test-predictor-accuracy.js index 3688b03..74f0fcc 100644 --- a/modules/test/test-predictor-accuracy.js +++ b/modules/test/test-predictor-accuracy.js @@ -247,5 +247,38 @@ function ok(name, cond, detail) { ok('S3 pending consumed', p._pending.length === 0); } +// T. v1 payload carrying an aborted garbage point must not train similarity (2026-10-27) +{ + const { p, term, out } = mk(); + const feats = p._extractFeatures('read the logs'); + term.fs.fsWriteJSON('/system/metrics/predictor.json', { + dataPoints: [{ features: feats, observedDuration: 0.079, observedTurns: 1 }, + { features: feats, observedDuration: 30, observedTurns: 3 }], + predictions: 2 + }); + p._loadFromVFS(); + ok('T1 legacy aborted point dropped on load', p._dataPoints.length === 1, 'n=' + p._dataPoints.length); + const similar = p._findSimilar(p._extractFeatures('read the logs')); + ok('T2 similarity ignores the aborted point', + similar.length === 1 && similar[0].observedDuration === 30, + JSON.stringify(similar.map(s => s.observedDuration))); + out.length = 0; p.showStatus(); + const line = out.find(l => l.includes('Actual executions')) || ''; + ok('T3 status counts only usable executions', /Actual executions:\s*1\s*$/.test(line.trim()), line.trim()); +} + +// U. a lone aborted point cannot floor the next prediction +{ + const { p, term } = mk(); + term.fs.fsWriteJSON('/system/metrics/predictor.json', { + dataPoints: [{ features: { hasRead: true }, observedDuration: 0.079, observedTurns: 1 }], + predictions: 1 + }); + p._loadFromVFS(); + const pred = p.notePrediction('read the logs', 'test'); + ok('U1 prediction is not floored by a lone aborted point', pred && pred.floored === false, + JSON.stringify(pred && { duration: pred.duration, floored: pred.floored })); +} + console.log(passes + '/' + (passes + fails) + ' PASS'); process.exit(fails ? 1 : 0); |