runbooks 1.1.3__py3-none-any.whl → 1.1.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. runbooks/__init__.py +31 -2
  2. runbooks/__init___optimized.py +18 -4
  3. runbooks/_platform/__init__.py +1 -5
  4. runbooks/_platform/core/runbooks_wrapper.py +141 -138
  5. runbooks/aws2/accuracy_validator.py +812 -0
  6. runbooks/base.py +7 -0
  7. runbooks/cfat/WEIGHT_CONFIG_README.md +1 -1
  8. runbooks/cfat/assessment/compliance.py +8 -8
  9. runbooks/cfat/assessment/runner.py +1 -0
  10. runbooks/cfat/cloud_foundations_assessment.py +227 -239
  11. runbooks/cfat/models.py +6 -2
  12. runbooks/cfat/tests/__init__.py +6 -1
  13. runbooks/cli/__init__.py +13 -0
  14. runbooks/cli/commands/cfat.py +274 -0
  15. runbooks/cli/commands/finops.py +1164 -0
  16. runbooks/cli/commands/inventory.py +379 -0
  17. runbooks/cli/commands/operate.py +239 -0
  18. runbooks/cli/commands/security.py +248 -0
  19. runbooks/cli/commands/validation.py +825 -0
  20. runbooks/cli/commands/vpc.py +310 -0
  21. runbooks/cli/registry.py +107 -0
  22. runbooks/cloudops/__init__.py +23 -30
  23. runbooks/cloudops/base.py +96 -107
  24. runbooks/cloudops/cost_optimizer.py +549 -547
  25. runbooks/cloudops/infrastructure_optimizer.py +5 -4
  26. runbooks/cloudops/interfaces.py +226 -227
  27. runbooks/cloudops/lifecycle_manager.py +5 -4
  28. runbooks/cloudops/mcp_cost_validation.py +252 -235
  29. runbooks/cloudops/models.py +78 -53
  30. runbooks/cloudops/monitoring_automation.py +5 -4
  31. runbooks/cloudops/notebook_framework.py +179 -215
  32. runbooks/cloudops/security_enforcer.py +125 -159
  33. runbooks/common/accuracy_validator.py +11 -0
  34. runbooks/common/aws_pricing.py +349 -326
  35. runbooks/common/aws_pricing_api.py +211 -212
  36. runbooks/common/aws_profile_manager.py +341 -0
  37. runbooks/common/aws_utils.py +75 -80
  38. runbooks/common/business_logic.py +127 -105
  39. runbooks/common/cli_decorators.py +36 -60
  40. runbooks/common/comprehensive_cost_explorer_integration.py +456 -464
  41. runbooks/common/cross_account_manager.py +198 -205
  42. runbooks/common/date_utils.py +27 -39
  43. runbooks/common/decorators.py +235 -0
  44. runbooks/common/dry_run_examples.py +173 -208
  45. runbooks/common/dry_run_framework.py +157 -155
  46. runbooks/common/enhanced_exception_handler.py +15 -4
  47. runbooks/common/enhanced_logging_example.py +50 -64
  48. runbooks/common/enhanced_logging_integration_example.py +65 -37
  49. runbooks/common/env_utils.py +16 -16
  50. runbooks/common/error_handling.py +40 -38
  51. runbooks/common/lazy_loader.py +41 -23
  52. runbooks/common/logging_integration_helper.py +79 -86
  53. runbooks/common/mcp_cost_explorer_integration.py +478 -495
  54. runbooks/common/mcp_integration.py +63 -74
  55. runbooks/common/memory_optimization.py +140 -118
  56. runbooks/common/module_cli_base.py +37 -58
  57. runbooks/common/organizations_client.py +176 -194
  58. runbooks/common/patterns.py +204 -0
  59. runbooks/common/performance_monitoring.py +67 -71
  60. runbooks/common/performance_optimization_engine.py +283 -274
  61. runbooks/common/profile_utils.py +248 -39
  62. runbooks/common/rich_utils.py +643 -92
  63. runbooks/common/sre_performance_suite.py +177 -186
  64. runbooks/enterprise/__init__.py +1 -1
  65. runbooks/enterprise/logging.py +144 -106
  66. runbooks/enterprise/security.py +187 -204
  67. runbooks/enterprise/validation.py +43 -56
  68. runbooks/finops/__init__.py +29 -33
  69. runbooks/finops/account_resolver.py +1 -1
  70. runbooks/finops/advanced_optimization_engine.py +980 -0
  71. runbooks/finops/automation_core.py +268 -231
  72. runbooks/finops/business_case_config.py +184 -179
  73. runbooks/finops/cli.py +660 -139
  74. runbooks/finops/commvault_ec2_analysis.py +157 -164
  75. runbooks/finops/compute_cost_optimizer.py +336 -320
  76. runbooks/finops/config.py +20 -20
  77. runbooks/finops/cost_optimizer.py +488 -622
  78. runbooks/finops/cost_processor.py +332 -214
  79. runbooks/finops/dashboard_runner.py +1006 -172
  80. runbooks/finops/ebs_cost_optimizer.py +991 -657
  81. runbooks/finops/elastic_ip_optimizer.py +317 -257
  82. runbooks/finops/enhanced_mcp_integration.py +340 -0
  83. runbooks/finops/enhanced_progress.py +40 -37
  84. runbooks/finops/enhanced_trend_visualization.py +3 -2
  85. runbooks/finops/enterprise_wrappers.py +230 -292
  86. runbooks/finops/executive_export.py +203 -160
  87. runbooks/finops/helpers.py +130 -288
  88. runbooks/finops/iam_guidance.py +1 -1
  89. runbooks/finops/infrastructure/__init__.py +80 -0
  90. runbooks/finops/infrastructure/commands.py +506 -0
  91. runbooks/finops/infrastructure/load_balancer_optimizer.py +866 -0
  92. runbooks/finops/infrastructure/vpc_endpoint_optimizer.py +832 -0
  93. runbooks/finops/markdown_exporter.py +338 -175
  94. runbooks/finops/mcp_validator.py +1952 -0
  95. runbooks/finops/nat_gateway_optimizer.py +1513 -482
  96. runbooks/finops/network_cost_optimizer.py +657 -587
  97. runbooks/finops/notebook_utils.py +226 -188
  98. runbooks/finops/optimization_engine.py +1136 -0
  99. runbooks/finops/optimizer.py +25 -29
  100. runbooks/finops/rds_snapshot_optimizer.py +367 -411
  101. runbooks/finops/reservation_optimizer.py +427 -363
  102. runbooks/finops/scenario_cli_integration.py +77 -78
  103. runbooks/finops/scenarios.py +1278 -439
  104. runbooks/finops/schemas.py +218 -182
  105. runbooks/finops/snapshot_manager.py +2289 -0
  106. runbooks/finops/tests/test_finops_dashboard.py +3 -3
  107. runbooks/finops/tests/test_reference_images_validation.py +2 -2
  108. runbooks/finops/tests/test_single_account_features.py +17 -17
  109. runbooks/finops/tests/validate_test_suite.py +1 -1
  110. runbooks/finops/types.py +3 -3
  111. runbooks/finops/validation_framework.py +263 -269
  112. runbooks/finops/vpc_cleanup_exporter.py +191 -146
  113. runbooks/finops/vpc_cleanup_optimizer.py +593 -575
  114. runbooks/finops/workspaces_analyzer.py +171 -182
  115. runbooks/hitl/enhanced_workflow_engine.py +1 -1
  116. runbooks/integration/__init__.py +89 -0
  117. runbooks/integration/mcp_integration.py +1920 -0
  118. runbooks/inventory/CLAUDE.md +816 -0
  119. runbooks/inventory/README.md +3 -3
  120. runbooks/inventory/Tests/common_test_data.py +30 -30
  121. runbooks/inventory/__init__.py +2 -2
  122. runbooks/inventory/cloud_foundations_integration.py +144 -149
  123. runbooks/inventory/collectors/aws_comprehensive.py +28 -11
  124. runbooks/inventory/collectors/aws_networking.py +111 -101
  125. runbooks/inventory/collectors/base.py +4 -0
  126. runbooks/inventory/core/collector.py +495 -313
  127. runbooks/inventory/discovery.md +2 -2
  128. runbooks/inventory/drift_detection_cli.py +69 -96
  129. runbooks/inventory/find_ec2_security_groups.py +1 -1
  130. runbooks/inventory/inventory_mcp_cli.py +48 -46
  131. runbooks/inventory/list_rds_snapshots_aggregator.py +192 -208
  132. runbooks/inventory/mcp_inventory_validator.py +549 -465
  133. runbooks/inventory/mcp_vpc_validator.py +359 -442
  134. runbooks/inventory/organizations_discovery.py +56 -52
  135. runbooks/inventory/rich_inventory_display.py +33 -32
  136. runbooks/inventory/unified_validation_engine.py +278 -251
  137. runbooks/inventory/vpc_analyzer.py +733 -696
  138. runbooks/inventory/vpc_architecture_validator.py +293 -348
  139. runbooks/inventory/vpc_dependency_analyzer.py +382 -378
  140. runbooks/inventory/vpc_flow_analyzer.py +3 -3
  141. runbooks/main.py +152 -9147
  142. runbooks/main_final.py +91 -60
  143. runbooks/main_minimal.py +22 -10
  144. runbooks/main_optimized.py +131 -100
  145. runbooks/main_ultra_minimal.py +7 -2
  146. runbooks/mcp/__init__.py +36 -0
  147. runbooks/mcp/integration.py +679 -0
  148. runbooks/metrics/dora_metrics_engine.py +2 -2
  149. runbooks/monitoring/performance_monitor.py +9 -4
  150. runbooks/operate/dynamodb_operations.py +3 -1
  151. runbooks/operate/ec2_operations.py +145 -137
  152. runbooks/operate/iam_operations.py +146 -152
  153. runbooks/operate/mcp_integration.py +1 -1
  154. runbooks/operate/networking_cost_heatmap.py +33 -10
  155. runbooks/operate/privatelink_operations.py +1 -1
  156. runbooks/operate/rds_operations.py +223 -254
  157. runbooks/operate/s3_operations.py +107 -118
  158. runbooks/operate/vpc_endpoints.py +1 -1
  159. runbooks/operate/vpc_operations.py +648 -618
  160. runbooks/remediation/base.py +1 -1
  161. runbooks/remediation/commons.py +10 -7
  162. runbooks/remediation/commvault_ec2_analysis.py +71 -67
  163. runbooks/remediation/ec2_unattached_ebs_volumes.py +1 -0
  164. runbooks/remediation/multi_account.py +24 -21
  165. runbooks/remediation/rds_snapshot_list.py +91 -65
  166. runbooks/remediation/remediation_cli.py +92 -146
  167. runbooks/remediation/universal_account_discovery.py +83 -79
  168. runbooks/remediation/workspaces_list.py +49 -44
  169. runbooks/security/__init__.py +19 -0
  170. runbooks/security/assessment_runner.py +1150 -0
  171. runbooks/security/baseline_checker.py +812 -0
  172. runbooks/security/cloudops_automation_security_validator.py +509 -535
  173. runbooks/security/compliance_automation_engine.py +17 -17
  174. runbooks/security/config/__init__.py +2 -2
  175. runbooks/security/config/compliance_config.py +50 -50
  176. runbooks/security/config_template_generator.py +63 -76
  177. runbooks/security/enterprise_security_framework.py +1 -1
  178. runbooks/security/executive_security_dashboard.py +519 -508
  179. runbooks/security/integration_test_enterprise_security.py +5 -3
  180. runbooks/security/multi_account_security_controls.py +959 -1210
  181. runbooks/security/real_time_security_monitor.py +422 -444
  182. runbooks/security/run_script.py +1 -1
  183. runbooks/security/security_baseline_tester.py +1 -1
  184. runbooks/security/security_cli.py +143 -112
  185. runbooks/security/test_2way_validation.py +439 -0
  186. runbooks/security/two_way_validation_framework.py +852 -0
  187. runbooks/sre/mcp_reliability_engine.py +6 -6
  188. runbooks/sre/production_monitoring_framework.py +167 -177
  189. runbooks/tdd/__init__.py +15 -0
  190. runbooks/tdd/cli.py +1071 -0
  191. runbooks/utils/__init__.py +14 -17
  192. runbooks/utils/logger.py +7 -2
  193. runbooks/utils/version_validator.py +51 -48
  194. runbooks/validation/__init__.py +6 -6
  195. runbooks/validation/cli.py +9 -3
  196. runbooks/validation/comprehensive_2way_validator.py +754 -708
  197. runbooks/validation/mcp_validator.py +906 -228
  198. runbooks/validation/terraform_citations_validator.py +104 -115
  199. runbooks/validation/terraform_drift_detector.py +447 -451
  200. runbooks/vpc/README.md +617 -0
  201. runbooks/vpc/__init__.py +8 -1
  202. runbooks/vpc/analyzer.py +577 -0
  203. runbooks/vpc/cleanup_wrapper.py +476 -413
  204. runbooks/vpc/cli_cloudtrail_commands.py +339 -0
  205. runbooks/vpc/cli_mcp_validation_commands.py +480 -0
  206. runbooks/vpc/cloudtrail_audit_integration.py +717 -0
  207. runbooks/vpc/config.py +92 -97
  208. runbooks/vpc/cost_engine.py +411 -148
  209. runbooks/vpc/cost_explorer_integration.py +553 -0
  210. runbooks/vpc/cross_account_session.py +101 -106
  211. runbooks/vpc/enhanced_mcp_validation.py +917 -0
  212. runbooks/vpc/eni_gate_validator.py +961 -0
  213. runbooks/vpc/heatmap_engine.py +190 -162
  214. runbooks/vpc/mcp_no_eni_validator.py +681 -640
  215. runbooks/vpc/nat_gateway_optimizer.py +358 -0
  216. runbooks/vpc/networking_wrapper.py +15 -8
  217. runbooks/vpc/pdca_remediation_planner.py +528 -0
  218. runbooks/vpc/performance_optimized_analyzer.py +219 -231
  219. runbooks/vpc/runbooks_adapter.py +1167 -241
  220. runbooks/vpc/tdd_red_phase_stubs.py +601 -0
  221. runbooks/vpc/test_data_loader.py +358 -0
  222. runbooks/vpc/tests/conftest.py +314 -4
  223. runbooks/vpc/tests/test_cleanup_framework.py +1022 -0
  224. runbooks/vpc/tests/test_cost_engine.py +0 -2
  225. runbooks/vpc/topology_generator.py +326 -0
  226. runbooks/vpc/unified_scenarios.py +1302 -1129
  227. runbooks/vpc/vpc_cleanup_integration.py +1943 -1115
  228. runbooks-1.1.5.dist-info/METADATA +328 -0
  229. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/RECORD +233 -200
  230. runbooks/finops/README.md +0 -414
  231. runbooks/finops/accuracy_cross_validator.py +0 -647
  232. runbooks/finops/business_cases.py +0 -950
  233. runbooks/finops/dashboard_router.py +0 -922
  234. runbooks/finops/ebs_optimizer.py +0 -956
  235. runbooks/finops/embedded_mcp_validator.py +0 -1629
  236. runbooks/finops/enhanced_dashboard_runner.py +0 -527
  237. runbooks/finops/finops_dashboard.py +0 -584
  238. runbooks/finops/finops_scenarios.py +0 -1218
  239. runbooks/finops/legacy_migration.py +0 -730
  240. runbooks/finops/multi_dashboard.py +0 -1519
  241. runbooks/finops/single_dashboard.py +0 -1113
  242. runbooks/finops/unlimited_scenarios.py +0 -393
  243. runbooks-1.1.3.dist-info/METADATA +0 -799
  244. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/WHEEL +0 -0
  245. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/entry_points.txt +0 -0
  246. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/licenses/LICENSE +0 -0
  247. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/top_level.txt +0 -0
