feat: add first-party skills, ponytail lock, and full lint suite
Some checks failed
🧪 Test / 🧪 Lock + lint (push) Has been cancelled
Some checks failed
🧪 Test / 🧪 Lock + lint (push) Has been cancelled
- add ponytail skill set to skills-lock.json (14 locked skills total) - add first-party medusa skill under skills/, layered on install - make test now runs ruff, shellcheck, and markdownlint-cli2 - CI installs the lint tools before make test in both workflows - MIT license, funding buttons, thanks and donation sections in README - .markdownlint-cli2.jsonc config; ignore lint caches in .gitignore
This commit is contained in:
@@ -50,6 +50,26 @@ class TestSkillsLock(unittest.TestCase):
|
||||
f"skills must be sorted ascending; expected {sorted(names)}",
|
||||
)
|
||||
|
||||
def test_first_party_skills_have_valid_frontmatter(self):
|
||||
for skill_md in sorted((REPO_ROOT / "skills").glob("*/SKILL.md")):
|
||||
with self.subTest(skill=skill_md.parent.name):
|
||||
text = skill_md.read_text(encoding="utf-8")
|
||||
self.assertTrue(text.startswith("---\n"), "missing frontmatter")
|
||||
frontmatter = text.split("---", 2)[1]
|
||||
self.assertIn("name:", frontmatter, "frontmatter missing name")
|
||||
self.assertIn(
|
||||
"description:", frontmatter, "frontmatter missing description"
|
||||
)
|
||||
|
||||
def test_first_party_skills_do_not_shadow_locked_skills(self):
|
||||
locked = set(self.lock["skills"].keys())
|
||||
for skill_dir in sorted((REPO_ROOT / "skills").glob("*/")):
|
||||
self.assertNotIn(
|
||||
skill_dir.name.rstrip("/"),
|
||||
locked,
|
||||
f"first-party skill '{skill_dir.name}' collides with a locked skill",
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user