docs: apply Korean prose contract to README
This commit is contained in:
@@ -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
@@ -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"
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user