AgentSkillsCN

fluentvalidation-command-arguments

在使用Spectre.Console.CLI结合FluentValidation实现命令参数校验时,请使用本指南。在创建或修改斜杠命令设置类时,请使用本指南。

SKILL.md
--- frontmatter
name: fluentvalidation-command-arguments
description: Guide for implementing command argument validation using FluentValidation with Spectre.Console.CLI. Use this when creating or modifying slash command settings classes.

Command Argument Validation with FluentValidation

SlashCommands MUST use FluentValidation for argument validation via Spectre.Console.CLI's validation pattern.

DO:

  • Create validator classes alongside settings classes (e.g., StoryCommandSettingsValidator)
  • Inherit validators from AbstractValidator<TSettings>
  • Define validation rules in the validator constructor
  • Override Validate() in settings class to instantiate validator and return ValidationResult
  • Map FluentValidation errors to ValidationResult.Error(message)

DON'T:

  • Perform validation in ExecuteAsync method with manual conditionals
  • Use DataAnnotations attributes for complex cross-property validation
  • Build custom validation frameworks

Example Pattern:

csharp
public override ValidationResult Validate()
{
    var validator = new StoryCommandSettingsValidator();
    var result = validator.Validate(this);
    return result.IsValid 
        ? ValidationResult.Success() 
        : ValidationResult.Error(result.Errors.First().ErrorMessage);
}

Rationale: Consistent validation improves maintainability; FluentValidation provides expressive, readable rules for complex scenarios like mutually exclusive flags.