Class: Aidp::Harness::FilterDefinition

Inherits:
Object
  • Object
show all
Defined in:
lib/aidp/harness/filter_definition.rb

Overview

Value object representing a generated filter definition Created by AI during configuration, applied deterministically at runtime

Examples:

Usage

definition = FilterDefinition.new(
  tool_name: "pytest",
  summary_patterns: ["\\d+ passed", "\\d+ failed"],
  failure_section_start: "=+ FAILURES =+",
  failure_section_end: "=+ short test summary",
  error_patterns: ["AssertionError", "Error:"],
  location_patterns: ["\\S+\\.py:\\d+"],
  noise_patterns: ["^\\s*$", "^platform "]
)

See Also:

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(tool_name:, tool_command: nil, summary_patterns: [], failure_section_start: nil, failure_section_end: nil, error_section_start: nil, error_section_end: nil, error_patterns: [], location_patterns: [], noise_patterns: [], important_patterns: [], context_lines: 3, created_at: nil) ⇒ FilterDefinition

Initialize a filter definition

Parameters:

  • tool_name (String)

    Human-readable tool name (e.g., “pytest”, “eslint”)

  • tool_command (String, nil) (defaults to: nil)

    The command used to run the tool

  • summary_patterns (Array<String>) (defaults to: [])

    Regex patterns that match summary lines

  • failure_section_start (String, nil) (defaults to: nil)

    Regex pattern marking start of failures section

  • failure_section_end (String, nil) (defaults to: nil)

    Regex pattern marking end of failures section

  • error_section_start (String, nil) (defaults to: nil)

    Regex pattern marking start of errors section

  • error_section_end (String, nil) (defaults to: nil)

    Regex pattern marking end of errors section

  • error_patterns (Array<String>) (defaults to: [])

    Regex patterns that match error indicators

  • location_patterns (Array<String>) (defaults to: [])

    Regex patterns that extract file:line locations

  • noise_patterns (Array<String>) (defaults to: [])

    Regex patterns for lines to filter out

  • important_patterns (Array<String>) (defaults to: [])

    Regex patterns for lines to always keep

  • context_lines (Integer) (defaults to: 3)

    Number of context lines around failures

  • created_at (Time, nil) (defaults to: nil)

    When this definition was generated



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/aidp/harness/filter_definition.rb', line 42

def initialize(
  tool_name:,
  tool_command: nil,
  summary_patterns: [],
  failure_section_start: nil,
  failure_section_end: nil,
  error_section_start: nil,
  error_section_end: nil,
  error_patterns: [],
  location_patterns: [],
  noise_patterns: [],
  important_patterns: [],
  context_lines: 3,
  created_at: nil
)
  @tool_name = tool_name
  @tool_command = tool_command
  @summary_patterns = compile_patterns(summary_patterns)
  @failure_section_start = compile_pattern(failure_section_start)
  @failure_section_end = compile_pattern(failure_section_end)
  @error_section_start = compile_pattern(error_section_start)
  @error_section_end = compile_pattern(error_section_end)
  @error_patterns = compile_patterns(error_patterns)
  @location_patterns = compile_patterns(location_patterns)
  @noise_patterns = compile_patterns(noise_patterns)
  @important_patterns = compile_patterns(important_patterns)
  @context_lines = context_lines
  @created_at = created_at || Time.now

  freeze
end

Instance Attribute Details

#context_linesObject (readonly)

Returns the value of attribute context_lines.



22
23
24
# File 'lib/aidp/harness/filter_definition.rb', line 22

def context_lines
  @context_lines
end

#created_atObject (readonly)

Returns the value of attribute created_at.



22
23
24
# File 'lib/aidp/harness/filter_definition.rb', line 22

def created_at
  @created_at
end

#error_patternsObject (readonly)

Returns the value of attribute error_patterns.



22
23
24
# File 'lib/aidp/harness/filter_definition.rb', line 22

def error_patterns
  @error_patterns
end

#error_section_endObject (readonly)

Returns the value of attribute error_section_end.



22
23
24
# File 'lib/aidp/harness/filter_definition.rb', line 22

def error_section_end
  @error_section_end
end

#error_section_startObject (readonly)

Returns the value of attribute error_section_start.



22
23
24
# File 'lib/aidp/harness/filter_definition.rb', line 22

def error_section_start
  @error_section_start
end

#failure_section_endObject (readonly)

Returns the value of attribute failure_section_end.



22
23
24
# File 'lib/aidp/harness/filter_definition.rb', line 22

def failure_section_end
  @failure_section_end
end

#failure_section_startObject (readonly)

Returns the value of attribute failure_section_start.



22
23
24
# File 'lib/aidp/harness/filter_definition.rb', line 22

def failure_section_start
  @failure_section_start
end

#important_patternsObject (readonly)

Returns the value of attribute important_patterns.



22
23
24
# File 'lib/aidp/harness/filter_definition.rb', line 22

def important_patterns
  @important_patterns
end

#location_patternsObject (readonly)

Returns the value of attribute location_patterns.



22
23
24
# File 'lib/aidp/harness/filter_definition.rb', line 22

def location_patterns
  @location_patterns
end

#noise_patternsObject (readonly)

Returns the value of attribute noise_patterns.



22
23
24
# File 'lib/aidp/harness/filter_definition.rb', line 22

