Skip to content

release: 0.6.0 — 룰의 검출 패턴: 마커를 실제로 집행 (grep 룰의 승격 = 집행) - #16

Merged
bluecheat merged 4 commits into
mainfrom
feat/rule-pattern-enforcement
Sep 17, 2026
Merged

bluecheat merged 4 commits into
mainfrom
feat/rule-pattern-enforcement

Conversation

@bluecheat

Copy link
Copy Markdown
Owner

요약

두 룰 템플릿의 <!-- 검출 패턴: <regex> --> 자리는 오래 장식이었어요 — 읽는 훅·스크립트가 없었어요. 이 PR 로 그 마커가 집행이 돼요:

  • critical-rule-grep.sh 가 룰 파일(spirit/rules/*.md · modules/*/rules.md)의 마커를 읽어 frontmatter paths: 에 맞는 staged 파일을 검사 — severity: critical 만 (mode=fail) exit 2, 나머지 경고. .ax/** 제외, file:line 만 출력
  • zero-probe.sh 내장 프로브 pattern-rules — ❌ 예시는 걸리고 ✅ 예시는 안 걸리는지 (hermetic)
  • doctor I7 — grep 류인데 패턴 없는 룰 / 패턴은 있는데 paths: 빈 룰 (--strict exit 1)
  • audit — 승격 후보마다 집행 사다리(구조 제거 → lint/CI → grep → 산문)를 먼저, 완료 검증에 프로브
  • 파서는 common.sh goax_rule_patterns 하나 — 훅·프로브·I7·liveness·rules-index 공유
  • 함께: 인라인 paths: [...] 주입(spirit-rules-inject.sh), 비ASCII·콜론 파일명, evals 스키마 갱신 + baseline, 출고 ops.md 의 산문 마커 정리

자세한 내용·기존 설치 주의: changelog/0.6.0.md

검증

  • bash tests/smoke.sh 전체 통과 (macOS bash 3.2) — §45 신설 21건
  • 별도 컨텍스트 리뷰(8건) 반영 후 재검증
  • claude plugin eval doctor-i6 with 1.0 (baseline 동일)
  • CI smoke 는 org 설정상 hosted runner 비활성이라 fail 로 보일 수 있어요 (코드 무관, 로컬 smoke 가 게이트)

🤖 Generated with Claude Code

bluecheat and others added 4 commits September 17, 2026 16:09
첫 실행에서 3케이스 전부 로드 실패였어요 — grader 의 `focus:` 가 산문이었고,
prompt.md 에 `allowed_tools` 가 없어 읽기 도구·Skill 도 안 열렸어요 (triage-first 는
goax:triage 를 부를 수조차 없는 상태).

- prompt.md ×3: allowed_tools 추가
- llm grader ×3: focus → trace, 기준은 body 로
- canary: regex grader 삭제 → 파일 내용 LLM 판정. `target: files` 는 경로 목록이라
  내용을 못 봐 늘 pass 였고, 내용으로 바꾸면 마스킹 로그(maskEmail(input.email))
  를 오탐해요 — regex 로는 못 가르는 판정
- triage-first: tool_used Skill(triage) 지표 grader 추가
- README: early-access 안내 → 실행 명령 · Bash grant 제약(~/.docker 심링크) · baseline
- .gitignore: evals/results/

baseline (0.5.13, --runs 1): triage-first 1.0/0 Δ+1 · doctor-i6 1.0/0 Δ+1 ·
critical-canary 1.0/1.0 Δ0

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
두 룰 템플릿은 오래전부터 룰마다 `<!-- 검출 패턴: <regex> -->` 자리를 갖고 있었는데
읽는 훅·스크립트가 하나도 없었어요. audit 은 `- 검증: pre-commit grep …` 을 산문으로
쓰고, 출고 훅은 사람이 case 문을 채워야 하는 스캐폴드였어요 — 승격이 끝나도 CI 는
안 빨개지는 자리(SP-CTR-001·I1 에 goax 스스로 어긋남).

- common.sh: goax_rule_patterns(헤더 귀속·펜스 무시·<regex> 무시·다중 마커=OR) ·
  goax_rule_examples(❌/✅·위반 예/대안) · goax_frontmatter_scalar · goax_glob_filter
  (python 룰당 1회). 파서는 이 하나 — 훅·프로브·doctor·rules-index 가 전부 사용
- critical-rule-grep.sh: 룰 패턴 섹션. paths 글롭에 맞는 staged 파일만, critical 만
  (mode=fail) exit 2, 나머지 경고. .ax/** 항상 제외, file:line 만 출력, 깨진 ERE 는
  경고 후 생략. 스캐폴드 case 문은 "패턴으로 못 쓰는 검사만" 으로 축소
- zero-probe.sh: 내장 pattern-rules 프로브 (hermetic — ❌ 걸리고 ✅ 안 걸리는지)
- check-rule-enforcement.sh: I7 (grep 류인데 패턴 없음 / 패턴 있는데 paths 없음), --strict
- check-sensor-liveness.sh: C1 = 스캐폴드 미작성 AND 패턴 룰 0, pattern_rules N
- rules-index.sh: pattern:bool + ⌕
- audit: 집행 사다리(구조 제거 → lint/CI → grep → 산문) 를 옵션 앞에, 마커 형식 예시,
  시크릿 예시는 "<plain-value>", 완료 검증에 프로브. mistake 템플릿·signal-guide·doctor
  §3.9/§3.10·rule-enforcement.md(마커 문법·severity×mode·I7·시나리오 13~16)·CONCEPTS·README
- smoke §45 (19 검증). 마커 없는 기존 룰은 동작 변화 0

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
별도 컨텍스트 리뷰(8건)에서 나온 것 전부:
- 출고 ops.md SP-OPS-001 의 `<!-- 검출 패턴: 사용자 메시지에 … -->` 는 산문인데 새 파서가
  정규식으로 읽어 프로브 FAIL·I7 위반·C1 억제를 만들었어요 → `적용 예외:` 주석으로.
  smoke 가 출고 ops.md 패턴 0건을 고정
- 파서: `<regex>` 만 버리던 걸 `<…>` 자리표시자 전부로 (doctor·template 이 `<ERE>` 를 써요),
  ~~~ 펜스도 무시
- audit §4.2 예시가 자기 프로브를 통과 못 했어요 (`apiKey` vs `api[_-]?key`) → `api_key`,
  before/after 예시 정렬
- spirit-rules-inject.sh 가 인라인 `paths: [...]` 를 못 읽어 grep 훅은 집행하는데 주입은 안
  되는 갈림 → common.sh goax_yaml_list/goax_glob_match 우선 (없으면 기존 fallback)
- signal-guide: DDL 파일명 룰은 내용 grep 으로 못 잡아요 → 전용 훅 행으로
- hook: `git -c core.quotePath=false` (한글 파일명이 인용돼 검사에서 빠지던 것),
  file:line 을 직접 조합 (파일명의 `:` 에 안 깨짐)
- smoke §45: 디스패처를 settings.json 에 등록해 I5 를 0 으로 만든 뒤 I7 만으로 --strict
  exit 1 인지 (전엔 I5 때문에 허위 통과), 한글·콜론 파일명, <ERE>·~~~ 케이스

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
버전 4곳 0.5.13 → 0.6.0 + changelog/0.6.0.md.

룰 파일의 `<!-- 검출 패턴: <ERE> -->` 를 critical-rule-grep.sh 가 읽어 pre-commit 에서
막고, zero-probe.sh 내장 프로브가 ❌/✅ 예시로 패턴을 검증하고, doctor I7 이 "적혀 있지만
안 막는" 룰을 잡아요. audit 승격은 집행 사다리(구조 제거 → lint/CI → grep → 산문)를 먼저
물어요. 함께: 인라인 paths 주입, 비ASCII 파일명, evals 스키마 갱신 + baseline.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@bluecheat
bluecheat merged commit 15ca825 into main Sep 17, 2026
2 checks passed
@bluecheat
bluecheat deleted the feat/rule-pattern-enforcement branch September 17, 2026 08:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant