From 7542a5602ae5dda0e810a94f8c7107e87411bfa4 Mon Sep 17 00:00:00 2001 From: gitea-spec-agent Date: Fri, 2 Oct 2026 06:40:11 +0000 Subject: [PATCH] docs(impl): tighten rework delivery evidence --- harness/agents/impl/skills/gitea-issue-rework/SKILL.md | 10 +++++----- harness/operations/repository-cache.md | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/harness/agents/impl/skills/gitea-issue-rework/SKILL.md b/harness/agents/impl/skills/gitea-issue-rework/SKILL.md index 877b12a..667cbe5 100644 --- a/harness/agents/impl/skills/gitea-issue-rework/SKILL.md +++ b/harness/agents/impl/skills/gitea-issue-rework/SKILL.md @@ -1,7 +1,7 @@ --- name: gitea-issue-rework description: Gitea PR 검토 지적을 계약에 맞춰 재작업하고 검증한다. -version: 0.2.2 +version: 0.2.3 author: genichin, Hermes Agent license: MIT platforms: [linux] @@ -169,7 +169,7 @@ Reviewer가 rework head를 새 snapshot으로 다시 검토해야 하며 이 com ### 3. 재작업 계획과 baseline 1. 각 `valid_fix`와 `evidence_gap`을 승인 계약의 acceptance criterion에 역추적한다. -2. 변경 allowlist를 source, 문서, 설정, test와 evidence path로 만든다. Review body의 path를 존재 검증 없이 신뢰하지 않는다. +2. 변경 allowlist를 source, 문서, 설정, test와 evidence path로 만든다. 불변성 또는 evidence 재사용 검증에는 계약을 실제로 소유하는 exact path·제한된 glob만 별도 기록하며 package 전체처럼 넓은 경로를 근거 없이 사용하지 않는다. Review body의 path를 존재 검증 없이 신뢰하지 않는다. 3. Repository의 canonical 문서 README·TEMPLATE, build·test·lint 명령과 변경 대상 파일을 다시 읽는다. 4. 현재 reviewed head에서 관련 test와 review가 요구한 runtime check를 baseline으로 실행하고 command, exit code, output, environment와 HEAD를 기록한다. 5. Framework·runtime·protocol capability가 불명확하면 production edit 전에 최소 spike로 검증한다. @@ -193,7 +193,7 @@ Reviewer가 rework head를 새 snapshot으로 다시 검토해야 하며 이 com 1. Repository가 선언한 formatter, lint, type check, build, targeted, integration과 relevant full suite를 실행한다. 2. Runtime·protocol·browser criterion은 가능한 가장 실제에 가까운 경로로 실행한다. 하위 수준 대체 evidence를 동등하다고 주장하지 않는다. - 재작업 diff가 문서 파일에만 한정되고 기존 browser evidence가 결합된 source, test와 evidence path가 reviewed head부터 final head까지 byte-identical이며 ancestry를 검증한 경우에만 browser를 다시 실행하지 않고 기존 evidence를 재사용할 수 있다. 변경 경로가 겹치거나 동일성을 증명할 수 없으면 재사용하지 않는다. + 재작업 diff가 문서 파일에만 한정되고 기존 browser evidence가 결합된 source, test와 evidence path가 reviewed head부터 final head까지 byte-identical이며 ancestry를 검증한 경우에만 browser를 다시 실행하지 않고 기존 evidence를 재사용할 수 있다. 이때 비교한 exact path 집합과 양 head의 blob OID 또는 digest를 검증 기록과 결과 comment에 남긴다. 변경 경로가 겹치거나 동일성을 증명할 수 없으면 재사용하지 않는다. 3. Base-to-worktree와 reviewed-head-to-worktree diff를 모두 읽고 모든 changed file을 finding matrix와 acceptance matrix에 대응한다. 4. 범위 밖 refactor, debug artifact, generated drift, credential, 운영 데이터, test-only bypass와 예상하지 못한 삭제를 제거한다. 5. Security-sensitive 변경은 `delegate_task`로 bounded reviewer에게 exact worktree, reviewed head, contract subset, finding matrix와 file allowlist를 제공해 독립 검토한다. Gitea write, Git cleanup, commit과 push는 금지한다. @@ -216,7 +216,7 @@ Reviewer가 rework head를 새 snapshot으로 다시 검토해야 하며 이 com ### 7. 기존 PR branch 전달 1. Write 직전에 remote branch와 PR head가 snapshot의 reviewed head와 여전히 exact-match하는지 확인한다. -2. Canonical mirror remote를 변경하지 않고 explicit repository URL과 refspec으로 기존 Issue 전용 branch에 fast-forward non-force push한다. +2. Canonical mirror remote를 변경하지 않고 explicit repository URL과 refspec으로 기존 Issue 전용 branch에 fast-forward non-force push한다. Named mirror remote를 사용해야 하면 `operations/repository-cache.md`에 따라 해당 push 호출에서만 `remote..mirror=false`를 적용한다. 3. Push 결과만 신뢰하지 않고 remote branch SHA와 PR head SHA가 final local HEAD와 exact-match하는지 readback한다. 4. PR body 갱신이 필요한 경우 write 직전에 PR 전체 필드, review·comment·commit collection cardinality와 authenticated impl identity를 다시 읽는다. Current body의 `Closes #`와 기존 구현 내용을 보존하고 재작업 review ID·reviewed head·finding별 조치·최종 검증과 unresolved limitation만 반영한 exact body payload를 명시해 한 번만 호출한다. 성공 응답만 신뢰하지 않고 fresh PR과 관련 collection을 읽어 PR author stable account ID, exact body payload, `updated_at`, base·head·commit/ref, state·draft·merge 상태, labels·assignees·reviewer와 collection cardinality를 baseline과 비교한다. Exact body와 provider가 해당 body update로 파생한 `updated_at` 외의 변경은 승인되지 않았으며 인과를 증명할 수 없으면 partial로 중단한다. 5. PR changed files, commits, state, merge 상태, statuses와 workflow runs를 다시 읽는다. Local test, commit status와 Actions run을 별도 사실로 기록한다. @@ -270,7 +270,7 @@ Reviewer가 rework head를 새 snapshot으로 다시 검토해야 하며 이 com - Finding별 classification, 계약 근거, 수정 path, test와 `resolved|unresolved` 결과 - Worktree path·identity, reviewed-head 시작 상태와 final local HEAD - Baseline, focused, full-suite, runtime과 browser 검증의 exact command·exit code·결과 -- 실제 browser가 요구된 경우 사용한 browser runner와 발급·복원·이동·삭제 등 관찰 결과 +- 실제 browser가 요구된 경우 사용한 browser runner와 발급·복원·이동·삭제 등 관찰 결과. 기존 evidence를 재사용했다면 비교한 exact path 집합과 reviewed/final head의 blob OID 또는 digest - Base 및 reviewed head 대비 전체 modified file과 범위 근거 - Local commit, remote branch와 PR final head SHA readback - PR body write 여부, status와 Actions run의 success·failure·pending·없음 상태 diff --git a/harness/operations/repository-cache.md b/harness/operations/repository-cache.md index 1ebe870..ceacebc 100644 --- a/harness/operations/repository-cache.md +++ b/harness/operations/repository-cache.md @@ -178,7 +178,7 @@ Dirty worktree, untracked 파일 또는 base 이후 commit은 진행 중 구현 - 일반 편집, 테스트와 commit은 exact Issue lock 아래에서만 수행한다. 현재 worktree 외의 source, 다른 checkout 또는 installed package를 수정하거나 구현 근거로 사용하지 않는다. - commit 전후 base SHA, HEAD SHA, staged·unstaged·untracked 상태를 기록한다. detached 상태를 local branch로 자동 전환하지 않는다. -- 명시적으로 승인된 push는 source와 destination을 모두 지정해 `HEAD:refs/heads/` 형태와 동등하게 수행한다. destination 없는 push, force push와 mirror push는 금지한다. +- 명시적으로 승인된 push는 source와 destination을 모두 지정해 `HEAD:refs/heads/` 형태와 동등하게 수행한다. Canonical cache remote에 `remote..mirror=true`가 설정돼 있으면 credential을 포함하지 않은 explicit repository URL을 사용하거나 `git -c remote..mirror=false push HEAD:refs/heads/`와 동등하게 해당 호출에서만 mirror 동작을 끈다. Persistent remote config는 변경하지 않는다. destination 없는 push, force push와 mirror push는 금지한다. - Push 후 Gitea에서 exact remote branch SHA를 다시 읽어 local HEAD와 일치하는 경우에만 전달 완료로 판정한다. PR 생성, merge, Issue comment·label·state 변경은 각각 별도 승인이 필요하다. - 테스트 성공, local commit 또는 agent session 종료만으로 worktree를 제거하지 않는다.