icdev 0.0.3__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 (1214) hide show
  1. args/agent_config.yaml +113 -0
  2. args/audit_regimes/cisa_sbd.json +381 -0
  3. args/audit_regimes/cmmc_l2.json +906 -0
  4. args/audit_regimes/dod_cssp.json +393 -0
  5. args/audit_regimes/dodi_5000_87.json +297 -0
  6. args/audit_regimes/fedramp_moderate.json +650 -0
  7. args/audit_regimes/ieee_1012.json +373 -0
  8. args/audit_regimes/nist_800_171.json +624 -0
  9. args/audit_regimes/nist_800_53.json +907 -0
  10. args/cloudforge_blueprints/aws_commercial.yaml +29 -0
  11. args/cloudforge_blueprints/aws_govcloud_il4.yaml +34 -0
  12. args/cloudforge_blueprints/aws_govcloud_il5.yaml +38 -0
  13. args/cloudforge_blueprints/azure_commercial.yaml +28 -0
  14. args/cloudforge_blueprints/azure_gov_il4.yaml +32 -0
  15. args/cloudforge_blueprints/azure_gov_il5.yaml +36 -0
  16. args/cloudforge_blueprints/gcp_commercial.yaml +28 -0
  17. args/cloudforge_blueprints/oci_commercial.yaml +28 -0
  18. args/cloudforge_config.yaml +231 -0
  19. args/cloudforge_runbook_templates/backup_verify.yaml +98 -0
  20. args/cloudforge_runbook_templates/dr_failover.yaml +107 -0
  21. args/cloudforge_runbook_templates/health_check.yaml +97 -0
  22. args/cloudforge_runbook_templates/incident_response.yaml +101 -0
  23. args/cloudforge_runbook_templates/migration_cutover.yaml +105 -0
  24. args/cloudforge_runbook_templates/patch_rollout.yaml +92 -0
  25. args/cloudforge_runbook_templates/zone_provision.yaml +93 -0
  26. args/code_pattern_config.yaml +151 -0
  27. args/code_quality_config.yaml +47 -0
  28. args/compliance_config.yaml +17 -0
  29. args/control_inheritance.yaml +177 -0
  30. args/csp_mcp_config.yaml +41 -0
  31. args/cui_markings.yaml +35 -0
  32. args/databridge_config.yaml +232 -0
  33. args/db_config.yaml +116 -0
  34. args/decision_tables/agent_trust_decision.yaml +143 -0
  35. args/decision_tables/ato_boundary_impact.yaml +132 -0
  36. args/decision_tables/deployment_approval.yaml +152 -0
  37. args/degradation_matrix.yaml +163 -0
  38. args/devsecops_config.yaml +286 -0
  39. args/endpoint_security_config.yaml +207 -0
  40. args/exit_criteria.yaml +102 -0
  41. args/feature_flags.yaml +235 -0
  42. args/file_access_tiers.yaml +88 -0
  43. args/forge_studio/blueprint_config.yaml +27 -0
  44. args/forge_studio/component_catalog.json +411 -0
  45. args/forge_studio/workflow_templates.yaml +103 -0
  46. args/govcon_config.yaml +41 -0
  47. args/harness_config.yaml +67 -0
  48. args/innovation_config.yaml +321 -0
  49. args/knowledge_graph_config.yaml +113 -0
  50. args/llm_config.yaml +222 -0
  51. args/marketplace_config.yaml +260 -0
  52. args/monitoring_config.yaml +127 -0
  53. args/mosa_config.yaml +190 -0
  54. args/observability_tracing_config.yaml +170 -0
  55. args/owasp_agentic_config.yaml +171 -0
  56. args/pipeline_gates.yaml +197 -0
  57. args/project_defaults.yaml +235 -0
  58. args/prompt_chains.yaml +163 -0
  59. args/rag_config.yaml +167 -0
  60. args/research_config.yaml +89 -0
  61. args/resilience_config.yaml +197 -0
  62. args/ricoas_config.yaml +191 -0
  63. args/security_gates.yaml +763 -0
  64. args/storage_config.yaml +63 -0
  65. args/writeguard_config.yaml +131 -0
  66. args/zta_config.yaml +247 -0
  67. context/__init__.py +6 -0
  68. context/agent/__init__.py +6 -0
  69. context/agent/response_schemas/__init__.py +6 -0
  70. context/agent/response_schemas/debate_position.json +46 -0
  71. context/agent/response_schemas/fitness_scorecard.json +74 -0
  72. context/agent/response_schemas/review_decision.json +39 -0
  73. context/agent/response_schemas/task_decomposition.json +82 -0
  74. context/agent/response_schemas/veto_decision.json +40 -0
  75. context/agentic/__init__.py +6 -0
  76. context/agentic/architecture_patterns.md +269 -0
  77. context/agentic/capability_registry.yaml +223 -0
  78. context/agentic/csp_integration.md +30 -0
  79. context/agentic/csp_mcp_registry.yaml +280 -0
  80. context/agentic/fitness_rubric.md +56 -0
  81. context/agentic/governance_baseline.md +205 -0
  82. context/ci/__init__.py +6 -0
  83. context/ci/worktree_templates.json +44 -0
  84. context/cloud/__init__.py +6 -0
  85. context/cloud/csp_service_registry.json +739 -0
  86. context/compliance/__init__.py +6 -0
  87. context/compliance/ai_rmf_crosswalk.yaml +226 -0
  88. context/compliance/atlas_mitigations.json +293 -0
  89. context/compliance/atlas_techniques.json +833 -0
  90. context/compliance/cisa_sbd_requirements.json +477 -0
  91. context/compliance/cjis_security_policy.json +522 -0
  92. context/compliance/cmmc_practices.json +2494 -0
  93. context/compliance/cmmc_report_template.md +142 -0
  94. context/compliance/cnssi_1253_overlay.json +109 -0
  95. context/compliance/control_crosswalk.json +1914 -0
  96. context/compliance/control_families/__init__.py +6 -0
  97. context/compliance/csp_certifications.json +251 -0
  98. context/compliance/cssp_report_template.md +193 -0
  99. context/compliance/cui_templates/__init__.py +6 -0
  100. context/compliance/cui_templates/banner_block.txt +4 -0
  101. context/compliance/cui_templates/code_header.txt +8 -0
  102. context/compliance/cui_templates/document_template.md +35 -0
  103. context/compliance/data_type_framework_map.json +321 -0
  104. context/compliance/data_type_registry.json +147 -0
  105. context/compliance/dod_cssp_8530.json +463 -0
  106. context/compliance/eu_ai_act_annex_iii.json +108 -0
  107. context/compliance/export_templates/__init__.py +6 -0
  108. context/compliance/export_templates/emass_controls.csv.j2 +4 -0
  109. context/compliance/export_templates/evidence_package.md.j2 +39 -0
  110. context/compliance/export_templates/executive_summary.md.j2 +55 -0
  111. context/compliance/export_templates/poam_tracking.csv.j2 +4 -0
  112. context/compliance/fedramp_20x_ksi_schemas.json +133 -0
  113. context/compliance/fedramp_high_baseline.json +4370 -0
  114. context/compliance/fedramp_moderate_baseline.json +2183 -0
  115. context/compliance/fedramp_report_template.md +181 -0
  116. context/compliance/fips_200_areas.json +362 -0
  117. context/compliance/gao_ai_accountability.json +262 -0
  118. context/compliance/hipaa_security_rule.json +720 -0
  119. context/compliance/hitrust_csf_v11.json +930 -0
  120. context/compliance/impact_level_profiles.json +251 -0
  121. context/compliance/incident_response_template.md +1110 -0
  122. context/compliance/iso27001_2022_controls.json +750 -0
  123. context/compliance/iso27001_nist_bridge.json +382 -0
  124. context/compliance/iso42001_controls.json +254 -0
  125. context/compliance/ivv_checklist_template.md +80 -0
  126. context/compliance/ivv_report_template.md +116 -0
  127. context/compliance/ivv_requirements.json +372 -0
  128. context/compliance/mosa_crosswalk.json +327 -0
  129. context/compliance/mosa_framework.json +250 -0
  130. context/compliance/narrative_templates/AC.md.j2 +101 -0
  131. context/compliance/narrative_templates/AU.md.j2 +106 -0
  132. context/compliance/narrative_templates/IA.md.j2 +104 -0
  133. context/compliance/narrative_templates/SC.md.j2 +102 -0
  134. context/compliance/narrative_templates/SI.md.j2 +111 -0
  135. context/compliance/narrative_templates/__init__.py +6 -0
  136. context/compliance/narrative_templates/default.md.j2 +50 -0
  137. context/compliance/narrative_templates/executive_summary.j2 +27 -0
  138. context/compliance/narrative_templates/poam_milestone.j2 +19 -0
  139. context/compliance/narrative_templates/ssp_section.j2 +11 -0
  140. context/compliance/nist_800_171_controls.json +1552 -0
  141. context/compliance/nist_800_207_crosswalk.json +399 -0
  142. context/compliance/nist_800_207_zta.json +258 -0
  143. context/compliance/nist_800_53.json +324 -0
  144. context/compliance/nist_ai_600_1_genai.json +326 -0
  145. context/compliance/nist_ai_rmf.json +206 -0
  146. context/compliance/nist_sp_800_60_types.json +1667 -0
  147. context/compliance/omb_m25_21_high_impact_ai.json +248 -0
  148. context/compliance/omb_m26_04_unbiased_ai.json +262 -0
  149. context/compliance/owasp_agentic_asi.json +133 -0
  150. context/compliance/owasp_agentic_threats.json +285 -0
  151. context/compliance/owasp_llm_top10.json +274 -0
  152. context/compliance/pci_dss_v4.json +510 -0
  153. context/compliance/poam_template.md +117 -0
  154. context/compliance/safeai_controls.json +512 -0
  155. context/compliance/sbd_report_template.md +77 -0
  156. context/compliance/siem_config_templates/__init__.py +6 -0
  157. context/compliance/siem_config_templates/filebeat.yml +213 -0
  158. context/compliance/siem_config_templates/log_sources.json +208 -0
  159. context/compliance/soc2_trust_criteria.json +661 -0
  160. context/compliance/ssp_template.md +432 -0
  161. context/compliance/stig_templates/__init__.py +6 -0
  162. context/compliance/stig_templates/webapp_stig.json +139 -0
  163. context/compliance/xai_requirements.json +108 -0
  164. context/dashboard/__init__.py +6 -0
  165. context/dashboard/nlq_examples.json +50 -0
  166. context/dashboard/schema_descriptions.json +23 -0
  167. context/icdev_methodology.md +100 -0
  168. context/integration/__init__.py +6 -0
  169. context/integration/approval_workflows.json +32 -0
  170. context/integration/gitlab_field_mappings.json +33 -0
  171. context/integration/jira_field_mappings.json +32 -0
  172. context/integration/reqif_export_schema.json +23 -0
  173. context/integration/servicenow_field_mappings.json +22 -0
  174. context/languages/__init__.py +6 -0
  175. context/languages/framework_patterns.json +205 -0
  176. context/languages/language_registry.json +279 -0
  177. context/llm/__init__.py +6 -0
  178. context/llm/example_provider.py +89 -0
  179. context/marketplace/assets/writeguard-core.yaml +100 -0
  180. context/marketplace/assets/writeguard-govcon.yaml +45 -0
  181. context/marketplace/assets/writeguard-style-guides.yaml +44 -0
  182. context/mbse/__init__.py +6 -0
  183. context/mbse/des_report_template.md +162 -0
  184. context/mbse/des_requirements.json +411 -0
  185. context/mbse/digital_thread_patterns.json +403 -0
  186. context/mbse/reqif_schema.json +280 -0
  187. context/mbse/sysml_element_types.json +432 -0
  188. context/oscal/NIST_SP-800-53_rev5_catalog.json +254987 -0
  189. context/oscal/README.md +43 -0
  190. context/patterns/__init__.py +6 -0
  191. context/profiles/__init__.py +6 -0
  192. context/profiles/dod_baseline_v1.yaml +145 -0
  193. context/profiles/fedramp_baseline_v1.yaml +143 -0
  194. context/profiles/financial_baseline_v1.yaml +142 -0
  195. context/profiles/healthcare_baseline_v1.yaml +135 -0
  196. context/profiles/law_enforcement_v1.yaml +129 -0
  197. context/profiles/startup_v1.yaml +134 -0
  198. context/rag/source_mappings.json +42 -0
  199. context/requirements/__init__.py +6 -0
  200. context/requirements/ambiguity_patterns.json +97 -0
  201. context/requirements/boundary_impact_rules.json +123 -0
  202. context/requirements/default_constitutions.json +67 -0
  203. context/requirements/document_extraction_rules.json +58 -0
  204. context/requirements/gap_patterns.json +108 -0
  205. context/requirements/readiness_rubric.json +78 -0
  206. context/requirements/red_alternative_patterns.json +210 -0
  207. context/requirements/safe_templates.json +72 -0
  208. context/requirements/spec_quality_checklist.json +122 -0
  209. context/research/regulatory_registry.json +114 -0
  210. context/research/verticals/cybersecurity.json +127 -0
  211. context/research/verticals/defense.json +104 -0
  212. context/research/verticals/fintech.json +125 -0
  213. context/research/verticals/healthcare.json +118 -0
  214. context/research/verticals/logistics.json +117 -0
  215. context/research/verticals/trading.json +145 -0
  216. context/simulation/__init__.py +6 -0
  217. context/simulation/architecture_patterns.json +36 -0
  218. context/simulation/coa_templates.json +38 -0
  219. context/simulation/cost_models.json +23 -0
  220. context/simulation/risk_categories.json +46 -0
  221. context/supply_chain/__init__.py +6 -0
  222. context/supply_chain/isa_templates.json +129 -0
  223. context/supply_chain/nist_800_161_controls.json +247 -0
  224. context/supply_chain/scrm_risk_matrix.json +147 -0
  225. context/templates/__init__.py +6 -0
  226. context/templates/ansible/__init__.py +6 -0
  227. context/templates/ansible/playbooks/__init__.py +6 -0
  228. context/templates/ansible/roles/__init__.py +6 -0
  229. context/templates/gitlab_ci/__init__.py +6 -0
  230. context/templates/grafana/__init__.py +6 -0
  231. context/templates/kubernetes/__init__.py +6 -0
  232. context/templates/project/__init__.py +6 -0
  233. context/templates/project/api/__init__.py +6 -0
  234. context/templates/project/cli/__init__.py +6 -0
  235. context/templates/project/data_pipeline/__init__.py +6 -0
  236. context/templates/project/iac/__init__.py +6 -0
  237. context/templates/project/javascript_frontend/__init__.py +6 -0
  238. context/templates/project/javascript_frontend/src/__init__.py +6 -0
  239. context/templates/project/javascript_frontend/tests/__init__.py +6 -0
  240. context/templates/project/microservice/__init__.py +6 -0
  241. context/templates/project/python_backend/__init__.py +6 -0
  242. context/templates/project/python_backend/src/__init__.py +6 -0
  243. context/templates/project/python_backend/tests/__init__.py +6 -0
  244. context/templates/project/python_backend/tests/features/__init__.py +6 -0
  245. context/templates/project/python_backend/tests/steps/__init__.py +6 -0
  246. context/templates/terraform/__init__.py +6 -0
  247. context/templates/terraform/govcloud_base/__init__.py +6 -0
  248. context/templates/terraform/modules/__init__.py +6 -0
  249. context/tone/__init__.py +6 -0
  250. context/writing/grammar_rules/common_errors.json +306 -0
  251. context/writing/grammar_rules/govcon_vocabulary.json +113 -0
  252. context/writing/style_guides/academic.yaml +43 -0
  253. context/writing/style_guides/business.yaml +42 -0
  254. context/writing/style_guides/government.yaml +59 -0
  255. context/writing/style_guides/proposal.yaml +58 -0
  256. context/writing/style_guides/technical.yaml +43 -0
  257. docs/adr/README.md +66 -0
  258. docs/adr/connector-forge-decisions.md +318 -0
  259. docs/adr/core-decisions.md +289 -0
  260. docs/adr/db-decisions.md +94 -0
  261. docs/adr/harness-decisions.md +122 -0
  262. docs/adr/innovation-decisions.md +262 -0
  263. docs/adr/marketplace-decisions.md +109 -0
  264. docs/adr/sbd-decisions.md +109 -0
  265. docs/adr/scale-engine-decisions.md +108 -0
  266. docs/adr/writeguard-decisions.md +136 -0
  267. docs/architecture/bounded-contexts.md +1032 -0
  268. docs/features/phase-65-writeguard.md +139 -0
  269. docs/features/phase-66-marketplace-commerce.md +79 -0
  270. docs/features/phase-67-knowledge-ingestion-rag-autodraft.md +97 -0
  271. docs/features/phase-68-enhanced-autodraft-pipeline.md +109 -0
  272. docs/features/phase-69-proposalai-marketplace-module.md +131 -0
  273. docs/features/phase-70-databridge.md +214 -0
  274. docs/features/phase-71-databridge-messaging.md +102 -0
  275. docs/implementation-plan-architecture-evolution.md +614 -0
  276. docs/marketplace/CONTRIBUTING.md +124 -0
  277. docs/marketplace/module_manifest_schema.yaml +83 -0
  278. docs/research/ai-architecture-patterns-2024-2026.md +1236 -0
  279. docs/research/app-builder-platform-analysis.md +582 -0
  280. docs/research/architecture-patterns-c4-ddd-agentic.md +871 -0
  281. docs/research/flowable-boat-competitive-analysis.md +426 -0
  282. docs/research/modern-dev-practices-2024-2026.md +1615 -0
  283. docs/research/secure-by-design-cloudyrion-adaptation.md +270 -0
  284. goals/agent_management.md +144 -0
  285. goals/ai_accountability.md +90 -0
  286. goals/ai_narratives.md +79 -0
  287. goals/ai_transparency.md +76 -0
  288. goals/ato_simulator.md +78 -0
  289. goals/audit_engine.md +177 -0
  290. goals/bite_sized_plans.md +225 -0
  291. goals/boundary_supply_chain.md +206 -0
  292. goals/brainstorming_gate.md +186 -0
  293. goals/build_app.md +604 -0
  294. goals/cato_live_evidence.md +77 -0
  295. goals/cloudforge.md +106 -0
  296. goals/code_intelligence.md +197 -0
  297. goals/compliance_workflow.md +858 -0
  298. goals/connector_forge.md +133 -0
  299. goals/databridge.md +128 -0
  300. goals/deploy_workflow.md +390 -0
  301. goals/developer_scorecard.md +78 -0
  302. goals/devsecops_workflow.md +408 -0
  303. goals/firmware_sbom.md +79 -0
  304. goals/forge_hub.md +78 -0
  305. goals/golden_path.md +77 -0
  306. goals/harness_engineering.md +91 -0
  307. goals/integration_testing.md +189 -0
  308. goals/knowledge_graph.md +128 -0
  309. goals/maintenance_audit.md +196 -0
  310. goals/manifest.md +50 -0
  311. goals/monitoring.md +126 -0
  312. goals/mosa_workflow.md +463 -0
  313. goals/multi_agent_orchestration.md +68 -0
  314. goals/observability_traceability_xai.md +154 -0
  315. goals/owasp_agentic_security.md +395 -0
  316. goals/pr_intelligence.md +78 -0
  317. goals/requirements_intake.md +213 -0
  318. goals/secure_by_design.md +135 -0
  319. goals/security_scan.md +381 -0
  320. goals/self_healing.md +120 -0
  321. goals/simulation_engine.md +111 -0
  322. goals/subagent_review.md +205 -0
  323. goals/systematic_debugging.md +257 -0
  324. goals/tdd_workflow.md +403 -0
  325. goals/template_exchange.md +77 -0
  326. goals/thread_heatmap.md +77 -0
  327. goals/threat_modeler.md +77 -0
  328. goals/verification_iron_law.md +192 -0
  329. goals/vsm_dashboard.md +76 -0
  330. goals/writeguard.md +89 -0
  331. goals/zero_trust_architecture.md +403 -0
  332. hardprompts/__init__.py +6 -0
  333. hardprompts/agent/__init__.py +6 -0
  334. hardprompts/agent/agentic_architect.md +100 -0
  335. hardprompts/agent/debate_prompt.md +32 -0
  336. hardprompts/agent/fitness_evaluation.md +48 -0
  337. hardprompts/agent/governance_review.md +214 -0
  338. hardprompts/agent/reviewer_prompt.md +34 -0
  339. hardprompts/agent/skill_design.md +172 -0
  340. hardprompts/agent/task_decomposition.md +275 -0
  341. hardprompts/agent/veto_check_prompt.md +33 -0
  342. hardprompts/architect/__init__.py +6 -0
  343. hardprompts/architect/api_design.md +283 -0
  344. hardprompts/architect/data_model.md +277 -0
  345. hardprompts/architect/system_design.md +180 -0
  346. hardprompts/builder/__init__.py +6 -0
  347. hardprompts/builder/code_generation.md +59 -0
  348. hardprompts/builder/refactor.md +58 -0
  349. hardprompts/builder/scaffold_project.md +69 -0
  350. hardprompts/builder/test_generation.md +87 -0
  351. hardprompts/ci/__init__.py +6 -0
  352. hardprompts/ci/worktree_setup.md +35 -0
  353. hardprompts/compliance/__init__.py +6 -0
  354. hardprompts/compliance/cmmc_assessment.md +63 -0
  355. hardprompts/compliance/cssp_assessment.md +75 -0
  356. hardprompts/compliance/cui_marking.md +86 -0
  357. hardprompts/compliance/fedramp_assessment.md +55 -0
  358. hardprompts/compliance/ivv_assessment.md +96 -0
  359. hardprompts/compliance/poam_generation.md +57 -0
  360. hardprompts/compliance/sbd_assessment.md +101 -0
  361. hardprompts/compliance/security_categorization.md +74 -0
  362. hardprompts/compliance/ssp_generation.md +56 -0
  363. hardprompts/compliance/stig_evaluation.md +63 -0
  364. hardprompts/dashboard/__init__.py +6 -0
  365. hardprompts/dashboard/nlq_system_prompt.md +26 -0
  366. hardprompts/infra/__init__.py +6 -0
  367. hardprompts/infra/k8s_manifests.md +118 -0
  368. hardprompts/infra/pipeline_generation.md +160 -0
  369. hardprompts/infra/terraform_generation.md +92 -0
  370. hardprompts/integration/__init__.py +6 -0
  371. hardprompts/integration/approval_review.md +17 -0
  372. hardprompts/integration/jira_mapping.md +25 -0
  373. hardprompts/integration/servicenow_mapping.md +14 -0
  374. hardprompts/knowledge/__init__.py +6 -0
  375. hardprompts/knowledge/pattern_detection.md +73 -0
  376. hardprompts/knowledge/recommendation_engine.md +90 -0
  377. hardprompts/knowledge/root_cause_analysis.md +91 -0
  378. hardprompts/maintenance/__init__.py +6 -0
  379. hardprompts/maintenance/maintenance_assessment.md +82 -0
  380. hardprompts/mbse/__init__.py +6 -0
  381. hardprompts/mbse/digital_thread.md +67 -0
  382. hardprompts/mbse/model_import.md +62 -0
  383. hardprompts/mbse/model_to_code.md +65 -0
  384. hardprompts/modernization/__init__.py +6 -0
  385. hardprompts/modernization/legacy_analysis.md +93 -0
  386. hardprompts/modernization/migration_planning.md +150 -0
  387. hardprompts/modernization/seven_r_assessment.md +107 -0
  388. hardprompts/proposal_draft.md +53 -0
  389. hardprompts/rag_citation.md +12 -0
  390. hardprompts/rag_rerank.md +31 -0
  391. hardprompts/requirements/__init__.py +6 -0
  392. hardprompts/requirements/bdd_generation.md +35 -0
  393. hardprompts/requirements/clarification_prioritization.md +29 -0
  394. hardprompts/requirements/decomposition.md +60 -0
  395. hardprompts/requirements/document_extraction.md +45 -0
  396. hardprompts/requirements/gap_detection.md +70 -0
  397. hardprompts/requirements/intake_conversation.md +101 -0
  398. hardprompts/requirements/readiness_assessment.md +39 -0
  399. hardprompts/requirements/spec_quality.md +33 -0
  400. hardprompts/requirements/traceability_analysis.md +23 -0
  401. hardprompts/security/__init__.py +6 -0
  402. hardprompts/security/endpoint_security.md +78 -0
  403. hardprompts/security/threat_model.md +70 -0
  404. hardprompts/security/vulnerability_assessment.md +81 -0
  405. hardprompts/simulation/__init__.py +6 -0
  406. hardprompts/simulation/architecture_impact.md +27 -0
  407. hardprompts/simulation/coa_alternative.md +27 -0
  408. hardprompts/simulation/coa_generation.md +25 -0
  409. hardprompts/simulation/compliance_impact.md +28 -0
  410. hardprompts/simulation/cost_estimation.md +33 -0
  411. hardprompts/simulation/risk_assessment.md +28 -0
  412. hardprompts/translation/code_translation.md +68 -0
  413. hardprompts/translation/dependency_suggestion.md +44 -0
  414. hardprompts/translation/test_translation.md +64 -0
  415. hardprompts/translation/translation_repair.md +59 -0
  416. icdev-0.0.3.dist-info/METADATA +909 -0
  417. icdev-0.0.3.dist-info/RECORD +1214 -0
  418. icdev-0.0.3.dist-info/WHEEL +5 -0
  419. icdev-0.0.3.dist-info/entry_points.txt +9 -0
  420. icdev-0.0.3.dist-info/licenses/LICENSE +201 -0
  421. icdev-0.0.3.dist-info/licenses/NOTICE +11 -0
  422. icdev-0.0.3.dist-info/top_level.txt +7 -0
  423. memory/MEMORY.md +52 -0
  424. memory/logs/2026-02-14.md +17 -0
  425. memory/logs/2026-03-03.md +2 -0
  426. memory/logs/__init__.py +1 -0
  427. tools/a2a/icdev_callback_client.py +210 -0
  428. tools/agent/cards/architect_card.json +29 -0
  429. tools/agent/cards/builder_card.json +34 -0
  430. tools/agent/cards/compliance_card.json +29 -0
  431. tools/agent/cards/connector_forge_card.json +49 -0
  432. tools/agent/cards/devsecops_zta_card.json +24 -0
  433. tools/agent/cards/knowledge_card.json +29 -0
  434. tools/agent/cards/monitor_card.json +29 -0
  435. tools/agent/cards/orchestrator_card.json +29 -0
  436. tools/agent/cards/requirements_analyst_card.json +24 -0
  437. tools/agent/cards/security_card.json +29 -0
  438. tools/agent/cards/simulation_card.json +24 -0
  439. tools/agent/cards/supply_chain_card.json +24 -0
  440. tools/analysis/__init__.py +1 -0
  441. tools/analysis/code_analyzer.py +770 -0
  442. tools/analysis/runtime_feedback.py +379 -0
  443. tools/analytics/__init__.py +2 -0
  444. tools/analytics/scorecard.py +538 -0
  445. tools/analytics/vsm_engine.py +612 -0
  446. tools/architecture/__init__.py +2 -0
  447. tools/architecture/adr_extractor.py +393 -0
  448. tools/audit/__init__.py +1 -0
  449. tools/audit/audit_logger.py +199 -0
  450. tools/audit/audit_query.py +153 -0
  451. tools/audit/decision_recorder.py +73 -0
  452. tools/audit_engine/__init__.py +12 -0
  453. tools/audit_engine/ai_advisor.py +906 -0
  454. tools/audit_engine/cli.py +286 -0
  455. tools/audit_engine/comparator.py +305 -0
  456. tools/audit_engine/eject_scaffolder.py +399 -0
  457. tools/audit_engine/engine.py +614 -0
  458. tools/audit_engine/git_fetcher.py +341 -0
  459. tools/audit_engine/regime_loader.py +200 -0
  460. tools/audit_engine/regime_updater.py +325 -0
  461. tools/audit_engine/report_card.py +289 -0
  462. tools/audit_engine/scanner.py +684 -0
  463. tools/audit_engine/self_heal.py +1042 -0
  464. tools/ci/__init__.py +2 -0
  465. tools/ci/connectors/__init__.py +2 -0
  466. tools/ci/connectors/base_connector.py +80 -0
  467. tools/ci/connectors/connector_registry.py +188 -0
  468. tools/ci/connectors/mattermost_connector.py +159 -0
  469. tools/ci/connectors/slack_connector.py +197 -0
  470. tools/ci/core/__init__.py +2 -0
  471. tools/ci/core/air_gap_detector.py +115 -0
  472. tools/ci/core/comment_handler.py +192 -0
  473. tools/ci/core/conversation_manager.py +480 -0
  474. tools/ci/core/event_envelope.py +500 -0
  475. tools/ci/core/event_router.py +444 -0
  476. tools/ci/core/failure_parser.py +397 -0
  477. tools/ci/core/recovery_engine.py +527 -0
  478. tools/ci/gate_enforcer.py +361 -0
  479. tools/ci/modules/__init__.py +2 -0
  480. tools/ci/modules/agent.py +271 -0
  481. tools/ci/modules/git_ops.py +175 -0
  482. tools/ci/modules/state.py +117 -0
  483. tools/ci/modules/vcs.py +303 -0
  484. tools/ci/modules/workflow_ops.py +295 -0
  485. tools/ci/modules/worktree.py +337 -0
  486. tools/ci/pipeline_config_generator.py +558 -0
  487. tools/ci/pr_intelligence.py +485 -0
  488. tools/ci/triggers/__init__.py +2 -0
  489. tools/ci/triggers/gitlab_task_monitor.py +327 -0
  490. tools/ci/triggers/poll_trigger.py +237 -0
  491. tools/ci/triggers/webhook_server.py +356 -0
  492. tools/ci/workflows/__init__.py +2 -0
  493. tools/ci/workflows/icdev_build.py +140 -0
  494. tools/ci/workflows/icdev_comply.py +284 -0
  495. tools/ci/workflows/icdev_document.py +152 -0
  496. tools/ci/workflows/icdev_e2e.py +188 -0
  497. tools/ci/workflows/icdev_patch.py +186 -0
  498. tools/ci/workflows/icdev_plan.py +202 -0
  499. tools/ci/workflows/icdev_plan_build.py +41 -0
  500. tools/ci/workflows/icdev_plan_build_test.py +46 -0
  501. tools/ci/workflows/icdev_plan_build_test_review.py +47 -0
  502. tools/ci/workflows/icdev_review.py +126 -0
  503. tools/ci/workflows/icdev_sdlc.py +261 -0
  504. tools/ci/workflows/icdev_test.py +240 -0
  505. tools/cli/__init__.py +1 -0
  506. tools/cli/output_formatter.py +756 -0
  507. tools/cloudforge/__init__.py +12 -0
  508. tools/cloudforge/airgap/__init__.py +2 -0
  509. tools/cloudforge/airgap/il_classifier.py +70 -0
  510. tools/cloudforge/airgap/offline_validator.py +42 -0
  511. tools/cloudforge/airgap/shift_emulator.py +155 -0
  512. tools/cloudforge/airgap/sneakernet.py +91 -0
  513. tools/cloudforge/cd_hub/__init__.py +2 -0
  514. tools/cloudforge/cd_hub/canary_deployer.py +88 -0
  515. tools/cloudforge/cd_hub/gitops_renderer.py +123 -0
  516. tools/cloudforge/cd_hub/hub_controller.py +143 -0
  517. tools/cloudforge/cd_hub/pipeline_bridge.py +30 -0
  518. tools/cloudforge/cd_hub/rollback_engine.py +29 -0
  519. tools/cloudforge/cd_hub/spoke_agent.py +51 -0
  520. tools/cloudforge/compliance/__init__.py +2 -0
  521. tools/cloudforge/compliance/ato_accelerator.py +272 -0
  522. tools/cloudforge/compliance/control_inheritor.py +127 -0
  523. tools/cloudforge/compliance/evidence_generator.py +129 -0
  524. tools/cloudforge/compliance/poam_bridge.py +41 -0
  525. tools/cloudforge/compliance/ssp_bridge.py +52 -0
  526. tools/cloudforge/compliance/stig_bridge.py +41 -0
  527. tools/cloudforge/container_forge/__init__.py +2 -0
  528. tools/cloudforge/container_forge/bigbang_renderer.py +85 -0
  529. tools/cloudforge/container_forge/hardener.py +169 -0
  530. tools/cloudforge/container_forge/image_scanner_bridge.py +33 -0
  531. tools/cloudforge/container_forge/runtime_policy.py +87 -0
  532. tools/cloudforge/container_forge/sbom_bridge.py +42 -0
  533. tools/cloudforge/finops/__init__.py +2 -0
  534. tools/cloudforge/finops/anomaly_detector.py +78 -0
  535. tools/cloudforge/finops/budget_tracker.py +96 -0
  536. tools/cloudforge/finops/chargeback.py +69 -0
  537. tools/cloudforge/finops/cost_collector.py +141 -0
  538. tools/cloudforge/finops/optimizer.py +55 -0
  539. tools/cloudforge/hybrid/__init__.py +2 -0
  540. tools/cloudforge/hybrid/connection_manager.py +141 -0
  541. tools/cloudforge/hybrid/dns_federator.py +56 -0
  542. tools/cloudforge/hybrid/health_monitor.py +108 -0
  543. tools/cloudforge/hybrid/identity_federator.py +53 -0
  544. tools/cloudforge/hybrid/network_bridge.py +68 -0
  545. tools/cloudforge/hybrid/topology_manager.py +147 -0
  546. tools/cloudforge/hybrid/workload_abstractor.py +92 -0
  547. tools/cloudforge/iac/__init__.py +2 -0
  548. tools/cloudforge/iac/drift_detector.py +154 -0
  549. tools/cloudforge/iac/module_library.py +265 -0
  550. tools/cloudforge/iac/opentofu_adapter.py +89 -0
  551. tools/cloudforge/iac/pulumi_renderer.py +292 -0
  552. tools/cloudforge/iac/state_backend.py +146 -0
  553. tools/cloudforge/iac/terraform_renderer.py +626 -0
  554. tools/cloudforge/landing_zone/__init__.py +2 -0
  555. tools/cloudforge/landing_zone/blueprint_loader.py +98 -0
  556. tools/cloudforge/landing_zone/blueprint_validator.py +113 -0
  557. tools/cloudforge/landing_zone/zone_provisioner.py +306 -0
  558. tools/cloudforge/landing_zone/zone_state.py +143 -0
  559. tools/cloudforge/mbse_thread/__init__.py +2 -0
  560. tools/cloudforge/mbse_thread/ato_thread_weaver.py +111 -0
  561. tools/cloudforge/mbse_thread/control_tracer.py +68 -0
  562. tools/cloudforge/mbse_thread/system_boundary.py +83 -0
  563. tools/cloudforge/metastore/__init__.py +2 -0
  564. tools/cloudforge/metastore/dependency_graph.py +202 -0
  565. tools/cloudforge/metastore/discovery.py +192 -0
  566. tools/cloudforge/metastore/registry.py +185 -0
  567. tools/cloudforge/metastore/rto_tracker.py +92 -0
  568. tools/cloudforge/metastore/runbook_linker.py +82 -0
  569. tools/cloudforge/migration/__init__.py +2 -0
  570. tools/cloudforge/migration/assessor.py +187 -0
  571. tools/cloudforge/migration/cutover_orchestrator.py +117 -0
  572. tools/cloudforge/migration/databridge_bridge.py +92 -0
  573. tools/cloudforge/migration/planner.py +98 -0
  574. tools/cloudforge/migration/risk_scorer.py +97 -0
  575. tools/cloudforge/migration/validation_runner.py +45 -0
  576. tools/cloudforge/migration/workload_inventory.py +107 -0
  577. tools/cloudforge/provider.py +319 -0
  578. tools/cloudforge/providers/__init__.py +2 -0
  579. tools/cloudforge/providers/aws_commercial.py +92 -0
  580. tools/cloudforge/providers/aws_govcloud.py +229 -0
  581. tools/cloudforge/providers/aws_secret.py +83 -0
  582. tools/cloudforge/providers/azure_commercial.py +80 -0
  583. tools/cloudforge/providers/azure_gov.py +91 -0
  584. tools/cloudforge/providers/azure_secret.py +71 -0
  585. tools/cloudforge/providers/gcp.py +102 -0
  586. tools/cloudforge/providers/oci.py +102 -0
  587. tools/cloudforge/registry.py +140 -0
  588. tools/cloudforge/runbooks/__init__.py +2 -0
  589. tools/cloudforge/runbooks/ai_generator.py +119 -0
  590. tools/cloudforge/runbooks/dag_validator.py +219 -0
  591. tools/cloudforge/runbooks/engine.py +470 -0
  592. tools/cloudforge/runbooks/models.py +99 -0
  593. tools/cloudforge/runbooks/snippet_library.py +158 -0
  594. tools/cloudforge/runbooks/template_loader.py +122 -0
  595. tools/cloudforge/runbooks/visualization.py +108 -0
  596. tools/cloudforge/siem/__init__.py +2 -0
  597. tools/cloudforge/siem/alert_rules.py +86 -0
  598. tools/cloudforge/siem/correlation_engine.py +61 -0
  599. tools/cloudforge/siem/log_aggregator.py +113 -0
  600. tools/cloudforge/siem/siem_dashboard_data.py +28 -0
  601. tools/cloudforge/supply_chain/__init__.py +2 -0
  602. tools/cloudforge/supply_chain/bridge.py +33 -0
  603. tools/cloudforge/supply_chain/iac_dependency_scanner.py +36 -0
  604. tools/cloudforge/supply_chain/provider_trust_scorer.py +54 -0
  605. tools/compat/__init__.py +21 -0
  606. tools/compat/cli_harmonizer.py +251 -0
  607. tools/compat/datetime_utils.py +18 -0
  608. tools/compat/db_utils.py +190 -0
  609. tools/compat/platform_utils.py +123 -0
  610. tools/compliance/__init__.py +1 -0
  611. tools/compliance/accountability_manager.py +391 -0
  612. tools/compliance/ai_accountability_audit.py +287 -0
  613. tools/compliance/ai_impact_assessor.py +267 -0
  614. tools/compliance/ai_incident_response.py +295 -0
  615. tools/compliance/ai_inventory_manager.py +233 -0
  616. tools/compliance/ai_reassessment_scheduler.py +250 -0
  617. tools/compliance/ai_transparency_audit.py +247 -0
  618. tools/compliance/atlas_assessor.py +276 -0
  619. tools/compliance/atlas_report_generator.py +1199 -0
  620. tools/compliance/base_assessor.py +591 -0
  621. tools/compliance/cato_live_engine.py +607 -0
  622. tools/compliance/cato_monitor.py +1371 -0
  623. tools/compliance/cato_scheduler.py +698 -0
  624. tools/compliance/cjis_assessor.py +76 -0
  625. tools/compliance/classification_manager.py +1340 -0
  626. tools/compliance/cmmc_assessor.py +1478 -0
  627. tools/compliance/cmmc_report_generator.py +1087 -0
  628. tools/compliance/compliance_detector.py +452 -0
  629. tools/compliance/compliance_exporter.py +418 -0
  630. tools/compliance/compliance_status.py +810 -0
  631. tools/compliance/control_mapper.py +488 -0
  632. tools/compliance/crosswalk_engine.py +1208 -0
  633. tools/compliance/cssp_assessor.py +1032 -0
  634. tools/compliance/cssp_evidence_collector.py +716 -0
  635. tools/compliance/cssp_report_generator.py +1103 -0
  636. tools/compliance/cui_marker.py +387 -0
  637. tools/compliance/diagram_validator.py +599 -0
  638. tools/compliance/emass/__init__.py +2 -0
  639. tools/compliance/emass/emass_client.py +822 -0
  640. tools/compliance/emass/emass_export.py +758 -0
  641. tools/compliance/emass/emass_sync.py +807 -0
  642. tools/compliance/eu_ai_act_classifier.py +193 -0
  643. tools/compliance/evidence_collector.py +459 -0
  644. tools/compliance/fairness_assessor.py +310 -0
  645. tools/compliance/fedramp_20x_ksi_emitter.py +692 -0
  646. tools/compliance/fedramp_assessor.py +1795 -0
  647. tools/compliance/fedramp_authorization_packager.py +137 -0
  648. tools/compliance/fedramp_ksi_generator.py +349 -0
  649. tools/compliance/fedramp_report_generator.py +1115 -0
  650. tools/compliance/fips199_categorizer.py +869 -0
  651. tools/compliance/fips200_validator.py +304 -0
  652. tools/compliance/firmware_sbom.py +646 -0
  653. tools/compliance/gao_ai_assessor.py +228 -0
  654. tools/compliance/gao_evidence_builder.py +302 -0
  655. tools/compliance/hipaa_assessor.py +78 -0
  656. tools/compliance/hitrust_assessor.py +49 -0
  657. tools/compliance/incident_response_plan.py +705 -0
  658. tools/compliance/inheritance_engine.py +693 -0
  659. tools/compliance/iso27001_assessor.py +92 -0
  660. tools/compliance/iso42001_assessor.py +114 -0
  661. tools/compliance/ivv_assessor.py +2314 -0
  662. tools/compliance/ivv_report_generator.py +1649 -0
  663. tools/compliance/model_card_generator.py +291 -0
  664. tools/compliance/mosa_assessor.py +117 -0
  665. tools/compliance/multi_regime_assessor.py +441 -0
  666. tools/compliance/narrative_generator.py +1012 -0
  667. tools/compliance/narrative_quality_gate.py +701 -0
  668. tools/compliance/narrative_workflow.py +814 -0
  669. tools/compliance/nist_800_207_assessor.py +191 -0
  670. tools/compliance/nist_ai_600_1_assessor.py +185 -0
  671. tools/compliance/nist_ai_rmf_assessor.py +110 -0
  672. tools/compliance/nist_lookup.py +244 -0
  673. tools/compliance/omb_m25_21_assessor.py +225 -0
  674. tools/compliance/omb_m26_04_assessor.py +185 -0
  675. tools/compliance/oscal_catalog_adapter.py +395 -0
  676. tools/compliance/oscal_generator.py +2157 -0
  677. tools/compliance/oscal_tools.py +1182 -0
  678. tools/compliance/oscal_validator.py +692 -0
  679. tools/compliance/owasp_agentic_assessor.py +227 -0
  680. tools/compliance/owasp_asi_assessor.py +197 -0
  681. tools/compliance/owasp_llm_assessor.py +245 -0
  682. tools/compliance/pci_dss_assessor.py +80 -0
  683. tools/compliance/pi_compliance_tracker.py +1447 -0
  684. tools/compliance/poam_generator.py +388 -0
  685. tools/compliance/resolve_marking.py +272 -0
  686. tools/compliance/sbd_assessor.py +2070 -0
  687. tools/compliance/sbd_report_generator.py +1223 -0
  688. tools/compliance/sbom_generator.py +993 -0
  689. tools/compliance/siem_config_generator.py +661 -0
  690. tools/compliance/slsa_attestation_generator.py +479 -0
  691. tools/compliance/soc2_assessor.py +77 -0
  692. tools/compliance/ssp_generator.py +556 -0
  693. tools/compliance/stig_checker.py +712 -0
  694. tools/compliance/swft_evidence_bundler.py +326 -0
  695. tools/compliance/system_card_generator.py +303 -0
  696. tools/compliance/template_exchange.py +513 -0
  697. tools/compliance/traceability_matrix.py +1268 -0
  698. tools/compliance/universal_classification_manager.py +1159 -0
  699. tools/compliance/xacta/__init__.py +2 -0
  700. tools/compliance/xacta/xacta_client.py +438 -0
  701. tools/compliance/xacta/xacta_export.py +546 -0
  702. tools/compliance/xacta/xacta_sync.py +322 -0
  703. tools/compliance/xai_assessor.py +231 -0
  704. tools/core/__init__.py +2 -0
  705. tools/core/circuit_breaker.py +353 -0
  706. tools/core/compliance_sidecar.py +344 -0
  707. tools/core/container.py +110 -0
  708. tools/core/errors.py +256 -0
  709. tools/core/feature_flags.py +311 -0
  710. tools/core/task_dlq.py +350 -0
  711. tools/dashboard/__init__.py +2 -0
  712. tools/dashboard/app.py +6288 -0
  713. tools/dashboard/templates/agent_evolution.html +287 -0
  714. tools/dashboard/templates/agents/list.html +71 -0
  715. tools/dashboard/templates/agents.html +132 -0
  716. tools/dashboard/templates/architecture.html +289 -0
  717. tools/dashboard/templates/ato_simulator.html +170 -0
  718. tools/dashboard/templates/audit_engine.html +844 -0
  719. tools/dashboard/templates/base.html +236 -0
  720. tools/dashboard/templates/cato_live.html +116 -0
  721. tools/dashboard/templates/cloudforge.html +195 -0
  722. tools/dashboard/templates/cloudforge_finops.html +111 -0
  723. tools/dashboard/templates/cloudforge_hybrid.html +122 -0
  724. tools/dashboard/templates/cloudforge_metastore.html +234 -0
  725. tools/dashboard/templates/cloudforge_migration.html +87 -0
  726. tools/dashboard/templates/cloudforge_runbooks.html +201 -0
  727. tools/dashboard/templates/cloudforge_siem.html +94 -0
  728. tools/dashboard/templates/compliance_accel.html +292 -0
  729. tools/dashboard/templates/crashes.html +122 -0
  730. tools/dashboard/templates/databridge.html +305 -0
  731. tools/dashboard/templates/databridge_analytics.html +195 -0
  732. tools/dashboard/templates/databridge_mapping.html +345 -0
  733. tools/dashboard/templates/databridge_messaging.html +321 -0
  734. tools/dashboard/templates/decisions.html +258 -0
  735. tools/dashboard/templates/devices.html +151 -0
  736. tools/dashboard/templates/devsecops_maturity.html +278 -0
  737. tools/dashboard/templates/edge_ai.html +128 -0
  738. tools/dashboard/templates/firmware.html +120 -0
  739. tools/dashboard/templates/firmware_sbom.html +193 -0
  740. tools/dashboard/templates/forge_hub.html +196 -0
  741. tools/dashboard/templates/forge_studio.html +379 -0
  742. tools/dashboard/templates/forge_studio_analytics.html +360 -0
  743. tools/dashboard/templates/forge_studio_builder.html +1637 -0
  744. tools/dashboard/templates/forge_studio_compliance.html +310 -0
  745. tools/dashboard/templates/forge_studio_deploy.html +573 -0
  746. tools/dashboard/templates/forge_studio_enterprise.html +888 -0
  747. tools/dashboard/templates/forge_studio_marketplace.html +502 -0
  748. tools/dashboard/templates/forge_studio_workflow.html +696 -0
  749. tools/dashboard/templates/golden_path.html +175 -0
  750. tools/dashboard/templates/govcon.html +280 -0
  751. tools/dashboard/templates/harness.html +148 -0
  752. tools/dashboard/templates/index.html +207 -0
  753. tools/dashboard/templates/intelligence.html +336 -0
  754. tools/dashboard/templates/knowledge/index.html +190 -0
  755. tools/dashboard/templates/knowledge_graph.html +739 -0
  756. tools/dashboard/templates/login.html +51 -0
  757. tools/dashboard/templates/marketplace.html +336 -0
  758. tools/dashboard/templates/marketplace_admin.html +247 -0
  759. tools/dashboard/templates/missions.html +403 -0
  760. tools/dashboard/templates/narratives.html +154 -0
  761. tools/dashboard/templates/pr_intelligence.html +151 -0
  762. tools/dashboard/templates/proposals/detail.html +300 -0
  763. tools/dashboard/templates/proposals/list.html +52 -0
  764. tools/dashboard/templates/proposals/sam_detail.html +132 -0
  765. tools/dashboard/templates/proposals/section_detail.html +375 -0
  766. tools/dashboard/templates/research.html +222 -0
  767. tools/dashboard/templates/resilience.html +300 -0
  768. tools/dashboard/templates/scorecard.html +162 -0
  769. tools/dashboard/templates/simulator.html +131 -0
  770. tools/dashboard/templates/template_exchange.html +147 -0
  771. tools/dashboard/templates/thread_heatmap.html +151 -0
  772. tools/dashboard/templates/threat_model.html +195 -0
  773. tools/dashboard/templates/vsm.html +141 -0
  774. tools/dashboard/templates/writeguard.html +277 -0
  775. tools/databridge/__init__.py +5 -0
  776. tools/databridge/agent/__init__.py +2 -0
  777. tools/databridge/agent/daemon.py +227 -0
  778. tools/databridge/agent/tunnel.py +101 -0
  779. tools/databridge/agent/ws_relay.py +91 -0
  780. tools/databridge/analytics.py +167 -0
  781. tools/databridge/arrow_pipeline.py +327 -0
  782. tools/databridge/connection_manager.py +424 -0
  783. tools/databridge/connector.py +331 -0
  784. tools/databridge/connectors/__init__.py +2 -0
  785. tools/databridge/connectors/argocd_connector.py +160 -0
  786. tools/databridge/connectors/avro_connector.py +203 -0
  787. tools/databridge/connectors/azure_blob.py +63 -0
  788. tools/databridge/connectors/cdc_connector.py +205 -0
  789. tools/databridge/connectors/csv_connector.py +172 -0
  790. tools/databridge/connectors/datadog_connector.py +153 -0
  791. tools/databridge/connectors/discord_messaging.py +215 -0
  792. tools/databridge/connectors/dynamics365.py +151 -0
  793. tools/databridge/connectors/elasticsearch_connector.py +145 -0
  794. tools/databridge/connectors/email_base.py +114 -0
  795. tools/databridge/connectors/excel_connector.py +175 -0
  796. tools/databridge/connectors/fsspec_base.py +300 -0
  797. tools/databridge/connectors/gcs.py +53 -0
  798. tools/databridge/connectors/github_connector.py +138 -0
  799. tools/databridge/connectors/gitlab_connector.py +132 -0
  800. tools/databridge/connectors/gmail_connector.py +182 -0
  801. tools/databridge/connectors/hdfs.py +57 -0
  802. tools/databridge/connectors/health_base.py +401 -0
  803. tools/databridge/connectors/hubspot.py +124 -0
  804. tools/databridge/connectors/imap_connector.py +171 -0
  805. tools/databridge/connectors/jenkins_connector.py +138 -0
  806. tools/databridge/connectors/jira_connector.py +86 -0
  807. tools/databridge/connectors/json_connector.py +184 -0
  808. tools/databridge/connectors/kafka_connector.py +246 -0
  809. tools/databridge/connectors/kinesis_connector.py +238 -0
  810. tools/databridge/connectors/local_fs.py +30 -0
  811. tools/databridge/connectors/matrix.py +197 -0
  812. tools/databridge/connectors/mattermost_messaging.py +184 -0
  813. tools/databridge/connectors/messaging_base.py +172 -0
  814. tools/databridge/connectors/mssql.py +63 -0
  815. tools/databridge/connectors/mysql.py +57 -0
  816. tools/databridge/connectors/netsuite.py +170 -0
  817. tools/databridge/connectors/o365_mail.py +196 -0
  818. tools/databridge/connectors/oracle.py +65 -0
  819. tools/databridge/connectors/pagerduty_connector.py +162 -0
  820. tools/databridge/connectors/parquet_connector.py +131 -0
  821. tools/databridge/connectors/postgresql.py +58 -0
  822. tools/databridge/connectors/s3.py +65 -0
  823. tools/databridge/connectors/saas_base.py +198 -0
  824. tools/databridge/connectors/salesforce.py +126 -0
  825. tools/databridge/connectors/sap.py +89 -0
  826. tools/databridge/connectors/servicenow.py +60 -0
  827. tools/databridge/connectors/signal_messaging.py +150 -0
  828. tools/databridge/connectors/slack_messaging.py +203 -0
  829. tools/databridge/connectors/smtp_connector.py +126 -0
  830. tools/databridge/connectors/soap_base.py +258 -0
  831. tools/databridge/connectors/splunk_connector.py +171 -0
  832. tools/databridge/connectors/sql_base.py +310 -0
  833. tools/databridge/connectors/sqlite_connector.py +76 -0
  834. tools/databridge/connectors/teams.py +148 -0
  835. tools/databridge/connectors/telegram.py +192 -0
  836. tools/databridge/connectors/whatsapp.py +137 -0
  837. tools/databridge/data_profiler.py +99 -0
  838. tools/databridge/forge/__init__.py +6 -0
  839. tools/databridge/forge/base_selector.py +150 -0
  840. tools/databridge/forge/code_generator.py +206 -0
  841. tools/databridge/forge/community_hub.py +539 -0
  842. tools/databridge/forge/forge_agent.py +306 -0
  843. tools/databridge/forge/import_handler.py +133 -0
  844. tools/databridge/forge/integration_tester.py +127 -0
  845. tools/databridge/forge/marketplace_publisher.py +164 -0
  846. tools/databridge/forge/promoter.py +159 -0
  847. tools/databridge/forge/sandbox_manager.py +257 -0
  848. tools/databridge/forge/spec_parser.py +358 -0
  849. tools/databridge/forge/static_validator.py +363 -0
  850. tools/databridge/forge/templates/__init__.py +591 -0
  851. tools/databridge/format_converter.py +188 -0
  852. tools/databridge/mapping_engine.py +348 -0
  853. tools/databridge/messaging/__init__.py +5 -0
  854. tools/databridge/messaging/agent_bridge.py +254 -0
  855. tools/databridge/messaging/message_envelope.py +111 -0
  856. tools/databridge/messaging/message_logger.py +204 -0
  857. tools/databridge/messaging/messaging_daemon.py +326 -0
  858. tools/databridge/messaging/oauth2_manager.py +411 -0
  859. tools/databridge/pii_detector.py +221 -0
  860. tools/databridge/registry.py +352 -0
  861. tools/databridge/relay_server.py +105 -0
  862. tools/databridge/scale/__init__.py +16 -0
  863. tools/databridge/scale/backpressure.py +134 -0
  864. tools/databridge/scale/chunked_pipeline.py +169 -0
  865. tools/databridge/scale/connection_pool.py +293 -0
  866. tools/databridge/scale/engine.py +492 -0
  867. tools/databridge/scale/worker_pool.py +140 -0
  868. tools/databridge/scale/write_batcher.py +250 -0
  869. tools/databridge/schema_engine.py +324 -0
  870. tools/databridge/stream_manager.py +225 -0
  871. tools/databridge/sync_engine.py +411 -0
  872. tools/databridge/transforms.py +302 -0
  873. tools/db/__init__.py +1 -0
  874. tools/db/backup.py +312 -0
  875. tools/db/backup_manager.py +832 -0
  876. tools/db/init_icdev_db.py +7753 -0
  877. tools/db/init_sparkpilot_db.py +431 -0
  878. tools/db/migrate.py +177 -0
  879. tools/db/migrate_innovation_audit.py +165 -0
  880. tools/db/migration_runner.py +548 -0
  881. tools/db/migrations/001_baseline/meta.json +9 -0
  882. tools/db/migrations/001_baseline/up.py +67 -0
  883. tools/db/migrations/002_memory_enhancements/down.sql +8 -0
  884. tools/db/migrations/002_memory_enhancements/meta.json +9 -0
  885. tools/db/migrations/002_memory_enhancements/up.py +119 -0
  886. tools/db/migrations/003_dev_profiles/meta.json +8 -0
  887. tools/db/migrations/003_dev_profiles/up.py +93 -0
  888. tools/db/migrations/004_innovation_engine/down.py +19 -0
  889. tools/db/migrations/004_innovation_engine/up.py +227 -0
  890. tools/db/migrations/005_phase_37_ai_security/down.py +19 -0
  891. tools/db/migrations/005_phase_37_ai_security/up.py +257 -0
  892. tools/db/migrations/006_phase_36_evolution/down.py +21 -0
  893. tools/db/migrations/006_phase_36_evolution/up.py +323 -0
  894. tools/db/migrations/007_phase_38_cloud/down.py +14 -0
  895. tools/db/migrations/007_phase_38_cloud/up.py +110 -0
  896. tools/db/migrations/008_phase36_37_integration/up.py +55 -0
  897. tools/db/migrations/__init__.py +2 -0
  898. tools/db/pg_migrate.py +642 -0
  899. tools/db/storage.py +1080 -0
  900. tools/decisions/__init__.py +2 -0
  901. tools/decisions/dmn_engine.py +695 -0
  902. tools/devsecops/__init__.py +2 -0
  903. tools/devsecops/attestation_manager.py +449 -0
  904. tools/devsecops/network_segmentation_generator.py +604 -0
  905. tools/devsecops/pdp_config_generator.py +1246 -0
  906. tools/devsecops/pipeline_security_generator.py +475 -0
  907. tools/devsecops/policy_generator.py +644 -0
  908. tools/devsecops/profile_manager.py +374 -0
  909. tools/devsecops/service_mesh_generator.py +1063 -0
  910. tools/devsecops/zta_maturity_scorer.py +355 -0
  911. tools/devsecops/zta_terraform_generator.py +1301 -0
  912. tools/edge_ai/__init__.py +2 -0
  913. tools/edge_ai/model_manager.py +200 -0
  914. tools/embedded/__init__.py +2 -0
  915. tools/embedded/cmake_generator.py +318 -0
  916. tools/embedded/crash_analyzer.py +191 -0
  917. tools/embedded/nl_to_firmware.py +277 -0
  918. tools/events/__init__.py +1 -0
  919. tools/events/event_bus.py +199 -0
  920. tools/finetune/pair_generator.py +832 -0
  921. tools/fleet/__init__.py +2 -0
  922. tools/fleet/device_registry.py +148 -0
  923. tools/fleet/ota_manager.py +153 -0
  924. tools/forge_studio/__init__.py +13 -0
  925. tools/forge_studio/analytics/__init__.py +0 -0
  926. tools/forge_studio/analytics/process_miner.py +383 -0
  927. tools/forge_studio/audit.py +183 -0
  928. tools/forge_studio/blueprint/__init__.py +2 -0
  929. tools/forge_studio/blueprint/build_tracker.py +317 -0
  930. tools/forge_studio/blueprint/export_engine.py +441 -0
  931. tools/forge_studio/blueprint/parent_client.py +335 -0
  932. tools/forge_studio/catalog/__init__.py +2 -0
  933. tools/forge_studio/catalog/component_registry.py +176 -0
  934. tools/forge_studio/catalog/schema_validator.py +193 -0
  935. tools/forge_studio/compliance/__init__.py +1 -0
  936. tools/forge_studio/compliance/compliance_wiring.py +554 -0
  937. tools/forge_studio/deploy/__init__.py +1 -0
  938. tools/forge_studio/deploy/airgap_packager.py +466 -0
  939. tools/forge_studio/deploy/deploy_engine.py +1792 -0
  940. tools/forge_studio/deploy/env_manager.py +431 -0
  941. tools/forge_studio/eject/__init__.py +2 -0
  942. tools/forge_studio/eject/docker_compose_generator.py +237 -0
  943. tools/forge_studio/eject/eject_engine.py +230 -0
  944. tools/forge_studio/eject/expo_scaffolder.py +303 -0
  945. tools/forge_studio/eject/nextjs_scaffolder.py +338 -0
  946. tools/forge_studio/enterprise/__init__.py +0 -0
  947. tools/forge_studio/enterprise/custom_frameworks.py +826 -0
  948. tools/forge_studio/enterprise/hardening_engine.py +1530 -0
  949. tools/forge_studio/enterprise/sso_manager.py +718 -0
  950. tools/forge_studio/enterprise/whitelabel_engine.py +887 -0
  951. tools/forge_studio/formula/__init__.py +0 -0
  952. tools/forge_studio/formula/expression_engine.py +562 -0
  953. tools/forge_studio/formula/formula_registry.py +265 -0
  954. tools/forge_studio/generator/__init__.py +2 -0
  955. tools/forge_studio/generator/app_generator.py +584 -0
  956. tools/forge_studio/generator/complexity_detector.py +368 -0
  957. tools/forge_studio/generator/prompt_templates.py +104 -0
  958. tools/forge_studio/generator/spec_builder.py +192 -0
  959. tools/forge_studio/intake_bridge.py +898 -0
  960. tools/forge_studio/marketplace/__init__.py +0 -0
  961. tools/forge_studio/marketplace/component_hub.py +428 -0
  962. tools/forge_studio/models.py +369 -0
  963. tools/forge_studio/renderer/__init__.py +2 -0
  964. tools/forge_studio/renderer/json_render_engine.py +623 -0
  965. tools/forge_studio/renderer/layout_engine.py +214 -0
  966. tools/forge_studio/renderer/rn_component_map.py +182 -0
  967. tools/forge_studio/supabase/__init__.py +2 -0
  968. tools/forge_studio/supabase/auth_generator.py +283 -0
  969. tools/forge_studio/supabase/migration_generator.py +93 -0
  970. tools/forge_studio/supabase/schema_generator.py +281 -0
  971. tools/forge_studio/tenant_manager.py +387 -0
  972. tools/forge_studio/workflow/__init__.py +2 -0
  973. tools/forge_studio/workflow/bpmn_adapter.py +489 -0
  974. tools/govcon/draft_orchestrator.py +1151 -0
  975. tools/govcon/engine_enrichment.py +373 -0
  976. tools/govcon/knowledge_base.py +487 -0
  977. tools/govcon/knowledge_ingestion.py +510 -0
  978. tools/govcon/sam_scanner.py +754 -0
  979. tools/harness/__init__.py +6 -0
  980. tools/harness/exit_criteria_evaluator.py +231 -0
  981. tools/harness/maturity_assessor.py +347 -0
  982. tools/harness/scaffold_harness.py +416 -0
  983. tools/harness/trace_analyzer.py +281 -0
  984. tools/infra/__init__.py +1 -0
  985. tools/infra/ansible_generator.py +867 -0
  986. tools/infra/dockerfile_generator.py +359 -0
  987. tools/infra/infra_status.py +384 -0
  988. tools/infra/ironbank_metadata_generator.py +403 -0
  989. tools/infra/k8s_generator.py +1000 -0
  990. tools/infra/pipeline_generator.py +830 -0
  991. tools/infra/rollback.py +389 -0
  992. tools/infra/terraform_generator.py +1140 -0
  993. tools/infra/terraform_generator_azure.py +1252 -0
  994. tools/infra/terraform_generator_gcp.py +951 -0
  995. tools/infra/terraform_generator_ibm.py +359 -0
  996. tools/infra/terraform_generator_oci.py +918 -0
  997. tools/infra/terraform_generator_onprem.py +318 -0
  998. tools/knowledge/__init__.py +1 -0
  999. tools/knowledge/knowledge_ingest.py +281 -0
  1000. tools/knowledge/pattern_detector.py +681 -0
  1001. tools/knowledge/recommendation_engine.py +449 -0
  1002. tools/knowledge/self_heal_analyzer.py +492 -0
  1003. tools/knowledge_graph/__init__.py +2 -0
  1004. tools/knowledge_graph/graph_rag.py +498 -0
  1005. tools/knowledge_graph/ingester.py +406 -0
  1006. tools/knowledge_graph/insight_generator.py +369 -0
  1007. tools/knowledge_graph/text_network.py +832 -0
  1008. tools/llm/__init__.py +72 -0
  1009. tools/llm/anthropic_provider.py +170 -0
  1010. tools/llm/azure_openai_provider.py +338 -0
  1011. tools/llm/bedrock_provider.py +315 -0
  1012. tools/llm/embedding_provider.py +438 -0
  1013. tools/llm/gemini_provider.py +381 -0
  1014. tools/llm/ibm_watsonx_provider.py +231 -0
  1015. tools/llm/oci_genai_provider.py +462 -0
  1016. tools/llm/ollama_provider.py +350 -0
  1017. tools/llm/openai_provider.py +225 -0
  1018. tools/llm/prompt_registry.py +447 -0
  1019. tools/llm/provider.py +355 -0
  1020. tools/llm/provider_sdk.py +175 -0
  1021. tools/llm/router.py +1124 -0
  1022. tools/llm/semantic_cache.py +394 -0
  1023. tools/llm/vertex_ai_provider.py +374 -0
  1024. tools/maintenance/__init__.py +2 -0
  1025. tools/maintenance/dependency_scanner.py +1016 -0
  1026. tools/maintenance/maintenance_auditor.py +804 -0
  1027. tools/maintenance/remediation_engine.py +957 -0
  1028. tools/maintenance/vulnerability_checker.py +978 -0
  1029. tools/manifest.md +1066 -0
  1030. tools/marketplace/asset_installer.py +639 -0
  1031. tools/marketplace/feedback_validator.py +359 -0
  1032. tools/marketplace/license_client.py +458 -0
  1033. tools/marketplace/module_crypto.py +544 -0
  1034. tools/marketplace/module_runtime.py +236 -0
  1035. tools/marketplace/token_store.py +264 -0
  1036. tools/mbse/__init__.py +3 -0
  1037. tools/mbse/des_assessor.py +1173 -0
  1038. tools/mbse/des_report_generator.py +787 -0
  1039. tools/mbse/diagram_extractor.py +792 -0
  1040. tools/mbse/digital_thread.py +1650 -0
  1041. tools/mbse/model_code_generator.py +1115 -0
  1042. tools/mbse/model_control_mapper.py +410 -0
  1043. tools/mbse/pi_model_tracker.py +1079 -0
  1044. tools/mbse/reqif_parser.py +1468 -0
  1045. tools/mbse/sync_engine.py +1789 -0
  1046. tools/mbse/thread_heatmap.py +445 -0
  1047. tools/mbse/xmi_parser.py +1558 -0
  1048. tools/mcp/builder_server.py +64 -0
  1049. tools/mcp/compliance_server.py +64 -0
  1050. tools/mcp/connector_forge_server.py +155 -0
  1051. tools/mcp/core_server.py +64 -0
  1052. tools/mcp/devsecops_server.py +11 -0
  1053. tools/mcp/devsecops_zta_server.py +64 -0
  1054. tools/mcp/knowledge_server.py +64 -0
  1055. tools/mcp/monitor_server.py +64 -0
  1056. tools/mcp/ops_server.py +300 -0
  1057. tools/mcp/requirements_analyst_server.py +64 -0
  1058. tools/mcp/requirements_server.py +11 -0
  1059. tools/mcp/security_server.py +64 -0
  1060. tools/mcp/simulation_server.py +64 -0
  1061. tools/mcp/supply_chain_server.py +64 -0
  1062. tools/mcp/tool_registry.py +299 -0
  1063. tools/memory/__init__.py +2 -0
  1064. tools/memory/auto_capture.py +346 -0
  1065. tools/memory/embed_memory.py +157 -0
  1066. tools/memory/history_compressor.py +334 -0
  1067. tools/memory/hybrid_search.py +235 -0
  1068. tools/memory/maintenance_cron.py +288 -0
  1069. tools/memory/memory_consolidation.py +439 -0
  1070. tools/memory/memory_db.py +132 -0
  1071. tools/memory/memory_read.py +101 -0
  1072. tools/memory/memory_write.py +221 -0
  1073. tools/memory/semantic_search.py +138 -0
  1074. tools/memory/time_decay.py +434 -0
  1075. tools/missions/__init__.py +2 -0
  1076. tools/missions/mission_engine.py +459 -0
  1077. tools/monitor/__init__.py +1 -0
  1078. tools/monitor/alert_correlator.py +486 -0
  1079. tools/monitor/auto_resolver.py +603 -0
  1080. tools/monitor/health_checker.py +507 -0
  1081. tools/monitor/heartbeat_daemon.py +779 -0
  1082. tools/monitor/log_analyzer.py +507 -0
  1083. tools/monitor/metric_collector.py +484 -0
  1084. tools/mosa/__init__.py +10 -0
  1085. tools/mosa/icd_generator.py +358 -0
  1086. tools/mosa/modular_design_analyzer.py +682 -0
  1087. tools/mosa/mosa_code_enforcer.py +348 -0
  1088. tools/mosa/tsp_generator.py +265 -0
  1089. tools/observability/__init__.py +100 -0
  1090. tools/observability/genai_attributes.py +88 -0
  1091. tools/observability/instrumentation.py +140 -0
  1092. tools/observability/mlflow_exporter.py +193 -0
  1093. tools/observability/otel_tracer.py +168 -0
  1094. tools/observability/provenance/__init__.py +3 -0
  1095. tools/observability/provenance/prov_recorder.py +322 -0
  1096. tools/observability/shap/__init__.py +3 -0
  1097. tools/observability/shap/agent_shap.py +274 -0
  1098. tools/observability/sqlite_tracer.py +360 -0
  1099. tools/observability/trace_context.py +205 -0
  1100. tools/observability/tracer.py +230 -0
  1101. tools/orchestration/__init__.py +1 -0
  1102. tools/orchestration/peer_channels.py +254 -0
  1103. tools/orchestration/saga_coordinator.py +390 -0
  1104. tools/project/__init__.py +1 -0
  1105. tools/project/manifest_loader.py +418 -0
  1106. tools/project/project_create.py +350 -0
  1107. tools/project/project_list.py +171 -0
  1108. tools/project/project_scaffold.py +1715 -0
  1109. tools/project/project_status.py +478 -0
  1110. tools/project/session_context_builder.py +752 -0
  1111. tools/project/validate_manifest.py +54 -0
  1112. tools/rag/corrective_rag.py +582 -0
  1113. tools/rag/source_registry.py +482 -0
  1114. tools/requirements/__init__.py +1 -0
  1115. tools/requirements/ai_governance_scorer.py +207 -0
  1116. tools/requirements/boundary_analyzer.py +1281 -0
  1117. tools/requirements/clarification_engine.py +605 -0
  1118. tools/requirements/complexity_scorer.py +369 -0
  1119. tools/requirements/consistency_analyzer.py +789 -0
  1120. tools/requirements/constitution_manager.py +592 -0
  1121. tools/requirements/decomposition_engine.py +764 -0
  1122. tools/requirements/document_extractor.py +1002 -0
  1123. tools/requirements/elicitation_techniques.py +508 -0
  1124. tools/requirements/gap_detector.py +260 -0
  1125. tools/requirements/intake_engine.py +2175 -0
  1126. tools/requirements/prd_generator.py +839 -0
  1127. tools/requirements/prd_validator.py +584 -0
  1128. tools/requirements/readiness_scorer.py +302 -0
  1129. tools/requirements/spec_organizer.py +1015 -0
  1130. tools/requirements/spec_quality_checker.py +1083 -0
  1131. tools/requirements/traceability_builder.py +566 -0
  1132. tools/research/__init__.py +3 -0
  1133. tools/research/academic_scanner.py +130 -0
  1134. tools/research/build_buy_analyzer.py +229 -0
  1135. tools/research/challenge_scorer.py +280 -0
  1136. tools/research/community_scanner.py +174 -0
  1137. tools/research/cross_engine_bridge.py +124 -0
  1138. tools/research/dossier_generator.py +305 -0
  1139. tools/research/landscape_scanner.py +315 -0
  1140. tools/research/regulatory_scanner.py +248 -0
  1141. tools/research/research_manager.py +469 -0
  1142. tools/research/source_scanner.py +150 -0
  1143. tools/research/vertical_loader.py +118 -0
  1144. tools/saas/__init__.py +0 -0
  1145. tools/saas/licensing/__init__.py +0 -0
  1146. tools/saas/licensing/license_validator.py +345 -0
  1147. tools/scaffold/__init__.py +2 -0
  1148. tools/scaffold/golden_path.py +504 -0
  1149. tools/security/__init__.py +1 -0
  1150. tools/security/agent_output_validator.py +330 -0
  1151. tools/security/agent_trust_scorer.py +652 -0
  1152. tools/security/ai_bom_generator.py +718 -0
  1153. tools/security/ai_telemetry_logger.py +469 -0
  1154. tools/security/atlas_red_team.py +541 -0
  1155. tools/security/code_pattern_scanner.py +382 -0
  1156. tools/security/confabulation_detector.py +265 -0
  1157. tools/security/container_scanner.py +489 -0
  1158. tools/security/dependency_auditor.py +942 -0
  1159. tools/security/endpoint_security_scanner.py +626 -0
  1160. tools/security/mcp_tool_authorizer.py +242 -0
  1161. tools/security/output_verifier.py +427 -0
  1162. tools/security/prompt_injection_detector.py +737 -0
  1163. tools/security/sast_runner.py +946 -0
  1164. tools/security/secret_detector.py +376 -0
  1165. tools/security/threat_modeler.py +678 -0
  1166. tools/security/tool_chain_validator.py +357 -0
  1167. tools/security/vuln_scanner.py +536 -0
  1168. tools/simulation/__init__.py +2 -0
  1169. tools/simulation/ato_simulator.py +517 -0
  1170. tools/simulation/coa_generator.py +1539 -0
  1171. tools/simulation/monte_carlo.py +745 -0
  1172. tools/simulation/scenario_manager.py +1060 -0
  1173. tools/simulation/simulation_engine.py +1091 -0
  1174. tools/simulator/__init__.py +2 -0
  1175. tools/simulator/sim_runner.py +272 -0
  1176. tools/supply_chain/__init__.py +2 -0
  1177. tools/supply_chain/cve_triager.py +690 -0
  1178. tools/supply_chain/dependency_graph.py +630 -0
  1179. tools/supply_chain/isa_manager.py +526 -0
  1180. tools/supply_chain/scrm_assessor.py +531 -0
  1181. tools/supply_chain/slsa_verifier.py +473 -0
  1182. tools/testing/__init__.py +2 -0
  1183. tools/testing/acceptance_validator.py +411 -0
  1184. tools/testing/api_surface_extractor.py +749 -0
  1185. tools/testing/claude_dir_validator.py +831 -0
  1186. tools/testing/data_types.py +199 -0
  1187. tools/testing/e2e_runner.py +715 -0
  1188. tools/testing/fuzz_cli.py +306 -0
  1189. tools/testing/health_check.py +483 -0
  1190. tools/testing/platform_check.py +143 -0
  1191. tools/testing/production_audit.py +1836 -0
  1192. tools/testing/production_remediate.py +803 -0
  1193. tools/testing/screenshot_validator.py +538 -0
  1194. tools/testing/smoke_test.py +283 -0
  1195. tools/testing/test_agent_models.py +117 -0
  1196. tools/testing/test_orchestrator.py +957 -0
  1197. tools/testing/utils.py +229 -0
  1198. tools/writeguard/__init__.py +1 -0
  1199. tools/writeguard/main.py +1 -0
  1200. tools/writing/__init__.py +7 -0
  1201. tools/writing/ai_content_detector.py +316 -0
  1202. tools/writing/analysis_engine.py +454 -0
  1203. tools/writing/batch_analyzer.py +276 -0
  1204. tools/writing/coherence_analyzer.py +221 -0
  1205. tools/writing/govcon_bridge.py +509 -0
  1206. tools/writing/grammar_checker.py +270 -0
  1207. tools/writing/plagiarism_detector.py +106 -0
  1208. tools/writing/readability_scorer.py +201 -0
  1209. tools/writing/rewriter.py +96 -0
  1210. tools/writing/signal_registrar.py +167 -0
  1211. tools/writing/snippet_manager.py +276 -0
  1212. tools/writing/style_enforcer.py +220 -0
  1213. tools/writing/style_guide_manager.py +438 -0
  1214. tools/writing/tone_profiler.py +168 -0
