Token导航 LogoToken导航

Agent Skill · 待分类

adf-validation-rules(adf 验证规则)

用于辅助安全审计、权限检查、凭据风险、认证流程和常见漏洞排查。它适合让 Agent 梳理敏感配置、检查依赖风险、分析鉴权逻辑或生成安全复核清单。使用时不能把工具输出直接当最终结论,涉及密钥、令牌、用户数据或生产系统时,应先确认最小权限、脱敏方式和操作边界。

adf-validation-rules 是待分类类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为接触敏感数据;许可证为 MIT,第三方扫描已通过,按安装量在待分类类的 11,209 个 Skill 里排第 1,903。

总安装 2,105周安装 86GitHub Stars 33下载 674核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:adf-validation-rules(adf 验证规则)
来源仓库:https://github.com/josiahsiegel/claude-plugin-marketplace
仓库路径:skills/adf-validation-rules
安装命令:
npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill adf-validation-rules
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。不同来源提供的安装方式可能略有差异;本站展示可直接复制的安装命令,安装前请核对来源页面。

skills.shnpx skills
npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill adf-validation-rules

这个 Skill 是做什么的

这个 Skill 的分类还没最终确定,用法以来源仓库的说明为准。

提供 Azure Data Factory 的验证规则与嵌套活动限制说明,防止配置错误。明确列出控制流活动的合法嵌套组合,避免因结构违规导致流水线失败。帮助开发者提前规避 ADF 特有的架构约束问题。仅作为参考信息,部署前仍需结合实际环境测试验证。

adf-validation-rules 属于待分类类 Skill,可作为该场景下的辅助能力补充。

来源仓库内路径:skills/adf-validation-rules

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要接触敏感数据,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

adf-validation-rules 怎么安装?

在终端执行 npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill adf-valid…。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

adf-validation-rules 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

adf-validation-rules 需要什么权限?

权限级别是接触敏感数据。该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

adf-validation-rules 是免费的吗?

来源标注的许可证是 MIT。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

adf-validation-rules 用的人多吗?

公开数据是累计安装 2,105 次,近一周安装 86 次,下载 674 次,GitHub 33 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

adf-validation-rules 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 3 个目录同时收录,说明这个 Skill 流传比较广。
  • 许可证明确为 MIT,商用和分发边界好判断。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 需要接触敏感数据,装到常用环境前要先评估影响面。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理待分类类任务、又不想每次都手写提示词的人。
  • 需要许可证清楚、并且有第三方扫描结果的团队项目。

不太适合

  • 环境里有大量密钥、凭证,不方便给第三方 Skill 读取的人。
  • 需要厂商级技术支持和 SLA 的生产系统。

待分类类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
infsh-cli

infsh CLI · Codex、Claude

4,374,576382权限未标注未明确未收录
ai-video-generation

AI 视频生成 · Codex、Claude

4,313,376382调用外部服务未明确有提醒
lark-openapi-explorer

云雀 OpenAPI 浏览器 · Codex、Claude

2,064,1209,011需要联网未明确有提醒
lark-workflow-standup-report

Lark 工作流程站立报告 · Codex、Claude

2,041,6328,978需要联网未明确通过
use-my-browser

使用我的浏览器 · Codex、Claude

1,848,49140操作浏览器未明确未通过
adf-validation-rules

adf 验证规则 · 本页

2,10533接触敏感数据MIT通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Azure Data Factory Validation Rules and Limitations

🚨 CRITICAL: Activity Nesting Limitations

Azure Data Factory has STRICT nesting rules for control flow activities. Violating these rules will cause pipeline failures or prevent pipeline creation.

Supported Control Flow Activities for Nesting

Four control flow activities support nested activities:

  • ForEach: Iterates over collections and executes activities in a loop
  • If Condition: Branches based on true/false evaluation
  • Until: Implements do-until loops with timeout options
  • Switch: Evaluates activities matching case conditions

✅ PERMITTED Nesting Combinations

Parent ActivityCan ContainNotes
ForEachIf Condition✅ Allowed
ForEachSwitch✅ Allowed
UntilIf Condition✅ Allowed
UntilSwitch✅ Allowed

❌ PROHIBITED Nesting Combinations

Parent ActivityCANNOT ContainReason
If ConditionForEach❌ Not supported - use Execute Pipeline workaround
If ConditionSwitch❌ Not supported - use Execute Pipeline workaround
If ConditionUntil❌ Not supported - use Execute Pipeline workaround
If ConditionAnother If❌ Cannot nest If within If
SwitchForEach❌ Not supported - use Execute Pipeline workaround
SwitchIf Condition❌ Not supported - use Execute Pipeline workaround
SwitchUntil❌ Not supported - use Execute Pipeline workaround
SwitchAnother Switch❌ Cannot nest Switch within Switch
ForEachAnother ForEach❌ Single level only - use Execute Pipeline workaround
UntilAnother Until❌ Single level only - use Execute Pipeline workaround
ForEachUntil❌ Single level only - use Execute Pipeline workaround
UntilForEach❌ Single level only - use Execute Pipeline workaround

🚫 Special Activity Restrictions

Validation Activity:

  • ❌ CANNOT be placed inside ANY nested activity
  • ❌ CANNOT be used within ForEach, If, Switch, or Until activities
  • ✅ Must be at pipeline root level only

🔧 Workaround: Execute Pipeline Pattern

The ONLY supported workaround for prohibited nesting combinations:

Instead of direct nesting, use the Execute Pipeline Activity to call a child pipeline:

{
  "name": "ParentPipeline_WithIfCondition",
  "activities": [
    {
      "name": "IfCondition_Parent",
      "type": "IfCondition",
      "typeProperties": {
        "expression": "@equals(pipeline().parameters.ProcessData, 'true')",
        "ifTrueActivities": [
          {
            "name": "ExecuteChildPipeline_WithForEach",
            "type": "ExecutePipeline",
            "typeProperties": {
              "pipeline": {
                "referenceName": "ChildPipeline_ForEachLoop",
                "type": "PipelineReference"
              },
              "parameters": {
                "ItemList": "@pipeline().parameters.Items"
              }
            }
          }
        ]
      }
    }
  ]
}

Child Pipeline Structure:

{
  "name": "ChildPipeline_ForEachLoop",
  "parameters": {
    "ItemList": {"type": "array"}
  },
  "activities": [
    {
      "name": "ForEach_InChildPipeline",
      "type": "ForEach",
      "typeProperties": {
        "items": "@pipeline().parameters.ItemList",
        "activities": [
          // Your ForEach logic here
        ]
      }
    }
  ]
}

Why This Works:

  • Each pipeline can have ONE level of nesting
  • Execute Pipeline creates a new pipeline context
  • Child pipeline gets its own nesting level allowance
  • Enables unlimited depth through pipeline chaining

🔢 Activity and Resource Limits

Pipeline Limits

ResourceLimitNotes
Activities per pipeline80Includes inner activities for containers
Parameters per pipeline50-
ForEach concurrent iterations50 (maximum)Set via batchCount property
ForEach items100,000-
Lookup activity rows5,000Maximum rows returned
Lookup activity size4 MBMaximum size of returned data
Web activity timeout1 hourDefault timeout for Web activities
Copy activity timeout7 daysMaximum execution time

ForEach Activity Configuration

{
  "name": "ForEachActivity",
  "type": "ForEach",
  "typeProperties": {
    "items": "@pipeline().parameters.ItemList",
    "isSequential": false,  // false = parallel execution
    "batchCount": 50,       // Max 50 concurrent iterations
    "activities": [
      // Nested activities
    ]
  }
}

Critical Considerations:

  • isSequential: true → Executes one item at a time (slow but predictable)
  • isSequential: false → Executes up to batchCount items in parallel
  • Maximum batchCount is 50 regardless of setting
  • Cannot use Set Variable activity inside parallel ForEach (variable scope is pipeline-level)

Set Variable Activity Limitations

❌ CANNOT use Set Variable inside ForEach with isSequential: false

  • Reason: Variables are pipeline-scoped, not ForEach-scoped
  • Multiple parallel iterations would cause race conditions
  • ✅ Alternative: Use Append Variable with array type, or use sequential execution

📊 Linked Services: Azure Blob Storage

Authentication Methods

1. Account Key (Basic)
{
  "type": "AzureBlobStorage",
  "typeProperties": {
    "connectionString": {
      "type": "SecureString",
      "value": "DefaultEndpointsProtocol=https;AccountName=<account>;AccountKey=<key>"
    }
  }
}

⚠️ Limitations:

  • Secondary Blob service endpoints are NOT supported
  • Security Risk: Account keys should be stored in Azure Key Vault
2. Shared Access Signature (SAS)
{
  "type": "AzureBlobStorage",
  "typeProperties": {
    "sasUri": {
      "type": "SecureString",
      "value": "https://<account>.blob.core.windows.net/<container>?<SAS-token>"
    }
  }
}

Critical Requirements:

  • Dataset folderPath must be absolute path from container level
  • SAS token expiry must extend beyond pipeline execution
  • SAS URI path must align with dataset configuration
3. Service Principal
{
  "type": "AzureBlobStorage",
  "typeProperties": {
    "serviceEndpoint": "https://<account>.blob.core.windows.net",
    "accountKind": "StorageV2",  // REQUIRED for service principal
    "servicePrincipalId": "<client-id>",
    "servicePrincipalCredential": {
      "type": "SecureString",
      "value": "<client-secret>"
    },
    "tenant": "<tenant-id>"
  }
}

Critical Requirements:

  • accountKind MUST be set (StorageV2, BlobStorage, or BlockBlobStorage)
  • Service Principal requires Storage Blob Data Reader (source) or Storage Blob Data Contributor (sink) role
  • ❌ NOT compatible with soft-deleted blob accounts in Data Flow
4. Managed Identity (Recommended)
{
  "type": "AzureBlobStorage",
  "typeProperties": {
    "serviceEndpoint": "https://<account>.blob.core.windows.net",
    "accountKind": "StorageV2"  // REQUIRED for managed identity
  },
  "connectVia": {
    "referenceName": "AutoResolveIntegrationRuntime",
    "type": "IntegrationRuntimeReference"
  }
}

Critical Requirements:

  • accountKind MUST be specified (cannot be empty or "Storage")
  • ❌ Empty or "Storage" account kind will cause Data Flow failures
  • Managed identity must have Storage Blob Data Reader/Contributor role assigned
  • For Storage firewall: Must enable "Allow trusted Microsoft services"

Common Blob Storage Pitfalls

IssueCauseSolution
Data Flow fails with managed identityaccountKind empty or "Storage"Set accountKind to StorageV2
Secondary endpoint doesn't workUsing account key authNot supported - use different auth method
SAS token expired during runToken expiry too shortExtend SAS token validity period
Cannot access $logs containerSystem container not visible in UIUse direct path reference
Soft-deleted blobs inaccessibleService principal/managed identityUse account key or SAS instead
Private endpoint connection failsWrong endpoint for Data FlowEnsure ADLS Gen2 private endpoint exists

📊 Linked Services: Azure SQL Database

Authentication Methods

1. SQL Authentication
{
  "type": "AzureSqlDatabase",
  "typeProperties": {
    "server": "<server-name>.database.windows.net",
    "database": "<database-name>",
    "authenticationType": "SQL",
    "userName": "<username>",
    "password": {
      "type": "SecureString",
      "value": "<password>"
    }
  }
}

Best Practice:

  • Store password in Azure Key Vault
  • Use connection string with Key Vault reference
2. Service Principal
{
  "type": "AzureSqlDatabase",
  "typeProperties": {
    "server": "<server-name>.database.windows.net",
    "database": "<database-name>",
    "authenticationType": "ServicePrincipal",
    "servicePrincipalId": "<client-id>",
    "servicePrincipalCredential": {
      "type": "SecureString",
      "value": "<client-secret>"
    },
    "tenant": "<tenant-id>"
  }
}

Requirements:

  • Microsoft Entra admin must be configured on SQL server
  • Service principal must have contained database user created
  • Grant appropriate role: db_datareader, db_datawriter, etc.
3. Managed Identity
{
  "type": "AzureSqlDatabase",
  "typeProperties": {
    "server": "<server-name>.database.windows.net",
    "database": "<database-name>",
    "authenticationType": "SystemAssignedManagedIdentity"
  }
}

Requirements:

  • Create contained database user for managed identity
  • Grant appropriate database roles
  • Configure firewall to allow Azure services (or specific IP ranges)

SQL Database Configuration Best Practices

Connection String Parameters
Server=tcp:<server>.database.windows.net,1433;
Database=<database>;
Encrypt=mandatory;          // Options: mandatory, optional, strict
TrustServerCertificate=false;
ConnectTimeout=30;
CommandTimeout=120;
Pooling=true;
ConnectRetryCount=3;
ConnectRetryInterval=10;

Critical Parameters:

  • Encrypt: Default is mandatory (recommended)
  • Pooling: Set to false if experiencing idle connection issues
  • ConnectRetryCount: Recommended for transient fault handling
  • ConnectRetryInterval: Seconds between retries

Common SQL Database Pitfalls

IssueCauseSolution
Serverless tier auto-pausedPipeline doesn't wait for resumeImplement retry logic or keep-alive
Connection pool timeoutIdle connections closedAdd Pooling=false or configure retry
Firewall blocks connectionIP not whitelistedAdd Azure IR IPs or enable Azure services
Always Encrypted fails in Data FlowNot supported for sinkUse service principal/managed identity in copy activity
Decimal precision lossCopy supports up to 28 precisionUse string type for higher precision
Parallel copy not workingNo partition configurationEnable physical or dynamic range partitioning

Performance Optimization

Parallel Copy Configuration
{
  "source": {
    "type": "AzureSqlSource",
    "partitionOption": "PhysicalPartitionsOfTable"  // or "DynamicRange"
  },
  "parallelCopies": 8,  // Recommended: (DIU or IR nodes) × (2 to 4)
  "enableStaging": true,
  "stagingSettings": {
    "linkedServiceName": {
      "referenceName": "AzureBlobStorage",
      "type": "LinkedServiceReference"
    }
  }
}

Partition Options:

  • PhysicalPartitionsOfTable: Uses SQL Server physical partitions
  • DynamicRange: Creates logical partitions based on column values
  • None: No partitioning (default)

Staging Best Practices:

  • Always use staging for large data movements (> 1GB)
  • Use PolyBase or COPY statement for best performance
  • Parquet format recommended for staging files

🔍 Data Flow Limitations

General Limits

  • Column name length: 128 characters maximum
  • Row size: 1 MB maximum (some sinks like SQL have lower limits)
  • String column size: Varies by sink (SQL: 8000 for varchar, 4000 for nvarchar)

Transformation-Specific Limits

TransformationLimitation
LookupCache size limited by cluster memory
JoinLarge joins may cause memory errors
PivotMaximum 10,000 unique values
WindowRequires partitioning for large datasets

Performance Considerations

  • Partitioning: Always partition large datasets before transformations
  • Broadcast: Use broadcast hint for small dimension tables
  • Sink optimization: Enable table option "Recreate" instead of "Truncate" for better performance

🛡️ Validation Checklist for Pipeline Creation

Before Creating Pipeline

  • Verify activity nesting follows permitted combinations
  • Check ForEach activities don't contain other ForEach/Until
  • Verify If/Switch activities don't contain ForEach/Until/If/Switch
  • Ensure Validation activities are at pipeline root level only
  • Confirm total activities < 80 per pipeline
  • Verify no Set Variable activities in parallel ForEach

Linked Service Validation

  • Blob Storage: If using managed identity/service principal, accountKind is set
  • SQL Database: Authentication method matches security requirements
  • All services: Secrets stored in Key Vault, not hardcoded
  • All services: Firewall rules configured for integration runtime IPs
  • Network: Private endpoints configured if using VNet integration

Activity Configuration Validation

  • ForEach: batchCount ≤ 50 if parallel execution
  • Lookup: Query returns < 5000 rows and < 4 MB data
  • Copy: DIU configured appropriately (2-256 for Azure IR)
  • Copy: Staging enabled for large data movements
  • All activities: Timeout values appropriate for expected execution time
  • All activities: Retry logic configured for transient failures

Data Flow Validation

  • Column names ≤ 128 characters
  • Source query doesn't return > 1 MB per row
  • Partitioning configured for large datasets
  • Sink has appropriate schema and data type mappings
  • Staging linked service configured for optimal performance

🔍 Automated Validation Script

CRITICAL: Always run automated validation before committing or deploying ADF pipelines!

The adf-master plugin includes a comprehensive PowerShell validation script that checks for ALL the rules and limitations documented above.

Using the Validation Script

Location: ${CLAUDE_PLUGIN_ROOT}/scripts/validate-adf-pipelines.ps1

Basic usage:

# From the root of your ADF repository
pwsh -File validate-adf-pipelines.ps1

With custom paths:

pwsh -File validate-adf-pipelines.ps1 `
    -PipelinePath "path/to/pipeline" `
    -DatasetPath "path/to/dataset"

With strict mode (additional warnings):

pwsh -File validate-adf-pipelines.ps1 -Strict

What the Script Validates

The automated validation script checks for issues that Microsoft's official @microsoft/azure-data-factory-utilities package does NOT validate:

  1. Activity Nesting Violations:

