SoT: preparation memo (docs/_internal/06_ops/adr-0209-amano-integration-preparation-memo.md §8) + integration test 骨格 (vlt/tests/integration/amano-strategy.integration.test.ts) + Secret Manager 投入 script (vlt/scripts/inject-amano-secrets.sh)

対象: 代表取締役 (Free Trial 契約完了通知受領後) + Claude (Step 3-4 の PR 起票 · Step 5 は代表取締役承認前提)

目的: Amano Free Trial credentials 取得後、integration test 1 度 pass → AmanoStrategyNotImplementedError sentinel 削除 → strategy mode 切替 まで最短経路で shipping する。session 68 で本 checklist と test 骨格と script を先出しし、credentials 到着時の time-to-integration を最小化する ([[preparation-before-user-trigger-maximizes-throughput]] 適用)。


Step 1: Terraform で Amano secret + IAM + Cloud Run env を有効化 (Claude or 代表取締役 · 5-10 分 · apply 発火)

前提: gcloud auth application-default login 済 · Terraform apply 状態 (P1-α-b) 完了.

session 69 で secret 定義 + IAM binding + Cloud Run env mount は var.enable_amano_strategy=false の count=0 gate で先出し済 (PR N3). credentials 到着時は enable_amano_strategy=true の 1 段 apply で 3 secret + 3 IAM + 3 env mount が state 反映される:

cd vlt/terraform
terraform plan -var='enable_amano_strategy=true'   # 差分確認 (secret 3 + IAM 3 + env 3 の add のみ)
terraform apply -var='enable_amano_strategy=true'  # 代表取締役承認後

もしくは terraform.tfvarsenable_amano_strategy = true を追記して commit してから apply.

Step 2: Secret Manager 3 key に実値を投入 (代表取締役 or Claude · 5 分)

Terraform で作成された 3 secret に実 credentials を version として push:

VLT_AMANO_TSA_URI='<endpoint URL · 契約通知>' \
VLT_AMANO_AUTH_USER='<user · 契約通知>' \
VLT_AMANO_AUTH_PASSWORD='<password · 契約通知>' \
vlt/scripts/inject-amano-secrets.sh bizlp-gas-accounting-dev dev

引数: $1 = GCP project ID (terraform.tfvars の project_id 値) · $2 = environment (default 'dev' · Terraform の var.environment と一致).

投入対象 secret name (Terraform main.tf SoT · var.environment=dev の場合):

  • vlt-dev-amano-tsa-uri
  • vlt-dev-amano-auth-user
  • vlt-dev-amano-auth-password

script は value を stdout に echo しない (shell history にも env dump にも残さない設計)。既存 secret (Step 1 で作成済) に新 version を追加する。Cloud Run 側 env は secret_key_ref.version = "latest" を参照しているため、次回 Cloud Run revision で自動反映される (gcloud run services update-traffic で latest を pin してもよい).

branch 名 pre-defined (Step 1 の Terraform apply commit 用): feat/vlt-amano-terraform-enable-strategy

Step 3: integration test 1 度 run (Claude · local · CI ではない · 5 分)

.env.local (gitignored) に 3 key + root cert を追加した上で、既に配置済の骨格 (vlt/tests/integration/amano-strategy.integration.test.ts) を 1 度 run する:

VLT_AMANO_INTEGRATION_TEST=true \
VLT_AMANO_TSA_URI='<Amano 契約通知の値 · Step 2 と同じ>' \
VLT_AMANO_AUTH_USER='<Amano 契約通知の値 · Step 2 と同じ>' \
VLT_AMANO_AUTH_PASSWORD='<Amano 契約通知の値 · Step 2 と同じ>' \
VLT_AMANO_TRUSTED_ROOT_PEM='<Amano root TSA cert · PEM 形式>' \
pnpm --filter vlt test amano-strategy.integration

memo §7.2 の 4 case が全 pass することを確認:

  1. real endpoint で timestamp() 発行 → TimestampToken shape verify
  2. 発行 token を verify() → true (trustedRoots populated)
  3. certChain[0].subject に "Amano" or "TSA" 相当の substring 含む
  4. TSTInfo.genTime が実時刻 ±60 秒以内 (TSA clock drift 許容)

失敗時の対応: memo §10.1 profile drift の可能性. response DER を dump (openssl asn1parse -inform DER -in response.der) して差分を特定. case 3 の subject 期待値は契約後実測後に refine 可 (test 骨格の regex を update する PR を先に起票).

Step 4: AmanoStrategyNotImplementedError sentinel 削除 PR (Claude · 10-15 分 · PR)

branch 名 pre-defined: chore/vlt-amano-drop-not-implemented-sentinel

削除対象:

  • vlt/src/integrity/strategy/amano-strategy.tsclass AmanoStrategyNotImplementedError 定義 (現状 §90-99).
  • 同 file の docstring §85-88 「契約後 finalize (memo §8 · P2-α-1)」記述を「契約後 finalize 完了」に update.

現状 throw 箇所は存在しない (session 64-65 の PR-3.5 · PR-4 shipping 時点で timestamp()/verify() 実装済 · sentinel のみ残置)。代替 test は不要。既存 unit test は全 pass のままとなる (削除 sentinel を import している test なし)。

Step 5: VLT_TSA_STRATEGY_MODE=amano 切替 PR (代表取締役判断 · Claude 起票 · 別 PR)

branch 名 pre-defined: chore/vlt-amano-strategy-mode-switch

変更:

  • Terraform (vlt/terraform/) の Cloud Run env で VLT_TSA_STRATEGY_MODE=nullVLT_TSA_STRATEGY_MODE=amano に変更.
  • 代表取締役の明示指示 を要する (即本番切替 · vlt-deploy = merge 即本番運用のため).

post-deploy smoke test (session 61 PR #5673) が AmanoStrategy を期待値として verify し、audit_log に STRATEGY_SWITCH event が記録される (ADR-0175 §Confirmation #16)。

Step 4 と Step 5 は分離する (削除 PR を先に main 反映 → 別 PR で mode 切替)。


依拠 memory

  • [preparation-before-user-trigger-maximizes-throughput] — 本 checklist は credentials 到着時の time-to-integration 短縮 SoT
  • [gcp-sm-claude-bash-works] — gcloud secrets add は ADC 権限で claude bash から直接可

関連 file

  • preparation memo: docs/_internal/06_ops/adr-0209-amano-integration-preparation-memo.md §7.2 · §8
  • integration test 骨格: vlt/tests/integration/amano-strategy.integration.test.ts
  • injection script: vlt/scripts/inject-amano-secrets.sh
  • AmanoStrategy source: vlt/src/integrity/strategy/amano-strategy.ts
  • Terraform infra README: vlt/terraform/README.md §Post-apply Step 6 (双方向 pointer · Step 2 の Cloud Run env mount 前提として Terraform apply 完了要件を明示)
  • ADR: ADR-0175 (TSA Strategy 抽象化 · §Confirmation #16) · ADR-0207 (vendor 従量 2 択) · ADR-0209 (実勢単価 amend)