diff --git a/README.md b/README.md index ba02015..b0f2441 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,12 @@ # Comic Sol +[![Tests](https://github.com/wenn-id/comicsol/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/wenn-id/comicsol/actions/workflows/tests.yml) +[![Release](https://img.shields.io/github/v/release/wenn-id/comicsol?include_prereleases&label=release)](https://github.com/wenn-id/comicsol/releases) +[![License](https://img.shields.io/github/license/wenn-id/comicsol)](LICENSE) +[![Python](https://img.shields.io/badge/Python-3.11-3776AB?logo=python&logoColor=white)](https://www.python.org/) +[![MCP tools](https://img.shields.io/badge/MCP_tools-17-brightgreen)](#mcp-server-optional) +[![Platforms](https://img.shields.io/badge/platforms-Linux%20%7C%20macOS%20%7C%20Windows-blue)](docs/install.md) + Comic Sol is an installable Codex Skill and portable Python CLI that turns a short prompt, pasted story, or `.txt`/`.md` file into an original manga/anime comic. One natural-language invocation drives planning, character consistency, image generation, visual QA, diff --git a/tests/test_validation.py b/tests/test_validation.py index d66f9f0..617ef6d 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -961,6 +961,37 @@ def test_public_surface_uses_the_canonical_independent_repository(self): for name in ("CONTRIBUTING.md", "SECURITY.md"): self.assertTrue((ROOT / name).is_file(), name) + def test_readme_badges_report_live_project_contracts(self): + readme = self.readme() + preamble, separator, _ = readme.partition("Comic Sol is an installable") + self.assertTrue(separator, "README product introduction is missing") + badges = set(re.findall(r"\[!\[([^]]+)\]\(([^)]+)\)\]\(([^)]+)\)", preamble)) + expected = { + ( + "Tests", + "https://github.com/wenn-id/comicsol/actions/workflows/tests.yml/badge.svg?branch=main", + "https://github.com/wenn-id/comicsol/actions/workflows/tests.yml", + ), + ( + "Release", + "https://img.shields.io/github/v/release/wenn-id/comicsol?include_prereleases&label=release", + "https://github.com/wenn-id/comicsol/releases", + ), + ("License", "https://img.shields.io/github/license/wenn-id/comicsol", "LICENSE"), + ( + "Python", + "https://img.shields.io/badge/Python-3.11-3776AB?logo=python&logoColor=white", + "https://www.python.org/", + ), + ("MCP tools", "https://img.shields.io/badge/MCP_tools-17-brightgreen", "#mcp-server-optional"), + ( + "Platforms", + "https://img.shields.io/badge/platforms-Linux%20%7C%20macOS%20%7C%20Windows-blue", + "docs/install.md", + ), + } + self.assertEqual(expected, badges) + def test_package_files_install_and_artifact_contract_are_documented(self): for name in ("LICENSE", "README.md", "SKILL.md"): self.assertTrue((ROOT / name).is_file(), name)