47 lines
2.6 KiB
Python
47 lines
2.6 KiB
Python
"""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()
|