[verified] Clarify named-test evidence and rework reporting
This commit is contained in:
@@ -312,6 +312,19 @@ terminal(command="python3 harness/agents/spec/skills/gitea-implementation-spec-r
|
|||||||
|
|
||||||
Review write 응답, process exit, PR body의 test 주장, delegate 보고 또는 native state만으로 완료를 주장하지 않는다. Exact review body·commit binding과 authoritative collection readback, 외부 상태 불변성과 replay가 모두 확인된 경우에만 완료로 판정한다.
|
Review write 응답, process exit, PR body의 test 주장, delegate 보고 또는 native state만으로 완료를 주장하지 않는다. Exact review body·commit binding과 authoritative collection readback, 외부 상태 불변성과 replay가 모두 확인된 경우에만 완료로 판정한다.
|
||||||
|
|
||||||
|
### Named test 근거와 재작업 보고
|
||||||
|
|
||||||
|
Named test를 근거로 인용하는 main은 exact reviewed head의 실제 호출 인수와 assertions를 직접 대조하고, 검증하는 경우와 검증하지 않는 경우를 구분한다. Setup·fixture·parameterization과 replay 등 관련 호출 순서도 확인하여 테스트 이름이나 PASS 수치만으로 coverage를 추정하지 않는다. 정적 확인과 실제 실행의 출처·revision·확인 한계를 분리해 기록하며, 코드에서 assertion을 확인한 사실을 reviewer가 실행한 결과로 표현하지 않는다. 이전 revision의 실행 evidence 재사용은 기존 Acceptance matrix의 binding 기준을 적용하고, 이 규칙만으로 새 일괄 재실행 gate를 만들지 않는다.
|
||||||
|
|
||||||
|
재작업 재검토의 최종 보고는 다음 네 범주를 구분하고 항목이 없으면 `해당 없음`을 명시한다. 각 항목은 기존 criterion의 `evidence`·`reason`과 finding ID(있는 경우), exact head의 확인 위치에 연결한다.
|
||||||
|
|
||||||
|
- 해소: 이전 finding이 충족된 근거와 확인 범위.
|
||||||
|
- 잔여: 이전 finding 중 아직 충족하지 못한 승인 계약과 최소 보완.
|
||||||
|
- 신규: 이번 재검토에서 발견된 finding, 승인 계약·변경/영향 경로와의 관계 및 지금 차단해야 하는 이유. 단순히 늦게 발견됐다는 이유로 면제하거나 차단하지 않는다.
|
||||||
|
- 문서 보완: 설명·추적성 보완과 실제 승인 계약 위반을 구분한다. 문서 보완만으로 blocker로 승격하지 않는다. 문서 자체가 필수 승인 계약을 위반하면 해당 근거와 잔여/신규 판정을 명시한다.
|
||||||
|
|
||||||
|
같은 원인의 구현·문서 finding은 연결해 설명하고 동일 미해결 원인을 중복 집계하지 않는다. 서로 독립된 계약 위반은 임의로 합치거나 숨기지 않으며, 보고 수치에는 집계 단위를 명시한다. 이 규칙은 main의 근거 대조와 보고 분류이며 result schema나 renderer, publisher를 바꾸거나 자동 assertion 해석기·새 제품 문서·일괄 재실행 gate를 요구하지 않는다.
|
||||||
|
|
||||||
## External Issue verification evidence boundary
|
## External Issue verification evidence boundary
|
||||||
|
|
||||||
제품 검증 실행 evidence의 정본은 공통 [Repository cache 운영 지침](../../../../operations/repository-cache.md)의 `<harness-root>/repositories/<owner>/<repo>/worktrees/issue-<number>/verification/<run-id>`다. 구현·재작업의 `evidence-manifest/v3`와 plan/output을 read-only로 소비하며 제품 저장소에 회차별 증빙 파일을 새로 요구하지 않는다. 기존 genuine 정본 문서와 fixture의 존재 자체를 결함으로 판정하거나 삭제를 요구하지 않는다.
|
제품 검증 실행 evidence의 정본은 공통 [Repository cache 운영 지침](../../../../operations/repository-cache.md)의 `<harness-root>/repositories/<owner>/<repo>/worktrees/issue-<number>/verification/<run-id>`다. 구현·재작업의 `evidence-manifest/v3`와 plan/output을 read-only로 소비하며 제품 저장소에 회차별 증빙 파일을 새로 요구하지 않는다. 기존 genuine 정본 문서와 fixture의 존재 자체를 결함으로 판정하거나 삭제를 요구하지 않는다.
|
||||||
|
|||||||
@@ -58,6 +58,27 @@ class PriorityReviewContracts(unittest.TestCase):
|
|||||||
'제품 저장소의 새 산출물이나 result schema 변경을 요구하지'):
|
'제품 저장소의 새 산출물이나 result schema 변경을 요구하지'):
|
||||||
self.assertIn(value, text)
|
self.assertIn(value, text)
|
||||||
|
|
||||||
|
def test_named_test_documentation_contract_requires_call_assertion_cross_check(self):
|
||||||
|
text = IMPLEMENTATION.read_text()
|
||||||
|
heading = '### Named test 근거와 재작업 보고'
|
||||||
|
self.assertIn(heading, text)
|
||||||
|
section = text.split(heading, 1)[1].split('\n## ', 1)[0]
|
||||||
|
for rule in ('exact reviewed head', '실제 호출 인수와 assertions',
|
||||||
|
'검증하는 경우와 검증하지 않는 경우', '정적 확인과 실제 실행',
|
||||||
|
'테스트 이름이나 PASS 수치만으로', '확인 한계'):
|
||||||
|
with self.subTest(rule=rule):
|
||||||
|
self.assertIn(rule, section)
|
||||||
|
|
||||||
|
def test_rework_report_documentation_contract_requires_categories_and_counting_rules(self):
|
||||||
|
text = IMPLEMENTATION.read_text()
|
||||||
|
section = text.split('### Named test 근거와 재작업 보고', 1)[1].split('\n## ', 1)[0]
|
||||||
|
for rule in ('해소:', '잔여:', '신규:', '문서 보완:', '해당 없음',
|
||||||
|
'같은 원인의 구현·문서 finding', '중복 집계하지 않는다',
|
||||||
|
'승인 계약 위반', 'blocker로 승격하지 않는다',
|
||||||
|
'result schema나 renderer', '자동 assertion 해석기'):
|
||||||
|
with self.subTest(rule=rule):
|
||||||
|
self.assertIn(rule, section)
|
||||||
|
|
||||||
def test_local_links_resolve_and_procedures_reference_new_rules(self):
|
def test_local_links_resolve_and_procedures_reference_new_rules(self):
|
||||||
for path in (DISCOVERY, IMPLEMENTATION, README):
|
for path in (DISCOVERY, IMPLEMENTATION, README):
|
||||||
text = path.read_text()
|
text = path.read_text()
|
||||||
|
|||||||
Reference in New Issue
Block a user