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,1172 @@
1
+ #!/usr/bin/env python3
2
+ # CUI // SP-CTI
3
+ # Controlled by: Department of Defense
4
+ # CUI Category: CTI
5
+ # Distribution: D
6
+ # POC: ICDEV System Administrator
7
+ """Universal Data Classification and Marking Manager for ICDEV.
8
+
9
+ Extends classification_manager.py to support multi-regime data categories
10
+ (CUI, PHI, PCI, CJIS, PII, FTI, ITAR, SECRET) with composable markings.
11
+ A single artifact can carry multiple category markings simultaneously
12
+ (ADR D109).
13
+
14
+ Loads configuration from args/classification_config.yaml and data type
15
+ definitions from context/compliance/data_type_registry.json.
16
+
17
+ Backward-compatible: all existing classification_manager.py functions
18
+ continue to work. This module adds multi-category support on top.
19
+
20
+ CLI:
21
+ # List all data categories
22
+ python tools/compliance/universal_classification_manager.py --list-categories
23
+
24
+ # Show marking for a single category
25
+ python tools/compliance/universal_classification_manager.py --category PHI --banner
26
+
27
+ # Composite marking for multiple categories
28
+ python tools/compliance/universal_classification_manager.py --categories CUI,PHI,PCI --banner
29
+
30
+ # Code header with composite markings
31
+ python tools/compliance/universal_classification_manager.py --categories CUI,PHI --code-header python
32
+
33
+ # Detect data categories from project metadata
34
+ python tools/compliance/universal_classification_manager.py --detect --project-id proj-123
35
+
36
+ # Validate project data markings
37
+ python tools/compliance/universal_classification_manager.py --validate --project-id proj-123
38
+
39
+ # JSON output
40
+ python tools/compliance/universal_classification_manager.py --categories CUI,PHI --banner --json
41
+ """
42
+
43
+ import argparse
44
+ import json
45
+ import sqlite3
46
+ import sys
47
+ from datetime import datetime, timezone
48
+ from pathlib import Path
49
+ from typing import Dict, List, Optional
50
+ from icdev._paths import get_project_root
51
+
52
+ # ---------------------------------------------------------------------------
53
+ # Paths
54
+ # ---------------------------------------------------------------------------
55
+
56
+ BASE_DIR = get_project_root()
57
+ DB_PATH = BASE_DIR / "data" / "icdev.db"
58
+ CONFIG_PATH = BASE_DIR / "args" / "classification_config.yaml"
59
+ REGISTRY_PATH = BASE_DIR / "context" / "compliance" / "data_type_registry.json"
60
+ FRAMEWORK_MAP_PATH = BASE_DIR / "context" / "compliance" / "data_type_framework_map.json"
61
+
62
+ # Module-level caches
63
+ _CONFIG_CACHE: Optional[Dict] = None
64
+ _REGISTRY_CACHE: Optional[Dict] = None
65
+ _FRAMEWORK_MAP_CACHE: Optional[Dict] = None
66
+
67
+ # ---------------------------------------------------------------------------
68
+ # Sensitivity ordering (highest to lowest)
69
+ # ---------------------------------------------------------------------------
70
+
71
+ SENSITIVITY_ORDER = [
72
+ "TOP_SECRET", "SECRET", "CUI", "ITAR", "FTI",
73
+ "CJIS", "PHI", "PCI", "PII", "PUBLIC",
74
+ ]
75
+
76
+ # Backward-compatible aliases
77
+ _CATEGORY_ALIASES = {
78
+ "TOP SECRET": "TOP_SECRET",
79
+ "TOP SECRET//SCI": "TOP_SECRET",
80
+ "TS": "TOP_SECRET",
81
+ "S": "SECRET",
82
+ "HIPAA": "PHI",
83
+ "PCI DSS": "PCI",
84
+ "PCI-DSS": "PCI",
85
+ "FBI CJIS": "CJIS",
86
+ "IRS 1075": "FTI",
87
+ "NIST 800-122": "PII",
88
+ }
89
+
90
+ # Comment style mapping
91
+ _COMMENT_STYLES = {
92
+ "python": "hash", "ruby": "hash", "yaml": "hash",
93
+ "terraform": "hash", "dockerfile": "hash",
94
+ "java": "c_style", "go": "c_style", "rust": "c_style",
95
+ "csharp": "c_style", "c#": "c_style",
96
+ "typescript": "c_style", "javascript": "c_style",
97
+ "xml": "xml_style", "html": "xml_style",
98
+ "sql": "sql_style",
99
+ }
100
+
101
+
102
+ # ---------------------------------------------------------------------------
103
+ # Config / registry loaders
104
+ # ---------------------------------------------------------------------------
105
+
106
+ def _load_yaml(path: Path) -> Dict:
107
+ """Load YAML file with fallback to simple parsing if PyYAML unavailable."""
108
+ if not path.exists():
109
+ return {}
110
+ try:
111
+ import yaml
112
+ with open(path, "r", encoding="utf-8") as f:
113
+ return yaml.safe_load(f) or {}
114
+ except ImportError:
115
+ return {}
116
+
117
+
118
+ def load_config() -> Dict:
119
+ """Load and cache classification configuration from YAML."""
120
+ global _CONFIG_CACHE
121
+ if _CONFIG_CACHE is not None:
122
+ return _CONFIG_CACHE
123
+ _CONFIG_CACHE = _load_yaml(CONFIG_PATH)
124
+ return _CONFIG_CACHE
125
+
126
+
127
+ def load_registry() -> List[Dict]:
128
+ """Load and cache data type registry from JSON."""
129
+ global _REGISTRY_CACHE
130
+ if _REGISTRY_CACHE is not None:
131
+ return _REGISTRY_CACHE
132
+ if not REGISTRY_PATH.exists():
133
+ _REGISTRY_CACHE = []
134
+ return _REGISTRY_CACHE
135
+ with open(REGISTRY_PATH, "r", encoding="utf-8") as f:
136
+ data = json.load(f)
137
+ _REGISTRY_CACHE = data.get("data_types", [])
138
+ return _REGISTRY_CACHE
139
+
140
+
141
+ def load_framework_map() -> Dict:
142
+ """Load and cache data-type-to-framework mapping from JSON."""
143
+ global _FRAMEWORK_MAP_CACHE
144
+ if _FRAMEWORK_MAP_CACHE is not None:
145
+ return _FRAMEWORK_MAP_CACHE
146
+ if not FRAMEWORK_MAP_PATH.exists():
147
+ _FRAMEWORK_MAP_CACHE = {}
148
+ return _FRAMEWORK_MAP_CACHE
149
+ with open(FRAMEWORK_MAP_PATH, "r", encoding="utf-8") as f:
150
+ _FRAMEWORK_MAP_CACHE = json.load(f)
151
+ return _FRAMEWORK_MAP_CACHE
152
+
153
+
154
+ def _normalize_category(category: str) -> str:
155
+ """Normalize a category string to its canonical form."""
156
+ upper = category.upper().strip()
157
+ return _CATEGORY_ALIASES.get(upper, upper)
158
+
159
+
160
+ def get_category_config(category: str) -> Dict:
161
+ """Return the configuration dict for a single data category.
162
+
163
+ Args:
164
+ category: Data category identifier (e.g., CUI, PHI, PCI, CJIS).
165
+
166
+ Returns:
167
+ Dict with full_name, governing_framework, marking_prefix,
168
+ banner_template, portion_marking, distribution, controlled_by,
169
+ handling_requirements, etc.
170
+ """
171
+ norm = _normalize_category(category)
172
+ config = load_config()
173
+ categories = config.get("data_categories", {})
174
+ cat_config = categories.get(norm)
175
+ if cat_config is None:
176
+ return {
177
+ "full_name": norm,
178
+ "governing_framework": "Unknown",
179
+ "marking_prefix": norm,
180
+ "banner_template": f"{norm} // Custom",
181
+ "portion_marking": f"({norm})",
182
+ "distribution": "Restricted",
183
+ "controlled_by": "Data Owner",
184
+ "handling_requirements": [],
185
+ }
186
+ return cat_config
187
+
188
+
189
+ def list_categories() -> List[Dict]:
190
+ """Return a list of all supported data categories with summary info."""
191
+ config = load_config()
192
+ categories = config.get("data_categories", {})
193
+ result = []
194
+ for cat_id, cat_config in categories.items():
195
+ result.append({
196
+ "id": cat_id,
197
+ "full_name": cat_config.get("full_name", cat_id),
198
+ "governing_framework": cat_config.get("governing_framework", ""),
199
+ "marking_prefix": cat_config.get("marking_prefix", cat_id),
200
+ "portion_marking": cat_config.get("portion_marking", ""),
201
+ "sensitivity_rank": SENSITIVITY_ORDER.index(cat_id)
202
+ if cat_id in SENSITIVITY_ORDER else 99,
203
+ })
204
+ result.sort(key=lambda x: x["sensitivity_rank"])
205
+ return result
206
+
207
+
208
+ # ---------------------------------------------------------------------------
209
+ # Composite marking functions (ADR D109)
210
+ # ---------------------------------------------------------------------------
211
+
212
+ def get_composite_banner(
213
+ categories: List[str],
214
+ subcategories: Optional[Dict[str, str]] = None,
215
+ ) -> str:
216
+ """Generate a composite document banner for multiple data categories.
217
+
218
+ Args:
219
+ categories: List of data category IDs (e.g., ["CUI", "PHI", "PCI"]).
220
+ subcategories: Optional dict mapping category to subcategory
221
+ (e.g., {"CUI": "CTI"}).
222
+
223
+ Returns:
224
+ Multi-line banner string with all applicable markings.
225
+ """
226
+ if not categories:
227
+ return ""
228
+
229
+ subcategories = subcategories or {}
230
+ normalized = [_normalize_category(c) for c in categories]
231
+
232
+ # Sort by sensitivity (highest first)
233
+ normalized.sort(
234
+ key=lambda c: SENSITIVITY_ORDER.index(c)
235
+ if c in SENSITIVITY_ORDER else 99
236
+ )
237
+
238
+ # Build banner lines for each category
239
+ banner_parts = []
240
+ distributions = []
241
+ controllers = []
242
+
243
+ for cat in normalized:
244
+ cat_config = get_category_config(cat)
245
+ template = cat_config.get("banner_template", f"{cat} // Custom")
246
+
247
+ # Substitute subcategory/dissemination if present
248
+ subcat = subcategories.get(cat, "")
249
+ banner_line = template.format(
250
+ subcategory=subcat or cat_config.get("marking_prefix", cat),
251
+ dissemination=subcat or "NOFORN",
252
+ )
253
+ banner_parts.append(banner_line)
254
+
255
+ dist = cat_config.get("distribution", "")
256
+ if dist and dist not in distributions:
257
+ distributions.append(dist)
258
+
259
+ ctrl = cat_config.get("controlled_by", "")
260
+ if ctrl and ctrl not in controllers:
261
+ controllers.append(ctrl)
262
+
263
+ # Compose the banner
264
+ separator = " | "
265
+ combined_marking = separator.join(banner_parts)
266
+ combined_dist = "; ".join(distributions) if distributions else "Restricted"
267
+ combined_ctrl = "; ".join(controllers) if controllers else "Data Owner"
268
+
269
+ return (
270
+ f"////////////////////////////////////////////////////////////////////\n"
271
+ f"{combined_marking}\n"
272
+ f"Distribution: {combined_dist}\n"
273
+ f"Controlled by: {combined_ctrl}\n"
274
+ f"////////////////////////////////////////////////////////////////////"
275
+ )
276
+
277
+
278
+ def get_composite_footer(categories: List[str]) -> str:
279
+ """Generate a composite document footer for multiple data categories."""
280
+ if not categories:
281
+ return ""
282
+
283
+ normalized = [_normalize_category(c) for c in categories]
284
+ normalized.sort(
285
+ key=lambda c: SENSITIVITY_ORDER.index(c)
286
+ if c in SENSITIVITY_ORDER else 99
287
+ )
288
+
289
+ parts = []
290
+ controllers = []
291
+ for cat in normalized:
292
+ cat_config = get_category_config(cat)
293
+ parts.append(cat_config.get("marking_prefix", cat))
294
+ ctrl = cat_config.get("controlled_by", "")
295
+ if ctrl and ctrl not in controllers:
296
+ controllers.append(ctrl)
297
+
298
+ marking_line = " | ".join(parts)
299
+ ctrl_line = "; ".join(controllers) if controllers else "Data Owner"
300
+
301
+ return (
302
+ f"////////////////////////////////////////////////////////////////////\n"
303
+ f"{marking_line} | {ctrl_line}\n"
304
+ f"////////////////////////////////////////////////////////////////////"
305
+ )
306
+
307
+
308
+ def get_composite_portion_marking(categories: List[str]) -> str:
309
+ """Generate an inline composite portion marking.
310
+
311
+ Returns something like "(CUI/PHI/PCI)".
312
+ """
313
+ if not categories:
314
+ return ""
315
+
316
+ normalized = [_normalize_category(c) for c in categories]
317
+ normalized.sort(
318
+ key=lambda c: SENSITIVITY_ORDER.index(c)
319
+ if c in SENSITIVITY_ORDER else 99
320
+ )
321
+
322
+ short_marks = []
323
+ for cat in normalized:
324
+ cat_config = get_category_config(cat)
325
+ portion = cat_config.get("portion_marking", f"({cat})")
326
+ # Strip parens for composition
327
+ inner = portion.strip("()")
328
+ if inner:
329
+ short_marks.append(inner)
330
+
331
+ return f"({'|'.join(short_marks)})" if short_marks else ""
332
+
333
+
334
+ def get_composite_code_header(
335
+ categories: List[str],
336
+ language: str = "python",
337
+ subcategories: Optional[Dict[str, str]] = None,
338
+ ) -> str:
339
+ """Generate a code file header with composite markings.
340
+
341
+ Args:
342
+ categories: Data category list.
343
+ language: Programming language key.
344
+ subcategories: Optional subcategory overrides.
345
+
346
+ Returns:
347
+ Multi-line comment block for the top of a source file.
348
+ """
349
+ subcategories = subcategories or {}
350
+ normalized = [_normalize_category(c) for c in categories]
351
+ normalized.sort(
352
+ key=lambda c: SENSITIVITY_ORDER.index(c)
353
+ if c in SENSITIVITY_ORDER else 99
354
+ )
355
+
356
+ # Build header lines
357
+ header_lines = []
358
+
359
+ # First line: combined marking
360
+ parts = []
361
+ for cat in normalized:
362
+ cat_config = get_category_config(cat)
363
+ template = cat_config.get("banner_template", f"{cat} // Custom")
364
+ subcat = subcategories.get(cat, "")
365
+ line = template.format(
366
+ subcategory=subcat or cat_config.get("marking_prefix", cat),
367
+ dissemination=subcat or "NOFORN",
368
+ )
369
+ parts.append(line)
370
+ header_lines.append(" | ".join(parts))
371
+
372
+ # Controller lines
373
+ controllers = []
374
+ for cat in normalized:
375
+ cat_config = get_category_config(cat)
376
+ ctrl = cat_config.get("controlled_by", "")
377
+ if ctrl and ctrl not in controllers:
378
+ controllers.append(ctrl)
379
+ if controllers:
380
+ header_lines.append(f"Controlled by: {'; '.join(controllers)}")
381
+
382
+ # Category-specific lines
383
+ for cat in normalized:
384
+ cat_config = get_category_config(cat)
385
+ fw = cat_config.get("governing_framework", "")
386
+ if fw:
387
+ header_lines.append(f"{cat} Framework: {fw}")
388
+
389
+ header_lines.append("Distribution: Restricted -- See applicable framework policies")
390
+ header_lines.append("POC: ICDEV System Administrator")
391
+
392
+ # Apply comment style
393
+ lang_lower = language.lower()
394
+ style = _COMMENT_STYLES.get(lang_lower, "hash")
395
+
396
+ result_lines: List[str] = []
397
+ if style == "hash":
398
+ for line in header_lines:
399
+ result_lines.append(f"# {line}")
400
+ elif style == "c_style":
401
+ for line in header_lines:
402
+ result_lines.append(f"// {line}")
403
+ elif style == "xml_style":
404
+ result_lines.append("<!--")
405
+ for line in header_lines:
406
+ result_lines.append(f" {line}")
407
+ result_lines.append("-->")
408
+ elif style == "sql_style":
409
+ for line in header_lines:
410
+ result_lines.append(f"-- {line}")
411
+ else:
412
+ for line in header_lines:
413
+ result_lines.append(f"# {line}")
414
+
415
+ return "\n".join(result_lines) + "\n"
416
+
417
+
418
+ def get_composite_handling_requirements(categories: List[str]) -> List[str]:
419
+ """Return the union of all handling requirements for the given categories.
420
+
421
+ This is the set of ALL requirements from ALL categories -- the artifact
422
+ must satisfy every one.
423
+ """
424
+ requirements = []
425
+ seen = set()
426
+ for cat in categories:
427
+ cat_config = get_category_config(_normalize_category(cat))
428
+ for req in cat_config.get("handling_requirements", []):
429
+ if req not in seen:
430
+ requirements.append(req)
431
+ seen.add(req)
432
+ return requirements
433
+
434
+
435
+ def get_highest_sensitivity(categories: List[str]) -> str:
436
+ """Return the highest-sensitivity category from the list."""
437
+ if not categories:
438
+ return "PUBLIC"
439
+ normalized = [_normalize_category(c) for c in categories]
440
+ best = "PUBLIC"
441
+ best_rank = len(SENSITIVITY_ORDER)
442
+ for cat in normalized:
443
+ rank = SENSITIVITY_ORDER.index(cat) if cat in SENSITIVITY_ORDER else 99
444
+ if rank < best_rank:
445
+ best = cat
446
+ best_rank = rank
447
+ return best
448
+
449
+
450
+ # ---------------------------------------------------------------------------
451
+ # Upgrade markings across categories
452
+ # ---------------------------------------------------------------------------
453
+
454
+ def upgrade_composite_markings(
455
+ content: str,
456
+ old_categories: List[str],
457
+ new_categories: List[str],
458
+ ) -> str:
459
+ """Replace composite markings in content when categories change.
460
+
461
+ Generates old and new banners/footers/portion markings and replaces
462
+ them in the content string.
463
+
464
+ Args:
465
+ content: Document or code content.
466
+ old_categories: Previous set of categories.
467
+ new_categories: New set of categories.
468
+
469
+ Returns:
470
+ Updated content with new markings.
471
+ """
472
+ if set(old_categories) == set(new_categories):
473
+ return content
474
+
475
+ result = content
476
+
477
+ # Replace banner
478
+ old_banner = get_composite_banner(old_categories)
479
+ new_banner = get_composite_banner(new_categories)
480
+ if old_banner:
481
+ result = result.replace(old_banner, new_banner)
482
+
483
+ # Replace footer
484
+ old_footer = get_composite_footer(old_categories)
485
+ new_footer = get_composite_footer(new_categories)
486
+ if old_footer:
487
+ result = result.replace(old_footer, new_footer)
488
+
489
+ # Replace portion markings
490
+ old_portion = get_composite_portion_marking(old_categories)
491
+ new_portion = get_composite_portion_marking(new_categories)
492
+ if old_portion and new_portion:
493
+ result = result.replace(old_portion, new_portion)
494
+
495
+ return result
496
+
497
+
498
+ # ---------------------------------------------------------------------------
499
+ # Database helpers
500
+ # ---------------------------------------------------------------------------
501
+
502
+ def _get_connection(db_path: Optional[Path] = None) -> sqlite3.Connection:
503
+ """Return a database connection with Row factory."""
504
+ path = db_path or DB_PATH
505
+ if not path.exists():
506
+ raise FileNotFoundError(
507
+ f"Database not found: {path}\n"
508
+ "Run: python tools/db/init_icdev_db.py"
509
+ )
510
+ conn = sqlite3.connect(str(path))
511
+ conn.row_factory = sqlite3.Row
512
+ return conn
513
+
514
+
515
+ def _ensure_tables(conn: sqlite3.Connection) -> None:
516
+ """Ensure data_classifications table exists."""
517
+ conn.executescript("""
518
+ CREATE TABLE IF NOT EXISTS data_classifications (
519
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
520
+ project_id TEXT NOT NULL,
521
+ data_category TEXT NOT NULL,
522
+ subcategory TEXT,
523
+ source TEXT DEFAULT 'manual',
524
+ confidence REAL DEFAULT 1.0,
525
+ added_by TEXT DEFAULT 'icdev-compliance-engine',
526
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
527
+ UNIQUE(project_id, data_category)
528
+ );
529
+
530
+ CREATE TABLE IF NOT EXISTS framework_applicability (
531
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
532
+ project_id TEXT NOT NULL,
533
+ framework_id TEXT NOT NULL,
534
+ source TEXT DEFAULT 'auto_detected'
535
+ CHECK(source IN ('auto_detected', 'manual', 'inherited')),
536
+ confirmed INTEGER DEFAULT 0,
537
+ confirmed_by TEXT,
538
+ confirmed_at TIMESTAMP,
539
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
540
+ UNIQUE(project_id, framework_id)
541
+ );
542
+
543
+ CREATE INDEX IF NOT EXISTS idx_dc_project
544
+ ON data_classifications(project_id);
545
+ CREATE INDEX IF NOT EXISTS idx_fa_project
546
+ ON framework_applicability(project_id);
547
+ """)
548
+ conn.commit()
549
+
550
+
551
+ def _log_audit_event(
552
+ conn: sqlite3.Connection,
553
+ project_id: str,
554
+ action: str,
555
+ details: Dict,
556
+ ) -> None:
557
+ """Log an append-only audit event."""
558
+ try:
559
+ conn.execute(
560
+ """INSERT INTO audit_trail
561
+ (project_id, event_type, actor, action, details,
562
+ affected_files, classification)
563
+ VALUES (?, ?, ?, ?, ?, ?, ?)""",
564
+ (
565
+ project_id,
566
+ "classification.validation",
567
+ "icdev-compliance-engine",
568
+ action,
569
+ json.dumps(details),
570
+ json.dumps([]),
571
+ "CUI",
572
+ ),
573
+ )
574
+ conn.commit()
575
+ except Exception as exc:
576
+ print(f"Warning: Could not log audit event: {exc}", file=sys.stderr)
577
+
578
+
579
+ # ---------------------------------------------------------------------------
580
+ # Project data category management
581
+ # ---------------------------------------------------------------------------
582
+
583
+ def add_project_data_category(
584
+ project_id: str,
585
+ data_category: str,
586
+ subcategory: Optional[str] = None,
587
+ source: str = "manual",
588
+ confidence: float = 1.0,
589
+ db_path: Optional[Path] = None,
590
+ ) -> Dict:
591
+ """Add a data category to a project.
592
+
593
+ Args:
594
+ project_id: Project identifier.
595
+ data_category: Category ID (CUI, PHI, PCI, CJIS, etc.).
596
+ subcategory: Optional subcategory (e.g., CTI for CUI).
597
+ source: How this was determined (manual, auto_detected).
598
+ confidence: Confidence score for auto-detected categories.
599
+ db_path: Optional database path override.
600
+
601
+ Returns:
602
+ Dict with status and the category record.
603
+ """
604
+ norm = _normalize_category(data_category)
605
+ conn = _get_connection(db_path)
606
+ try:
607
+ _ensure_tables(conn)
608
+ conn.execute(
609
+ """INSERT OR REPLACE INTO data_classifications
610
+ (project_id, data_category, subcategory, source, confidence)
611
+ VALUES (?, ?, ?, ?, ?)""",
612
+ (project_id, norm, subcategory, source, confidence),
613
+ )
614
+ conn.commit()
615
+
616
+ _log_audit_event(conn, project_id, "Data category added", {
617
+ "data_category": norm,
618
+ "subcategory": subcategory,
619
+ "source": source,
620
+ "confidence": confidence,
621
+ "timestamp": datetime.now(timezone.utc).isoformat(),
622
+ })
623
+
624
+ return {
625
+ "status": "added",
626
+ "project_id": project_id,
627
+ "data_category": norm,
628
+ "subcategory": subcategory,
629
+ "source": source,
630
+ }
631
+ finally:
632
+ conn.close()
633
+
634
+
635
+ def get_project_data_categories(
636
+ project_id: str,
637
+ db_path: Optional[Path] = None,
638
+ ) -> List[Dict]:
639
+ """Return all data categories assigned to a project."""
640
+ conn = _get_connection(db_path)
641
+ try:
642
+ _ensure_tables(conn)
643
+ rows = conn.execute(
644
+ """SELECT data_category, subcategory, source, confidence, created_at
645
+ FROM data_classifications
646
+ WHERE project_id = ?
647
+ ORDER BY created_at""",
648
+ (project_id,),
649
+ ).fetchall()
650
+ return [dict(row) for row in rows]
651
+ finally:
652
+ conn.close()
653
+
654
+
655
+ def _resolve_default_categories(
656
+ project_id: str,
657
+ db_path: Optional[Path] = None,
658
+ ) -> list:
659
+ """Resolve default data categories from project metadata (ADR D132).
660
+
661
+ Called when no explicit data_classifications exist for a project.
662
+ Resolution:
663
+ - Public / IL2 -> empty (no marking required)
664
+ - SECRET / IL6 -> SECRET
665
+ - IL4/IL5 or CUI -> CUI (backward compat per ADR D54)
666
+ - Unknown -> CUI (conservative default)
667
+ """
668
+ try:
669
+ conn = _get_connection(db_path)
670
+ row = conn.execute(
671
+ "SELECT classification, impact_level FROM projects WHERE id = ?",
672
+ (project_id,),
673
+ ).fetchone()
674
+ conn.close()
675
+ if row:
676
+ proj = dict(row)
677
+ cls = (proj.get("classification") or "").upper()
678
+ il = (proj.get("impact_level") or "").upper()
679
+ if cls == "PUBLIC" or il == "IL2":
680
+ return [] # No marking required
681
+ if cls in ("SECRET", "TOP SECRET", "TOP_SECRET") or il == "IL6":
682
+ return [{"data_category": "SECRET", "subcategory": "NSI"}]
683
+ # IL4/IL5 or CUI/FOUO -> CUI
684
+ return [{"data_category": "CUI", "subcategory": "CTI"}]
685
+ except Exception:
686
+ pass
687
+ # Ultimate fallback: CUI (backward compat)
688
+ return [{"data_category": "CUI", "subcategory": "CTI"}]
689
+
690
+
691
+ def get_project_marking(
692
+ project_id: str,
693
+ db_path: Optional[Path] = None,
694
+ ) -> Dict:
695
+ """Generate the full composite marking for a project.
696
+
697
+ Reads all data categories from the database and generates
698
+ banner, footer, portion marking, and handling requirements.
699
+
700
+ Returns:
701
+ Dict with banner, footer, portion_marking, categories,
702
+ highest_sensitivity, and handling_requirements.
703
+ """
704
+ categories_data = get_project_data_categories(project_id, db_path)
705
+ if not categories_data:
706
+ # Resolve default from project metadata (ADR D132)
707
+ categories_data = _resolve_default_categories(project_id, db_path)
708
+
709
+ categories = [c["data_category"] for c in categories_data]
710
+ subcats = {
711
+ c["data_category"]: c.get("subcategory", "")
712
+ for c in categories_data
713
+ if c.get("subcategory")
714
+ }
715
+
716
+ marking_required = bool(categories) and categories != ["PUBLIC"]
717
+ return {
718
+ "marking_required": marking_required,
719
+ "categories": categories,
720
+ "highest_sensitivity": get_highest_sensitivity(categories) if categories else "PUBLIC",
721
+ "banner": get_composite_banner(categories, subcats),
722
+ "footer": get_composite_footer(categories),
723
+ "portion_marking": get_composite_portion_marking(categories),
724
+ "handling_requirements": get_composite_handling_requirements(categories),
725
+ }
726
+
727
+
728
+ # ---------------------------------------------------------------------------
729
+ # Auto-detection (ADR D110 -- advisory, not enforced)
730
+ # ---------------------------------------------------------------------------
731
+
732
+ def detect_data_categories(
733
+ project_id: str,
734
+ db_path: Optional[Path] = None,
735
+ ) -> Dict:
736
+ """Analyze project metadata and recommend applicable data categories.
737
+
738
+ Reads the project's description, type, impact_level, classification,
739
+ and target_frameworks to infer which data categories likely apply.
740
+
741
+ ADR D110: Results are advisory only -- the customer makes the final
742
+ selection.
743
+
744
+ Returns:
745
+ Dict with detected categories, confidence scores, and reasoning.
746
+ """
747
+ conn = _get_connection(db_path)
748
+ try:
749
+ _ensure_tables(conn)
750
+ row = conn.execute(
751
+ """SELECT id, name, description, type, classification,
752
+ impact_level, target_frameworks
753
+ FROM projects WHERE id = ?""",
754
+ (project_id,),
755
+ ).fetchone()
756
+
757
+ if not row:
758
+ raise ValueError(f"Project '{project_id}' not found.")
759
+
760
+ project = dict(row)
761
+ desc = (project.get("description") or "").lower()
762
+ name = (project.get("name") or "").lower()
763
+ cls = (project.get("classification") or "").upper()
764
+ il = (project.get("impact_level") or "").upper()
765
+ frameworks = (project.get("target_frameworks") or "").lower()
766
+ combined_text = f"{name} {desc} {frameworks}"
767
+
768
+ detected = []
769
+ registry = load_registry()
770
+
771
+ for data_type in registry:
772
+ indicators = data_type.get("indicators", [])
773
+ matches = [ind for ind in indicators if ind.lower() in combined_text]
774
+
775
+ if matches:
776
+ confidence = min(0.5 + (len(matches) * 0.15), 0.95)
777
+ detected.append({
778
+ "data_type_id": data_type["id"],
779
+ "category": data_type["category"],
780
+ "subcategory": data_type.get("subcategory", ""),
781
+ "name": data_type["name"],
782
+ "confidence": round(confidence, 2),
783
+ "matched_indicators": matches,
784
+ "required_frameworks": data_type.get("required_frameworks", []),
785
+ "recommended_frameworks": data_type.get("recommended_frameworks", []),
786
+ })
787
+
788
+ # Always detect classification-based categories
789
+ if cls in ("CUI",) and not any(d["category"] == "CUI" for d in detected):
790
+ detected.append({
791
+ "data_type_id": "CUI_CTI",
792
+ "category": "CUI",
793
+ "subcategory": "CTI",
794
+ "name": "Controlled Technical Information",
795
+ "confidence": 0.9,
796
+ "matched_indicators": [f"classification={cls}"],
797
+ "required_frameworks": ["nist_800_171", "cmmc_level_2"],
798
+ "recommended_frameworks": ["fedramp_moderate"],
799
+ })
800
+
801
+ if cls == "SECRET" and not any(d["category"] == "SECRET" for d in detected):
802
+ detected.append({
803
+ "data_type_id": "SECRET_NSI",
804
+ "category": "SECRET",
805
+ "subcategory": "NSI",
806
+ "name": "Classified National Security Information",
807
+ "confidence": 0.95,
808
+ "matched_indicators": [f"classification={cls}"],
809
+ "required_frameworks": ["cnssi_1253"],
810
+ "recommended_frameworks": [],
811
+ })
812
+
813
+ # Impact level implications
814
+ if il in ("IL4", "IL5") and not any(d["category"] == "CUI" for d in detected):
815
+ detected.append({
816
+ "data_type_id": "CUI_CTI",
817
+ "category": "CUI",
818
+ "subcategory": "CTI",
819
+ "name": "Controlled Technical Information",
820
+ "confidence": 0.8,
821
+ "matched_indicators": [f"impact_level={il}"],
822
+ "required_frameworks": ["nist_800_171", "cmmc_level_2"],
823
+ "recommended_frameworks": ["fedramp_moderate"],
824
+ })
825
+
826
+ # Sort by confidence descending
827
+ detected.sort(key=lambda x: x["confidence"], reverse=True)
828
+
829
+ # Collect all required and recommended frameworks
830
+ all_required = set()
831
+ all_recommended = set()
832
+ for d in detected:
833
+ all_required.update(d.get("required_frameworks", []))
834
+ all_recommended.update(d.get("recommended_frameworks", []))
835
+
836
+ result = {
837
+ "project_id": project_id,
838
+ "detected_categories": detected,
839
+ "all_required_frameworks": sorted(all_required),
840
+ "all_recommended_frameworks": sorted(all_recommended - all_required),
841
+ "advisory_note": "Detection is advisory (ADR D110). "
842
+ "Confirm categories before applying markings.",
843
+ "timestamp": datetime.now(timezone.utc).isoformat(),
844
+ }
845
+
846
+ _log_audit_event(conn, project_id, "Data category auto-detection", {
847
+ "detected_count": len(detected),
848
+ "categories": [d["category"] for d in detected],
849
+ "required_frameworks": sorted(all_required),
850
+ })
851
+
852
+ return result
853
+ finally:
854
+ conn.close()
855
+
856
+
857
+ # ---------------------------------------------------------------------------
858
+ # Validation
859
+ # ---------------------------------------------------------------------------
860
+
861
+ def validate_project_markings(
862
+ project_id: str,
863
+ db_path: Optional[Path] = None,
864
+ ) -> Dict:
865
+ """Validate that project markings are consistent with data categories.
866
+
867
+ Checks:
868
+ 1. At least one data category is assigned.
869
+ 2. All required frameworks for each category are tracked.
870
+ 3. Marking banner matches assigned categories.
871
+ 4. Handling requirements are documented.
872
+
873
+ Returns:
874
+ Dict with valid (bool), issues list, and recommendations.
875
+ """
876
+ conn = _get_connection(db_path)
877
+ try:
878
+ _ensure_tables(conn)
879
+ issues: List[str] = []
880
+ recommendations: List[str] = []
881
+
882
+ # Get project info
883
+ row = conn.execute(
884
+ "SELECT * FROM projects WHERE id = ?", (project_id,)
885
+ ).fetchone()
886
+ if not row:
887
+ raise ValueError(f"Project '{project_id}' not found.")
888
+ project = dict(row)
889
+
890
+ # Get assigned categories
891
+ cat_rows = conn.execute(
892
+ """SELECT data_category, subcategory, source, confidence
893
+ FROM data_classifications WHERE project_id = ?""",
894
+ (project_id,),
895
+ ).fetchall()
896
+
897
+ categories = [dict(r) for r in cat_rows]
898
+
899
+ if not categories:
900
+ issues.append(
901
+ "No data categories assigned. Run --detect to identify "
902
+ "applicable categories."
903
+ )
904
+ recommendations.append(
905
+ "Add at least one data category with --add-category."
906
+ )
907
+
908
+ # Check each category's required frameworks
909
+ for cat in categories:
910
+ registry = load_registry()
911
+ for dt in registry:
912
+ if dt["category"] == cat["data_category"]:
913
+ required_fws = dt.get("required_frameworks", [])
914
+ for fw in required_fws:
915
+ # Check if framework is tracked in project_framework_status
916
+ try:
917
+ fw_row = conn.execute(
918
+ """SELECT framework_id FROM project_framework_status
919
+ WHERE project_id = ? AND framework_id = ?""",
920
+ (project_id, fw),
921
+ ).fetchone()
922
+ if not fw_row:
923
+ issues.append(
924
+ f"Data category {cat['data_category']} requires "
925
+ f"framework '{fw}' but it is not tracked."
926
+ )
927
+ except Exception:
928
+ pass # Table may not exist
929
+
930
+ # Validate classification consistency
931
+ proj_cls = (project.get("classification") or "").upper()
932
+ cat_names = [c["data_category"] for c in categories]
933
+ highest = get_highest_sensitivity(cat_names) if cat_names else "PUBLIC"
934
+
935
+ if highest in ("SECRET", "TOP_SECRET") and proj_cls not in ("SECRET", "TOP SECRET", "TOP SECRET//SCI"):
936
+ issues.append(
937
+ f"Data categories include {highest} but project classification "
938
+ f"is '{proj_cls}'. Classification must be upgraded."
939
+ )
940
+
941
+ result = {
942
+ "valid": len(issues) == 0,
943
+ "project_id": project_id,
944
+ "assigned_categories": [c["data_category"] for c in categories],
945
+ "highest_sensitivity": highest,
946
+ "issues": issues,
947
+ "recommendations": recommendations,
948
+ "timestamp": datetime.now(timezone.utc).isoformat(),
949
+ }
950
+
951
+ _log_audit_event(conn, project_id, "Marking validation", {
952
+ "valid": result["valid"],
953
+ "issues_count": len(issues),
954
+ "categories": result["assigned_categories"],
955
+ })
956
+
957
+ return result
958
+ finally:
959
+ conn.close()
960
+
961
+
962
+ # ---------------------------------------------------------------------------
963
+ # CLI
964
+ # ---------------------------------------------------------------------------
965
+
966
+ def main() -> None:
967
+ parser = argparse.ArgumentParser(
968
+ description="Universal Data Classification & Marking Manager"
969
+ )
970
+ parser.add_argument(
971
+ "--list-categories", action="store_true",
972
+ help="List all supported data categories",
973
+ )
974
+ parser.add_argument(
975
+ "--category",
976
+ help="Single data category to display (e.g., PHI, PCI, CJIS)",
977
+ )
978
+ parser.add_argument(
979
+ "--categories",
980
+ help="Comma-separated data categories for composite marking (e.g., CUI,PHI,PCI)",
981
+ )
982
+ parser.add_argument(
983
+ "--banner", action="store_true",
984
+ help="Show document banner for the specified categories",
985
+ )
986
+ parser.add_argument(
987
+ "--code-header", metavar="LANGUAGE",
988
+ help="Show code header for a language (python, java, go, etc.)",
989
+ )
990
+ parser.add_argument(
991
+ "--handling", action="store_true",
992
+ help="Show handling requirements for the specified categories",
993
+ )
994
+ parser.add_argument(
995
+ "--detect", action="store_true",
996
+ help="Auto-detect data categories for a project (requires --project-id)",
997
+ )
998
+ parser.add_argument(
999
+ "--validate", action="store_true",
1000
+ help="Validate project data markings (requires --project-id)",
1001
+ )
1002
+ parser.add_argument(
1003
+ "--add-category",
1004
+ help="Add a data category to a project (requires --project-id)",
1005
+ )
1006
+ parser.add_argument(
1007
+ "--project-id",
1008
+ help="Project ID for detection/validation/add operations",
1009
+ )
1010
+ parser.add_argument("--json", action="store_true", help="JSON output")
1011
+ parser.add_argument(
1012
+ "--db-path", type=Path, default=None,
1013
+ help="Database path override",
1014
+ )
1015
+
1016
+ args = parser.parse_args()
1017
+
1018
+ try:
1019
+ # Parse categories
1020
+ cats = []
1021
+ if args.category:
1022
+ cats = [args.category]
1023
+ elif args.categories:
1024
+ cats = [c.strip() for c in args.categories.split(",")]
1025
+
1026
+ # --list-categories
1027
+ if args.list_categories:
1028
+ result = list_categories()
1029
+ if args.json:
1030
+ print(json.dumps(result, indent=2))
1031
+ else:
1032
+ print(f"{'ID':<15} {'Name':<40} {'Framework':<20} {'Marking'}")
1033
+ print("-" * 90)
1034
+ for cat in result:
1035
+ print(
1036
+ f"{cat['id']:<15} {cat['full_name']:<40} "
1037
+ f"{cat['governing_framework']:<20} {cat['portion_marking']}"
1038
+ )
1039
+ return
1040
+
1041
+ # --banner
1042
+ if args.banner and cats:
1043
+ banner = get_composite_banner(cats)
1044
+ footer = get_composite_footer(cats)
1045
+ portion = get_composite_portion_marking(cats)
1046
+ if args.json:
1047
+ print(json.dumps({
1048
+ "categories": cats,
1049
+ "banner": banner,
1050
+ "footer": footer,
1051
+ "portion_marking": portion,
1052
+ "highest_sensitivity": get_highest_sensitivity(cats),
1053
+ }, indent=2))
1054
+ else:
1055
+ print(f"Banner for {', '.join(cats)}:\n")
1056
+ print(banner)
1057
+ print(f"\nFooter:\n{footer}")
1058
+ print(f"\nPortion marking: {portion}")
1059
+ return
1060
+
1061
+ # --code-header
1062
+ if args.code_header and cats:
1063
+ header = get_composite_code_header(cats, args.code_header)
1064
+ if args.json:
1065
+ print(json.dumps({
1066
+ "categories": cats,
1067
+ "language": args.code_header,
1068
+ "code_header": header,
1069
+ }, indent=2))
1070
+ else:
1071
+ print(f"Code header for {', '.join(cats)} ({args.code_header}):\n")
1072
+ print(header)
1073
+ return
1074
+
1075
+ # --handling
1076
+ if args.handling and cats:
1077
+ reqs = get_composite_handling_requirements(cats)
1078
+ if args.json:
1079
+ print(json.dumps({
1080
+ "categories": cats,
1081
+ "handling_requirements": reqs,
1082
+ }, indent=2))
1083
+ else:
1084
+ print(f"Handling requirements for {', '.join(cats)}:")
1085
+ for i, req in enumerate(reqs, 1):
1086
+ print(f" {i}. {req}")
1087
+ return
1088
+
1089
+ # --detect
1090
+ if args.detect:
1091
+ if not args.project_id:
1092
+ print("Error: --detect requires --project-id", file=sys.stderr)
1093
+ sys.exit(1)
1094
+ result = detect_data_categories(args.project_id, args.db_path)
1095
+ if args.json:
1096
+ print(json.dumps(result, indent=2))
1097
+ else:
1098
+ print(f"Data Category Detection: {args.project_id}")
1099
+ print(f"{'=' * 60}")
1100
+ for d in result["detected_categories"]:
1101
+ print(
1102
+ f" [{d['confidence']:.0%}] {d['category']}/{d['subcategory']} "
1103
+ f"-- {d['name']}"
1104
+ )
1105
+ print(f" Matched: {', '.join(d['matched_indicators'])}")
1106
+ print(f"\nRequired frameworks: {', '.join(result['all_required_frameworks'])}")
1107
+ print(f"Recommended: {', '.join(result['all_recommended_frameworks'])}")
1108
+ print(f"\nNote: {result['advisory_note']}")
1109
+ return
1110
+
1111
+ # --validate
1112
+ if args.validate:
1113
+ if not args.project_id:
1114
+ print("Error: --validate requires --project-id", file=sys.stderr)
1115
+ sys.exit(1)
1116
+ result = validate_project_markings(args.project_id, args.db_path)
1117
+ if args.json:
1118
+ print(json.dumps(result, indent=2))
1119
+ else:
1120
+ status = "VALID" if result["valid"] else "INVALID"
1121
+ print(f"Marking Validation: {status}")
1122
+ print(f" Categories: {', '.join(result['assigned_categories']) or 'none'}")
1123
+ print(f" Highest: {result['highest_sensitivity']}")
1124
+ if result["issues"]:
1125
+ print(f" Issues ({len(result['issues'])}):")
1126
+ for issue in result["issues"]:
1127
+ print(f" - {issue}")
1128
+ if result["recommendations"]:
1129
+ print(" Recommendations:")
1130
+ for rec in result["recommendations"]:
1131
+ print(f" - {rec}")
1132
+ return
1133
+
1134
+ # --add-category
1135
+ if args.add_category:
1136
+ if not args.project_id:
1137
+ print("Error: --add-category requires --project-id", file=sys.stderr)
1138
+ sys.exit(1)
1139
+ result = add_project_data_category(
1140
+ args.project_id, args.add_category, db_path=args.db_path,
1141
+ )
1142
+ if args.json:
1143
+ print(json.dumps(result, indent=2))
1144
+ else:
1145
+ print(f"Added data category: {result['data_category']} to {result['project_id']}")
1146
+ return
1147
+
1148
+ # Single category info
1149
+ if cats and len(cats) == 1 and not (args.banner or args.code_header or args.handling):
1150
+ cat_config = get_category_config(cats[0])
1151
+ if args.json:
1152
+ print(json.dumps({"category": cats[0], "config": cat_config}, indent=2))
1153
+ else:
1154
+ print(f"Data Category: {cats[0]}")
1155
+ for k, v in cat_config.items():
1156
+ if isinstance(v, list):
1157
+ print(f" {k}:")
1158
+ for item in v:
1159
+ print(f" - {item}")
1160
+ else:
1161
+ print(f" {k}: {v}")
1162
+ return
1163
+
1164
+ parser.print_help()
1165
+
1166
+ except (ValueError, FileNotFoundError) as exc:
1167
+ print(f"ERROR: {exc}", file=sys.stderr)
1168
+ sys.exit(1)
1169
+
1170
+
1171
+ if __name__ == "__main__":
1172
+ main()