Files
CraftKit/migration/tests/test_knowledge_batch.py
T

60 lines
2.4 KiB
Python

"""验证知识管理批次的职责边界、中性模板和模式路由。"""
from __future__ import annotations
import unittest
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
KNOWLEDGE = ROOT / "plugins/knowledge/skills"
class KnowledgeBatchTests(unittest.TestCase):
"""检查四个 Skill 不重叠,并保持项目知识目录一致。"""
def read(self, relative: str) -> str:
"""读取待验证的 Skill 资源。"""
return (KNOWLEDGE / relative).read_text(encoding="utf-8")
def test_trace_is_evidence_based_and_does_not_auto_write(self) -> None:
"""偏离复盘应使用中性失效分类,不能自动修改规则。"""
text = self.read("trace/SKILL.md")
for value in ("missing", "unread", "mismatch", "misapplied", "insufficient", "尚未执行"):
self.assertIn(value, text)
self.assertNotIn("七问", text)
def test_distill_routes_long_term_knowledge_and_excludes_handoff(self) -> None:
"""知识提炼和任务交接必须具有不同产物边界。"""
text = self.read("distill/SKILL.md")
routing = self.read("distill/references/routing.md")
self.assertIn("不生成接续提示词", text)
for path in (".craftkit/knowledge/pitfalls/", ".craftkit/knowledge/decisions/", ".craftkit/standards/"):
self.assertIn(path, routing)
def test_lessons_merges_full_lifecycle_without_fixed_categories(self) -> None:
"""经验初始化、维护、审计和提升应共享一个目录与中性模板。"""
text = self.read("lessons/SKILL.md")
for mode in ("`init`", "`curate`", "`audit`", "`promote`"):
self.assertIn(mode, text)
self.assertIn(".craftkit/knowledge/pitfalls/", text)
index = self.read("lessons/assets/index.md")
self.assertIn("当前尚未建立分类", index)
self.assertNotIn("lowcode", index.casefold())
def test_worklog_requires_git_evidence_and_separate_write_permission(self) -> None:
"""工作日志不能推测工作量或自动写入日报文件。"""
text = self.read("worklog/SKILL.md")
self.assertIn("不把提交数量当作工作量", text)
self.assertIn("范围内确实没有提交时如实说明", text)
self.assertIn("需要新的明确授权", text)
if __name__ == "__main__":
unittest.main()