From 17ab4f0173bbae9f96c9540dad9259896c6e358a Mon Sep 17 00:00:00 2001 From: toki Date: Sat, 30 May 2026 05:37:42 +0900 Subject: [PATCH] feat: test skill and template add, update agent-ops components --- AGENT_TEST_HANDOFF.md | 178 ------------------ agent-ops/.version | 2 +- agent-ops/bin/init-agent-ops.sh | 70 +++++++ .../_templates/test-case-rule-template.md | 71 +++++++ .../_templates/test-env-rules-template.md | 36 ++++ agent-ops/rules/common/rules.md | 5 +- agent-ops/skills/common/create-test/SKILL.md | 89 +++++++++ .../skills/common/init-agent-ops/SKILL.md | 25 ++- agent-ops/skills/common/router.md | 2 + agent-ops/skills/common/update-test/SKILL.md | 92 +++++++++ 10 files changed, 384 insertions(+), 186 deletions(-) delete mode 100644 AGENT_TEST_HANDOFF.md create mode 100644 agent-ops/rules/common/_templates/test-case-rule-template.md create mode 100644 agent-ops/rules/common/_templates/test-env-rules-template.md create mode 100644 agent-ops/skills/common/create-test/SKILL.md create mode 100644 agent-ops/skills/common/update-test/SKILL.md diff --git a/AGENT_TEST_HANDOFF.md b/AGENT_TEST_HANDOFF.md deleted file mode 100644 index 2849c35..0000000 --- a/AGENT_TEST_HANDOFF.md +++ /dev/null @@ -1,178 +0,0 @@ -# agent-test handoff - -## 목적 - -다음 작업에서 `agent-test` 구조 설계를 이어갈 수 있도록 현재 논의와 결론을 빠짐없이 남긴다. - -## 배경 - -- 여러 프로젝트에 테스트 환경과 검증 기준이 분산되어 있어 정형화가 필요하다. -- `../iop` 프로젝트에는 현재 `agent-ops/rules/project/domain/testing/rules.md`와 `agent-ops/rules/private/testing-env.md` 형태로 테스트 기준과 로컬 환경값이 관리되고 있다. -- 처음에는 `testing`을 domain rule로 보거나 `agent-test/rules.md` 같은 공통 test rule 파일을 두는 방향을 검토했다. -- 사용자는 테스트 환경 선언을 domain rule이 아니라 더 큰 단계/축으로 보고 있으며, `agent-ops/` 내부가 아니라 `agent-roadmap`, `agent-task`처럼 루트의 별도 디렉터리로 관리하길 원한다. -- 루트 디렉터리 이름은 `agent-test`로 결정했다. - -## 핵심 제약 - -- 공통 진입점은 최대한 얇아야 한다. -- 테스트 관련 내용이 세션 시작부터 항상 컨텍스트에 올라오면 안 된다. -- 테스트 관련 작업일 때만 조건부로 읽어야 한다. -- 홉이 많아지면 작은 모델이나 로컬 모델이 지침을 놓칠 수 있으므로 중간 router 파일을 만들지 않는다. -- 역할별로 파일을 예쁘게 세분화하는 것보다, 읽힘과 준수 가능성이 우선이다. -- 같은 내용 반복이 있더라도 각 환경 파일이 self-contained인 편이 낫다. -- 환경은 실제 존재하는 것만 공통 진입점에 줄 단위로 추가한다. -- 로컬 환경 선언은 git ignore 대상이어야 한다. - -## 최종 방향 - -`agent-test/rules.md`는 만들지 않는다. - -공통 진입점에는 test 공통 rule이나 test router를 두지 않고, 환경별 라우팅 줄만 둔다. - -예시: - -```md -# 테스트 - -- local 테스트, 로컬 모델, 개인 CLI, 작업 완료 검증을 local 기준으로 판단할 때는 `agent-test/local.md`를 반드시 읽는다. -- dev 테스트, 공유 개발 환경 검증을 판단할 때는 `agent-test/dev.md`를 반드시 읽는다. -- qa 테스트, 릴리즈 전 검증을 판단할 때는 `agent-test/qa.md`를 반드시 읽는다. -- 테스트 환경이 명시되지 않으면 `agent-test/local.md`를 기본으로 읽는다. -``` - -prod 환경이 실제로 필요해질 때만 아래 한 줄을 추가한다. - -```md -- prod 테스트, 운영 환경 검증을 판단할 때는 `agent-test/prod.md`를 반드시 읽는다. -``` - -## 디렉터리 구조 - -최소 구조: - -```text -agent-test/ - local.md - dev.md - qa.md -``` - -prod가 생기면: - -```text -agent-test/ - local.md - dev.md - qa.md - prod.md -``` - -만들지 않을 것: - -```text -agent-test/rules.md -agent-test/env/ -agent-test/profiles/ -agent-test/matrix.md -``` - -위 파일과 디렉터리는 현재 단계에서는 홉과 분산을 늘리므로 만들지 않는다. - -## 환경 파일 원칙 - -- 각 환경 파일은 자기 환경에 필요한 테스트/검증 기준을 반복해서라도 자체 포함한다. -- 다른 `agent-test` 파일을 추가로 읽어야 이해되는 구조로 만들지 않는다. -- 공통 검증 기준이 조금 반복되더라도 환경 파일 안에 직접 적는다. -- local/dev/qa/prod 등 환경 수만큼 파일을 둔다. -- 환경이 없으면 파일도 만들지 않는다. -- 환경별 실제값, 명령, endpoint, 로컬 모델, CLI 로그인 상태, blocker 기준은 해당 환경 파일에 둔다. - -## local 파일 - -`agent-test/local.md`는 local 테스트, 로컬 모델, 개인 CLI, 환경 미지정 테스트 검증의 기본 파일이다. - -예시: - -```md -# local test - -## 읽기 조건 - -local 테스트, 로컬 모델, 개인 CLI, 또는 환경 미지정 테스트 검증을 판단할 때 이 파일을 읽는다. - -## 검증 기준 - -- 작업 완료 검증은 변경 범위 기준으로 판단한다. -- 실행하지 못한 필수 검증은 생략하지 말고 blocker로 보고한다. -- 최종 보고에는 실행 명령, 결과, 생략 사유, 남은 위험을 남긴다. - -## 환경 - -- model endpoint: -- external cli: -- docker: -- gpu: - -## 명령 - -- unit: -- smoke: -- e2e: -- local-model: -``` - -## git ignore - -로컬 환경값은 git ignore 대상이어야 한다. - -권장: - -```gitignore -agent-test/local.md -``` - -필요하면 실행 로그도 ignore한다. - -```gitignore -agent-test/runs/ -``` - -dev/qa/prod 파일을 tracked로 둘지 ignore할지는 프로젝트 운영 방식에 따라 결정한다. 단, 실제 secret/token이 들어가는 파일은 추적하지 않는다. - -## agent-ops common rule에 넣을 위치 - -`agent-ops/rules/common/rules.md`의 상단 공통 규칙들 아래, 세션 최초 로딩 목록보다 앞에 `# 테스트` 섹션을 짧게 둔다. - -중요한 점: - -- `agent-test/**`를 세션 최초 목록에 넣지 않는다. -- `agent-test/rules.md`를 만들거나 읽으라고 하지 않는다. -- 테스트 환경별 라우팅 줄만 둔다. -- 환경이 추가되면 줄만 추가한다. - -샘플: - -```md -# 테스트 - -- local 테스트, 로컬 모델, 개인 CLI, 작업 완료 검증을 local 기준으로 판단할 때는 `agent-test/local.md`를 반드시 읽는다. -- dev 테스트, 공유 개발 환경 검증을 판단할 때는 `agent-test/dev.md`를 반드시 읽는다. -- qa 테스트, 릴리즈 전 검증을 판단할 때는 `agent-test/qa.md`를 반드시 읽는다. -- 테스트 환경이 명시되지 않으면 `agent-test/local.md`를 기본으로 읽는다. -``` - -## 다음 작업 후보 - -1. `agent-ops/rules/common/rules.md`에 위 테스트 섹션을 추가한다. -2. `agent-test/` 디렉터리와 필요한 환경 파일만 만든다. -3. `.gitignore`에 local 환경 파일 ignore 규칙을 추가한다. -4. README 또는 GUIDE에는 큰 설명보다 `agent-test`의 존재와 적용 원칙만 짧게 반영한다. -5. `../iop`의 기존 testing/private 구조는 새 `agent-test` 설계의 pilot 사례로 보고, 이후 별도 작업에서 이관한다. - -## 주의 - -- 다시 `agent-test/rules.md`를 제안하지 않는다. -- `env/`, `profiles/`, `matrix.md` 분리를 기본안으로 제안하지 않는다. -- 공통 진입점에 긴 test rule을 넣지 않는다. -- 테스트 관련 작업이 아닐 때 `agent-test`가 읽히게 만들지 않는다. -- 로컬 모델까지 고려해야 하므로 홉을 늘리지 않는다. diff --git a/agent-ops/.version b/agent-ops/.version index e64b3f7..b223598 100644 --- a/agent-ops/.version +++ b/agent-ops/.version @@ -1 +1 @@ -1.1.88 +1.1.98 diff --git a/agent-ops/bin/init-agent-ops.sh b/agent-ops/bin/init-agent-ops.sh index e557db9..eadb96d 100755 --- a/agent-ops/bin/init-agent-ops.sh +++ b/agent-ops/bin/init-agent-ops.sh @@ -56,6 +56,66 @@ ensure_common_rules_file() { cp "$source_rules" "$target_rules" } +ensure_gitignore_entry() { + local gitignore_file="$1" + local entry="$2" + + if ! grep -qxF "$entry" "$gitignore_file"; then + printf '%s\n' "$entry" >> "$gitignore_file" + fi +} + +ensure_agent_test_local() { + local target_dir="$1" + local local_rules="$target_dir/agent-test/local/rules.md" + local today + + today="$(date +%F)" + mkdir -p "$(dirname "$local_rules")" + mkdir -p "$target_dir/agent-test/runs" + + if [ ! -f "$local_rules" ]; then + cat > "$local_rules" <> "$TOUCH_GITIGNORE" echo "agent-ops/rules/private/" >> "$TOUCH_GITIGNORE" fi +if ! grep -qxF "# Agent-Test Local Environment" "$TOUCH_GITIGNORE"; then + echo "" >> "$TOUCH_GITIGNORE" + echo "# Agent-Test Local Environment" >> "$TOUCH_GITIGNORE" +fi +ensure_gitignore_entry "$TOUCH_GITIGNORE" "agent-test/local/" +ensure_gitignore_entry "$TOUCH_GITIGNORE" "agent-test/runs/" + +# 6. local 테스트 환경 생성 +ensure_agent_test_local "$TARGET_DIR" echo "Successfully initialized agent-ops in $TARGET_DIR" echo "Note: agent-ops/rules/project and agent-ops/skills/project are initialized as empty." +echo "Note: agent-test/local/rules.md is initialized and ignored by git." diff --git a/agent-ops/rules/common/_templates/test-case-rule-template.md b/agent-ops/rules/common/_templates/test-case-rule-template.md new file mode 100644 index 0000000..00353f7 --- /dev/null +++ b/agent-ops/rules/common/_templates/test-case-rule-template.md @@ -0,0 +1,71 @@ +--- +test_env: +test_case: +last_rule_updated_at: +--- + +# 테스트 + +## 읽기 조건 + +- <이 상황의 테스트, 검증, 실행 조건 판단이 필요한 경우> + +## 적용 범위 + +- <검증 대상 entrypoint, command, API, UX, profile, service> + +## 환경 + +- host: +- port: +- runtime: +- package manager: +- docker: +- external service: +- model endpoint: +- credential: + +## 명령 + +- setup: +- lint: +- unit: +- smoke: +- e2e: +- model: +- full-cycle: + +## 필수 검증 + +- <작업 완료 전 반드시 실행하거나 판단해야 하는 검증> + +## 보조 검증 + +- <실행하면 좋지만 필수 검증을 대체하지 않는 smoke/helper 검증> + +## 판정 기준 + +- <통과로 판단할 출력, 상태, UX, artifact, endpoint 조건> + +## 기준 출력 예시 + +```text +<필요한 경우 기대 출력 예시> +``` + +## 차단 기준 + +- <테스트를 계속할 수 없는 환경/권한/도구/서비스 조건> + +## 보고 항목 + +- 실행한 명령: +- 성공한 검증: +- 실패/차단된 검증: +- 생략 사유: +- 남은 위험: + +## 금지 사항 + +- <이 상황 검증에서 하면 안 되는 것> +- secret, token, 개인 endpoint 원문은 tracked 파일에 기록하지 않는다. diff --git a/agent-ops/rules/common/_templates/test-env-rules-template.md b/agent-ops/rules/common/_templates/test-env-rules-template.md new file mode 100644 index 0000000..a936244 --- /dev/null +++ b/agent-ops/rules/common/_templates/test-env-rules-template.md @@ -0,0 +1,36 @@ +--- +test_env: +last_rule_updated_at: +--- + +# 테스트 규칙 + +**현재 문서를 반드시 끝까지 정독하고 작업한다. 다 읽지 않고 즉각 작업은 금지한다.** + +## 공통 규칙 + +- 테스트/검증은 이 파일을 기준으로 판단한다. +- 작업 완료 검증은 변경 범위 기준으로 선택한다. +- 필수 검증을 실행하지 못하면 차단 사유로 보고한다. +- 최종 보고에는 실행 명령, 결과, 생략 사유, 남은 위험을 남긴다. +- 환경값, secret, 개인 endpoint는 tracked docs/roadmap에 쓰지 않는다. + +## 기본 환경 + +- host: +- port: +- runtime: +- package manager: +- docker: +- external service: +- model endpoint: +- credential: + +## 라우팅 + +- <상황/변경 범위>: `agent-test//.md` + +## 라우팅 규칙 + +- 여러 항목이 맞으면 모두 읽는다. +- 상황별 문서는 다른 테스트 문서로 라우팅하지 않는다. diff --git a/agent-ops/rules/common/rules.md b/agent-ops/rules/common/rules.md index 48c6dad..e1c9503 100644 --- a/agent-ops/rules/common/rules.md +++ b/agent-ops/rules/common/rules.md @@ -27,6 +27,7 @@ - agent-ops 초기화 - domain rule 생성 - skill 생성 +- 테스트 룰 작성/생성/수정, create-test/update-test - README 생성 - 로드맵/마일스톤 생성·갱신 - 로드맵 현지점 / 현재 작업 지점 확인 @@ -37,6 +38,6 @@ # 테스트 규칙 -**테스트 관련 작업이 포함된 경우, 작업 환경에 맞게 최초 1회 읽고 수행한다. 환경 미지정은 local로 본다.** +**테스트 실행/검증 작업이 포함된 경우, 작업 환경에 맞게 최초 1회 읽고 수행한다. 환경 미지정은 local로 본다.** -- local: `agent-test/local/rules.md` +- local: `agent-test/local/rules.md` (없으면 `create-test`) diff --git a/agent-ops/skills/common/create-test/SKILL.md b/agent-ops/skills/common/create-test/SKILL.md new file mode 100644 index 0000000..0449dbe --- /dev/null +++ b/agent-ops/skills/common/create-test/SKILL.md @@ -0,0 +1,89 @@ +--- +name: create-test +version: 1.0.2 +description: agent-test 환경 rules.md 또는 상황별 테스트 rule 문서를 생성하는 스킬 +--- + +# create-test + +## 목적 + +`agent-test//rules.md` 또는 `agent-test//.md`를 템플릿 기준으로 생성한다. +공통 진입점은 얇게 유지하고, 실제 테스트 기준은 환경/상황별 문서에 둔다. + +## 언제 호출할지 + +- 새 테스트 환경을 추가할 때 +- 특정 환경의 `rules.md`가 없을 때 +- 새 상황별 테스트 문서와 라우팅을 추가할 때 +- `init-agent-ops` 후 local 테스트 환경 보완이 필요할 때 + +## 입력 + +- `env`: `local`, `dev`, `qa`, `prod` 중 하나 (필수) +- `test-case`: 상황별 테스트 문서 이름, kebab-case (선택) +- `scope`: 검증 대상 또는 변경 범위 설명 (선택) + +## 먼저 확인할 것 + +- [ ] `agent-ops/rules/common/rules.md`의 스킬 규칙과 테스트 규칙이 분리되어 있는지 확인한다. +- [ ] `agent-ops/skills/common/router.md`에 `create-test` 라우팅이 있는지 확인한다. +- [ ] `agent-ops/rules/common/_templates/test-env-rules-template.md`를 읽는다. +- [ ] `test-case`가 있으면 `agent-ops/rules/common/_templates/test-case-rule-template.md`를 읽는다. +- [ ] `agent-test//rules.md` 존재 여부를 확인한다. +- [ ] `test-case`가 있으면 `agent-test//.md` 존재 여부를 확인한다. + +## 실행 절차 + +1. **환경 rules 생성** + - `agent-test//rules.md`가 없으면 `test-env-rules-template.md` 형식으로 만든다. + - 제목은 `# 테스트 규칙`으로 쓴다. + - 제목 바로 아래 정독 필수 문구를 유지한다. + - `last_rule_updated_at`은 생성일 `YYYY-MM-DD`로 쓴다. + +2. **상황별 문서 생성** + - `test-case`가 있으면 `agent-test//.md`를 `test-case-rule-template.md` 형식으로 만든다. + - 실제 확인된 환경, 명령, 판정 기준만 채운다. + - 불확실한 값은 비워 두거나 `<확인 필요>`로 둔다. + +3. **라우팅 갱신** + - 새 환경을 만들었고 `agent-ops/rules/common/rules.md`에 해당 env 라인이 없으면 `# 테스트 규칙`에 한 줄을 추가한다. + - `test-case` 문서를 만들었으면 `agent-test//rules.md`의 `## 라우팅`에 해당 문서 한 줄을 추가한다. + - 상황별 문서에서 다른 테스트 문서로 라우팅하지 않는다. + - 공통룰에서 스킬 최종 진입까지의 경로는 `rules.md` -> `router.md` -> `create-test/SKILL.md`로 유지한다. + +4. **local 추적 제외** + - `env`가 `local`이면 `.gitignore`에 `agent-test/local/`과 `agent-test/runs/`가 있는지 확인하고 없으면 추가한다. + +5. **결과 보고** + - 생성한 파일 + - 추가한 라우팅 + - 비워 둔 확인 필요 항목 + +## 실행 결과 검증 + +- [ ] 생성 파일이 해당 템플릿의 필수 섹션을 포함하는가 +- [ ] `rules.md` -> `router.md` -> `create-test/SKILL.md` 경로가 끊기지 않는가 +- [ ] `agent-test//rules.md`가 3홉을 넘는 라우팅을 만들지 않는가 +- [ ] 새 상황별 문서가 env rules의 라우팅에 연결되었는가 +- [ ] local 생성 시 `.gitignore`에 local 경로가 반영되었는가 +- 검증 실패 시: 누락된 파일/섹션/라우팅만 보완한다. + +## 출력 형식 + +```md +## 생성 완료 + +- 환경: +- 환경 rules: agent-test//rules.md +- 상황별 rule: agent-test//.md +- 라우팅 추가: <내용> +- 확인 필요: <항목 또는 없음> +``` + +## 금지 사항 + +- 기존 테스트 문서를 덮어쓰지 않는다. +- 상황별 문서에서 추가 테스트 문서로 라우팅하지 않는다. +- 확인되지 않은 host, port, token, endpoint를 추측해 쓰지 않는다. +- secret, token, 개인 endpoint 원문을 tracked 파일에 기록하지 않는다. diff --git a/agent-ops/skills/common/init-agent-ops/SKILL.md b/agent-ops/skills/common/init-agent-ops/SKILL.md index 36d4b54..af5ca9c 100644 --- a/agent-ops/skills/common/init-agent-ops/SKILL.md +++ b/agent-ops/skills/common/init-agent-ops/SKILL.md @@ -1,6 +1,6 @@ --- name: init-agent-ops -version: 1.1.4 +version: 1.1.8 description: 프로젝트 상태를 판별하고 agent-ops 기본 스캐폴드를 생성하기 위한 초기 규칙 --- @@ -16,7 +16,8 @@ description: 프로젝트 상태를 판별하고 agent-ops 기본 스캐폴드 3. agent-ops 기본 폴더 구조 4. rules/project/rules.md (프로젝트 특화 규칙, 분석 후 생성) 5. 초기 domain rule 초안 -6. 초기 skill (필요 시) +6. 초기 local 테스트 환경 +7. 초기 skill (필요 시) "현재 프로젝트에 맞는 최소 스캐폴드" 생성을 우선한다. @@ -36,6 +37,7 @@ description: 프로젝트 상태를 판별하고 agent-ops 기본 스캐폴드 - [ ] `.agent-ops-source` 파일이 있는지 확인 (공통 관리 레포 여부) - [ ] 기존 진입 파일(`CLAUDE.md`, `GEMINI.md` 등)이 있는지 확인 - [ ] 기존 AI ignore / permission 파일(`.geminiignore`, `.aiexclude`, `.claude/settings.json`, `opencode.json` 등)이 있는지 확인 +- [ ] `agent-ops/skills/common/create-test/SKILL.md`가 있는지 확인 ## 핵심 원칙 @@ -71,6 +73,8 @@ description: 프로젝트 상태를 판별하고 agent-ops 기본 스캐폴드 | `agent-ops/rules/project/domain//rules.md` | 도메인 분석 후 생성 | | `agent-ops/rules/private/` | 폴더만 생성 (내용은 개인이 작성) | | `.gitignore`에 `agent-ops/rules/private/` 추가 | git 추적 제외 | +| `agent-test/local/rules.md` | `init-agent-ops.sh`가 최소 내용으로 생성 | +| `.gitignore`에 `agent-test/local/`, `agent-test/runs/` 추가 | `init-agent-ops.sh`가 local 테스트 환경/로그를 git 추적 제외 | | `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore` | 사용자 항목은 보존하고 Agent-Ops 관리 block에 `agent-task/archive/**`, `agent-roadmap/archive/**` 추가 | | `.claude/settings.json`, `opencode.json` | `agent-task/archive/**` 읽기/검색 제외 설정을 생성 또는 병합한다. `agent-roadmap/archive/**`는 필요 시 링크로 읽을 수 있어야 하므로 hard read/glob deny에서 제거한다 | @@ -162,7 +166,8 @@ common/rules.md와 내용이 중복되지 않도록 한다. ## 실행 (Execution) -지정한 대상 디렉토리에 agent-ops 스캐폴드를 생성한다. +지정한 대상 디렉토리에 agent-ops 기본 스캐폴드와 local 테스트 환경을 생성한다. +스크립트 실행 후 이 skill의 실행 절차에 따라 project/domain 분석을 보완한다. ```bash ./agent-ops/bin/init-agent-ops.sh @@ -197,11 +202,17 @@ common/rules.md와 내용이 중복되지 않도록 한다. - 신규 프로젝트: 핵심 domain placeholder 2~4개만 제안한다. domain rules를 과도하게 채우지 않는다 - 운영중 프로젝트: Core/Supporting/Generic 도메인을 식별하고 실제 경로를 반영한 초안을 생성한다 -7. **초기 skill 제안** +7. **초기 local 테스트 환경 생성** + - `init-agent-ops.sh`가 `agent-test/local/rules.md`를 최소 내용으로 자동 생성한다 + - `init-agent-ops.sh`가 `.gitignore`에 `agent-test/local/`과 `agent-test/runs/`를 자동 추가한다 + - 스크립트 실행 후 누락되었으면 대상 프로젝트의 `agent-ops/skills/common/create-test/SKILL.md`를 읽고 `env=local`, `test-case` 없음으로 보완한다 + - 상황별 테스트 문서는 초기화 단계에서 만들지 않는다 + +8. **초기 skill 제안** - 신규 프로젝트: 최소 2개만 제안한다 - 운영중 프로젝트: 반복 작업 기반으로 필요한 skill을 제안한다 -8. **결과 보고** +9. **결과 보고** - 상태 판별 결과, 생성된 파일 목록, 도메인 제안, skill 제안, 주의사항을 출력한다 ## 출력 형식 @@ -237,6 +248,8 @@ common/rules.md와 내용이 중복되지 않도록 한다. - [ ] 생성된 domain rules.md가 `domain-rule-template.md` 형식을 따르는가 - [ ] `rules/project/rules.md`의 도메인 매핑 테이블에 생성된 도메인이 모두 등록되어 있는가 - [ ] `.gitignore`에 `agent-ops/rules/private/` 항목이 추가되어 있는가 +- [ ] `agent-test/local/rules.md`가 생성되었는가 +- [ ] `.gitignore`에 `agent-test/local/`과 `agent-test/runs/`가 추가되어 있는가 - [ ] `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 Agent-Ops 관리 block이 있고 그 안에 `agent-task/archive/**`와 `agent-roadmap/archive/**`가 포함되어 있는가 - [ ] `.claude/settings.json`, `opencode.json`에 `agent-task/archive/**` 제외 설정이 있거나, 병합 불가 시 수동 병합 안내를 출력했는가 - [ ] `.claude/settings.json`, `opencode.json`에 `agent-roadmap/archive/**` hard read/glob deny가 남아 있지 않은가 @@ -248,6 +261,8 @@ common/rules.md와 내용이 중복되지 않도록 한다. - 진입 파일에 rules/common/rules.md 외 내용을 추가하지 않는다. - `agent-task/archive/**`와 `agent-roadmap/archive/**` 제외를 `.gitignore`에 추가하지 않는다. +- local 테스트 환경 파일을 git 추적 대상으로 만들지 않는다. +- 초기화 단계에서 상황별 테스트 문서를 임의 생성하지 않는다. - 실제 구조보다 앞선 추상 구조를 강요하지 않는다. - 처음부터 많은 domain / skill을 만들지 않는다. - rules/common/rules.md를 프로젝트에서 직접 수정하지 않는다. diff --git a/agent-ops/skills/common/router.md b/agent-ops/skills/common/router.md index 901e817..c4c350f 100644 --- a/agent-ops/skills/common/router.md +++ b/agent-ops/skills/common/router.md @@ -5,6 +5,8 @@ | agent-ops 세팅해줘, scaffold 만들어줘, 초기화해줘 | `agent-ops/skills/common/init-agent-ops/SKILL.md` | | domain rule 만들어줘, rules.md 생성, 새 도메인 규칙 | `agent-ops/skills/common/create-domain-rule/SKILL.md` | | skill 만들어줘, SKILL.md 생성, 새 스킬 추가 | `agent-ops/skills/common/create-skill/SKILL.md` | +| create-test, 테스트 룰 작성, 테스트 룰 생성, 테스트 규칙 작성, 테스트 규칙 생성, 테스트 환경 생성, 상황별 테스트 문서 생성, test rule 생성, agent-test 생성 | `agent-ops/skills/common/create-test/SKILL.md` | +| update-test, 테스트 룰 수정, 테스트 룰 갱신, 테스트 규칙 수정, 테스트 규칙 갱신, 테스트 환경 수정, 상황별 테스트 문서 수정, test rule 수정, agent-test 수정 | `agent-ops/skills/common/update-test/SKILL.md` | | README 작성해줘, README 만들어줘, 프로젝트 설명 문서 만들어줘 | `agent-ops/skills/common/create-readme/SKILL.md` | | 로드맵 만들어줘, roadmap 생성, 마일스톤 설계, goal/phase 구조 잡아줘 | `agent-ops/skills/common/create-roadmap/SKILL.md` | | 로드맵 업데이트, roadmap 갱신, 로드맵에 추가, 로드맵 작업 추가, 로드맵 기능 추가, 로드맵 Epic 추가, 로드맵 에픽 추가, 로드맵 Task 추가, 로드맵 태스크 추가, 로드맵 테스크 추가, 로드맵 TODO 추가, 마일스톤에 추가, 마일스톤 추가, 마일스톤 갱신, 마일스톤 아카이브, phase 추가, phase 변경, 페이즈 추가, 페이즈 변경, 현재 마일스톤 변경, 로드맵 한국어 전환, 로드맵 번역 | `agent-ops/skills/common/update-roadmap/SKILL.md` | diff --git a/agent-ops/skills/common/update-test/SKILL.md b/agent-ops/skills/common/update-test/SKILL.md new file mode 100644 index 0000000..ed5a0e6 --- /dev/null +++ b/agent-ops/skills/common/update-test/SKILL.md @@ -0,0 +1,92 @@ +--- +name: update-test +version: 1.0.1 +description: 기존 agent-test 환경 rules.md 또는 상황별 테스트 rule 문서를 수정하는 스킬 +--- + +# update-test + +## 목적 + +기존 `agent-test//rules.md` 또는 `agent-test//.md`를 최신 테스트 기준에 맞게 갱신한다. +라우팅은 3홉 안에 유지하고, 상황별 문서는 자체 완결되게 보완한다. + +## 언제 호출할지 + +- 기존 테스트 환경 규칙을 수정할 때 +- 상황별 테스트 기준, 명령, 판정 기준을 보완할 때 +- 테스트 라우팅을 추가, 제거, 정리할 때 + +## 입력 + +- `env`: `local`, `dev`, `qa`, `prod` 중 하나 (필수) +- `test-case`: 수정할 상황별 테스트 문서 이름, kebab-case (선택) +- `change`: 수정할 내용 요약 (필수) + +## 먼저 확인할 것 + +- [ ] `agent-ops/rules/common/rules.md`의 스킬 규칙과 테스트 규칙이 분리되어 있는지 확인한다. +- [ ] `agent-ops/skills/common/router.md`에 `update-test` 라우팅이 있는지 확인한다. +- [ ] `agent-test//rules.md` 존재 여부를 확인하고, 없으면 `create-test` 대상으로 보고 중단한다. +- [ ] `agent-test//rules.md`가 있으면 읽는다. +- [ ] `test-case`가 있으면 `agent-test//.md` 존재 여부를 확인하고, 없으면 `create-test` 대상으로 보고 중단한다. +- [ ] `test-case` 문서가 있으면 읽는다. +- [ ] 템플릿 구조 확인이 필요하면 `agent-ops/rules/common/_templates/`의 테스트 템플릿을 읽는다. +- [ ] 기존 라우팅이 3홉 안에 있는지 확인한다. + +## 실행 절차 + +1. **대상 확정** + - 환경 공통 규칙 변경이면 `agent-test//rules.md`만 수정한다. + - 특정 검증 기준 변경이면 해당 상황별 문서를 수정한다. + - 대상 문서가 없으면 생성하지 말고 `create-test` 대상이라고 보고한다. + +2. **문서 갱신** + - 기존 환경값, 명령, 금지 사항을 보존한다. + - 오래된 기준은 새 기준으로 교체하고 같은 뜻의 중복 문장은 줄인다. + - 상황별 문서는 읽기 조건, 적용 범위, 명령, 필수 검증, 판정 기준, 차단 기준을 자체 포함하게 유지한다. + - `last_rule_updated_at`은 수정일 `YYYY-MM-DD`로 갱신한다. + +3. **라우팅 갱신** + - env rules의 `## 라우팅`은 상황별 문서로만 향하게 한다. + - 맞지 않는 라우팅은 제거하거나 더 정확한 상황 설명으로 바꾼다. + - 상황별 문서에서 다른 테스트 문서로 이어지는 라우팅은 제거한다. + - 공통룰에서 스킬 최종 진입까지의 경로는 `rules.md` -> `router.md` -> `update-test/SKILL.md`로 유지한다. + +4. **local 추적 제외 확인** + - `env`가 `local`이면 `.gitignore`에 `agent-test/local/`과 `agent-test/runs/`가 있는지 확인하고 없으면 추가한다. + +5. **결과 보고** + - 수정한 파일 + - 바꾼 라우팅 + - 보존한 환경값 + - 남은 확인 필요 항목 + +## 실행 결과 검증 + +- [ ] 수정 대상 문서가 여전히 필수 섹션을 포함하는가 +- [ ] `rules.md` -> `router.md` -> `update-test/SKILL.md` 경로가 끊기지 않는가 +- [ ] env rules 라우팅이 3홉 제한을 넘기지 않는가 +- [ ] 상황별 문서가 다른 테스트 문서로 라우팅하지 않는가 +- [ ] local 수정 시 `.gitignore`에 local 경로가 반영되었는가 +- [ ] secret, token, 개인 endpoint 원문이 tracked 파일에 추가되지 않았는가 +- 검증 실패 시: 문제 문서만 다시 보완한다. + +## 출력 형식 + +```md +## 수정 완료 + +- 환경: +- 수정 파일: +- 라우팅 변경: <내용 또는 없음> +- 보존한 환경값: <요약> +- 확인 필요: <항목 또는 없음> +``` + +## 금지 사항 + +- 기존 local 환경값을 추측으로 바꾸지 않는다. +- 확인되지 않은 테스트 명령을 필수 검증으로 단정하지 않는다. +- 상황별 문서를 router처럼 쓰지 않는다. +- secret, token, 개인 endpoint 원문을 tracked 파일에 기록하지 않는다.