マスキング箇所ごとの理由を確認し、誤検知を再現・報告できるようにする
- Dominant language
- Rust
- Stars
- 26
- Forks
- 6
- Avg merge
- 1h 13m
- Merged PRs (30d)
- 384
Description
## 解決したい利用場面
公開 fixture や設定ファイルの一部がマスクされ、エージェントが必要な情報を読めない。利用者は「本当に秘密なのか」「どの設定・検出器が判断したのか」「形式の読み取り失敗で過剰に隠したのか」を確認したい。
検出件数だけでは、必要な保護と誤検知を区別できない。**マスクされた箇所に対応する判断根拠をローカルで確認し、同じ条件で再現できる** ことを、普段の検出機能の一部として提供したい。
## 現状の根拠
確認対象: `31c515a7cfe6de6e7909c3c7a420385079d85050` / `0.0.81`。コード・既存仕様に基づく機能改善提案。
- [MaskedItem / MaskResult](https://github.com/EdamAme-x/pentect/blob/31c515a7cfe6de6e7909c3c7a420385079d85050/crates/pentect-core/src/pipeline/mod.rs#L79) は label・category・confidence・detector source とマスク済み segments を保持する。
- [RenderSegment](https://github.com/EdamAme-x/pentect/blob/31c515a7cfe6de6e7909c3c7a420385079d85050/crates/pentect-core/src/pipeline/render.rs#L7) は原文 offset に依存せず、マスク済み文字列の箇所を表示する基盤を持つ。
- [cmd_mask](https://github.com/EdamAme-x/pentect/blob/31c515a7cfe6de6e7909c3c7a420385079d85050/crates/pentect-cli/src/main.rs#L1103) はマスク済み本文、件数、parser fallback などを出すが、各箇所との対応を持つ判断根拠を表示しない。
- [cmd_view](https://github.com/EdamAme-x/pentect/blob/31c515a7cfe6de6e7909c3c7a420385079d85050/crates/pentect-cli/src/main.rs#L1278) で分かるのは label・hash・length。label は構造由来のフィールド名になるため、検出器や判断理由とは同一ではない。
## 望む動作
同じファイルまたは stdin を、実際に使う user / project 設定・plugin 構成でローカル検査し、次を確認できる。CLI の入口は、例えば `mask --explain` のような明示操作として設計する。
- マスク済み本文の各箇所に対応する label、分類、confidence、検出器または plugin の出所。
- 実装が保持する範囲での理由コード。構造化フィールド、既知パターン、明示マーカー、decoded value などを区別し、根拠が保持されていないときは推測で補わない。
- parser fallback、検査上限、適用 profile など、結果を変えうる条件。
- マスク結果を維持したまま、疑わしい箇所を選んで再検証する手順。
説明モードは検出・復元の意味を変えない。プロバイダーへの送信を伴わず、日常の全リクエストに確認を要求しない。保護解除や永続例外を自動作成しない。
## 完了条件
- [ ] 通常のマスキングと説明モードで、同じ設定に対するマスク済み本文が一致する。
- [ ] 同じ label を複数 detector が生成する場合も、箇所と説明の対応が曖昧にならない。overlap / merge 後の結果を正しく扱う。
- [ ] 日本語・絵文字・複数行・同値の反復でも、原文 offset を公開せず正しい箇所を示す。
- [ ] builtin と追加 plugin の結果、parser fallback、明示マスクを区別する。
- [ ] 人間向け表示と機械可読出力を持ち、実値や復元データを説明に混ぜない。
- [ ] 公開報告用の情報は、バージョン・設定の安全な項目・理由コードに限定する。周辺本文、パス、安定ハンドル ID、秘密を自動送信しない。再現入力は利用者が用意した合成 fixture を使う。
- [ ] 合成の真陽性 / 誤検知候補を使い、判断根拠の確認からローカル再検証までの手順を確立する。
関連: #348 は corpus 全体の precision / recall、#250 は値を含まない集計を扱う。本件は一つの入力について「なぜここが隠れたか」を調べる操作。#221 の承認エンジンとは独立した読み取り専用の範囲とする。
特定 detector の誤検知を再現したバグ報告ではない。既存の内部情報と利用者向け機能の間にある不足を、実装可能な改善要件として切り出している。
Contributor guide
Research direction
Start by reading MaskedItem and MaskResult in crates/pentect-core/src/pipeline/mod.rs, RenderSegment in crates/pentect-core/src/pipeline/render.rs, and the cmd_mask and cmd_view entry points in crates/pentect-cli/src/main.rs. Compare normal masking with the proposed explanation mode using synthetic true-positive and false-positive fixtures. Done means local human-readable and machine-readable explanations preserve masking, distinguish detector and parser conditions, handle overlaps and Unicode correctly, and disclose no sensitive values.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- cli, security
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100