Files
code4history/tests/test_synthesis_prose.py
2026-10-18 16:21:54 +08:00

46 lines
2.4 KiB
Python

"""Ensure cross-evidence synthesis remains reachable, without fake mandatory evidence quotas."""
from pathlib import Path
from tempfile import TemporaryDirectory
import shutil
import sys
import unittest
ROOT=Path(__file__).resolve().parents[1]
SKILL=ROOT/'.agents/skills/history-writing-workflow-c4h'
sys.path.insert(0,str(ROOT/'tools'))
import new_item
import validate
class SynthesisProseTests(unittest.TestCase):
def test_protocol_linked_at_all_entrypoints(self):
self.assertTrue((ROOT/'SYNTHESIS_AND_PROSE.md').exists())
for f in ('AGENTS.md','README.md','code4history.md','INTERPRETATION.md','ARGUMENT_DENSITY.md'):
self.assertIn('SYNTHESIS_AND_PROSE.md',(ROOT/f).read_text(encoding='utf-8'),f)
self.assertIn('SYNTHESIS_AND_PROSE.md',(SKILL/'SKILL.md').read_text(encoding='utf-8'))
self.assertTrue((SKILL/'references/synthesis-logic-quotation.md').exists())
def test_synthesis_card_kind(self):
self.assertIn('synthesis',new_item.KINDS)
self.assertIn('SYN-', (ROOT/'10_templates/synthesis.md').read_text(encoding='utf-8').replace('__ID__','SYN-0001'))
self.assertIn('section-plan.md',(ROOT/'07_manuscript/readme.md').read_text(encoding='utf-8'))
def test_new_synthesis_card_structure(self):
with TemporaryDirectory() as td:
root=Path(td)
(root/'10_templates').mkdir()
shutil.copy(ROOT/'10_templates/synthesis.md',root/'10_templates/synthesis.md')
ident,p=new_item.create(root,'synthesis','cross-reference')
self.assertEqual(ident,'SYN-0001')
self.assertEqual(p.relative_to(root).as_posix(),'06_arguments/syntheses/SYN-0001-cross-reference.md')
self.assertEqual(validate.parse_header(p.read_text(encoding='utf-8')).get('id'),ident)
self.assertTrue(validate.ID_FORMAT.fullmatch(ident))
self.assertIn('06_arguments/syntheses',validate.CARD_DIRS)
def test_no_overwrite_of_user_data(self):
self.assertEqual((ROOT/'USERINFO.md').stat().st_size,0)
self.assertFalse((ROOT/'agent.md').exists())
self.assertIn('Q18',(ROOT/'topic.md').read_text(encoding='utf-8'))
def test_core_examples(self):
protocol=(ROOT/'SYNTHESIS_AND_PROSE.md').read_text(encoding='utf-8')
for key in ('独立互证','直接引文','逻辑关系','原文','转述','审查'):
self.assertIn(key,protocol)
if __name__=='__main__':unittest.main()