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:
VasanthandClaude Opus 5.5 committed 2026-10-28 17:38:34 +05:30
1 parent 36e621b153
commit b35796e1a5
8 files changed
+89 -247

No files matched your search

+15 -17
View File
@@ -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():