@@ -8,27 +8,28 @@ Strategic Achievement: Manager requires business scenario intelligence with smar
8
8
  parameter recommendations per business case type.
9
9
  """
10
10
 
11
- import click
12
11
  import time
13
- from typing import Dict, List, Optional, Any
12
+ from typing import Any, Dict, List, Optional
13
+
14
+ import click
14
15
  from rich.console import Console
15
- from rich.table import Table
16
16
  from rich.panel import Panel
17
+ from rich.table import Table
17
18
 
19
+ from ..common.rich_utils import print_header, print_info, print_success, print_warning
18
20
  from .business_case_config import (
21
+ BusinessScenarioMatrix,
22
+ ScenarioParameter,
19
23
  get_business_case_config,
20
24
  get_business_scenario_matrix,
21
- BusinessScenarioMatrix,
22
- ScenarioParameter
23
25
  )
24
- from ..common.rich_utils import print_header, print_info, print_success, print_warning
25
26
 
26
27
 
27
28
  class SimplifiedScenarioMessaging:
28
29
  """
29
30
  Simplified scenario messaging system for 75% console operation reduction.
30
31
 
31
- Sprint 2 Enhancement: Consolidates multiple console operations into
32
+ Phase 2 Enhancement: Consolidates multiple console operations into
32
33
  template-based single panel displays while preserving all information content.
