背景・目的
FKP LLMゲートウェイ(PIIマスク/デマスクGUIアプリ)は現状「表(Excel/CSV)」専用。 オーナー要望「テキストなどの非構造化データも扱えるようにしてほしい」(2026-07-07)を受け、 SDD STEP 1〜2(Fable 5・engineering-devエージェントへ委託)で仕様書ドラフトを作成し、 2026-07-07にオーナー承認(STEP 3通過)。本カードはSTEP 4=実装を管理する。
仕様書(正本): Dev/specs/fkp/fkp_llm_gateway_text_support_draft.md(決定事項一覧=§14)
確定した設計方針: 共通コア(detect.py/vault.py/normalize.py=無変更流用)の上に、 表アダプタ(既存)とテキストアダプタ(新規 io_text.py 等)を並置する。
確定事項(§14):
- 対応形式は
.txt/.md のみ(案F-1・新規ライブラリなし)
- 列ポリシーの代替は検知種別単位のオン/オフトグル(案P-2)
- プレビューは件数+サンプル3件/種別
- 出力ファイルの拡張子は入力を保持(
.md→_masked.md、.txt→_masked.txt。オーナー指定で推奨案から変更)
- 出力エンコーディングは入力を保全
- 文書サイズ上限は仮置き50万字(P3実測で調整)
engineering-redteam への委託は実施しない(Tier 2運用踏襲)
- P3(実データ精度調整)との順序=案S-A:本カード完了後にP3で表+テキストを一括評価する(
T-20260701-2 参照・実機立会いコストを1回に集約)
要件・完了条件(受入基準)
- ☑ Step 1(コア):
io_text.py 新規(読み書き・エンコーディング判定・バイナリ拒否・改行/拡張子保全)+単体テスト(2026-07-07完了・全190緑)
- ☑ Step 1:
mask.py に apply_mask_text/revert_text_report を公開(既存DataFrame関数のロジック不変・部品共有)
- ☑ Step 1: チャンク分割+文書座標写像(文をまたぐPII・チャンク境界のテスト含む)
- ☑ Step 2(パイプライン):
pipeline.preview_text/mask_text/demask_text + CLIサブコマンド追加(2026-07-07完了・Fable・全203緑)
- ☑ Step 2:
obs.py にテキスト用イベントフィールド追加 — pipeline.py内のobs.log_event呼び出しで対応済み(chars/counts/replaced等・本文は記録しない)。obs.py本体のフィールド定義追加は不要と判明したため実質完了
- ☑ Step 3(GUI):
classify_paths 拡張・テキストモード状態遷移・種別トグル付きプレビュー(2026-07-08完了・Fable・全210緑)
- ☑ Step 3:
messages.py に新例外(TextDecodeError等)の平易日本語追加
- ☑ Step 4(統合): E2Eテスト(マスク→AI改変想定→デマスク往復・改変耐性・抜け検出)—
engineering-testing(Fable)委託・11件追加・実装バグ疑いなし
- ☑ Step 4: 既存テスト全緑の維持(表経路の回帰ゼロ)— 最終221件全緑を自ら再実行し検証済み
- ☑ Step 4: USER_MANUAL / OPERATIONS / ARCHITECTURE / TEST_PLAN 更新(
engineering-dev(Fable)委託・git diffでdocsのみの変更と確認済み)
- ☑ 実装完了後、
engineering-testing へのテスト委託を検討 → 実施済み(上記)
- ☐ 完了後
T-20260701-2(P3)を実装完了・実機立会い準備完了の状態に更新 — 次アクション
作業ログ / 引き継ぎ
- 2026-07-07 (secretary): オーナー要望を受けFable 5(engineering-dev)へSTEP1-2を委託。
仕様書ドラフト作成→レビューHTML提示→オーナー承認(未決-5のみ推奨案から変更)。 仕様書に決定事項を反映済み。本カードを新規起票(実装未着手)。
- 2026-07-07 (secretary): オーナーより実装着手の承認あり。「大規模一括実装」を避けるためStep単位で進行。
Step 1(コア: io_text.py・mask.py拡張・チャンク分割・TDD)をengineering-devへ委託し着手。 Step 2〜4は本Stepの完了・テスト全緑確認後に順次委託する。
- 2026-07-07 (secretary): Step 1完了・全テスト190件緑を自ら再実行し検証済み(新規ファイル3件・テスト33件追加)。
オーナー指示によりStep 2以降はFableモデルで実装(Step 1は既に検証済みのため作り直さず活かす)。 Step 2(pipeline.preview_text/mask_text/demask_text・CLI・obs拡張)をFableへ委託し着手。
- 2026-07-08 (secretary): Step 2完了・全テスト203件緑を自ら再実行し検証済み(pipeline.py拡張・テスト13件追加・CLI mask-text/demask-text動作確認)。
次アクション=Step 3(GUI)への着手可否をオーナーに確認。
- 2026-07-08 (secretary): Step 3完了・全テスト210件緑を自ら再実行し検証済み(Fable)。
classify_paths4分類化・テキストモード分岐・種別単位トグル(案P-2)・messages.py例外追加。core/配下は無変更。 実機でのGUI動作確認(D&D→プレビュー→マスク→デマスク一気通貫)は自動テスト対象外のためStep4/P3実機検証へ引き継ぎ。 参考: 実装中にセキュリティレビュー(自動)がio_text.write_textのファイル権限(0o600等)を指摘したが、 既存io_table.write_table(Excel/CSV出力)も同様に権限制限なしで一貫しており、Tier2単一PC運用(鍵ファイルのみ0o600・ 出力ファイルは対象外という既存方針)と整合するため今回は見送り。将来的にoutput全般の権限強化をするなら io_table/io_text両方を横断で対応すべき論点として記録。 次アクション=Step 4(統合テスト・ドキュメント)着手可否をオーナーに確認。
- 2026-07-08 (secretary): Step 4完了。テスト(
engineering-testing・Fable)で仕様§7.2の統合テスト5項目のうち
自動化可能な1〜4を充足確認・11件追加(実装バグ疑いなし・チャンク境界の既知の限界は実運用リスク低と評価)。 ドキュメント(engineering-dev・Fable)でARCHITECTURE/OPERATIONS/TEST_PLAN/USER_MANUALの4ファイルに追記 (git diffで対象4ファイルのみの変更と確認済み)。最終テスト221件全緑を自ら再実行し検証済み。 §7.2項目5(GUI実描画のD&D→プレビュー→マスク→デマスク一気通貫)は既存方針により自動テスト対象外のため Windows実機での確認が必要=T-20260701-2(P3)に引き継ぐ。 status を needs-human に変更:オーナーレビュー待ち。承認後にP3側カードへ実機確認を反映する。
停止理由 実装・テスト(221件全緑)・ドキュメント更新は完了。オーナーレビューとGUI実機動作確認(P3のWindows実機セッションに合流)が残る。
関連: Dev/specs/fkp/fkp_llm_gateway_text_support_draft.md .company/tasks/T-20260701-2-fkp-llm-gateway-p3.md