diff --git a/harness/agents/impl/skills/gitea-issue-implementation/SKILL.md b/harness/agents/impl/skills/gitea-issue-implementation/SKILL.md index 69fe520..248e504 100644 --- a/harness/agents/impl/skills/gitea-issue-implementation/SKILL.md +++ b/harness/agents/impl/skills/gitea-issue-implementation/SKILL.md @@ -1,7 +1,7 @@ --- name: gitea-issue-implementation description: 승인된 Gitea Issue를 구현·검증하고 Gitea PR로 전달한다. -version: 0.3.0 +version: 0.4.0 author: genichin, Hermes Agent license: MIT platforms: [linux] @@ -124,14 +124,15 @@ Issue body와 `updated_at`을 immutable approval snapshot으로 보존한다. bo 3. Repository가 선언한 canonical install과 test 명령을 찾는다. 임의의 전역 package 설치나 운영 credential을 사용하지 않는다. 4. 관련 기존 test를 수정 전 실행하고 exit code와 실패 내용을 보존한다. 5. Baseline 실패가 변경 대상과 관련되거나 새 구현의 판정을 방해하면 수정하지 않고 blocker로 보고한다. 명백히 무관한 기존 실패라면 범위와 evidence를 기록하고 영향받는 test를 별도로 판정한다. +6. Acceptance criterion이 framework·runtime·protocol의 특정 capability에 의존하고 base에서 지원 여부가 불명확하면 production 변경 전에 최소 spike로 실제 API와 lifecycle을 검증한다. 검증할 수 없거나 요구 동작을 지원하지 않으면 설계를 추측해 구현하지 않는다. -완료 조건: 변경 대상의 현재 동작, dependency direction, test command와 baseline 결과가 실제 output으로 확인됐다. +완료 조건: 변경 대상의 현재 동작, dependency direction, test command와 baseline 결과가 실제 output으로 확인됐고, 구현을 좌우하는 capability 불확실성이 해소됐다. ### 6. 요구 문서 작성 Discovery가 `신규 작성` 또는 `수정`으로 판정한 문서만 작성한다. -1. 요구사항명세서는 `read_file`로 harness의 [요구사항 작성 방법](../../../../docs/requirements/README.md)과 [요구사항 템플릿](../../../../docs/requirements/TEMPLATE.md)을 새로 읽고 Discovery가 지정한 target repository의 exact ID·경로로 작성한다. +1. Target repository의 기존 canonical 문서와 requirement ID를 먼저 조사해 신규 문서와 기존 revision 갱신을 구분한다. 요구사항명세서는 `read_file`로 harness의 [요구사항 작성 방법](../../../../docs/requirements/README.md)과 [요구사항 템플릿](../../../../docs/requirements/TEMPLATE.md)을 새로 읽고 Discovery가 지정한 target repository의 exact ID·경로로 작성한다. 2. 데이터 모델은 영향이 있을 때만 harness의 [데이터 모델 작성 방법](../../../../docs/data-model/README.md)과 [데이터 모델 템플릿](../../../../docs/data-model/TEMPLATE.md)을 적용한다. 3. 인터페이스 계약은 영향이 있을 때 harness의 [인터페이스 계약 작성 방법](../../../../docs/interface-contract/README.md)과 [인터페이스 계약 템플릿](../../../../docs/interface-contract/TEMPLATE.md)을 적용한다. 4. 프로젝트 구조는 영향이 있을 때 harness의 [프로젝트 구조 작성 방법](../../../../docs/project-structure/README.md)과 [프로젝트 구조 템플릿](../../../../docs/project-structure/TEMPLATE.md)을 적용한다. @@ -158,10 +159,11 @@ Discovery가 `신규 작성` 또는 `수정`으로 판정한 문서만 작성한 1. Repository가 요구하는 formatter, lint, type check, build와 test suite를 실제 실행한다. 2. Base-to-worktree diff를 읽고 모든 변경 파일을 acceptance matrix와 대응한다. 3. 범위 밖 변경, debug artifact, generated drift, credential material, query parameter secret, test-only bypass와 운영 데이터가 없는지 검사한다. -4. 새 dependency가 있다면 필요성과 lockfile·deployment 반영을 검증한다. +4. 새 dependency나 새 API가 있다면 필요성, 선언된 version 범위에서의 API 지원, lockfile과 모든 runtime·deployment 설치 경로의 일치를 검증한다. 5. 설정 예시에는 secret 이름과 용도만 기록하고 실제 값을 넣지 않는다. -6. 독립 검토가 유용하면 `delegate_task`로 bounded reviewer를 사용한다. Reviewer에게 exact worktree path, base SHA, Issue snapshot, acceptance matrix와 검증 명령을 전달하고 Gitea write, Git cleanup, commit과 push를 금지한다. +6. 인증, credential, cookie, HTTP origin·scheme, proxy trust 또는 권한 경계를 변경하면 `delegate_task`로 bounded security reviewer를 사용하고 scheme·host·port, trusted proxy, fail-closed ordering과 secret 노출을 명시적으로 검토한다. 그 외에는 독립 검토가 유용할 때 reviewer를 사용한다. Reviewer에게 exact worktree path, base SHA, Issue snapshot, acceptance matrix와 검증 명령을 전달하고 Gitea write, Git cleanup, commit과 push를 금지한다. 7. Main agent가 reviewer 지적을 직접 재현하고 유효한 문제만 수정한 뒤 영향을 받은 검증을 다시 실행한다. +8. 실제 runtime·protocol 동작이 acceptance criterion이면 가능한 가장 실제에 가까운 경로로 검증한다. 필요한 tool이 없으면 하위 수준 검증으로 대체하되 동등하다고 주장하지 않고 미검증 범위를 기록한다. Timeout이나 비결정적 실패가 발생했거나 timeout 값을 변경했다면 focused test를 fresh process에서 반복한 뒤 관련 suite와 전체 suite를 다시 실행한다. 완료 조건: 모든 modified file이 승인된 산출물로 설명되고, 실행한 quality gate와 unresolved finding이 명확하다. @@ -180,9 +182,11 @@ Discovery가 `신규 작성` 또는 `수정`으로 판정한 문서만 작성한 11. Default branch를 base로 PR을 생성한다. 제목은 Issue를 식별하고, 본문에는 `Closes #`, 구현 요약, 문서 변경, 실제 검증 명령·결과, 제한사항과 보안상 주의점을 기록한다. PR 생성 자체로 Issue state를 변경하지 않는다. 12. PR 번호를 얻은 뒤 요구사항 문서의 `구현 PR: 미정`을 실제 PR 번호 또는 URL로 교체하고, 문서 검증과 관련 test를 재실행해 별도 commit으로 같은 branch에 non-force push한다. 13. Gitea에서 PR details, base branch, head repository·branch·SHA, state, changed files와 commit을 다시 읽는다. 최종 remote head SHA가 최종 local commit SHA와 일치할 때만 전달 완료로 판정한다. -14. PR 생성 또는 후속 push가 부분 실패하면 blind retry하거나 중복 PR을 만들지 않는다. 이미 생성된 fork·branch·PR과 local commit의 exact 상태 및 안전한 복구 지점을 보고한다. +14. Gitea Actions 또는 commit status가 제공되면 최종 head의 success, failed, pending, run 없음 또는 조회 불가 상태를 읽고 그대로 보고한다. +15. PR 생성 또는 후속 push가 부분 실패하면 blind retry하거나 중복 PR을 만들지 않는다. 이미 생성된 fork·branch·PR과 local commit의 exact 상태 및 안전한 복구 지점을 보고한다. +16. 성공·실패와 관계없이 현재 실행이 만든 임시 server, fixture workspace와 credential helper를 정리하고 부재를 확인한 뒤 현재 실행이 획득한 lock을 해제한다. Persistent Issue worktree는 별도 제거 승인이 없으면 보존한다. -완료 조건: Issue와 source drift, final worktree 상태와 실행 결과가 fresh readback으로 확인되고, 열린 Gitea PR의 base·head와 remote head SHA가 검증된 최종 local commit에 exact-match한다. +완료 조건: Issue와 source drift, final worktree 상태와 실행 결과가 fresh readback으로 확인되고, 열린 Gitea PR의 base·head와 remote head SHA가 검증된 최종 local commit에 exact-match하며, 임시 resource와 lock 정리가 검증됐다. ## 위임 규칙 @@ -220,10 +224,13 @@ Main agent는 구현 범위와 최종 결과에 책임을 진다. 독립적인 r - 요구 문서별 조치, exact path와 canonical template 검증 - acceptance criterion별 구현 위치와 test evidence - baseline, targeted와 full-suite 명령의 실제 exit 결과 +- 최종 보고와 PR에 재사용한 단일 검증 기록의 exact command, exit code와 pass·skip·fail 수치 - modified file 전체와 범위 내 변경 근거 - staged, unstaged, untracked, 미완료 Git operation, local commit과 remote branch SHA - Issue와 default branch의 최종 drift readback - PR 번호·URL·base·head·state와 PR head SHA readback +- 최종 head의 Actions·commit status와 실제 runtime 검증을 대체한 경우의 미검증 범위 +- 임시 process·workspace·credential helper 정리와 lock 해제 확인 - 수행한 commit·push·PR write와 수행하지 않은 merge·Issue·release write - blocker, 기존 실패, unresolved risk 또는 partial 상태