docs: apply Korean prose contract to README

This commit is contained in:
DongHyeonka
2026-07-29 18:44:50 +09:00
parent a066b89a7a
commit 89e09cbc20
6 changed files with 250 additions and 43 deletions
+42
View File
@@ -45,6 +45,48 @@ class CliTests(unittest.TestCase):
"raw/branch-notes/feature-application-port-usecase-contract.md",
)
def test_readme_brief_validates_and_outlines(self) -> None:
root = Path(__file__).resolve().parents[1]
brief = root / "examples" / "briefs" / "claridoc-readme.json"
sources = root / "examples" / "sources" / "retry-policy-sources.json"
expected_intents = [
"problem_value",
"principles",
"workflow",
"installation",
"quickstart",
"configuration",
"verification",
"limits_next",
]
with tempfile.TemporaryDirectory() as temp:
output = Path(temp) / "outline.json"
with redirect_stdout(StringIO()):
validate_code = main(
["validate", "--brief", str(brief), "--sources", str(sources)]
)
outline_code = main(
[
"outline",
"--brief",
str(brief),
"--sources",
str(sources),
"--output",
str(output),
]
)
self.assertEqual(validate_code, 0)
self.assertEqual(outline_code, 0)
outline = json.loads(output.read_text(encoding="utf-8"))
self.assertEqual(outline["document_type"], "readme")
self.assertEqual(
[section["intent"] for section in outline["sections"]],
expected_intents,
)
if __name__ == "__main__":
unittest.main()
+17 -2
View File
@@ -15,8 +15,8 @@ from claridoc.templates import mock_pipeline_config
from tests.helpers import brief_dict, make_brief, make_sources
def _korean_experience_brief() -> Brief:
data = brief_dict()
def _korean_experience_brief(document_type: str = "technical_blog") -> Brief:
data = brief_dict(document_type)
data.update(
{
"title": "기술적 선택을 경험과 근거로 설명하기",
@@ -120,6 +120,21 @@ class PipelineTests(unittest.TestCase):
self.assertIn("Reader-prose contract", report_text)
self.assertIn("korean_first_person_experience_v1", report_text)
def test_korean_readme_mock_run_satisfies_reader_prose_contract(self) -> None:
with tempfile.TemporaryDirectory() as temp:
result = run_pipeline(
_korean_experience_brief("readme"),
make_sources(),
PipelineConfig.from_dict(mock_pipeline_config()),
Path(temp) / "run",
)
self.assertTrue(result.passed)
metrics = result.rounds[-1].lint_report.metrics
self.assertEqual(metrics["plain_form_ending_count"], 0)
self.assertTrue(metrics["opening_has_first_person"])
self.assertGreaterEqual(metrics["experience_section_coverage"], 0.5)
def test_style_blocker_cannot_be_hidden_by_permissive_error_limit(self) -> None:
with tempfile.TemporaryDirectory() as temp:
output = Path(temp) / "run"
+8
View File
@@ -28,6 +28,9 @@ class SchemaTests(unittest.TestCase):
brief_data = json.loads(
(ROOT / "examples" / "briefs" / "retry-policy-blog.json").read_text(encoding="utf-8")
)
readme_brief_data = json.loads(
(ROOT / "examples" / "briefs" / "claridoc-readme.json").read_text(encoding="utf-8")
)
sources_data = json.loads(
(ROOT / "examples" / "sources" / "retry-policy-sources.json").read_text(encoding="utf-8")
)
@@ -35,8 +38,13 @@ class SchemaTests(unittest.TestCase):
multi_config_data = json.loads(
(ROOT / "config" / "pipeline.multi-agent.example.json").read_text(encoding="utf-8")
)
brief_schema = json.loads(
(ROOT / "schemas" / "brief.schema.json").read_text(encoding="utf-8")
)
self.assertTrue(Brief.from_dict(brief_data).title)
self.assertEqual(Brief.from_dict(readme_brief_data).document_type.value, "readme")
jsonschema.Draft202012Validator(brief_schema).validate(readme_brief_data)
self.assertGreaterEqual(len(SourcePack.from_dict(sources_data).sources), 1)
self.assertEqual(PipelineConfig.from_dict(mock_config_data).writer.provider, "mock")
self.assertEqual(PipelineConfig.from_dict(multi_config_data).writer.provider, "claude")