From abf4d0747271fa6f27a3c53323522b6b5624a63c Mon Sep 17 00:00:00 2001 From: gitea-spec-agent Date: Wed, 14 Oct 2026 14:31:31 +0000 Subject: [PATCH] [verified] Document early native journal parent preflight --- .../agents/review/skills/gitea-code-review/SKILL.md | 1 + .../review/test_native_journal_contract_docs.py | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/harness/agents/review/skills/gitea-code-review/SKILL.md b/harness/agents/review/skills/gitea-code-review/SKILL.md index c5a4c65..31895ad 100644 --- a/harness/agents/review/skills/gitea-code-review/SKILL.md +++ b/harness/agents/review/skills/gitea-code-review/SKILL.md @@ -44,6 +44,7 @@ Bootstrap 이후 code review는 canonical [Repository cache 운영 지침](../.. 2. PR이 open이고 source Issue에 exact `Closes #` 하나로 연결되며 default branch를 base로 하는지 확인한다. 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 불명은 차단한다. +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를 게시하지 않는다. diff --git a/harness/tests/review/test_native_journal_contract_docs.py b/harness/tests/review/test_native_journal_contract_docs.py index 61911f9..9153731 100644 --- a/harness/tests/review/test_native_journal_contract_docs.py +++ b/harness/tests/review/test_native_journal_contract_docs.py @@ -17,6 +17,19 @@ class NativeJournalDocumentationTests(unittest.TestCase): with self.subTest(path=str(path), token=token): 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): text = REFERENCE.read_text() self.assertNotIn('result = native_review.publish(plan, baseline, api, lease, journal_directory)', text)