데이터 익명화
정식 oai-trial 프로젝트를 운영합니다. 매처, 형식 어댑터, 검증기, 스키마, 오류 처리를 이 스킬에 중복으로 구현하지 마십시오. 프로젝트의 기존 argparse CLI는 의도적으로 유지됩니다. 이 래퍼는 Python CLI나 서비스를 추가하지 않습니다.
설정 및 기본 작동
ANONYMIZE_DATA_ROOT는 위 기본 체크아웃 디렉터리를 재정의합니다. 설정에는 uv가 필요하며, 프로젝트의 선언된 개발/발견 확장 기능을 설치합니다. 런타임 작업에는 메모리, 제공자 자격 증명, LLM, 네트워크 또는 데이터베이스 서비스가 필요하지 않습니다.
./run.sh setup
./run.sh --input /data/exports --policy /data/policy.json --output /data/release
./run.sh anonymize --input /data/export.sqlite --policy /data/policy.json --output /data/release
입력은 단일 .csv, .json, .txt 또는 .sqlite 파일이거나, 이러한 파일들이 있는 디렉터리입니다. 정책은 별도의 일반 파일이어야 합니다. 입력 외부에 있는 전용 빈 출력 디렉터리를 사용하십시오. 원본 파일은 개인 임시 스냅샷에 복사됩니다. 성공적인 출력에는 corpus/와 report.json만 포함됩니다.
기존 번들 인터페이스는 계속 사용할 수 있습니다:
./run.sh run --input /data/bundle --output /data/release
./run.sh verify --input /data/bundle --output /data/release
./run.sh inspect /data/release
번들에는 policy.json과 corpus/가 포함됩니다. 정책, 정식 식별자, 보호 값 규칙, 유형별 실패 및 보고서 스키마는 프로젝트가 소유합니다. 해석 시 프로젝트의 README.md, docs/ANONYMIZATION_SEMANTICS.md 및 schemas/report.schema.json을 읽으십시오. 종료 코드만으로 성공을 선언하지 마십시오. 실제 보고서를 읽고, 준비 상태 필드를 검증하며, 요청된 형식의 출력을 검사하십시오. 손상되었거나 누락된 보고서는 READY 상태가 아닙니다.
선택적 RapidFuzz 발견: 자동 대체 절대 금지
./run.sh discover --input /data/exports --policy /data/policy.json --output /data/work/review.json
./run.sh approve-discovery --input /data/exports --policy /data/policy.json \
--review /data/work/review.json --approve CANDIDATE_ID --output /data/work/approved-policy.json
./run.sh --input /data/exports --policy /data/work/approved-policy.json --output /data/release
발견 기능은 전체 구조화된 문자열 값과 전체 텍스트 줄을 name 유형의 정책 항목과 비교합니다. 이는 NLP 범위 추출이나 일반 PII 스캐너가 아닙니다. 기본값: 유사도 임계값 90, 분리 여백 5. --threshold 및 --margin으로 구성 가능합니다. 동률, 근사 동률, 보호 값, @, /, _와 같은 식별자 구두점을 포함하는 값, 이미 알려진 리터럴은 제안되지 않습니다. 아포스트로피, 하이픈, 마침표는 이름 형태의 텍스트에서 허용되며, 유사성이 두 사람이 동일인임을 증명하지는 않습니다.
운영자에게 특정 후보 ID를 승인하도록 요청하십시오. 유사성 점수만으로 승인하지 마십시오. 승인은 현재 정책/코퍼스에 대해 제안을 다시 도출하고, 오래되었거나 편집된 리뷰를 거부하며, 정확히 일치하는 정책을 컴파일합니다. 승인되지 않은 제안은 익명화에 영향을 미치지 않습니다. 발견/승인 영수증에는 release_ready: false가 필수입니다.
리뷰 및 승인된 정책 파일에는 원시 이름이 포함되어 있습니다. 릴리스, 로그 및 공유 보고서 외부에 보관하십시오. 이 파일들은 모드 0600으로 생성되며 기존 파일을 덮어쓰지 않습니다. 임시 스냅샷은 기본적으로 아티팩트 드라이브에 저장되며, 필요시 ANONYMIZE_DATA_WORK_DIR로 재정의할 수 있습니다.
Docker는 독립형 인터페이스로 유지
프로젝트 체크아웃에서:
docker build -t anonymization-trial .
docker run --rm anonymization-trial
# 선택적 발견 활성화 이미지; 기본 이미지는 정확한 엔진 종속성을 없앱니다.
docker build --build-arg INCLUDE_DISCOVERY=1 -t anonymization-trial:discovery .
요청된 입력/정책은 읽기 전용으로 마운트하고, 전용 출력 디렉터리를 사용하십시오. 이미지 내부에서 동일한 프로젝트 CLI가 실행됩니다. 평가자는 이 스킬이 필요하지 않습니다. 완전한 마운트 명령 예제는 프로젝트의 docs/DISCOVERY.md를 참조하십시오.
실패 및 증명 경계
래퍼는 프로젝트 종료 코드와 정리된 오류 코드를 유지합니다. 프로젝트/설정 누락 및 잘못된 설치 패키지 경로는 처리 전에 실패합니다. 실제 인수 계약은 --help를 사용하십시오. 발견은 리뷰 자료이지, 릴리스, 익명성 보장, 신뢰도 확률 또는 인간 승인이 아닙니다.
./sanity.sh는 실제 긍정, 부정 및 적대적 CLI 검사를 실행합니다. 보존된 fixtures/agentic_eval.json은 이를 반복하며 아티팩트 재읽기를 요구합니다. 이전 평가 자격이 이 후 평가 확장에 자동으로 자격을 부여하지는 않습니다.
표현 규칙 (운영자 2026-09-11)
PII는 문자열이 아닌 값에 대해 매칭되어야 합니다. 모든 JSON/SQL 스칼라가 변경 없이 통과되기 전에, 정규 형식으로 문자열화(전화번호 모양의 숫자는 E.164 형식)하고 문자열화된 형식에 대해 정책 매칭을 실행하십시오. Fixture는 모든 JSON 스칼라 유형의 모든 PII 클래스를 포함해야 합니다. 정수로 저장된 전화번호는 동일한 전화번호이며, 정책이 555-123-4567과 같은 형식화된 문자열로 작성되고 코퍼스가 5551234567을 저장하는 경우에도 마찬가지입니다. 선행 0 또는 부동 소수점 정밀도 손실이 있는 숫자 변환은 유형별 정식 규칙이 안전한 동등성을 증명하지 않는 한 실패-폐쇄(fail closed)되어야 합니다. $best-practices-skills "값 표현 매트릭스"를 참조하십시오.
강화 교훈 (이런 어려운 방법으로 다시 배우지 마십시오)
해당 평가는 JSON/SQLite 정수로 저장된 전화가 문자열 전용 매처를 통과했기 때문에 실격 처리되었습니다. 근본 원인은 프로세스 오류였습니다. 승인 검사는 코드가 수행한 작업에서 작성되었으며, 전달된 사양에서 파생되지 않았습니다. 이러한 규칙은 그러한 유형의 실수가 재발하지 않도록 존재합니다.
-
코드가 아닌 사양에서 검사를 파생하십시오.
policy.json은 정확한 민감한 값을 나열합니다. 올바른 승인 검사는 "해당 값 중 어느 것도 디코딩된 출력에 어떤 표현으로도 나타나지 않음"입니다. 정책 파일에서 값을 읽고, 수동으로 작성된 목록을 절대 사용하지 마십시오. 종속성 프로브(정책 값 변경 → 결과가 변경되어야 함)를 통해 검사가 사양에 의존함을 증명하십시오. 참조 구현:scripts/verify.sh에 연결된 프로젝트의scripts/spec_derived_check.py. -
독립 검증기는 변환과 가정을 공유해서는 안 됩니다. 원래 검증기는 생산자와 동일한 문자열 전용 사각지대를 가지고 있었기 때문에 아무것도 실패-폐쇄되지 않았습니다. 검증 오라클은 표현 인식 및 독립적이어야 합니다. JSON 구문 분석(
\uXXXX디코딩), 숫자 스칼라를 정수/소수 형식으로 확장, 양쪽 NFC/NFD 정규화, SQLite 테이블+뷰 셀 ANDsqlite_masterDDL AND 모든 헤더 정수 스캔, 그리고corpus/뿐만 아니라report.json을 포함한 전체 릴리스 경계를 스캔하십시오. -
전체 표현 클래스는 체크리스트이지 단일 버그가 아닙니다. 다음 각각은 순진한 매처를 지나 민감한 값을 전달할 수 있습니다. 프로젝트는 모든 항목에 대한 가드를 수정하고 유지합니다. 유형 숫자 스칼라(int/float, 과학 표기법), SQLite BLOB(실패-폐쇄), 유니코드 NFC/NFD, 뷰 재구성, 프리리스트 잔여물, 적대적 DB 스키마(표현식/부분 인덱스, 비결정적 뷰, 계산된 DEFAULT), 스키마 DDL 리터럴, 영구 헤더 정수. 전체 테이블은 프로젝트의
docs/SECURITY_REMEDIATION.md를 참조하십시오. -
실제 Docker 경로를 통해 결정론적으로 증명하십시오. 검증은 이미지를 빌드하고, 브리프의 정확한 명령을 실행하며, 에이전트 산문이 아닌 하드 PASS/FAIL 종료로 릴리스된 바이트를 다시 읽는 커밋된 스크립트여야 합니다. 참조:
security/docker_brief_contract.py(빌드 + 두 브리프 명령 + 표현 인식 누출 검사 + 입력 사전 조건) 및security/docker_hardening_matrix.py(docker run을 통한 적대적 구멍). Git 커밋과 빌드된 이미지 ID를 기록하십시오. -
정직하게 범위를 설정하십시오. 결정론적 공개 네임스페이스 가명은 동등성/빈도를 공개하며 외부 연결 저항을 제공하지 않습니다. 실행 보고서는
key_mode및does_not_establish에 이를 명시합니다. 필수 SQLite 형식 상수와 동일한 정책 값은 실제 PII가 아닌 퇴화된 입력입니다. 파이프라인은 이에 대해 실패-폐쇄되며 해당 잔여물은 범위 내로 문서화됩니다.