67fecd7149
- secretary-reconcile.mjs: buildReconcilePrompt (весь протокол+обмен), parseReconcileResponse, reconcileGuard (ни одна старая строка не пропала), buildGuardRemark (обоснованный возврат), stampProvenance (turn+session по тексту), reconcileTurn (вызов->сторож->до 2 возвратов) - stop-хук: вместо applyExtraction вызывает reconcileTurn; мотор инъектируется - renderProtocol: зачёркивание во ВСЕХ разделах (закрытые вопросы видны ~~struck~~) - ретайр: applyExtraction/buildExtractionPrompt/parseExtractionResponse (secretary-extract удалён) - Слой 1, провенанс @session, флажок по сессии, оглавление — без изменений - спека + план reconcile в docs/superpowers 33 теста green (мотор замокан, без сети). Модель для prod — Sonnet. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
33 lines
1.3 KiB
JavaScript
33 lines
1.3 KiB
JavaScript
import { describe, it, expect } from 'vitest';
|
|
import { renderProtocol, EMPTY_PROTOCOL } from './secretary-protocol.mjs';
|
|
|
|
describe('EMPTY_PROTOCOL', () => {
|
|
it('пустой протокол со всеми разделами (вкл. history)', () => {
|
|
expect(EMPTY_PROTOCOL()).toEqual({ subject: '', decisions: [], will: [], open: [], doneNext: [], history: [] });
|
|
});
|
|
});
|
|
|
|
describe('renderProtocol', () => {
|
|
it('решение с провенансом [→N] и меткой сессии @ для навигации в raw', () => {
|
|
const md = renderProtocol({
|
|
subject: 'тема', history: [],
|
|
decisions: [{ text: 'A', why: 'w', turns: [7], session: '69992620-x' }],
|
|
will: [], open: [], doneNext: [],
|
|
});
|
|
expect(md).toContain('- A — w [→7] @69992620');
|
|
});
|
|
it('зачёркнутые пункты ВО ВСЕХ разделах показаны ~~...~~', () => {
|
|
const md = renderProtocol({
|
|
subject: '', history: [],
|
|
decisions: [{ text: 'D', struck: true }],
|
|
will: [{ text: 'W', struck: true }],
|
|
open: [{ text: 'Q', struck: true }],
|
|
doneNext: [{ text: 'N', struck: true, done: false }],
|
|
});
|
|
expect(md).toContain('~~D~~');
|
|
expect(md).toContain('~~W~~');
|
|
expect(md).toContain('~~Q~~');
|
|
expect(md).toContain('~~N~~');
|
|
});
|
|
});
|