Files
brain/tools/enforce-skill-journaler.test.mjs
T

49 lines
2.4 KiB
JavaScript

import { describe, it, expect } from 'vitest';
import { shouldJournalSkill, extractSkillCalls } from './enforce-skill-journaler.mjs';
import { skillTakenByJournal } from './judge-gate-floor.mjs';
const entry = (op, object) => ({ seq: 1, ts: 0, payload: { op, object } });
describe('shouldJournalSkill — дедуп vs wall pre-write (M7 Фаза 3, SE-K)', () => {
it('новый seed-навык (хвост ≠ этот Skill) → true', () => {
expect(shouldJournalSkill('systematic-debugging', [entry('Bash', 'git status')])).toBe(true);
});
it('пустой журнал → true', () => {
expect(shouldJournalSkill('test-driven-development', [])).toBe(true);
});
it('хвост уже = этот Skill (wall pre-write) → false (дедуп)', () => {
expect(shouldJournalSkill('writing-plans', [entry('Skill', 'writing-plans')])).toBe(false);
});
it('хвост = другой Skill → true', () => {
expect(shouldJournalSkill('brainstorming', [entry('Skill', 'writing-plans')])).toBe(true);
});
it('пустое/не-строковое имя → false', () => {
expect(shouldJournalSkill('', [])).toBe(false);
expect(shouldJournalSkill(null, [])).toBe(false);
});
});
describe('extractSkillCalls — мост журнал → K2 (M7 Фаза 3)', () => {
it('возвращает object всех op:Skill записей по порядку', () => {
const entries = [entry('Bash', 'x'), entry('Skill', 'writing-plans'), entry('Edit', 'f'), entry('Skill', 'systematic-debugging')];
expect(extractSkillCalls(entries)).toEqual(['writing-plans', 'systematic-debugging']);
});
it('нет Skill-записей → []', () => {
expect(extractSkillCalls([entry('Bash', 'x')])).toEqual([]);
});
it('битые/без payload записи игнорируются', () => {
expect(extractSkillCalls([null, {}, { payload: null }, entry('Skill', 's')])).toEqual(['s']);
});
it('не-массив → []', () => {
expect(extractSkillCalls(null)).toEqual([]);
});
});
describe('end-to-end: зажурналенный навык виден K2 (M7 Фаза 3 acceptance)', () => {
it('extractSkillCalls журнала → skillTakenByJournal.ok', () => {
const entries = [entry('Skill', 'systematic-debugging')];
const calls = extractSkillCalls(entries);
expect(skillTakenByJournal({ requiredSkills: ['systematic-debugging'], journalSkillCalls: calls }).ok).toBe(true);
});
});