def noise_patterns
  @noise_patterns
end

#summary_patternsObject (readonly)

Returns the value of attribute summary_patterns.



22
23
24
# File 'lib/aidp/harness/filter_definition.rb', line 22

def summary_patterns
  @summary_patterns
end

#tool_commandObject (readonly)

Returns the value of attribute tool_command.



22
23
24
# File 'lib/aidp/harness/filter_definition.rb', line 22

def tool_command
  @tool_command
end

#tool_nameObject (readonly)

Returns the value of attribute tool_name.



22
23
24
# File 'lib/aidp/harness/filter_definition.rb', line 22

def tool_name
  @tool_name
end

Class Method Details

.from_hash(hash) ⇒ FilterDefinition

Create from a hash (e.g., loaded from YAML config)

Parameters:

  • hash (Hash)

    Definition data with string or symbol keys

Returns:



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/aidp/harness/filter_definition.rb', line 78

def self.from_hash(hash)
  hash = hash.transform_keys(&:to_sym)

  new(
    tool_name: hash[:tool_name] || "unknown",
    tool_command: hash[:tool_command],
    summary_patterns: Array(hash[:summary_patterns]),
    failure_section_start: hash[:failure_section_start],
    failure_section_end: hash[:failure_section_end],
    error_section_start: hash[:error_section_start],
    error_section_end: hash[:error_section_end],
    error_patterns: Array(hash[:error_patterns]),
    location_patterns: Array(hash[:location_patterns]),
    noise_patterns: Array(hash[:noise_patterns]),
    important_patterns: Array(hash[:important_patterns]),
    context_lines: hash[:context_lines] || 3,
    created_at: hash[:created_at] ? Time.parse(hash[:created_at].to_s) : nil
  )
end

Instance Method Details

#==(other) ⇒ Object Also known as: eql?

Equality based on all attributes



176
177
178
179
180
# File 'lib/aidp/harness/filter_definition.rb', line 176

def ==(other)
  return false unless other.is_a?(FilterDefinition)

  to_h == other.to_h
end

#error_line?(line) ⇒ Boolean

Check if a line matches any error pattern

Parameters:

  • line (String)

    Line to check

Returns:

  • (Boolean)


145
146
147
# File 'lib/aidp/harness/filter_definition.rb', line 145

def error_line?(line)
  @error_patterns.any? { |pattern| line.match?(pattern) }
end

#extract_locations(line) ⇒ Array<String>

Extract file locations from a line

Parameters:

  • line (String)

    Line to extract locations from

Returns:

  • (Array<String>)

    Extracted locations



169
170
171
172
173
# File 'lib/aidp/harness/filter_definition.rb', line 169

def extract_locations(line)
  @location_patterns.flat_map do |pattern|
    line.scan(pattern).flatten
  end.compact.uniq
end

#has_error_section?Boolean

Check if this definition has error section markers

Returns:

  • (Boolean)


129
130
131
# File 'lib/aidp/harness/filter_definition.rb', line 129

def has_error_section?
  !@error_section_start.nil?
end

#has_failure_section?Boolean

Check if this definition has failure section markers

Returns:

  • (Boolean)


122
123
124
# File 'lib/aidp/harness/filter_definition.rb', line 122

def has_failure_section?
  !@failure_section_start.nil?
end

#hashObject



184
185
186
# File 'lib/aidp/harness/filter_definition.rb', line 184

def hash
  to_h.hash
end

#important_line?(line) ⇒ Boolean

Check if a line should always be kept

Parameters:

  • line (String)

    Line to check

Returns:

  • (Boolean)


161
162
163
# File 'lib/aidp/harness/filter_definition.rb', line 161

def important_line?(line)
  @important_patterns.any? { |pattern| line.match?(pattern) }
end

#noise_line?(line) ⇒ Boolean

Check if a line should be filtered as noise

Parameters:

  • line (String)

    Line to check

Returns:

  • (Boolean)


153
154
155
# File 'lib/aidp/harness/filter_definition.rb', line 153

def noise_line?(line)
  @noise_patterns.any? { |pattern| line.match?(pattern) }
end

#summary_line?(line) ⇒ Boolean

Check if a line matches any summary pattern

Parameters:

  • line (String)

    Line to check

Returns:

  • (Boolean)


137
138
139
# File 'lib/aidp/harness/filter_definition.rb', line 137

def summary_line?(line)
  @summary_patterns.any? { |pattern| line.match?(pattern) }
end

#to_hHash

Convert to hash for serialization (e.g., saving to YAML)

Returns:

  • (Hash)

    Serializable representation



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/aidp/harness/filter_definition.rb', line 101

def to_h
  {
    tool_name: @tool_name,
    tool_command: @tool_command,
    summary_patterns: patterns_to_strings(@summary_patterns),
    failure_section_start: pattern_to_string(@failure_section_start),
    failure_section_end: pattern_to_string(@failure_section_end),
    error_section_start: pattern_to_string(@error_section_start),
    error_section_end: pattern_to_string(@error_section_end),
    error_patterns: patterns_to_strings(@error_patterns),
    location_patterns: patterns_to_strings(@location_patterns),
    noise_patterns: patterns_to_strings(@noise_patterns),
    important_patterns: patterns_to_strings(@important_patterns),
    context_lines: @context_lines,
    created_at: @created_at&.iso8601
  }.compact
end