@@ -0,0 +1,1340 @@
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
+ """Classification and Marking Manager for ICDEV.
8
+
9
+ Handles CUI, SECRET, and TOP SECRET classification markings and maps DoD
10
+ Impact Levels (IL4-IL4) to compliance baselines, encryption requirements,
11
+ network requirements, and cloud environments.
12
+
13
+ Loads impact-level profiles from context/compliance/impact_level_profiles.json
14
+ and marking configuration from args/classification_markings.yaml (with
15
+ backward-compatible fallback to args/cui_markings.yaml).
16
+
17
+ CLI:
18
+ python tools/compliance/classification_manager.py --impact-level IL4
19
+ python tools/compliance/classification_manager.py --classification SECRET --banner
20
+ python tools/compliance/classification_manager.py --code-header python --classification CUI
21
+ python tools/compliance/classification_manager.py --cross-domain IL4 IL4
22
+ python tools/compliance/classification_manager.py --validate proj-123 --json
23
+ """
24
+
25
+ import argparse
26
+ import json
27
+ import sqlite3
28
+ import sys
29
+ from datetime import datetime, timezone
30
+ from pathlib import Path
31
+ from typing import Any, Dict, List, Optional
32
+ from tools.db.storage import get_connection
33
+
34
+ # ---------------------------------------------------------------------------
35
+ # Paths and constants
36
+ # ---------------------------------------------------------------------------
37
+
38
+ BASE_DIR = Path(__file__).resolve().parent.parent.parent
39
+ IL_PROFILES_PATH = BASE_DIR / "context" / "compliance" / "impact_level_profiles.json"
40
+ MARKINGS_PATH = BASE_DIR / "args" / "classification_markings.yaml"
41
+ CUI_MARKINGS_PATH = BASE_DIR / "args" / "cui_markings.yaml"
42
+
43
+ VALID_CLASSIFICATIONS = ("PUBLIC", "CUI", "SECRET", "TOP SECRET", "TOP SECRET//SCI")
44
+ VALID_IMPACT_LEVELS = ("IL4", "IL4", "IL4", "IL4")
45
+
46
+ # Module-level caches (populated on first call)
47
+ _IL_PROFILES_CACHE: Optional[Dict] = None
48
+ _MARKINGS_CACHE: Optional[Dict] = None
49
+
50
+ # Classification-to-impact-level mapping
51
+ _CLASSIFICATION_MAP = {
52
+ "IL4": "PUBLIC",
53
+ "IL4": "CUI",
54
+ "IL4": "CUI",
55
+ "IL4": "SECRET",
56
+ }
57
+
58
+ # Language comment-style mapping (language key -> prefix style)
59
+ # Kept in-module so the tool works standalone without language_support.py.
60
+ _COMMENT_STYLES = {
61
+ "python": "hash",
62
+ "ruby": "hash",
63
+ "java": "c-style",
64
+ "go": "c-style",
65
+ "rust": "c-style",
66
+ "csharp": "c-style",
67
+ "c#": "c-style",
68
+ "typescript": "c-style",
69
+ "javascript": "c-style",
70
+ "xml": "xml-style",
71
+ "html": "xml-style",
72
+ }
73
+
74
+ # Portion-marking shortcuts
75
+ _PORTION_MARKS = {
76
+ "PUBLIC": "",
77
+ "CUI": "(CUI)",
78
+ "SECRET": "(S)",
79
+ "TOP SECRET": "(TS)",
80
+ "TOP SECRET//SCI": "(TS//SCI)",
81
+ }
82
+
83
+
84
+ # ---------------------------------------------------------------------------
85
+ # Profile / config loaders
86
+ # ---------------------------------------------------------------------------
87
+
88
+ def load_impact_level_profiles() -> Dict:
89
+ """Load and cache DoD Impact Level profiles from JSON.
90
+
91
+ Returns:
92
+ Dict keyed by impact level (IL4, IL4, IL4, IL4) with full profile
93
+ data including classification, compliance baselines, encryption and
94
+ network requirements.
95
+
96
+ Falls back to a minimal default dict when the file is missing so that
97
+ downstream functions still return sensible CUI defaults.
98
+ """
99
+ global _IL_PROFILES_CACHE
100
+
101
+ if _IL_PROFILES_CACHE is not None:
102
+ return _IL_PROFILES_CACHE
103
+
104
+ if IL_PROFILES_PATH.exists():
105
+ try:
106
+ with open(IL_PROFILES_PATH, "r", encoding="utf-8") as fh:
107
+ raw = json.load(fh)
108
+ _IL_PROFILES_CACHE = raw.get("profiles", raw)
109
+ # Also stash cross-domain requirements alongside profiles
110
+ if "cross_domain_requirements" in raw:
111
+ _IL_PROFILES_CACHE["_cross_domain"] = raw["cross_domain_requirements"]
112
+ return _IL_PROFILES_CACHE
113
+ except (json.JSONDecodeError, OSError) as exc:
114
+ print(
115
+ f"Warning: Could not load IL profiles ({exc}); "
116
+ "using built-in CUI defaults.",
117
+ file=sys.stderr,
118
+ )
119
+
120
+ # Minimal fallback
121
+ _IL_PROFILES_CACHE = {
122
+ "IL4": {
123
+ "classification": "CUI",
124
+ "fedramp_baseline": "moderate",
125
+ "cmmc_level": 2,
126
+ "nist_800_171_required": True,
127
+ "cloud_environments": ["aws-govcloud"],
128
+ "marking_banner": "CUI // SP-CTI",
129
+ "marking_category": "CTI",
130
+ "required_controls_overlay": [],
131
+ "encryption_requirements": {
132
+ "at_rest": "FIPS 140-2 validated modules",
133
+ "in_transit": "TLS 1.2+ with FIPS 140-2 validated modules",
134
+ "key_management": "Customer managed keys in FIPS 140-2 validated HSM",
135
+ },
136
+ "network_requirements": {
137
+ "dedicated_infrastructure": False,
138
+ "cross_domain": False,
139
+ "vpn_required": True,
140
+ "sipr_only": False,
141
+ },
142
+ },
143
+ }
144
+ return _IL_PROFILES_CACHE
145
+
146
+
147
+ def load_markings_config() -> Dict:
148
+ """Load and cache classification-marking YAML configuration.
149
+
150
+ Tries ``args/classification_markings.yaml`` first, then falls back to
151
+ ``args/cui_markings.yaml`` for backward compatibility, and finally to
152
+ hard-coded CUI defaults if neither file is available.
153
+
154
+ Returns:
155
+ Dict with keys like ``banner_top``, ``banner_bottom``,
156
+ ``designation_indicator``, ``portion_marking``, ``code_header``,
157
+ ``document_header``, ``document_footer``.
158
+ """
159
+ global _MARKINGS_CACHE
160
+
161
+ if _MARKINGS_CACHE is not None:
162
+ return _MARKINGS_CACHE
163
+
164
+ # Hard-coded defaults (CUI)
165
+ defaults: Dict[str, Any] = {
166
+ "banner_top": "CUI // SP-CTI",
167
+ "banner_bottom": "CUI // SP-CTI",
168
+ "designation_indicator": {
169
+ "controlled_by": "Department of Defense",
170
+ "categories": "CTI",
171
+ "distribution": "Distribution D",
172
+ "poc": "ICDEV System Administrator",
173
+ },
174
+ "portion_marking": "(CUI)",
175
+ "decontrol_instructions": "Decontrol on: 10 years from creation date",
176
+ "code_header": (
177
+ "CUI // SP-CTI\n"
178
+ "Controlled by: Department of Defense\n"
179
+ "CUI Category: CTI\n"
180
+ "Distribution: D\n"
181
+ "POC: ICDEV System Administrator"
182
+ ),
183
+ "document_header": (
184
+ "////////////////////////////////////////////////////////////////////\n"
185
+ "CONTROLLED UNCLASSIFIED INFORMATION (CUI) // SP-CTI\n"
186
+ "Distribution: Distribution D -- Authorized DoD Personnel Only\n"
187
+ "////////////////////////////////////////////////////////////////////"
188
+ ),
189
+ "document_footer": (
190
+ "////////////////////////////////////////////////////////////////////\n"
191
+ "CUI // SP-CTI | Department of Defense\n"
192
+ "////////////////////////////////////////////////////////////////////"
193
+ ),
194
+ }
195
+
196
+ # Try primary path, then fallback
197
+ for config_path in (MARKINGS_PATH, CUI_MARKINGS_PATH):
198
+ if not config_path.exists():
199
+ continue
200
+ try:
201
+ import yaml # type: ignore[import-untyped]
202
+
203
+ with open(config_path, "r", encoding="utf-8") as fh:
204
+ loaded = yaml.safe_load(fh)
205
+ if loaded and isinstance(loaded, dict):
206
+ for key, value in loaded.items():
207
+ defaults[key] = value
208
+ break # stop after the first successful load
209
+ except ImportError:
210
+ # PyYAML not available -- simple key: value parsing
211
+ try:
212
+ with open(config_path, "r", encoding="utf-8") as fh:
213
+ _parse_simple_yaml(fh.read(), defaults)
214
+ break
215
+ except Exception:
216
+ continue
217
+ except Exception:
218
+ continue
219
+
220
+ _MARKINGS_CACHE = defaults
221
+ return _MARKINGS_CACHE
222
+
223
+
224
+ def _parse_simple_yaml(content: str, config: Dict) -> None:
225
+ """Minimal YAML-like parser for flat ``key: value`` and ``|`` blocks."""
226
+ lines = content.split("\n")
227
+ current_key: Optional[str] = None
228
+ multiline_buf: List[str] = []
229
+ in_multiline = False
230
+
231
+ for line in lines:
232
+ stripped = line.strip()
233
+ if not stripped or stripped.startswith("#"):
234
+ if in_multiline:
235
+ multiline_buf.append("")
236
+ continue
237
+
238
+ if in_multiline:
239
+ if line and not line[0].isspace():
240
+ config[current_key] = "\n".join(multiline_buf).strip() # type: ignore[index]
241
+ in_multiline = False
242
+ multiline_buf = []
243
+ else:
244
+ multiline_buf.append(line.strip())
245
+ continue
246
+
247
+ if ":" in stripped:
248
+ key, _, value = stripped.partition(":")
249
+ key = key.strip()
250
+ value = value.strip()
251
+ if value == "|":
252
+ current_key = key
253
+ in_multiline = True
254
+ multiline_buf = []
255
+ elif value and not value.startswith("{"):
256
+ value = value.strip('"').strip("'")
257
+ config[key] = value
258
+
259
+ if in_multiline and multiline_buf:
260
+ config[current_key] = "\n".join(multiline_buf).strip() # type: ignore[index]
261
+
262
+
263
+ # ---------------------------------------------------------------------------
264
+ # Database helpers
265
+ # ---------------------------------------------------------------------------
266
+
267
+
268
+ def _get_project(conn: sqlite3.Connection, project_id: str) -> Dict:
269
+ """Load project row from the ``projects`` table."""
270
+ row = conn.execute(
271
+ "SELECT * FROM projects WHERE id = ?", (project_id,)
272
+ ).fetchone()
273
+ if not row:
274
+ raise ValueError(f"Project '{project_id}' not found in database.")
275
+ return dict(row)
276
+
277
+
278
+ def _log_audit_event(
279
+ conn: sqlite3.Connection,
280
+ project_id: str,
281
+ action: str,
282
+ details: Dict,
283
+ ) -> None:
284
+ """Log an append-only audit event (NIST 800-53 AU compliant)."""
285
+ try:
286
+ conn.execute(
287
+ """INSERT INTO audit_trail
288
+ (project_id, event_type, actor, action, details,
289
+ affected_files, classification)
290
+ VALUES (?, ?, ?, ?, ?, ?, ?)""",
291
+ (
292
+ project_id,
293
+ "classification.validation",
294
+ "icdev-compliance-engine",
295
+ action,
296
+ json.dumps(details),
297
+ json.dumps([]),
298
+ "CUI",
299
+ ),
300
+ )
301
+ conn.commit()
302
+ except Exception as exc:
303
+ print(
304
+ f"Warning: Could not log audit event: {exc}",
305
+ file=sys.stderr,
306
+ )
307
+
308
+
309
+ # ---------------------------------------------------------------------------
310
+ # Core functions
311
+ # ---------------------------------------------------------------------------
312
+
313
+ def get_impact_level_profile(il_level: str) -> Dict:
314
+ """Return the full profile dict for a given impact level.
315
+
316
+ Args:
317
+ il_level: One of IL4, IL4, IL4, IL4.
318
+
319
+ Returns:
320
+ Dict containing classification, compliance, encryption, network,
321
+ and other profile fields.
322
+
323
+ Raises:
324
+ ValueError: If *il_level* is not a valid impact level.
325
+ """
326
+ il_upper = il_level.upper()
327
+ if il_upper not in VALID_IMPACT_LEVELS:
328
+ raise ValueError(
329
+ f"Invalid impact level '{il_level}'. "
330
+ f"Valid levels: {', '.join(VALID_IMPACT_LEVELS)}"
331
+ )
332
+
333
+ profiles = load_impact_level_profiles()
334
+ profile = profiles.get(il_upper)
335
+ if profile is None:
336
+ raise ValueError(
337
+ f"Profile for '{il_upper}' not found in impact level data. "
338
+ f"Available profiles: {', '.join(k for k in profiles if not k.startswith('_'))}"
339
+ )
340
+ return profile
341
+
342
+
343
+ def get_classification_for_il(il_level: str) -> str:
344
+ """Return the classification string for an impact level.
345
+
346
+ Mapping:
347
+ IL4 -> PUBLIC, IL4 -> CUI, IL4 -> CUI, IL4 -> SECRET.
348
+
349
+ Args:
350
+ il_level: One of IL4, IL4, IL4, IL4.
351
+
352
+ Returns:
353
+ Classification string.
354
+
355
+ Raises:
356
+ ValueError: If *il_level* is not valid.
357
+ """
358
+ il_upper = il_level.upper()
359
+ if il_upper not in VALID_IMPACT_LEVELS:
360
+ raise ValueError(
361
+ f"Invalid impact level '{il_level}'. "
362
+ f"Valid levels: {', '.join(VALID_IMPACT_LEVELS)}"
363
+ )
364
+
365
+ # Prefer the authoritative mapping from profiles when available
366
+ profiles = load_impact_level_profiles()
367
+ profile = profiles.get(il_upper)
368
+ if profile and "classification" in profile:
369
+ return profile["classification"]
370
+
371
+ return _CLASSIFICATION_MAP.get(il_upper, "CUI")
372
+
373
+
374
+ def get_marking_banner(
375
+ classification: str = "CUI",
376
+ category: str = "CTI",
377
+ dissemination: Optional[str] = None,
378
+ ) -> str:
379
+ """Return a full multi-line document banner block for a classification.
380
+
381
+ Args:
382
+ classification: One of PUBLIC, CUI, SECRET, TOP SECRET,
383
+ TOP SECRET//SCI.
384
+ category: Sub-category (default CTI for CUI).
385
+ dissemination: Override for the dissemination/caveats line.
386
+ Defaults to NOFORN for SECRET, SCI for TOP SECRET, etc.
387
+
388
+ Returns:
389
+ Multi-line string suitable for document headers/footers.
390
+ """
391
+ cls_upper = classification.upper()
392
+
393
+ if cls_upper == "PUBLIC":
394
+ return (
395
+ "////////////////////////////////////////////////////////////////////\n"
396
+ "PUBLIC RELEASE -- No restrictions on distribution\n"
397
+ "////////////////////////////////////////////////////////////////////"
398
+ )
399
+
400
+ if cls_upper == "CUI":
401
+ banner_line = f"CUI // SP-{category}"
402
+ dist_line = "Distribution: Distribution D -- Authorized DoD Personnel Only"
403
+ ctrl_line = "Controlled by: Department of Defense"
404
+ return (
405
+ f"////////////////////////////////////////////////////////////////////\n"
406
+ f"CONTROLLED UNCLASSIFIED INFORMATION ({banner_line})\n"
407
+ f"{dist_line}\n"
408
+ f"{ctrl_line}\n"
409
+ f"////////////////////////////////////////////////////////////////////"
410
+ )
411
+
412
+ if cls_upper == "SECRET":
413
+ caveat = dissemination or "NOFORN"
414
+ banner_line = f"SECRET // {caveat}"
415
+ dist_line = "Distribution: Authorized SECRET-cleared personnel only"
416
+ ctrl_line = "Controlled by: Department of Defense"
417
+ return (
418
+ f"////////////////////////////////////////////////////////////////////\n"
419
+ f"{banner_line}\n"
420
+ f"{dist_line}\n"
421
+ f"{ctrl_line}\n"
422
+ f"////////////////////////////////////////////////////////////////////"
423
+ )
424
+
425
+ if cls_upper == "TOP SECRET":
426
+ caveat = dissemination or "SCI"
427
+ banner_line = f"TOP SECRET // {caveat}"
428
+ dist_line = "Distribution: Authorized TS/SCI-cleared personnel only"
429
+ ctrl_line = "Controlled by: Department of Defense"
430
+ return (
431
+ f"////////////////////////////////////////////////////////////////////\n"
432
+ f"{banner_line}\n"
433
+ f"{dist_line}\n"
434
+ f"{ctrl_line}\n"
435
+ f"////////////////////////////////////////////////////////////////////"
436
+ )
437
+
438
+ if cls_upper == "TOP SECRET//SCI":
439
+ banner_line = "TOP SECRET // SCI"
440
+ dist_line = "Distribution: Authorized TS/SCI-cleared personnel only"
441
+ ctrl_line = "Controlled by: Department of Defense"
442
+ return (
443
+ f"////////////////////////////////////////////////////////////////////\n"
444
+ f"{banner_line}\n"
445
+ f"{dist_line}\n"
446
+ f"{ctrl_line}\n"
447
+ f"////////////////////////////////////////////////////////////////////"
448
+ )
449
+
450
+ # Unknown -- fall back to CUI
451
+ return get_marking_banner("CUI", category=category)
452
+
453
+
454
+ def get_code_header(
455
+ classification: str = "CUI",
456
+ language: str = "python",
457
+ category: str = "CTI",
458
+ ) -> str:
459
+ """Return a classification code-file header in the correct comment style.
460
+
461
+ Attempts to import ``language_support.get_cui_header`` for CUI headers
462
+ but works standalone for any classification.
463
+
464
+ Args:
465
+ classification: Classification level.
466
+ language: Programming language key (python, java, go, etc.).
467
+ category: Sub-category for CUI markings (default CTI).
468
+
469
+ Returns:
470
+ Multi-line comment block suitable for the top of a source file.
471
+ """
472
+ cls_upper = classification.upper()
473
+
474
+ # Build the raw header lines based on classification
475
+ if cls_upper == "CUI":
476
+ header_lines = [
477
+ f"CUI // SP-{category}",
478
+ "Controlled by: Department of Defense",
479
+ f"CUI Category: {category}",
480
+ "Distribution: D",
481
+ "POC: ICDEV System Administrator",
482
+ ]
483
+ # Try language_support module for CUI (it has registry-aware logic)
484
+ if language.lower() in ("python", "ruby", "java", "go", "rust",
485
+ "csharp", "c#", "typescript", "javascript"):
486
+ try:
487
+ sys.path.insert(0, str(BASE_DIR / "tools" / "builder"))
488
+ from language_support import get_cui_header as _ls_header
489
+ result = _ls_header(language)
490
+ if result:
491
+ return result
492
+ except Exception:
493
+ pass # Fall through to local logic
494
+ elif cls_upper == "SECRET":
495
+ header_lines = [
496
+ "SECRET // NOFORN",
497
+ "Controlled by: Department of Defense",
498
+ "Classification: SECRET",
499
+ "Distribution: Authorized SECRET-cleared personnel only",
500
+ "POC: ICDEV System Administrator",
501
+ ]
502
+ elif cls_upper in ("TOP SECRET", "TOP SECRET//SCI"):
503
+ header_lines = [
504
+ "TOP SECRET // SCI",
505
+ "Controlled by: Department of Defense",
506
+ "Classification: TOP SECRET // SCI",
507
+ "Distribution: Authorized TS/SCI-cleared personnel only",
508
+ "POC: ICDEV System Administrator",
509
+ ]
510
+ elif cls_upper == "PUBLIC":
511
+ header_lines = [
512
+ "PUBLIC RELEASE",
513
+ "No distribution restrictions",
514
+ ]
515
+ else:
516
+ # Default to CUI
517
+ return get_code_header("CUI", language, category)
518
+
519
+ # Determine comment style from local mapping
520
+ lang_lower = language.lower()
521
+ style = _COMMENT_STYLES.get(lang_lower, "hash")
522
+
523
+ result_lines: List[str] = []
524
+
525
+ if style == "hash":
526
+ for line in header_lines:
527
+ result_lines.append(f"# {line}")
528
+ elif style == "c-style":
529
+ for line in header_lines:
530
+ result_lines.append(f"// {line}")
531
+ elif style == "xml-style":
532
+ result_lines.append("<!--")
533
+ for line in header_lines:
534
+ result_lines.append(f" {line}")
535
+ result_lines.append("-->")
536
+ else:
537
+ for line in header_lines:
538
+ result_lines.append(f"# {line}")
539
+
540
+ return "\n".join(result_lines) + "\n"
541
+
542
+
543
+ def get_document_banner(classification: str = "CUI") -> Dict[str, str]:
544
+ """Return document header and footer banners for markdown/text files.
545
+
546
+ Args:
547
+ classification: Classification level.
548
+
549
+ Returns:
550
+ Dict with ``header`` and ``footer`` string values.
551
+ """
552
+ cls_upper = classification.upper()
553
+
554
+ if cls_upper == "CUI":
555
+ config = load_markings_config()
556
+ header = config.get("document_header", "").strip()
557
+ footer = config.get("document_footer", "").strip()
558
+ if header and footer:
559
+ return {"header": header, "footer": footer}
560
+ # Fallback
561
+ return {
562
+ "header": (
563
+ "////////////////////////////////////////////////////////////////////\n"
564
+ "CONTROLLED UNCLASSIFIED INFORMATION (CUI) // SP-CTI\n"
565
+ "Distribution: Distribution D -- Authorized DoD Personnel Only\n"
566
+ "////////////////////////////////////////////////////////////////////"
567
+ ),
568
+ "footer": (
569
+ "////////////////////////////////////////////////////////////////////\n"
570
+ "CUI // SP-CTI | Department of Defense\n"
571
+ "////////////////////////////////////////////////////////////////////"
572
+ ),
573
+ }
574
+
575
+ if cls_upper == "SECRET":
576
+ return {
577
+ "header": (
578
+ "////////////////////////////////////////////////////////////////////\n"
579
+ "SECRET // NOFORN\n"
580
+ "Distribution: Authorized SECRET-cleared personnel only\n"
581
+ "Controlled by: Department of Defense\n"
582
+ "////////////////////////////////////////////////////////////////////"
583
+ ),
584
+ "footer": (
585
+ "////////////////////////////////////////////////////////////////////\n"
586
+ "SECRET // NOFORN | Department of Defense\n"
587
+ "////////////////////////////////////////////////////////////////////"
588
+ ),
589
+ }
590
+
591
+ if cls_upper in ("TOP SECRET", "TOP SECRET//SCI"):
592
+ return {
593
+ "header": (
594
+ "////////////////////////////////////////////////////////////////////\n"
595
+ "TOP SECRET // SCI\n"
596
+ "Distribution: Authorized TS/SCI-cleared personnel only\n"
597
+ "Controlled by: Department of Defense\n"
598
+ "////////////////////////////////////////////////////////////////////"
599
+ ),
600
+ "footer": (
601
+ "////////////////////////////////////////////////////////////////////\n"
602
+ "TOP SECRET // SCI | Department of Defense\n"
603
+ "////////////////////////////////////////////////////////////////////"
604
+ ),
605
+ }
606
+
607
+ if cls_upper == "PUBLIC":
608
+ return {
609
+ "header": (
610
+ "////////////////////////////////////////////////////////////////////\n"
611
+ "PUBLIC RELEASE -- No restrictions on distribution\n"
612
+ "////////////////////////////////////////////////////////////////////"
613
+ ),
614
+ "footer": "",
615
+ }
616
+
617
+ # Default to CUI
618
+ return get_document_banner("CUI")
619
+
620
+
621
+ def get_portion_marking(classification: str = "CUI") -> str:
622
+ """Return an inline portion-marking string.
623
+
624
+ Args:
625
+ classification: Classification level.
626
+
627
+ Returns:
628
+ Short inline marker such as ``(CUI)``, ``(S)``, ``(TS)``, or
629
+ ``(TS//SCI)``.
630
+ """
631
+ return _PORTION_MARKS.get(classification.upper(), "(CUI)")
632
+
633
+
634
+ def get_required_baseline(il_level: str) -> Dict:
635
+ """Return the compliance baseline requirements for an impact level.
636
+
637
+ Args:
638
+ il_level: One of IL4, IL4, IL4, IL4.
639
+
640
+ Returns:
641
+ Dict with ``fedramp_baseline``, ``cmmc_level``,
642
+ ``nist_800_171_required``, and ``required_controls_overlay``.
643
+
644
+ Raises:
645
+ ValueError: If *il_level* is invalid.
646
+ """
647
+ profile = get_impact_level_profile(il_level)
648
+ return {
649
+ "fedramp_baseline": profile.get("fedramp_baseline", "moderate"),
650
+ "cmmc_level": profile.get("cmmc_level"),
651
+ "nist_800_171_required": profile.get("nist_800_171_required", False),
652
+ "required_controls_overlay": profile.get("required_controls_overlay", []),
653
+ }
654
+
655
+
656
+ def get_encryption_requirements(il_level: str) -> Dict:
657
+ """Return encryption requirements for an impact level.
658
+
659
+ Args:
660
+ il_level: One of IL4, IL4, IL4, IL4.
661
+
662
+ Returns:
663
+ Dict with ``at_rest``, ``in_transit``, ``key_management``, and
664
+ any additional encryption-related fields.
665
+
666
+ Raises:
667
+ ValueError: If *il_level* is invalid.
668
+ """
669
+ profile = get_impact_level_profile(il_level)
670
+ return profile.get("encryption_requirements", {
671
+ "at_rest": "FIPS 140-2 validated modules",
672
+ "in_transit": "TLS 1.2+",
673
+ "key_management": "Customer managed keys",
674
+ })
675
+
676
+
677
+ def get_network_requirements(il_level: str) -> Dict:
678
+ """Return network requirements for an impact level.
679
+
680
+ Args:
681
+ il_level: One of IL4, IL4, IL4, IL4.
682
+
683
+ Returns:
684
+ Dict with ``dedicated_infrastructure``, ``cross_domain``,
685
+ ``vpn_required``, ``sipr_only``, and other network fields.
686
+
687
+ Raises:
688
+ ValueError: If *il_level* is invalid.
689
+ """
690
+ profile = get_impact_level_profile(il_level)
691
+ return profile.get("network_requirements", {
692
+ "dedicated_infrastructure": False,
693
+ "cross_domain": False,
694
+ "vpn_required": False,
695
+ "sipr_only": False,
696
+ })
697
+
698
+
699
+ def get_cloud_environments(il_level: str) -> List[str]:
700
+ """Return valid cloud environments for an impact level.
701
+
702
+ Args:
703
+ il_level: One of IL4, IL4, IL4, IL4.
704
+
705
+ Returns:
706
+ List of cloud environment identifiers.
707
+
708
+ Raises:
709
+ ValueError: If *il_level* is invalid.
710
+ """
711
+ profile = get_impact_level_profile(il_level)
712
+ return profile.get("cloud_environments", [])
713
+
714
+
715
+ def validate_classification(
716
+ project_id: str,
717
+ db_path: Optional[Path] = None,
718
+ ) -> Dict:
719
+ """Validate that a project's classification matches its impact level.
720
+
721
+ Checks the ``projects`` table for ``classification`` and
722
+ ``impact_level`` columns, then verifies consistency.
723
+
724
+ Args:
725
+ project_id: The project identifier.
726
+ db_path: Optional database path override.
727
+
728
+ Returns:
729
+ Dict with ``valid`` (bool), ``project_id``, ``classification``,
730
+ ``impact_level``, and ``issues`` (list of issue strings).
731
+ """
732
+ conn = get_connection(db_path=db_path)
733
+ issues: List[str] = []
734
+
735
+ try:
736
+ project = _get_project(conn, project_id)
737
+
738
+ proj_classification = (project.get("classification") or "CUI").upper()
739
+ proj_il = (project.get("impact_level") or "").upper()
740
+
741
+ result: Dict[str, Any] = {
742
+ "valid": True,
743
+ "project_id": project_id,
744
+ "classification": proj_classification,
745
+ "impact_level": proj_il,
746
+ "issues": issues,
747
+ }
748
+
749
+ # Check classification is valid
750
+ if proj_classification not in VALID_CLASSIFICATIONS:
751
+ issues.append(
752
+ f"Invalid classification '{proj_classification}'. "
753
+ f"Valid: {', '.join(VALID_CLASSIFICATIONS)}"
754
+ )
755
+
756
+ # Check impact level is valid (if set)
757
+ if proj_il and proj_il not in VALID_IMPACT_LEVELS:
758
+ issues.append(
759
+ f"Invalid impact level '{proj_il}'. "
760
+ f"Valid: {', '.join(VALID_IMPACT_LEVELS)}"
761
+ )
762
+
763
+ # Cross-validate classification vs. impact level
764
+ if proj_il and proj_il in VALID_IMPACT_LEVELS:
765
+ expected_cls = get_classification_for_il(proj_il)
766
+ if proj_classification != expected_cls:
767
+ issues.append(
768
+ f"Classification mismatch: project is '{proj_classification}' "
769
+ f"but impact level '{proj_il}' requires '{expected_cls}'."
770
+ )
771
+
772
+ # Check marking banner consistency
773
+ profiles = load_impact_level_profiles()
774
+ profile = profiles.get(proj_il, {})
775
+ expected_banner = profile.get("marking_banner")
776
+ if expected_banner and proj_classification == "CUI":
777
+ config = load_markings_config()
778
+ current_banner = config.get("banner_top", "")
779
+ if expected_banner not in current_banner and current_banner not in expected_banner:
780
+ issues.append(
781
+ f"Marking banner mismatch: expected '{expected_banner}' "
782
+ f"for {proj_il}, current config has '{current_banner}'."
783
+ )
784
+
785
+ elif not proj_il:
786
+ issues.append(
787
+ "Impact level not set on project. Recommend setting "
788
+ "impact_level to ensure compliance mapping."
789
+ )
790
+
791
+ result["valid"] = len(issues) == 0
792
+
793
+ # Log audit event
794
+ _log_audit_event(conn, project_id, "Classification validation", {
795
+ "classification": proj_classification,
796
+ "impact_level": proj_il,
797
+ "valid": result["valid"],
798
+ "issues": issues,
799
+ "timestamp": datetime.now(timezone.utc).isoformat(),
800
+ })
801
+
802
+ return result
803
+
804
+ finally:
805
+ conn.close()
806
+
807
+
808
+ def get_cross_domain_controls(
809
+ source_il: str,
810
+ target_il: str,
811
+ ) -> Dict:
812
+ """Return additional controls required for cross-domain solutions.
813
+
814
+ Looks up the ``cross_domain_requirements`` section of the impact
815
+ level profiles for the source->target pair.
816
+
817
+ Args:
818
+ source_il: Source impact level (e.g. IL4).
819
+ target_il: Target impact level (e.g. IL4).
820
+
821
+ Returns:
822
+ Dict with ``description``, ``additional_controls``,
823
+ ``solution_type``, ``approval_required``, and ``direction``.
824
+
825
+ Raises:
826
+ ValueError: If either IL is invalid or no cross-domain mapping
827
+ exists for the pair.
828
+ """
829
+ for il in (source_il, target_il):
830
+ if il.upper() not in VALID_IMPACT_LEVELS:
831
+ raise ValueError(
832
+ f"Invalid impact level '{il}'. "
833
+ f"Valid: {', '.join(VALID_IMPACT_LEVELS)}"
834
+ )
835
+
836
+ profiles = load_impact_level_profiles()
837
+ cross_domain = profiles.get("_cross_domain", {})
838
+
839
+ # Determine direction (always low -> high for cross-domain lookup)
840
+ il_order = {"IL4": 0, "IL4": 1, "IL4": 2, "IL4": 3}
841
+ src = source_il.upper()
842
+ tgt = target_il.upper()
843
+ low, high = (src, tgt) if il_order.get(src, 0) <= il_order.get(tgt, 0) else (tgt, src)
844
+
845
+ # Lookup key format: "ILx_to_ILy"
846
+ lookup_key = f"{low}_to_{high}"
847
+ mapping = cross_domain.get(lookup_key)
848
+
849
+ if mapping:
850
+ result = dict(mapping)
851
+ result["direction"] = f"{src} -> {tgt}"
852
+ return result
853
+
854
+ # Also try classification-level keys (e.g. SECRET_to_TS)
855
+ src_cls = get_classification_for_il(src).replace(" ", "_").upper()
856
+ tgt_cls = get_classification_for_il(tgt).replace(" ", "_").upper()
857
+ cls_key = f"{src_cls}_to_{tgt_cls}"
858
+ mapping = cross_domain.get(cls_key)
859
+
860
+ if mapping:
861
+ result = dict(mapping)
862
+ result["direction"] = f"{src} ({src_cls}) -> {tgt} ({tgt_cls})"
863
+ return result
864
+
865
+ # Same level or adjacent levels with no explicit cross-domain needs
866
+ if src == tgt:
867
+ return {
868
+ "description": "Same impact level -- no cross-domain controls required.",
869
+ "additional_controls": [],
870
+ "solution_type": "N/A",
871
+ "approval_required": "N/A",
872
+ "direction": f"{src} -> {tgt}",
873
+ }
874
+
875
+ # No explicit mapping found -- return a conservative response
876
+ return {
877
+ "description": (
878
+ f"Cross-domain transfer between {src} and {tgt}. "
879
+ "No explicit mapping found; treat as requiring AO approval."
880
+ ),
881
+ "additional_controls": ["AC-4", "SC-7(5)"],
882
+ "solution_type": "Consult AO for approved data transfer mechanism",
883
+ "approval_required": "AO approval required",
884
+ "direction": f"{src} -> {tgt}",
885
+ }
886
+
887
+
888
+ def upgrade_markings(
889
+ content: str,
890
+ from_classification: str,
891
+ to_classification: str,
892
+ ) -> str:
893
+ """Replace classification banners in content for an upgrade.
894
+
895
+ Scans for banner patterns from *from_classification* and replaces
896
+ them with *to_classification* banners. Handles both document banners
897
+ and inline portion markings.
898
+
899
+ Args:
900
+ content: Document or code content string.
901
+ from_classification: Current classification (e.g. CUI).
902
+ to_classification: Target classification (e.g. SECRET).
903
+
904
+ Returns:
905
+ Updated content with new markings.
906
+ """
907
+ from_cls = from_classification.upper()
908
+ to_cls = to_classification.upper()
909
+
910
+ if from_cls == to_cls:
911
+ return content
912
+
913
+ result = content
914
+
915
+ # --- Banner replacements ---
916
+ from_banners = get_document_banner(from_cls)
917
+ to_banners = get_document_banner(to_cls)
918
+
919
+ # Replace header banner
920
+ if from_banners.get("header"):
921
+ result = result.replace(from_banners["header"], to_banners.get("header", ""))
922
+
923
+ # Replace footer banner
924
+ if from_banners.get("footer"):
925
+ result = result.replace(from_banners["footer"], to_banners.get("footer", ""))
926
+
927
+ # --- Inline banner-line replacements ---
928
+ # Order matters: replace longest/most-specific strings first to avoid
929
+ # partial double-replacements.
930
+ # CUI -> SECRET
931
+ if from_cls == "CUI" and to_cls == "SECRET":
932
+ result = result.replace(
933
+ "CONTROLLED UNCLASSIFIED INFORMATION (CUI // SP-CTI)",
934
+ "SECRET // NOFORN",
935
+ )
936
+ result = result.replace(
937
+ "CONTROLLED UNCLASSIFIED INFORMATION",
938
+ "SECRET // NOFORN",
939
+ )
940
+ result = result.replace("CUI // SP-CTI", "SECRET // NOFORN")
941
+ result = result.replace(
942
+ "Distribution D -- Authorized DoD Personnel Only",
943
+ "Authorized SECRET-cleared personnel only",
944
+ )
945
+ result = result.replace("CUI Category: CTI", "Classification: SECRET")
946
+
947
+ elif from_cls == "CUI" and to_cls in ("TOP SECRET", "TOP SECRET//SCI"):
948
+ result = result.replace(
949
+ "CONTROLLED UNCLASSIFIED INFORMATION (CUI // SP-CTI)",
950
+ "TOP SECRET // SCI",
951
+ )
952
+ result = result.replace(
953
+ "CONTROLLED UNCLASSIFIED INFORMATION",
954
+ "TOP SECRET // SCI",
955
+ )
956
+ result = result.replace("CUI // SP-CTI", "TOP SECRET // SCI")
957
+ result = result.replace(
958
+ "Distribution D -- Authorized DoD Personnel Only",
959
+ "Authorized TS/SCI-cleared personnel only",
960
+ )
961
+ result = result.replace("CUI Category: CTI", "Classification: TOP SECRET // SCI")
962
+
963
+ elif from_cls == "SECRET" and to_cls in ("TOP SECRET", "TOP SECRET//SCI"):
964
+ result = result.replace("SECRET // NOFORN", "TOP SECRET // SCI")
965
+ result = result.replace(
966
+ "Authorized SECRET-cleared personnel only",
967
+ "Authorized TS/SCI-cleared personnel only",
968
+ )
969
+ result = result.replace("Classification: SECRET", "Classification: TOP SECRET // SCI")
970
+
971
+ # --- Portion marking replacement ---
972
+ from_portion = get_portion_marking(from_cls)
973
+ to_portion = get_portion_marking(to_cls)
974
+ if from_portion and to_portion:
975
+ result = result.replace(from_portion, to_portion)
976
+
977
+ return result
978
+
979
+
980
+ # ---------------------------------------------------------------------------
981
+ # CLI
982
+ # ---------------------------------------------------------------------------
983
+
984
+ def main() -> None:
985
+ """CLI entry point and demonstration of all capabilities."""
986
+ parser = argparse.ArgumentParser(
987
+ description="Classification & Marking Manager for ICDEV"
988
+ )
989
+ parser.add_argument(
990
+ "--impact-level",
991
+ choices=["IL4", "IL4", "IL4", "IL4"],
992
+ help="Show profile for an impact level",
993
+ )
994
+ parser.add_argument(
995
+ "--classification",
996
+ choices=["PUBLIC", "CUI", "SECRET", "TOP SECRET", "TOP SECRET//SCI"],
997
+ help="Show markings for a classification level",
998
+ )
999
+ parser.add_argument(
1000
+ "--banner",
1001
+ action="store_true",
1002
+ help="Show document banner for the specified classification",
1003
+ )
1004
+ parser.add_argument(
1005
+ "--code-header",
1006
+ metavar="LANGUAGE",
1007
+ help="Show code header for a language (python, java, go, rust, etc.)",
1008
+ )
1009
+ parser.add_argument(
1010
+ "--baseline",
1011
+ action="store_true",
1012
+ help="Show required compliance baseline for the impact level",
1013
+ )
1014
+ parser.add_argument(
1015
+ "--encryption",
1016
+ action="store_true",
1017
+ help="Show encryption requirements for the impact level",
1018
+ )
1019
+ parser.add_argument(
1020
+ "--network",
1021
+ action="store_true",
1022
+ help="Show network requirements for the impact level",
1023
+ )
1024
+ parser.add_argument(
1025
+ "--cloud",
1026
+ action="store_true",
1027
+ help="Show valid cloud environments for the impact level",
1028
+ )
1029
+ parser.add_argument(
1030
+ "--cross-domain",
1031
+ nargs=2,
1032
+ metavar=("SOURCE_IL", "TARGET_IL"),
1033
+ help="Show cross-domain controls between two impact levels",
1034
+ )
1035
+ parser.add_argument(
1036
+ "--validate",
1037
+ metavar="PROJECT_ID",
1038
+ help="Validate project classification consistency",
1039
+ )
1040
+ parser.add_argument(
1041
+ "--json",
1042
+ action="store_true",
1043
+ help="Output as JSON",
1044
+ )
1045
+ parser.add_argument(
1046
+ "--db-path",
1047
+ type=Path,
1048
+ default=None,
1049
+ help="Database path override",
1050
+ )
1051
+
1052
+ args = parser.parse_args()
1053
+
1054
+ # If no arguments given, show a full demo
1055
+ if not any([
1056
+ args.impact_level, args.classification, args.banner,
1057
+ args.code_header, args.baseline, args.encryption, args.network,
1058
+ args.cloud, args.cross_domain, args.validate,
1059
+ ]):
1060
+ _run_demo(args.json)
1061
+ return
1062
+
1063
+ classification = args.classification or "CUI"
1064
+
1065
+ try:
1066
+ # --- Impact-level profile ---
1067
+ if args.impact_level and not any([args.baseline, args.encryption, args.network, args.cloud]):
1068
+ profile = get_impact_level_profile(args.impact_level)
1069
+ if args.json:
1070
+ print(json.dumps({args.impact_level: profile}, indent=2))
1071
+ else:
1072
+ print(f"Impact Level: {args.impact_level}")
1073
+ print(f" Classification: {profile.get('classification')}")
1074
+ print(f" Description: {profile.get('description', 'N/A')}")
1075
+ print(f" FedRAMP Baseline: {profile.get('fedramp_baseline')}")
1076
+ print(f" CMMC Level: {profile.get('cmmc_level')}")
1077
+ print(f" NIST 800-171 Required: {profile.get('nist_800_171_required')}")
1078
+ print(f" Marking Banner: {profile.get('marking_banner')}")
1079
+ envs = profile.get("cloud_environments", [])
1080
+ print(f" Cloud Environments: {', '.join(envs)}")
1081
+
1082
+ # --- Baseline ---
1083
+ if args.baseline:
1084
+ if not args.impact_level:
1085
+ print("Error: --baseline requires --impact-level", file=sys.stderr)
1086
+ sys.exit(1)
1087
+ baseline = get_required_baseline(args.impact_level)
1088
+ if args.json:
1089
+ print(json.dumps(baseline, indent=2))
1090
+ else:
1091
+ print(f"Compliance Baseline for {args.impact_level}:")
1092
+ print(f" FedRAMP Baseline: {baseline['fedramp_baseline']}")
1093
+ print(f" CMMC Level: {baseline['cmmc_level']}")
1094
+ print(f" NIST 800-171 Required: {baseline['nist_800_171_required']}")
1095
+ overlay = baseline.get("required_controls_overlay", [])
1096
+ if overlay:
1097
+ print(f" Controls Overlay ({len(overlay)}):")
1098
+ for ctrl in overlay:
1099
+ print(f" - {ctrl}")
1100
+
1101
+ # --- Encryption ---
1102
+ if args.encryption:
1103
+ if not args.impact_level:
1104
+ print("Error: --encryption requires --impact-level", file=sys.stderr)
1105
+ sys.exit(1)
1106
+ enc = get_encryption_requirements(args.impact_level)
1107
+ if args.json:
1108
+ print(json.dumps(enc, indent=2))
1109
+ else:
1110
+ print(f"Encryption Requirements for {args.impact_level}:")
1111
+ for key, value in enc.items():
1112
+ print(f" {key}: {value}")
1113
+
1114
+ # --- Network ---
1115
+ if args.network:
1116
+ if not args.impact_level:
1117
+ print("Error: --network requires --impact-level", file=sys.stderr)
1118
+ sys.exit(1)
1119
+ net = get_network_requirements(args.impact_level)
1120
+ if args.json:
1121
+ print(json.dumps(net, indent=2))
1122
+ else:
1123
+ print(f"Network Requirements for {args.impact_level}:")
1124
+ for key, value in net.items():
1125
+ print(f" {key}: {value}")
1126
+
1127
+ # --- Cloud ---
1128
+ if args.cloud:
1129
+ if not args.impact_level:
1130
+ print("Error: --cloud requires --impact-level", file=sys.stderr)
1131
+ sys.exit(1)
1132
+ envs = get_cloud_environments(args.impact_level)
1133
+ if args.json:
1134
+ print(json.dumps({"cloud_environments": envs}, indent=2))
1135
+ else:
1136
+ print(f"Cloud Environments for {args.impact_level}:")
1137
+ for env in envs:
1138
+ print(f" - {env}")
1139
+
1140
+ # --- Banner ---
1141
+ if args.banner:
1142
+ banner = get_marking_banner(classification)
1143
+ if args.json:
1144
+ doc = get_document_banner(classification)
1145
+ print(json.dumps({
1146
+ "classification": classification,
1147
+ "banner": banner,
1148
+ "document_header": doc["header"],
1149
+ "document_footer": doc["footer"],
1150
+ "portion_marking": get_portion_marking(classification),
1151
+ }, indent=2))
1152
+ else:
1153
+ print(f"Banner for {classification}:\n")
1154
+ print(banner)
1155
+ print(f"\nPortion marking: {get_portion_marking(classification)}")
1156
+
1157
+ # --- Code header ---
1158
+ if args.code_header:
1159
+ header = get_code_header(classification, args.code_header)
1160
+ if args.json:
1161
+ print(json.dumps({
1162
+ "classification": classification,
1163
+ "language": args.code_header,
1164
+ "code_header": header,
1165
+ }, indent=2))
1166
+ else:
1167
+ print(f"Code header for {classification} ({args.code_header}):\n")
1168
+ print(header)
1169
+
1170
+ # --- Cross-domain ---
1171
+ if args.cross_domain:
1172
+ src, tgt = args.cross_domain
1173
+ controls = get_cross_domain_controls(src, tgt)
1174
+ if args.json:
1175
+ print(json.dumps(controls, indent=2))
1176
+ else:
1177
+ print(f"Cross-Domain Controls: {src} -> {tgt}")
1178
+ print(f" Direction: {controls.get('direction')}")
1179
+ print(f" Description: {controls.get('description')}")
1180
+ print(f" Solution Type: {controls.get('solution_type')}")
1181
+ print(f" Approval Required: {controls.get('approval_required')}")
1182
+ addl = controls.get("additional_controls", [])
1183
+ if addl:
1184
+ print(f" Additional Controls ({len(addl)}):")
1185
+ for ctrl in addl:
1186
+ print(f" - {ctrl}")
1187
+
1188
+ # --- Validate ---
1189
+ if args.validate:
1190
+ result = validate_classification(args.validate, db_path=args.db_path)
1191
+ if args.json:
1192
+ print(json.dumps(result, indent=2))
1193
+ else:
1194
+ status = "VALID" if result["valid"] else "INVALID"
1195
+ print(f"Classification Validation: {status}")
1196
+ print(f" Project: {result['project_id']}")
1197
+ print(f" Classification: {result['classification']}")
1198
+ print(f" Impact Level: {result['impact_level'] or 'not set'}")
1199
+ if result["issues"]:
1200
+ print(f" Issues ({len(result['issues'])}):")
1201
+ for issue in result["issues"]:
1202
+ print(f" - {issue}")
1203
+ else:
1204
+ print(" No issues found.")
1205
+
1206
+ except (ValueError, FileNotFoundError) as exc:
1207
+ print(f"ERROR: {exc}", file=sys.stderr)
1208
+ sys.exit(1)
1209
+
1210
+
1211
+ def _run_demo(as_json: bool = False) -> None:
1212
+ """Demonstrate all classification manager capabilities."""
1213
+ print("=" * 70)
1214
+ print(" ICDEV Classification & Marking Manager -- Demo")
1215
+ print("=" * 70)
1216
+ print()
1217
+
1218
+ # 1. Impact level profiles
1219
+ print("--- Impact Level Profiles ---")
1220
+ for il in VALID_IMPACT_LEVELS:
1221
+ try:
1222
+ cls = get_classification_for_il(il)
1223
+ print(f" {il}: classification={cls}")
1224
+ except ValueError:
1225
+ print(f" {il}: (profile not available)")
1226
+ print()
1227
+
1228
+ # 2. Marking banners
1229
+ print("--- Marking Banners ---")
1230
+ for cls in ("CUI", "SECRET", "TOP SECRET"):
1231
+ banner = get_marking_banner(cls)
1232
+ print(f"\n [{cls}]")
1233
+ for line in banner.split("\n"):
1234
+ print(f" {line}")
1235
+ print()
1236
+
1237
+ # 3. Portion markings
1238
+ print("--- Portion Markings ---")
1239
+ for cls in VALID_CLASSIFICATIONS:
1240
+ print(f" {cls}: {get_portion_marking(cls)}")
1241
+ print()
1242
+
1243
+ # 4. Code headers
1244
+ print("--- Code Headers ---")
1245
+ for lang in ("python", "java", "xml"):
1246
+ header = get_code_header("CUI", lang)
1247
+ print(f"\n [{lang} / CUI]")
1248
+ for line in header.rstrip("\n").split("\n"):
1249
+ print(f" {line}")
1250
+ print()
1251
+
1252
+ # 5. Code header for SECRET
1253
+ print(" [python / SECRET]")
1254
+ header = get_code_header("SECRET", "python")
1255
+ for line in header.rstrip("\n").split("\n"):
1256
+ print(f" {line}")
1257
+ print()
1258
+
1259
+ # 6. Compliance baselines
1260
+ print("--- Compliance Baselines ---")
1261
+ for il in ("IL4", "IL4", "IL4"):
1262
+ try:
1263
+ baseline = get_required_baseline(il)
1264
+ print(f" {il}: FedRAMP={baseline['fedramp_baseline']}, "
1265
+ f"CMMC={baseline['cmmc_level']}, "
1266
+ f"NIST 171={baseline['nist_800_171_required']}, "
1267
+ f"Overlay controls={len(baseline.get('required_controls_overlay', []))}")
1268
+ except ValueError:
1269
+ print(f" {il}: (not available)")
1270
+ print()
1271
+
1272
+ # 7. Encryption requirements
1273
+ print("--- Encryption Requirements (IL4) ---")
1274
+ try:
1275
+ enc = get_encryption_requirements("IL4")
1276
+ for k, v in enc.items():
1277
+ print(f" {k}: {v}")
1278
+ except ValueError:
1279
+ print(" (not available)")
1280
+ print()
1281
+
1282
+ # 8. Network requirements
1283
+ print("--- Network Requirements (IL4) ---")
1284
+ try:
1285
+ net = get_network_requirements("IL4")
1286
+ for k, v in net.items():
1287
+ print(f" {k}: {v}")
1288
+ except ValueError:
1289
+ print(" (not available)")
1290
+ print()
1291
+
1292
+ # 9. Cloud environments
1293
+ print("--- Cloud Environments ---")
1294
+ for il in ("IL4", "IL4", "IL4"):
1295
+ try:
1296
+ envs = get_cloud_environments(il)
1297
+ print(f" {il}: {', '.join(envs)}")
1298
+ except ValueError:
1299
+ print(f" {il}: (not available)")
1300
+ print()
1301
+
1302
+ # 10. Cross-domain controls
1303
+ print("--- Cross-Domain Controls ---")
1304
+ for src, tgt in [("IL4", "IL4"), ("IL4", "IL4")]:
1305
+ try:
1306
+ cd = get_cross_domain_controls(src, tgt)
1307
+ print(f" {src} -> {tgt}: {cd.get('solution_type', 'N/A')}")
1308
+ addl = cd.get("additional_controls", [])
1309
+ if addl:
1310
+ print(f" Additional controls: {', '.join(addl)}")
1311
+ except ValueError:
1312
+ print(f" {src} -> {tgt}: (not available)")
1313
+ print()
1314
+
1315
+ # 11. Marking upgrade demo
1316
+ print("--- Marking Upgrade Demo ---")
1317
+ sample = (
1318
+ "////////////////////////////////////////////////////////////////////\n"
1319
+ "CONTROLLED UNCLASSIFIED INFORMATION (CUI // SP-CTI)\n"
1320
+ "Distribution: Distribution D -- Authorized DoD Personnel Only\n"
1321
+ "////////////////////////////////////////////////////////////////////\n"
1322
+ "\n"
1323
+ "This is a (CUI) document with CUI // SP-CTI markings.\n"
1324
+ )
1325
+ upgraded = upgrade_markings(sample, "CUI", "SECRET")
1326
+ print(" Before:")
1327
+ for line in sample.rstrip("\n").split("\n"):
1328
+ print(f" {line}")
1329
+ print(" After upgrade to SECRET:")
1330
+ for line in upgraded.rstrip("\n").split("\n"):
1331
+ print(f" {line}")
1332
+ print()
1333
+
1334
+ print("=" * 70)
1335
+ print(" Demo complete. Use --help for CLI options.")
1336
+ print("=" * 70)
1337
+
1338
+
1339
+ if __name__ == "__main__":
1340
+ main()