from __future__ import annotations from typing import Any def mock_pipeline_config() -> dict[str, Any]: return { "planner": {"provider": "mock"}, "writer": {"provider": "mock"}, "reviewers": [ {"role": "logic", "provider": "mock"}, {"role": "decision", "provider": "mock"}, {"role": "reader", "provider": "mock"}, {"role": "editor", "provider": "mock"}, {"role": "evidence", "provider": "mock"}, {"role": "operations", "provider": "mock"}, ], "reviser": {"provider": "mock"}, "quality_gate": { "minimum_score": 82, "max_blockers": 0, "max_errors": 2, "max_revisions": 2, "deterministic_weight": 0.4, "model_weight": 0.6, }, "fail_on_reviewer_error": True, } def starter_brief() -> dict[str, Any]: return { "title": "기술적 선택을 문제와 근거로 설명하기", "document_type": "technical_blog", "language": "ko-KR", "audience": { "roles": ["소프트웨어 개발자"], "prior_knowledge": ["기본적인 개발 및 운영 경험"], "needs": ["구현 선택의 이유와 적용 조건을 빠르게 파악"], }, "reader_goal": "문제, 대안, 선택 이유, 검증, 트레이드오프를 연결해 설명한다", "core_message": "기술적 선택은 사용 기술의 목록이 아니라 해결하려던 문제, 제외한 대안, 수용한 비용, 지킨 경계로 설명해야 한다.", "scope": ["단일 기술 블로그 또는 기술 문서의 논리 구조"], "non_scope": ["제품 마케팅 카피", "근거 없는 프로젝트 구현 추정"], "prerequisites": ["Markdown을 읽을 수 있음"], "required_topics": ["구체적인 문제", "제약", "대안", "선택 이유", "검증", "트레이드오프"], "constraints": { "target_words": 1400, "tone": "전문적이고 직접적이며 과장하지 않음", "version_context": "", "max_heading_depth": 3, "require_citations": True, "allow_external_knowledge": False, "citation_style": "hidden", "date_policy": "only_when_material", "style_profile": "woowahan_tech_blog_ko", }, "forbidden_claims": [], "metadata": {"owner": "documentation-team", "risk": "medium"}, } def starter_sources() -> dict[str, Any]: return { "sources": [ { "id": "SRC1", "title": "Replace with a verified project or concept source", "url": "repo:///replace-with-a-real-source.md", "publisher": "project documentation", "facts": [ "Replace this placeholder with the problem, decision, reason, alternative, accepted cost, and guardrail that the source explicitly supports." ], "source_type": "canonical-project", "status": "verified", "notes": "Source IDs and paths stay in provenance artifacts when citation_style is hidden.", } ] }