icdev 1.0.0__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 (1105) hide show
  1. icdev/__init__.py +18 -0
  2. icdev/_paths.py +85 -0
  3. icdev/_version.py +3 -0
  4. icdev/data/__init__.py +1 -0
  5. icdev/data/args/__init__.py +1 -0
  6. icdev/data/args/agent_authority.yaml +61 -0
  7. icdev/data/args/agent_config.yaml +355 -0
  8. icdev/data/args/agentic_fitness.yaml +31 -0
  9. icdev/data/args/ai_governance_config.yaml +137 -0
  10. icdev/data/args/atlas_critique_config.yaml +66 -0
  11. icdev/data/args/bedrock_models.yaml +63 -0
  12. icdev/data/args/cicd_config.yaml +82 -0
  13. icdev/data/args/classification_config.yaml +232 -0
  14. icdev/data/args/cli_config.yaml +154 -0
  15. icdev/data/args/cloud_config.yaml +63 -0
  16. icdev/data/args/code_pattern_config.yaml +151 -0
  17. icdev/data/args/code_quality_config.yaml +47 -0
  18. icdev/data/args/companion_registry.yaml +202 -0
  19. icdev/data/args/context_config.yaml +82 -0
  20. icdev/data/args/csp_monitor_config.yaml +268 -0
  21. icdev/data/args/cui_markings.yaml +35 -0
  22. icdev/data/args/db_config.yaml +40 -0
  23. icdev/data/args/deployment_profiles.yaml +248 -0
  24. icdev/data/args/dev_profile_config.yaml +144 -0
  25. icdev/data/args/devsecops_config.yaml +286 -0
  26. icdev/data/args/endpoint_security_config.yaml +137 -0
  27. icdev/data/args/extension_config.yaml +79 -0
  28. icdev/data/args/file_access_tiers.yaml +88 -0
  29. icdev/data/args/framework_registry.yaml +415 -0
  30. icdev/data/args/innovation_config.yaml +431 -0
  31. icdev/data/args/installation_manifest.yaml +1087 -0
  32. icdev/data/args/llm_config.yaml +495 -0
  33. icdev/data/args/maintenance_config.yaml +55 -0
  34. icdev/data/args/memory_config.yaml +83 -0
  35. icdev/data/args/monitoring_config.yaml +127 -0
  36. icdev/data/args/mosa_config.yaml +190 -0
  37. icdev/data/args/nlq_config.yaml +35 -0
  38. icdev/data/args/observability_config.yaml +39 -0
  39. icdev/data/args/observability_tracing_config.yaml +170 -0
  40. icdev/data/args/oscal_tools_config.yaml +43 -0
  41. icdev/data/args/owasp_agentic_config.yaml +171 -0
  42. icdev/data/args/phase_registry.yaml +618 -0
  43. icdev/data/args/project_defaults.yaml +235 -0
  44. icdev/data/args/prompt_chains.yaml +163 -0
  45. icdev/data/args/resilience_config.yaml +50 -0
  46. icdev/data/args/ricoas_config.yaml +191 -0
  47. icdev/data/args/role_personas.yaml +362 -0
  48. icdev/data/args/scaling_config.yaml +176 -0
  49. icdev/data/args/security_gates.yaml +685 -0
  50. icdev/data/args/skill_injection_config.yaml +322 -0
  51. icdev/data/args/spec_config.yaml +53 -0
  52. icdev/data/args/supply_chain_config.yaml +76 -0
  53. icdev/data/args/translation_config.yaml +228 -0
  54. icdev/data/args/workflow_templates/ato_acceleration.yaml +54 -0
  55. icdev/data/args/workflow_templates/build_deploy.yaml +63 -0
  56. icdev/data/args/workflow_templates/full_compliance.yaml +43 -0
  57. icdev/data/args/workflow_templates/security_hardening.yaml +55 -0
  58. icdev/data/args/worktree_config.yaml +34 -0
  59. icdev/data/args/zta_config.yaml +247 -0
  60. icdev/data/context/__init__.py +1 -0
  61. icdev/data/context/agent/__init__.py +1 -0
  62. icdev/data/context/agent/response_schemas/__init__.py +1 -0
  63. icdev/data/context/agent/response_schemas/debate_position.json +46 -0
  64. icdev/data/context/agent/response_schemas/fitness_scorecard.json +74 -0
  65. icdev/data/context/agent/response_schemas/review_decision.json +39 -0
  66. icdev/data/context/agent/response_schemas/task_decomposition.json +82 -0
  67. icdev/data/context/agent/response_schemas/veto_decision.json +40 -0
  68. icdev/data/context/agentic/__init__.py +1 -0
  69. icdev/data/context/agentic/architecture_patterns.md +269 -0
  70. icdev/data/context/agentic/capability_registry.yaml +202 -0
  71. icdev/data/context/agentic/csp_mcp_registry.yaml +280 -0
  72. icdev/data/context/agentic/fitness_rubric.md +56 -0
  73. icdev/data/context/agentic/governance_baseline.md +205 -0
  74. icdev/data/context/ci/__init__.py +1 -0
  75. icdev/data/context/ci/worktree_templates.json +44 -0
  76. icdev/data/context/cloud/__init__.py +1 -0
  77. icdev/data/context/cloud/csp_service_registry.json +739 -0
  78. icdev/data/context/compliance/__init__.py +1 -0
  79. icdev/data/context/compliance/atlas_mitigations.json +293 -0
  80. icdev/data/context/compliance/atlas_techniques.json +833 -0
  81. icdev/data/context/compliance/cisa_sbd_requirements.json +432 -0
  82. icdev/data/context/compliance/cjis_security_policy.json +522 -0
  83. icdev/data/context/compliance/cmmc_practices.json +2494 -0
  84. icdev/data/context/compliance/cmmc_report_template.md +142 -0
  85. icdev/data/context/compliance/cnssi_1253_overlay.json +109 -0
  86. icdev/data/context/compliance/control_crosswalk.json +1914 -0
  87. icdev/data/context/compliance/control_families/__init__.py +1 -0
  88. icdev/data/context/compliance/csp_certifications.json +251 -0
  89. icdev/data/context/compliance/cssp_report_template.md +193 -0
  90. icdev/data/context/compliance/cui_templates/__init__.py +1 -0
  91. icdev/data/context/compliance/cui_templates/banner_block.txt +4 -0
  92. icdev/data/context/compliance/cui_templates/code_header.txt +8 -0
  93. icdev/data/context/compliance/cui_templates/document_template.md +35 -0
  94. icdev/data/context/compliance/data_type_framework_map.json +321 -0
  95. icdev/data/context/compliance/data_type_registry.json +147 -0
  96. icdev/data/context/compliance/dod_cssp_8530.json +463 -0
  97. icdev/data/context/compliance/eu_ai_act_annex_iii.json +108 -0
  98. icdev/data/context/compliance/export_templates/__init__.py +1 -0
  99. icdev/data/context/compliance/export_templates/emass_controls.csv.j2 +4 -0
  100. icdev/data/context/compliance/export_templates/evidence_package.md.j2 +39 -0
  101. icdev/data/context/compliance/export_templates/executive_summary.md.j2 +55 -0
  102. icdev/data/context/compliance/export_templates/poam_tracking.csv.j2 +4 -0
  103. icdev/data/context/compliance/fedramp_20x_ksi_schemas.json +133 -0
  104. icdev/data/context/compliance/fedramp_high_baseline.json +4370 -0
  105. icdev/data/context/compliance/fedramp_moderate_baseline.json +2183 -0
  106. icdev/data/context/compliance/fedramp_report_template.md +181 -0
  107. icdev/data/context/compliance/fips_200_areas.json +362 -0
  108. icdev/data/context/compliance/gao_ai_accountability.json +262 -0
  109. icdev/data/context/compliance/hipaa_security_rule.json +720 -0
  110. icdev/data/context/compliance/hitrust_csf_v11.json +930 -0
  111. icdev/data/context/compliance/impact_level_profiles.json +251 -0
  112. icdev/data/context/compliance/incident_response_template.md +1110 -0
  113. icdev/data/context/compliance/iso27001_2022_controls.json +750 -0
  114. icdev/data/context/compliance/iso27001_nist_bridge.json +382 -0
  115. icdev/data/context/compliance/iso42001_controls.json +254 -0
  116. icdev/data/context/compliance/ivv_checklist_template.md +80 -0
  117. icdev/data/context/compliance/ivv_report_template.md +116 -0
  118. icdev/data/context/compliance/ivv_requirements.json +372 -0
  119. icdev/data/context/compliance/mosa_crosswalk.json +327 -0
  120. icdev/data/context/compliance/mosa_framework.json +250 -0
  121. icdev/data/context/compliance/narrative_templates/AC.md.j2 +101 -0
  122. icdev/data/context/compliance/narrative_templates/AU.md.j2 +106 -0
  123. icdev/data/context/compliance/narrative_templates/IA.md.j2 +104 -0
  124. icdev/data/context/compliance/narrative_templates/SC.md.j2 +102 -0
  125. icdev/data/context/compliance/narrative_templates/SI.md.j2 +111 -0
  126. icdev/data/context/compliance/narrative_templates/__init__.py +1 -0
  127. icdev/data/context/compliance/narrative_templates/default.md.j2 +50 -0
  128. icdev/data/context/compliance/narrative_templates/executive_summary.j2 +27 -0
  129. icdev/data/context/compliance/narrative_templates/poam_milestone.j2 +19 -0
  130. icdev/data/context/compliance/narrative_templates/ssp_section.j2 +11 -0
  131. icdev/data/context/compliance/nist_800_171_controls.json +1552 -0
  132. icdev/data/context/compliance/nist_800_207_crosswalk.json +399 -0
  133. icdev/data/context/compliance/nist_800_207_zta.json +258 -0
  134. icdev/data/context/compliance/nist_800_53.json +324 -0
  135. icdev/data/context/compliance/nist_ai_600_1_genai.json +326 -0
  136. icdev/data/context/compliance/nist_ai_rmf.json +206 -0
  137. icdev/data/context/compliance/nist_sp_800_60_types.json +1667 -0
  138. icdev/data/context/compliance/omb_m25_21_high_impact_ai.json +248 -0
  139. icdev/data/context/compliance/omb_m26_04_unbiased_ai.json +262 -0
  140. icdev/data/context/compliance/owasp_agentic_asi.json +133 -0
  141. icdev/data/context/compliance/owasp_agentic_threats.json +285 -0
  142. icdev/data/context/compliance/owasp_llm_top10.json +274 -0
  143. icdev/data/context/compliance/pci_dss_v4.json +510 -0
  144. icdev/data/context/compliance/poam_template.md +117 -0
  145. icdev/data/context/compliance/safeai_controls.json +512 -0
  146. icdev/data/context/compliance/sbd_report_template.md +77 -0
  147. icdev/data/context/compliance/siem_config_templates/__init__.py +1 -0
  148. icdev/data/context/compliance/siem_config_templates/filebeat.yml +213 -0
  149. icdev/data/context/compliance/siem_config_templates/log_sources.json +208 -0
  150. icdev/data/context/compliance/soc2_trust_criteria.json +661 -0
  151. icdev/data/context/compliance/ssp_template.md +432 -0
  152. icdev/data/context/compliance/stig_templates/__init__.py +1 -0
  153. icdev/data/context/compliance/stig_templates/webapp_stig.json +139 -0
  154. icdev/data/context/compliance/xai_requirements.json +108 -0
  155. icdev/data/context/dashboard/__init__.py +1 -0
  156. icdev/data/context/dashboard/nlq_examples.json +50 -0
  157. icdev/data/context/dashboard/schema_descriptions.json +23 -0
  158. icdev/data/context/integration/__init__.py +1 -0
  159. icdev/data/context/integration/approval_workflows.json +32 -0
  160. icdev/data/context/integration/gitlab_field_mappings.json +33 -0
  161. icdev/data/context/integration/jira_field_mappings.json +32 -0
  162. icdev/data/context/integration/reqif_export_schema.json +23 -0
  163. icdev/data/context/integration/servicenow_field_mappings.json +22 -0
  164. icdev/data/context/languages/__init__.py +1 -0
  165. icdev/data/context/languages/framework_patterns.json +205 -0
  166. icdev/data/context/languages/language_registry.json +279 -0
  167. icdev/data/context/llm/__init__.py +1 -0
  168. icdev/data/context/llm/example_provider.py +86 -0
  169. icdev/data/context/mbse/__init__.py +1 -0
  170. icdev/data/context/mbse/des_report_template.md +162 -0
  171. icdev/data/context/mbse/des_requirements.json +411 -0
  172. icdev/data/context/mbse/digital_thread_patterns.json +403 -0
  173. icdev/data/context/mbse/reqif_schema.json +280 -0
  174. icdev/data/context/mbse/sysml_element_types.json +432 -0
  175. icdev/data/context/modernization/__init__.py +1 -0
  176. icdev/data/context/modernization/db_type_mappings.json +148 -0
  177. icdev/data/context/modernization/decomposition_patterns.json +284 -0
  178. icdev/data/context/modernization/framework_migration_patterns.json +359 -0
  179. icdev/data/context/modernization/migration_report_template.md +168 -0
  180. icdev/data/context/modernization/seven_rs_catalog.json +369 -0
  181. icdev/data/context/modernization/version_upgrade_rules.json +279 -0
  182. icdev/data/context/oscal/NIST_SP-800-53_rev5_catalog.json +254987 -0
  183. icdev/data/context/oscal/README.md +43 -0
  184. icdev/data/context/patterns/__init__.py +1 -0
  185. icdev/data/context/profiles/__init__.py +1 -0
  186. icdev/data/context/profiles/dod_baseline_v1.yaml +145 -0
  187. icdev/data/context/profiles/fedramp_baseline_v1.yaml +143 -0
  188. icdev/data/context/profiles/financial_baseline_v1.yaml +142 -0
  189. icdev/data/context/profiles/healthcare_baseline_v1.yaml +135 -0
  190. icdev/data/context/profiles/law_enforcement_v1.yaml +129 -0
  191. icdev/data/context/profiles/startup_v1.yaml +134 -0
  192. icdev/data/context/requirements/__init__.py +1 -0
  193. icdev/data/context/requirements/ambiguity_patterns.json +97 -0
  194. icdev/data/context/requirements/boundary_impact_rules.json +123 -0
  195. icdev/data/context/requirements/default_constitutions.json +67 -0
  196. icdev/data/context/requirements/document_extraction_rules.json +58 -0
  197. icdev/data/context/requirements/gap_patterns.json +108 -0
  198. icdev/data/context/requirements/readiness_rubric.json +78 -0
  199. icdev/data/context/requirements/red_alternative_patterns.json +210 -0
  200. icdev/data/context/requirements/safe_templates.json +72 -0
  201. icdev/data/context/requirements/spec_quality_checklist.json +122 -0
  202. icdev/data/context/simulation/__init__.py +1 -0
  203. icdev/data/context/simulation/architecture_patterns.json +36 -0
  204. icdev/data/context/simulation/coa_templates.json +38 -0
  205. icdev/data/context/simulation/cost_models.json +23 -0
  206. icdev/data/context/simulation/risk_categories.json +46 -0
  207. icdev/data/context/supply_chain/__init__.py +1 -0
  208. icdev/data/context/supply_chain/isa_templates.json +129 -0
  209. icdev/data/context/supply_chain/nist_800_161_controls.json +247 -0
  210. icdev/data/context/supply_chain/scrm_risk_matrix.json +147 -0
  211. icdev/data/context/templates/__init__.py +1 -0
  212. icdev/data/context/templates/ansible/__init__.py +1 -0
  213. icdev/data/context/templates/ansible/playbooks/__init__.py +1 -0
  214. icdev/data/context/templates/ansible/roles/__init__.py +1 -0
  215. icdev/data/context/templates/gitlab_ci/__init__.py +1 -0
  216. icdev/data/context/templates/grafana/__init__.py +1 -0
  217. icdev/data/context/templates/kubernetes/__init__.py +1 -0
  218. icdev/data/context/templates/project/__init__.py +1 -0
  219. icdev/data/context/templates/project/api/__init__.py +1 -0
  220. icdev/data/context/templates/project/cli/__init__.py +1 -0
  221. icdev/data/context/templates/project/data_pipeline/__init__.py +1 -0
  222. icdev/data/context/templates/project/iac/__init__.py +1 -0
  223. icdev/data/context/templates/project/javascript_frontend/__init__.py +1 -0
  224. icdev/data/context/templates/project/javascript_frontend/src/__init__.py +1 -0
  225. icdev/data/context/templates/project/javascript_frontend/tests/__init__.py +1 -0
  226. icdev/data/context/templates/project/microservice/__init__.py +1 -0
  227. icdev/data/context/templates/project/python_backend/__init__.py +1 -0
  228. icdev/data/context/templates/project/python_backend/src/__init__.py +1 -0
  229. icdev/data/context/templates/project/python_backend/tests/__init__.py +1 -0
  230. icdev/data/context/templates/project/python_backend/tests/features/__init__.py +1 -0
  231. icdev/data/context/templates/project/python_backend/tests/steps/__init__.py +1 -0
  232. icdev/data/context/templates/terraform/__init__.py +1 -0
  233. icdev/data/context/templates/terraform/govcloud_base/__init__.py +1 -0
  234. icdev/data/context/templates/terraform/modules/__init__.py +1 -0
  235. icdev/data/context/tone/__init__.py +1 -0
  236. icdev/data/context/translation/dependency_mappings.json +186 -0
  237. icdev/data/context/translation/type_mappings.json +149 -0
  238. icdev/data/docs/README.md +187 -0
  239. icdev/data/docs/__init__.py +1 -0
  240. icdev/data/docs/admin/gateway-guide.md +338 -0
  241. icdev/data/docs/admin/marketplace-guide.md +396 -0
  242. icdev/data/docs/admin/monitoring-guide.md +509 -0
  243. icdev/data/docs/architecture/compliance-framework.md +764 -0
  244. icdev/data/docs/architecture/database-schema.md +689 -0
  245. icdev/data/docs/architecture/gotcha-framework.md +518 -0
  246. icdev/data/docs/architecture/multi-agent-system.md +603 -0
  247. icdev/data/docs/dx/README.md +106 -0
  248. icdev/data/docs/dx/__init__.py +1 -0
  249. icdev/data/docs/dx/ci-cd-integration.md +378 -0
  250. icdev/data/docs/dx/claude-code-guide.md +213 -0
  251. icdev/data/docs/dx/companion-guide.md +232 -0
  252. icdev/data/docs/dx/dev-profiles.md +309 -0
  253. icdev/data/docs/dx/icdev-yaml-spec.md +219 -0
  254. icdev/data/docs/dx/integration-tiers.md +279 -0
  255. icdev/data/docs/dx/llm-routing-guide.md +456 -0
  256. icdev/data/docs/dx/quickstart.md +192 -0
  257. icdev/data/docs/dx/sdk-reference.md +356 -0
  258. icdev/data/docs/dx/unified-mcp-setup.md +525 -0
  259. icdev/data/docs/features/__init__.py +1 -0
  260. icdev/data/docs/features/phase-01-gotcha-framework.md +249 -0
  261. icdev/data/docs/features/phase-02-atlas-build-workflow.md +223 -0
  262. icdev/data/docs/features/phase-03-tdd-bdd-testing.md +261 -0
  263. icdev/data/docs/features/phase-04-nist-compliance.md +255 -0
  264. icdev/data/docs/features/phase-05-security-scanning.md +229 -0
  265. icdev/data/docs/features/phase-06-infrastructure-deployment.md +288 -0
  266. icdev/data/docs/features/phase-07-code-review-gates.md +276 -0
  267. icdev/data/docs/features/phase-08-self-healing.md +223 -0
  268. icdev/data/docs/features/phase-09-monitoring-observability.md +230 -0
  269. icdev/data/docs/features/phase-10-dashboard-web-ui.md +218 -0
  270. icdev/data/docs/features/phase-11-multi-agent-architecture.md +272 -0
  271. icdev/data/docs/features/phase-12-integration-testing.md +228 -0
  272. icdev/data/docs/features/phase-13-cicd-integration.md +257 -0
  273. icdev/data/docs/features/phase-14-secure-by-design-ivv.md +240 -0
  274. icdev/data/docs/features/phase-15-maintenance-audit.md +192 -0
  275. icdev/data/docs/features/phase-16-ato-acceleration.md +228 -0
  276. icdev/data/docs/features/phase-17-multi-framework-compliance.md +223 -0
  277. icdev/data/docs/features/phase-18-mbse-integration.md +242 -0
  278. icdev/data/docs/features/phase-19-agentic-generation.md +202 -0
  279. icdev/data/docs/features/phase-20-fips-security-categorization.md +198 -0
  280. icdev/data/docs/features/phase-21-saas-multi-tenancy.md +273 -0
  281. icdev/data/docs/features/phase-22-federated-gotcha-marketplace.md +242 -0
  282. icdev/data/docs/features/phase-23-universal-compliance-platform.md +238 -0
  283. icdev/data/docs/features/phase-24-devsecops-pipeline-security.md +198 -0
  284. icdev/data/docs/features/phase-25-zero-trust-architecture.md +220 -0
  285. icdev/data/docs/features/phase-26-dod-mosa.md +205 -0
  286. icdev/data/docs/features/phase-27-cli-capabilities.md +222 -0
  287. icdev/data/docs/features/phase-28-remote-command-gateway.md +235 -0
  288. icdev/data/docs/features/phase-29-proactive-monitoring.md +212 -0
  289. icdev/data/docs/features/phase-30-dashboard-auth.md +215 -0
  290. icdev/data/docs/features/phase-31-dashboard-ux-low-impact.md +188 -0
  291. icdev/data/docs/features/phase-32-dashboard-ux-medium-impact.md +223 -0
  292. icdev/data/docs/features/phase-33-modular-installation.md +218 -0
  293. icdev/data/docs/features/phase-34-dev-profiles.md +239 -0
  294. icdev/data/docs/features/phase-35-innovation-engine.md +257 -0
  295. icdev/data/docs/features/phase-36-evolutionary-intelligence.md +351 -0
  296. icdev/data/docs/features/phase-37-mitre-atlas-integration.md +485 -0
  297. icdev/data/docs/features/phase-38-cloud-agnostic-architecture.md +1033 -0
  298. icdev/data/docs/features/phase-39-observability-operations.md +178 -0
  299. icdev/data/docs/features/phase-40-nlq-compliance-queries.md +176 -0
  300. icdev/data/docs/features/phase-41-parallel-cicd.md +169 -0
  301. icdev/data/docs/features/phase-42-framework-planning.md +177 -0
  302. icdev/data/docs/features/phase-43-cross-language-translation.md +225 -0
  303. icdev/data/docs/features/phase-44-innovation-adaptation.md +227 -0
  304. icdev/data/docs/features/phase-45-owasp-agentic-security.md +239 -0
  305. icdev/data/docs/features/phase-46-observability-traceability-xai.md +240 -0
  306. icdev/data/docs/features/phase-47-unified-mcp-gateway.md +257 -0
  307. icdev/data/docs/features/phase-48-ai-transparency.md +203 -0
  308. icdev/data/docs/features/phase-49-ai-accountability.md +243 -0
  309. icdev/data/docs/features/phase-50-ai-governance-intake-chat.md +195 -0
  310. icdev/data/docs/features/phase-51-unified-chat-dashboard.md +240 -0
  311. icdev/data/docs/features/phase-52-code-intelligence.md +244 -0
  312. icdev/data/docs/features/phase-53-fedramp-20x-owasp-asi.md +359 -0
  313. icdev/data/docs/features/phase-54-slsa-swft-orchestration.md +379 -0
  314. icdev/data/docs/features/phase-55-a2a-v03-mcp-oauth.md +322 -0
  315. icdev/data/docs/features/phase-56-evidence-lineage.md +352 -0
  316. icdev/data/docs/features/phase-57-eu-ai-act-iron-bank.md +319 -0
  317. icdev/data/docs/features/phase-58-creative-engine.md +370 -0
  318. icdev/data/docs/features/phase-59-govcon-intelligence.md +535 -0
  319. icdev/data/docs/features/phase-60-cpmp.md +528 -0
  320. icdev/data/docs/features/phase-61-orchestration-improvements.md +534 -0
  321. icdev/data/docs/operations/dashboard-guide.md +354 -0
  322. icdev/data/docs/operations/deployment-guide.md +556 -0
  323. icdev/data/docs/operations/saas-admin-guide.md +439 -0
  324. icdev/data/docs/operations/security-operations-guide.md +733 -0
  325. icdev/data/docs/runbooks/backup-restore.md +412 -0
  326. icdev/data/docs/runbooks/troubleshooting.md +499 -0
  327. icdev/data/features/__init__.py +1 -0
  328. icdev/data/features/cicd_integration.feature +41 -0
  329. icdev/data/features/compliance_gates.feature +46 -0
  330. icdev/data/features/dashboard.feature +72 -0
  331. icdev/data/features/environment.py +25 -0
  332. icdev/data/features/project_management.feature +32 -0
  333. icdev/data/features/requirements_intake.feature +42 -0
  334. icdev/data/features/saas_platform.feature +53 -0
  335. icdev/data/features/security_scanning.feature +36 -0
  336. icdev/data/features/steps/__init__.py +1 -0
  337. icdev/data/features/steps/cicd_steps.py +465 -0
  338. icdev/data/features/steps/compliance_steps.py +308 -0
  339. icdev/data/features/steps/dashboard_steps.py +88 -0
  340. icdev/data/features/steps/project_steps.py +126 -0
  341. icdev/data/features/steps/requirements_intake_steps.py +689 -0
  342. icdev/data/features/steps/saas_platform_steps.py +572 -0
  343. icdev/data/features/steps/security_steps.py +236 -0
  344. icdev/data/features/steps/testing_steps.py +226 -0
  345. icdev/data/features/testing_pipeline.feature +42 -0
  346. icdev/data/goals/__init__.py +1 -0
  347. icdev/data/goals/agent_management.md +144 -0
  348. icdev/data/goals/agentic_generation.md +345 -0
  349. icdev/data/goals/agentic_threat_model.md +309 -0
  350. icdev/data/goals/ai_accountability.md +90 -0
  351. icdev/data/goals/ai_governance_intake.md +132 -0
  352. icdev/data/goals/ai_transparency.md +76 -0
  353. icdev/data/goals/atlas_integration.md +405 -0
  354. icdev/data/goals/ato_acceleration.md +139 -0
  355. icdev/data/goals/boundary_supply_chain.md +206 -0
  356. icdev/data/goals/build_app.md +544 -0
  357. icdev/data/goals/cicd_integration.md +86 -0
  358. icdev/data/goals/claude_dir_maintenance.md +77 -0
  359. icdev/data/goals/cli_capabilities.md +340 -0
  360. icdev/data/goals/cloud_agnostic.md +312 -0
  361. icdev/data/goals/code_intelligence.md +197 -0
  362. icdev/data/goals/code_review.md +94 -0
  363. icdev/data/goals/compliance_workflow.md +858 -0
  364. icdev/data/goals/continuous_harmonization.md +140 -0
  365. icdev/data/goals/cross_language_translation.md +171 -0
  366. icdev/data/goals/dashboard.md +142 -0
  367. icdev/data/goals/deploy_workflow.md +390 -0
  368. icdev/data/goals/devsecops_workflow.md +408 -0
  369. icdev/data/goals/evolutionary_intelligence.md +305 -0
  370. icdev/data/goals/external_integration.md +113 -0
  371. icdev/data/goals/framework_planning.md +63 -0
  372. icdev/data/goals/init_project.md +235 -0
  373. icdev/data/goals/innovation_engine.md +199 -0
  374. icdev/data/goals/integration_testing.md +189 -0
  375. icdev/data/goals/maintenance_audit.md +196 -0
  376. icdev/data/goals/manifest.md +56 -0
  377. icdev/data/goals/mbse_integration.md +504 -0
  378. icdev/data/goals/modernization_workflow.md +618 -0
  379. icdev/data/goals/monitoring.md +126 -0
  380. icdev/data/goals/mosa_workflow.md +463 -0
  381. icdev/data/goals/multi_agent_orchestration.md +68 -0
  382. icdev/data/goals/nlq_compliance.md +63 -0
  383. icdev/data/goals/observability.md +64 -0
  384. icdev/data/goals/observability_traceability_xai.md +154 -0
  385. icdev/data/goals/owasp_agentic_security.md +395 -0
  386. icdev/data/goals/parallel_cicd.md +61 -0
  387. icdev/data/goals/requirements_intake.md +213 -0
  388. icdev/data/goals/sbd_ivv_workflow.md +195 -0
  389. icdev/data/goals/security_categorization.md +133 -0
  390. icdev/data/goals/security_scan.md +381 -0
  391. icdev/data/goals/self_healing.md +120 -0
  392. icdev/data/goals/simulation_engine.md +111 -0
  393. icdev/data/goals/tdd_workflow.md +403 -0
  394. icdev/data/goals/zero_trust_architecture.md +403 -0
  395. icdev/data/hardprompts/__init__.py +1 -0
  396. icdev/data/hardprompts/agent/__init__.py +1 -0
  397. icdev/data/hardprompts/agent/agentic_architect.md +100 -0
  398. icdev/data/hardprompts/agent/debate_prompt.md +32 -0
  399. icdev/data/hardprompts/agent/fitness_evaluation.md +48 -0
  400. icdev/data/hardprompts/agent/governance_review.md +214 -0
  401. icdev/data/hardprompts/agent/reviewer_prompt.md +34 -0
  402. icdev/data/hardprompts/agent/skill_design.md +172 -0
  403. icdev/data/hardprompts/agent/task_decomposition.md +275 -0
  404. icdev/data/hardprompts/agent/veto_check_prompt.md +33 -0
  405. icdev/data/hardprompts/architect/__init__.py +1 -0
  406. icdev/data/hardprompts/architect/api_design.md +283 -0
  407. icdev/data/hardprompts/architect/data_model.md +277 -0
  408. icdev/data/hardprompts/architect/system_design.md +180 -0
  409. icdev/data/hardprompts/builder/__init__.py +1 -0
  410. icdev/data/hardprompts/builder/code_generation.md +59 -0
  411. icdev/data/hardprompts/builder/refactor.md +58 -0
  412. icdev/data/hardprompts/builder/scaffold_project.md +69 -0
  413. icdev/data/hardprompts/builder/test_generation.md +87 -0
  414. icdev/data/hardprompts/ci/__init__.py +1 -0
  415. icdev/data/hardprompts/ci/worktree_setup.md +35 -0
  416. icdev/data/hardprompts/compliance/__init__.py +1 -0
  417. icdev/data/hardprompts/compliance/cmmc_assessment.md +63 -0
  418. icdev/data/hardprompts/compliance/cssp_assessment.md +75 -0
  419. icdev/data/hardprompts/compliance/cui_marking.md +86 -0
  420. icdev/data/hardprompts/compliance/fedramp_assessment.md +55 -0
  421. icdev/data/hardprompts/compliance/ivv_assessment.md +96 -0
  422. icdev/data/hardprompts/compliance/poam_generation.md +57 -0
  423. icdev/data/hardprompts/compliance/sbd_assessment.md +101 -0
  424. icdev/data/hardprompts/compliance/security_categorization.md +74 -0
  425. icdev/data/hardprompts/compliance/ssp_generation.md +56 -0
  426. icdev/data/hardprompts/compliance/stig_evaluation.md +63 -0
  427. icdev/data/hardprompts/dashboard/__init__.py +1 -0
  428. icdev/data/hardprompts/dashboard/nlq_system_prompt.md +26 -0
  429. icdev/data/hardprompts/infra/__init__.py +1 -0
  430. icdev/data/hardprompts/infra/k8s_manifests.md +118 -0
  431. icdev/data/hardprompts/infra/pipeline_generation.md +160 -0
  432. icdev/data/hardprompts/infra/terraform_generation.md +92 -0
  433. icdev/data/hardprompts/integration/__init__.py +1 -0
  434. icdev/data/hardprompts/integration/approval_review.md +17 -0
  435. icdev/data/hardprompts/integration/jira_mapping.md +25 -0
  436. icdev/data/hardprompts/integration/servicenow_mapping.md +14 -0
  437. icdev/data/hardprompts/knowledge/__init__.py +1 -0
  438. icdev/data/hardprompts/knowledge/pattern_detection.md +73 -0
  439. icdev/data/hardprompts/knowledge/recommendation_engine.md +90 -0
  440. icdev/data/hardprompts/knowledge/root_cause_analysis.md +91 -0
  441. icdev/data/hardprompts/maintenance/__init__.py +1 -0
  442. icdev/data/hardprompts/maintenance/maintenance_assessment.md +82 -0
  443. icdev/data/hardprompts/mbse/__init__.py +1 -0
  444. icdev/data/hardprompts/mbse/digital_thread.md +67 -0
  445. icdev/data/hardprompts/mbse/model_import.md +62 -0
  446. icdev/data/hardprompts/mbse/model_to_code.md +65 -0
  447. icdev/data/hardprompts/modernization/__init__.py +1 -0
  448. icdev/data/hardprompts/modernization/legacy_analysis.md +93 -0
  449. icdev/data/hardprompts/modernization/migration_planning.md +150 -0
  450. icdev/data/hardprompts/modernization/seven_r_assessment.md +107 -0
  451. icdev/data/hardprompts/requirements/__init__.py +1 -0
  452. icdev/data/hardprompts/requirements/bdd_generation.md +35 -0
  453. icdev/data/hardprompts/requirements/clarification_prioritization.md +29 -0
  454. icdev/data/hardprompts/requirements/decomposition.md +60 -0
  455. icdev/data/hardprompts/requirements/document_extraction.md +45 -0
  456. icdev/data/hardprompts/requirements/gap_detection.md +70 -0
  457. icdev/data/hardprompts/requirements/intake_conversation.md +101 -0
  458. icdev/data/hardprompts/requirements/readiness_assessment.md +39 -0
  459. icdev/data/hardprompts/requirements/spec_quality.md +33 -0
  460. icdev/data/hardprompts/requirements/traceability_analysis.md +23 -0
  461. icdev/data/hardprompts/security/__init__.py +1 -0
  462. icdev/data/hardprompts/security/endpoint_security.md +78 -0
  463. icdev/data/hardprompts/security/threat_model.md +70 -0
  464. icdev/data/hardprompts/security/vulnerability_assessment.md +81 -0
  465. icdev/data/hardprompts/simulation/__init__.py +1 -0
  466. icdev/data/hardprompts/simulation/architecture_impact.md +27 -0
  467. icdev/data/hardprompts/simulation/coa_alternative.md +27 -0
  468. icdev/data/hardprompts/simulation/coa_generation.md +25 -0
  469. icdev/data/hardprompts/simulation/compliance_impact.md +28 -0
  470. icdev/data/hardprompts/simulation/cost_estimation.md +33 -0
  471. icdev/data/hardprompts/simulation/risk_assessment.md +28 -0
  472. icdev/data/hardprompts/translation/code_translation.md +68 -0
  473. icdev/data/hardprompts/translation/dependency_suggestion.md +44 -0
  474. icdev/data/hardprompts/translation/test_translation.md +64 -0
  475. icdev/data/hardprompts/translation/translation_repair.md +59 -0
  476. icdev/py.typed +0 -0
  477. icdev/tools/__init__.py +1 -0
  478. icdev/tools/_gen_formatter.py +12 -0
  479. icdev/tools/a2a/__init__.py +1 -0
  480. icdev/tools/a2a/agent_cards/architect.json +43 -0
  481. icdev/tools/a2a/agent_cards/builder.json +50 -0
  482. icdev/tools/a2a/agent_cards/compliance.json +57 -0
  483. icdev/tools/a2a/agent_cards/devsecops.json +71 -0
  484. icdev/tools/a2a/agent_cards/infra.json +57 -0
  485. icdev/tools/a2a/agent_cards/integration.json +57 -0
  486. icdev/tools/a2a/agent_cards/knowledge.json +43 -0
  487. icdev/tools/a2a/agent_cards/mbse.json +57 -0
  488. icdev/tools/a2a/agent_cards/modernization.json +50 -0
  489. icdev/tools/a2a/agent_cards/monitor.json +43 -0
  490. icdev/tools/a2a/agent_cards/orchestrator.json +36 -0
  491. icdev/tools/a2a/agent_cards/requirements_analyst.json +64 -0
  492. icdev/tools/a2a/agent_cards/security.json +50 -0
  493. icdev/tools/a2a/agent_cards/simulation.json +57 -0
  494. icdev/tools/a2a/agent_cards/supply_chain.json +50 -0
  495. icdev/tools/a2a/agent_client.py +349 -0
  496. icdev/tools/a2a/agent_registry.py +412 -0
  497. icdev/tools/a2a/agent_server.py +579 -0
  498. icdev/tools/a2a/task.py +200 -0
  499. icdev/tools/agent/__init__.py +2 -0
  500. icdev/tools/agent/a2a_agent_card_generator.py +285 -0
  501. icdev/tools/agent/a2a_discovery_server.py +250 -0
  502. icdev/tools/agent/agent_executor.py +529 -0
  503. icdev/tools/agent/agent_memory.py +557 -0
  504. icdev/tools/agent/agent_models.py +51 -0
  505. icdev/tools/agent/atlas_critique.py +908 -0
  506. icdev/tools/agent/authority.py +443 -0
  507. icdev/tools/agent/bedrock_client.py +1075 -0
  508. icdev/tools/agent/collaboration.py +871 -0
  509. icdev/tools/agent/dispatcher_mode.py +665 -0
  510. icdev/tools/agent/mailbox.py +575 -0
  511. icdev/tools/agent/prompt_chain_executor.py +1064 -0
  512. icdev/tools/agent/session_purpose.py +350 -0
  513. icdev/tools/agent/skill_router.py +638 -0
  514. icdev/tools/agent/skill_selector.py +486 -0
  515. icdev/tools/agent/team_orchestrator.py +1108 -0
  516. icdev/tools/agent/token_tracker.py +290 -0
  517. icdev/tools/analysis/__init__.py +1 -0
  518. icdev/tools/analysis/code_analyzer.py +780 -0
  519. icdev/tools/analysis/runtime_feedback.py +389 -0
  520. icdev/tools/audit/__init__.py +1 -0
  521. icdev/tools/audit/audit_logger.py +196 -0
  522. icdev/tools/audit/audit_query.py +157 -0
  523. icdev/tools/audit/decision_recorder.py +72 -0
  524. icdev/tools/builder/__init__.py +1 -0
  525. icdev/tools/builder/agentic_fitness.py +534 -0
  526. icdev/tools/builder/agentic_test_templates/test_a2a_callback.py +117 -0
  527. icdev/tools/builder/agentic_test_templates/test_a2a_lifecycle.feature +52 -0
  528. icdev/tools/builder/agentic_test_templates/test_agent_card.feature +37 -0
  529. icdev/tools/builder/agentic_test_templates/test_agent_health.py +128 -0
  530. icdev/tools/builder/agentic_test_templates/test_memory_system.feature +50 -0
  531. icdev/tools/builder/agentic_test_templates/test_skill_execution.feature +40 -0
  532. icdev/tools/builder/app_blueprint.py +1583 -0
  533. icdev/tools/builder/child_app_generator.py +2852 -0
  534. icdev/tools/builder/claude_md_generator.py +1734 -0
  535. icdev/tools/builder/code_generator.py +3703 -0
  536. icdev/tools/builder/db_init_generator.py +1709 -0
  537. icdev/tools/builder/dev_profile_manager.py +954 -0
  538. icdev/tools/builder/formatter.py +768 -0
  539. icdev/tools/builder/goal_adapter.py +592 -0
  540. icdev/tools/builder/gotcha_validator.py +812 -0
  541. icdev/tools/builder/language_support.py +441 -0
  542. icdev/tools/builder/linter.py +976 -0
  543. icdev/tools/builder/profile_detector.py +657 -0
  544. icdev/tools/builder/profile_md_generator.py +723 -0
  545. icdev/tools/builder/scaffolder.py +1590 -0
  546. icdev/tools/builder/scaffolder_extended.py +1771 -0
  547. icdev/tools/builder/test_writer.py +950 -0
  548. icdev/tools/ci/__init__.py +2 -0
  549. icdev/tools/ci/connectors/__init__.py +2 -0
  550. icdev/tools/ci/connectors/base_connector.py +80 -0
  551. icdev/tools/ci/connectors/connector_registry.py +188 -0
  552. icdev/tools/ci/connectors/mattermost_connector.py +159 -0
  553. icdev/tools/ci/connectors/slack_connector.py +197 -0
  554. icdev/tools/ci/core/__init__.py +2 -0
  555. icdev/tools/ci/core/air_gap_detector.py +115 -0
  556. icdev/tools/ci/core/comment_handler.py +192 -0
  557. icdev/tools/ci/core/conversation_manager.py +479 -0
  558. icdev/tools/ci/core/event_envelope.py +500 -0
  559. icdev/tools/ci/core/event_router.py +443 -0
  560. icdev/tools/ci/core/failure_parser.py +397 -0
  561. icdev/tools/ci/core/recovery_engine.py +527 -0
  562. icdev/tools/ci/modules/__init__.py +2 -0
  563. icdev/tools/ci/modules/agent.py +271 -0
  564. icdev/tools/ci/modules/git_ops.py +175 -0
  565. icdev/tools/ci/modules/state.py +117 -0
  566. icdev/tools/ci/modules/vcs.py +303 -0
  567. icdev/tools/ci/modules/workflow_ops.py +295 -0
  568. icdev/tools/ci/modules/worktree.py +340 -0
  569. icdev/tools/ci/pipeline_config_generator.py +558 -0
  570. icdev/tools/ci/triggers/__init__.py +2 -0
  571. icdev/tools/ci/triggers/gitlab_task_monitor.py +330 -0
  572. icdev/tools/ci/triggers/poll_trigger.py +237 -0
  573. icdev/tools/ci/triggers/webhook_server.py +356 -0
  574. icdev/tools/ci/workflows/__init__.py +2 -0
  575. icdev/tools/ci/workflows/icdev_build.py +140 -0
  576. icdev/tools/ci/workflows/icdev_comply.py +284 -0
  577. icdev/tools/ci/workflows/icdev_document.py +152 -0
  578. icdev/tools/ci/workflows/icdev_e2e.py +188 -0
  579. icdev/tools/ci/workflows/icdev_patch.py +186 -0
  580. icdev/tools/ci/workflows/icdev_plan.py +202 -0
  581. icdev/tools/ci/workflows/icdev_plan_build.py +41 -0
  582. icdev/tools/ci/workflows/icdev_plan_build_test.py +46 -0
  583. icdev/tools/ci/workflows/icdev_plan_build_test_review.py +47 -0
  584. icdev/tools/ci/workflows/icdev_review.py +126 -0
  585. icdev/tools/ci/workflows/icdev_sdlc.py +261 -0
  586. icdev/tools/ci/workflows/icdev_test.py +240 -0
  587. icdev/tools/cli/__init__.py +1 -0
  588. icdev/tools/cli/output_formatter.py +756 -0
  589. icdev/tools/cli_formatter.py +42 -0
  590. icdev/tools/cloud/__init__.py +11 -0
  591. icdev/tools/cloud/cloud_mode_manager.py +364 -0
  592. icdev/tools/cloud/csp_changelog.py +383 -0
  593. icdev/tools/cloud/csp_health_checker.py +268 -0
  594. icdev/tools/cloud/csp_monitor.py +951 -0
  595. icdev/tools/cloud/iam_provider.py +593 -0
  596. icdev/tools/cloud/kms_provider.py +346 -0
  597. icdev/tools/cloud/monitoring_provider.py +628 -0
  598. icdev/tools/cloud/provider_factory.py +376 -0
  599. icdev/tools/cloud/region_validator.py +345 -0
  600. icdev/tools/cloud/registry_provider.py +563 -0
  601. icdev/tools/cloud/secrets_provider.py +486 -0
  602. icdev/tools/cloud/storage_provider.py +446 -0
  603. icdev/tools/compat/__init__.py +21 -0
  604. icdev/tools/compat/cli_harmonizer.py +251 -0
  605. icdev/tools/compat/datetime_utils.py +18 -0
  606. icdev/tools/compat/db_utils.py +160 -0
  607. icdev/tools/compat/platform_utils.py +123 -0
  608. icdev/tools/compliance/__init__.py +1 -0
  609. icdev/tools/compliance/accountability_manager.py +397 -0
  610. icdev/tools/compliance/ai_accountability_audit.py +294 -0
  611. icdev/tools/compliance/ai_impact_assessor.py +273 -0
  612. icdev/tools/compliance/ai_incident_response.py +301 -0
  613. icdev/tools/compliance/ai_inventory_manager.py +239 -0
  614. icdev/tools/compliance/ai_reassessment_scheduler.py +256 -0
  615. icdev/tools/compliance/ai_transparency_audit.py +248 -0
  616. icdev/tools/compliance/atlas_assessor.py +278 -0
  617. icdev/tools/compliance/atlas_report_generator.py +1211 -0
  618. icdev/tools/compliance/base_assessor.py +597 -0
  619. icdev/tools/compliance/cato_monitor.py +1385 -0
  620. icdev/tools/compliance/cato_scheduler.py +699 -0
  621. icdev/tools/compliance/cjis_assessor.py +76 -0
  622. icdev/tools/compliance/classification_manager.py +1353 -0
  623. icdev/tools/compliance/cmmc_assessor.py +1491 -0
  624. icdev/tools/compliance/cmmc_report_generator.py +1100 -0
  625. icdev/tools/compliance/compliance_detector.py +463 -0
  626. icdev/tools/compliance/compliance_exporter.py +427 -0
  627. icdev/tools/compliance/compliance_status.py +825 -0
  628. icdev/tools/compliance/control_mapper.py +505 -0
  629. icdev/tools/compliance/crosswalk_engine.py +1203 -0
  630. icdev/tools/compliance/cssp_assessor.py +1045 -0
  631. icdev/tools/compliance/cssp_evidence_collector.py +729 -0
  632. icdev/tools/compliance/cssp_report_generator.py +1116 -0
  633. icdev/tools/compliance/cui_marker.py +388 -0
  634. icdev/tools/compliance/diagram_validator.py +600 -0
  635. icdev/tools/compliance/emass/__init__.py +2 -0
  636. icdev/tools/compliance/emass/emass_client.py +840 -0
  637. icdev/tools/compliance/emass/emass_export.py +777 -0
  638. icdev/tools/compliance/emass/emass_sync.py +826 -0
  639. icdev/tools/compliance/eu_ai_act_classifier.py +194 -0
  640. icdev/tools/compliance/evidence_collector.py +468 -0
  641. icdev/tools/compliance/fairness_assessor.py +316 -0
  642. icdev/tools/compliance/fedramp_assessor.py +1808 -0
  643. icdev/tools/compliance/fedramp_authorization_packager.py +137 -0
  644. icdev/tools/compliance/fedramp_ksi_generator.py +355 -0
  645. icdev/tools/compliance/fedramp_report_generator.py +1128 -0
  646. icdev/tools/compliance/fips199_categorizer.py +881 -0
  647. icdev/tools/compliance/fips200_validator.py +315 -0
  648. icdev/tools/compliance/gao_ai_assessor.py +231 -0
  649. icdev/tools/compliance/gao_evidence_builder.py +308 -0
  650. icdev/tools/compliance/hipaa_assessor.py +78 -0
  651. icdev/tools/compliance/hitrust_assessor.py +49 -0
  652. icdev/tools/compliance/incident_response_plan.py +718 -0
  653. icdev/tools/compliance/iso27001_assessor.py +92 -0
  654. icdev/tools/compliance/iso42001_assessor.py +114 -0
  655. icdev/tools/compliance/ivv_assessor.py +2327 -0
  656. icdev/tools/compliance/ivv_report_generator.py +1662 -0
  657. icdev/tools/compliance/model_card_generator.py +297 -0
  658. icdev/tools/compliance/mosa_assessor.py +117 -0
  659. icdev/tools/compliance/multi_regime_assessor.py +451 -0
  660. icdev/tools/compliance/narrative_generator.py +1013 -0
  661. icdev/tools/compliance/nist_800_207_assessor.py +191 -0
  662. icdev/tools/compliance/nist_ai_600_1_assessor.py +188 -0
  663. icdev/tools/compliance/nist_ai_rmf_assessor.py +110 -0
  664. icdev/tools/compliance/nist_lookup.py +245 -0
  665. icdev/tools/compliance/omb_m25_21_assessor.py +228 -0
  666. icdev/tools/compliance/omb_m26_04_assessor.py +188 -0
  667. icdev/tools/compliance/oscal_catalog_adapter.py +395 -0
  668. icdev/tools/compliance/oscal_generator.py +2170 -0
  669. icdev/tools/compliance/oscal_tools.py +1182 -0
  670. icdev/tools/compliance/owasp_agentic_assessor.py +226 -0
  671. icdev/tools/compliance/owasp_asi_assessor.py +200 -0
  672. icdev/tools/compliance/owasp_llm_assessor.py +244 -0
  673. icdev/tools/compliance/pci_dss_assessor.py +80 -0
  674. icdev/tools/compliance/pi_compliance_tracker.py +1461 -0
  675. icdev/tools/compliance/poam_generator.py +405 -0
  676. icdev/tools/compliance/resolve_marking.py +283 -0
  677. icdev/tools/compliance/sbd_assessor.py +2068 -0
  678. icdev/tools/compliance/sbd_report_generator.py +1236 -0
  679. icdev/tools/compliance/sbom_generator.py +1008 -0
  680. icdev/tools/compliance/siem_config_generator.py +674 -0
  681. icdev/tools/compliance/slsa_attestation_generator.py +490 -0
  682. icdev/tools/compliance/soc2_assessor.py +77 -0
  683. icdev/tools/compliance/ssp_generator.py +573 -0
  684. icdev/tools/compliance/stig_checker.py +727 -0
  685. icdev/tools/compliance/swft_evidence_bundler.py +337 -0
  686. icdev/tools/compliance/system_card_generator.py +309 -0
  687. icdev/tools/compliance/traceability_matrix.py +1281 -0
  688. icdev/tools/compliance/universal_classification_manager.py +1172 -0
  689. icdev/tools/compliance/xacta/__init__.py +2 -0
  690. icdev/tools/compliance/xacta/xacta_client.py +449 -0
  691. icdev/tools/compliance/xacta/xacta_export.py +557 -0
  692. icdev/tools/compliance/xacta/xacta_sync.py +333 -0
  693. icdev/tools/compliance/xai_assessor.py +231 -0
  694. icdev/tools/dashboard/__init__.py +1 -0
  695. icdev/tools/dashboard/api/__init__.py +1 -0
  696. icdev/tools/dashboard/api/_pipeline_state.py +17 -0
  697. icdev/tools/dashboard/api/activity.py +206 -0
  698. icdev/tools/dashboard/api/admin.py +176 -0
  699. icdev/tools/dashboard/api/agents.py +53 -0
  700. icdev/tools/dashboard/api/ai_accountability.py +163 -0
  701. icdev/tools/dashboard/api/ai_transparency.py +198 -0
  702. icdev/tools/dashboard/api/audit.py +58 -0
  703. icdev/tools/dashboard/api/batch.py +666 -0
  704. icdev/tools/dashboard/api/chat.py +241 -0
  705. icdev/tools/dashboard/api/cicd.py +219 -0
  706. icdev/tools/dashboard/api/code_quality.py +223 -0
  707. icdev/tools/dashboard/api/compliance.py +171 -0
  708. icdev/tools/dashboard/api/cpmp.py +915 -0
  709. icdev/tools/dashboard/api/diagrams.py +65 -0
  710. icdev/tools/dashboard/api/events.py +250 -0
  711. icdev/tools/dashboard/api/evidence.py +99 -0
  712. icdev/tools/dashboard/api/fedramp_20x.py +77 -0
  713. icdev/tools/dashboard/api/govcon.py +1095 -0
  714. icdev/tools/dashboard/api/intake.py +1171 -0
  715. icdev/tools/dashboard/api/lineage.py +163 -0
  716. icdev/tools/dashboard/api/metrics.py +155 -0
  717. icdev/tools/dashboard/api/nlq.py +72 -0
  718. icdev/tools/dashboard/api/orchestration.py +472 -0
  719. icdev/tools/dashboard/api/oscal.py +183 -0
  720. icdev/tools/dashboard/api/prod_audit.py +183 -0
  721. icdev/tools/dashboard/api/projects.py +191 -0
  722. icdev/tools/dashboard/api/proposals.py +1084 -0
  723. icdev/tools/dashboard/api/traces.py +363 -0
  724. icdev/tools/dashboard/api/usage.py +234 -0
  725. icdev/tools/dashboard/app.py +1986 -0
  726. icdev/tools/dashboard/auth.py +500 -0
  727. icdev/tools/dashboard/byok.py +245 -0
  728. icdev/tools/dashboard/chat_manager.py +675 -0
  729. icdev/tools/dashboard/config.py +116 -0
  730. icdev/tools/dashboard/diagram_definitions.py +642 -0
  731. icdev/tools/dashboard/nlq_processor.py +323 -0
  732. icdev/tools/dashboard/phase_loader.py +136 -0
  733. icdev/tools/dashboard/sse_manager.py +89 -0
  734. icdev/tools/dashboard/state_tracker.py +267 -0
  735. icdev/tools/dashboard/static/css/style.css +706 -0
  736. icdev/tools/dashboard/static/css/ux.css +2047 -0
  737. icdev/tools/dashboard/static/js/activity.js +322 -0
  738. icdev/tools/dashboard/static/js/api.js +161 -0
  739. icdev/tools/dashboard/static/js/batch.js +814 -0
  740. icdev/tools/dashboard/static/js/charts.js +618 -0
  741. icdev/tools/dashboard/static/js/chat.js +1514 -0
  742. icdev/tools/dashboard/static/js/kanban.js +113 -0
  743. icdev/tools/dashboard/static/js/live.js +569 -0
  744. icdev/tools/dashboard/static/js/mermaid-icdev.js +332 -0
  745. icdev/tools/dashboard/static/js/proposals.js +588 -0
  746. icdev/tools/dashboard/static/js/shortcuts.js +544 -0
  747. icdev/tools/dashboard/static/js/tables.js +652 -0
  748. icdev/tools/dashboard/static/js/tour.js +524 -0
  749. icdev/tools/dashboard/static/js/ux.js +942 -0
  750. icdev/tools/dashboard/templates/404.html +10 -0
  751. icdev/tools/dashboard/templates/activity.html +80 -0
  752. icdev/tools/dashboard/templates/admin/users.html +144 -0
  753. icdev/tools/dashboard/templates/ai_accountability.html +235 -0
  754. icdev/tools/dashboard/templates/ai_transparency.html +263 -0
  755. icdev/tools/dashboard/templates/base.html +104 -0
  756. icdev/tools/dashboard/templates/batch.html +23 -0
  757. icdev/tools/dashboard/templates/chat.html +332 -0
  758. icdev/tools/dashboard/templates/children.html +149 -0
  759. icdev/tools/dashboard/templates/cicd.html +253 -0
  760. icdev/tools/dashboard/templates/code_quality.html +214 -0
  761. icdev/tools/dashboard/templates/cpmp/cor_detail.html +220 -0
  762. icdev/tools/dashboard/templates/cpmp/cor_portal.html +91 -0
  763. icdev/tools/dashboard/templates/cpmp/deliverable_detail.html +197 -0
  764. icdev/tools/dashboard/templates/cpmp/detail.html +578 -0
  765. icdev/tools/dashboard/templates/cpmp/portfolio.html +202 -0
  766. icdev/tools/dashboard/templates/dev_profiles.html +304 -0
  767. icdev/tools/dashboard/templates/diagrams.html +224 -0
  768. icdev/tools/dashboard/templates/events/timeline.html +232 -0
  769. icdev/tools/dashboard/templates/evidence.html +134 -0
  770. icdev/tools/dashboard/templates/fedramp_20x.html +207 -0
  771. icdev/tools/dashboard/templates/gateway.html +244 -0
  772. icdev/tools/dashboard/templates/govcon/capabilities.html +135 -0
  773. icdev/tools/dashboard/templates/govcon/pipeline.html +214 -0
  774. icdev/tools/dashboard/templates/govcon/requirements.html +120 -0
  775. icdev/tools/dashboard/templates/index.html +254 -0
  776. icdev/tools/dashboard/templates/lineage.html +141 -0
  777. icdev/tools/dashboard/templates/login.html +51 -0
  778. icdev/tools/dashboard/templates/monitoring/overview.html +193 -0
  779. icdev/tools/dashboard/templates/orchestration/dashboard.html +545 -0
  780. icdev/tools/dashboard/templates/oscal.html +263 -0
  781. icdev/tools/dashboard/templates/phases.html +150 -0
  782. icdev/tools/dashboard/templates/prod_audit.html +280 -0
  783. icdev/tools/dashboard/templates/profile.html +183 -0
  784. icdev/tools/dashboard/templates/projects/detail.html +583 -0
  785. icdev/tools/dashboard/templates/projects/list.html +47 -0
  786. icdev/tools/dashboard/templates/proposals/detail.html +1253 -0
  787. icdev/tools/dashboard/templates/proposals/list.html +179 -0
  788. icdev/tools/dashboard/templates/proposals/section_detail.html +193 -0
  789. icdev/tools/dashboard/templates/provenance.html +181 -0
  790. icdev/tools/dashboard/templates/query/nlq.html +234 -0
  791. icdev/tools/dashboard/templates/quick_paths.html +69 -0
  792. icdev/tools/dashboard/templates/traces.html +155 -0
  793. icdev/tools/dashboard/templates/translation_detail.html +199 -0
  794. icdev/tools/dashboard/templates/translations.html +162 -0
  795. icdev/tools/dashboard/templates/usage.html +225 -0
  796. icdev/tools/dashboard/templates/wizard.html +539 -0
  797. icdev/tools/dashboard/templates/xai.html +208 -0
  798. icdev/tools/dashboard/ux_helpers.py +962 -0
  799. icdev/tools/dashboard/websocket.py +81 -0
  800. icdev/tools/db/__init__.py +1 -0
  801. icdev/tools/db/backup.py +312 -0
  802. icdev/tools/db/backup_manager.py +832 -0
  803. icdev/tools/db/init_icdev_db.py +5900 -0
  804. icdev/tools/db/migrate.py +178 -0
  805. icdev/tools/db/migration_runner.py +549 -0
  806. icdev/tools/db/migrations/001_baseline/meta.json +9 -0
  807. icdev/tools/db/migrations/001_baseline/up.py +68 -0
  808. icdev/tools/db/migrations/002_memory_enhancements/down.sql +8 -0
  809. icdev/tools/db/migrations/002_memory_enhancements/meta.json +9 -0
  810. icdev/tools/db/migrations/002_memory_enhancements/up.py +118 -0
  811. icdev/tools/db/migrations/003_dev_profiles/meta.json +8 -0
  812. icdev/tools/db/migrations/003_dev_profiles/up.py +93 -0
  813. icdev/tools/db/migrations/004_innovation_engine/down.py +19 -0
  814. icdev/tools/db/migrations/004_innovation_engine/up.py +227 -0
  815. icdev/tools/db/migrations/005_phase_37_ai_security/down.py +19 -0
  816. icdev/tools/db/migrations/005_phase_37_ai_security/up.py +258 -0
  817. icdev/tools/db/migrations/006_phase_36_evolution/down.py +21 -0
  818. icdev/tools/db/migrations/006_phase_36_evolution/up.py +323 -0
  819. icdev/tools/db/migrations/007_phase_38_cloud/down.py +14 -0
  820. icdev/tools/db/migrations/007_phase_38_cloud/up.py +110 -0
  821. icdev/tools/db/migrations/008_phase36_37_integration/up.py +55 -0
  822. icdev/tools/db/migrations/__init__.py +2 -0
  823. icdev/tools/devsecops/__init__.py +2 -0
  824. icdev/tools/devsecops/attestation_manager.py +458 -0
  825. icdev/tools/devsecops/network_segmentation_generator.py +614 -0
  826. icdev/tools/devsecops/pdp_config_generator.py +1256 -0
  827. icdev/tools/devsecops/pipeline_security_generator.py +484 -0
  828. icdev/tools/devsecops/policy_generator.py +653 -0
  829. icdev/tools/devsecops/profile_manager.py +388 -0
  830. icdev/tools/devsecops/service_mesh_generator.py +1073 -0
  831. icdev/tools/devsecops/zta_maturity_scorer.py +368 -0
  832. icdev/tools/devsecops/zta_terraform_generator.py +1303 -0
  833. icdev/tools/dx/__init__.py +3 -0
  834. icdev/tools/dx/companion.py +266 -0
  835. icdev/tools/dx/instruction_generator.py +753 -0
  836. icdev/tools/dx/mcp_config_generator.py +282 -0
  837. icdev/tools/dx/skill_translator.py +425 -0
  838. icdev/tools/dx/tool_detector.py +144 -0
  839. icdev/tools/extensions/__init__.py +21 -0
  840. icdev/tools/extensions/builtins/010_ai_governance_chat.py +277 -0
  841. icdev/tools/extensions/builtins/__init__.py +2 -0
  842. icdev/tools/extensions/extension_manager.py +455 -0
  843. icdev/tools/infra/__init__.py +1 -0
  844. icdev/tools/infra/ansible_generator.py +869 -0
  845. icdev/tools/infra/dockerfile_generator.py +361 -0
  846. icdev/tools/infra/infra_status.py +393 -0
  847. icdev/tools/infra/ironbank_metadata_generator.py +411 -0
  848. icdev/tools/infra/k8s_generator.py +1002 -0
  849. icdev/tools/infra/pipeline_generator.py +832 -0
  850. icdev/tools/infra/rollback.py +400 -0
  851. icdev/tools/infra/terraform_generator.py +1142 -0
  852. icdev/tools/infra/terraform_generator_azure.py +1254 -0
  853. icdev/tools/infra/terraform_generator_gcp.py +953 -0
  854. icdev/tools/infra/terraform_generator_ibm.py +360 -0
  855. icdev/tools/infra/terraform_generator_oci.py +919 -0
  856. icdev/tools/infra/terraform_generator_onprem.py +319 -0
  857. icdev/tools/innovation/__init__.py +8 -0
  858. icdev/tools/innovation/competitive_intel.py +492 -0
  859. icdev/tools/innovation/innovation_manager.py +681 -0
  860. icdev/tools/innovation/introspective_analyzer.py +774 -0
  861. icdev/tools/innovation/register_external_patterns.py +440 -0
  862. icdev/tools/innovation/signal_ranker.py +1038 -0
  863. icdev/tools/innovation/solution_generator.py +697 -0
  864. icdev/tools/innovation/standards_monitor.py +466 -0
  865. icdev/tools/innovation/trend_detector.py +1046 -0
  866. icdev/tools/innovation/triage_engine.py +1149 -0
  867. icdev/tools/innovation/web_scanner.py +894 -0
  868. icdev/tools/installer/__init__.py +1 -0
  869. icdev/tools/installer/compliance_configurator.py +637 -0
  870. icdev/tools/installer/installer.py +1711 -0
  871. icdev/tools/installer/module_registry.py +805 -0
  872. icdev/tools/installer/platform_setup.py +961 -0
  873. icdev/tools/integration/__init__.py +2 -0
  874. icdev/tools/integration/approval_manager.py +561 -0
  875. icdev/tools/integration/doors_exporter.py +627 -0
  876. icdev/tools/integration/gitlab_connector.py +784 -0
  877. icdev/tools/integration/jira_connector.py +774 -0
  878. icdev/tools/integration/servicenow_connector.py +693 -0
  879. icdev/tools/knowledge/__init__.py +1 -0
  880. icdev/tools/knowledge/knowledge_ingest.py +293 -0
  881. icdev/tools/knowledge/pattern_detector.py +693 -0
  882. icdev/tools/knowledge/recommendation_engine.py +461 -0
  883. icdev/tools/knowledge/self_heal_analyzer.py +504 -0
  884. icdev/tools/llm/__init__.py +72 -0
  885. icdev/tools/llm/anthropic_provider.py +170 -0
  886. icdev/tools/llm/azure_openai_provider.py +338 -0
  887. icdev/tools/llm/bedrock_provider.py +315 -0
  888. icdev/tools/llm/embedding_provider.py +438 -0
  889. icdev/tools/llm/gemini_provider.py +381 -0
  890. icdev/tools/llm/ibm_watsonx_provider.py +232 -0
  891. icdev/tools/llm/oci_genai_provider.py +462 -0
  892. icdev/tools/llm/ollama_provider.py +340 -0
  893. icdev/tools/llm/openai_provider.py +225 -0
  894. icdev/tools/llm/provider.py +355 -0
  895. icdev/tools/llm/provider_sdk.py +175 -0
  896. icdev/tools/llm/router.py +780 -0
  897. icdev/tools/llm/vertex_ai_provider.py +374 -0
  898. icdev/tools/maintenance/__init__.py +2 -0
  899. icdev/tools/maintenance/dependency_scanner.py +1030 -0
  900. icdev/tools/maintenance/maintenance_auditor.py +815 -0
  901. icdev/tools/maintenance/remediation_engine.py +966 -0
  902. icdev/tools/maintenance/vulnerability_checker.py +987 -0
  903. icdev/tools/mbse/__init__.py +3 -0
  904. icdev/tools/mbse/des_assessor.py +1186 -0
  905. icdev/tools/mbse/des_report_generator.py +800 -0
  906. icdev/tools/mbse/diagram_extractor.py +811 -0
  907. icdev/tools/mbse/digital_thread.py +1665 -0
  908. icdev/tools/mbse/model_code_generator.py +1122 -0
  909. icdev/tools/mbse/model_control_mapper.py +420 -0
  910. icdev/tools/mbse/pi_model_tracker.py +1093 -0
  911. icdev/tools/mbse/reqif_parser.py +1483 -0
  912. icdev/tools/mbse/sync_engine.py +1805 -0
  913. icdev/tools/mbse/xmi_parser.py +1573 -0
  914. icdev/tools/mcp/__init__.py +1 -0
  915. icdev/tools/mcp/base_server.py +535 -0
  916. icdev/tools/mcp/builder_server.py +725 -0
  917. icdev/tools/mcp/compliance_server.py +1407 -0
  918. icdev/tools/mcp/context_indexer.py +199 -0
  919. icdev/tools/mcp/context_server.py +305 -0
  920. icdev/tools/mcp/core_server.py +679 -0
  921. icdev/tools/mcp/devsecops_server.py +432 -0
  922. icdev/tools/mcp/gap_handlers.py +1079 -0
  923. icdev/tools/mcp/gateway_server.py +339 -0
  924. icdev/tools/mcp/generate_registry.py +623 -0
  925. icdev/tools/mcp/infra_server.py +264 -0
  926. icdev/tools/mcp/innovation_server.py +316 -0
  927. icdev/tools/mcp/integration_server.py +527 -0
  928. icdev/tools/mcp/knowledge_server.py +429 -0
  929. icdev/tools/mcp/maintenance_server.py +248 -0
  930. icdev/tools/mcp/marketplace_server.py +499 -0
  931. icdev/tools/mcp/mbse_server.py +398 -0
  932. icdev/tools/mcp/modernization_server.py +496 -0
  933. icdev/tools/mcp/observability_server.py +354 -0
  934. icdev/tools/mcp/requirements_server.py +415 -0
  935. icdev/tools/mcp/simulation_server.py +468 -0
  936. icdev/tools/mcp/standalone/__init__.py +2 -0
  937. icdev/tools/mcp/standalone/builder.py +59 -0
  938. icdev/tools/mcp/standalone/compliance.py +59 -0
  939. icdev/tools/mcp/standalone/core.py +59 -0
  940. icdev/tools/mcp/standalone/knowledge.py +59 -0
  941. icdev/tools/mcp/standalone/maintenance.py +59 -0
  942. icdev/tools/mcp/supply_chain_server.py +476 -0
  943. icdev/tools/mcp/tool_registry.py +2008 -0
  944. icdev/tools/mcp/unified_server.py +158 -0
  945. icdev/tools/memory/__init__.py +2 -0
  946. icdev/tools/memory/auto_capture.py +347 -0
  947. icdev/tools/memory/embed_memory.py +158 -0
  948. icdev/tools/memory/history_compressor.py +334 -0
  949. icdev/tools/memory/hybrid_search.py +236 -0
  950. icdev/tools/memory/maintenance_cron.py +289 -0
  951. icdev/tools/memory/memory_consolidation.py +444 -0
  952. icdev/tools/memory/memory_db.py +133 -0
  953. icdev/tools/memory/memory_read.py +102 -0
  954. icdev/tools/memory/memory_write.py +222 -0
  955. icdev/tools/memory/semantic_search.py +139 -0
  956. icdev/tools/memory/time_decay.py +435 -0
  957. icdev/tools/modernization/__init__.py +3 -0
  958. icdev/tools/modernization/architecture_extractor.py +734 -0
  959. icdev/tools/modernization/compliance_bridge.py +1499 -0
  960. icdev/tools/modernization/db_migration_planner.py +1385 -0
  961. icdev/tools/modernization/doc_generator.py +1428 -0
  962. icdev/tools/modernization/framework_migrator.py +1525 -0
  963. icdev/tools/modernization/legacy_analyzer.py +1948 -0
  964. icdev/tools/modernization/migration_code_generator.py +1639 -0
  965. icdev/tools/modernization/migration_report_generator.py +1653 -0
  966. icdev/tools/modernization/migration_tracker.py +1726 -0
  967. icdev/tools/modernization/monolith_decomposer.py +1508 -0
  968. icdev/tools/modernization/seven_r_assessor.py +1658 -0
  969. icdev/tools/modernization/strangler_fig_manager.py +1705 -0
  970. icdev/tools/modernization/ui_analyzer.py +771 -0
  971. icdev/tools/modernization/version_migrator.py +1392 -0
  972. icdev/tools/monitor/__init__.py +1 -0
  973. icdev/tools/monitor/alert_correlator.py +495 -0
  974. icdev/tools/monitor/auto_resolver.py +612 -0
  975. icdev/tools/monitor/health_checker.py +509 -0
  976. icdev/tools/monitor/heartbeat_daemon.py +792 -0
  977. icdev/tools/monitor/log_analyzer.py +516 -0
  978. icdev/tools/monitor/metric_collector.py +496 -0
  979. icdev/tools/mosa/__init__.py +10 -0
  980. icdev/tools/mosa/icd_generator.py +370 -0
  981. icdev/tools/mosa/modular_design_analyzer.py +683 -0
  982. icdev/tools/mosa/mosa_code_enforcer.py +349 -0
  983. icdev/tools/mosa/tsp_generator.py +265 -0
  984. icdev/tools/observability/__init__.py +100 -0
  985. icdev/tools/observability/genai_attributes.py +88 -0
  986. icdev/tools/observability/instrumentation.py +140 -0
  987. icdev/tools/observability/mlflow_exporter.py +194 -0
  988. icdev/tools/observability/otel_tracer.py +168 -0
  989. icdev/tools/observability/provenance/__init__.py +3 -0
  990. icdev/tools/observability/provenance/prov_recorder.py +324 -0
  991. icdev/tools/observability/shap/__init__.py +3 -0
  992. icdev/tools/observability/shap/agent_shap.py +275 -0
  993. icdev/tools/observability/sqlite_tracer.py +361 -0
  994. icdev/tools/observability/trace_context.py +205 -0
  995. icdev/tools/observability/tracer.py +230 -0
  996. icdev/tools/orchestration/__init__.py +2 -0
  997. icdev/tools/orchestration/workflow_composer.py +361 -0
  998. icdev/tools/project/__init__.py +1 -0
  999. icdev/tools/project/manifest_loader.py +418 -0
  1000. icdev/tools/project/project_create.py +350 -0
  1001. icdev/tools/project/project_list.py +174 -0
  1002. icdev/tools/project/project_scaffold.py +1715 -0
  1003. icdev/tools/project/project_status.py +479 -0
  1004. icdev/tools/project/session_context_builder.py +757 -0
  1005. icdev/tools/project/validate_manifest.py +55 -0
  1006. icdev/tools/registry/__init__.py +10 -0
  1007. icdev/tools/registry/absorption_engine.py +832 -0
  1008. icdev/tools/registry/capability_evaluator.py +668 -0
  1009. icdev/tools/registry/child_registry.py +617 -0
  1010. icdev/tools/registry/cross_pollinator.py +1065 -0
  1011. icdev/tools/registry/genome_manager.py +671 -0
  1012. icdev/tools/registry/learning_collector.py +912 -0
  1013. icdev/tools/registry/propagation_manager.py +942 -0
  1014. icdev/tools/registry/staging_manager.py +742 -0
  1015. icdev/tools/registry/telemetry_collector.py +423 -0
  1016. icdev/tools/requirements/__init__.py +1 -0
  1017. icdev/tools/requirements/ai_governance_scorer.py +208 -0
  1018. icdev/tools/requirements/boundary_analyzer.py +1293 -0
  1019. icdev/tools/requirements/clarification_engine.py +618 -0
  1020. icdev/tools/requirements/complexity_scorer.py +387 -0
  1021. icdev/tools/requirements/consistency_analyzer.py +803 -0
  1022. icdev/tools/requirements/constitution_manager.py +605 -0
  1023. icdev/tools/requirements/decomposition_engine.py +778 -0
  1024. icdev/tools/requirements/document_extractor.py +1016 -0
  1025. icdev/tools/requirements/elicitation_techniques.py +519 -0
  1026. icdev/tools/requirements/gap_detector.py +271 -0
  1027. icdev/tools/requirements/intake_engine.py +2188 -0
  1028. icdev/tools/requirements/prd_generator.py +847 -0
  1029. icdev/tools/requirements/prd_validator.py +595 -0
  1030. icdev/tools/requirements/readiness_scorer.py +313 -0
  1031. icdev/tools/requirements/spec_organizer.py +1029 -0
  1032. icdev/tools/requirements/spec_quality_checker.py +1097 -0
  1033. icdev/tools/requirements/traceability_builder.py +579 -0
  1034. icdev/tools/resilience/__init__.py +34 -0
  1035. icdev/tools/resilience/circuit_breaker.py +340 -0
  1036. icdev/tools/resilience/correlation.py +150 -0
  1037. icdev/tools/resilience/errors.py +81 -0
  1038. icdev/tools/resilience/retry.py +95 -0
  1039. icdev/tools/schemas/__init__.py +27 -0
  1040. icdev/tools/schemas/chat.py +61 -0
  1041. icdev/tools/schemas/compliance.py +56 -0
  1042. icdev/tools/schemas/core.py +85 -0
  1043. icdev/tools/schemas/innovation.py +37 -0
  1044. icdev/tools/schemas/validation.py +109 -0
  1045. icdev/tools/sdk/__init__.py +3 -0
  1046. icdev/tools/sdk/icdev_client.py +218 -0
  1047. icdev/tools/security/__init__.py +1 -0
  1048. icdev/tools/security/agent_output_validator.py +330 -0
  1049. icdev/tools/security/agent_trust_scorer.py +466 -0
  1050. icdev/tools/security/ai_bom_generator.py +725 -0
  1051. icdev/tools/security/ai_telemetry_logger.py +469 -0
  1052. icdev/tools/security/atlas_red_team.py +543 -0
  1053. icdev/tools/security/code_pattern_scanner.py +378 -0
  1054. icdev/tools/security/confabulation_detector.py +271 -0
  1055. icdev/tools/security/container_scanner.py +491 -0
  1056. icdev/tools/security/dependency_auditor.py +944 -0
  1057. icdev/tools/security/endpoint_security_scanner.py +579 -0
  1058. icdev/tools/security/mcp_tool_authorizer.py +243 -0
  1059. icdev/tools/security/prompt_injection_detector.py +737 -0
  1060. icdev/tools/security/sast_runner.py +948 -0
  1061. icdev/tools/security/secret_detector.py +378 -0
  1062. icdev/tools/security/tool_chain_validator.py +357 -0
  1063. icdev/tools/security/vuln_scanner.py +539 -0
  1064. icdev/tools/simulation/__init__.py +2 -0
  1065. icdev/tools/simulation/coa_generator.py +1552 -0
  1066. icdev/tools/simulation/monte_carlo.py +758 -0
  1067. icdev/tools/simulation/scenario_manager.py +1073 -0
  1068. icdev/tools/simulation/simulation_engine.py +1104 -0
  1069. icdev/tools/supply_chain/__init__.py +2 -0
  1070. icdev/tools/supply_chain/cve_triager.py +705 -0
  1071. icdev/tools/supply_chain/dependency_graph.py +645 -0
  1072. icdev/tools/supply_chain/isa_manager.py +540 -0
  1073. icdev/tools/supply_chain/scrm_assessor.py +546 -0
  1074. icdev/tools/testing/__init__.py +2 -0
  1075. icdev/tools/testing/acceptance_validator.py +411 -0
  1076. icdev/tools/testing/claude_dir_validator.py +831 -0
  1077. icdev/tools/testing/data_types.py +199 -0
  1078. icdev/tools/testing/e2e_runner.py +715 -0
  1079. icdev/tools/testing/fuzz_cli.py +306 -0
  1080. icdev/tools/testing/health_check.py +483 -0
  1081. icdev/tools/testing/platform_check.py +143 -0
  1082. icdev/tools/testing/production_audit.py +1862 -0
  1083. icdev/tools/testing/production_remediate.py +804 -0
  1084. icdev/tools/testing/screenshot_validator.py +539 -0
  1085. icdev/tools/testing/smoke_test.py +283 -0
  1086. icdev/tools/testing/test_agent_models.py +117 -0
  1087. icdev/tools/testing/test_orchestrator.py +957 -0
  1088. icdev/tools/testing/utils.py +229 -0
  1089. icdev/tools/translation/__init__.py +17 -0
  1090. icdev/tools/translation/code_translator.py +550 -0
  1091. icdev/tools/translation/dependency_mapper.py +277 -0
  1092. icdev/tools/translation/feature_map.py +395 -0
  1093. icdev/tools/translation/project_assembler.py +439 -0
  1094. icdev/tools/translation/source_extractor.py +609 -0
  1095. icdev/tools/translation/test_translator.py +333 -0
  1096. icdev/tools/translation/translation_manager.py +582 -0
  1097. icdev/tools/translation/translation_validator.py +662 -0
  1098. icdev/tools/translation/type_checker.py +371 -0
  1099. icdev-1.0.0.dist-info/METADATA +868 -0
  1100. icdev-1.0.0.dist-info/RECORD +1105 -0
  1101. icdev-1.0.0.dist-info/WHEEL +5 -0
  1102. icdev-1.0.0.dist-info/entry_points.txt +9 -0
  1103. icdev-1.0.0.dist-info/licenses/LICENSE +254 -0
  1104. icdev-1.0.0.dist-info/licenses/NOTICE +268 -0
  1105. icdev-1.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1499 @@
