ssot-check

📁 yusuketsunoda/ppt-trans 📅 Today
0
总安装量
1
周安装量
安装命令
npx skills add https://github.com/yusuketsunoda/ppt-trans --skill ssot-check

Agent 安装分布

amp 1
cline 1
opencode 1
cursor 1
continue 1
kimi-cli 1

Skill 文档

/ssot-check — SSOT 整合性チェック

SSOT(Single Source of Truth)と各消費者の値が一致するか検証する静的チェック。

Available Subcommands

サブコマンド SSOT ソース 消費者 状態
pricing src/lib/stripe/config.ts messages/ja.json, messages/en.json 実装済み
rate-limit src/lib/security/rate-limiter/presets.ts(認証・機能・翻訳系)+ src/constants/limits.ts(Admin API・Preview API) src/**/*.ts, .claude/**/*.md, CLAUDE.md 実装済み
env .env.example src/**/*.ts の process.env.* Phase 2
routes src/app/api/**/route.ts vercel.json functions Phase 2

Usage

# npm script 経由
npm run audit:ssot

# 直接実行
node scripts/audit/ssot-pricing.mjs
node scripts/audit/ssot-pricing.mjs --fix    # 修正ヒント付き

# Claude Code スキル
/ssot-check pricing
/ssot-check pricing --fix

What It Checks (pricing)

  1. 価格一致: PLAN_CONFIGS.price (number) → messages の plans.*.price (formatted string)
  2. 表示名一致: PLAN_CONFIGS.displayName → messages/ja.json の plans.*.name
  3. プラン存在: SSOT に定義されたプランが全 messages に存在するか
  4. 余剰プラン: messages に SSOT にないプランが定義されていないか

SSOT の定義

src/lib/stripe/config.ts  →  PLAN_CONFIGS (Record<PlanName, PlanConfig>)
   ├── free:     { price: 0,    displayName: "フリープラン" }
   ├── standard: { price: 980,  displayName: "スタンダードプラン" }
   └── pro:      { price: 2980, displayName: "プロプラン" }

消費者がこの値と矛盾する場合、消費者側を修正する。SSOT 自体を変更する場合は config.ts を先に変更し、チェックを再実行。

What It Checks (rate-limit)

  1. コード内ハードコード: src/**/*.ts でレート制限の数値が presets.ts を経由せず直接定義されていないか
  2. ドキュメント転記: .claude/**/*.md, CLAUDE.md にレート制限の具体的数値が転記されていないか
  3. SSOT参照: 消費者が RATE_LIMIT_PRESETS / ADMIN_RATE_LIMITS を import して使用しているか

手動チェック手順

# 1. SSOT の現在値を確認
grep -n "max:" src/lib/security/rate-limiter/presets.ts
grep -n "maxRequests:" src/constants/limits.ts

# 2. コード内で SSOT を経由せずハードコードされた数値を検索
# (presets.ts / limits.ts 以外で windowMs / max を直接定義している箇所)
rg -n "windowMs:\s*[0-9]|max:\s*[0-9]" src/ --type ts -g '!presets.ts' -g '!limits.ts'
rg -n "maxRequests:\s*[0-9]" src/ --type ts -g '!limits.ts' -g '!presets.ts'

# 3. ドキュメント内の転記を検索(レート制限に関する具体的数値)
rg -n "requests?\s+(per|/)\s*\d+\s*(min|hour|second)" .claude/ CLAUDE.md

原則: レート制限の具体的数値はドキュメント・チェックスクリプトに転記しない。presets.ts / limits.ts を SSOT として直接参照する指示のみ記載。チェックは構造的パターン(フィールド名の存在)で検出する。

CI Integration

# GitHub Actions example
- name: SSOT Check
  run: npm run audit:ssot

AI Assistant Instructions

このスキルが有効化された時:

  1. npm run audit:ssot を実行して現状を把握
  2. エラーがあれば SSOT (config.ts) の値を確認
  3. 消費者ファイル(messages/*.json)を SSOT に合わせて修正
  4. 再度 npm run audit:ssot で修正を検証

Never:

  • SSOT 側(config.ts)を messages に合わせて変更しない(逆方向)
  • 手動で価格フォーマットを推測しない(スクリプトの変換ロジックに従う)