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
Constant Summary collapse
- SUCCESS =
0- GENERAL =
1- VALIDATION =
2- CONFIG =
3- PERMISSION =
4- DEPENDENCY =
5- MAPPING =
Maps each RosettAi error class to its exit code.
{ 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
-
.for(error) ⇒ Integer
Resolves the exit code for a given error.
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.
68 69 70 71 72 73 74 |
# File 'lib/rosett_ai/exit_codes.rb', line 68 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 |