33
34
 
34
35
  Target: 75% reduction in console operations through panel consolidation.
@@ -47,14 +48,14 @@ class SimplifiedScenarioMessaging:
47
48
  Achieves 75% reduction: 5 operations → 1 panel.
48
49
  """
49
50
  self.operation_count += 5 # Would have been 5 separate prints
50
- self.template_count += 1 # Now using 1 panel template
51
+ self.template_count += 1 # Now using 1 panel template
51
52
 
52
53
  scenario_content = self._format_scenario_content(scenario_config)
53
54
  scenario_panel = Panel(
54
55
  scenario_content,
55
56
  title=f"[bold cyan]Scenario: {scenario_config.display_name}[/bold cyan]",
56
57
  border_style="cyan",
57
- padding=(1, 2)
58
+ padding=(1, 2),
58
59
  )
59
60
  self.console.print(scenario_panel)
60
61
 
@@ -75,7 +76,7 @@ class SimplifiedScenarioMessaging:
75
76
  param_content,
76
77
  title="[bold green]🎯 Intelligent Parameter Recommendations[/bold green]",
77
78
  border_style="green",
78
- padding=(1, 2)
79
+ padding=(1, 2),
79
80
  )
80
81
  self.console.print(param_panel)
81
82
 
@@ -96,12 +97,12 @@ class SimplifiedScenarioMessaging:
96
97
  suggestion_content,
97
98
  title=f"[bold yellow]💡 Parameter Optimization Suggestions for '{scenario_key}'[/bold yellow]",
98
99
  border_style="yellow",
99
- padding=(1, 2)
100
+ padding=(1, 2),
100
101
  )
101
102
  self.console.print(suggestion_panel)
102
103
 
103
104
  def get_consolidation_metrics(self) -> Dict[str, Any]:
104
- """Get consolidation efficiency metrics for Sprint 2 validation."""
105
+ """Get consolidation efficiency metrics for Phase 2 validation."""
105
106
  if self.operation_count == 0:
106
107
  return {"efficiency": 0.0, "operations_saved": 0}
107
108
 
@@ -111,7 +112,7 @@ class SimplifiedScenarioMessaging:
111
112
  "template_operations_used": self.template_count,
112
113
  "operations_saved": self.operation_count - self.template_count,
113
114
  "efficiency_percentage": efficiency,
114
- "target_achieved": efficiency >= 75.0
115
+ "target_achieved": efficiency >= 75.0,
115
116
  }
116
117
 
117
118
  def _format_scenario_content(self, scenario_config) -> str:
@@ -139,7 +140,7 @@ class SimplifiedScenarioMessaging:
139
140
  content_lines.append(f" [dim]→ {param.business_justification}[/dim]")
140
141
 
141
142
  if param.alternative_values:
142
- alternatives = ', '.join(str(v) for v in param.alternative_values)
143
+ alternatives = ", ".join(str(v) for v in param.alternative_values)
143
144
  content_lines.append(f" [dim]Alternatives: {alternatives}[/dim]")
144
145
  content_lines.append("")
145
146
 
@@ -157,7 +158,7 @@ class ScenarioCliHelper:
157
158
  """
