Skip to content

Expose implemented functionality through YAML parsing struct fields #347

@milliondreams

Description

@milliondreams

Summary

Critical: The test harness has extensive implemented functionality that is not accessible through YAML configuration due to missing struct fields. This issue addresses the 12 ready-to-use features that just need YAML exposure.

Background

Investigation revealed that 67% of "missing" features are already fully implemented in the codebase but not exposed through YAML parsing structs. See analysis: cursor_workspace/implemented-vs-missing-analysis.md

Features Ready for YAML Exposure

🟢 Field Validation (FULLY IMPLEMENTED)

Implementation: crates/mandrel-mcp-th/src/validation/jsonpath.rs

  • contains → PathConstraint::Contains
  • min_length → ArrayLength constraint
  • max_length → ArrayLength constraint
  • array_length → ArrayLength constraint

🟢 Performance Testing (FULLY IMPLEMENTED)

Implementation: crates/mandrel-mcp-th/src/runner/metrics.rs

  • performance_tests → MetricsCollector system
  • max_execution_time_ms → Duration tracking
  • memory_limit_mb → Memory monitoring

🟢 Test Dependencies (TRIVIAL FIX)

Implementation: crates/mandrel-mcp-th/src/spec/mod.rs

  • depends_on → Already exists as dependencies, needs serde alias

�� Advanced Validation (FULLY IMPLEMENTED)

Implementation: crates/mandrel-mcp-th/src/validation/custom.rs

  • security_constraints → Custom validators
  • Error injection → ValidationError types

Required Changes

File: crates/mandrel-mcp-th/src/spec/mod.rs

1. Update FieldValidation struct

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FieldValidation {
    pub field: String,
    pub field_type: Option<String>,
    pub value: Option<serde_json::Value>,
    pub pattern: Option<String>,
    pub min: Option<f64>,
    pub max: Option<f64>,
    
    // ✅ ADD THESE - Already implemented in validation engine
    pub contains: Option<String>,           // Maps to PathConstraint::Contains
    pub min_length: Option<usize>,         // Maps to ArrayLength constraint
    pub max_length: Option<usize>,         // Maps to ArrayLength constraint
    pub array_length: Option<usize>,       // Maps to ArrayLength constraint
}

2. Update ExpectedOutput struct

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExpectedOutput {
    pub fields: Vec<FieldValidation>,
    
    // ✅ ADD THESE - Already implemented in metrics system
    pub performance_tests: Option<bool>,
    pub max_execution_time_ms: Option<u64>,
    pub memory_limit_mb: Option<u64>,
    
    // ✅ ADD THESE - Already implemented in validation engine
    pub security_constraints: Option<Vec<SecurityConstraint>>,
}

3. Fix TestCase dependencies

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TestCase {
    pub name: String,
    pub description: Option<String>,
    
    // ✅ ADD ALIAS for YAML compatibility
    #[serde(alias = "depends_on")]
    pub dependencies: Option<Vec<String>>,
    
    // ... other fields
}

4. Add SecurityConstraint type

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SecurityConstraint {
    pub constraint_type: String,
    pub enabled: bool,
    pub parameters: Option<serde_json::Value>,
}

Wire-up Required

Update validation logic to use new fields:

  1. crates/mandrel-mcp-th/src/validation/mod.rs - Map new validation fields to PathConstraint
  2. crates/mandrel-mcp-th/src/executor.rs - Apply performance limits
  3. crates/mandrel-mcp-th/src/validation/custom.rs - Enable security constraints

Testing

Update existing YAML examples to use new fields:

  • crates/mandrel-mcp-th/examples/everything-server.yaml
  • crates/mandrel-mcp-th/examples/filesystem-server-mcp-compliant.yaml

Validation:

  • Run: cargo run -- validate examples/everything-server.yaml
  • Ensure all previously "missing" features now work

Success Criteria

  • All 12 struct fields added to parsing structs
  • YAML examples validate without errors
  • Field validation features work (contains, min_length, etc.)
  • Performance testing features work (max_execution_time_ms, etc.)
  • Dependencies work with depends_on field name
  • Security constraints can be configured
  • Updated schema documentation reflects new capabilities

Impact

Unlocks 70% more functionality with minimal implementation effort. Transform test harness from 30% to 90% accessible capability.

References

  • Analysis: cursor_workspace/implemented-vs-missing-analysis.md
  • Schema: cursor_workspace/yaml-test-spec.schema.json
  • Missing features: cursor_workspace/missing-features-list.md

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions