397777089e
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
49 lines
2.4 KiB
JavaScript
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);
|
|
});
|
|
});
|