158
159
  CLI integration helper for business scenario intelligence.
159
160
 
160
- Sprint 2 Enhanced: Integrates SimplifiedScenarioMessaging for 75% console
161
+ Phase 2 Enhanced: Integrates SimplifiedScenarioMessaging for 75% console
161
162
  operation reduction while providing intelligent parameter recommendations.
162
163
  """
163
164
 
@@ -167,7 +168,7 @@ class ScenarioCliHelper:
167
168
  self.business_config = get_business_case_config()
168
169
  self.scenario_matrix = get_business_scenario_matrix()
169
170
 
170
- # Sprint 2 Enhancement: Integrate simplified messaging system
171
+ # Phase 2 Enhancement: Integrate simplified messaging system
171
172
  self.simplified_messaging = SimplifiedScenarioMessaging(self.console)
172
173
  self.audit_trail = []
173
174
 
@@ -184,7 +185,7 @@ class ScenarioCliHelper:
184
185
  """
185
186
  Display detailed help for a single scenario using simplified messaging.
186
187
 
187
- Sprint 2 Enhancement: Uses simplified messaging to reduce console operations
188
+ Phase 2 Enhancement: Uses simplified messaging to reduce console operations
188
189
  by 75% while preserving all information content.
189
190
  """
190
191
  scenario_config = self.business_config.get_scenario(scenario_key)
@@ -192,13 +193,13 @@ class ScenarioCliHelper:
192
193
  print_warning(f"Unknown scenario: {scenario_key}")
193
194
  return
194
195
 
195
- # Sprint 2: Use simplified messaging for scenario overview (5 prints → 1 panel)
196
+ # Phase 2: Use simplified messaging for scenario overview (5 prints → 1 panel)
196
197
  self.simplified_messaging.display_scenario_overview(scenario_config)
197
198
 
198
199
  # Display parameter recommendations using simplified messaging
199
200
  recommendations = self.scenario_matrix.get_parameter_recommendations(scenario_key)
200
201
  if recommendations:
201
- # Sprint 2: Use simplified messaging for parameters (multiple prints → 1 panel)
202
+ # Phase 2: Use simplified messaging for parameters (multiple prints → 1 panel)
202
203
  self.simplified_messaging.display_parameter_recommendations(recommendations)
203
204
 
204
205
  # Display optimal command in consolidated format
@@ -206,19 +207,21 @@ class ScenarioCliHelper:
206
207
  command_panel = Panel(
207
208
  f"[dim]runbooks finops --scenario {scenario_key} {optimal_command}[/dim]",
208
209
  title="[bold yellow]💡 Optimal Command Example[/bold yellow]",
209
- border_style="yellow"
210
+ border_style="yellow",
210
211
  )
211
212
  self.console.print(command_panel)
212
213
  else:
213
214
  print_info("Using standard parameters for this scenario")
214
215
 
215
- # Audit trail for Sprint 2 compliance
216
- self.audit_trail.append({
217
- "action": "single_scenario_help",
218
- "scenario": scenario_key,
219
- "simplified_messaging_used": True,
220
- "timestamp": time.time()
221
- })
216
+ # Audit trail for Phase 2 compliance
217
+ self.audit_trail.append(
218
+ {
219
+ "action": "single_scenario_help",
220
+ "scenario": scenario_key,
221
+ "simplified_messaging_used": True,
222
+ "timestamp": time.time(),
223
+ }
224
+ )
222
225
 
223
226
  def _display_all_scenarios_help(self) -> None:
224
227
  """Display overview of all scenarios with parameter summaries."""
@@ -226,7 +229,7 @@ class ScenarioCliHelper:
226
229
  table = Table(
227
230
  title="🎯 Business Scenarios with Intelligent Parameter Defaults",
228
231
  show_header=True,
229
- header_style="bold cyan"
232
+ header_style="bold cyan",
230
233
  )
231
234
 
232
235
  table.add_column("Scenario", style="bold white", width=15)
@@ -240,26 +243,20 @@ class ScenarioCliHelper:
240
243
 
241
244
  # Tier classification for display
242
245
  tier_mapping = {
243
- 'workspaces': 'Tier 1',
244
- 'nat-gateway': 'Tier 1',
245
- 'rds-snapshots': 'Tier 1',
246
- 'ebs-optimization': 'Tier 2',
247
- 'vpc-cleanup': 'Tier 2',
248
- 'elastic-ip': 'Tier 2',
249
- 'backup-investigation': 'Tier 3'
246
+ "workspaces": "Tier 1",
247
+ "nat-gateway": "Tier 1",
248
+ "rds-snapshots": "Tier 1",
249
+ "ebs-optimization": "Tier 2",
250
+ "vpc-cleanup": "Tier 2",
251
+ "elastic-ip": "Tier 2",
252
+ "backup-investigation": "Tier 3",
250
253
  }
251
254
 
252
255
  for scenario_key, scenario in self.business_config.get_all_scenarios().items():
253
256
  parameter_summary = scenario_summaries.get(scenario_key, "Standard")
254
257
  tier = tier_mapping.get(scenario_key, "Standard")
255
258
 
256
- table.add_row(
257
- scenario_key,
258
- scenario.display_name,
259
- scenario.savings_range_display,
260
- parameter_summary,
261
- tier
262
- )
259
+ table.add_row(scenario_key, scenario.display_name, scenario.savings_range_display, parameter_summary, tier)
263
260
 
264
261
  self.console.print(table)
265
262
 
@@ -282,7 +279,7 @@ class ScenarioCliHelper:
282
279
  • runbooks finops --help-scenarios # All scenarios overview
283
280
  """,
