Class: Ace::Test::EndToEndRunner::Molecules::PipelineReportGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/test/end_to_end_runner/molecules/pipeline_report_generator.rb

Overview

Generates TC-first reports from standalone verifier output.

Constant Summary collapse

FAILURE_CATEGORIES =
%w[
  test-spec-error
  tool-bug
  runner-error
  infrastructure-error
  missing-artifact
  state-drift
  behavior-regression
  discoverability-gap
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(report_writer: nil) ⇒ PipelineReportGenerator

Returns a new instance of PipelineReportGenerator.

Parameters:



24
25
26
# File 'lib/ace/test/end_to_end_runner/molecules/pipeline_report_generator.rb', line 24

def initialize(report_writer: nil)
  @report_writer = report_writer || Molecules::ReportWriter.new
end

Instance Method Details

#generate(scenario:, verifier_output:, report_dir:, provider:, started_at:, completed_at:, metadata: {}) ⇒ Models::TestResult

Parameters:

  • scenario (Models::TestScenario)
  • verifier_output (String)
  • report_dir (String)
  • provider (String)
  • started_at (Time)
  • completed_at (Time)

Returns:



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/ace/test/end_to_end_runner/molecules/pipeline_report_generator.rb', line 35

def generate(scenario:, verifier_output:, report_dir:, provider:, started_at:, completed_at:, metadata: {})
  parsed = parse_verifier_output(verifier_output, scenario)
   = .merge(parsed[:metadata] || {})

  result = Models::TestResult.new(
    test_id: scenario.test_id,
    status: parsed[:status],
    test_cases: parsed[:test_cases],
    summary: parsed[:summary],
    error: parsed[:error],
    observations: parsed[:observations].to_s,
    started_at: started_at,
    completed_at: completed_at,
    metadata: 
  )

  FileUtils.mkdir_p(report_dir)
  @report_writer.write(result, scenario, report_dir: report_dir)
  write_goal_report(
    path: File.join(report_dir, "report.md"),
    scenario: scenario,
    provider: provider,
    result: result
  )
  result.with_report_dir(report_dir)
end

#write_failure_report(scenario:, report_dir:, provider:, started_at:, completed_at:, error_message:, failure_category: "runner-error", test_cases: [], metadata: {}) ⇒ Models::TestResult

Write deterministic error reports when pipeline execution fails before normal verifier parsing/report generation can complete.

Parameters:

  • scenario (Models::TestScenario)
  • report_dir (String)
  • provider (String)
  • started_at (Time)
  • completed_at (Time)
  • error_message (String)

Returns:



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/ace/test/end_to_end_runner/molecules/pipeline_report_generator.rb', line 72

def write_failure_report(scenario:, report_dir:, provider:, started_at:, completed_at:, error_message:,
  failure_category: "runner-error", test_cases: [], metadata: {})
  result = Models::TestResult.new(
    test_id: scenario.test_id,
    status: "error",
    test_cases: test_cases,
    summary: "Execution pipeline failed",
    error: error_message,
    observations: ["runner_observations"].to_s,
    started_at: started_at,
    completed_at: completed_at,
    metadata: .merge("failure_category" => failure_category)
  )

  FileUtils.mkdir_p(report_dir)
  @report_writer.write(result, scenario, report_dir: report_dir)
  write_goal_report(
    path: File.join(report_dir, "report.md"),
    scenario: scenario,
    provider: provider,
    result: result
  )
  result.with_report_dir(report_dir)
end