Files
document-haness/tests/test_repository_contracts.py
T

70 lines
2.5 KiB
Python

from __future__ import annotations
import json
import unittest
from pathlib import Path
from claridoc.models import Brief
from claridoc.style_contracts import first_person_metrics, plain_form_ending_locations
from claridoc.utils import word_count
ROOT = Path(__file__).resolve().parents[1]
AUTHOR_SKILL = ROOT / ".agents" / "skills" / "technical-document-author"
class RepositoryContractTests(unittest.TestCase):
def test_technical_author_skill_is_complete(self) -> None:
required_files = (
AUTHOR_SKILL / "SKILL.md",
AUTHOR_SKILL / "references" / "logic-contract.md",
AUTHOR_SKILL / "references" / "review-rubric.md",
AUTHOR_SKILL / "agents" / "openai.yaml",
)
for path in required_files:
with self.subTest(path=path.relative_to(ROOT)):
self.assertTrue(path.is_file())
skill_text = (AUTHOR_SKILL / "SKILL.md").read_text(encoding="utf-8")
for required_term in (
"Brief",
"SourcePack",
"STRUCTURE_SPECS",
"revising-korean-technical-prose",
"quality-gate.json",
"provenance",
):
with self.subTest(required_term=required_term):
self.assertIn(required_term, skill_text)
normalized = " ".join(skill_text.casefold().split())
self.assertIn("do not claim completion", normalized)
self.assertIn("lint", normalized)
self.assertIn("independent review", normalized)
self.assertIn("quality-gate", normalized)
def test_repository_readme_satisfies_korean_experience_contract(self) -> None:
text = (ROOT / "README.md").read_text(encoding="utf-8")
metrics = first_person_metrics(text)
brief = Brief.from_dict(
json.loads(
(ROOT / "examples" / "briefs" / "claridoc-readme.json").read_text(
encoding="utf-8"
)
)
)
actual_words = word_count(text)
self.assertEqual(plain_form_ending_locations(text), [])
self.assertTrue(metrics["opening_has_first_person"])
self.assertGreaterEqual(metrics["experience_section_coverage"], 0.5)
self.assertGreaterEqual(actual_words, brief.constraints.target_words * 0.65)
self.assertLessEqual(actual_words, brief.constraints.target_words * 1.6)
self.assertIn("STYLE002", text)
self.assertIn("STYLE003", text)
self.assertIn("examples/briefs/claridoc-readme.json", text)
if __name__ == "__main__":
unittest.main()