chore(migration): 完成剩余来源迁移状态同步
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
"""剩余来源连续迁移波次验收测试。"""
|
||||
|
||||
from pathlib import Path
|
||||
import json
|
||||
import unittest
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[2]
|
||||
DEV = ROOT / "plugins" / "dev" / "skills"
|
||||
DOC = ROOT / "plugins" / "doc" / "skills"
|
||||
GIT = ROOT / "plugins" / "git" / "skills"
|
||||
|
||||
TARGETS = {
|
||||
DEV: (
|
||||
"design-api", "design-db", "review-java", "review-frontend",
|
||||
"design-frontend-data", "review-mybatis", "design-workflow",
|
||||
"implement-backend", "implement-frontend", "review-code",
|
||||
"test-backend", "test-ui", "analyze-bugs", "upgrade", "estimate",
|
||||
),
|
||||
DOC: ("report", "message", "requirements"),
|
||||
GIT: ("release",),
|
||||
}
|
||||
|
||||
|
||||
class RemainingWaveTest(unittest.TestCase):
|
||||
"""验证目标完整性、操作边界和来源状态闭合。"""
|
||||
|
||||
def read_skill(self, root: Path, name: str) -> str:
|
||||
return (root / name / "SKILL.md").read_text(encoding="utf-8")
|
||||
|
||||
def test_all_targets_have_skill_and_ui_metadata(self) -> None:
|
||||
names = []
|
||||
for root, targets in TARGETS.items():
|
||||
for name in targets:
|
||||
names.append(name)
|
||||
self.assertTrue((root / name / "SKILL.md").is_file(), name)
|
||||
self.assertTrue((root / name / "agents" / "openai.yaml").is_file(), name)
|
||||
self.assertEqual(19, len(names))
|
||||
self.assertEqual(len(names), len(set(names)))
|
||||
|
||||
def test_implementation_preserves_workspace_and_authorization(self) -> None:
|
||||
content = "\n".join(
|
||||
self.read_skill(DEV, name)
|
||||
for name in ("implement-backend", "implement-frontend")
|
||||
)
|
||||
self.assertIn("保留用户已有改动", content)
|
||||
self.assertIn("精确版本", content)
|
||||
self.assertIn("不自动暂存", content)
|
||||
self.assertIn("环境配置", content)
|
||||
|
||||
def test_review_and_test_results_are_separated(self) -> None:
|
||||
review = self.read_skill(DEV, "review-code")
|
||||
backend = self.read_skill(DEV, "test-backend")
|
||||
ui = self.read_skill(DEV, "test-ui")
|
||||
self.assertIn("只读", review)
|
||||
self.assertIn("不启动完整应用", backend)
|
||||
self.assertIn("授权后", ui)
|
||||
self.assertIn("不能替代浏览器结果", ui)
|
||||
|
||||
def test_delivery_actions_are_independently_authorized(self) -> None:
|
||||
upgrade = self.read_skill(DEV, "upgrade")
|
||||
estimate = self.read_skill(DEV, "estimate")
|
||||
release = self.read_skill(GIT, "release")
|
||||
self.assertIn("源版本", upgrade)
|
||||
self.assertIn("目标版本", upgrade)
|
||||
self.assertIn("区间", estimate)
|
||||
self.assertIn("假设", estimate)
|
||||
self.assertIn("分阶段授权", release)
|
||||
|
||||
def test_writing_skills_do_not_send_or_invent(self) -> None:
|
||||
content = "\n".join(self.read_skill(DOC, name) for name in TARGETS[DOC])
|
||||
self.assertIn("不得虚构", content)
|
||||
self.assertIn("默认只生成草稿", content)
|
||||
|
||||
def test_source_lock_has_no_pending_items(self) -> None:
|
||||
data = json.loads((ROOT / "migration" / "source-lock.json").read_text(encoding="utf-8"))
|
||||
skills = data["skills"]
|
||||
self.assertEqual(64, len(skills))
|
||||
self.assertNotIn("pending", {item["status"] for item in skills.values()})
|
||||
self.assertEqual(
|
||||
{"migrated", "superseded", "excluded"},
|
||||
{item["status"] for item in skills.values()},
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user