284
281
  title="📚 Scenario Usage Guide",
285
- style="cyan"
282
+ style="cyan",
286
283
  )
287
284
  self.console.print(usage_panel)
288
285
 
@@ -298,7 +295,7 @@ class ScenarioCliHelper:
298
295
  self.console.print(f" [dim]→ {param.business_justification}[/dim]")
299
296
 
300
297
  if param.alternative_values:
301
- alternatives = ', '.join(str(v) for v in param.alternative_values)
298
+ alternatives = ", ".join(str(v) for v in param.alternative_values)
302
299
  self.console.print(f" [dim]Alternatives: {alternatives}[/dim]")
303
300
  self.console.print()
304
301
 
@@ -318,22 +315,24 @@ class ScenarioCliHelper:
318
315
  """
319
316
  Validate and provide suggestions using simplified messaging.
320
317
 
321
- Sprint 2 Enhancement: Uses simplified messaging to consolidate suggestion display.
318
+ Phase 2 Enhancement: Uses simplified messaging to consolidate suggestion display.
322
319
  """
323
320
  suggestions = self.scenario_matrix.validate_parameters_for_scenario(scenario_key, provided_params)
324
321
 
325
322
  if suggestions:
326
- # Sprint 2: Use simplified messaging for suggestions
323
+ # Phase 2: Use simplified messaging for suggestions
327
324
  self.simplified_messaging.display_optimization_suggestions(scenario_key, suggestions)
