- Move contract files to inner/outer directory structure - Add create-contract and update-contract skills - Update agent-ops rules and domain rules - Update roadmap and SDD documentation - Update README files across apps
6.3 KiB
6.3 KiB
| name | version | description |
|---|---|---|
| update-contract | 1.0.0 | agent-contract inner/outer 계약 문서를 갱신하고 흩어진 계약 설명을 정리한다. 계약 업데이트해, 프로젝트 계약 업데이트해, 계약 갱신/수정/정리, contract update 요청에서 사용한다. |
update-contract
목적
기존 agent-contract/의 inner/outer 계약 문서를 최신 코드와 문서 기준으로 갱신한다.
계약 원문은 한 곳에 모으고, README/docs/rules에는 포인터와 경계 규칙만 남긴다.
언제 호출할지
- 사용자가 계약 업데이트, 프로젝트 계약 업데이트, 계약 갱신, 계약 수정, 계약 정리를 요청할 때
- API, runtime 호출, wire protocol, event/config schema 변경이 기존 계약에 영향을 줄 때
- 계약 설명이 README/docs/rules/code review 과정에서 다시 흩어진 것을 정리할 때
- legacy
provided/consumed계약을inner/outer모델로 점진 정리할 때
입력
contract-id: 갱신할 계약 식별자 (선택, 없으면 index와 변경 diff에서 탐색)change: 바뀐 내용 또는 정리할 문제 요약 (선택, 없으면 최근 변경/요청 맥락에서 산출)boundary:inner또는outer(선택, 기존 문서 우선)canonical-path: 갱신 기준이 되는 proto/OpenAPI/config/code 원본 경로 (선택)
먼저 확인할 것
agent-contract/index.md존재 여부를 확인한다. 없으면 create-contract 흐름으로 전환할지 판단한다.- index에서 대상 계약 문서를 찾는다. 없으면 새 계약 생성 대상인지 판단한다.
- 대상 계약 문서와 원본 경로를 읽는다.
- 변경 범위와 관련된 코드, proto, config, 테스트를 읽어 실제 동작을 확인한다.
- README/docs/rules에 계약 본문이 새로 중복 작성되었는지 검색한다.
- legacy
provided/consumed/구조가 남아 있으면 현재 요청이 구조 migration인지 단순 계약 갱신인지 구분한다.
실행 절차
-
대상 확정
- index의
Outer Contracts/Inner Contracts에서 계약을 찾는다. contract-id가 없으면 요청 키워드, 변경 파일, 코드 diff, README/docs/rules의 계약 설명을 기준으로 영향을 받는 계약을 좁힌다.- legacy index만 있으면
provided는 outer 후보, 프로젝트 내부 runtime/wire 계약은 inner 후보로 분류하되 즉시 이동하지 말고 변경 범위와 함께 판단한다. - 대상이 없고 요청이 계약 생성/정리까지 허용하면 create-contract 흐름으로 전환한다.
- 대상이 없고 사용자가 특정 기존 계약 갱신만 요청했다면 대상 부재를 보고한다.
- index의
-
코드 우선 분석
- 원본 경로를 먼저 확인한다.
- 실제 parser/handler/DTO/interface/test에서 필드 의미와 허용/거부 동작을 확인한다.
- 문서와 코드가 다르면 코드를 근거로 계약 문서를 갱신하고, 코드가 틀렸을 가능성이 있으면 사용자에게 후보를 제시한다.
-
계약 문서 갱신
- 필드 의미, 금지 사항, 읽는 조건, 변경 시 테스트를 최신 상태로 맞춘다.
- schema 원본 전체를 복제하지 않고 핵심 의미와 원본 경로를 유지한다.
- 불확실한 값은 단정하지 않고
확인 필요로 남긴다. last updated같은 날짜 메타가 이미 있는 문서에서만 갱신한다. 없는 문서에 날짜 관례를 새로 만들지 않는다.
-
index 갱신
- 읽는 조건이 새 API/field/message/protocol 이름을 포함하는지 확인한다.
- path, 원본 경로, boundary가 실제 문서와 일치하는지 확인한다.
- 중복 id, dead path, 존재하지 않는 원본 경로를 제거하거나 수정한다.
- 프로젝트 전용 path trigger가 필요하면
agent-contract/index.md또는 project/domain rule 포인터에 둔다. common rule에는 넣지 않는다.
-
흩어진 문서 정리
- README/docs/rules에 계약 본문이 들어간 경우 계약 문서 포인터로 축소한다.
- domain rule에는 책임 경계와 금지 사항만 남기고 상세 요청/응답 schema를 반복하지 않는다.
- 테스트 문서에는 검증 기준만 남기고 계약 본문을 복제하지 않는다.
- common rule에 특정 프로젝트 경로, 계약 id, API 이름이 새로 들어갔으면 제거하고 프로젝트 문서로 옮긴다.
-
검증 판단
- 계약 문서만 바꿨으면 링크/path/index 정합성을 확인한다.
- 원본 schema 또는 runtime 코드를 함께 바꿨으면 해당 domain/test rule의 검증 기준을 따른다.
- proto/config schema를 바꿨으면 생성물 갱신 명령과 관련 테스트를 실행한다.
-
결과 보고
- 수정한 계약 문서와 index
- 코드 분석 근거
- 중복 제거한 문서
- 실행한 검증
- 남은 확인 필요 항목
실행 결과 검증
- index가 대상 계약의 최신 path와 읽는 조건을 가리키는가
- 계약 문서의 원본 경로가 실제 코드/proto/config와 맞는가
- README/docs/rules에 같은 계약 본문이 중복 남아 있지 않은가
- inner/outer boundary가 계약의 실제 소비자와 맞는가
- 코드 분석 없이 문서만 추측해 갱신하지 않았는가
- 변경 범위에 필요한 테스트 또는 링크 검증을 실행했는가
- 검증 실패 시: index/path/원본 경로/중복 문서/테스트 누락을 보완한다.
출력 형식
## 계약 업데이트 완료
- contract: agent-contract/<inner|outer>/<contract-name>.md
- index: agent-contract/index.md
- code evidence: <확인한 코드/proto/config/test>
- pointers: <갱신한 README/docs/rules 경로 또는 없음>
- verification: <실행한 명령 또는 생략 사유>
- 확인 필요: <항목 또는 없음>
금지 사항
- 코드와 원본 경로를 확인하지 않고 계약 문서만 고치지 않는다.
- README/docs/rules에 계약 본문을 새로 복제하지 않는다.
- 프로젝트 전용 path trigger를 common rule에 넣지 않는다.
- 사용자 요청 없이 전체 계약 구조를 대량 migration하지 않는다.
- 한 패키지 내부 구현 세부를 inner 계약으로 승격하지 않는다.
- 계약 갱신과 무관한 리팩터링을 함께 수행하지 않는다.