EdamAme-x / EdamAme-x/pentect

マスキング箇所ごとの理由を確認し、誤検知を再現・報告できるようにする

Open
#1,455 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.