From cd475a7bc876a77527c5bfdb2bc61945baede8d9 Mon Sep 17 00:00:00 2001 From: toki Date: Sat, 30 May 2026 06:02:47 +0900 Subject: [PATCH] update agent-ops files and bump version --- agent-ops/.version | 2 +- agent-ops/bin/init-agent-ops.sh | 192 +++++++++++++++++- .../_templates/test-case-rule-template.md | 16 +- .../_templates/test-env-rules-template.md | 6 +- agent-ops/rules/common/rules.md | 2 +- agent-ops/skills/common/create-test/SKILL.md | 69 +++++-- .../skills/common/init-agent-ops/SKILL.md | 14 +- agent-ops/skills/common/router.md | 4 +- agent-ops/skills/common/update-test/SKILL.md | 37 ++-- 9 files changed, 293 insertions(+), 49 deletions(-) diff --git a/agent-ops/.version b/agent-ops/.version index 40124e2..2088b5b 100644 --- a/agent-ops/.version +++ b/agent-ops/.version @@ -1 +1 @@ -1.1.99 +1.1.101 diff --git a/agent-ops/bin/init-agent-ops.sh b/agent-ops/bin/init-agent-ops.sh index eadb96d..ffdb654 100755 --- a/agent-ops/bin/init-agent-ops.sh +++ b/agent-ops/bin/init-agent-ops.sh @@ -65,10 +65,170 @@ ensure_gitignore_entry() { fi } +discover_agent_test_domains() { + local target_dir="$1" + local domain_root="$target_dir/agent-ops/rules/project/domain" + local project_rules="$target_dir/agent-ops/rules/project/rules.md" + + if [ -d "$domain_root" ]; then + find "$domain_root" -mindepth 2 -maxdepth 2 -name rules.md -print \ + | while IFS= read -r rule_file; do + basename "$(dirname "$rule_file")" + done + fi + + if [ -f "$project_rules" ]; then + grep -Eo 'agent-ops/rules/project/domain/[^/`[:space:]]+/rules\.md' "$project_rules" \ + | awk -F/ '{ print $(NF-1) }' + fi +} + +ensure_agent_test_route() { + local rules_file="$1" + local route_line="$2" + local placeholder="- 현재 등록된 도메인/검증 시나리오별 테스트 문서 없음." + local tmp + + if grep -qxF -- "$route_line" "$rules_file"; then + return + fi + + tmp="$(mktemp "$rules_file.tmp.XXXXXX")" + if grep -qxF -- "$placeholder" "$rules_file"; then + awk -v placeholder="$placeholder" -v route_line="$route_line" ' + $0 == placeholder { print route_line; next } + { print } + ' "$rules_file" > "$tmp" + else + awk -v route_line="$route_line" ' + BEGIN { added = 0 } + { print } + !added && $0 == "## 라우팅" { + print "" + print route_line + added = 1 + } + END { + if (!added) { + print "" + print "## 라우팅" + print "" + print route_line + } + } + ' "$rules_file" > "$tmp" + fi + mv "$tmp" "$rules_file" +} + +ensure_agent_test_profile() { + local target_dir="$1" + local env="$2" + local profile="$3" + local domain="$4" + local verification_type="$5" + local scope="$6" + local today="$7" + local profile_file="$target_dir/agent-test/$env/$profile.md" + local rules_file="$target_dir/agent-test/$env/rules.md" + local route_line + + mkdir -p "$(dirname "$profile_file")" + + if [ ! -f "$profile_file" ]; then + cat > "$profile_file" < + +## 분류 + +- domain: $domain +- verification_type: $verification_type +- scope: $scope + +## 환경 + +- host: +- port: +- runtime: +- package manager: +- docker: +- external service: +- model endpoint: +- credential: + +## 명령 + +- setup: +- lint: +- unit: +- smoke: +- e2e: +- model: +- full-cycle: + +## 필수 검증 + +- <확인 필요> + +## 보조 검증 + +- <확인 필요> + +## 판정 기준 + +- <확인 필요> + +## 기준 출력 예시 + +\`\`\`text +<필요한 경우 기대 출력 예시> +\`\`\` + +## 차단 기준 + +- <확인 필요> + +## 보고 항목 + +- 실행한 명령: +- 성공한 검증: +- 실패/차단된 검증: +- 생략 사유: +- 남은 위험: + +## 금지 사항 + +- 확인되지 않은 host, port, token, endpoint를 추측해 쓰지 않는다. +- secret, token, 개인 endpoint 원문은 tracked 파일에 기록하지 않는다. +EOF + fi + + route_line="- $domain / $verification_type / $scope: \`agent-test/$env/$profile.md\`" + ensure_agent_test_route "$rules_file" "$route_line" +} + ensure_agent_test_local() { local target_dir="$1" local local_rules="$target_dir/agent-test/local/rules.md" local today + local domain + local created_domain_profile="0" today="$(date +%F)" mkdir -p "$(dirname "$local_rules")" @@ -106,14 +266,40 @@ last_rule_updated_at: $today ## 라우팅 -- 현재 등록된 상황별 테스트 문서 없음. +- 현재 등록된 도메인/검증 시나리오별 테스트 문서 없음. ## 라우팅 규칙 - 여러 항목이 맞으면 모두 읽는다. -- 상황별 문서는 다른 테스트 문서로 라우팅하지 않는다. +- 도메인 매핑이나 domain rule이 있으면 각 도메인의 -smoke 문서를 기본 baseline으로 둔다. +- 도메인이 아직 없을 때만 project-smoke를 fallback baseline으로 둔다. +- 도메인/검증 시나리오별 문서는 다른 테스트 문서로 라우팅하지 않는다. EOF fi + + while IFS= read -r domain; do + [ -n "$domain" ] || continue + created_domain_profile="1" + ensure_agent_test_profile \ + "$target_dir" \ + "local" \ + "$domain-smoke" \ + "$domain" \ + "smoke" \ + "도메인 기본 smoke 검증" \ + "$today" + done < <(discover_agent_test_domains "$target_dir" | sort -u) + + if [ "$created_domain_profile" = "0" ]; then + ensure_agent_test_profile \ + "$target_dir" \ + "local" \ + "project-smoke" \ + "project-wide" \ + "smoke" \ + "프로젝트 기본 smoke 검증" \ + "$today" + fi } echo "Initializing agent-ops in: $TARGET_DIR" @@ -153,4 +339,4 @@ 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." +echo "Note: agent-test/local rules and baseline test profiles are 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 index 00353f7..536adba 100644 --- a/agent-ops/rules/common/_templates/test-case-rule-template.md +++ b/agent-ops/rules/common/_templates/test-case-rule-template.md @@ -1,19 +1,27 @@ --- test_env: -test_case: +test_profile: +domain: +verification_type: last_rule_updated_at: --- -# 테스트 +# 테스트 ## 읽기 조건 -- <이 상황의 테스트, 검증, 실행 조건 판단이 필요한 경우> +- <이 도메인/검증 시나리오의 테스트, 검증, 실행 조건 판단이 필요한 경우> ## 적용 범위 - <검증 대상 entrypoint, command, API, UX, profile, service> +## 분류 + +- domain: +- verification_type: +- scope: <검증 대상 변경 범위 요약> + ## 환경 - host: @@ -67,5 +75,5 @@ last_rule_updated_at: ## 금지 사항 -- <이 상황 검증에서 하면 안 되는 것> +- <이 도메인/검증 시나리오에서 하면 안 되는 것> - 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 index a936244..66cca94 100644 --- a/agent-ops/rules/common/_templates/test-env-rules-template.md +++ b/agent-ops/rules/common/_templates/test-env-rules-template.md @@ -28,9 +28,11 @@ last_rule_updated_at: ## 라우팅 -- <상황/변경 범위>: `agent-test//.md` +- / / : `agent-test//.md` ## 라우팅 규칙 - 여러 항목이 맞으면 모두 읽는다. -- 상황별 문서는 다른 테스트 문서로 라우팅하지 않는다. +- 도메인 매핑이나 domain rule이 있으면 각 도메인의 `-smoke` 문서를 기본 baseline으로 둔다. +- 도메인이 아직 없을 때만 `project-smoke`를 fallback baseline으로 둔다. +- 도메인/검증 시나리오별 문서는 다른 테스트 문서로 라우팅하지 않는다. diff --git a/agent-ops/rules/common/rules.md b/agent-ops/rules/common/rules.md index e1c9503..7862e61 100644 --- a/agent-ops/rules/common/rules.md +++ b/agent-ops/rules/common/rules.md @@ -27,7 +27,7 @@ - agent-ops 초기화 - domain rule 생성 - skill 생성 -- 테스트 룰 작성/생성/수정, create-test/update-test +- 테스트 룰 작성/생성/수정, 도메인별/검증 시나리오별 테스트 문서, create-test/update-test - README 생성 - 로드맵/마일스톤 생성·갱신 - 로드맵 현지점 / 현재 작업 지점 확인 diff --git a/agent-ops/skills/common/create-test/SKILL.md b/agent-ops/skills/common/create-test/SKILL.md index 0449dbe..441a0e6 100644 --- a/agent-ops/skills/common/create-test/SKILL.md +++ b/agent-ops/skills/common/create-test/SKILL.md @@ -1,37 +1,51 @@ --- name: create-test -version: 1.0.2 -description: agent-test 환경 rules.md 또는 상황별 테스트 rule 문서를 생성하는 스킬 +version: 1.1.1 +description: agent-test 환경 rules.md와 도메인/검증 시나리오별 테스트 rule 문서를 생성하는 스킬 --- # create-test ## 목적 -`agent-test//rules.md` 또는 `agent-test//.md`를 템플릿 기준으로 생성한다. -공통 진입점은 얇게 유지하고, 실제 테스트 기준은 환경/상황별 문서에 둔다. +`agent-test//rules.md`와 `agent-test//.md`를 템플릿 기준으로 생성한다. +공통 진입점은 얇게 유지하고, 실제 테스트 기준은 환경/도메인/검증 시나리오별 문서에 둔다. + +`test-case`는 기존 호출과의 호환을 위한 alias이며, 새 문서 기준 이름은 `test-profile`이다. ## 언제 호출할지 - 새 테스트 환경을 추가할 때 - 특정 환경의 `rules.md`가 없을 때 -- 새 상황별 테스트 문서와 라우팅을 추가할 때 +- 새 도메인/검증 시나리오별 테스트 문서와 라우팅을 추가할 때 - `init-agent-ops` 후 local 테스트 환경 보완이 필요할 때 ## 입력 - `env`: `local`, `dev`, `qa`, `prod` 중 하나 (필수) -- `test-case`: 상황별 테스트 문서 이름, kebab-case (선택) +- `test-profile`: 도메인/검증 시나리오별 테스트 문서 이름, kebab-case (선택) +- `test-case`: `test-profile`의 호환 alias (선택) +- `domain`: 대상 도메인 이름, kebab-case (선택) +- `verification-type`: `smoke`, `unit`, `integration`, `e2e`, `model`, `migration`, `manual`, `full-cycle` 중 하나 (선택) - `scope`: 검증 대상 또는 변경 범위 설명 (선택) +## 핵심 규칙 + +- 도메인 매핑이나 domain rule에서 도메인이 하나 이상 확인되면, 누락된 `agent-test//-smoke.md`를 도메인별로 항상 생성한다. +- 명시 `test-profile`은 추가 생성 대상이다. 명시 대상만 만들고 도메인 baseline을 생략하지 않는다. +- 도메인이 하나도 확인되지 않을 때만 `agent-test//project-smoke.md`를 fallback baseline으로 만든다. + ## 먼저 확인할 것 - [ ] `agent-ops/rules/common/rules.md`의 스킬 규칙과 테스트 규칙이 분리되어 있는지 확인한다. - [ ] `agent-ops/skills/common/router.md`에 `create-test` 라우팅이 있는지 확인한다. +- [ ] `agent-ops/rules/project/rules.md`가 있으면 도메인 매핑 테이블을 확인한다. +- [ ] `agent-ops/rules/project/domain/` 하위 domain rule 목록을 확인한다. +- [ ] 테스트 명령 확인을 위해 프로젝트의 대표 설정 파일을 가볍게 확인한다. 예: `package.json`, `Makefile`, `pyproject.toml`, `go.mod`, `Cargo.toml`, `docker-compose*.yml`, `.github/workflows/**`. - [ ] `agent-ops/rules/common/_templates/test-env-rules-template.md`를 읽는다. -- [ ] `test-case`가 있으면 `agent-ops/rules/common/_templates/test-case-rule-template.md`를 읽는다. +- [ ] `agent-ops/rules/common/_templates/test-case-rule-template.md`를 읽는다. - [ ] `agent-test//rules.md` 존재 여부를 확인한다. -- [ ] `test-case`가 있으면 `agent-test//.md` 존재 여부를 확인한다. +- [ ] 도메인 baseline과 추가 생성 대상 `agent-test//*.md`의 존재 여부를 확인한다. ## 실행 절차 @@ -41,23 +55,38 @@ description: agent-test 환경 rules.md 또는 상황별 테스트 rule 문서 - 제목 바로 아래 정독 필수 문구를 유지한다. - `last_rule_updated_at`은 생성일 `YYYY-MM-DD`로 쓴다. -2. **상황별 문서 생성** - - `test-case`가 있으면 `agent-test//.md`를 `test-case-rule-template.md` 형식으로 만든다. +2. **생성 대상 확정** + - `test-case`가 있고 `test-profile`이 없으면 `test-profile`로 취급한다. + - 도메인 매핑 테이블과 `agent-ops/rules/project/domain/*/rules.md`에서 확인된 전체 도메인 목록을 만든다. + - 확인된 도메인이 있으면 전체 도메인의 `-smoke` 문서를 생성 대상으로 삼는다. 개수가 많아도 생략하지 않는다. + - 확인된 도메인이 없으면 `project-smoke` 문서 1개를 fallback baseline으로 생성 대상으로 삼는다. + - `test-profile`이 있으면 baseline 생성 대상에 해당 문서 1개를 추가한다. + - `test-profile`이 없고 `domain`이 있으면 `-` 형식의 문서를 추가한다. `verification-type`이 없으면 `smoke`를 기본값으로 둔다. + - `test-profile`과 `domain`이 모두 없고 `scope`가 특정 검증 시나리오를 가리키면, 해당 도메인의 `-` 문서를 baseline 외 추가 생성 대상으로 둘 수 있다. + - 도메인은 새로 발명하지 않는다. 도메인 매핑이나 domain rule에서 확인되지 않은 이름은 `project-wide`로 기록한다. + +3. **도메인/검증 시나리오별 문서 생성** + - 생성 대상마다 `agent-test//.md`를 `test-case-rule-template.md` 형식으로 만든다. + - frontmatter에는 `test_profile`, `domain`, `verification_type`, `last_rule_updated_at`을 채운다. + - 파일명은 kebab-case로 쓴다. - 실제 확인된 환경, 명령, 판정 기준만 채운다. - 불확실한 값은 비워 두거나 `<확인 필요>`로 둔다. + - 테스트 코드를 생성하는 스킬이 아니라 테스트 판단 기준 문서를 생성하는 스킬임을 유지한다. -3. **라우팅 갱신** +4. **라우팅 갱신** - 새 환경을 만들었고 `agent-ops/rules/common/rules.md`에 해당 env 라인이 없으면 `# 테스트 규칙`에 한 줄을 추가한다. - - `test-case` 문서를 만들었으면 `agent-test//rules.md`의 `## 라우팅`에 해당 문서 한 줄을 추가한다. - - 상황별 문서에서 다른 테스트 문서로 라우팅하지 않는다. + - 생성한 `test-profile` 문서는 `agent-test//rules.md`의 `## 라우팅`에 한 줄씩 추가한다. + - 라우팅 설명은 ` / / ` 형식으로 쓴다. + - 도메인/검증 시나리오별 문서에서 다른 테스트 문서로 라우팅하지 않는다. - 공통룰에서 스킬 최종 진입까지의 경로는 `rules.md` -> `router.md` -> `create-test/SKILL.md`로 유지한다. -4. **local 추적 제외** +5. **local 추적 제외** - `env`가 `local`이면 `.gitignore`에 `agent-test/local/`과 `agent-test/runs/`가 있는지 확인하고 없으면 추가한다. -5. **결과 보고** +6. **결과 보고** - 생성한 파일 - 추가한 라우팅 + - 자동 생성 기준: 도메인 baseline / 명시 입력 / scope 매칭 / project-smoke fallback - 비워 둔 확인 필요 항목 ## 실행 결과 검증 @@ -65,7 +94,9 @@ description: agent-test 환경 rules.md 또는 상황별 테스트 rule 문서 - [ ] 생성 파일이 해당 템플릿의 필수 섹션을 포함하는가 - [ ] `rules.md` -> `router.md` -> `create-test/SKILL.md` 경로가 끊기지 않는가 - [ ] `agent-test//rules.md`가 3홉을 넘는 라우팅을 만들지 않는가 -- [ ] 새 상황별 문서가 env rules의 라우팅에 연결되었는가 +- [ ] 새 도메인/검증 시나리오별 문서가 env rules의 라우팅에 연결되었는가 +- [ ] 확인된 모든 도메인에 `-smoke` 문서가 생성되었는가 +- [ ] 도메인이 없을 때 `project-smoke` fallback 문서가 생성되었는가 - [ ] local 생성 시 `.gitignore`에 local 경로가 반영되었는가 - 검증 실패 시: 누락된 파일/섹션/라우팅만 보완한다. @@ -76,14 +107,16 @@ description: agent-test 환경 rules.md 또는 상황별 테스트 rule 문서 - 환경: - 환경 rules: agent-test//rules.md -- 상황별 rule: agent-test//.md +- 테스트 profiles: /.md 목록> - 라우팅 추가: <내용> +- 자동 생성 기준: <도메인 baseline | 명시 입력 | scope 매칭 | project-smoke fallback> - 확인 필요: <항목 또는 없음> ``` ## 금지 사항 - 기존 테스트 문서를 덮어쓰지 않는다. -- 상황별 문서에서 추가 테스트 문서로 라우팅하지 않는다. +- 도메인/검증 시나리오별 문서에서 추가 테스트 문서로 라우팅하지 않는다. +- 도메인 매핑이나 domain rule에 없는 도메인을 확정값처럼 만들지 않는다. - 확인되지 않은 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 af5ca9c..3a08769 100644 --- a/agent-ops/skills/common/init-agent-ops/SKILL.md +++ b/agent-ops/skills/common/init-agent-ops/SKILL.md @@ -74,6 +74,8 @@ description: 프로젝트 상태를 판별하고 agent-ops 기본 스캐폴드 | `agent-ops/rules/private/` | 폴더만 생성 (내용은 개인이 작성) | | `.gitignore`에 `agent-ops/rules/private/` 추가 | git 추적 제외 | | `agent-test/local/rules.md` | `init-agent-ops.sh`가 최소 내용으로 생성 | +| `agent-test/local/project-smoke.md` | 도메인이 아직 없으면 `init-agent-ops.sh`가 fallback baseline으로 생성 | +| `agent-test/local/-smoke.md` | domain rule 생성 후 각 도메인별 기본 smoke 테스트 뼈대로 생성 | | `.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에서 제거한다 | @@ -204,9 +206,12 @@ common/rules.md와 내용이 중복되지 않도록 한다. 7. **초기 local 테스트 환경 생성** - `init-agent-ops.sh`가 `agent-test/local/rules.md`를 최소 내용으로 자동 생성한다 + - `init-agent-ops.sh`는 기존 domain rule이 있으면 각 도메인별 `agent-test/local/-smoke.md`를 생성하고 라우팅한다 + - 기존 domain rule이 없으면 `agent-test/local/project-smoke.md` fallback 뼈대를 생성하고 라우팅한다 - `init-agent-ops.sh`가 `.gitignore`에 `agent-test/local/`과 `agent-test/runs/`를 자동 추가한다 - - 스크립트 실행 후 누락되었으면 대상 프로젝트의 `agent-ops/skills/common/create-test/SKILL.md`를 읽고 `env=local`, `test-case` 없음으로 보완한다 - - 상황별 테스트 문서는 초기화 단계에서 만들지 않는다 + - 스크립트 실행 후 누락되었으면 대상 프로젝트의 `agent-ops/skills/common/create-test/SKILL.md`를 읽고 `env=local`, `test-profile` 없음으로 보완한다 + - domain rule을 새로 생성한 경우, 각 생성 도메인마다 `agent-test/local/-smoke.md` 기본 뼈대를 만들고 `agent-test/local/rules.md`에 라우팅을 추가한다 + - 도메인별 테스트 문서는 상세 명령을 모르면 `<확인 필요>`를 남기더라도 생략하지 않는다 8. **초기 skill 제안** - 신규 프로젝트: 최소 2개만 제안한다 @@ -249,6 +254,9 @@ common/rules.md와 내용이 중복되지 않도록 한다. - [ ] `rules/project/rules.md`의 도메인 매핑 테이블에 생성된 도메인이 모두 등록되어 있는가 - [ ] `.gitignore`에 `agent-ops/rules/private/` 항목이 추가되어 있는가 - [ ] `agent-test/local/rules.md`가 생성되었는가 +- [ ] 생성되었거나 기존에 있던 모든 domain rule에 대응하는 `agent-test/local/-smoke.md`가 있는가 +- [ ] domain rule이 아직 없으면 `agent-test/local/project-smoke.md` fallback이 있는가 +- [ ] `agent-test/local/rules.md`에 생성된 테스트 profile 라우팅이 연결되었는가 - [ ] `.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/**` 제외 설정이 있거나, 병합 불가 시 수동 병합 안내를 출력했는가 @@ -262,7 +270,7 @@ common/rules.md와 내용이 중복되지 않도록 한다. - 진입 파일에 rules/common/rules.md 외 내용을 추가하지 않는다. - `agent-task/archive/**`와 `agent-roadmap/archive/**` 제외를 `.gitignore`에 추가하지 않는다. - local 테스트 환경 파일을 git 추적 대상으로 만들지 않는다. -- 초기화 단계에서 상황별 테스트 문서를 임의 생성하지 않는다. +- domain rule이 확인된 경우 도메인별 기본 smoke 테스트 문서를 생략하지 않는다. - 실제 구조보다 앞선 추상 구조를 강요하지 않는다. - 처음부터 많은 domain / skill을 만들지 않는다. - rules/common/rules.md를 프로젝트에서 직접 수정하지 않는다. diff --git a/agent-ops/skills/common/router.md b/agent-ops/skills/common/router.md index c4c350f..6fd0c69 100644 --- a/agent-ops/skills/common/router.md +++ b/agent-ops/skills/common/router.md @@ -5,8 +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` | +| 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 index ed5a0e6..1585a3f 100644 --- a/agent-ops/skills/common/update-test/SKILL.md +++ b/agent-ops/skills/common/update-test/SKILL.md @@ -1,36 +1,42 @@ --- name: update-test -version: 1.0.1 -description: 기존 agent-test 환경 rules.md 또는 상황별 테스트 rule 문서를 수정하는 스킬 +version: 1.1.0 +description: 기존 agent-test 환경 rules.md 또는 도메인/검증 시나리오별 테스트 rule 문서를 수정하는 스킬 --- # update-test ## 목적 -기존 `agent-test//rules.md` 또는 `agent-test//.md`를 최신 테스트 기준에 맞게 갱신한다. -라우팅은 3홉 안에 유지하고, 상황별 문서는 자체 완결되게 보완한다. +기존 `agent-test//rules.md` 또는 `agent-test//.md`를 최신 테스트 기준에 맞게 갱신한다. +라우팅은 3홉 안에 유지하고, 도메인/검증 시나리오별 문서는 자체 완결되게 보완한다. + +`test-case`는 기존 호출과의 호환을 위한 alias이며, 새 문서 기준 이름은 `test-profile`이다. ## 언제 호출할지 - 기존 테스트 환경 규칙을 수정할 때 -- 상황별 테스트 기준, 명령, 판정 기준을 보완할 때 +- 도메인/검증 시나리오별 테스트 기준, 명령, 판정 기준을 보완할 때 - 테스트 라우팅을 추가, 제거, 정리할 때 ## 입력 - `env`: `local`, `dev`, `qa`, `prod` 중 하나 (필수) -- `test-case`: 수정할 상황별 테스트 문서 이름, kebab-case (선택) +- `test-profile`: 수정할 도메인/검증 시나리오별 테스트 문서 이름, kebab-case (선택) +- `test-case`: `test-profile`의 호환 alias (선택) +- `domain`: 대상 도메인 이름, kebab-case (선택) - `change`: 수정할 내용 요약 (필수) ## 먼저 확인할 것 - [ ] `agent-ops/rules/common/rules.md`의 스킬 규칙과 테스트 규칙이 분리되어 있는지 확인한다. - [ ] `agent-ops/skills/common/router.md`에 `update-test` 라우팅이 있는지 확인한다. +- [ ] `test-case`가 있고 `test-profile`이 없으면 `test-profile`로 취급한다. - [ ] `agent-test//rules.md` 존재 여부를 확인하고, 없으면 `create-test` 대상으로 보고 중단한다. - [ ] `agent-test//rules.md`가 있으면 읽는다. -- [ ] `test-case`가 있으면 `agent-test//.md` 존재 여부를 확인하고, 없으면 `create-test` 대상으로 보고 중단한다. -- [ ] `test-case` 문서가 있으면 읽는다. +- [ ] `test-profile`이 있으면 `agent-test//.md` 존재 여부를 확인하고, 없으면 `create-test` 대상으로 보고 중단한다. +- [ ] `test-profile` 문서가 있으면 읽는다. +- [ ] `test-profile`이 없고 `domain` 또는 `change`가 특정 도메인/검증 시나리오를 가리키면 env rules의 라우팅에서 대상 문서를 찾는다. - [ ] 템플릿 구조 확인이 필요하면 `agent-ops/rules/common/_templates/`의 테스트 템플릿을 읽는다. - [ ] 기존 라우팅이 3홉 안에 있는지 확인한다. @@ -38,19 +44,20 @@ description: 기존 agent-test 환경 rules.md 또는 상황별 테스트 rule 1. **대상 확정** - 환경 공통 규칙 변경이면 `agent-test//rules.md`만 수정한다. - - 특정 검증 기준 변경이면 해당 상황별 문서를 수정한다. + - 특정 도메인/검증 기준 변경이면 해당 `test-profile` 문서를 수정한다. + - 특정 대상이 암시되지만 라우팅에서 찾지 못하면 생성하지 말고 `create-test` 대상이라고 보고한다. - 대상 문서가 없으면 생성하지 말고 `create-test` 대상이라고 보고한다. 2. **문서 갱신** - 기존 환경값, 명령, 금지 사항을 보존한다. - 오래된 기준은 새 기준으로 교체하고 같은 뜻의 중복 문장은 줄인다. - - 상황별 문서는 읽기 조건, 적용 범위, 명령, 필수 검증, 판정 기준, 차단 기준을 자체 포함하게 유지한다. + - 도메인/검증 시나리오별 문서는 읽기 조건, 적용 범위, 명령, 필수 검증, 판정 기준, 차단 기준을 자체 포함하게 유지한다. - `last_rule_updated_at`은 수정일 `YYYY-MM-DD`로 갱신한다. 3. **라우팅 갱신** - - env rules의 `## 라우팅`은 상황별 문서로만 향하게 한다. - - 맞지 않는 라우팅은 제거하거나 더 정확한 상황 설명으로 바꾼다. - - 상황별 문서에서 다른 테스트 문서로 이어지는 라우팅은 제거한다. + - env rules의 `## 라우팅`은 도메인/검증 시나리오별 문서로만 향하게 한다. + - 맞지 않는 라우팅은 제거하거나 더 정확한 `domain / verification-type / scope` 설명으로 바꾼다. + - 도메인/검증 시나리오별 문서에서 다른 테스트 문서로 이어지는 라우팅은 제거한다. - 공통룰에서 스킬 최종 진입까지의 경로는 `rules.md` -> `router.md` -> `update-test/SKILL.md`로 유지한다. 4. **local 추적 제외 확인** @@ -67,7 +74,7 @@ description: 기존 agent-test 환경 rules.md 또는 상황별 테스트 rule - [ ] 수정 대상 문서가 여전히 필수 섹션을 포함하는가 - [ ] `rules.md` -> `router.md` -> `update-test/SKILL.md` 경로가 끊기지 않는가 - [ ] env rules 라우팅이 3홉 제한을 넘기지 않는가 -- [ ] 상황별 문서가 다른 테스트 문서로 라우팅하지 않는가 +- [ ] 도메인/검증 시나리오별 문서가 다른 테스트 문서로 라우팅하지 않는가 - [ ] local 수정 시 `.gitignore`에 local 경로가 반영되었는가 - [ ] secret, token, 개인 endpoint 원문이 tracked 파일에 추가되지 않았는가 - 검증 실패 시: 문제 문서만 다시 보완한다. @@ -88,5 +95,5 @@ description: 기존 agent-test 환경 rules.md 또는 상황별 테스트 rule - 기존 local 환경값을 추측으로 바꾸지 않는다. - 확인되지 않은 테스트 명령을 필수 검증으로 단정하지 않는다. -- 상황별 문서를 router처럼 쓰지 않는다. +- 도메인/검증 시나리오별 문서를 router처럼 쓰지 않는다. - secret, token, 개인 endpoint 원문을 tracked 파일에 기록하지 않는다.