対象: 電帳法 SaaS (JTBD-012) の Phase 0 dogfood を回す Operator (= 達希 = 1 人法人運営者)。 状態: 設計説明の先出し。実装は未着手。実装着手時に本ファイルを再確認 + 同期更新する。 由来: ADR-0175 amend #4 (VETO 解消 #4) で drp clone session 16 に起票。

1. ざっくり何のガイド

電帳法 SaaS の真実性確保は ADR-0175 で「3 号 (訂正・削除履歴システム) 主軸 + TSA Strategy 後付け」を確定した。実装は IntegrityGuard というモジュールで担う。

本ガイドは Operator が dogfood 中に判断する場面で必要な最小理解パスを先出しする。詳細仕様は ADR-0175 §仕様 を参照。

2. IntegrityGuard の 4 要素

IntegrityGuard は L3 アプリケーション層に配置する。4 ファイルで構成する。

ファイル単独責務
immutable-versioning.tsevidence_versions 表で「上書き不能」を担保。UPDATE は superseded_by のみ。DELETE は不可
logical-deletion.tsevidence_deletions 表で「論理的に消す」状態を管理。物理削除はしない。tenant_id スコープ強制
append-only-audit-log.tsintegrity_audit_log 表に全操作を INSERT のみで残す。prev_log_hash でハッシュチェーン
object-lock-adapter.tsS3 Object Lock Compliance mode の WORM 最終ガード

役割の重なり: immutable-versioning はアプリ層の論理ガード、object-lock-adapter はストレージ層の物理ガード。二重防御。

3. 4 モード切替表

ADR-0175 §決定で定義する 4 モード。

モード3 号 (IntegrityGuard)1 号 (TSA Strategy)説明適用 Phase
3 号単独ONOFF (NullStrategy)dogfood で TSA なしPhase 0 default
1 号単独OFFON (SeikoTsaStrategy)撤退条件 #2 発火時の縮退撤退対応
両方有効ONON (SeikoTsaStrategy)商用化以降の二重化Phase 1+ default
両方無効OFFOFF (NullStrategy)テスト境界条件テストのみ

3.1 切替方法

mode フラグの環境変数は実装時に確定する。仮称:

  • INTEGRITY_GUARD_ENABLED = true で 3 号 ON
  • TSA_STRATEGY = NullStrategy で TSA OFF / SeikoTsaStrategy で TSA ON

切替手順は実装後に本ファイルへ追記する。前提:

  1. wrangler secret put 等で値を変更する
  2. デプロイ smoke test で実装クラス名を ヘルスチェック endpoint で確認する
  3. mode フラグ変更履歴は integrity_audit_log.operation = STRATEGY_SWITCH で自動記録する

3.2 切替判断のフロー

  • Phase 0 開始時: 3 号単独 で固定する
  • Phase 1 切替判断時 (= ADR-0175 §Confirmation 8 = 旧 #16・起案から 18 ヶ月以内): 両方有効 に切替える
  • ADR-0175 §撤退条件 #2 発火時: 1 号単独 への縮退を判断する
  • ADR-0175 §撤退条件 #3 発火時: 両方有効 への前倒し or 1 号単独 縮退を判断する

4. Phase 0 開始前チェック

ADR-0175 §Confirmation の Phase 0 開始前必須 4 件を満たすまで Phase 0 は開始しない。

  • #1 (旧 #3) 3 号要件 4 要素の実装 ADR が各要素ごとに起案済
  • #2 (旧 #5) 規程文書法務レビュー完了記録あり (docs/_internal/06_ops/regulation-document-review-{stamp}.md)
  • #3 (旧 #8) Object Lock Compliance mode 採用 + immutable versioning との役割分離が実装 ADR で明文化済
  • #4 (旧 #15) TimestampToken 型の最小フィールド仮定義済

5. Phase 0 dogfood 中の確認項目

dogfood を回しながら定期的にチェックする項目。

  • 国税庁 FAQ 改訂監視 (Confirmation #10 = 旧 #4): 自動差分監視の Slack 通知を確認する。年次手動レビューも行う
  • audit log ハッシュチェーン整合性 (Confirmation #13 = 旧 #9): 日次バッチ結果を確認する。失敗時は ADR-0175 §撤退条件 #8 発動
  • マルチテナント越境検知 (Confirmation #14 = 旧 #10): 月次レビューで CI 結果を確認する

6. Phase 1 切替判断チェック

ADR-0175 §Confirmation の Phase 1 商用化切替必須 4 件を満たすまで 両方有効 モードへ切替えない。

  • #5 (旧 #2) Phase 1 TSA 切替時の本番回帰差分テストで動作差分 0 件
  • #6 (旧 #12) JIIMA 事前照会回答書取得済 (= 2026-06-29 amend #2 で Phase 0 開始クリティカルパスから外し Phase 1 切替判断時点に後ろ倒し)
  • #7 (旧 #13) ISMS/SOC2 取得方針の別 ADR が受理済 (= tasks/prompts/draft_adr_isms_soc2_acquisition_decision.md から本格 ADR へ)
  • #8 (旧 #16) Phase 1 切替最大許容遅延期間 18 ヶ月以内

改訂履歴

  • 2026-06-29: 起票 (ADR-0175 amend #4 = VETO 解消 #4 / drp clone session 16 起票)