328
325
 
329
326
  # Audit trail
330
- self.audit_trail.append({
331
- "action": "parameter_validation",
332
- "scenario": scenario_key,
333
- "suggestions_count": len(suggestions),
334
- "simplified_messaging_used": True,
335
- "timestamp": time.time()
336
- })
327
+ self.audit_trail.append(
328
+ {
329
+ "action": "parameter_validation",
330
+ "scenario": scenario_key,
331
+ "suggestions_count": len(suggestions),
332
+ "simplified_messaging_used": True,
333
+ "timestamp": time.time(),
334
+ }
335
+ )
337
336
 
338
337
  def get_scenario_cli_choices(self) -> List[str]:
339
338
  """Get list of valid scenario choices for Click options."""
@@ -344,9 +343,9 @@ class ScenarioCliHelper:
344
343
  base_help = self.business_config.get_scenario_help_text()
345
344
  return f"{base_help}\n\nUse --scenario [scenario-name] for specific optimization analysis."
346
345
 
347
- def get_sprint2_performance_metrics(self) -> Dict[str, Any]:
346
+ def get_console_performance_metrics(self) -> Dict[str, Any]:
348
347
  """
349
- Get Sprint 2 performance metrics for enterprise audit compliance.
348
+ Get Phase 2 performance metrics for enterprise audit compliance.
350
349
 
351
350
  Returns consolidated metrics for:
352
351
  - Message simplification efficiency (75% target)
@@ -356,25 +355,25 @@ class ScenarioCliHelper:
356
355
  messaging_metrics = self.simplified_messaging.get_consolidation_metrics()
357
356
 
358
357
  return {
359
- "sprint2_enhancement": "Console log improvements with message simplification",
358
+ "console_enhancement": "Console log improvements with message simplification",
360
359
  "message_consolidation": messaging_metrics,
361
360
  "audit_trail": {
362
361
  "total_operations": len(self.audit_trail),
363
362
  "operations_with_simplified_messaging": sum(
364
363
  1 for op in self.audit_trail if op.get("simplified_messaging_used", False)
365
364
  ),
366
- "audit_compliance": "enterprise_ready"
365
+ "audit_compliance": "enterprise_ready",
367
366
  },
368
367
  "target_achievements": {
369
368
  "message_simplification_target": 75.0,
370
369
  "achieved_efficiency": messaging_metrics.get("efficiency_percentage", 0.0),
371
- "target_met": messaging_metrics.get("target_achieved", False)
370
+ "target_met": messaging_metrics.get("target_achieved", False),
372
371
  },
373
372
  "performance_improvements": {
374
373
  "console_operations_reduced": messaging_metrics.get("operations_saved", 0),
375
374
  "template_consolidation": "Rich panel integration implemented",
376
- "information_preservation": "100% content maintained"
377
- }
375
+ "information_preservation": "100% content maintained",
376
+ },
378
377
  }
379
378
 
380
379
 
@@ -417,21 +416,21 @@ def get_scenario_parameter_defaults(scenario_key: str) -> Dict[str, Any]:
417
416
  defaults = {}
418
417
 
419
418
  for param_key, param in recommendations.items():
420
- if param.name == '--time-range':
421
- defaults['time_range'] = param.optimal_value
422
- elif param.name == '--unblended':
423
- defaults['unblended'] = True
424
- elif param.name == '--amortized':
425
- defaults['amortized'] = True
426
- elif param.name == '--dual-metrics':
427
- defaults['dual_metrics'] = True
428
- elif param.name == '--pdf':
429
- defaults['pdf'] = True
430
- elif param.name == '--csv':
431
- defaults['csv'] = True
432
- elif param.name == '--json':
433
- defaults['json'] = True
434
- elif param.name == '--markdown':
435
- defaults['export_markdown'] = True
436
-
437
- return defaults
419
+ if param.name == "--time-range":
420
+ defaults["time_range"] = param.optimal_value
421
+ elif param.name == "--unblended":
422
+ defaults["unblended"] = True
423
+ elif param.name == "--amortized":
424
+ defaults["amortized"] = True
425
+ elif param.name == "--dual-metrics":
426
+ defaults["dual_metrics"] = True
427
+ elif param.name == "--pdf":
428
+ defaults["pdf"] = True
429
+ elif param.name == "--csv":
430
+ defaults["csv"] = True
431
+ elif param.name == "--json":
432
+ defaults["json"] = True
433
+ elif param.name == "--markdown":
434
+ defaults["export_markdown"] = True
435
+
436
+ return defaults