Module: Legion::Extensions::MindGrowth::Runners::RiskAssessor

Extended by:
RiskAssessor
Includes:
Helpers::Lex
Included in:
RiskAssessor
Defined in:
lib/legion/extensions/mind_growth/runners/risk_assessor.rb

Constant Summary collapse

HIGH_BLAST_CATEGORIES =
%i[safety coordination].freeze
MEDIUM_BLAST_CATEGORIES =
%i[cognition].freeze
HOT_PATH_CATEGORIES =
%i[perception memory].freeze

Instance Method Summary collapse

Instance Method Details

#assess_risk(proposal_id:) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/legion/extensions/mind_growth/runners/risk_assessor.rb', line 17

def assess_risk(proposal_id:, **)
  proposal = Runners::Proposer.get_proposal_object(proposal_id)
  return { success: false, error: :not_found } unless proposal

  dimensions = evaluate_dimensions(proposal)
  tier       = calculate_tier(dimensions)
  recommendation = Helpers::Constants::RISK_RECOMMENDATIONS[tier]

  { success: true, proposal_id: proposal_id, risk_tier: tier,
    dimensions: dimensions, recommendation: recommendation }
end

#risk_summary(proposals: nil) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/legion/extensions/mind_growth/runners/risk_assessor.rb', line 29

def risk_summary(proposals: nil, **)
  ids = if proposals
          Array(proposals).map { |p| p.is_a?(Hash) ? p[:id] : p.to_s }
        else
          Runners::Proposer.list_proposals(limit: 100)[:proposals].map { |p| p[:id] }
        end

  results = ids.filter_map do |id|
    result = assess_risk(proposal_id: id)
    next unless result[:success]

    result
  end

  grouped = Helpers::Constants::RISK_TIERS.to_h { |tier| [tier, []] }
  results.each { |r| grouped[r[:risk_tier]] << r }

  { success: true, total: results.size, by_tier: grouped }
end