AgentSkillsCN

invariant-extractor

从system-map-collector生成的系统地图中,提取Invariants(不变条件)与Global Rules(全局规则)的技能。 从组件、边界、数据流以及运行时要素等维度,发掘系统整体应遵守的约束条件,并对可验证性进行分类。 适用时机: - 当您需要“提取不变条件”“创建Global Rules”时; - 当您需要“从系统地图中发现规则”“整理应遵守的约束条件”时; - 当system-map/*.yaml文件已存在,且您希望梳理全局规则时; - 当您希望将保障架构质量的规则正式化、明文化时。

SKILL.md
--- frontmatter
name: invariant-extractor
context: fork
description: |
  system-map-collectorで作成したシステムマップからInvariants(不変条件)とGlobal Rules(全体ルール)を抽出するスキル。
  コンポーネント、境界、データフロー、ランタイム要素等からシステム全体で守るべき制約を発見し、検証可能性を分類する。

  使用タイミング:
  - 「不変条件を抽出して」「Global Rulesを作成して」
  - 「システムマップからルールを発見して」「守るべき制約を整理して」
  - system-map/*.yaml が存在する状態で全体ルールを整理したい時
  - アーキテクチャ品質を担保するルールを明文化したい時

Invariant Extractor

system-map/*.yaml からシステム全体の不変条件(Invariants)とグローバルルール(Global Rules)を抽出する。

前提条件

  • system-map/ ディレクトリが存在すること
  • 最低限 components.yaml, boundaries.yaml が収集済みであること

ワークフロー

code
1. システムマップ読込 → 2. カテゴリ別抽出 → 3. ギャップ分析 → 4. YAML出力

Phase 1: システムマップ読込

bash
ls system-map/*.yaml

必須ファイルを確認:

  • components.yaml - コンポーネント一覧
  • boundaries.yaml - 境界定義

推奨ファイル:

  • dependencies.yaml, data-flow.yaml, runtime.yaml
  • auth-flow.yaml, api-contracts.yaml, failure-modes.yaml

Phase 2: カテゴリ別抽出

8カテゴリから不変条件を抽出する。詳細は references/extraction-patterns.md を参照。

カテゴリ抽出元典型的な不変条件
Securityboundaries (trust)認可は境界で完結、内部信頼前提禁止
Data Ownershipcomponents, data-flowデータ所有者以外は直接DB書込禁止
Auditobservability重要操作は監査ログ必須
Idempotencyruntime (queue/job)リトライ可能操作は冪等キー必須
Architecturedependencies循環依存禁止、レイヤー違反禁止
API Contractapi-contracts後方互換性維持、入力バリデーション必須
Failurefailure-modes, runtimeタイムアウト必須、graceful degradation
Environmentenvironments本番直接アクセス禁止

抽出プロセス

各カテゴリについて:

  1. 該当するシステムマップファイルを読込
  2. パターンマッチで候補を抽出
  3. confidence(high/medium/low)を判定
  4. 関連コンポーネント・境界を紐付け
yaml
# 抽出例
invariant_candidate:
  id: INV-SEC-001
  category: security
  statement: 認可チェックは必ずAPI Gateway層で完結する
  source:
    file: boundaries.yaml
    item_id: boundary-001
  related:
    components: [api-gateway, auth-service]
    boundaries: [trust-boundary-001]
  confidence: high
  verification:
    type: static  # static/test/runtime/manual
    method: middleware検査でAuthorizationヘッダー検証を確認

Phase 3: ギャップ分析

抽出した不変条件の品質をチェック:

チェック項目内容
未定義境界boundariesにcrossing_rulesが未定義
監査漏れ重要操作でobservabilityが未設定
冪等性未定義queueがあるがidempotency_keyが未定義
障害対策なし外部連携でfailure-modesが未定義

Phase 4: 出力

system-map/invariants.yaml に出力:

yaml
id: invariants
name: 不変条件・グローバルルール
collected_at: "2024-01-21T10:00:00+09:00"
source_maps:
  - components.yaml
  - boundaries.yaml
  - runtime.yaml

summary:
  total: 24
  by_category:
    security: 5
    data_ownership: 3
    audit: 4
    idempotency: 2
    architecture: 4
    api_contract: 3
    failure: 2
    environment: 1
  by_confidence:
    high: 15
    medium: 7
    low: 2
  by_verification:
    static: 8
    test: 10
    runtime: 4
    manual: 2

items:
  - id: INV-SEC-001
    category: security
    statement: 認可チェックは必ずAPI Gateway層で完結する
    rationale: 内部サービスは信頼済み前提で動作し、個別認可を持たない
    source:
      file: boundaries.yaml
      item_id: boundary-001
    related:
      components: [api-gateway, auth-service]
      boundaries: [trust-boundary-001]
    confidence: high
    verification:
      type: static
      method: middleware検査でAuthorizationヘッダー検証を確認
      implementable: true

gaps:
  - type: missing_crossing_rules
    location: boundaries.yaml#boundary-003
    severity: high
    recommendation: VPC境界のcrossing_rulesを定義する

検証可能性の分類

分類検証方法
staticlint/型チェック/静的解析循環依存検出、import制約
test単体/結合テスト冪等性テスト、境界テスト
runtimeログ/メトリクス監視監査ログ出力、タイムアウト監視
manualレビュー/監査設計レビュー、セキュリティ監査

注意事項

  • 推測で不変条件を作成しない(ソースファイルに根拠がない場合はconfidence: lowで記録)
  • 既存の system-map/invariants.yaml がある場合は差分更新
  • 1セッションで全カテゴリを網羅しようとしない(重要度の高いカテゴリから順に)