データの匿名化
oai-trial プロジェクトの正規のものを操作します。そのMatcher、フォーマットアダプター、検証機、スキーマ、エラーハンドリングをこのスキルで複製しないでください。プロジェクトの既存の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
入力は、1つの .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/ が含まれます。ポリシー、正規のID、保護対象値ルール、型付き障害、レポートスキーマはプロジェクトが所有します。それらを解釈する際は、プロジェクトの 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形式で)、文字列化された形式でポリシーマッチを実行します。フィクスチャには、すべてのJSONスカラータイプのすべてのPIIクラスを含める必要があります。整数として保存された電話番号は、ポリシーがそれを 555-123-4567 のようなフォーマットされた文字列として記述し、コーパスが 5551234567 として保存している場合でも、同じ電話番号です。先頭ゼロやfloat精度の損失を伴う数値変換は、型固有の正規ルールが安全な等価性を証明しない限り、失敗クローズする必要があります。$best-practices-skills「値表現マトリックス」を参照してください。
堅牢化の教訓(苦労して再学習しないこと)
トライアルは、JSON/SQLite整数として保存された電話が、文字列のみのマッチャーを通過したために失格となりました。根本原因はプロセスエラーでした。受け入れチェックは、コードが行っていることから作成され、提供された仕様から導出されていませんでした。これらのルールは、そのようなクラスの見逃しが再発しないように存在します。
-
チェックはコードではなく、仕様から導出してください。
policy.jsonは正確な機密値をリストします。正しい受け入れチェックは「それらの値のいずれも、デコードされた出力に、どの表現でも出現しないこと」です。ポリシーファイルから値を読み取り、手書きのリストを使用しないでください。依存関係プローブ(ポリシー値を反転させる→結果が反転しなければならない)を使用して、チェックが仕様に依存していることを証明してください。参考実装:プロジェクトのscripts/verify.shに組み込まれたscripts/spec_derived_check.py。 -
独立した検証機は、変換と前提を共有してはなりません。 元の検証機は、プロデューサーと同じ文字列のみのブラインドスポットを持っていたため、何も失敗クローズしませんでした。検証オラクルは表現を認識し、独立している必要があります:JSONをパースし(
\uXXXXをデコード)、数値スカラーを整数/小数形式に展開し、両側をNFC/NFD正規化し、SQLiteのテーブル+ビューセルおよびsqlite_masterDDLおよびすべてのヘッダー整数をスキャンし、corpus/だけでなく、report.jsonを含むリリースされた境界全体をスキャンします。 -
完全な表現クラスは、単一のバグではなくチェックリストです。 これらのそれぞれが、ナイーブなマッチャーを通過して機密値を運ぶ可能性があります。プロジェクトは、すべてのガードを修正し保持しています:型付き数値スカラー(int/float、科学的表記法)、SQLite BLOB(失敗クローズ)、Unicode 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ではなく、退化した入力です。パイプラインはそれに対して失敗クローズし、その残留物はスコープ内として文書化されます。