ADR-0209 Amano Free Trial credentials 到着後 finalize checklist
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.tfvars に enable_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-urivlt-dev-amano-auth-uservlt-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 することを確認:
- real endpoint で timestamp() 発行 → TimestampToken shape verify
- 発行 token を verify() → true (trustedRoots populated)
- certChain[0].subject に "Amano" or "TSA" 相当の substring 含む
- 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.tsのclass 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=null→VLT_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)