"""Documentation contracts only: no policy discovery/log append/agent execution.""" from pathlib import Path import unittest ROOT = Path(__file__).resolve().parents[3] SKILL = ROOT / 'harness/agents/review/skills/gitea-code-review/SKILL.md' HEADING = '## 조건부 observability 정책 확인과 종료 기록' class ReviewObservabilityDocumentationTests(unittest.TestCase): def test_documentation_contract_requires_active_role_policy_and_conditional_scope(self): text = SKILL.read_text() self.assertIn(HEADING, text, 'conditional observability guidance is missing') section = text.split(HEADING, 1)[1].split('\n## ', 1)[0] for rule in ('현재 review role', '실제 설정', '적용 범위', 'not_applicable', '추정하지', '다른 profile', 'spec 정책', '정책 확인 실패', '참조된 정책이 누락', '비적용으로 처리하지 않는다', '정책 참조가 없음을 실제 설정에서 확인', '새 logger', '전역 설정', 'schema'): with self.subTest(rule=rule): self.assertIn(rule, section) self.assertNotIn('/opt/policies/', section) startup = text.split('## 사용 시점과 정본', 1)[1].split('\n## ', 1)[0] self.assertIn('조건부 observability 정책 확인과 종료 기록', startup) def test_documentation_contract_requires_separate_logging_status_and_final_report(self): text = SKILL.read_text() section = text.split(HEADING, 1)[1].split('\n## ', 1)[0] for rule in ('최종 보고 전에', 'run 기록', '개선 후보', '일일 요약', '새로 append한', 'readback', 'credential', '0건', '완료/실패/미확인/비적용', 'review verdict', 'publication', 'cleanup', '테스트나 native POST를 반복하지', '기록 경로', '실패·한계', '출처·내용이 결합', '문서 계약', '실제 append', '정책이 요구하는 보고 항목에 한정', '후보 수를 요구하지 않으면', '임의로 0건'): with self.subTest(rule=rule): self.assertIn(rule, section) final = text.split('## 주의 및 완료 보고', 1)[1].split('\n## ', 1)[0] self.assertIn('조건부 observability', final) self.assertIn('세부 항목은 적용 정책이 요구한 경우에만', final) self.assertNotIn('기록 상태·경로와 적용 정책', final) if __name__ == '__main__': unittest.main()