397777089e
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
31 lines
1.4 KiB
JavaScript
31 lines
1.4 KiB
JavaScript
import { describe, it, expect } from 'vitest';
|
|
import { decide } from './enforce-todowrite-skill-verifier.mjs';
|
|
|
|
describe('enforce-todowrite-skill-verifier decide() (журнал-факт, session-scope)', () => {
|
|
it('allows when completed mention is in journal skill calls', () => {
|
|
const todoItems = [{ content: 'invoke superpowers:brainstorming', status: 'completed' }];
|
|
expect(decide({ todoItems, journalSkillCalls: ['superpowers:brainstorming'] }).block).toBe(false);
|
|
});
|
|
|
|
it('blocks when completed mention NOT in journal skill calls', () => {
|
|
const todoItems = [{ content: 'invoke superpowers:brainstorming', status: 'completed' }];
|
|
const r = decide({ todoItems, journalSkillCalls: [] });
|
|
expect(r.block).toBe(true);
|
|
expect(r.reason).toMatch(/v4\.1 TodoWrite hard sync/);
|
|
});
|
|
|
|
it('allows when mention is pending (not completed)', () => {
|
|
const todoItems = [{ content: 'invoke superpowers:brainstorming', status: 'pending' }];
|
|
expect(decide({ todoItems, journalSkillCalls: [] }).block).toBe(false);
|
|
});
|
|
|
|
it('allows when todoItems is empty', () => {
|
|
expect(decide({ todoItems: [], journalSkillCalls: [] }).block).toBe(false);
|
|
});
|
|
|
|
it('matches journal name across namespace (bare mention vs prefixed journal)', () => {
|
|
const todoItems = [{ content: 'invoke brainstorming', status: 'completed' }];
|
|
expect(decide({ todoItems, journalSkillCalls: ['superpowers:brainstorming'] }).block).toBe(false);
|
|
});
|
|
});
|