1
+ # [TEMPLATE: CUI // SP-CTI]
2
+ #!/usr/bin/env python3
3
+ """ATO-Aware Compliance Bridge for ICDEV DoD Modernization.
4
+
5
+ Maintains NIST 800-53 control coverage during monolith-to-microservice migration.
6
+ Provides control inheritance, distribution across extracted services, gap analysis,
7
+ ATO impact reporting, digital thread creation, and coverage validation.
8
+
9
+ Ensures that decomposing a monolith into microservices does not degrade the
10
+ security posture tracked by the Authority to Operate (ATO) package.
11
+
12
+ Usage:
13
+ # Inherit controls from legacy monolith into migration plan
14
+ python tools/modernization/compliance_bridge.py \\
15
+ --plan-id mplan-abc123 --inherit
16
+
17
+ # Distribute inherited controls across extracted services
18
+ python tools/modernization/compliance_bridge.py \\
19
+ --plan-id mplan-abc123 --distribute --service-map /path/to/map.json
20
+
21
+ # Identify ATO coverage gaps
22
+ python tools/modernization/compliance_bridge.py \\
23
+ --plan-id mplan-abc123 --gaps
24
+
25
+ # Generate ATO impact report
26
+ python tools/modernization/compliance_bridge.py \\
27
+ --plan-id mplan-abc123 --report --output-dir /path/to/output
28
+
29
+ # Create full compliance digital thread
30
+ python tools/modernization/compliance_bridge.py \\
31
+ --plan-id mplan-abc123 --thread
32
+
33
+ # Validate ATO coverage post-migration
34
+ python tools/modernization/compliance_bridge.py \\
35
+ --plan-id mplan-abc123 --validate
36
+
37
+ # Show compliance dashboard
38
+ python tools/modernization/compliance_bridge.py \\
39
+ --plan-id mplan-abc123 --dashboard
40
+
41
+ Classification: CUI // SP-CTI
42
+ """
43
+
44
+ import argparse
45
+ import collections
46
+ import json
47
+ import sqlite3
48
+ import textwrap
49
+ from datetime import datetime, timezone
50
+ from pathlib import Path
51
+ from icdev._paths import get_project_root
52
+
53
+ # ---------------------------------------------------------------------------
54
+ # Configuration
55
+ # ---------------------------------------------------------------------------
56
+
57
+ BASE_DIR = get_project_root()
58
+ DB_PATH = BASE_DIR / "data" / "icdev.db"
59
+
60
+ # CUI banner text for generated documents
61
+ CUI_BANNER = (
62
+ "////////////////////////////////////////////////////////////////////\n"
63
+ "CONTROLLED UNCLASSIFIED INFORMATION (CUI) // SP-CTI\n"
64
+ "Distribution: Distribution D -- Authorized DoD Personnel Only\n"
65
+ "////////////////////////////////////////////////////////////////////"
66
+ )
67
+
68
+ CUI_FOOTER = (
69
+ "////////////////////////////////////////////////////////////////////\n"
70
+ "CUI // SP-CTI | Department of Defense\n"
71
+ "////////////////////////////////////////////////////////////////////"
72
+ )
73
+
74
+ # NIST 800-53 control family descriptions for mapping logic
75
+ CONTROL_FAMILY_DESCRIPTIONS = {
76
+ "AC": "Access Control",
77
+ "AU": "Audit and Accountability",
78
+ "AT": "Awareness and Training",
79
+ "CM": "Configuration Management",
80
+ "CP": "Contingency Planning",
81
+ "IA": "Identification and Authentication",
82
+ "IR": "Incident Response",
83
+ "MA": "Maintenance",
84
+ "MP": "Media Protection",
85
+ "PE": "Physical and Environmental Protection",
86
+ "PL": "Planning",
87
+ "PM": "Program Management",
88
+ "PS": "Personnel Security",
89
+ "PT": "PII Processing and Transparency",
90
+ "RA": "Risk Assessment",
91
+ "SA": "System and Services Acquisition",
92
+ "SC": "System and Communications Protection",
93
+ "SI": "System and Information Integrity",
94
+ "SR": "Supply Chain Risk Management",
95
+ }
96
+
97
+ # Control families that apply universally to ALL microservices
98
+ UNIVERSAL_FAMILIES = {"AC", "AU", "CM", "IR", "PL", "PM", "PS", "AT", "MA",
99
+ "MP", "PE", "RA", "SR", "CP"}
100
+
101
+ # Control families with component-type-specific applicability
102
+ TARGETED_FAMILY_RULES = {
103
+ "SC": {"applies_to_types": ["controller", "api_endpoint", "service",
104
+ "interface", "servlet"]},
105
+ "IA": {"applies_to_types": ["controller", "api_endpoint", "service",
106
+ "servlet", "module"]},
107
+ "SI": {"applies_to_types": ["service", "repository", "model", "entity",
108
+ "stored_procedure", "function", "module"]},
109
+ "SA": {"applies_to_types": ["class", "module", "service", "package"]},
110
+ "PT": {"applies_to_types": ["model", "entity", "repository",
111
+ "stored_procedure"]},
112
+ }
113
+
114
+ # Risk weights for gap severity scoring by control family
115
+ FAMILY_RISK_WEIGHTS = {
116
+ "AC": 9, "AU": 8, "IA": 9, "SC": 9, "SI": 8,
117
+ "CM": 7, "SA": 7, "RA": 7, "IR": 6, "CP": 6,
118
+ "SR": 5, "MA": 4, "MP": 4, "PE": 3, "PS": 3,
119
+ "PL": 3, "PM": 3, "AT": 2, "PT": 5,
120
+ }
121
+
122
+ # Estimated remediation weeks per gap by family criticality
123
+ REMEDIATION_WEEKS = {
124
+ "critical": 6, # AC, IA, SC
125
+ "high": 4, # AU, SI, CM, SA, RA
126
+ "medium": 2, # IR, CP, SR, PT
127
+ "low": 1, # MA, MP, PE, PS, PL, PM, AT
128
+ }
129
+
130
+
131
+ # ---------------------------------------------------------------------------
132
+ # Database helper
133
+ # ---------------------------------------------------------------------------
134
+
135
+ def _get_db():
136
+ """Return a sqlite3 connection to the ICDEV operational database.
137
+
138
+ The database file must already exist (created by tools/db/init_icdev_db.py).
139
+ Uses row_factory = sqlite3.Row for dict-like access.
140
+ """
141
+ if not DB_PATH.exists():
142
+ raise FileNotFoundError(
143
+ f"ICDEV database not found at {DB_PATH}. "
144
+ "Run 'python tools/db/init_icdev_db.py' first."
145
+ )
146
+ conn = sqlite3.connect(str(DB_PATH))
147
+ conn.row_factory = sqlite3.Row
148
+ conn.execute("PRAGMA journal_mode=WAL")
149
+ conn.execute("PRAGMA foreign_keys=ON")
150
+ return conn
151
+
152
+
153
+ def _get_plan_info(conn, plan_id):
154
+ """Fetch migration plan record and validate it exists."""
155
+ row = conn.execute(
156
+ "SELECT * FROM migration_plans WHERE id = ?", (plan_id,)
157
+ ).fetchone()
158
+ if not row:
159
+ raise ValueError(f"Migration plan '{plan_id}' not found in database.")
160
+ return dict(row)
161
+
162
+
163
+ def _get_legacy_app_project_id(conn, legacy_app_id):
164
+ """Get the project_id for a legacy application."""
165
+ row = conn.execute(
166
+ "SELECT project_id FROM legacy_applications WHERE id = ?",
167
+ (legacy_app_id,)
168
+ ).fetchone()
169
+ if not row:
170
+ raise ValueError(
171
+ f"Legacy application '{legacy_app_id}' not found in database."
172
+ )
173
+ return row["project_id"]
174
+
175
+
176
+ def _get_control_family(control_id):
177
+ """Extract the family prefix from a NIST control ID (e.g., 'AC-2' -> 'AC')."""
178
+ if "-" in control_id:
179
+ return control_id.split("-")[0]
180
+ return control_id[:2]
181
+
182
+
183
+ def _log_audit(conn, project_id, event_type, action, details=None):
184
+ """Write an audit trail entry (append-only, NIST AU compliant)."""
185
+ conn.execute(
186
+ """INSERT INTO audit_trail
187
+ (project_id, event_type, actor, action, details, classification)
188
+ VALUES (?, ?, ?, ?, ?, ?)""",
189
+ (
190
+ project_id,
191
+ event_type,
192
+ "compliance-bridge",
193
+ action,
194
+ json.dumps(details) if details else None,
195
+ "CUI",
196
+ ),
197
+ )
198
+
199
+
200
+ def _get_family_criticality(family):
201
+ """Map a control family to a criticality tier for remediation estimation."""
202
+ weight = FAMILY_RISK_WEIGHTS.get(family, 3)
203
+ if weight >= 9:
204
+ return "critical"
205
+ elif weight >= 7:
206
+ return "high"
207
+ elif weight >= 5:
208
+ return "medium"
209
+ return "low"
210
+
211
+
212
+ # ---------------------------------------------------------------------------
213
+ # 1. Inherit controls from monolith to migration plan
214
+ # ---------------------------------------------------------------------------
215
+
216
+ def inherit_controls(legacy_app_id, plan_id):
217
+ """Copy NIST control mappings from the legacy monolith to a migration plan.
218
+
219
+ For each implemented or partially_implemented control on the legacy app's
220
+ project, creates a digital_thread_link tracing the control to the
221
+ migration plan. This establishes the baseline ATO posture that must be
222
+ maintained through decomposition.
223
+
224
+ Args:
225
+ legacy_app_id: ID of the legacy application being migrated.
226
+ plan_id: ID of the migration plan receiving inherited controls.
227
+
228
+ Returns:
229
+ dict with keys:
230
+ controls_inherited: int total count
231
+ by_family: dict of {family_code: count}
232
+ """
233
+ conn = _get_db()
234
+ try:
235
+ # Validate plan exists
236
+ _get_plan_info(conn, plan_id)
237
+
238
+ # Get the project_id for the legacy application
239
+ project_id = _get_legacy_app_project_id(conn, legacy_app_id)
240
+
241
+ # Query all implemented / partially_implemented controls
242
+ rows = conn.execute(
243
+ """SELECT pc.control_id, pc.implementation_status,
244
+ pc.implementation_description, pc.evidence_path,
245
+ cc.family, cc.title
246
+ FROM project_controls pc
247
+ LEFT JOIN compliance_controls cc ON pc.control_id = cc.id
248
+ WHERE pc.project_id = ?
249
+ AND pc.implementation_status IN ('implemented', 'partially_implemented')
250
+ ORDER BY pc.control_id""",
251
+ (project_id,),
252
+ ).fetchall()
253
+
254
+ inherited_count = 0
255
+ by_family = collections.Counter()
256
+
257
+ for row in rows:
258
+ control_id = row["control_id"]
259
+ family = row["family"] or _get_control_family(control_id)
260
+
261
+ # Create digital thread link: nist_control -> migration_task (plan)
262
+ try:
263
+ conn.execute(
264
+ """INSERT OR IGNORE INTO digital_thread_links
265
+ (project_id, source_type, source_id,
266
+ target_type, target_id, link_type,
267
+ confidence, evidence, created_by, created_at)
268
+ VALUES (?, 'nist_control', ?,
269
+ 'migration_task', ?, 'traces_to',
270
+ ?, ?, 'compliance-bridge', ?)""",
271
+ (
272
+ project_id,
273
+ control_id,
274
+ plan_id,
275
+ 1.0 if row["implementation_status"] == "implemented" else 0.7,
276
+ json.dumps({
277
+ "source": "control_inheritance",
278
+ "legacy_app_id": legacy_app_id,
279
+ "original_status": row["implementation_status"],
280
+ "description": row["implementation_description"],
281
+ }),
282
+ datetime.now(timezone.utc).isoformat(),
283
+ ),
284
+ )
285
+ inherited_count += 1
286
+ by_family[family] += 1
287
+ except sqlite3.IntegrityError:
288
+ # Link already exists -- count it anyway for reporting
289
+ inherited_count += 1
290
+ by_family[family] += 1
291
+
292
+ # Audit trail
293
+ _log_audit(conn, project_id, "compliance_check",
294
+ f"Inherited {inherited_count} controls from {legacy_app_id} to plan {plan_id}",
295
+ {"controls_inherited": inherited_count, "by_family": dict(by_family)})
296
+
297
+ conn.commit()
298
+
299
+ result = {
300
+ "controls_inherited": inherited_count,
301
+ "by_family": dict(by_family),
302
+ }
303
+ print(f"[INFO] Inherited {inherited_count} controls from {legacy_app_id} to plan {plan_id}")
304
+ for fam, cnt in sorted(by_family.items()):
305
+ print(f" {fam} ({CONTROL_FAMILY_DESCRIPTIONS.get(fam, 'Unknown')}): {cnt}")
306
+ return result
307
+
308
+ finally:
309
+ conn.close()
310
+
311
+
312
+ # ---------------------------------------------------------------------------
313
+ # 2. Distribute controls across extracted services
314
+ # ---------------------------------------------------------------------------
315
+
316
+ def distribute_controls(plan_id, service_map):
317
+ """Distribute inherited NIST controls across extracted microservices.
318
+
319
+ Uses control family semantics to determine which services should own
320
+ each control:
321
+ - AC, AU, CM, IR, etc. (universal) -> all services
322
+ - SC (System Communications) -> services with API/network components
323
+ - IA (Identification/Auth) -> services with auth components
324
+ - SI (System Integrity) -> services with data processing components
325
+
326
+ Args:
327
+ plan_id: Migration plan ID.
328
+ service_map: dict of {service_name: [component_ids]} mapping service
329
+ names to the legacy component IDs they absorb.
330
+
331
+ Returns:
332
+ Distribution matrix: {service_name: {control_family: [control_ids]}}
333
+ """
334
+ conn = _get_db()
335
+ try:
336
+ plan = _get_plan_info(conn, plan_id)
337
+ legacy_app_id = plan["legacy_app_id"]
338
+ project_id = _get_legacy_app_project_id(conn, legacy_app_id)
339
+
340
+ # Fetch all inherited controls for this plan
341
+ inherited_rows = conn.execute(
342
+ """SELECT source_id AS control_id
343
+ FROM digital_thread_links
344
+ WHERE project_id = ?
345
+ AND source_type = 'nist_control'
346
+ AND target_type = 'migration_task'
347
+ AND target_id = ?
348
+ AND link_type = 'traces_to'""",
349
+ (project_id, plan_id),
350
+ ).fetchall()
351
+
352
+ if not inherited_rows:
353
+ print("[WARN] No inherited controls found. Run --inherit first.")
354
+ return {}
355
+
356
+ inherited_controls = [r["control_id"] for r in inherited_rows]
357
+
358
+ # Build component-type lookup for each service
359
+ service_component_types = {}
360
+ for svc_name, comp_ids in service_map.items():
361
+ types_set = set()
362
+ for comp_id in comp_ids:
363
+ row = conn.execute(
364
+ "SELECT component_type FROM legacy_components WHERE id = ?",
365
+ (comp_id,),
366
+ ).fetchone()
367
+ if row:
368
+ types_set.add(row["component_type"])
369
+ service_component_types[svc_name] = types_set
370
+
371
+ # Distribute controls
372
+ distribution = {svc: collections.defaultdict(list) for svc in service_map}
373
+ links_created = 0
374
+
375
+ for control_id in inherited_controls:
376
+ family = _get_control_family(control_id)
377
+
378
+ # Determine target services for this control
379
+ target_services = []
380
+
381
+ if family in UNIVERSAL_FAMILIES:
382
+ # Universal controls apply to all services
383
+ target_services = list(service_map.keys())
384
+
385
+ elif family in TARGETED_FAMILY_RULES:
386
+ # Targeted controls apply only to services with matching types
387
+ rule = TARGETED_FAMILY_RULES[family]
388
+ applies_to = set(rule["applies_to_types"])
389
+ for svc_name, comp_types in service_component_types.items():
390
+ if comp_types & applies_to:
391
+ target_services.append(svc_name)
392
+ # Fallback: if no service matches, assign to all (safety net)
393
+ if not target_services:
394
+ target_services = list(service_map.keys())
395
+
396
+ else:
397
+ # Unknown family: assign to all services as safety measure
398
+ target_services = list(service_map.keys())
399
+
400
+ # Create digital thread links for each service-control pairing
401
+ for svc_name in target_services:
402
+ distribution[svc_name][family].append(control_id)
403
+ try:
404
+ conn.execute(
405
+ """INSERT OR IGNORE INTO digital_thread_links
406
+ (project_id, source_type, source_id,
407
+ target_type, target_id, link_type,
408
+ confidence, evidence, created_by, created_at)
409
+ VALUES (?, 'nist_control', ?,
410
+ 'migration_task', ?, 'traces_to',
411
+ ?, ?, 'compliance-bridge', ?)""",
412
+ (
413
+ project_id,
414
+ control_id,
415
+ f"{plan_id}::{svc_name}",
416
+ 0.9,
417
+ json.dumps({
418
+ "source": "control_distribution",
419
+ "service": svc_name,
420
+ "family": family,
421
+ "distribution_rule": "universal" if family in UNIVERSAL_FAMILIES else "targeted",
422
+ }),
423
+ datetime.now(timezone.utc).isoformat(),
424
+ ),
425
+ )
426
+ links_created += 1
427
+ except sqlite3.IntegrityError:
428
+ pass
429
+
430
+ # Convert defaultdicts to regular dicts for serialization
431
+ result = {}
432
+ for svc_name, families in distribution.items():
433
+ result[svc_name] = {fam: ctrls for fam, ctrls in families.items()}
434
+
435
+ _log_audit(conn, project_id, "compliance_check",
436
+ f"Distributed controls across {len(service_map)} services for plan {plan_id}",
437
+ {"services": list(service_map.keys()), "links_created": links_created})
438
+
439
+ conn.commit()
440
+
441
+ print(f"[INFO] Distributed controls across {len(service_map)} services")
442
+ for svc_name in sorted(result.keys()):
443
+ total = sum(len(ctrls) for ctrls in result[svc_name].values())
444
+ families_str = ", ".join(sorted(result[svc_name].keys()))
445
+ print(f" {svc_name}: {total} controls [{families_str}]")
446
+
447
+ return result
448
+
449
+ finally:
450
+ conn.close()
451
+
452
+
453
+ # ---------------------------------------------------------------------------
454
+ # 3. Identify ATO gaps
455
+ # ---------------------------------------------------------------------------
456
+
457
+ def identify_ato_gaps(plan_id):
458
+ """Find NIST controls that lose coverage during service decomposition.
459
+
460
+ Compares inherited controls (from the monolith) against distributed
461
+ controls (assigned to microservices). Controls with no distribution
462
+ target are ATO gaps. Also flags controls whose implementation
463
+ description references monolith-specific architecture.
464
+
465
+ Args:
466
+ plan_id: Migration plan ID.
467
+
468
+ Returns:
469
+ dict with keys:
470
+ gaps: list of {control_id, family, title, reason}
471
+ gap_count: int
472
+ total_controls: int
473
+ coverage_pct: float (0-100)
474
+ """
475
+ conn = _get_db()
476
+ try:
477
+ plan = _get_plan_info(conn, plan_id)
478
+ legacy_app_id = plan["legacy_app_id"]
479
+ project_id = _get_legacy_app_project_id(conn, legacy_app_id)
480
+
481
+ # All inherited controls
482
+ inherited_rows = conn.execute(
483
+ """SELECT source_id AS control_id
484
+ FROM digital_thread_links
485
+ WHERE project_id = ?
486
+ AND source_type = 'nist_control'
487
+ AND target_type = 'migration_task'
488
+ AND target_id = ?
489
+ AND link_type = 'traces_to'""",
490
+ (project_id, plan_id),
491
+ ).fetchall()
492
+ inherited_set = {r["control_id"] for r in inherited_rows}
493
+
494
+ # All distributed controls (target_id has '::' separator for service assignments)
495
+ distributed_rows = conn.execute(
496
+ """SELECT source_id AS control_id
497
+ FROM digital_thread_links
498
+ WHERE project_id = ?
499
+ AND source_type = 'nist_control'
500
+ AND target_type = 'migration_task'
501
+ AND target_id LIKE ?
502
+ AND link_type = 'traces_to'""",
503
+ (project_id, f"{plan_id}::%"),
504
+ ).fetchall()
505
+ distributed_set = {r["control_id"] for r in distributed_rows}
506
+
507
+ # Monolith-specific keywords that indicate architecture coupling
508
+ monolith_keywords = [
509
+ "monolith", "single deployment", "shared database",
510
+ "in-process", "same server", "single instance",
511
+ "tightly coupled", "single codebase", "co-located",
512
+ ]
513
+
514
+ gaps = []
515
+
516
+ for control_id in sorted(inherited_set):
517
+ family = _get_control_family(control_id)
518
+
519
+ # Get control metadata
520
+ ctrl_row = conn.execute(
521
+ "SELECT title, description FROM compliance_controls WHERE id = ?",
522
+ (control_id,),
523
+ ).fetchone()
524
+ title = ctrl_row["title"] if ctrl_row else "Unknown"
525
+
526
+ # Gap type 1: no distribution target at all
527
+ if control_id not in distributed_set:
528
+ gaps.append({
529
+ "control_id": control_id,
530
+ "family": family,
531
+ "title": title,
532
+ "reason": "No microservice assigned to this control",
533
+ })
534
+ continue
535
+
536
+ # Gap type 2: implementation references monolith architecture
537
+ impl_row = conn.execute(
538
+ """SELECT implementation_description
539
+ FROM project_controls
540
+ WHERE project_id = ? AND control_id = ?""",
541
+ (project_id, control_id),
542
+ ).fetchone()
543
+
544
+ if impl_row and impl_row["implementation_description"]:
545
+ desc_lower = impl_row["implementation_description"].lower()
546
+ for keyword in monolith_keywords:
547
+ if keyword in desc_lower:
548
+ gaps.append({
549
+ "control_id": control_id,
550
+ "family": family,
551
+ "title": title,
552
+ "reason": f"Implementation references monolith architecture: '{keyword}'",
553
+ })
554
+ break
555
+
556
+ total_controls = len(inherited_set)
557
+ gap_count = len(gaps)
558
+ coverage_pct = round(
559
+ ((total_controls - gap_count) / total_controls * 100)
560
+ if total_controls > 0 else 0.0, 2
561
+ )
562
+
563
+ result = {
564
+ "gaps": gaps,
565
+ "gap_count": gap_count,
566
+ "total_controls": total_controls,
567
+ "coverage_pct": coverage_pct,
568
+ }
569
+
570
+ print(f"[INFO] ATO gap analysis for plan {plan_id}")
571
+ print(f" Total controls: {total_controls}")
572
+ print(f" Gaps found: {gap_count}")
573
+ print(f" Coverage: {coverage_pct}%")
574
+ if gaps:
575
+ print(" Gap details:")
576
+ for g in gaps:
577
+ print(f" {g['control_id']} ({g['family']}): {g['reason']}")
578
+
579
+ return result
580
+
581
+ finally:
582
+ conn.close()
583
+
584
+
585
+ # ---------------------------------------------------------------------------
586
+ # 4. Generate ATO impact report
587
+ # ---------------------------------------------------------------------------
588
+
589
+ def generate_ato_impact_report(plan_id, output_dir=None):
590
+ """Generate a comprehensive ATO impact analysis report in CUI-marked markdown.
591
+
592
+ Calls inherit analysis, distribution analysis, and gap identification to
593
+ produce an executive-level report covering:
594
+ - Executive summary with totals
595
+ - Per-family breakdown table
596
+ - Gap analysis with remediation recommendations
597
+ - Risk assessment with severity scoring
598
+ - Timeline impact estimation
599
+
600
+ Args:
601
+ plan_id: Migration plan ID.
602
+ output_dir: Optional directory path to write the report file.
603
+ If None, returns report content as string.
604
+
605
+ Returns:
606
+ File path (str) if output_dir provided, else report content (str).
607
+ """
608
+ conn = _get_db()
609
+ try:
610
+ plan = _get_plan_info(conn, plan_id)
611
+ legacy_app_id = plan["legacy_app_id"]
612
+ project_id = _get_legacy_app_project_id(conn, legacy_app_id)
613
+
614
+ # Gather legacy app info
615
+ app_row = conn.execute(
616
+ "SELECT name FROM legacy_applications WHERE id = ?",
617
+ (legacy_app_id,),
618
+ ).fetchone()
619
+ app_name = app_row["name"] if app_row else legacy_app_id
620
+
621
+ # Gather inherited controls count by family
622
+ inherited_rows = conn.execute(
623
+ """SELECT source_id AS control_id
624
+ FROM digital_thread_links
625
+ WHERE project_id = ?
626
+ AND source_type = 'nist_control'
627
+ AND target_type = 'migration_task'
628
+ AND target_id = ?
629
+ AND link_type = 'traces_to'""",
630
+ (project_id, plan_id),
631
+ ).fetchall()
632
+ inherited_by_family = collections.Counter()
633
+ for r in inherited_rows:
634
+ inherited_by_family[_get_control_family(r["control_id"])] += 1
635
+ total_inherited = len(inherited_rows)
636
+
637
+ # Gather distributed controls by family
638
+ distributed_rows = conn.execute(
639
+ """SELECT DISTINCT source_id AS control_id
640
+ FROM digital_thread_links
641
+ WHERE project_id = ?
642
+ AND source_type = 'nist_control'
643
+ AND target_type = 'migration_task'
644
+ AND target_id LIKE ?
645
+ AND link_type = 'traces_to'""",
646
+ (project_id, f"{plan_id}::%"),
647
+ ).fetchall()
648
+ distributed_by_family = collections.Counter()
649
+ for r in distributed_rows:
650
+ distributed_by_family[_get_control_family(r["control_id"])] += 1
651
+ total_distributed = len(distributed_rows)
652
+
653
+ finally:
654
+ conn.close()
655
+
656
+ # Identify gaps (uses its own connection)
657
+ gap_result = identify_ato_gaps(plan_id)
658
+ gaps = gap_result["gaps"]
659
+ gap_count = gap_result["gap_count"]
660
+ coverage_pct = gap_result["coverage_pct"]
661
+
662
+ # Compute risk scores and timeline impact
663
+ gap_by_family = collections.Counter()
664
+ for g in gaps:
665
+ gap_by_family[g["family"]] += 1
666
+
667
+ total_risk_score = 0
668
+ total_remediation_weeks = 0
669
+ family_risk_details = []
670
+ for family, count in sorted(gap_by_family.items()):
671
+ weight = FAMILY_RISK_WEIGHTS.get(family, 3)
672
+ risk = weight * count
673
+ total_risk_score += risk
674
+ criticality = _get_family_criticality(family)
675
+ weeks = REMEDIATION_WEEKS.get(criticality, 1) * count
676
+ total_remediation_weeks += weeks
677
+ family_risk_details.append({
678
+ "family": family,
679
+ "gap_count": count,
680
+ "risk_weight": weight,
681
+ "risk_score": risk,
682
+ "criticality": criticality,
683
+ "remediation_weeks": weeks,
684
+ })
685
+
686
+ # Determine overall risk level
687
+ if total_risk_score == 0:
688
+ overall_risk = "LOW"
689
+ elif total_risk_score <= 20:
690
+ overall_risk = "MODERATE"
691
+ elif total_risk_score <= 50:
692
+ overall_risk = "HIGH"
693
+ else:
694
+ overall_risk = "CRITICAL"
695
+
696
+ now = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M UTC")
697
+
698
+ # Build report
699
+ lines = [
700
+ CUI_BANNER,
701
+ "",
702
+ "# ATO Impact Analysis Report",
703
+ "",
704
+ f"**Plan ID:** {plan_id}",
705
+ f"**Legacy Application:** {app_name} ({legacy_app_id})",
706
+ f"**Migration Strategy:** {plan.get('strategy', 'N/A')}",
707
+ f"**Target Architecture:** {plan.get('target_architecture', 'N/A')}",
708
+ f"**Generated:** {now}",
709
+ "**Classification:** CUI // SP-CTI",
710
+ "",
711
+ "---",
712
+ "",
713
+ "## Executive Summary",
714
+ "",
715
+ "| Metric | Value |",
716
+ "|--------|-------|",
717
+ f"| Total Controls in ATO Baseline | {total_inherited} |",
718
+ f"| Controls Inherited | {total_inherited} |",
719
+ f"| Controls Distributed to Services | {total_distributed} |",
720
+ f"| ATO Gaps Identified | {gap_count} |",
721
+ f"| Coverage Percentage | {coverage_pct}% |",
722
+ f"| Overall Risk Level | **{overall_risk}** |",
723
+ f"| Estimated Remediation | {total_remediation_weeks} additional weeks |",
724
+ "",
725
+ ]
726
+
727
+ # Compliance gate status
728
+ gate_status = "PASS" if coverage_pct >= 95.0 else "FAIL"
729
+ lines.append(f"**Compliance Migration Gate:** {gate_status}")
730
+ if gate_status == "FAIL":
731
+ lines.append(f" - Coverage must be >= 95% to proceed. Current: {coverage_pct}%")
732
+ lines.append("")
733
+
734
+ # Per-family breakdown
735
+ lines.extend([
736
+ "---",
737
+ "",
738
+ "## Per-Family Breakdown",
739
+ "",
740
+ "| Family | Description | Inherited | Distributed | Gaps | Coverage |",
741
+ "|--------|-------------|-----------|-------------|------|----------|",
742
+ ])
743
+
744
+ all_families = sorted(set(
745
+ list(inherited_by_family.keys()) +
746
+ list(distributed_by_family.keys()) +
747
+ list(gap_by_family.keys())
748
+ ))
749
+
750
+ for fam in all_families:
751
+ desc = CONTROL_FAMILY_DESCRIPTIONS.get(fam, "Unknown")
752
+ inh = inherited_by_family.get(fam, 0)
753
+ dist = distributed_by_family.get(fam, 0)
754
+ gps = gap_by_family.get(fam, 0)
755
+ cov = round(((inh - gps) / inh * 100) if inh > 0 else 100.0, 1)
756
+ lines.append(f"| {fam} | {desc} | {inh} | {dist} | {gps} | {cov}% |")
757
+
758
+ lines.append("")
759
+
760
+ # Gap analysis
761
+ lines.extend([
762
+ "---",
763
+ "",
764
+ "## Gap Analysis",
765
+ "",
766
+ ])
767
+
768
+ if not gaps:
769
+ lines.append("**No ATO gaps identified.** All controls have been distributed "
770
+ "to target microservices with adequate coverage.")
771
+ else:
772
+ lines.extend([
773
+ "| # | Control | Family | Title | Reason | Recommended Action |",
774
+ "|---|---------|--------|-------|--------|--------------------|",
775
+ ])
776
+ for i, g in enumerate(gaps, 1):
777
+ family = g["family"]
778
+ # Generate remediation recommendation based on gap reason
779
+ if "No microservice assigned" in g["reason"]:
780
+ rec = f"Assign {g['control_id']} to appropriate service(s) or create a shared security service"
781
+ else:
782
+ rec = f"Update implementation to reflect distributed architecture for {g['control_id']}"
783
+ lines.append(
784
+ f"| {i} | {g['control_id']} | {family} | {g['title']} | "
785
+ f"{g['reason']} | {rec} |"
786
+ )
787
+ lines.append("")
788
+
789
+ # Risk assessment
790
+ lines.extend([
791
+ "---",
792
+ "",
793
+ "## Risk Assessment",
794
+ "",
795
+ ])
796
+
797
+ if family_risk_details:
798
+ lines.extend([
799
+ "| Family | Gaps | Risk Weight | Risk Score | Criticality | Remediation (weeks) |",
800
+ "|--------|------|-------------|------------|-------------|---------------------|",
801
+ ])
802
+ for frd in sorted(family_risk_details, key=lambda x: x["risk_score"], reverse=True):
803
+ lines.append(
804
+ f"| {frd['family']} | {frd['gap_count']} | {frd['risk_weight']} | "
805
+ f"{frd['risk_score']} | {frd['criticality'].upper()} | {frd['remediation_weeks']} |"
806
+ )
807
+ lines.extend([
808
+ "",
809
+ f"**Total Risk Score:** {total_risk_score}",
810
+ f"**Overall Risk Level:** {overall_risk}",
811
+ "",
812
+ ])
813
+ else:
814
+ lines.append("No risks identified -- all controls have adequate coverage.")
815
+ lines.append("")
816
+
817
+ # Timeline impact
818
+ lines.extend([
819
+ "---",
820
+ "",
821
+ "## Timeline Impact",
822
+ "",
823
+ f"Based on gap analysis, an estimated **{total_remediation_weeks} additional weeks** "
824
+ "may be required for compliance remediation before the migrated system can achieve ATO.",
825
+ "",
826
+ "Breakdown by criticality tier:",
827
+ "",
828
+ ])
829
+
830
+ tier_weeks = collections.Counter()
831
+ for frd in family_risk_details:
832
+ tier_weeks[frd["criticality"]] += frd["remediation_weeks"]
833
+
834
+ for tier in ["critical", "high", "medium", "low"]:
835
+ if tier_weeks.get(tier, 0) > 0:
836
+ lines.append(f"- **{tier.upper()}:** {tier_weeks[tier]} weeks")
837
+
838
+ if total_remediation_weeks == 0:
839
+ lines.append("- No additional time required -- compliance posture is maintained.")
840
+
841
+ lines.extend([
842
+ "",
843
+ "---",
844
+ "",
845
+ "## Recommendations",
846
+ "",
847
+ "1. Address all CRITICAL and HIGH risk gaps before proceeding with production cutover.",
848
+ "2. Create a shared security service to host cross-cutting controls (AC, AU, IA).",
849
+ "3. Implement centralized audit logging to maintain AU family coverage across all services.",
850
+ "4. Update System Security Plan (SSP) to reflect the new distributed architecture.",
851
+ "5. Schedule an incremental ATO assessment for each migrated service boundary.",
852
+ "",
853
+ "---",
854
+ "",
855
+ CUI_FOOTER,
856
+ "",
857
+ ])
858
+
859
+ content = "\n".join(lines)
860
+
861
+ if output_dir:
862
+ output_path = Path(output_dir)
863
+ output_path.mkdir(parents=True, exist_ok=True)
864
+ filename = f"ato_impact_report_{plan_id}_{datetime.now(timezone.utc).strftime('%Y%m%d_%H%M%S')}.md"
865
+ file_path = output_path / filename
866
+ with open(str(file_path), "w", encoding="utf-8") as f:
867
+ f.write(content)
868
+ print(f"[INFO] ATO impact report written to {file_path}")
869
+ return str(file_path)
870
+
871
+ return content
872
+
873
+
874
+ # ---------------------------------------------------------------------------
875
+ # 5. Create compliance digital thread
876
+ # ---------------------------------------------------------------------------
877
+
878
+ def create_compliance_thread(plan_id):
879
+ """Create a full digital thread linking legacy components through migration
880
+ tasks to NIST controls for end-to-end compliance traceability.
881
+
882
+ For each migration task in the plan:
883
+ 1. Link legacy_component -> migration_task (migrates_to)
884
+ 2. If task has output code: link migration_task -> code_module (implements)
885
+ 3. Link code_module -> nist_control (satisfies) based on distributed controls
886
+
887
+ Args:
888
+ plan_id: Migration plan ID.
889
+
890
+ Returns:
891
+ dict with keys:
892
+ links_created: int total new links
893
+ coverage_pct: float percentage of controls with thread links
894
+ """
895
+ conn = _get_db()
896
+ try:
897
+ plan = _get_plan_info(conn, plan_id)
898
+ legacy_app_id = plan["legacy_app_id"]
899
+ project_id = _get_legacy_app_project_id(conn, legacy_app_id)
900
+
901
+ # Get all migration tasks for this plan
902
+ tasks = conn.execute(
903
+ "SELECT * FROM migration_tasks WHERE plan_id = ?",
904
+ (plan_id,),
905
+ ).fetchall()
906
+
907
+ links_created = 0
908
+ now = datetime.now(timezone.utc).isoformat()
909
+
910
+ for task in tasks:
911
+ task_id = task["id"]
912
+ comp_id = task["legacy_component_id"]
913
+
914
+ # 1. Link legacy_component -> migration_task
915
+ if comp_id:
916
+ try:
917
+ conn.execute(
918
+ """INSERT OR IGNORE INTO digital_thread_links
919
+ (project_id, source_type, source_id,
920
+ target_type, target_id, link_type,
921
+ confidence, evidence, created_by, created_at)
922
+ VALUES (?, 'legacy_component', ?,
923
+ 'migration_task', ?, 'migrates_to',
924
+ 1.0, ?, 'compliance-bridge', ?)""",
925
+ (
926
+ project_id, comp_id, task_id,
927
+ json.dumps({"task_type": task["task_type"],
928
+ "title": task["title"]}),
929
+ now,
930
+ ),
931
+ )
932
+ links_created += 1
933
+ except sqlite3.IntegrityError:
934
+ pass
935
+
936
+ # 2. If task has output code, link migration_task -> code_module
937
+ output_path = task["output_path"]
938
+ if output_path:
939
+ code_module_id = f"{task_id}::output"
940
+ try:
941
+ conn.execute(
942
+ """INSERT OR IGNORE INTO digital_thread_links
943
+ (project_id, source_type, source_id,
944
+ target_type, target_id, link_type,
945
+ confidence, evidence, created_by, created_at)
946
+ VALUES (?, 'migration_task', ?,
947
+ 'code_module', ?, 'implements',
948
+ 0.9, ?, 'compliance-bridge', ?)""",
949
+ (
950
+ project_id, task_id, code_module_id,
951
+ json.dumps({"output_path": output_path}),
952
+ now,
953
+ ),
954
+ )
955
+ links_created += 1
956
+ except sqlite3.IntegrityError:
957
+ pass
958
+
959
+ # 3. Link code_module -> nist_control (satisfies)
960
+ # Find distributed controls relevant to this task's service context
961
+ distributed = conn.execute(
962
+ """SELECT source_id AS control_id
963
+ FROM digital_thread_links
964
+ WHERE project_id = ?
965
+ AND source_type = 'nist_control'
966
+ AND target_type = 'migration_task'
967
+ AND target_id LIKE ?
968
+ AND link_type = 'traces_to'""",
969
+ (project_id, f"{plan_id}::%"),
970
+ ).fetchall()
971
+
972
+ for d_row in distributed:
973
+ try:
974
+ conn.execute(
975
+ """INSERT OR IGNORE INTO digital_thread_links
976
+ (project_id, source_type, source_id,
977
+ target_type, target_id, link_type,
978
+ confidence, evidence, created_by, created_at)
979
+ VALUES (?, 'code_module', ?,
980
+ 'nist_control', ?, 'satisfies',
981
+ 0.8, ?, 'compliance-bridge', ?)""",
982
+ (
983
+ project_id, code_module_id,
984
+ d_row["control_id"],
985
+ json.dumps({"source_task": task_id}),
986
+ now,
987
+ ),
988
+ )
989
+ links_created += 1
990
+ except sqlite3.IntegrityError:
991
+ pass
992
+
993
+ # Calculate coverage: how many inherited controls have a satisfies link?
994
+ inherited_rows = conn.execute(
995
+ """SELECT source_id AS control_id
996
+ FROM digital_thread_links
997
+ WHERE project_id = ?
998
+ AND source_type = 'nist_control'
999
+ AND target_type = 'migration_task'
1000
+ AND target_id = ?
1001
+ AND link_type = 'traces_to'""",
1002
+ (project_id, plan_id),
1003
+ ).fetchall()
1004
+ inherited_set = {r["control_id"] for r in inherited_rows}
1005
+
1006
+ satisfied_rows = conn.execute(
1007
+ """SELECT target_id AS control_id
1008
+ FROM digital_thread_links
1009
+ WHERE project_id = ?
1010
+ AND source_type = 'code_module'
1011
+ AND target_type = 'nist_control'
1012
+ AND link_type = 'satisfies'""",
1013
+ (project_id,),
1014
+ ).fetchall()
1015
+ satisfied_set = {r["control_id"] for r in satisfied_rows}
1016
+
1017
+ covered = inherited_set & satisfied_set
1018
+ coverage_pct = round(
1019
+ (len(covered) / len(inherited_set) * 100)
1020
+ if inherited_set else 0.0, 2
1021
+ )
1022
+
1023
+ _log_audit(conn, project_id, "digital_thread_linked",
1024
+ f"Created compliance thread for plan {plan_id}",
1025
+ {"links_created": links_created, "coverage_pct": coverage_pct})
1026
+
1027
+ conn.commit()
1028
+
1029
+ result = {
1030
+ "links_created": links_created,
1031
+ "coverage_pct": coverage_pct,
1032
+ }
1033
+ print(f"[INFO] Compliance thread created for plan {plan_id}")
1034
+ print(f" Links created: {links_created}")
1035
+ print(f" Coverage: {coverage_pct}%")
1036
+ return result
1037
+
1038
+ finally:
1039
+ conn.close()
1040
+
1041
+
1042
+ # ---------------------------------------------------------------------------
1043
+ # 6. Validate ATO coverage
1044
+ # ---------------------------------------------------------------------------
1045
+
1046
+ def validate_ato_coverage(plan_id):
1047
+ """Verify that no NIST control coverage is lost after migration.
1048
+
1049
+ Compares the pre-migration control count (from project_controls) against
1050
+ the post-migration coverage (from digital_thread_links). Ensures each
1051
+ control family retains at least the same level of coverage.
1052
+
1053
+ Args:
1054
+ plan_id: Migration plan ID.
1055
+
1056
+ Returns:
1057
+ dict with keys:
1058
+ valid: bool (True if no coverage lost)
1059
+ pre_count: int controls before migration
1060
+ post_count: int controls with post-migration coverage
1061
+ coverage_delta: int (post - pre, 0 or positive is good)
1062
+ failures: list of {control_id, reason}
1063
+ """
1064
+ conn = _get_db()
1065
+ try:
1066
+ plan = _get_plan_info(conn, plan_id)
1067
+ legacy_app_id = plan["legacy_app_id"]
1068
+ project_id = _get_legacy_app_project_id(conn, legacy_app_id)
1069
+
1070
+ # Pre-migration: all implemented/partially_implemented controls
1071
+ pre_rows = conn.execute(
1072
+ """SELECT control_id, implementation_status
1073
+ FROM project_controls
1074
+ WHERE project_id = ?
1075
+ AND implementation_status IN ('implemented', 'partially_implemented')
1076
+ ORDER BY control_id""",
1077
+ (project_id,),
1078
+ ).fetchall()
1079
+ pre_controls = {r["control_id"] for r in pre_rows}
1080
+ pre_by_family = collections.Counter()
1081
+ for r in pre_rows:
1082
+ pre_by_family[_get_control_family(r["control_id"])] += 1
1083
+
1084
+ # Post-migration: controls linked via digital thread
1085
+ # A control is "covered" if it has a traces_to link to the plan
1086
+ # AND either a distribution link or a satisfies link
1087
+ post_distributed = conn.execute(
1088
+ """SELECT DISTINCT source_id AS control_id
1089
+ FROM digital_thread_links
1090
+ WHERE project_id = ?
1091
+ AND source_type = 'nist_control'
1092
+ AND target_type = 'migration_task'
1093
+ AND (target_id = ? OR target_id LIKE ?)
1094
+ AND link_type = 'traces_to'""",
1095
+ (project_id, plan_id, f"{plan_id}::%"),
1096
+ ).fetchall()
1097
+ post_controls = {r["control_id"] for r in post_distributed}
1098
+ post_by_family = collections.Counter()
1099
+ for r in post_distributed:
1100
+ post_by_family[_get_control_family(r["control_id"])] += 1
1101
+
1102
+ # Validation: check each pre-migration control has post coverage
1103
+ failures = []
1104
+
1105
+ for control_id in sorted(pre_controls):
1106
+ if control_id not in post_controls:
1107
+ failures.append({
1108
+ "control_id": control_id,
1109
+ "reason": "Control not found in post-migration digital thread",
1110
+ })
1111
+
1112
+ # Check family-level coverage
1113
+ for family, pre_count in sorted(pre_by_family.items()):
1114
+ post_count = post_by_family.get(family, 0)
1115
+ if post_count < pre_count:
1116
+ delta = pre_count - post_count
1117
+ failures.append({
1118
+ "control_id": f"{family}-*",
1119
+ "reason": (f"Family {family} lost coverage: "
1120
+ f"{pre_count} pre-migration vs {post_count} post-migration "
1121
+ f"({delta} controls lost)"),
1122
+ })
1123
+
1124
+ valid = len(failures) == 0
1125
+ pre_total = len(pre_controls)
1126
+ post_total = len(post_controls)
1127
+ coverage_delta = post_total - pre_total
1128
+
1129
+ result = {
1130
+ "valid": valid,
1131
+ "pre_count": pre_total,
1132
+ "post_count": post_total,
1133
+ "coverage_delta": coverage_delta,
1134
+ "failures": failures,
1135
+ }
1136
+
1137
+ _log_audit(conn, project_id, "compliance_check",
1138
+ f"ATO coverage validation: {'PASS' if valid else 'FAIL'} for plan {plan_id}",
1139
+ result)
1140
+
1141
+ conn.commit()
1142
+
1143
+ status_str = "PASS" if valid else "FAIL"
1144
+ print(f"[INFO] ATO coverage validation: {status_str}")
1145
+ print(f" Pre-migration controls: {pre_total}")
1146
+ print(f" Post-migration controls: {post_total}")
1147
+ print(f" Coverage delta: {coverage_delta:+d}")
1148
+ if failures:
1149
+ print(f" Failures ({len(failures)}):")
1150
+ for f in failures:
1151
+ print(f" {f['control_id']}: {f['reason']}")
1152
+
1153
+ return result
1154
+
1155
+ finally:
1156
+ conn.close()
1157
+
1158
+
1159
+ # ---------------------------------------------------------------------------
1160
+ # 7. Compliance dashboard
1161
+ # ---------------------------------------------------------------------------
1162
+
1163
+ def get_compliance_dashboard(plan_id):
1164
+ """Generate a summary compliance dashboard for the migration plan.
1165
+
1166
+ Returns a comprehensive status view including:
1167
+ - Total controls in scope and coverage percentages
1168
+ - Controls at risk with details
1169
+ - Per-family status breakdown
1170
+ - Migration compliance gate (PASS/FAIL at 95% threshold)
1171
+
1172
+ Args:
1173
+ plan_id: Migration plan ID.
1174
+
1175
+ Returns:
1176
+ Dashboard dict with full status information.
1177
+ """
1178
+ conn = _get_db()
1179
+ try:
1180
+ plan = _get_plan_info(conn, plan_id)
1181
+ legacy_app_id = plan["legacy_app_id"]
1182
+ project_id = _get_legacy_app_project_id(conn, legacy_app_id)
1183
+
1184
+ # Total controls in scope (inherited)
1185
+ inherited_rows = conn.execute(
1186
+ """SELECT source_id AS control_id
1187
+ FROM digital_thread_links
1188
+ WHERE project_id = ?
1189
+ AND source_type = 'nist_control'
1190
+ AND target_type = 'migration_task'
1191
+ AND target_id = ?
1192
+ AND link_type = 'traces_to'""",
1193
+ (project_id, plan_id),
1194
+ ).fetchall()
1195
+ total_in_scope = len(inherited_rows)
1196
+ inherited_set = {r["control_id"] for r in inherited_rows}
1197
+
1198
+ # Distributed controls
1199
+ distributed_rows = conn.execute(
1200
+ """SELECT DISTINCT source_id AS control_id
1201
+ FROM digital_thread_links
1202
+ WHERE project_id = ?
1203
+ AND source_type = 'nist_control'
1204
+ AND target_type = 'migration_task'
1205
+ AND target_id LIKE ?
1206
+ AND link_type = 'traces_to'""",
1207
+ (project_id, f"{plan_id}::%"),
1208
+ ).fetchall()
1209
+ {r["control_id"] for r in distributed_rows}
1210
+
1211
+ finally:
1212
+ conn.close()
1213
+
1214
+ # Run gap analysis (uses its own connection)
1215
+ gap_result = identify_ato_gaps(plan_id)
1216
+ gap_controls = {g["control_id"] for g in gap_result["gaps"]}
1217
+
1218
+ # Compute covered vs at-risk
1219
+ covered_set = inherited_set - gap_controls
1220
+ covered_count = len(covered_set)
1221
+ at_risk_count = len(gap_controls)
1222
+ coverage_pct = round(
1223
+ (covered_count / total_in_scope * 100) if total_in_scope > 0 else 0.0, 2
1224
+ )
1225
+
1226
+ # Per-family status
1227
+ family_status = {}
1228
+ for control_id in inherited_set:
1229
+ family = _get_control_family(control_id)
1230
+ if family not in family_status:
1231
+ family_status[family] = {"total": 0, "covered": 0, "at_risk": 0}
1232
+ family_status[family]["total"] += 1
1233
+ if control_id in gap_controls:
1234
+ family_status[family]["at_risk"] += 1
1235
+ else:
1236
+ family_status[family]["covered"] += 1
1237
+
1238
+ # Migration compliance gate
1239
+ gate = "PASS" if coverage_pct >= 95.0 else "FAIL"
1240
+
1241
+ dashboard = {
1242
+ "plan_id": plan_id,
1243
+ "legacy_app_id": legacy_app_id,
1244
+ "strategy": plan.get("strategy", "N/A"),
1245
+ "target_architecture": plan.get("target_architecture", "N/A"),
1246
+ "plan_status": plan.get("status", "N/A"),
1247
+ "total_controls_in_scope": total_in_scope,
1248
+ "controls_with_coverage": covered_count,
1249
+ "controls_with_coverage_pct": coverage_pct,
1250
+ "controls_at_risk": at_risk_count,
1251
+ "controls_at_risk_list": sorted(gap_controls),
1252
+ "per_family_status": {
1253
+ fam: family_status[fam]
1254
+ for fam in sorted(family_status.keys())
1255
+ },
1256
+ "migration_compliance_gate": gate,
1257
+ "gate_threshold_pct": 95.0,
1258
+ "generated_at": datetime.now(timezone.utc).isoformat(),
1259
+ }
1260
+
1261
+ return dashboard
1262
+
1263
+
1264
+ def _format_dashboard(dashboard):
1265
+ """Format dashboard dict as human-readable console output."""
1266
+ lines = [
1267
+ "",
1268
+ "=" * 65,
1269
+ " COMPLIANCE MIGRATION DASHBOARD",
1270
+ "=" * 65,
1271
+ f" Plan: {dashboard['plan_id']}",
1272
+ f" Legacy App: {dashboard['legacy_app_id']}",
1273
+ f" Strategy: {dashboard['strategy']}",
1274
+ f" Architecture: {dashboard['target_architecture']}",
1275
+ f" Plan Status: {dashboard['plan_status']}",
1276
+ f" Generated: {dashboard['generated_at']}",
1277
+ "",
1278
+ "-" * 65,
1279
+ " CONTROL COVERAGE",
1280
+ "-" * 65,
1281
+ f" Total in scope: {dashboard['total_controls_in_scope']}",
1282
+ f" With coverage: {dashboard['controls_with_coverage']} "
1283
+ f"({dashboard['controls_with_coverage_pct']}%)",
1284
+ f" At risk: {dashboard['controls_at_risk']}",
1285
+ "",
1286
+ ]
1287
+
1288
+ if dashboard["controls_at_risk_list"]:
1289
+ lines.append(" At-risk controls:")
1290
+ for ctrl in dashboard["controls_at_risk_list"]:
1291
+ lines.append(f" - {ctrl}")
1292
+ lines.append("")
1293
+
1294
+ lines.extend([
1295
+ "-" * 65,
1296
+ " PER-FAMILY STATUS",
1297
+ "-" * 65,
1298
+ f" {'Family':<8} {'Total':>6} {'Covered':>8} {'At Risk':>8} Status",
1299
+ f" {'-'*8} {'-'*6} {'-'*8} {'-'*8} {'-'*8}",
1300
+ ])
1301
+
1302
+ for fam, info in sorted(dashboard["per_family_status"].items()):
1303
+ status = "OK" if info["at_risk"] == 0 else "AT RISK"
1304
+ lines.append(
1305
+ f" {fam:<8} {info['total']:>6} {info['covered']:>8} "
1306
+ f"{info['at_risk']:>8} {status}"
1307
+ )
1308
+
1309
+ lines.extend([
1310
+ "",
1311
+ "-" * 65,
1312
+ f" MIGRATION COMPLIANCE GATE: {dashboard['migration_compliance_gate']}",
1313
+ f" (Threshold: >= {dashboard['gate_threshold_pct']}% coverage)",
1314
+ "=" * 65,
1315
+ "",
1316
+ ])
1317
+
1318
+ return "\n".join(lines)
1319
+
1320
+
1321
+ # ---------------------------------------------------------------------------
1322
+ # CLI interface
1323
+ # ---------------------------------------------------------------------------
1324
+
1325
+ def main():
1326
+ """Command-line entry point for the ATO-aware compliance bridge."""
1327
+ parser = argparse.ArgumentParser(
1328
+ description="CUI // SP-CTI -- ATO-Aware Compliance Bridge for Migration",
1329
+ formatter_class=argparse.RawDescriptionHelpFormatter,
1330
+ epilog=textwrap.dedent("""\
1331
+ Examples:
1332
+ # Inherit controls from monolith
1333
+ python tools/modernization/compliance_bridge.py \\
1334
+ --plan-id mplan-abc123 --inherit
1335
+
1336
+ # Distribute controls with service map
1337
+ python tools/modernization/compliance_bridge.py \\
1338
+ --plan-id mplan-abc123 --distribute \\
1339
+ --service-map services.json
1340
+
1341
+ # Full ATO impact report
1342
+ python tools/modernization/compliance_bridge.py \\
1343
+ --plan-id mplan-abc123 --report \\
1344
+ --output-dir /opt/reports
1345
+
1346
+ # Validate coverage
1347
+ python tools/modernization/compliance_bridge.py \\
1348
+ --plan-id mplan-abc123 --validate --json
1349
+
1350
+ Classification: CUI // SP-CTI
1351
+ """),
1352
+ )
1353
+
1354
+ parser.add_argument(
1355
+ "--plan-id", required=True,
1356
+ help="Migration plan ID (required for all operations)",
1357
+ )
1358
+
1359
+ # Action flags
1360
+ parser.add_argument(
1361
+ "--inherit", action="store_true",
1362
+ help="Inherit NIST control mappings from legacy monolith to plan",
1363
+ )
1364
+ parser.add_argument(
1365
+ "--distribute", action="store_true",
1366
+ help="Distribute inherited controls across extracted services",
1367
+ )
1368
+ parser.add_argument(
1369
+ "--service-map",
1370
+ help="Path to JSON file mapping service names to component IDs "
1371
+ "(required with --distribute)",
1372
+ )
1373
+ parser.add_argument(
1374
+ "--gaps", action="store_true",
1375
+ help="Identify ATO coverage gaps in the migration",
1376
+ )
1377
+ parser.add_argument(
1378
+ "--report", action="store_true",
1379
+ help="Generate ATO impact analysis report",
1380
+ )
1381
+ parser.add_argument(
1382
+ "--output-dir",
1383
+ help="Output directory for report file (used with --report)",
1384
+ )
1385
+ parser.add_argument(
1386
+ "--thread", action="store_true",
1387
+ help="Create full compliance digital thread",
1388
+ )
1389
+ parser.add_argument(
1390
+ "--validate", action="store_true",
1391
+ help="Validate that ATO coverage is maintained post-migration",
1392
+ )
1393
+ parser.add_argument(
1394
+ "--dashboard", action="store_true",
1395
+ help="Show compliance migration dashboard",
1396
+ )
1397
+ parser.add_argument(
1398
+ "--json", action="store_true", dest="json_output",
1399
+ help="Output results as JSON",
1400
+ )
1401
+
1402
+ args = parser.parse_args()
1403
+
1404
+ # Validate at least one action was requested
1405
+ actions = [args.inherit, args.distribute, args.gaps, args.report,
1406
+ args.thread, args.validate, args.dashboard]
1407
+ if not any(actions):
1408
+ parser.error("At least one action flag is required: "
1409
+ "--inherit, --distribute, --gaps, --report, --thread, "
1410
+ "--validate, or --dashboard")
1411
+
1412
+ try:
1413
+ # --- Inherit ---
1414
+ if args.inherit:
1415
+ conn = _get_db()
1416
+ try:
1417
+ plan = _get_plan_info(conn, args.plan_id)
1418
+ legacy_app_id = plan["legacy_app_id"]
1419
+ finally:
1420
+ conn.close()
1421
+
1422
+ result = inherit_controls(legacy_app_id, args.plan_id)
1423
+ if args.json_output:
1424
+ print(json.dumps(result, indent=2))
1425
+
1426
+ # --- Distribute ---
1427
+ if args.distribute:
1428
+ if not args.service_map:
1429
+ parser.error("--service-map is required with --distribute")
1430
+ smap_path = Path(args.service_map)
1431
+ if not smap_path.exists():
1432
+ raise FileNotFoundError(
1433
+ f"Service map file not found: {smap_path}"
1434
+ )
1435
+ with open(str(smap_path), "r", encoding="utf-8") as f:
1436
+ service_map = json.load(f)
1437
+
1438
+ result = distribute_controls(args.plan_id, service_map)
1439
+ if args.json_output:
1440
+ print(json.dumps(result, indent=2))
1441
+
1442
+ # --- Gaps ---
1443
+ if args.gaps:
1444
+ result = identify_ato_gaps(args.plan_id)
1445
+ if args.json_output:
1446
+ print(json.dumps(result, indent=2))
1447
+
1448
+ # --- Report ---
1449
+ if args.report:
1450
+ result = generate_ato_impact_report(
1451
+ args.plan_id,
1452
+ output_dir=args.output_dir,
1453
+ )
1454
+ if args.json_output:
1455
+ if args.output_dir:
1456
+ print(json.dumps({"report_path": result}, indent=2))
1457
+ else:
1458
+ # result is the content string
1459
+ print(json.dumps({"report_content": result}, indent=2))
1460
+ elif not args.output_dir:
1461
+ # Print report to stdout
1462
+ print(result)
1463
+
1464
+ # --- Thread ---
1465
+ if args.thread:
1466
+ result = create_compliance_thread(args.plan_id)
1467
+ if args.json_output:
1468
+ print(json.dumps(result, indent=2))
1469
+
1470
+ # --- Validate ---
1471
+ if args.validate:
1472
+ result = validate_ato_coverage(args.plan_id)
1473
+ if args.json_output:
1474
+ print(json.dumps(result, indent=2))
1475
+ if not result["valid"]:
1476
+ raise SystemExit(1)
1477
+
1478
+ # --- Dashboard ---
1479
+ if args.dashboard:
1480
+ result = get_compliance_dashboard(args.plan_id)
1481
+ if args.json_output:
1482
+ print(json.dumps(result, indent=2))
1483
+ else:
1484
+ print(_format_dashboard(result))
1485
+
1486
+ except FileNotFoundError as exc:
1487
+ print(f"[ERROR] {exc}")
1488
+ raise SystemExit(1)
1489
+ except ValueError as exc:
1490
+ print(f"[ERROR] {exc}")
1491
+ raise SystemExit(1)
1492
+ except sqlite3.Error as exc:
1493
+ print(f"[ERROR] Database error: {exc}")
1494
+ raise SystemExit(1)
1495
+
1496
+
1497
+ if __name__ == "__main__":
1498
+ main()
1499
+ # [TEMPLATE: CUI // SP-CTI]