Status: v1 Review cadence: Monthly Owner: Governance / Engineering Related: Issue #195 PBI-HI-001 Metrics v1 / docs/ai/harness-improvement-roadmap.md
PlanGate の Metrics v1(PBI-HI-001 / #195, v8.6.0)が記録する workflow event / hook violation / model profile / provider / latency / tool count / test result について、公開してよい情報と公開すべきでない情報を分離し、redaction / retention / public data policy を確定する。
PlanGate は public repository として運用されるため、metrics log がそのまま公開ストレージや公開リポジトリにコミットされた場合のリスクを 実装前に 抑える。
| 用語 | 意味 |
|---|---|
| metrics log | bin/plangate metrics (#195) が出力する append-only event log |
| workflow event | C-3 / V-1 / C-4 / hook violation / exec / handoff など、workflow 上の節目 |
| redact | 機微情報を不可逆な形(hash / placeholder)に置き換えること |
| sanitize | 構造を保ったまま機微部分のみ除去すること |
以下は metrics log に保存してよい。
| カテゴリ | 例 |
|---|---|
| Workflow event 種別 | c3.approved, v1.passed, hook.violation, exec.started |
| Phase / Mode | plan, exec, verify, light/standard/high-risk/critical |
| Gate 結果 | APPROVED, REJECTED, CONDITIONAL, FAIL, PASS, WARN |
| Hook 結果(abstract) | hook 名、pass / block / warn の結果のみ |
| Latency | wall-clock 秒数、phase 別経過時間 |
| Cost (hash 化された ID 単位) | model_id, provider, token 数(model_id は固定 enum) |
| Tool call count | tool 名(Edit, Bash, Grep など固定 enum)と回数 |
| Test result(数値のみ) | PASS 数、FAIL 数、SKIP 数 |
| Schema validation 結果 | ok / fail、件数のみ |
| Plan hash | plan.md の hash 値(内容そのものは保存しない) |
| TASK ID | TASK-XXXX(連番のみ、内容含まない) |
| 集計時刻 | UTC timestamp |
以下は metrics log にそのまま保存しない。redact / sanitize / 完全除外のいずれかを行う。
| カテゴリ | リスク | 扱い |
|---|---|---|
| ファイル名・パス | プロジェクト構造の漏洩 | redact(hash)または相対分類のみ |
| Stack trace 全文 | スタック内の path / 変数名 | sanitize(先頭 1 行のみ + error type) |
| Command output | env / 認証情報 / 内部データ | 完全除外(保存しない) |
| Provider raw response | API key / model 内部情報 | 完全除外 |
| プロジェクト固有名・社名・人名 | identifiable info | 完全除外 |
| Issue / PR の本文・コメント | 内部議論の漏洩 | 番号のみ保存、本文は除外 |
| User prompt / system prompt 全文 | 業務情報・社外秘 | 完全除外(hash 化も推奨せず) |
| Repo 内ファイル内容の抜粋 | 業務コード | 完全除外 |
| 外部 URL(社内ホスト含む) | infra 情報の漏洩 | sanitize(domain 単位 hash) |
ALLOWED: scripts/hooks/*.sh の hook 名(固定 enum)
SANITIZE: docs/working/TASK-0001/handoff.md → docs/working/TASK-XXXX/<file_kind>
FORBIDDEN: 絶対パス (/Users/.../...)、リポジトリ外パス
ALLOWED: error_type(例: "TypeError", "ValidationError")
SANITIZE: トップフレーム 1 行のみ、変数値は除外
FORBIDDEN: 全文保存
FORBIDDEN: 完全除外(stdout/stderr いずれも)
代替: 終了コード(exit_code)と "ok"/"fail" のみ保存
ALLOWED: provider 名("openai", "anthropic", "claude_code", "codex" 等の固定 enum)
ALLOWED: model_id(固定 enum、例: "claude-opus-4-7")
FORBIDDEN: API key, raw HTTP request/response, account ID
"<redacted>" または分類済み enum に置換file_path: "<sanitized:docs-working>"| 種別 | 既定 retention |
|---|---|
| metrics log(append-only file) | 90 日 |
| 集約 retrospective レポート | 永続(数値・抽象 enum のみで構成) |
| baseline snapshot | 永続(PBI-HI-000 / #194 の baseline) |
| 失敗時の error metrics | 30 日(再現確認用、その後集約に置換) |
90 日経過した metrics log は削除または集約レポートへ統合する。永続保存は 数値と enum のみ で構成された集約のみとする。
| 観点 | Public repo(このリポジトリ) | Private repo(forks 想定) |
|---|---|---|
| metrics log の commit | しない(local / private artifact のみ) | 可(ただし AC §3 / §4 を遵守) |
| 集約 retrospective | OK(数値・enum のみ) | OK |
| 失敗 error type | OK(type 名のみ) | OK |
| stack trace | sanitize 必須 | sanitize 推奨 |
| user prompt | 保存しない | 保存しない(業務情報の保護) |
| baseline snapshot 公開 | 数値・enum のみで OK | 同左 |
重要: Public repo では
bin/plangate metricsの出力は.gitignore対象とし、commit されないことを実装側で保証する(PBI-HI-001 / #195 で実装)。
PBI-HI-001 で実装される schemas/plangate-event.schema.json は、本ドキュメントの §3 / §4 を満たすこと。
additionalProperties: false の下で明示的に定義する.gitignore に metrics log 出力先を追加するbin/plangate metrics 実装時に本 doc を unit test の参照先とする矛盾検出時は 本 doc が優先。schema 側を改訂する。
scripts/hooks/check-metrics-privacy.sh — 2 段検査:
docs/working/_metrics/events.ndjson が staging に含まれていないか(§8 違反検出)*.json / *.ndjson に §4 Forbidden カテゴリのキー(file_path, stack_trace, command_output, stdout, stderr, raw_response, api_key, user_prompt, system_prompt, prompt_text, absolute_path 等)が含まれていないか
PLANGATE_HOOK_STRICT=1: BLOCK(exit 1)PLANGATE_BYPASS_HOOK=1: bypasstests/extras/ta-09-metrics.sh — metrics_collector.py が emit する events に §4 Forbidden フィールドが含まれないことを毎回検証tests/extras/ta-09-metrics.sh — schema (plangate-event.schema.json) に Forbidden フィールドを含む event を渡すと jsonschema.validate が ValidationError を返すことを negative test で保証(additionalProperties: false の効果検証)docs/working/ 全体の公開方針再設計(documentation-management.md §2 で既定済み)