[verified] Document early native journal parent preflight
This commit is contained in:
@@ -44,6 +44,7 @@ Bootstrap 이후 code review는 canonical [Repository cache 운영 지침](../..
|
|||||||
2. PR이 open이고 source Issue에 exact `Closes #<issue-number>` 하나로 연결되며 default branch를 base로 하는지 확인한다.
|
2. PR이 open이고 source Issue에 exact `Closes #<issue-number>` 하나로 연결되며 default branch를 base로 하는지 확인한다.
|
||||||
3. 현재 계약 digest와 PR full head SHA에 결합된 spec-agent의 `approve/APPROVED` native review를 확인한다. Author, body binding, stale·dismissed 상태를 검증한다. 이전 head의 pass나 구현자의 pass 주장은 인정하지 않는다.
|
3. 현재 계약 digest와 PR full head SHA에 결합된 spec-agent의 `approve/APPROVED` native review를 확인한다. Author, body binding, stale·dismissed 상태를 검증한다. 이전 head의 pass나 구현자의 pass 주장은 인정하지 않는다.
|
||||||
4. Issue 계약, PR base·head, 전체 changed files·diff·reviews·review comments와 CI/status를 snapshot으로 보존한다. Pagination 누락, truncated diff, 계약 모순 또는 identity 불명은 차단한다.
|
4. Issue 계약, PR base·head, 전체 changed files·diff·reviews·review comments와 CI/status를 snapshot으로 보존한다. Pagination 누락, truncated diff, 계약 모순 또는 identity 불명은 차단한다.
|
||||||
|
5. 고비용 리뷰·테스트 실행 전에 canonical journal 상위 경로를 읽기 전용으로 사전 점검한다. 검증된 설치의 `$HARNESS_ROOT/harness/.runtime`이 실제 publisher의 canonical journal parent와 같은지 확인하고, 기존 경로는 `lstat`으로 symlink가 아닌 디렉터리, 현재 review role 소유, 정확한 mode `0700`인지 검사한다. 불일치·확인 불가는 blocker로 보고하고 운영자 승인에 따른 exact-path 조치를 요청하거나 게시하지 않는 `local-only` 범위를 명시적으로 정한다. 자동 chmod/chown, journal 이동, guard 완화는 금지한다. 경로 부재는 통과로 기록하지 않고 기존 생성 규칙에 따른 준비·확인 여부를 구분하며 새 자동 생성·복구 절차를 추가하지 않는다. 이 사전 점검은 게시 승인이나 기존 publish-time identity·lease·source·journal 검사를 대신하지 않는다.
|
||||||
|
|
||||||
완료 조건: 현재 head와 계약에 대한 유효한 spec pass 및 완전한 리뷰 입력이 있다. 실패하면 read-only blocker를 보고하고 native review를 게시하지 않는다.
|
완료 조건: 현재 head와 계약에 대한 유효한 spec pass 및 완전한 리뷰 입력이 있다. 실패하면 read-only blocker를 보고하고 native review를 게시하지 않는다.
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,19 @@ class NativeJournalDocumentationTests(unittest.TestCase):
|
|||||||
with self.subTest(path=str(path), token=token):
|
with self.subTest(path=str(path), token=token):
|
||||||
self.assertIn(token, text)
|
self.assertIn(token, text)
|
||||||
|
|
||||||
|
def test_journal_parent_preflight_precedes_expensive_execution(self):
|
||||||
|
text = SKILL.read_text()
|
||||||
|
entry = text.split('## 진입 조건', 1)[1].split('## 리뷰 관점', 1)[0]
|
||||||
|
for requirement in (
|
||||||
|
'고비용 리뷰·테스트 실행 전에',
|
||||||
|
'$HARNESS_ROOT/harness/.runtime', 'lstat', 'symlink',
|
||||||
|
'현재 review role 소유', '정확한 mode `0700`',
|
||||||
|
'읽기 전용', 'blocker', '운영자 승인', 'local-only',
|
||||||
|
'자동 chmod/chown', 'journal 이동', 'guard 완화',
|
||||||
|
'기존 생성 규칙', '게시 승인'):
|
||||||
|
with self.subTest(requirement=requirement):
|
||||||
|
self.assertIn(requirement, entry)
|
||||||
|
|
||||||
def test_no_caller_selected_journal_in_live_example(self):
|
def test_no_caller_selected_journal_in_live_example(self):
|
||||||
text = REFERENCE.read_text()
|
text = REFERENCE.read_text()
|
||||||
self.assertNotIn('result = native_review.publish(plan, baseline, api, lease, journal_directory)', text)
|
self.assertNotIn('result = native_review.publish(plan, baseline, api, lease, journal_directory)', text)
|
||||||
|
|||||||
Reference in New Issue
Block a user