- ForEach → ForEach, Until, Validation - Until → Until, ForEach, Validation - IfCondition → ForEach, If, IfCondition, Switch, Until, Validation - Switch → ForEach, If, IfCondition, Switch, Until, Validation

  1. Resource Limits:

- Pipeline activity count (max 120, warn at 100) - Pipeline parameter count (max 50) - Pipeline variable count (max 50) - ForEach batchCount limit (max 50, warn at 30 in strict mode)

  1. Variable Scope Violations:

- SetVariable in parallel ForEach (causes race conditions) - Proper AppendVariable vs SetVariable usage

  1. Dataset Configuration Issues:

- Missing fileName or wildcardFileName for file-based datasets - AzureBlobFSLocation missing required fileSystem property - Missing required properties for DelimitedText, Json, Parquet types

  1. Copy Activity Validations:

- Source/sink type compatibility with dataset types - Lookup activity firstRowOnly=false warnings (5000 row/4MB limits) - Blob file dependencies (additionalColumns logging pattern)

Integration with CI/CD

GitHub Actions example:

- name: Validate ADF Pipelines
  run: |
    pwsh -File validate-adf-pipelines.ps1 -PipelinePath pipeline -DatasetPath dataset
  shell: pwsh

Azure DevOps example:

- task: PowerShell@2
  displayName: 'Validate ADF Pipelines'
  inputs:
    filePath: 'validate-adf-pipelines.ps1'
    arguments: '-PipelinePath pipeline -DatasetPath dataset'
    pwsh: true

Command Reference

Use the /adf-validate command to run the validation script with proper guidance:

/adf-validate

This command will:

  1. Detect your ADF repository structure
  2. Run the validation script with appropriate paths
  3. Parse and explain any errors or warnings found
  4. Provide specific solutions for each violation
  5. Recommend next actions based on results
  6. Suggest CI/CD integration patterns

Exit Codes

  • 0: Validation passed (no errors)
  • 1: Validation failed (errors found - DO NOT DEPLOY)

Best Practices

  1. Run validation before every commit to catch issues early
  2. Add validation to CI/CD pipeline to prevent invalid deployments
  3. Use strict mode during development for additional warnings
  4. Re-validate after bulk changes or generated pipelines
  5. Document validation exceptions if you must bypass a warning
  6. Share validation results with team to prevent repeated mistakes

🚨 CRITICAL: Enforcement Protocol

When creating or modifying ADF pipelines:

  1. ALWAYS validate activity nesting against the permitted/prohibited table
  2. REJECT any attempt to create prohibited nesting combinations
  3. SUGGEST Execute Pipeline workaround for complex nesting needs
  4. VALIDATE linked service authentication matches the connector type
  5. CHECK all limits (activities, parameters, ForEach iterations, etc.)
  6. VERIFY required properties are set (e.g., accountKind for managed identity)
  7. WARN about common pitfalls specific to the connector being used

Example Validation Response:

❌ INVALID PIPELINE STRUCTURE DETECTED:

Issue: ForEach activity contains another ForEach activity
Location: Pipeline "PL_DataProcessing" → ForEach "OuterLoop" → ForEach "InnerLoop"

This violates Azure Data Factory nesting rules:
- ForEach activities support only a SINGLE level of nesting
- You CANNOT nest ForEach within ForEach

✅ RECOMMENDED SOLUTION:
Use the Execute Pipeline pattern:
1. Create a child pipeline with the inner ForEach logic
2. Replace the inner ForEach with an Execute Pipeline activity
3. Pass required parameters to the child pipeline

Would you like me to generate the refactored pipeline structure?

📚 Reference Documentation

Official Microsoft Learn Resources:

Last Updated: 2025-01-24 (Based on official Microsoft documentation)

This validation rules skill MUST be consulted before creating or modifying ANY Azure Data Factory pipeline to ensure compliance with platform limitations and best practices.

Progressive Disclosure References

For detailed validation matrices and resource limits, see:

  • Nesting Rules: references/nesting-rules.md - Complete matrix of permitted and prohibited activity nesting combinations with workaround patterns
  • Resource Limits: references/resource-limits.md - Complete reference for all ADF limits (pipeline, activity, trigger, data flow, integration runtime, expression, API)

平台分布

Antigravity

25.63%
按下载量换算173

Claude Code

20.69%
按下载量换算139

OpenCode

18.23%
按下载量换算123

Gemini CLI

13.39%
按下载量换算90

windsurf

7.48%
按下载量换算50

Cursor

3.11%
按下载量换算21

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

接触敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。

继续浏览同类 Skills