feat(knowledge): 新增复盘提炼与经验维护 Skill
This commit is contained in:
@@ -99,11 +99,11 @@
|
||||
|
||||
所属插件:`knowledge`
|
||||
|
||||
1. `analyze-agent-failure`
|
||||
2. `distill-task`
|
||||
3. `maintain-lessons`
|
||||
4. `summarize-worklog`
|
||||
5. `init`
|
||||
1. `trace`(已完成)
|
||||
2. `distill`(已完成)
|
||||
3. `lessons`(已完成,合并初始化、维护、审计和提升)
|
||||
4. `worklog`(已完成)
|
||||
5. `init`(已完成)
|
||||
|
||||
来源中与经验初始化、提升和回扫相关的多个能力统一合并为 `maintain-lessons`,通过模式区分具体工作。
|
||||
|
||||
@@ -235,3 +235,4 @@ plan-change
|
||||
- [x] 完成首个同质批量:`md-to-docx`、`xlsx-to-md`、`archive`。
|
||||
- [x] 完成 Git 本地操作批次:`identity`、`export`。
|
||||
- [x] 完成 Git 高风险隔离集成样本:`integrate`。
|
||||
- [x] 完成知识管理批次:`trace`、`distill`、`lessons`、`worklog`。
|
||||
|
||||
@@ -278,27 +278,44 @@
|
||||
"source-b:905e74ea51281da1": {
|
||||
"sourcePathHash": "905e74ea51281da179c1eb31677af71569a95139a74fb139d39dadd52db2ce62",
|
||||
"sourceSha256": "cfc1eb3fafb15dc51b730dd36d3ad507b5ae415d5f1a5da5138471170afdde38",
|
||||
"status": "pending"
|
||||
"status": "migrated",
|
||||
"target": "plugins/knowledge/skills/trace",
|
||||
"targetVersion": "0.1.0",
|
||||
"reviewedAt": "2026-08-25"
|
||||
},
|
||||
"source-b:274c4aac900a23c3": {
|
||||
"sourcePathHash": "274c4aac900a23c3ca0506807c4df8e09c95e21b84fd633951bae146f6c41028",
|
||||
"sourceSha256": "b4beacdc745cd06ee4be20694d60bae0c9c6122fb61b917b12b66451497651e9",
|
||||
"status": "pending"
|
||||
"status": "migrated",
|
||||
"target": "plugins/knowledge/skills/lessons",
|
||||
"targetVersion": "0.1.0",
|
||||
"reviewedAt": "2026-08-25"
|
||||
},
|
||||
"source-b:6e1a4d182b2e41fd": {
|
||||
"sourcePathHash": "6e1a4d182b2e41fddd28051c20d7170821a87b518e49684cc4f12b731789831d",
|
||||
"sourceSha256": "cf106df97100aabf260db7c8d45c2d6d499c643b4898d7e46c98852a90b7134d",
|
||||
"status": "pending"
|
||||
"status": "superseded",
|
||||
"target": "plugins/knowledge/skills/lessons",
|
||||
"targetVersion": "0.1.0",
|
||||
"reason": "经验提升能力已合并到 lessons 的 promote 模式",
|
||||
"reviewedAt": "2026-08-25"
|
||||
},
|
||||
"source-b:cd4c15d66d5cfba0": {
|
||||
"sourcePathHash": "cd4c15d66d5cfba0c568b6f3ac4ceac9a7cea797eca8c6bf5eab81187e70f7d7",
|
||||
"sourceSha256": "a9b109dc659e8e65645b6507ab2a39a04598d0c0ed63feaef0985765d3ff9f3f",
|
||||
"status": "pending"
|
||||
"status": "superseded",
|
||||
"target": "plugins/knowledge/skills/lessons",
|
||||
"targetVersion": "0.1.0",
|
||||
"reason": "经验回扫能力已合并到 lessons 的 audit 模式",
|
||||
"reviewedAt": "2026-08-25"
|
||||
},
|
||||
"source-b:a6062c4036828615": {
|
||||
"sourcePathHash": "a6062c4036828615945db311cf68c2ac886feef91c79b53d882bbe41fd71143f",
|
||||
"sourceSha256": "94b7e58d4c4903498cf29365fe466aaba8bfdf4675754f65cd30bad37c99e02f",
|
||||
"status": "pending"
|
||||
"status": "migrated",
|
||||
"target": "plugins/knowledge/skills/distill",
|
||||
"targetVersion": "0.1.0",
|
||||
"reviewedAt": "2026-08-25"
|
||||
},
|
||||
"source-b:f58c6cd52bc983e8": {
|
||||
"sourcePathHash": "f58c6cd52bc983e87d265308ade0da8d89bd74d5d4f1e96fc463ef299a9fe94a",
|
||||
@@ -331,7 +348,10 @@
|
||||
"source-b:aa42f7c1a045bb49": {
|
||||
"sourcePathHash": "aa42f7c1a045bb496bbc9e62beb7a7b74544153ed9551492f5b801ca4c9df098",
|
||||
"sourceSha256": "aff6fad01afa2a15756a36d210c67b229a1eb2155981292450f0487c3005125d",
|
||||
"status": "pending"
|
||||
"status": "migrated",
|
||||
"target": "plugins/knowledge/skills/worklog",
|
||||
"targetVersion": "0.1.0",
|
||||
"reviewedAt": "2026-08-25"
|
||||
},
|
||||
"source-b:3763e17cff825df6": {
|
||||
"sourcePathHash": "3763e17cff825df6920f57d84736093082014f2a0316d9e84ee18ac8078ff6e5",
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
"""验证知识管理批次的职责边界、中性模板和模式路由。"""
|
||||
|
||||
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()
|
||||
Reference in New Issue
Block a user