Files
brain/tools/m3e-learning-invariants.test.mjs
T

23 lines
1.1 KiB
JavaScript

import { describe, it, expect } from 'vitest';
import { enqueue, applyApprovalBatch, pendingCount } from './router-learning-queue.mjs';
import { proposeProbe } from './router-exploration.mjs';
const cand = (id) => ({ id, kind: 'lesson', summary: `s-${id}`, why_proposed: `w-${id}` });
describe('Машина 3-E — несущие инварианты hard-rule', () => {
it('БЕЗ явного «да» владельца НИЧЕГО не входит в фонд (no auto-fill)', () => {
let q = [];
for (let i = 0; i < 10; i++) q = enqueue(q, cand(`c${i}`));
const r = applyApprovalBatch(q, {});
expect(r.fund).toEqual([]);
expect(pendingCount(r.queue)).toBe(10);
});
it('разведка по умолчанию НЕ инициирует пробу (rate=0)', () => {
expect(proposeProbe({ rate: 0, candidates: [{ id: '#x' }] })).toBe(null);
});
it('проба, даже включённая, требует одобрения владельца (никогда авто)', () => {
const p = proposeProbe({ rate: 0.5, candidates: [{ id: '#x' }], usageCounts: {} });
expect(p.requiresOwnerApproval).toBe(true);
});
});