最終更新: 2026/07/09 15:43
ADR-0225 週次観測ログ (sweep boundary に audit_log を同梱)
ADR-0225 (sweep boundary に audit_log を同梱 · 2026-07-08 受理) の Confirmation 4 KPI の観測結果を時系列で記録する。SSoT は ADR-0225 §9 Confirmation。実測記録は Phase 0 dogfood の retention sweep 実行開始 (P3-2 enable_retention_manager = true 反映後) 以降に埋める。それまでは Week 0 節 (準備状態) を維持する。
KPI と観測方法
| # | KPI | 観測方法 | SLO | 違反時対応 |
|---|---|---|---|---|
| 1 | audit_log INSERT の完全性 (孤立検出) | 週次 SQL 実行 (LEFT JOIN で receipt_id 不在の孤立 audit_log 検出) | 常時 0 件 | lock-transaction-boundary の tx 境界 review + INSERT 経路実装確認 |
| 2 | audit_log INSERT の二重化検出 | 週次 SQL 実行 + Phase 1 移送 PR merge 前に 1 回 (同一 target_id で action='retention_sweep_delete' が 2 件以上) | 常時 0 件 | VLT_AUDIT_LOG_ENABLED gate 状態と lock-transaction-boundary の INSERT 残存有無を即時確認 |
| 3 | sweep atomicity 継承 + 5 module 固有障害シーケンス | vlt/tests/e2e/sweep-audit-atomicity.test.ts 3 種 orphan + 4 case (GCS 削除失敗 · hold gate 評価失敗 · audit_log INSERT 失敗 · GCS 削除成功→Postgres COMMIT 失敗) が CI 各 push で自動走行 · 週次 pattern 確認 | CI 継続 green | 実装再設計と sweep.ts 復活 (feature flag による切戻し可能状態) |
| 4 | Phase 0 → Phase 1 caller 遷移追跡 | 月次 SQL 実行 (audit_log の phase / caller 分布) · Phase 1 移送時に 1 回 | Phase 0 期間 phase='0'/caller='lock-transaction-boundary' 100% · Phase 1 phase='1'/caller='event-emitter' 100% | event-emitter 有効化後も lock-transaction-boundary が INSERT 継続 = 移送漏れ検出 |
Week 0 (準備状態 · 実測未開始)
実測開始トリガー: Phase 0 dogfood の enable_retention_manager = true 切替反映後の retention sweep 実行開始 (P3-2 flag flip · session 47 handover で Phase B 実装後に予定)。
Week 0 節では KPI 1-4 の観測を実施せず、Phase B 実装 PR 内の以下の準備状態のみ記録する:
- ✅ Phase A shipping (session 46-47 · PR #5510 + #5517 hotfix): schema.sql の audit_log に
phase(varchar(8) NOT NULL CHECK 3 値) +caller(text NOT NULL) 2 列追加 + 複合 index + FORCE RLS + POLICY 2 個 (ADR-0229 段階分割 (a) 相乗り) · lock-transaction-boundary.ts に AUDIT_LOG_CALLER runtime gate + audit_log INSERT block 追加 - ✅ Phase B shipping (session 48 · 本 PR): Terraform に
AUDIT_LOG_CALLER='lock-transaction-boundary'env var 追加 · e2e test 差替 (sweep.ts → runRetentionManagerJob) + 4 case のうち 2 case 骨格 (残 2 case は Postgres error injection helper が必要なため follow-up) · sweep.ts 削除 · integration test 13 case に audit_log assertion 追加 · vlt-schema-lint に 4 rule (SCHEMA 1 + WIRING 3) 追加
Month 1 (実測初回 · 骨格 · 回答受領後に埋める)
実測開始日: YYYY-MM-DD ・ 記帳日: YYYY-MM-DD
Week 0 の準備状態から Phase 0 dogfood retention sweep 実行が始まった月に本節を新設し、KPI 1-4 の週次観測結果を月末に集計する。
KPI 1: audit_log INSERT 完全性 (孤立検出)
SELECT COUNT(*) AS orphan_count FROM deletion_events de
LEFT JOIN audit_log al
ON al.target_id = de.receipt_id
AND al.action = 'retention_sweep_delete'
WHERE de.created_at > NOW() - INTERVAL '7 days'
AND de.reason = 'retention_expired'
AND al.id IS NULL;
| 週 | 実行日 | orphan_count | SLO 判定 | 補足 |
|---|---|---|---|---|
| Week 1 | YYYY-MM-DD | 0 | ✅ | — |
| Week 2 | YYYY-MM-DD | 0 | ✅ | — |
| Week 3 | YYYY-MM-DD | 0 | ✅ | — |
| Week 4 | YYYY-MM-DD | 0 | ✅ | — |
KPI 2: audit_log INSERT 二重化検出
SELECT target_id, COUNT(*) AS dup_count
FROM audit_log
WHERE action = 'retention_sweep_delete'
AND created_at > NOW() - INTERVAL '7 days'
GROUP BY target_id
HAVING COUNT(*) > 1;
| 週 | 実行日 | dup_count 合計 | SLO 判定 | 補足 |
|---|---|---|---|---|
| Week 1 | YYYY-MM-DD | 0 | ✅ | — |
KPI 3: sweep atomicity 継承 + 5 module 固有障害シーケンス
CI 各 push で vlt/tests/e2e/sweep-audit-atomicity.test.ts が自動走行。3 種 orphan (KPI-9 継承) + 4 case (障害シーケンス 2 case 完了 · 残 2 case は it.todo 骨格) が全 green 保持。週次で最新 CI run を確認。
| 週 | 実行日 | CI 状態 | 3 種 orphan | 4 case | 補足 |
|---|---|---|---|---|---|
| Week 1 | YYYY-MM-DD | ✅ green | 全 pass | 2 pass + 2 todo | follow-up: helper 拡張で 2 case を実装化 |
KPI 4: Phase 0 → Phase 1 caller 遷移追跡
SELECT DISTINCT phase, caller, COUNT(*) AS insert_count
FROM audit_log
WHERE action = 'retention_sweep_delete'
AND created_at > NOW() - INTERVAL '30 days'
GROUP BY phase, caller;
| 月 | 実行日 | phase | caller | insert_count | SLO 判定 |
|---|---|---|---|---|---|
| Month 1 | YYYY-MM-DD | 0 | lock-transaction-boundary | N | ✅ (Phase 0 100%) |
関連 SSoT
- ADR-0225 (sweep boundary に audit_log を同梱):
docs/adr/0225-include-audit-log-in-sweep-boundary.md§9 Confirmation が本観測の SSoT - ADR-0223 (Retention Manager 運用実装): §3.3 仕様の責務外条項を Phase 0 限定 amend (ADR-0225 §8 撤退条件 1 で Phase 1 移送)
- ADR-0203 §9-9 KPI-9 (sweep atomicity): 3 種 orphan 検出テストを継承
- ADR-0222 (append-only 監査ログ物理担保): Phase 1 event-emitter 有効化と本 ADR の caller 遷移の SoT 統合
- lint 配線:
scripts/vlt-schema-lint.mjs(SCHEMA_RULES + WIRING_RULES に本 ADR §11 で 4 rule 追加) - 実装 SoT:
vlt/src/retention-manager/lock-transaction-boundary.ts(audit_log INSERT の Phase 0 経路)