rpa-bot-handoff: one 54-line SKILL.md, no reference or template files
The skill is now one SKILL.md (54 lines) with the SOP shape inline, plus templates/to_docx.py for the Word and PDF. Removed: the template, the MEK reference example and the skill README. The converter's selfcheck uses a built-in sample. Tests now check the skill is that one short file, has the 6 don't-miss checks, and its SOP shape has the 5 sections and To/CC lines. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
36e621b153
commit
b35796e1a5
8 files changed
+89
-247
No files matched your search
+15
-17
@@ -45,29 +45,27 @@ def test_ai_skill_references_files_that_exist():
|
||||
assert not missing
|
||||
|
||||
|
||||
def test_handoff_skill_references_files_that_exist():
|
||||
skill = ROOT / "skills" / "rpa-bot-handoff"
|
||||
paths = re.findall(r"`(templates/[\w./-]+)`", (skill / "SKILL.md").read_text(encoding="utf-8"))
|
||||
assert len(paths) >= 3
|
||||
assert not [p for p in paths if not (skill / p).exists()]
|
||||
def handoff_skill():
|
||||
return (ROOT / "skills" / "rpa-bot-handoff" / "SKILL.md").read_text(encoding="utf-8")
|
||||
|
||||
|
||||
def test_handoff_skill_stays_short():
|
||||
skill = (ROOT / "skills" / "rpa-bot-handoff" / "SKILL.md").read_text(encoding="utf-8")
|
||||
assert len(skill.split()) <= 500, len(skill.split())
|
||||
assert len(re.findall(r"^\d+\. ", skill.split("## Don't miss")[1], re.MULTILINE)) == 6
|
||||
def test_handoff_skill_is_one_short_file_plus_the_converter():
|
||||
files = sorted(p.relative_to(ROOT / "skills" / "rpa-bot-handoff").as_posix()
|
||||
for p in (ROOT / "skills" / "rpa-bot-handoff").rglob("*") if p.is_file())
|
||||
assert files == ["SKILL.md", "templates/to_docx.py"], files
|
||||
assert len(handoff_skill().splitlines()) <= 60
|
||||
assert "templates/to_docx.py" in handoff_skill()
|
||||
|
||||
|
||||
def test_handoff_sop_has_five_sections_in_order():
|
||||
sop = (ROOT / "skills" / "rpa-bot-handoff" / "templates" / "HANDOVER-SOP.md").read_text(encoding="utf-8")
|
||||
assert re.search(r"^# \{\{PROJECT_NAME\}\} Handover SOP$", sop, re.MULTILINE)
|
||||
assert [int(n) for n in re.findall(r"^## (\d+)\.", sop, re.MULTILINE)] == list(range(1, 6))
|
||||
def test_handoff_skill_lists_six_dont_miss_checks():
|
||||
assert len(re.findall(r"^\d+\. ", handoff_skill().split("Don't miss")[1], re.MULTILINE)) == 6
|
||||
|
||||
|
||||
def test_handoff_sop_emails_the_developer_with_the_manager_in_cc():
|
||||
sop = (ROOT / "skills" / "rpa-bot-handoff" / "templates" / "HANDOVER-SOP.md").read_text(encoding="utf-8")
|
||||
email = sop.split("## 5.")[1]
|
||||
assert "To: {{DEV_EMAIL}}" in email and "CC: {{MANAGER_EMAIL}}" in email
|
||||
def test_handoff_sop_shape_has_five_sections_and_to_cc():
|
||||
shape = handoff_skill().split("```markdown")[1].split("```")[0]
|
||||
assert "# <Project Name> Handover SOP" in shape
|
||||
assert [int(n) for n in re.findall(r"^## (\d+)\.", shape, re.MULTILINE)] == list(range(1, 6))
|
||||
assert "To: <developer>" in shape and "CC: <manager>" in shape
|
||||
|
||||
|
||||
def test_handoff_docx_selfcheck():
|
||||
|
||||
Reference in new issue
Block a user