Module: RosettAi::ExitCodes

Defined in:
lib/rosett_ai/exit_codes.rb

Overview

Maps error categories to numeric exit codes for CLI process exit.

Exit codes follow Unix conventions:

  • 0: success
  • 1: general/runtime error
  • 2: validation/input error
  • 3: configuration error
  • 4: permission/access error
  • 5: dependency/environment error

Author:

  • hugo

  • claude

Constant Summary collapse

SUCCESS =

Returns Success constant.

Returns:

  • (Integer)

    Success constant.

0
GENERAL =

Returns General constant.

Returns:

  • (Integer)

    General constant.

1
VALIDATION =

Returns Validation constant.

Returns:

  • (Integer)

    Validation constant.

2
CONFIG =

Returns Config constant.

Returns:

  • (Integer)

    Config constant.

3
PERMISSION =

Returns Permission constant.

Returns:

  • (Integer)

    Permission constant.

4
DEPENDENCY =

Returns Dependency constant.

Returns:

  • (Integer)

    Dependency constant.

5
MAPPING =

Maps each RosettAi error class to its exit code.

Returns:

  • (Hash{Class => Integer})
{
  RosettAi::Error => GENERAL,
  RosettAi::ValidationError => VALIDATION,
  RosettAi::BehaviourError => VALIDATION,
  RosettAi::DesignError => VALIDATION,
  RosettAi::CompositionError => VALIDATION,
  RosettAi::CompileError => VALIDATION,
  RosettAi::ConfigurationError => CONFIG,
  RosettAi::AiConfigError => CONFIG,
  RosettAi::PolicyError => CONFIG,
  RosettAi::InitError => CONFIG,
  RosettAi::AdoptError => GENERAL,
  RosettAi::BackupError => GENERAL,
  RosettAi::BuildError => GENERAL,
  RosettAi::DocumentationError => GENERAL,
  RosettAi::ReleaseError => GENERAL,
  RosettAi::ToolingError => VALIDATION,
  RosettAi::LicenseError => CONFIG,
  RosettAi::ContentError => GENERAL,
  RosettAi::ProvenanceError => GENERAL,
  RosettAi::AuthorshipError => GENERAL,
  RosettAi::DoctorError => GENERAL,
  RosettAi::FeatureFlagError => GENERAL,
  RosettAi::ComplianceError => VALIDATION,
  RosettAi::WorkflowError => GENERAL,
  RosettAi::ProjectError => GENERAL,
  RosettAi::RetrofitError => CONFIG,
  RosettAi::GitHooksError => GENERAL,
  RosettAi::McpError => GENERAL
}.freeze

Class Method Summary collapse

Class Method Details

.for(error) ⇒ Integer

Resolves the exit code for a given error.

Walks the class hierarchy to find the most specific mapping. Falls back to GENERAL (1) for unmapped error classes.

Parameters:

  • error (Exception)

    the error to map

Returns:

  • (Integer)

    the exit code (0-5)



74
75
76
77
78
79
80
# File 'lib/rosett_ai/exit_codes.rb', line 74

def self.for(error)
  klass = error.is_a?(Class) ? error : error.class
  MAPPING.fetch(klass) do
    ancestor = klass.ancestors.find { |ancestor_class| MAPPING.key?(ancestor_class) }
    ancestor ? MAPPING[ancestor] : GENERAL
  end
end