icdev 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1105) hide show
  1. icdev/__init__.py +18 -0
  2. icdev/_paths.py +85 -0
  3. icdev/_version.py +3 -0
  4. icdev/data/__init__.py +1 -0
  5. icdev/data/args/__init__.py +1 -0
  6. icdev/data/args/agent_authority.yaml +61 -0
  7. icdev/data/args/agent_config.yaml +355 -0
  8. icdev/data/args/agentic_fitness.yaml +31 -0
  9. icdev/data/args/ai_governance_config.yaml +137 -0
  10. icdev/data/args/atlas_critique_config.yaml +66 -0
  11. icdev/data/args/bedrock_models.yaml +63 -0
  12. icdev/data/args/cicd_config.yaml +82 -0
  13. icdev/data/args/classification_config.yaml +232 -0
  14. icdev/data/args/cli_config.yaml +154 -0
  15. icdev/data/args/cloud_config.yaml +63 -0
  16. icdev/data/args/code_pattern_config.yaml +151 -0
  17. icdev/data/args/code_quality_config.yaml +47 -0
  18. icdev/data/args/companion_registry.yaml +202 -0
  19. icdev/data/args/context_config.yaml +82 -0
  20. icdev/data/args/csp_monitor_config.yaml +268 -0
  21. icdev/data/args/cui_markings.yaml +35 -0
  22. icdev/data/args/db_config.yaml +40 -0
  23. icdev/data/args/deployment_profiles.yaml +248 -0
  24. icdev/data/args/dev_profile_config.yaml +144 -0
  25. icdev/data/args/devsecops_config.yaml +286 -0
  26. icdev/data/args/endpoint_security_config.yaml +137 -0
  27. icdev/data/args/extension_config.yaml +79 -0
  28. icdev/data/args/file_access_tiers.yaml +88 -0
  29. icdev/data/args/framework_registry.yaml +415 -0
  30. icdev/data/args/innovation_config.yaml +431 -0
  31. icdev/data/args/installation_manifest.yaml +1087 -0
  32. icdev/data/args/llm_config.yaml +495 -0
  33. icdev/data/args/maintenance_config.yaml +55 -0
  34. icdev/data/args/memory_config.yaml +83 -0
  35. icdev/data/args/monitoring_config.yaml +127 -0
  36. icdev/data/args/mosa_config.yaml +190 -0
  37. icdev/data/args/nlq_config.yaml +35 -0
  38. icdev/data/args/observability_config.yaml +39 -0
  39. icdev/data/args/observability_tracing_config.yaml +170 -0
  40. icdev/data/args/oscal_tools_config.yaml +43 -0
  41. icdev/data/args/owasp_agentic_config.yaml +171 -0
  42. icdev/data/args/phase_registry.yaml +618 -0
  43. icdev/data/args/project_defaults.yaml +235 -0
  44. icdev/data/args/prompt_chains.yaml +163 -0
  45. icdev/data/args/resilience_config.yaml +50 -0
  46. icdev/data/args/ricoas_config.yaml +191 -0
  47. icdev/data/args/role_personas.yaml +362 -0
  48. icdev/data/args/scaling_config.yaml +176 -0
  49. icdev/data/args/security_gates.yaml +685 -0
  50. icdev/data/args/skill_injection_config.yaml +322 -0
  51. icdev/data/args/spec_config.yaml +53 -0
  52. icdev/data/args/supply_chain_config.yaml +76 -0
  53. icdev/data/args/translation_config.yaml +228 -0
  54. icdev/data/args/workflow_templates/ato_acceleration.yaml +54 -0
  55. icdev/data/args/workflow_templates/build_deploy.yaml +63 -0
  56. icdev/data/args/workflow_templates/full_compliance.yaml +43 -0
  57. icdev/data/args/workflow_templates/security_hardening.yaml +55 -0
  58. icdev/data/args/worktree_config.yaml +34 -0
  59. icdev/data/args/zta_config.yaml +247 -0
  60. icdev/data/context/__init__.py +1 -0
  61. icdev/data/context/agent/__init__.py +1 -0
  62. icdev/data/context/agent/response_schemas/__init__.py +1 -0
  63. icdev/data/context/agent/response_schemas/debate_position.json +46 -0
  64. icdev/data/context/agent/response_schemas/fitness_scorecard.json +74 -0
  65. icdev/data/context/agent/response_schemas/review_decision.json +39 -0
  66. icdev/data/context/agent/response_schemas/task_decomposition.json +82 -0
  67. icdev/data/context/agent/response_schemas/veto_decision.json +40 -0
  68. icdev/data/context/agentic/__init__.py +1 -0
  69. icdev/data/context/agentic/architecture_patterns.md +269 -0
  70. icdev/data/context/agentic/capability_registry.yaml +202 -0
  71. icdev/data/context/agentic/csp_mcp_registry.yaml +280 -0
  72. icdev/data/context/agentic/fitness_rubric.md +56 -0
  73. icdev/data/context/agentic/governance_baseline.md +205 -0
  74. icdev/data/context/ci/__init__.py +1 -0
  75. icdev/data/context/ci/worktree_templates.json +44 -0
  76. icdev/data/context/cloud/__init__.py +1 -0
  77. icdev/data/context/cloud/csp_service_registry.json +739 -0
  78. icdev/data/context/compliance/__init__.py +1 -0
  79. icdev/data/context/compliance/atlas_mitigations.json +293 -0
  80. icdev/data/context/compliance/atlas_techniques.json +833 -0
  81. icdev/data/context/compliance/cisa_sbd_requirements.json +432 -0
  82. icdev/data/context/compliance/cjis_security_policy.json +522 -0
  83. icdev/data/context/compliance/cmmc_practices.json +2494 -0
  84. icdev/data/context/compliance/cmmc_report_template.md +142 -0
  85. icdev/data/context/compliance/cnssi_1253_overlay.json +109 -0
  86. icdev/data/context/compliance/control_crosswalk.json +1914 -0
  87. icdev/data/context/compliance/control_families/__init__.py +1 -0
  88. icdev/data/context/compliance/csp_certifications.json +251 -0
  89. icdev/data/context/compliance/cssp_report_template.md +193 -0
  90. icdev/data/context/compliance/cui_templates/__init__.py +1 -0
  91. icdev/data/context/compliance/cui_templates/banner_block.txt +4 -0
  92. icdev/data/context/compliance/cui_templates/code_header.txt +8 -0
  93. icdev/data/context/compliance/cui_templates/document_template.md +35 -0
  94. icdev/data/context/compliance/data_type_framework_map.json +321 -0
  95. icdev/data/context/compliance/data_type_registry.json +147 -0
  96. icdev/data/context/compliance/dod_cssp_8530.json +463 -0
  97. icdev/data/context/compliance/eu_ai_act_annex_iii.json +108 -0
  98. icdev/data/context/compliance/export_templates/__init__.py +1 -0
  99. icdev/data/context/compliance/export_templates/emass_controls.csv.j2 +4 -0
  100. icdev/data/context/compliance/export_templates/evidence_package.md.j2 +39 -0
  101. icdev/data/context/compliance/export_templates/executive_summary.md.j2 +55 -0
  102. icdev/data/context/compliance/export_templates/poam_tracking.csv.j2 +4 -0
  103. icdev/data/context/compliance/fedramp_20x_ksi_schemas.json +133 -0
  104. icdev/data/context/compliance/fedramp_high_baseline.json +4370 -0
  105. icdev/data/context/compliance/fedramp_moderate_baseline.json +2183 -0
  106. icdev/data/context/compliance/fedramp_report_template.md +181 -0
  107. icdev/data/context/compliance/fips_200_areas.json +362 -0
  108. icdev/data/context/compliance/gao_ai_accountability.json +262 -0
  109. icdev/data/context/compliance/hipaa_security_rule.json +720 -0
  110. icdev/data/context/compliance/hitrust_csf_v11.json +930 -0
  111. icdev/data/context/compliance/impact_level_profiles.json +251 -0
  112. icdev/data/context/compliance/incident_response_template.md +1110 -0
  113. icdev/data/context/compliance/iso27001_2022_controls.json +750 -0
  114. icdev/data/context/compliance/iso27001_nist_bridge.json +382 -0
  115. icdev/data/context/compliance/iso42001_controls.json +254 -0
  116. icdev/data/context/compliance/ivv_checklist_template.md +80 -0
  117. icdev/data/context/compliance/ivv_report_template.md +116 -0
  118. icdev/data/context/compliance/ivv_requirements.json +372 -0
  119. icdev/data/context/compliance/mosa_crosswalk.json +327 -0
  120. icdev/data/context/compliance/mosa_framework.json +250 -0
  121. icdev/data/context/compliance/narrative_templates/AC.md.j2 +101 -0
  122. icdev/data/context/compliance/narrative_templates/AU.md.j2 +106 -0
  123. icdev/data/context/compliance/narrative_templates/IA.md.j2 +104 -0
  124. icdev/data/context/compliance/narrative_templates/SC.md.j2 +102 -0
  125. icdev/data/context/compliance/narrative_templates/SI.md.j2 +111 -0
  126. icdev/data/context/compliance/narrative_templates/__init__.py +1 -0
  127. icdev/data/context/compliance/narrative_templates/default.md.j2 +50 -0
  128. icdev/data/context/compliance/narrative_templates/executive_summary.j2 +27 -0
  129. icdev/data/context/compliance/narrative_templates/poam_milestone.j2 +19 -0
  130. icdev/data/context/compliance/narrative_templates/ssp_section.j2 +11 -0
  131. icdev/data/context/compliance/nist_800_171_controls.json +1552 -0
  132. icdev/data/context/compliance/nist_800_207_crosswalk.json +399 -0
  133. icdev/data/context/compliance/nist_800_207_zta.json +258 -0
  134. icdev/data/context/compliance/nist_800_53.json +324 -0
  135. icdev/data/context/compliance/nist_ai_600_1_genai.json +326 -0
  136. icdev/data/context/compliance/nist_ai_rmf.json +206 -0
  137. icdev/data/context/compliance/nist_sp_800_60_types.json +1667 -0
  138. icdev/data/context/compliance/omb_m25_21_high_impact_ai.json +248 -0
  139. icdev/data/context/compliance/omb_m26_04_unbiased_ai.json +262 -0
  140. icdev/data/context/compliance/owasp_agentic_asi.json +133 -0
  141. icdev/data/context/compliance/owasp_agentic_threats.json +285 -0
  142. icdev/data/context/compliance/owasp_llm_top10.json +274 -0
  143. icdev/data/context/compliance/pci_dss_v4.json +510 -0
  144. icdev/data/context/compliance/poam_template.md +117 -0
  145. icdev/data/context/compliance/safeai_controls.json +512 -0
  146. icdev/data/context/compliance/sbd_report_template.md +77 -0
  147. icdev/data/context/compliance/siem_config_templates/__init__.py +1 -0
  148. icdev/data/context/compliance/siem_config_templates/filebeat.yml +213 -0
  149. icdev/data/context/compliance/siem_config_templates/log_sources.json +208 -0
  150. icdev/data/context/compliance/soc2_trust_criteria.json +661 -0
  151. icdev/data/context/compliance/ssp_template.md +432 -0
  152. icdev/data/context/compliance/stig_templates/__init__.py +1 -0
  153. icdev/data/context/compliance/stig_templates/webapp_stig.json +139 -0
  154. icdev/data/context/compliance/xai_requirements.json +108 -0
  155. icdev/data/context/dashboard/__init__.py +1 -0
  156. icdev/data/context/dashboard/nlq_examples.json +50 -0
  157. icdev/data/context/dashboard/schema_descriptions.json +23 -0
  158. icdev/data/context/integration/__init__.py +1 -0
  159. icdev/data/context/integration/approval_workflows.json +32 -0
  160. icdev/data/context/integration/gitlab_field_mappings.json +33 -0
  161. icdev/data/context/integration/jira_field_mappings.json +32 -0
  162. icdev/data/context/integration/reqif_export_schema.json +23 -0
  163. icdev/data/context/integration/servicenow_field_mappings.json +22 -0
  164. icdev/data/context/languages/__init__.py +1 -0
  165. icdev/data/context/languages/framework_patterns.json +205 -0
  166. icdev/data/context/languages/language_registry.json +279 -0
  167. icdev/data/context/llm/__init__.py +1 -0
  168. icdev/data/context/llm/example_provider.py +86 -0
  169. icdev/data/context/mbse/__init__.py +1 -0
  170. icdev/data/context/mbse/des_report_template.md +162 -0
  171. icdev/data/context/mbse/des_requirements.json +411 -0
  172. icdev/data/context/mbse/digital_thread_patterns.json +403 -0
  173. icdev/data/context/mbse/reqif_schema.json +280 -0
  174. icdev/data/context/mbse/sysml_element_types.json +432 -0
  175. icdev/data/context/modernization/__init__.py +1 -0
  176. icdev/data/context/modernization/db_type_mappings.json +148 -0
  177. icdev/data/context/modernization/decomposition_patterns.json +284 -0
  178. icdev/data/context/modernization/framework_migration_patterns.json +359 -0
  179. icdev/data/context/modernization/migration_report_template.md +168 -0
  180. icdev/data/context/modernization/seven_rs_catalog.json +369 -0
  181. icdev/data/context/modernization/version_upgrade_rules.json +279 -0
  182. icdev/data/context/oscal/NIST_SP-800-53_rev5_catalog.json +254987 -0
  183. icdev/data/context/oscal/README.md +43 -0
  184. icdev/data/context/patterns/__init__.py +1 -0
  185. icdev/data/context/profiles/__init__.py +1 -0
  186. icdev/data/context/profiles/dod_baseline_v1.yaml +145 -0
  187. icdev/data/context/profiles/fedramp_baseline_v1.yaml +143 -0
  188. icdev/data/context/profiles/financial_baseline_v1.yaml +142 -0
  189. icdev/data/context/profiles/healthcare_baseline_v1.yaml +135 -0
  190. icdev/data/context/profiles/law_enforcement_v1.yaml +129 -0
  191. icdev/data/context/profiles/startup_v1.yaml +134 -0
  192. icdev/data/context/requirements/__init__.py +1 -0
  193. icdev/data/context/requirements/ambiguity_patterns.json +97 -0
  194. icdev/data/context/requirements/boundary_impact_rules.json +123 -0
  195. icdev/data/context/requirements/default_constitutions.json +67 -0
  196. icdev/data/context/requirements/document_extraction_rules.json +58 -0
  197. icdev/data/context/requirements/gap_patterns.json +108 -0
  198. icdev/data/context/requirements/readiness_rubric.json +78 -0
  199. icdev/data/context/requirements/red_alternative_patterns.json +210 -0
  200. icdev/data/context/requirements/safe_templates.json +72 -0
  201. icdev/data/context/requirements/spec_quality_checklist.json +122 -0
  202. icdev/data/context/simulation/__init__.py +1 -0
  203. icdev/data/context/simulation/architecture_patterns.json +36 -0
  204. icdev/data/context/simulation/coa_templates.json +38 -0
  205. icdev/data/context/simulation/cost_models.json +23 -0
  206. icdev/data/context/simulation/risk_categories.json +46 -0
  207. icdev/data/context/supply_chain/__init__.py +1 -0
  208. icdev/data/context/supply_chain/isa_templates.json +129 -0
  209. icdev/data/context/supply_chain/nist_800_161_controls.json +247 -0
  210. icdev/data/context/supply_chain/scrm_risk_matrix.json +147 -0
  211. icdev/data/context/templates/__init__.py +1 -0
  212. icdev/data/context/templates/ansible/__init__.py +1 -0
  213. icdev/data/context/templates/ansible/playbooks/__init__.py +1 -0
  214. icdev/data/context/templates/ansible/roles/__init__.py +1 -0
  215. icdev/data/context/templates/gitlab_ci/__init__.py +1 -0
  216. icdev/data/context/templates/grafana/__init__.py +1 -0
  217. icdev/data/context/templates/kubernetes/__init__.py +1 -0
  218. icdev/data/context/templates/project/__init__.py +1 -0
  219. icdev/data/context/templates/project/api/__init__.py +1 -0
  220. icdev/data/context/templates/project/cli/__init__.py +1 -0
  221. icdev/data/context/templates/project/data_pipeline/__init__.py +1 -0
  222. icdev/data/context/templates/project/iac/__init__.py +1 -0
  223. icdev/data/context/templates/project/javascript_frontend/__init__.py +1 -0
  224. icdev/data/context/templates/project/javascript_frontend/src/__init__.py +1 -0
  225. icdev/data/context/templates/project/javascript_frontend/tests/__init__.py +1 -0
  226. icdev/data/context/templates/project/microservice/__init__.py +1 -0
  227. icdev/data/context/templates/project/python_backend/__init__.py +1 -0
  228. icdev/data/context/templates/project/python_backend/src/__init__.py +1 -0
  229. icdev/data/context/templates/project/python_backend/tests/__init__.py +1 -0
  230. icdev/data/context/templates/project/python_backend/tests/features/__init__.py +1 -0
  231. icdev/data/context/templates/project/python_backend/tests/steps/__init__.py +1 -0
  232. icdev/data/context/templates/terraform/__init__.py +1 -0
  233. icdev/data/context/templates/terraform/govcloud_base/__init__.py +1 -0
  234. icdev/data/context/templates/terraform/modules/__init__.py +1 -0
  235. icdev/data/context/tone/__init__.py +1 -0
  236. icdev/data/context/translation/dependency_mappings.json +186 -0
  237. icdev/data/context/translation/type_mappings.json +149 -0
  238. icdev/data/docs/README.md +187 -0
  239. icdev/data/docs/__init__.py +1 -0
  240. icdev/data/docs/admin/gateway-guide.md +338 -0
  241. icdev/data/docs/admin/marketplace-guide.md +396 -0
  242. icdev/data/docs/admin/monitoring-guide.md +509 -0
  243. icdev/data/docs/architecture/compliance-framework.md +764 -0
  244. icdev/data/docs/architecture/database-schema.md +689 -0
  245. icdev/data/docs/architecture/gotcha-framework.md +518 -0
  246. icdev/data/docs/architecture/multi-agent-system.md +603 -0
  247. icdev/data/docs/dx/README.md +106 -0
  248. icdev/data/docs/dx/__init__.py +1 -0
  249. icdev/data/docs/dx/ci-cd-integration.md +378 -0
  250. icdev/data/docs/dx/claude-code-guide.md +213 -0
  251. icdev/data/docs/dx/companion-guide.md +232 -0
  252. icdev/data/docs/dx/dev-profiles.md +309 -0
  253. icdev/data/docs/dx/icdev-yaml-spec.md +219 -0
  254. icdev/data/docs/dx/integration-tiers.md +279 -0
  255. icdev/data/docs/dx/llm-routing-guide.md +456 -0
  256. icdev/data/docs/dx/quickstart.md +192 -0
  257. icdev/data/docs/dx/sdk-reference.md +356 -0
  258. icdev/data/docs/dx/unified-mcp-setup.md +525 -0
  259. icdev/data/docs/features/__init__.py +1 -0
  260. icdev/data/docs/features/phase-01-gotcha-framework.md +249 -0
  261. icdev/data/docs/features/phase-02-atlas-build-workflow.md +223 -0
  262. icdev/data/docs/features/phase-03-tdd-bdd-testing.md +261 -0
  263. icdev/data/docs/features/phase-04-nist-compliance.md +255 -0
  264. icdev/data/docs/features/phase-05-security-scanning.md +229 -0
  265. icdev/data/docs/features/phase-06-infrastructure-deployment.md +288 -0
  266. icdev/data/docs/features/phase-07-code-review-gates.md +276 -0
  267. icdev/data/docs/features/phase-08-self-healing.md +223 -0
  268. icdev/data/docs/features/phase-09-monitoring-observability.md +230 -0
  269. icdev/data/docs/features/phase-10-dashboard-web-ui.md +218 -0
  270. icdev/data/docs/features/phase-11-multi-agent-architecture.md +272 -0
  271. icdev/data/docs/features/phase-12-integration-testing.md +228 -0
  272. icdev/data/docs/features/phase-13-cicd-integration.md +257 -0
  273. icdev/data/docs/features/phase-14-secure-by-design-ivv.md +240 -0
  274. icdev/data/docs/features/phase-15-maintenance-audit.md +192 -0
  275. icdev/data/docs/features/phase-16-ato-acceleration.md +228 -0
  276. icdev/data/docs/features/phase-17-multi-framework-compliance.md +223 -0
  277. icdev/data/docs/features/phase-18-mbse-integration.md +242 -0
  278. icdev/data/docs/features/phase-19-agentic-generation.md +202 -0
  279. icdev/data/docs/features/phase-20-fips-security-categorization.md +198 -0
  280. icdev/data/docs/features/phase-21-saas-multi-tenancy.md +273 -0
  281. icdev/data/docs/features/phase-22-federated-gotcha-marketplace.md +242 -0
  282. icdev/data/docs/features/phase-23-universal-compliance-platform.md +238 -0
  283. icdev/data/docs/features/phase-24-devsecops-pipeline-security.md +198 -0
  284. icdev/data/docs/features/phase-25-zero-trust-architecture.md +220 -0
  285. icdev/data/docs/features/phase-26-dod-mosa.md +205 -0
  286. icdev/data/docs/features/phase-27-cli-capabilities.md +222 -0
  287. icdev/data/docs/features/phase-28-remote-command-gateway.md +235 -0
  288. icdev/data/docs/features/phase-29-proactive-monitoring.md +212 -0
  289. icdev/data/docs/features/phase-30-dashboard-auth.md +215 -0
  290. icdev/data/docs/features/phase-31-dashboard-ux-low-impact.md +188 -0
  291. icdev/data/docs/features/phase-32-dashboard-ux-medium-impact.md +223 -0
  292. icdev/data/docs/features/phase-33-modular-installation.md +218 -0
  293. icdev/data/docs/features/phase-34-dev-profiles.md +239 -0
  294. icdev/data/docs/features/phase-35-innovation-engine.md +257 -0
  295. icdev/data/docs/features/phase-36-evolutionary-intelligence.md +351 -0
  296. icdev/data/docs/features/phase-37-mitre-atlas-integration.md +485 -0
  297. icdev/data/docs/features/phase-38-cloud-agnostic-architecture.md +1033 -0
  298. icdev/data/docs/features/phase-39-observability-operations.md +178 -0
  299. icdev/data/docs/features/phase-40-nlq-compliance-queries.md +176 -0
  300. icdev/data/docs/features/phase-41-parallel-cicd.md +169 -0
  301. icdev/data/docs/features/phase-42-framework-planning.md +177 -0
  302. icdev/data/docs/features/phase-43-cross-language-translation.md +225 -0
  303. icdev/data/docs/features/phase-44-innovation-adaptation.md +227 -0
  304. icdev/data/docs/features/phase-45-owasp-agentic-security.md +239 -0
  305. icdev/data/docs/features/phase-46-observability-traceability-xai.md +240 -0
  306. icdev/data/docs/features/phase-47-unified-mcp-gateway.md +257 -0
  307. icdev/data/docs/features/phase-48-ai-transparency.md +203 -0
  308. icdev/data/docs/features/phase-49-ai-accountability.md +243 -0
  309. icdev/data/docs/features/phase-50-ai-governance-intake-chat.md +195 -0
  310. icdev/data/docs/features/phase-51-unified-chat-dashboard.md +240 -0
  311. icdev/data/docs/features/phase-52-code-intelligence.md +244 -0
  312. icdev/data/docs/features/phase-53-fedramp-20x-owasp-asi.md +359 -0
  313. icdev/data/docs/features/phase-54-slsa-swft-orchestration.md +379 -0
  314. icdev/data/docs/features/phase-55-a2a-v03-mcp-oauth.md +322 -0
  315. icdev/data/docs/features/phase-56-evidence-lineage.md +352 -0
  316. icdev/data/docs/features/phase-57-eu-ai-act-iron-bank.md +319 -0
  317. icdev/data/docs/features/phase-58-creative-engine.md +370 -0
  318. icdev/data/docs/features/phase-59-govcon-intelligence.md +535 -0
  319. icdev/data/docs/features/phase-60-cpmp.md +528 -0
  320. icdev/data/docs/features/phase-61-orchestration-improvements.md +534 -0
  321. icdev/data/docs/operations/dashboard-guide.md +354 -0
  322. icdev/data/docs/operations/deployment-guide.md +556 -0
  323. icdev/data/docs/operations/saas-admin-guide.md +439 -0
  324. icdev/data/docs/operations/security-operations-guide.md +733 -0
  325. icdev/data/docs/runbooks/backup-restore.md +412 -0
  326. icdev/data/docs/runbooks/troubleshooting.md +499 -0
  327. icdev/data/features/__init__.py +1 -0
  328. icdev/data/features/cicd_integration.feature +41 -0
  329. icdev/data/features/compliance_gates.feature +46 -0
  330. icdev/data/features/dashboard.feature +72 -0
  331. icdev/data/features/environment.py +25 -0
  332. icdev/data/features/project_management.feature +32 -0
  333. icdev/data/features/requirements_intake.feature +42 -0
  334. icdev/data/features/saas_platform.feature +53 -0
  335. icdev/data/features/security_scanning.feature +36 -0
  336. icdev/data/features/steps/__init__.py +1 -0
  337. icdev/data/features/steps/cicd_steps.py +465 -0
  338. icdev/data/features/steps/compliance_steps.py +308 -0
  339. icdev/data/features/steps/dashboard_steps.py +88 -0
  340. icdev/data/features/steps/project_steps.py +126 -0
  341. icdev/data/features/steps/requirements_intake_steps.py +689 -0
  342. icdev/data/features/steps/saas_platform_steps.py +572 -0
  343. icdev/data/features/steps/security_steps.py +236 -0
  344. icdev/data/features/steps/testing_steps.py +226 -0
  345. icdev/data/features/testing_pipeline.feature +42 -0
  346. icdev/data/goals/__init__.py +1 -0
  347. icdev/data/goals/agent_management.md +144 -0
  348. icdev/data/goals/agentic_generation.md +345 -0
  349. icdev/data/goals/agentic_threat_model.md +309 -0
  350. icdev/data/goals/ai_accountability.md +90 -0
  351. icdev/data/goals/ai_governance_intake.md +132 -0
  352. icdev/data/goals/ai_transparency.md +76 -0
  353. icdev/data/goals/atlas_integration.md +405 -0
  354. icdev/data/goals/ato_acceleration.md +139 -0
  355. icdev/data/goals/boundary_supply_chain.md +206 -0
  356. icdev/data/goals/build_app.md +544 -0
  357. icdev/data/goals/cicd_integration.md +86 -0
  358. icdev/data/goals/claude_dir_maintenance.md +77 -0
  359. icdev/data/goals/cli_capabilities.md +340 -0
  360. icdev/data/goals/cloud_agnostic.md +312 -0
  361. icdev/data/goals/code_intelligence.md +197 -0
  362. icdev/data/goals/code_review.md +94 -0
  363. icdev/data/goals/compliance_workflow.md +858 -0
  364. icdev/data/goals/continuous_harmonization.md +140 -0
  365. icdev/data/goals/cross_language_translation.md +171 -0
  366. icdev/data/goals/dashboard.md +142 -0
  367. icdev/data/goals/deploy_workflow.md +390 -0
  368. icdev/data/goals/devsecops_workflow.md +408 -0
  369. icdev/data/goals/evolutionary_intelligence.md +305 -0
  370. icdev/data/goals/external_integration.md +113 -0
  371. icdev/data/goals/framework_planning.md +63 -0
  372. icdev/data/goals/init_project.md +235 -0
  373. icdev/data/goals/innovation_engine.md +199 -0
  374. icdev/data/goals/integration_testing.md +189 -0
  375. icdev/data/goals/maintenance_audit.md +196 -0
  376. icdev/data/goals/manifest.md +56 -0
  377. icdev/data/goals/mbse_integration.md +504 -0
  378. icdev/data/goals/modernization_workflow.md +618 -0
  379. icdev/data/goals/monitoring.md +126 -0
  380. icdev/data/goals/mosa_workflow.md +463 -0
  381. icdev/data/goals/multi_agent_orchestration.md +68 -0
  382. icdev/data/goals/nlq_compliance.md +63 -0
  383. icdev/data/goals/observability.md +64 -0
  384. icdev/data/goals/observability_traceability_xai.md +154 -0
  385. icdev/data/goals/owasp_agentic_security.md +395 -0
  386. icdev/data/goals/parallel_cicd.md +61 -0
  387. icdev/data/goals/requirements_intake.md +213 -0
  388. icdev/data/goals/sbd_ivv_workflow.md +195 -0
  389. icdev/data/goals/security_categorization.md +133 -0
  390. icdev/data/goals/security_scan.md +381 -0
  391. icdev/data/goals/self_healing.md +120 -0
  392. icdev/data/goals/simulation_engine.md +111 -0
  393. icdev/data/goals/tdd_workflow.md +403 -0
  394. icdev/data/goals/zero_trust_architecture.md +403 -0
  395. icdev/data/hardprompts/__init__.py +1 -0
  396. icdev/data/hardprompts/agent/__init__.py +1 -0
  397. icdev/data/hardprompts/agent/agentic_architect.md +100 -0
  398. icdev/data/hardprompts/agent/debate_prompt.md +32 -0
  399. icdev/data/hardprompts/agent/fitness_evaluation.md +48 -0
  400. icdev/data/hardprompts/agent/governance_review.md +214 -0
  401. icdev/data/hardprompts/agent/reviewer_prompt.md +34 -0
  402. icdev/data/hardprompts/agent/skill_design.md +172 -0
  403. icdev/data/hardprompts/agent/task_decomposition.md +275 -0
  404. icdev/data/hardprompts/agent/veto_check_prompt.md +33 -0
  405. icdev/data/hardprompts/architect/__init__.py +1 -0
  406. icdev/data/hardprompts/architect/api_design.md +283 -0
  407. icdev/data/hardprompts/architect/data_model.md +277 -0
  408. icdev/data/hardprompts/architect/system_design.md +180 -0
  409. icdev/data/hardprompts/builder/__init__.py +1 -0
  410. icdev/data/hardprompts/builder/code_generation.md +59 -0
  411. icdev/data/hardprompts/builder/refactor.md +58 -0
  412. icdev/data/hardprompts/builder/scaffold_project.md +69 -0
  413. icdev/data/hardprompts/builder/test_generation.md +87 -0
  414. icdev/data/hardprompts/ci/__init__.py +1 -0
  415. icdev/data/hardprompts/ci/worktree_setup.md +35 -0
  416. icdev/data/hardprompts/compliance/__init__.py +1 -0
  417. icdev/data/hardprompts/compliance/cmmc_assessment.md +63 -0
  418. icdev/data/hardprompts/compliance/cssp_assessment.md +75 -0
  419. icdev/data/hardprompts/compliance/cui_marking.md +86 -0
  420. icdev/data/hardprompts/compliance/fedramp_assessment.md +55 -0
  421. icdev/data/hardprompts/compliance/ivv_assessment.md +96 -0
  422. icdev/data/hardprompts/compliance/poam_generation.md +57 -0
  423. icdev/data/hardprompts/compliance/sbd_assessment.md +101 -0
  424. icdev/data/hardprompts/compliance/security_categorization.md +74 -0
  425. icdev/data/hardprompts/compliance/ssp_generation.md +56 -0
  426. icdev/data/hardprompts/compliance/stig_evaluation.md +63 -0
  427. icdev/data/hardprompts/dashboard/__init__.py +1 -0
  428. icdev/data/hardprompts/dashboard/nlq_system_prompt.md +26 -0
  429. icdev/data/hardprompts/infra/__init__.py +1 -0
  430. icdev/data/hardprompts/infra/k8s_manifests.md +118 -0
  431. icdev/data/hardprompts/infra/pipeline_generation.md +160 -0
  432. icdev/data/hardprompts/infra/terraform_generation.md +92 -0
  433. icdev/data/hardprompts/integration/__init__.py +1 -0
  434. icdev/data/hardprompts/integration/approval_review.md +17 -0
  435. icdev/data/hardprompts/integration/jira_mapping.md +25 -0
  436. icdev/data/hardprompts/integration/servicenow_mapping.md +14 -0
  437. icdev/data/hardprompts/knowledge/__init__.py +1 -0
  438. icdev/data/hardprompts/knowledge/pattern_detection.md +73 -0
  439. icdev/data/hardprompts/knowledge/recommendation_engine.md +90 -0
  440. icdev/data/hardprompts/knowledge/root_cause_analysis.md +91 -0
  441. icdev/data/hardprompts/maintenance/__init__.py +1 -0
  442. icdev/data/hardprompts/maintenance/maintenance_assessment.md +82 -0
  443. icdev/data/hardprompts/mbse/__init__.py +1 -0
  444. icdev/data/hardprompts/mbse/digital_thread.md +67 -0
  445. icdev/data/hardprompts/mbse/model_import.md +62 -0
  446. icdev/data/hardprompts/mbse/model_to_code.md +65 -0
  447. icdev/data/hardprompts/modernization/__init__.py +1 -0
  448. icdev/data/hardprompts/modernization/legacy_analysis.md +93 -0
  449. icdev/data/hardprompts/modernization/migration_planning.md +150 -0
  450. icdev/data/hardprompts/modernization/seven_r_assessment.md +107 -0
  451. icdev/data/hardprompts/requirements/__init__.py +1 -0
  452. icdev/data/hardprompts/requirements/bdd_generation.md +35 -0
  453. icdev/data/hardprompts/requirements/clarification_prioritization.md +29 -0
  454. icdev/data/hardprompts/requirements/decomposition.md +60 -0
  455. icdev/data/hardprompts/requirements/document_extraction.md +45 -0
  456. icdev/data/hardprompts/requirements/gap_detection.md +70 -0
  457. icdev/data/hardprompts/requirements/intake_conversation.md +101 -0
  458. icdev/data/hardprompts/requirements/readiness_assessment.md +39 -0
  459. icdev/data/hardprompts/requirements/spec_quality.md +33 -0
  460. icdev/data/hardprompts/requirements/traceability_analysis.md +23 -0
  461. icdev/data/hardprompts/security/__init__.py +1 -0
  462. icdev/data/hardprompts/security/endpoint_security.md +78 -0
  463. icdev/data/hardprompts/security/threat_model.md +70 -0
  464. icdev/data/hardprompts/security/vulnerability_assessment.md +81 -0
  465. icdev/data/hardprompts/simulation/__init__.py +1 -0
  466. icdev/data/hardprompts/simulation/architecture_impact.md +27 -0
  467. icdev/data/hardprompts/simulation/coa_alternative.md +27 -0
  468. icdev/data/hardprompts/simulation/coa_generation.md +25 -0
  469. icdev/data/hardprompts/simulation/compliance_impact.md +28 -0
  470. icdev/data/hardprompts/simulation/cost_estimation.md +33 -0
  471. icdev/data/hardprompts/simulation/risk_assessment.md +28 -0
  472. icdev/data/hardprompts/translation/code_translation.md +68 -0
  473. icdev/data/hardprompts/translation/dependency_suggestion.md +44 -0
  474. icdev/data/hardprompts/translation/test_translation.md +64 -0
  475. icdev/data/hardprompts/translation/translation_repair.md +59 -0
  476. icdev/py.typed +0 -0
  477. icdev/tools/__init__.py +1 -0
  478. icdev/tools/_gen_formatter.py +12 -0
  479. icdev/tools/a2a/__init__.py +1 -0
  480. icdev/tools/a2a/agent_cards/architect.json +43 -0
  481. icdev/tools/a2a/agent_cards/builder.json +50 -0
  482. icdev/tools/a2a/agent_cards/compliance.json +57 -0
  483. icdev/tools/a2a/agent_cards/devsecops.json +71 -0
  484. icdev/tools/a2a/agent_cards/infra.json +57 -0
  485. icdev/tools/a2a/agent_cards/integration.json +57 -0
  486. icdev/tools/a2a/agent_cards/knowledge.json +43 -0
  487. icdev/tools/a2a/agent_cards/mbse.json +57 -0
  488. icdev/tools/a2a/agent_cards/modernization.json +50 -0
  489. icdev/tools/a2a/agent_cards/monitor.json +43 -0
  490. icdev/tools/a2a/agent_cards/orchestrator.json +36 -0
  491. icdev/tools/a2a/agent_cards/requirements_analyst.json +64 -0
  492. icdev/tools/a2a/agent_cards/security.json +50 -0
  493. icdev/tools/a2a/agent_cards/simulation.json +57 -0
  494. icdev/tools/a2a/agent_cards/supply_chain.json +50 -0
  495. icdev/tools/a2a/agent_client.py +349 -0
  496. icdev/tools/a2a/agent_registry.py +412 -0
  497. icdev/tools/a2a/agent_server.py +579 -0
  498. icdev/tools/a2a/task.py +200 -0
  499. icdev/tools/agent/__init__.py +2 -0
  500. icdev/tools/agent/a2a_agent_card_generator.py +285 -0
  501. icdev/tools/agent/a2a_discovery_server.py +250 -0
  502. icdev/tools/agent/agent_executor.py +529 -0
  503. icdev/tools/agent/agent_memory.py +557 -0
  504. icdev/tools/agent/agent_models.py +51 -0
  505. icdev/tools/agent/atlas_critique.py +908 -0
  506. icdev/tools/agent/authority.py +443 -0
  507. icdev/tools/agent/bedrock_client.py +1075 -0
  508. icdev/tools/agent/collaboration.py +871 -0
  509. icdev/tools/agent/dispatcher_mode.py +665 -0
  510. icdev/tools/agent/mailbox.py +575 -0
  511. icdev/tools/agent/prompt_chain_executor.py +1064 -0
  512. icdev/tools/agent/session_purpose.py +350 -0
  513. icdev/tools/agent/skill_router.py +638 -0
  514. icdev/tools/agent/skill_selector.py +486 -0
  515. icdev/tools/agent/team_orchestrator.py +1108 -0
  516. icdev/tools/agent/token_tracker.py +290 -0
  517. icdev/tools/analysis/__init__.py +1 -0
  518. icdev/tools/analysis/code_analyzer.py +780 -0
  519. icdev/tools/analysis/runtime_feedback.py +389 -0
  520. icdev/tools/audit/__init__.py +1 -0
  521. icdev/tools/audit/audit_logger.py +196 -0
  522. icdev/tools/audit/audit_query.py +157 -0
  523. icdev/tools/audit/decision_recorder.py +72 -0
  524. icdev/tools/builder/__init__.py +1 -0
  525. icdev/tools/builder/agentic_fitness.py +534 -0
  526. icdev/tools/builder/agentic_test_templates/test_a2a_callback.py +117 -0
  527. icdev/tools/builder/agentic_test_templates/test_a2a_lifecycle.feature +52 -0
  528. icdev/tools/builder/agentic_test_templates/test_agent_card.feature +37 -0
  529. icdev/tools/builder/agentic_test_templates/test_agent_health.py +128 -0
  530. icdev/tools/builder/agentic_test_templates/test_memory_system.feature +50 -0
  531. icdev/tools/builder/agentic_test_templates/test_skill_execution.feature +40 -0
  532. icdev/tools/builder/app_blueprint.py +1583 -0
  533. icdev/tools/builder/child_app_generator.py +2852 -0
  534. icdev/tools/builder/claude_md_generator.py +1734 -0
  535. icdev/tools/builder/code_generator.py +3703 -0
  536. icdev/tools/builder/db_init_generator.py +1709 -0
  537. icdev/tools/builder/dev_profile_manager.py +954 -0
  538. icdev/tools/builder/formatter.py +768 -0
  539. icdev/tools/builder/goal_adapter.py +592 -0
  540. icdev/tools/builder/gotcha_validator.py +812 -0
  541. icdev/tools/builder/language_support.py +441 -0
  542. icdev/tools/builder/linter.py +976 -0
  543. icdev/tools/builder/profile_detector.py +657 -0
  544. icdev/tools/builder/profile_md_generator.py +723 -0
  545. icdev/tools/builder/scaffolder.py +1590 -0
  546. icdev/tools/builder/scaffolder_extended.py +1771 -0
  547. icdev/tools/builder/test_writer.py +950 -0
  548. icdev/tools/ci/__init__.py +2 -0
  549. icdev/tools/ci/connectors/__init__.py +2 -0
  550. icdev/tools/ci/connectors/base_connector.py +80 -0
  551. icdev/tools/ci/connectors/connector_registry.py +188 -0
  552. icdev/tools/ci/connectors/mattermost_connector.py +159 -0
  553. icdev/tools/ci/connectors/slack_connector.py +197 -0
  554. icdev/tools/ci/core/__init__.py +2 -0
  555. icdev/tools/ci/core/air_gap_detector.py +115 -0
  556. icdev/tools/ci/core/comment_handler.py +192 -0
  557. icdev/tools/ci/core/conversation_manager.py +479 -0
  558. icdev/tools/ci/core/event_envelope.py +500 -0
  559. icdev/tools/ci/core/event_router.py +443 -0
  560. icdev/tools/ci/core/failure_parser.py +397 -0
  561. icdev/tools/ci/core/recovery_engine.py +527 -0
  562. icdev/tools/ci/modules/__init__.py +2 -0
  563. icdev/tools/ci/modules/agent.py +271 -0
  564. icdev/tools/ci/modules/git_ops.py +175 -0
  565. icdev/tools/ci/modules/state.py +117 -0
  566. icdev/tools/ci/modules/vcs.py +303 -0
  567. icdev/tools/ci/modules/workflow_ops.py +295 -0
  568. icdev/tools/ci/modules/worktree.py +340 -0
  569. icdev/tools/ci/pipeline_config_generator.py +558 -0
  570. icdev/tools/ci/triggers/__init__.py +2 -0
  571. icdev/tools/ci/triggers/gitlab_task_monitor.py +330 -0
  572. icdev/tools/ci/triggers/poll_trigger.py +237 -0
  573. icdev/tools/ci/triggers/webhook_server.py +356 -0
  574. icdev/tools/ci/workflows/__init__.py +2 -0
  575. icdev/tools/ci/workflows/icdev_build.py +140 -0
  576. icdev/tools/ci/workflows/icdev_comply.py +284 -0
  577. icdev/tools/ci/workflows/icdev_document.py +152 -0
  578. icdev/tools/ci/workflows/icdev_e2e.py +188 -0
  579. icdev/tools/ci/workflows/icdev_patch.py +186 -0
  580. icdev/tools/ci/workflows/icdev_plan.py +202 -0
  581. icdev/tools/ci/workflows/icdev_plan_build.py +41 -0
  582. icdev/tools/ci/workflows/icdev_plan_build_test.py +46 -0
  583. icdev/tools/ci/workflows/icdev_plan_build_test_review.py +47 -0
  584. icdev/tools/ci/workflows/icdev_review.py +126 -0
  585. icdev/tools/ci/workflows/icdev_sdlc.py +261 -0
  586. icdev/tools/ci/workflows/icdev_test.py +240 -0
  587. icdev/tools/cli/__init__.py +1 -0
  588. icdev/tools/cli/output_formatter.py +756 -0
  589. icdev/tools/cli_formatter.py +42 -0
  590. icdev/tools/cloud/__init__.py +11 -0
  591. icdev/tools/cloud/cloud_mode_manager.py +364 -0
  592. icdev/tools/cloud/csp_changelog.py +383 -0
  593. icdev/tools/cloud/csp_health_checker.py +268 -0
  594. icdev/tools/cloud/csp_monitor.py +951 -0
  595. icdev/tools/cloud/iam_provider.py +593 -0
  596. icdev/tools/cloud/kms_provider.py +346 -0
  597. icdev/tools/cloud/monitoring_provider.py +628 -0
  598. icdev/tools/cloud/provider_factory.py +376 -0
  599. icdev/tools/cloud/region_validator.py +345 -0
  600. icdev/tools/cloud/registry_provider.py +563 -0
  601. icdev/tools/cloud/secrets_provider.py +486 -0
  602. icdev/tools/cloud/storage_provider.py +446 -0
  603. icdev/tools/compat/__init__.py +21 -0
  604. icdev/tools/compat/cli_harmonizer.py +251 -0
  605. icdev/tools/compat/datetime_utils.py +18 -0
  606. icdev/tools/compat/db_utils.py +160 -0
  607. icdev/tools/compat/platform_utils.py +123 -0
  608. icdev/tools/compliance/__init__.py +1 -0
  609. icdev/tools/compliance/accountability_manager.py +397 -0
  610. icdev/tools/compliance/ai_accountability_audit.py +294 -0
  611. icdev/tools/compliance/ai_impact_assessor.py +273 -0
  612. icdev/tools/compliance/ai_incident_response.py +301 -0
  613. icdev/tools/compliance/ai_inventory_manager.py +239 -0
  614. icdev/tools/compliance/ai_reassessment_scheduler.py +256 -0
  615. icdev/tools/compliance/ai_transparency_audit.py +248 -0
  616. icdev/tools/compliance/atlas_assessor.py +278 -0
  617. icdev/tools/compliance/atlas_report_generator.py +1211 -0
  618. icdev/tools/compliance/base_assessor.py +597 -0
  619. icdev/tools/compliance/cato_monitor.py +1385 -0
  620. icdev/tools/compliance/cato_scheduler.py +699 -0
  621. icdev/tools/compliance/cjis_assessor.py +76 -0
  622. icdev/tools/compliance/classification_manager.py +1353 -0
  623. icdev/tools/compliance/cmmc_assessor.py +1491 -0
  624. icdev/tools/compliance/cmmc_report_generator.py +1100 -0
  625. icdev/tools/compliance/compliance_detector.py +463 -0
  626. icdev/tools/compliance/compliance_exporter.py +427 -0
  627. icdev/tools/compliance/compliance_status.py +825 -0
  628. icdev/tools/compliance/control_mapper.py +505 -0
  629. icdev/tools/compliance/crosswalk_engine.py +1203 -0
  630. icdev/tools/compliance/cssp_assessor.py +1045 -0
  631. icdev/tools/compliance/cssp_evidence_collector.py +729 -0
  632. icdev/tools/compliance/cssp_report_generator.py +1116 -0
  633. icdev/tools/compliance/cui_marker.py +388 -0
  634. icdev/tools/compliance/diagram_validator.py +600 -0
  635. icdev/tools/compliance/emass/__init__.py +2 -0
  636. icdev/tools/compliance/emass/emass_client.py +840 -0
  637. icdev/tools/compliance/emass/emass_export.py +777 -0
  638. icdev/tools/compliance/emass/emass_sync.py +826 -0
  639. icdev/tools/compliance/eu_ai_act_classifier.py +194 -0
  640. icdev/tools/compliance/evidence_collector.py +468 -0
  641. icdev/tools/compliance/fairness_assessor.py +316 -0
  642. icdev/tools/compliance/fedramp_assessor.py +1808 -0
  643. icdev/tools/compliance/fedramp_authorization_packager.py +137 -0
  644. icdev/tools/compliance/fedramp_ksi_generator.py +355 -0
  645. icdev/tools/compliance/fedramp_report_generator.py +1128 -0
  646. icdev/tools/compliance/fips199_categorizer.py +881 -0
  647. icdev/tools/compliance/fips200_validator.py +315 -0
  648. icdev/tools/compliance/gao_ai_assessor.py +231 -0
  649. icdev/tools/compliance/gao_evidence_builder.py +308 -0
  650. icdev/tools/compliance/hipaa_assessor.py +78 -0
  651. icdev/tools/compliance/hitrust_assessor.py +49 -0
  652. icdev/tools/compliance/incident_response_plan.py +718 -0
  653. icdev/tools/compliance/iso27001_assessor.py +92 -0
  654. icdev/tools/compliance/iso42001_assessor.py +114 -0
  655. icdev/tools/compliance/ivv_assessor.py +2327 -0
  656. icdev/tools/compliance/ivv_report_generator.py +1662 -0
  657. icdev/tools/compliance/model_card_generator.py +297 -0
  658. icdev/tools/compliance/mosa_assessor.py +117 -0
  659. icdev/tools/compliance/multi_regime_assessor.py +451 -0
  660. icdev/tools/compliance/narrative_generator.py +1013 -0
  661. icdev/tools/compliance/nist_800_207_assessor.py +191 -0
  662. icdev/tools/compliance/nist_ai_600_1_assessor.py +188 -0
  663. icdev/tools/compliance/nist_ai_rmf_assessor.py +110 -0
  664. icdev/tools/compliance/nist_lookup.py +245 -0
  665. icdev/tools/compliance/omb_m25_21_assessor.py +228 -0
  666. icdev/tools/compliance/omb_m26_04_assessor.py +188 -0
  667. icdev/tools/compliance/oscal_catalog_adapter.py +395 -0
  668. icdev/tools/compliance/oscal_generator.py +2170 -0
  669. icdev/tools/compliance/oscal_tools.py +1182 -0
  670. icdev/tools/compliance/owasp_agentic_assessor.py +226 -0
  671. icdev/tools/compliance/owasp_asi_assessor.py +200 -0
  672. icdev/tools/compliance/owasp_llm_assessor.py +244 -0
  673. icdev/tools/compliance/pci_dss_assessor.py +80 -0
  674. icdev/tools/compliance/pi_compliance_tracker.py +1461 -0
  675. icdev/tools/compliance/poam_generator.py +405 -0
  676. icdev/tools/compliance/resolve_marking.py +283 -0
  677. icdev/tools/compliance/sbd_assessor.py +2068 -0
  678. icdev/tools/compliance/sbd_report_generator.py +1236 -0
  679. icdev/tools/compliance/sbom_generator.py +1008 -0
  680. icdev/tools/compliance/siem_config_generator.py +674 -0
  681. icdev/tools/compliance/slsa_attestation_generator.py +490 -0
  682. icdev/tools/compliance/soc2_assessor.py +77 -0
  683. icdev/tools/compliance/ssp_generator.py +573 -0
  684. icdev/tools/compliance/stig_checker.py +727 -0
  685. icdev/tools/compliance/swft_evidence_bundler.py +337 -0
  686. icdev/tools/compliance/system_card_generator.py +309 -0
  687. icdev/tools/compliance/traceability_matrix.py +1281 -0
  688. icdev/tools/compliance/universal_classification_manager.py +1172 -0
  689. icdev/tools/compliance/xacta/__init__.py +2 -0
  690. icdev/tools/compliance/xacta/xacta_client.py +449 -0
  691. icdev/tools/compliance/xacta/xacta_export.py +557 -0
  692. icdev/tools/compliance/xacta/xacta_sync.py +333 -0
  693. icdev/tools/compliance/xai_assessor.py +231 -0
  694. icdev/tools/dashboard/__init__.py +1 -0
  695. icdev/tools/dashboard/api/__init__.py +1 -0
  696. icdev/tools/dashboard/api/_pipeline_state.py +17 -0
  697. icdev/tools/dashboard/api/activity.py +206 -0
  698. icdev/tools/dashboard/api/admin.py +176 -0
  699. icdev/tools/dashboard/api/agents.py +53 -0
  700. icdev/tools/dashboard/api/ai_accountability.py +163 -0
  701. icdev/tools/dashboard/api/ai_transparency.py +198 -0
  702. icdev/tools/dashboard/api/audit.py +58 -0
  703. icdev/tools/dashboard/api/batch.py +666 -0
  704. icdev/tools/dashboard/api/chat.py +241 -0
  705. icdev/tools/dashboard/api/cicd.py +219 -0
  706. icdev/tools/dashboard/api/code_quality.py +223 -0
  707. icdev/tools/dashboard/api/compliance.py +171 -0
  708. icdev/tools/dashboard/api/cpmp.py +915 -0
  709. icdev/tools/dashboard/api/diagrams.py +65 -0
  710. icdev/tools/dashboard/api/events.py +250 -0
  711. icdev/tools/dashboard/api/evidence.py +99 -0
  712. icdev/tools/dashboard/api/fedramp_20x.py +77 -0
  713. icdev/tools/dashboard/api/govcon.py +1095 -0
  714. icdev/tools/dashboard/api/intake.py +1171 -0
  715. icdev/tools/dashboard/api/lineage.py +163 -0
  716. icdev/tools/dashboard/api/metrics.py +155 -0
  717. icdev/tools/dashboard/api/nlq.py +72 -0
  718. icdev/tools/dashboard/api/orchestration.py +472 -0
  719. icdev/tools/dashboard/api/oscal.py +183 -0
  720. icdev/tools/dashboard/api/prod_audit.py +183 -0
  721. icdev/tools/dashboard/api/projects.py +191 -0
  722. icdev/tools/dashboard/api/proposals.py +1084 -0
  723. icdev/tools/dashboard/api/traces.py +363 -0
  724. icdev/tools/dashboard/api/usage.py +234 -0
  725. icdev/tools/dashboard/app.py +1986 -0
  726. icdev/tools/dashboard/auth.py +500 -0
  727. icdev/tools/dashboard/byok.py +245 -0
  728. icdev/tools/dashboard/chat_manager.py +675 -0
  729. icdev/tools/dashboard/config.py +116 -0
  730. icdev/tools/dashboard/diagram_definitions.py +642 -0
  731. icdev/tools/dashboard/nlq_processor.py +323 -0
  732. icdev/tools/dashboard/phase_loader.py +136 -0
  733. icdev/tools/dashboard/sse_manager.py +89 -0
  734. icdev/tools/dashboard/state_tracker.py +267 -0
  735. icdev/tools/dashboard/static/css/style.css +706 -0
  736. icdev/tools/dashboard/static/css/ux.css +2047 -0
  737. icdev/tools/dashboard/static/js/activity.js +322 -0
  738. icdev/tools/dashboard/static/js/api.js +161 -0
  739. icdev/tools/dashboard/static/js/batch.js +814 -0
  740. icdev/tools/dashboard/static/js/charts.js +618 -0
  741. icdev/tools/dashboard/static/js/chat.js +1514 -0
  742. icdev/tools/dashboard/static/js/kanban.js +113 -0
  743. icdev/tools/dashboard/static/js/live.js +569 -0
  744. icdev/tools/dashboard/static/js/mermaid-icdev.js +332 -0
  745. icdev/tools/dashboard/static/js/proposals.js +588 -0
  746. icdev/tools/dashboard/static/js/shortcuts.js +544 -0
  747. icdev/tools/dashboard/static/js/tables.js +652 -0
  748. icdev/tools/dashboard/static/js/tour.js +524 -0
  749. icdev/tools/dashboard/static/js/ux.js +942 -0
  750. icdev/tools/dashboard/templates/404.html +10 -0
  751. icdev/tools/dashboard/templates/activity.html +80 -0
  752. icdev/tools/dashboard/templates/admin/users.html +144 -0
  753. icdev/tools/dashboard/templates/ai_accountability.html +235 -0
  754. icdev/tools/dashboard/templates/ai_transparency.html +263 -0
  755. icdev/tools/dashboard/templates/base.html +104 -0
  756. icdev/tools/dashboard/templates/batch.html +23 -0
  757. icdev/tools/dashboard/templates/chat.html +332 -0
  758. icdev/tools/dashboard/templates/children.html +149 -0
  759. icdev/tools/dashboard/templates/cicd.html +253 -0
  760. icdev/tools/dashboard/templates/code_quality.html +214 -0
  761. icdev/tools/dashboard/templates/cpmp/cor_detail.html +220 -0
  762. icdev/tools/dashboard/templates/cpmp/cor_portal.html +91 -0
  763. icdev/tools/dashboard/templates/cpmp/deliverable_detail.html +197 -0
  764. icdev/tools/dashboard/templates/cpmp/detail.html +578 -0
  765. icdev/tools/dashboard/templates/cpmp/portfolio.html +202 -0
  766. icdev/tools/dashboard/templates/dev_profiles.html +304 -0
  767. icdev/tools/dashboard/templates/diagrams.html +224 -0
  768. icdev/tools/dashboard/templates/events/timeline.html +232 -0
  769. icdev/tools/dashboard/templates/evidence.html +134 -0
  770. icdev/tools/dashboard/templates/fedramp_20x.html +207 -0
  771. icdev/tools/dashboard/templates/gateway.html +244 -0
  772. icdev/tools/dashboard/templates/govcon/capabilities.html +135 -0
  773. icdev/tools/dashboard/templates/govcon/pipeline.html +214 -0
  774. icdev/tools/dashboard/templates/govcon/requirements.html +120 -0
  775. icdev/tools/dashboard/templates/index.html +254 -0
  776. icdev/tools/dashboard/templates/lineage.html +141 -0
  777. icdev/tools/dashboard/templates/login.html +51 -0
  778. icdev/tools/dashboard/templates/monitoring/overview.html +193 -0
  779. icdev/tools/dashboard/templates/orchestration/dashboard.html +545 -0
  780. icdev/tools/dashboard/templates/oscal.html +263 -0
  781. icdev/tools/dashboard/templates/phases.html +150 -0
  782. icdev/tools/dashboard/templates/prod_audit.html +280 -0
  783. icdev/tools/dashboard/templates/profile.html +183 -0
  784. icdev/tools/dashboard/templates/projects/detail.html +583 -0
  785. icdev/tools/dashboard/templates/projects/list.html +47 -0
  786. icdev/tools/dashboard/templates/proposals/detail.html +1253 -0
  787. icdev/tools/dashboard/templates/proposals/list.html +179 -0
  788. icdev/tools/dashboard/templates/proposals/section_detail.html +193 -0
  789. icdev/tools/dashboard/templates/provenance.html +181 -0
  790. icdev/tools/dashboard/templates/query/nlq.html +234 -0
  791. icdev/tools/dashboard/templates/quick_paths.html +69 -0
  792. icdev/tools/dashboard/templates/traces.html +155 -0
  793. icdev/tools/dashboard/templates/translation_detail.html +199 -0
  794. icdev/tools/dashboard/templates/translations.html +162 -0
  795. icdev/tools/dashboard/templates/usage.html +225 -0
  796. icdev/tools/dashboard/templates/wizard.html +539 -0
  797. icdev/tools/dashboard/templates/xai.html +208 -0
  798. icdev/tools/dashboard/ux_helpers.py +962 -0
  799. icdev/tools/dashboard/websocket.py +81 -0
  800. icdev/tools/db/__init__.py +1 -0
  801. icdev/tools/db/backup.py +312 -0
  802. icdev/tools/db/backup_manager.py +832 -0
  803. icdev/tools/db/init_icdev_db.py +5900 -0
  804. icdev/tools/db/migrate.py +178 -0
  805. icdev/tools/db/migration_runner.py +549 -0
  806. icdev/tools/db/migrations/001_baseline/meta.json +9 -0
  807. icdev/tools/db/migrations/001_baseline/up.py +68 -0
  808. icdev/tools/db/migrations/002_memory_enhancements/down.sql +8 -0
  809. icdev/tools/db/migrations/002_memory_enhancements/meta.json +9 -0
  810. icdev/tools/db/migrations/002_memory_enhancements/up.py +118 -0
  811. icdev/tools/db/migrations/003_dev_profiles/meta.json +8 -0
  812. icdev/tools/db/migrations/003_dev_profiles/up.py +93 -0
  813. icdev/tools/db/migrations/004_innovation_engine/down.py +19 -0
  814. icdev/tools/db/migrations/004_innovation_engine/up.py +227 -0
  815. icdev/tools/db/migrations/005_phase_37_ai_security/down.py +19 -0
  816. icdev/tools/db/migrations/005_phase_37_ai_security/up.py +258 -0
  817. icdev/tools/db/migrations/006_phase_36_evolution/down.py +21 -0
  818. icdev/tools/db/migrations/006_phase_36_evolution/up.py +323 -0
  819. icdev/tools/db/migrations/007_phase_38_cloud/down.py +14 -0
  820. icdev/tools/db/migrations/007_phase_38_cloud/up.py +110 -0
  821. icdev/tools/db/migrations/008_phase36_37_integration/up.py +55 -0
  822. icdev/tools/db/migrations/__init__.py +2 -0
  823. icdev/tools/devsecops/__init__.py +2 -0
  824. icdev/tools/devsecops/attestation_manager.py +458 -0
  825. icdev/tools/devsecops/network_segmentation_generator.py +614 -0
  826. icdev/tools/devsecops/pdp_config_generator.py +1256 -0
  827. icdev/tools/devsecops/pipeline_security_generator.py +484 -0
  828. icdev/tools/devsecops/policy_generator.py +653 -0
  829. icdev/tools/devsecops/profile_manager.py +388 -0
  830. icdev/tools/devsecops/service_mesh_generator.py +1073 -0
  831. icdev/tools/devsecops/zta_maturity_scorer.py +368 -0
  832. icdev/tools/devsecops/zta_terraform_generator.py +1303 -0
  833. icdev/tools/dx/__init__.py +3 -0
  834. icdev/tools/dx/companion.py +266 -0
  835. icdev/tools/dx/instruction_generator.py +753 -0
  836. icdev/tools/dx/mcp_config_generator.py +282 -0
  837. icdev/tools/dx/skill_translator.py +425 -0
  838. icdev/tools/dx/tool_detector.py +144 -0
  839. icdev/tools/extensions/__init__.py +21 -0
  840. icdev/tools/extensions/builtins/010_ai_governance_chat.py +277 -0
  841. icdev/tools/extensions/builtins/__init__.py +2 -0
  842. icdev/tools/extensions/extension_manager.py +455 -0
  843. icdev/tools/infra/__init__.py +1 -0
  844. icdev/tools/infra/ansible_generator.py +869 -0
  845. icdev/tools/infra/dockerfile_generator.py +361 -0
  846. icdev/tools/infra/infra_status.py +393 -0
  847. icdev/tools/infra/ironbank_metadata_generator.py +411 -0
  848. icdev/tools/infra/k8s_generator.py +1002 -0
  849. icdev/tools/infra/pipeline_generator.py +832 -0
  850. icdev/tools/infra/rollback.py +400 -0
  851. icdev/tools/infra/terraform_generator.py +1142 -0
  852. icdev/tools/infra/terraform_generator_azure.py +1254 -0
  853. icdev/tools/infra/terraform_generator_gcp.py +953 -0
  854. icdev/tools/infra/terraform_generator_ibm.py +360 -0
  855. icdev/tools/infra/terraform_generator_oci.py +919 -0
  856. icdev/tools/infra/terraform_generator_onprem.py +319 -0
  857. icdev/tools/innovation/__init__.py +8 -0
  858. icdev/tools/innovation/competitive_intel.py +492 -0
  859. icdev/tools/innovation/innovation_manager.py +681 -0
  860. icdev/tools/innovation/introspective_analyzer.py +774 -0
  861. icdev/tools/innovation/register_external_patterns.py +440 -0
  862. icdev/tools/innovation/signal_ranker.py +1038 -0
  863. icdev/tools/innovation/solution_generator.py +697 -0
  864. icdev/tools/innovation/standards_monitor.py +466 -0
  865. icdev/tools/innovation/trend_detector.py +1046 -0
  866. icdev/tools/innovation/triage_engine.py +1149 -0
  867. icdev/tools/innovation/web_scanner.py +894 -0
  868. icdev/tools/installer/__init__.py +1 -0
  869. icdev/tools/installer/compliance_configurator.py +637 -0
  870. icdev/tools/installer/installer.py +1711 -0
  871. icdev/tools/installer/module_registry.py +805 -0
  872. icdev/tools/installer/platform_setup.py +961 -0
  873. icdev/tools/integration/__init__.py +2 -0
  874. icdev/tools/integration/approval_manager.py +561 -0
  875. icdev/tools/integration/doors_exporter.py +627 -0
  876. icdev/tools/integration/gitlab_connector.py +784 -0
  877. icdev/tools/integration/jira_connector.py +774 -0
  878. icdev/tools/integration/servicenow_connector.py +693 -0
  879. icdev/tools/knowledge/__init__.py +1 -0
  880. icdev/tools/knowledge/knowledge_ingest.py +293 -0
  881. icdev/tools/knowledge/pattern_detector.py +693 -0
  882. icdev/tools/knowledge/recommendation_engine.py +461 -0
  883. icdev/tools/knowledge/self_heal_analyzer.py +504 -0
  884. icdev/tools/llm/__init__.py +72 -0
  885. icdev/tools/llm/anthropic_provider.py +170 -0
  886. icdev/tools/llm/azure_openai_provider.py +338 -0
  887. icdev/tools/llm/bedrock_provider.py +315 -0
  888. icdev/tools/llm/embedding_provider.py +438 -0
  889. icdev/tools/llm/gemini_provider.py +381 -0
  890. icdev/tools/llm/ibm_watsonx_provider.py +232 -0
  891. icdev/tools/llm/oci_genai_provider.py +462 -0
  892. icdev/tools/llm/ollama_provider.py +340 -0
  893. icdev/tools/llm/openai_provider.py +225 -0
  894. icdev/tools/llm/provider.py +355 -0
  895. icdev/tools/llm/provider_sdk.py +175 -0
  896. icdev/tools/llm/router.py +780 -0
  897. icdev/tools/llm/vertex_ai_provider.py +374 -0
  898. icdev/tools/maintenance/__init__.py +2 -0
  899. icdev/tools/maintenance/dependency_scanner.py +1030 -0
  900. icdev/tools/maintenance/maintenance_auditor.py +815 -0
  901. icdev/tools/maintenance/remediation_engine.py +966 -0
  902. icdev/tools/maintenance/vulnerability_checker.py +987 -0
  903. icdev/tools/mbse/__init__.py +3 -0
  904. icdev/tools/mbse/des_assessor.py +1186 -0
  905. icdev/tools/mbse/des_report_generator.py +800 -0
  906. icdev/tools/mbse/diagram_extractor.py +811 -0
  907. icdev/tools/mbse/digital_thread.py +1665 -0
  908. icdev/tools/mbse/model_code_generator.py +1122 -0
  909. icdev/tools/mbse/model_control_mapper.py +420 -0
  910. icdev/tools/mbse/pi_model_tracker.py +1093 -0
  911. icdev/tools/mbse/reqif_parser.py +1483 -0
  912. icdev/tools/mbse/sync_engine.py +1805 -0
  913. icdev/tools/mbse/xmi_parser.py +1573 -0
  914. icdev/tools/mcp/__init__.py +1 -0
  915. icdev/tools/mcp/base_server.py +535 -0
  916. icdev/tools/mcp/builder_server.py +725 -0
  917. icdev/tools/mcp/compliance_server.py +1407 -0
  918. icdev/tools/mcp/context_indexer.py +199 -0
  919. icdev/tools/mcp/context_server.py +305 -0
  920. icdev/tools/mcp/core_server.py +679 -0
  921. icdev/tools/mcp/devsecops_server.py +432 -0
  922. icdev/tools/mcp/gap_handlers.py +1079 -0
  923. icdev/tools/mcp/gateway_server.py +339 -0
  924. icdev/tools/mcp/generate_registry.py +623 -0
  925. icdev/tools/mcp/infra_server.py +264 -0
  926. icdev/tools/mcp/innovation_server.py +316 -0
  927. icdev/tools/mcp/integration_server.py +527 -0
  928. icdev/tools/mcp/knowledge_server.py +429 -0
  929. icdev/tools/mcp/maintenance_server.py +248 -0
  930. icdev/tools/mcp/marketplace_server.py +499 -0
  931. icdev/tools/mcp/mbse_server.py +398 -0
  932. icdev/tools/mcp/modernization_server.py +496 -0
  933. icdev/tools/mcp/observability_server.py +354 -0
  934. icdev/tools/mcp/requirements_server.py +415 -0
  935. icdev/tools/mcp/simulation_server.py +468 -0
  936. icdev/tools/mcp/standalone/__init__.py +2 -0
  937. icdev/tools/mcp/standalone/builder.py +59 -0
  938. icdev/tools/mcp/standalone/compliance.py +59 -0
  939. icdev/tools/mcp/standalone/core.py +59 -0
  940. icdev/tools/mcp/standalone/knowledge.py +59 -0
  941. icdev/tools/mcp/standalone/maintenance.py +59 -0
  942. icdev/tools/mcp/supply_chain_server.py +476 -0
  943. icdev/tools/mcp/tool_registry.py +2008 -0
  944. icdev/tools/mcp/unified_server.py +158 -0
  945. icdev/tools/memory/__init__.py +2 -0
  946. icdev/tools/memory/auto_capture.py +347 -0
  947. icdev/tools/memory/embed_memory.py +158 -0
  948. icdev/tools/memory/history_compressor.py +334 -0
  949. icdev/tools/memory/hybrid_search.py +236 -0
  950. icdev/tools/memory/maintenance_cron.py +289 -0
  951. icdev/tools/memory/memory_consolidation.py +444 -0
  952. icdev/tools/memory/memory_db.py +133 -0
  953. icdev/tools/memory/memory_read.py +102 -0
  954. icdev/tools/memory/memory_write.py +222 -0
  955. icdev/tools/memory/semantic_search.py +139 -0
  956. icdev/tools/memory/time_decay.py +435 -0
  957. icdev/tools/modernization/__init__.py +3 -0
  958. icdev/tools/modernization/architecture_extractor.py +734 -0
  959. icdev/tools/modernization/compliance_bridge.py +1499 -0
  960. icdev/tools/modernization/db_migration_planner.py +1385 -0
  961. icdev/tools/modernization/doc_generator.py +1428 -0
  962. icdev/tools/modernization/framework_migrator.py +1525 -0
  963. icdev/tools/modernization/legacy_analyzer.py +1948 -0
  964. icdev/tools/modernization/migration_code_generator.py +1639 -0
  965. icdev/tools/modernization/migration_report_generator.py +1653 -0
  966. icdev/tools/modernization/migration_tracker.py +1726 -0
  967. icdev/tools/modernization/monolith_decomposer.py +1508 -0
  968. icdev/tools/modernization/seven_r_assessor.py +1658 -0
  969. icdev/tools/modernization/strangler_fig_manager.py +1705 -0
  970. icdev/tools/modernization/ui_analyzer.py +771 -0
  971. icdev/tools/modernization/version_migrator.py +1392 -0
  972. icdev/tools/monitor/__init__.py +1 -0
  973. icdev/tools/monitor/alert_correlator.py +495 -0
  974. icdev/tools/monitor/auto_resolver.py +612 -0
  975. icdev/tools/monitor/health_checker.py +509 -0
  976. icdev/tools/monitor/heartbeat_daemon.py +792 -0
  977. icdev/tools/monitor/log_analyzer.py +516 -0
  978. icdev/tools/monitor/metric_collector.py +496 -0
  979. icdev/tools/mosa/__init__.py +10 -0
  980. icdev/tools/mosa/icd_generator.py +370 -0
  981. icdev/tools/mosa/modular_design_analyzer.py +683 -0
  982. icdev/tools/mosa/mosa_code_enforcer.py +349 -0
  983. icdev/tools/mosa/tsp_generator.py +265 -0
  984. icdev/tools/observability/__init__.py +100 -0
  985. icdev/tools/observability/genai_attributes.py +88 -0
  986. icdev/tools/observability/instrumentation.py +140 -0
  987. icdev/tools/observability/mlflow_exporter.py +194 -0
  988. icdev/tools/observability/otel_tracer.py +168 -0
  989. icdev/tools/observability/provenance/__init__.py +3 -0
  990. icdev/tools/observability/provenance/prov_recorder.py +324 -0
  991. icdev/tools/observability/shap/__init__.py +3 -0
  992. icdev/tools/observability/shap/agent_shap.py +275 -0
  993. icdev/tools/observability/sqlite_tracer.py +361 -0
  994. icdev/tools/observability/trace_context.py +205 -0
  995. icdev/tools/observability/tracer.py +230 -0
  996. icdev/tools/orchestration/__init__.py +2 -0
  997. icdev/tools/orchestration/workflow_composer.py +361 -0
  998. icdev/tools/project/__init__.py +1 -0
  999. icdev/tools/project/manifest_loader.py +418 -0
  1000. icdev/tools/project/project_create.py +350 -0
  1001. icdev/tools/project/project_list.py +174 -0
  1002. icdev/tools/project/project_scaffold.py +1715 -0
  1003. icdev/tools/project/project_status.py +479 -0
  1004. icdev/tools/project/session_context_builder.py +757 -0
  1005. icdev/tools/project/validate_manifest.py +55 -0
  1006. icdev/tools/registry/__init__.py +10 -0
  1007. icdev/tools/registry/absorption_engine.py +832 -0
  1008. icdev/tools/registry/capability_evaluator.py +668 -0
  1009. icdev/tools/registry/child_registry.py +617 -0
  1010. icdev/tools/registry/cross_pollinator.py +1065 -0
  1011. icdev/tools/registry/genome_manager.py +671 -0
  1012. icdev/tools/registry/learning_collector.py +912 -0
  1013. icdev/tools/registry/propagation_manager.py +942 -0
  1014. icdev/tools/registry/staging_manager.py +742 -0
  1015. icdev/tools/registry/telemetry_collector.py +423 -0
  1016. icdev/tools/requirements/__init__.py +1 -0
  1017. icdev/tools/requirements/ai_governance_scorer.py +208 -0
  1018. icdev/tools/requirements/boundary_analyzer.py +1293 -0
  1019. icdev/tools/requirements/clarification_engine.py +618 -0
  1020. icdev/tools/requirements/complexity_scorer.py +387 -0
  1021. icdev/tools/requirements/consistency_analyzer.py +803 -0
  1022. icdev/tools/requirements/constitution_manager.py +605 -0
  1023. icdev/tools/requirements/decomposition_engine.py +778 -0
  1024. icdev/tools/requirements/document_extractor.py +1016 -0
  1025. icdev/tools/requirements/elicitation_techniques.py +519 -0
  1026. icdev/tools/requirements/gap_detector.py +271 -0
  1027. icdev/tools/requirements/intake_engine.py +2188 -0
  1028. icdev/tools/requirements/prd_generator.py +847 -0
  1029. icdev/tools/requirements/prd_validator.py +595 -0
  1030. icdev/tools/requirements/readiness_scorer.py +313 -0
  1031. icdev/tools/requirements/spec_organizer.py +1029 -0
  1032. icdev/tools/requirements/spec_quality_checker.py +1097 -0
  1033. icdev/tools/requirements/traceability_builder.py +579 -0
  1034. icdev/tools/resilience/__init__.py +34 -0
  1035. icdev/tools/resilience/circuit_breaker.py +340 -0
  1036. icdev/tools/resilience/correlation.py +150 -0
  1037. icdev/tools/resilience/errors.py +81 -0
  1038. icdev/tools/resilience/retry.py +95 -0
  1039. icdev/tools/schemas/__init__.py +27 -0
  1040. icdev/tools/schemas/chat.py +61 -0
  1041. icdev/tools/schemas/compliance.py +56 -0
  1042. icdev/tools/schemas/core.py +85 -0
  1043. icdev/tools/schemas/innovation.py +37 -0
  1044. icdev/tools/schemas/validation.py +109 -0
  1045. icdev/tools/sdk/__init__.py +3 -0
  1046. icdev/tools/sdk/icdev_client.py +218 -0
  1047. icdev/tools/security/__init__.py +1 -0
  1048. icdev/tools/security/agent_output_validator.py +330 -0
  1049. icdev/tools/security/agent_trust_scorer.py +466 -0
  1050. icdev/tools/security/ai_bom_generator.py +725 -0
  1051. icdev/tools/security/ai_telemetry_logger.py +469 -0
  1052. icdev/tools/security/atlas_red_team.py +543 -0
  1053. icdev/tools/security/code_pattern_scanner.py +378 -0
  1054. icdev/tools/security/confabulation_detector.py +271 -0
  1055. icdev/tools/security/container_scanner.py +491 -0
  1056. icdev/tools/security/dependency_auditor.py +944 -0
  1057. icdev/tools/security/endpoint_security_scanner.py +579 -0
  1058. icdev/tools/security/mcp_tool_authorizer.py +243 -0
  1059. icdev/tools/security/prompt_injection_detector.py +737 -0
  1060. icdev/tools/security/sast_runner.py +948 -0
  1061. icdev/tools/security/secret_detector.py +378 -0
  1062. icdev/tools/security/tool_chain_validator.py +357 -0
  1063. icdev/tools/security/vuln_scanner.py +539 -0
  1064. icdev/tools/simulation/__init__.py +2 -0
  1065. icdev/tools/simulation/coa_generator.py +1552 -0
  1066. icdev/tools/simulation/monte_carlo.py +758 -0
  1067. icdev/tools/simulation/scenario_manager.py +1073 -0
  1068. icdev/tools/simulation/simulation_engine.py +1104 -0
  1069. icdev/tools/supply_chain/__init__.py +2 -0
  1070. icdev/tools/supply_chain/cve_triager.py +705 -0
  1071. icdev/tools/supply_chain/dependency_graph.py +645 -0
  1072. icdev/tools/supply_chain/isa_manager.py +540 -0
  1073. icdev/tools/supply_chain/scrm_assessor.py +546 -0
  1074. icdev/tools/testing/__init__.py +2 -0
  1075. icdev/tools/testing/acceptance_validator.py +411 -0
  1076. icdev/tools/testing/claude_dir_validator.py +831 -0
  1077. icdev/tools/testing/data_types.py +199 -0
  1078. icdev/tools/testing/e2e_runner.py +715 -0
  1079. icdev/tools/testing/fuzz_cli.py +306 -0
  1080. icdev/tools/testing/health_check.py +483 -0
  1081. icdev/tools/testing/platform_check.py +143 -0
  1082. icdev/tools/testing/production_audit.py +1862 -0
  1083. icdev/tools/testing/production_remediate.py +804 -0
  1084. icdev/tools/testing/screenshot_validator.py +539 -0
  1085. icdev/tools/testing/smoke_test.py +283 -0
  1086. icdev/tools/testing/test_agent_models.py +117 -0
  1087. icdev/tools/testing/test_orchestrator.py +957 -0
  1088. icdev/tools/testing/utils.py +229 -0
  1089. icdev/tools/translation/__init__.py +17 -0
  1090. icdev/tools/translation/code_translator.py +550 -0
  1091. icdev/tools/translation/dependency_mapper.py +277 -0
  1092. icdev/tools/translation/feature_map.py +395 -0
  1093. icdev/tools/translation/project_assembler.py +439 -0
  1094. icdev/tools/translation/source_extractor.py +609 -0
  1095. icdev/tools/translation/test_translator.py +333 -0
  1096. icdev/tools/translation/translation_manager.py +582 -0
  1097. icdev/tools/translation/translation_validator.py +662 -0
  1098. icdev/tools/translation/type_checker.py +371 -0
  1099. icdev-1.0.0.dist-info/METADATA +868 -0
  1100. icdev-1.0.0.dist-info/RECORD +1105 -0
  1101. icdev-1.0.0.dist-info/WHEEL +5 -0
  1102. icdev-1.0.0.dist-info/entry_points.txt +9 -0
  1103. icdev-1.0.0.dist-info/licenses/LICENSE +254 -0
  1104. icdev-1.0.0.dist-info/licenses/NOTICE +268 -0
  1105. icdev-1.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1097 @@
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
+ """Spec quality checker -- 'unit tests for English'.
8
+
9
+ Validates spec markdown files against quality criteria: required sections,
10
+ ambiguity patterns, acceptance criteria testability, ATO coverage, task
11
+ completeness, and project constitution compliance.
12
+
13
+ Usage:
14
+ python tools/requirements/spec_quality_checker.py --spec-file specs/feat.md --json
15
+ python tools/requirements/spec_quality_checker.py --spec-dir specs/ --json
16
+ python tools/requirements/spec_quality_checker.py --spec-file specs/feat.md --annotate --output annotated.md
17
+ python tools/requirements/spec_quality_checker.py --spec-file specs/feat.md --strip-markers
18
+ python tools/requirements/spec_quality_checker.py --spec-file specs/feat.md --count-markers
19
+ """
20
+
21
+ import argparse
22
+ import dataclasses
23
+ import json
24
+ import re
25
+ import sqlite3
26
+ import uuid
27
+ from datetime import datetime, timezone
28
+ from pathlib import Path
29
+ from icdev._paths import get_project_root
30
+
31
+ BASE_DIR = get_project_root()
32
+ DB_PATH = BASE_DIR / "data" / "icdev.db"
33
+
34
+ # Graceful audit import (air-gap safe)
35
+ try:
36
+ from icdev.tools.audit.audit_logger import log_event
37
+ _HAS_AUDIT = True
38
+ except ImportError:
39
+ _HAS_AUDIT = False
40
+
41
+ def log_event(**kwargs):
42
+ return -1
43
+
44
+
45
+ def _get_connection(db_path=None):
46
+ """Get database connection with dict-like row access."""
47
+ path = db_path or DB_PATH
48
+ if not path.exists():
49
+ raise FileNotFoundError(
50
+ f"Database not found: {path}\nRun: python tools/db/init_icdev_db.py"
51
+ )
52
+ conn = sqlite3.connect(str(path))
53
+ conn.row_factory = sqlite3.Row
54
+ return conn
55
+
56
+
57
+ def _generate_id(prefix="sqc"):
58
+ """Generate a unique ID with prefix."""
59
+ return f"{prefix}-{uuid.uuid4().hex[:12]}"
60
+
61
+
62
+ # ---------------------------------------------------------------------------
63
+ # Data structures
64
+ # ---------------------------------------------------------------------------
65
+
66
+ @dataclasses.dataclass
67
+ class CheckResult:
68
+ """Result of a single quality check."""
69
+ check_id: str
70
+ name: str
71
+ status: str # "pass", "fail", "warn"
72
+ severity: str # "critical", "high", "medium", "low"
73
+ message: str
74
+ suggestion: str = ""
75
+ section: str = ""
76
+
77
+ def to_dict(self):
78
+ return dataclasses.asdict(self)
79
+
80
+
81
+ # ---------------------------------------------------------------------------
82
+ # Markdown parsing
83
+ # ---------------------------------------------------------------------------
84
+
85
+ def parse_spec_sections(spec_path: Path) -> dict:
86
+ """Parse markdown by ``## Header`` into a dict.
87
+
88
+ ``### Subheader`` content is nested within the parent ``## `` section.
89
+ Returns ``{section_name_lower: content_string}``.
90
+ """
91
+ content = spec_path.read_text(encoding="utf-8")
92
+ sections: dict = {}
93
+ current_key = "_preamble"
94
+ buffer = []
95
+
96
+ for line in content.splitlines():
97
+ h2 = re.match(r"^##\s+(.+)$", line)
98
+ h3 = re.match(r"^###\s+(.+)$", line)
99
+ if h2 and not h3:
100
+ # Flush previous section
101
+ sections[current_key] = "\n".join(buffer)
102
+ current_key = h2.group(1).strip().lower()
103
+ buffer = []
104
+ else:
105
+ buffer.append(line)
106
+
107
+ # Flush final section
108
+ sections[current_key] = "\n".join(buffer)
109
+ return sections
110
+
111
+
112
+ # ---------------------------------------------------------------------------
113
+ # Loaders (context files with hardcoded fallbacks)
114
+ # ---------------------------------------------------------------------------
115
+
116
+ _DEFAULT_CHECKLIST = {
117
+ "required_sections": [
118
+ {"name": "Feature Description", "severity": "critical", "min_words": 20},
119
+ {"name": "User Story", "severity": "critical",
120
+ "pattern": r"(?i)as a .+ i want .+ so that .+"},
121
+ {"name": "Solution Statement", "severity": "critical", "min_words": 30},
122
+ {"name": "ATO Impact Assessment", "severity": "critical"},
123
+ {"name": "Acceptance Criteria", "severity": "critical", "min_items": 3},
124
+ {"name": "Implementation Plan", "severity": "high"},
125
+ {"name": "Step by Step Tasks", "severity": "high", "min_items": 3},
126
+ {"name": "Testing Strategy", "severity": "high"},
127
+ {"name": "Validation Commands", "severity": "medium"},
128
+ {"name": "NIST 800-53 Controls", "severity": "medium"},
129
+ ]
130
+ }
131
+
132
+ _DEFAULT_AMBIGUITY_PATTERNS = [
133
+ {"phrase": "as needed", "severity": "high",
134
+ "clarification": "Define the specific conditions that trigger this action."},
135
+ {"phrase": "appropriate", "severity": "high",
136
+ "clarification": "Define measurable criteria for 'appropriate'."},
137
+ {"phrase": "timely", "severity": "high",
138
+ "clarification": "Specify an exact time threshold."},
139
+ {"phrase": "user-friendly", "severity": "medium",
140
+ "clarification": "Define specific usability criteria."},
141
+ {"phrase": "fast", "severity": "high",
142
+ "clarification": "Specify a measurable target (e.g., <2s response time)."},
143
+ {"phrase": "secure", "severity": "critical",
144
+ "clarification": "Specify security requirements: FIPS, CAC, STIG, NIST controls."},
145
+ {"phrase": "scalable", "severity": "medium",
146
+ "clarification": "Define target scale: concurrent users, data volume."},
147
+ {"phrase": "efficient", "severity": "medium",
148
+ "clarification": "Define efficiency metric: CPU, memory, cost."},
149
+ {"phrase": "reasonable", "severity": "high",
150
+ "clarification": "Define the quantitative threshold."},
151
+ {"phrase": "adequate", "severity": "high",
152
+ "clarification": "Define the minimum acceptable criteria."},
153
+ {"phrase": "flexible", "severity": "medium",
154
+ "clarification": "Define what specifically needs to be configurable."},
155
+ {"phrase": "robust", "severity": "medium",
156
+ "clarification": "Define failure scenarios and recovery time objectives."},
157
+ {"phrase": "etc.", "severity": "high",
158
+ "clarification": "Enumerate all items explicitly."},
159
+ {"phrase": "and/or", "severity": "medium",
160
+ "clarification": "Clarify inclusive OR vs exclusive OR."},
161
+ {"phrase": "should", "severity": "medium",
162
+ "clarification": "Is this MUST (mandatory) or SHOULD (recommended)? Use RFC 2119."},
163
+ ]
164
+
165
+
166
+ def _load_checklist() -> dict:
167
+ """Load spec quality checklist from context file, fallback to defaults."""
168
+ path = BASE_DIR / "context" / "requirements" / "spec_quality_checklist.json"
169
+ if path.exists():
170
+ try:
171
+ with open(path, "r", encoding="utf-8") as f:
172
+ return json.load(f)
173
+ except (json.JSONDecodeError, OSError):
174
+ pass
175
+ return _DEFAULT_CHECKLIST
176
+
177
+
178
+ def _load_ambiguity_patterns() -> list:
179
+ """Load ambiguity patterns from context file, fallback to defaults."""
180
+ path = BASE_DIR / "context" / "requirements" / "ambiguity_patterns.json"
181
+ if path.exists():
182
+ try:
183
+ with open(path, "r", encoding="utf-8") as f:
184
+ data = json.load(f)
185
+ return data.get("ambiguity_patterns", _DEFAULT_AMBIGUITY_PATTERNS)
186
+ except (json.JSONDecodeError, OSError):
187
+ pass
188
+ return _DEFAULT_AMBIGUITY_PATTERNS
189
+
190
+
191
+ def _load_constitutions(project_id: str = None, db_path=None) -> list:
192
+ """Load constitution principles.
193
+
194
+ If *project_id* is given and the DB is available, attempt to load
195
+ project-specific constitutions. Otherwise fall back to the default
196
+ constitutions context file.
197
+ """
198
+ # Try DB first when project_id available
199
+ if project_id:
200
+ try:
201
+ conn = _get_connection(db_path)
202
+ rows = conn.execute(
203
+ "SELECT principles FROM project_constitutions WHERE project_id = ?",
204
+ (project_id,),
205
+ ).fetchone()
206
+ conn.close()
207
+ if rows:
208
+ return json.loads(rows["principles"])
209
+ except Exception:
210
+ pass
211
+
212
+ # Fallback to context file
213
+ path = BASE_DIR / "context" / "requirements" / "default_constitutions.json"
214
+ if path.exists():
215
+ try:
216
+ with open(path, "r", encoding="utf-8") as f:
217
+ data = json.load(f)
218
+ return data.get("default_principles", [])
219
+ except (json.JSONDecodeError, OSError):
220
+ pass
221
+ return []
222
+
223
+
224
+ # ---------------------------------------------------------------------------
225
+ # Individual check functions
226
+ # ---------------------------------------------------------------------------
227
+
228
+ def _count_list_items(text: str) -> int:
229
+ """Count markdown list items (``- `` or ``N. ``)."""
230
+ count = 0
231
+ for line in text.splitlines():
232
+ stripped = line.strip()
233
+ if re.match(r"^[-*]\s+", stripped) or re.match(r"^\d+\.\s+", stripped):
234
+ count += 1
235
+ return count
236
+
237
+
238
+ def check_required_sections(sections: dict, checklist: dict) -> list:
239
+ """Check that all required sections exist and meet criteria."""
240
+ results = []
241
+ for req in checklist.get("required_sections", []):
242
+ name = req["name"]
243
+ key = name.lower()
244
+ severity = req.get("severity", "high")
245
+
246
+ # Case-insensitive section lookup
247
+ content = sections.get(key, "")
248
+ if not content:
249
+ # Try partial match
250
+ for sec_key, sec_val in sections.items():
251
+ if key in sec_key or sec_key in key:
252
+ content = sec_val
253
+ break
254
+
255
+ if not content or not content.strip():
256
+ results.append(CheckResult(
257
+ check_id=_generate_id("sec"),
258
+ name=f"Section: {name}",
259
+ status="fail",
260
+ severity=severity,
261
+ message=f"Required section '{name}' is missing.",
262
+ suggestion=f"Add a '## {name}' section to the spec.",
263
+ section=name,
264
+ ))
265
+ continue
266
+
267
+ # Min words check
268
+ min_words = req.get("min_words")
269
+ if min_words:
270
+ word_count = len(content.split())
271
+ if word_count < min_words:
272
+ results.append(CheckResult(
273
+ check_id=_generate_id("sec"),
274
+ name=f"Section: {name} (word count)",
275
+ status="fail",
276
+ severity=severity,
277
+ message=f"Section '{name}' has {word_count} words, minimum is {min_words}.",
278
+ suggestion=f"Expand '{name}' to at least {min_words} words.",
279
+ section=name,
280
+ ))
281
+ continue
282
+
283
+ # Pattern check
284
+ pattern = req.get("pattern")
285
+ if pattern:
286
+ if not re.search(pattern, content):
287
+ results.append(CheckResult(
288
+ check_id=_generate_id("sec"),
289
+ name=f"Section: {name} (pattern)",
290
+ status="fail",
291
+ severity=severity,
292
+ message=f"Section '{name}' does not match required pattern.",
293
+ suggestion=f"Ensure '{name}' follows the expected format.",
294
+ section=name,
295
+ ))
296
+ continue
297
+
298
+ # Min items check
299
+ min_items = req.get("min_items")
300
+ if min_items:
301
+ item_count = _count_list_items(content)
302
+ if item_count < min_items:
303
+ results.append(CheckResult(
304
+ check_id=_generate_id("sec"),
305
+ name=f"Section: {name} (items)",
306
+ status="fail",
307
+ severity=severity,
308
+ message=f"Section '{name}' has {item_count} list items, minimum is {min_items}.",
309
+ suggestion=f"Add at least {min_items} list items to '{name}'.",
310
+ section=name,
311
+ ))
312
+ continue
313
+
314
+ # All checks passed for this section
315
+ results.append(CheckResult(
316
+ check_id=_generate_id("sec"),
317
+ name=f"Section: {name}",
318
+ status="pass",
319
+ severity=severity,
320
+ message=f"Section '{name}' present and meets criteria.",
321
+ section=name,
322
+ ))
323
+
324
+ return results
325
+
326
+
327
+ def check_ambiguity(sections: dict, patterns: list) -> list:
328
+ """Scan all sections for ambiguity patterns."""
329
+ results = []
330
+ all_content = "\n".join(sections.values()).lower()
331
+
332
+ for pat in patterns:
333
+ phrase = pat.get("phrase", "")
334
+ if not phrase:
335
+ continue
336
+ # Use word boundary matching to avoid false positives inside words
337
+ escaped = re.escape(phrase)
338
+ regex = rf"\b{escaped}\b" if not phrase.endswith(".") else re.escape(phrase)
339
+ matches = list(re.finditer(regex, all_content, re.IGNORECASE))
340
+ if matches:
341
+ # Find which section(s) contain the match
342
+ match_sections = []
343
+ for sec_name, sec_content in sections.items():
344
+ if re.search(regex, sec_content, re.IGNORECASE):
345
+ match_sections.append(sec_name)
346
+
347
+ results.append(CheckResult(
348
+ check_id=_generate_id("amb"),
349
+ name=f"Ambiguity: '{phrase}'",
350
+ status="fail",
351
+ severity=pat.get("severity", "medium"),
352
+ message=(
353
+ f"Ambiguous phrase '{phrase}' found {len(matches)} time(s) "
354
+ f"in section(s): {', '.join(match_sections)}."
355
+ ),
356
+ suggestion=pat.get("clarification", "Replace with specific, measurable language."),
357
+ section=", ".join(match_sections),
358
+ ))
359
+
360
+ return results
361
+
362
+
363
+ # Verbs that indicate testable/observable assertions in acceptance criteria
364
+ _TESTABLE_VERBS = re.compile(
365
+ r"\b(shows?|returns?|displays?|links?\s+to|loads?\s+without|"
366
+ r"renders?|navigates?\s+to|redirects?|creates?|updates?|deletes?|"
367
+ r"validates?|rejects?|accepts?|sends?|receives?|stores?|"
368
+ r"contains?|includes?|excludes?|matches?|equals?|is\s+visible|"
369
+ r"appears?|disappears?|enables?|disables?|triggers?|"
370
+ r"given|when|then|must|shall)\b",
371
+ re.IGNORECASE,
372
+ )
373
+
374
+
375
+ def check_acceptance_criteria(sections: dict) -> list:
376
+ """Validate acceptance criteria for testability."""
377
+ results = []
378
+
379
+ # Find acceptance criteria section
380
+ ac_content = ""
381
+ for key, content in sections.items():
382
+ if "acceptance" in key and "criteria" in key:
383
+ ac_content = content
384
+ break
385
+ if "acceptance criteria" in key:
386
+ ac_content = content
387
+ break
388
+
389
+ if not ac_content.strip():
390
+ results.append(CheckResult(
391
+ check_id=_generate_id("acc"),
392
+ name="Acceptance Criteria: presence",
393
+ status="fail",
394
+ severity="critical",
395
+ message="No acceptance criteria section found.",
396
+ suggestion="Add '## Acceptance Criteria' with at least 3 testable items.",
397
+ section="acceptance criteria",
398
+ ))
399
+ return results
400
+
401
+ # Count items
402
+ items = []
403
+ for line in ac_content.splitlines():
404
+ stripped = line.strip()
405
+ if re.match(r"^[-*]\s+", stripped) or re.match(r"^\d+\.\s+", stripped):
406
+ items.append(stripped)
407
+
408
+ if len(items) < 3:
409
+ results.append(CheckResult(
410
+ check_id=_generate_id("acc"),
411
+ name="Acceptance Criteria: count",
412
+ status="fail",
413
+ severity="critical",
414
+ message=f"Only {len(items)} acceptance criteria found, minimum is 3.",
415
+ suggestion="Add at least 3 specific, testable acceptance criteria.",
416
+ section="acceptance criteria",
417
+ ))
418
+ else:
419
+ results.append(CheckResult(
420
+ check_id=_generate_id("acc"),
421
+ name="Acceptance Criteria: count",
422
+ status="pass",
423
+ severity="critical",
424
+ message=f"{len(items)} acceptance criteria found.",
425
+ section="acceptance criteria",
426
+ ))
427
+
428
+ # Check each item for testable assertion
429
+ untestable = []
430
+ for item in items:
431
+ if not _TESTABLE_VERBS.search(item):
432
+ untestable.append(item[:80])
433
+
434
+ if untestable:
435
+ results.append(CheckResult(
436
+ check_id=_generate_id("acc"),
437
+ name="Acceptance Criteria: testability",
438
+ status="fail",
439
+ severity="high",
440
+ message=(
441
+ f"{len(untestable)} of {len(items)} criteria lack testable verbs: "
442
+ f"{untestable[0]}..."
443
+ ),
444
+ suggestion=(
445
+ "Each criterion should contain a measurable verb "
446
+ "(shows, returns, displays, loads without, etc.)."
447
+ ),
448
+ section="acceptance criteria",
449
+ ))
450
+ else:
451
+ results.append(CheckResult(
452
+ check_id=_generate_id("acc"),
453
+ name="Acceptance Criteria: testability",
454
+ status="pass",
455
+ severity="high",
456
+ message="All acceptance criteria contain testable assertions.",
457
+ section="acceptance criteria",
458
+ ))
459
+
460
+ # Check for Given/When/Then format
461
+ has_gwt = bool(re.search(r"\b(given|when|then)\b", ac_content, re.IGNORECASE))
462
+ results.append(CheckResult(
463
+ check_id=_generate_id("acc"),
464
+ name="Acceptance Criteria: BDD format",
465
+ status="pass" if has_gwt else "warn",
466
+ severity="low",
467
+ message=(
468
+ "BDD Given/When/Then format detected."
469
+ if has_gwt else
470
+ "No Given/When/Then BDD format found. Consider using BDD for clearer test mapping."
471
+ ),
472
+ suggestion="" if has_gwt else "Rewrite criteria in Given/When/Then format for BDD.",
473
+ section="acceptance criteria",
474
+ ))
475
+
476
+ return results
477
+
478
+
479
+ def check_ato_coverage(sections: dict) -> list:
480
+ """Check ATO impact assessment completeness."""
481
+ results = []
482
+
483
+ # Find ATO section
484
+ ato_content = ""
485
+ for key, content in sections.items():
486
+ if "ato" in key and "impact" in key:
487
+ ato_content = content
488
+ break
489
+ if "ato impact" in key:
490
+ ato_content = content
491
+ break
492
+
493
+ if not ato_content.strip():
494
+ results.append(CheckResult(
495
+ check_id=_generate_id("ato"),
496
+ name="ATO: section presence",
497
+ status="fail",
498
+ severity="critical",
499
+ message="ATO Impact Assessment section is missing.",
500
+ suggestion="Add '## ATO Impact Assessment' with boundary tier, NIST controls, SSP impact.",
501
+ section="ato impact assessment",
502
+ ))
503
+ return results
504
+
505
+ # Boundary impact tier
506
+ tier_pattern = re.compile(r"\b(GREEN|YELLOW|ORANGE|RED)\b")
507
+ tier_match = tier_pattern.search(ato_content)
508
+ if tier_match:
509
+ results.append(CheckResult(
510
+ check_id=_generate_id("ato"),
511
+ name="ATO: boundary tier",
512
+ status="pass",
513
+ severity="critical",
514
+ message=f"Boundary impact tier specified: {tier_match.group(1)}.",
515
+ section="ato impact assessment",
516
+ ))
517
+ else:
518
+ results.append(CheckResult(
519
+ check_id=_generate_id("ato"),
520
+ name="ATO: boundary tier",
521
+ status="fail",
522
+ severity="critical",
523
+ message="No boundary impact tier (GREEN/YELLOW/ORANGE/RED) found.",
524
+ suggestion="Specify one of: GREEN (no impact), YELLOW (minor), ORANGE (significant), RED (ATO-invalidating).",
525
+ section="ato impact assessment",
526
+ ))
527
+
528
+ # NIST controls
529
+ nist_pattern = re.compile(r"\b[A-Z]{2}-\d+(?:\(\d+\))?\b")
530
+ nist_matches = nist_pattern.findall(ato_content)
531
+ if nist_matches:
532
+ results.append(CheckResult(
533
+ check_id=_generate_id("ato"),
534
+ name="ATO: NIST controls",
535
+ status="pass",
536
+ severity="high",
537
+ message=f"NIST controls referenced: {', '.join(nist_matches[:5])}.",
538
+ section="ato impact assessment",
539
+ ))
540
+ else:
541
+ results.append(CheckResult(
542
+ check_id=_generate_id("ato"),
543
+ name="ATO: NIST controls",
544
+ status="fail",
545
+ severity="high",
546
+ message="No NIST 800-53 control IDs found in ATO section.",
547
+ suggestion="Reference applicable controls (e.g., AC-2, AU-2, IA-2, SC-8).",
548
+ section="ato impact assessment",
549
+ ))
550
+
551
+ # SSP impact
552
+ ssp_mentioned = bool(re.search(r"\bSSP\b", ato_content, re.IGNORECASE))
553
+ results.append(CheckResult(
554
+ check_id=_generate_id("ato"),
555
+ name="ATO: SSP impact",
556
+ status="pass" if ssp_mentioned else "warn",
557
+ severity="medium",
558
+ message=(
559
+ "SSP impact noted." if ssp_mentioned
560
+ else "No mention of SSP impact. Consider documenting whether SSP requires update."
561
+ ),
562
+ suggestion="" if ssp_mentioned else "Add SSP impact statement (e.g., 'SSP addendum required').",
563
+ section="ato impact assessment",
564
+ ))
565
+
566
+ return results
567
+
568
+
569
+ def check_testability(sections: dict) -> list:
570
+ """Check that testing strategy and validation commands exist with content."""
571
+ results = []
572
+
573
+ # Testing strategy
574
+ ts_content = ""
575
+ for key, content in sections.items():
576
+ if "testing" in key and "strategy" in key:
577
+ ts_content = content
578
+ break
579
+ if "testing strategy" in key:
580
+ ts_content = content
581
+ break
582
+
583
+ if ts_content.strip():
584
+ results.append(CheckResult(
585
+ check_id=_generate_id("tst"),
586
+ name="Testability: testing strategy",
587
+ status="pass",
588
+ severity="high",
589
+ message="Testing strategy section present with content.",
590
+ section="testing strategy",
591
+ ))
592
+ else:
593
+ results.append(CheckResult(
594
+ check_id=_generate_id("tst"),
595
+ name="Testability: testing strategy",
596
+ status="fail",
597
+ severity="high",
598
+ message="Testing strategy section is missing or empty.",
599
+ suggestion="Add '## Testing Strategy' describing unit, BDD, edge case, and E2E approaches.",
600
+ section="testing strategy",
601
+ ))
602
+
603
+ # Validation commands
604
+ vc_content = ""
605
+ for key, content in sections.items():
606
+ if "validation" in key and "command" in key:
607
+ vc_content = content
608
+ break
609
+ if "validation commands" in key:
610
+ vc_content = content
611
+ break
612
+
613
+ if vc_content.strip():
614
+ # Check for actual command-like content (backticks or bash patterns)
615
+ has_commands = bool(
616
+ re.search(r"(```|python |pytest |behave |curl |bash |npm |go |cargo )", vc_content)
617
+ )
618
+ results.append(CheckResult(
619
+ check_id=_generate_id("tst"),
620
+ name="Testability: validation commands",
621
+ status="pass" if has_commands else "warn",
622
+ severity="medium",
623
+ message=(
624
+ "Validation commands section has executable commands."
625
+ if has_commands else
626
+ "Validation commands section exists but may lack executable commands."
627
+ ),
628
+ suggestion="" if has_commands else "Include runnable bash/python commands to verify implementation.",
629
+ section="validation commands",
630
+ ))
631
+ else:
632
+ results.append(CheckResult(
633
+ check_id=_generate_id("tst"),
634
+ name="Testability: validation commands",
635
+ status="fail",
636
+ severity="medium",
637
+ message="Validation commands section is missing or empty.",
638
+ suggestion="Add '## Validation Commands' with bash commands to verify the implementation.",
639
+ section="validation commands",
640
+ ))
641
+
642
+ return results
643
+
644
+
645
+ def check_task_completeness(sections: dict) -> list:
646
+ """Verify implementation plan phases are covered in step-by-step tasks."""
647
+ results = []
648
+
649
+ # Find implementation plan
650
+ plan_content = ""
651
+ for key, content in sections.items():
652
+ if "implementation" in key and "plan" in key:
653
+ plan_content = content
654
+ break
655
+ if "implementation plan" in key:
656
+ plan_content = content
657
+ break
658
+
659
+ if not plan_content.strip():
660
+ return results # Cannot check without plan
661
+
662
+ # Find tasks section
663
+ tasks_content = ""
664
+ for key, content in sections.items():
665
+ if "step" in key and "task" in key:
666
+ tasks_content = content
667
+ break
668
+ if "step by step tasks" in key:
669
+ tasks_content = content
670
+ break
671
+
672
+ if not tasks_content.strip():
673
+ return results # Already caught by required section check
674
+
675
+ # Extract phase names/numbers from plan
676
+ phase_pattern = re.compile(r"###?\s*Phase\s+(\d+)[:\s]*(.+)", re.IGNORECASE)
677
+ phases = phase_pattern.findall(plan_content)
678
+
679
+ if not phases:
680
+ # Try simpler pattern: numbered list with "Phase" or keywords
681
+ numbered = re.compile(r"^\s*\d+\.\s*(.+)", re.MULTILINE)
682
+ phase_items = numbered.findall(plan_content)
683
+ for idx, item in enumerate(phase_items, 1):
684
+ phases.append((str(idx), item.strip()))
685
+
686
+ if not phases:
687
+ results.append(CheckResult(
688
+ check_id=_generate_id("task"),
689
+ name="Task Completeness: phase extraction",
690
+ status="warn",
691
+ severity="medium",
692
+ message="Could not extract phases from implementation plan.",
693
+ suggestion="Use '### Phase N: Name' format in the Implementation Plan.",
694
+ section="implementation plan",
695
+ ))
696
+ return results
697
+
698
+ tasks_lower = tasks_content.lower()
699
+ uncovered = []
700
+ for num, name in phases:
701
+ # Check if phase number or key words appear in tasks
702
+ name_words = [w for w in name.lower().split() if len(w) > 3]
703
+ phase_ref = f"phase {num}"
704
+ found = phase_ref in tasks_lower
705
+ if not found and name_words:
706
+ found = any(w in tasks_lower for w in name_words[:3])
707
+ if not found:
708
+ uncovered.append(f"Phase {num}: {name.strip()}")
709
+
710
+ if uncovered:
711
+ results.append(CheckResult(
712
+ check_id=_generate_id("task"),
713
+ name="Task Completeness: phase coverage",
714
+ status="fail",
715
+ severity="high",
716
+ message=f"{len(uncovered)} phase(s) have no corresponding tasks: {'; '.join(uncovered[:3])}.",
717
+ suggestion="Ensure each implementation phase has detailed tasks in 'Step by Step Tasks'.",
718
+ section="step by step tasks",
719
+ ))
720
+ else:
721
+ results.append(CheckResult(
722
+ check_id=_generate_id("task"),
723
+ name="Task Completeness: phase coverage",
724
+ status="pass",
725
+ severity="high",
726
+ message=f"All {len(phases)} implementation phases are covered in tasks.",
727
+ section="step by step tasks",
728
+ ))
729
+
730
+ return results
731
+
732
+
733
+ def check_constitution_compliance(sections: dict, principles: list) -> list:
734
+ """Check spec against project constitution principles."""
735
+ results = []
736
+ if not principles:
737
+ return results
738
+
739
+ all_content = "\n".join(sections.values()).lower()
740
+
741
+ for principle in principles:
742
+ p_text = principle.get("text", "")
743
+ keywords = principle.get("keywords", [])
744
+ priority = principle.get("priority", 3)
745
+ category = principle.get("category", "general")
746
+
747
+ if not keywords:
748
+ continue
749
+
750
+ # Check if any keyword appears in the spec
751
+ found_keywords = [kw for kw in keywords if kw.lower() in all_content]
752
+
753
+ if found_keywords:
754
+ results.append(CheckResult(
755
+ check_id=_generate_id("con"),
756
+ name=f"Constitution: {category}",
757
+ status="pass",
758
+ severity="critical" if priority == 1 else "high" if priority == 2 else "medium",
759
+ message=f"Principle addressed: '{p_text[:60]}...' (keywords: {', '.join(found_keywords[:3])}).",
760
+ section="constitution",
761
+ ))
762
+ else:
763
+ severity = "critical" if priority == 1 else "high" if priority == 2 else "medium"
764
+ status = "fail" if priority == 1 else "warn"
765
+ results.append(CheckResult(
766
+ check_id=_generate_id("con"),
767
+ name=f"Constitution: {category}",
768
+ status=status,
769
+ severity=severity,
770
+ message=f"Principle not addressed: '{p_text[:80]}'.",
771
+ suggestion=f"Ensure the spec addresses: {', '.join(keywords[:4])}.",
772
+ section="constitution",
773
+ ))
774
+
775
+ return results
776
+
777
+
778
+ # ---------------------------------------------------------------------------
779
+ # Orchestrator
780
+ # ---------------------------------------------------------------------------
781
+
782
+ def run_all_checks(spec_path: Path, project_id: str = None, db_path=None) -> dict:
783
+ """Run all quality checks on a spec file.
784
+
785
+ Returns a summary dict with quality score, check results, and suggestions.
786
+ """
787
+ spec_path = Path(spec_path)
788
+ if not spec_path.exists():
789
+ return {"status": "error", "error": f"Spec file not found: {spec_path}"}
790
+
791
+ sections = parse_spec_sections(spec_path)
792
+ checklist = _load_checklist()
793
+ patterns = _load_ambiguity_patterns()
794
+ principles = _load_constitutions(project_id, db_path)
795
+
796
+ all_checks = []
797
+ all_checks.extend(check_required_sections(sections, checklist))
798
+ all_checks.extend(check_ambiguity(sections, patterns))
799
+ all_checks.extend(check_acceptance_criteria(sections))
800
+ all_checks.extend(check_ato_coverage(sections))
801
+ all_checks.extend(check_testability(sections))
802
+ all_checks.extend(check_task_completeness(sections))
803
+ all_checks.extend(check_constitution_compliance(sections, principles))
804
+
805
+ passed = sum(1 for c in all_checks if c.status == "pass")
806
+ failed = sum(1 for c in all_checks if c.status == "fail")
807
+ warnings = sum(1 for c in all_checks if c.status == "warn")
808
+ total = len(all_checks)
809
+
810
+ # Quality score: pass_count / total * 100, cap at 50 if any critical failure
811
+ quality_score = (passed / max(total, 1)) * 100.0
812
+ critical_failures = [
813
+ c.to_dict() for c in all_checks
814
+ if c.status == "fail" and c.severity == "critical"
815
+ ]
816
+ if critical_failures:
817
+ quality_score = min(quality_score, 50.0)
818
+
819
+ quality_score = round(quality_score, 1)
820
+
821
+ suggestions = [
822
+ c.suggestion for c in all_checks
823
+ if c.suggestion and c.status in ("fail", "warn")
824
+ ]
825
+
826
+ if _HAS_AUDIT:
827
+ log_event(
828
+ event_type="spec_quality_check",
829
+ actor="icdev-requirements-analyst",
830
+ action=f"Quality check on {spec_path.name}: {quality_score}%",
831
+ project_id=project_id or "",
832
+ details={
833
+ "spec_file": str(spec_path),
834
+ "quality_score": quality_score,
835
+ "passed": passed,
836
+ "failed": failed,
837
+ },
838
+ )
839
+
840
+ return {
841
+ "status": "ok",
842
+ "spec_file": str(spec_path),
843
+ "quality_score": quality_score,
844
+ "total_checks": total,
845
+ "passed": passed,
846
+ "failed": failed,
847
+ "warnings": warnings,
848
+ "checks": [c.to_dict() for c in all_checks],
849
+ "critical_failures": critical_failures,
850
+ "suggestions": suggestions,
851
+ }
852
+
853
+
854
+ # ---------------------------------------------------------------------------
855
+ # Annotation helpers (inline markers)
856
+ # ---------------------------------------------------------------------------
857
+
858
+ _MARKER_PATTERN = re.compile(r"\[NEEDS CLARIFICATION:\s*[^\]]+\]")
859
+
860
+
861
+ def annotate_spec(spec_path: Path, check_results: list, max_markers: int = 3) -> str:
862
+ """Insert ``[NEEDS CLARIFICATION: ...]`` markers inline for critical/high failures.
863
+
864
+ Only inserts up to *max_markers* markers. Returns the annotated content string.
865
+ """
866
+ content = Path(spec_path).read_text(encoding="utf-8")
867
+
868
+ # Filter to critical/high failures only
869
+ failures = [
870
+ c for c in check_results
871
+ if c.get("status") == "fail" and c.get("severity") in ("critical", "high")
872
+ ]
873
+
874
+ inserted = 0
875
+ for fail in failures:
876
+ if inserted >= max_markers:
877
+ break
878
+
879
+ section = fail.get("section", "").lower()
880
+ message = fail.get("message", "")
881
+ check_id = fail.get("check_id", "unknown")
882
+ marker = f"[NEEDS CLARIFICATION: {check_id} -- {message[:80]}]"
883
+
884
+ # Try to insert after the section heading
885
+ if section:
886
+ # Look for ## Section heading (case-insensitive)
887
+ heading_re = re.compile(
888
+ rf"^(##\s+.*{re.escape(section.split(',')[0].strip())}.*$)",
889
+ re.IGNORECASE | re.MULTILINE,
890
+ )
891
+ match = heading_re.search(content)
892
+ if match:
893
+ insert_pos = match.end()
894
+ content = content[:insert_pos] + f"\n{marker}" + content[insert_pos:]
895
+ inserted += 1
896
+ continue
897
+
898
+ # Fallback: insert at end of file
899
+ content = content.rstrip() + f"\n\n{marker}\n"
900
+ inserted += 1
901
+
902
+ return content
903
+
904
+
905
+ def strip_markers(spec_path: Path) -> str:
906
+ """Remove all ``[NEEDS CLARIFICATION: ...]`` markers from spec content."""
907
+ content = Path(spec_path).read_text(encoding="utf-8")
908
+ cleaned = _MARKER_PATTERN.sub("", content)
909
+ # Clean up any leftover blank lines from removed markers
910
+ cleaned = re.sub(r"\n{3,}", "\n\n", cleaned)
911
+ return cleaned
912
+
913
+
914
+ def count_markers(spec_path: Path) -> int:
915
+ """Count existing ``[NEEDS CLARIFICATION: ...]`` markers."""
916
+ content = Path(spec_path).read_text(encoding="utf-8")
917
+ return len(_MARKER_PATTERN.findall(content))
918
+
919
+
920
+ # ---------------------------------------------------------------------------
921
+ # Human-readable output
922
+ # ---------------------------------------------------------------------------
923
+
924
+ def _format_human(result: dict) -> str:
925
+ """Format check results for terminal display."""
926
+ lines = []
927
+ score = result.get("quality_score", 0)
928
+ spec = result.get("spec_file", "unknown")
929
+
930
+ # Score color indicator
931
+ if score >= 80:
932
+ indicator = "[PASS]"
933
+ elif score >= 50:
934
+ indicator = "[WARN]"
935
+ else:
936
+ indicator = "[FAIL]"
937
+
938
+ lines.append(f"{'=' * 60}")
939
+ lines.append(f"Spec Quality Report: {spec}")
940
+ lines.append(f"{'=' * 60}")
941
+ lines.append(f" Score: {score:.1f}% {indicator}")
942
+ lines.append(f" Passed: {result.get('passed', 0)} | Failed: {result.get('failed', 0)} | Warnings: {result.get('warnings', 0)}")
943
+ lines.append("")
944
+
945
+ # Group by status
946
+ for check in result.get("checks", []):
947
+ status = check.get("status", "?").upper()
948
+ sev = check.get("severity", "?")
949
+ name = check.get("name", "")
950
+ msg = check.get("message", "")
951
+ tag = f"[{status}:{sev}]"
952
+ lines.append(f" {tag:20s} {name}")
953
+ if status in ("FAIL", "WARN"):
954
+ lines.append(f" {'':20s} {msg}")
955
+ if check.get("suggestion"):
956
+ lines.append(f" {'':20s} -> {check['suggestion']}")
957
+
958
+ if result.get("critical_failures"):
959
+ lines.append("")
960
+ lines.append(f"CRITICAL FAILURES ({len(result['critical_failures'])}):")
961
+ for cf in result["critical_failures"]:
962
+ lines.append(f" * {cf.get('name', '')}: {cf.get('message', '')}")
963
+
964
+ lines.append(f"{'=' * 60}")
965
+ return "\n".join(lines)
966
+
967
+
968
+ # ---------------------------------------------------------------------------
969
+ # CLI
970
+ # ---------------------------------------------------------------------------
971
+
972
+ def main():
973
+ parser = argparse.ArgumentParser(
974
+ description="ICDEV Spec Quality Checker -- 'unit tests for English'"
975
+ )
976
+ parser.add_argument("--spec-file", type=str, help="Check a single spec markdown file")
977
+ parser.add_argument("--spec-dir", type=str, help="Check all .md files in directory (recursive)")
978
+ parser.add_argument("--annotate", action="store_true", help="Output annotated spec with inline markers")
979
+ parser.add_argument("--output", type=str, help="Write annotated output to file instead of stdout")
980
+ parser.add_argument("--strip-markers", action="store_true", help="Remove markers from spec")
981
+ parser.add_argument("--count-markers", action="store_true", help="Count markers in spec")
982
+ parser.add_argument("--project-id", type=str, help="Project ID for constitution validation")
983
+ parser.add_argument("--json", action="store_true", help="JSON output")
984
+ parser.add_argument("--human", action="store_true", help="Colored terminal output")
985
+ args = parser.parse_args()
986
+
987
+ try:
988
+ # --- Strip markers mode ---
989
+ if args.strip_markers:
990
+ if not args.spec_file:
991
+ raise ValueError("--strip-markers requires --spec-file")
992
+ cleaned = strip_markers(Path(args.spec_file))
993
+ if args.output:
994
+ Path(args.output).write_text(cleaned, encoding="utf-8")
995
+ result = {"status": "ok", "message": f"Markers stripped, written to {args.output}"}
996
+ else:
997
+ result = {"status": "ok", "content": cleaned}
998
+ if args.json:
999
+ print(json.dumps(result, indent=2))
1000
+ else:
1001
+ print(cleaned if not args.output else result["message"])
1002
+ return
1003
+
1004
+ # --- Count markers mode ---
1005
+ if args.count_markers:
1006
+ if not args.spec_file:
1007
+ raise ValueError("--count-markers requires --spec-file")
1008
+ count = count_markers(Path(args.spec_file))
1009
+ result = {"status": "ok", "spec_file": args.spec_file, "marker_count": count}
1010
+ if args.json:
1011
+ print(json.dumps(result, indent=2))
1012
+ else:
1013
+ print(f"Markers found: {count}")
1014
+ return
1015
+
1016
+ # --- Single file mode ---
1017
+ if args.spec_file:
1018
+ result = run_all_checks(
1019
+ Path(args.spec_file),
1020
+ project_id=args.project_id,
1021
+ )
1022
+
1023
+ # Annotate mode
1024
+ if args.annotate and result.get("status") == "ok":
1025
+ annotated = annotate_spec(Path(args.spec_file), result.get("checks", []))
1026
+ if args.output:
1027
+ Path(args.output).write_text(annotated, encoding="utf-8")
1028
+ result["annotated_output"] = args.output
1029
+ result["message"] = f"Annotated spec written to {args.output}"
1030
+ else:
1031
+ if args.json:
1032
+ result["annotated_content"] = annotated
1033
+ else:
1034
+ print(annotated)
1035
+ return
1036
+
1037
+ if args.json:
1038
+ print(json.dumps(result, indent=2, default=str))
1039
+ elif args.human:
1040
+ print(_format_human(result))
1041
+ else:
1042
+ print(json.dumps(result, indent=2, default=str))
1043
+ return
1044
+
1045
+ # --- Batch mode ---
1046
+ if args.spec_dir:
1047
+ spec_dir = Path(args.spec_dir)
1048
+ if not spec_dir.is_dir():
1049
+ raise ValueError(f"Not a directory: {spec_dir}")
1050
+
1051
+ all_results = []
1052
+ for md_file in sorted(spec_dir.rglob("*.md")):
1053
+ r = run_all_checks(md_file, project_id=args.project_id)
1054
+ all_results.append(r)
1055
+
1056
+ batch_result = {
1057
+ "status": "ok",
1058
+ "spec_dir": str(spec_dir),
1059
+ "total_specs": len(all_results),
1060
+ "average_score": round(
1061
+ sum(r.get("quality_score", 0) for r in all_results) / max(len(all_results), 1),
1062
+ 1,
1063
+ ),
1064
+ "specs_passing": sum(1 for r in all_results if r.get("quality_score", 0) >= 70),
1065
+ "specs_failing": sum(1 for r in all_results if r.get("quality_score", 0) < 70),
1066
+ "results": all_results,
1067
+ }
1068
+
1069
+ if args.json:
1070
+ print(json.dumps(batch_result, indent=2, default=str))
1071
+ elif args.human:
1072
+ print(f"Batch Quality Report: {spec_dir}")
1073
+ print(f" Specs: {batch_result['total_specs']} | "
1074
+ f"Avg Score: {batch_result['average_score']}% | "
1075
+ f"Passing: {batch_result['specs_passing']} | "
1076
+ f"Failing: {batch_result['specs_failing']}")
1077
+ print()
1078
+ for r in all_results:
1079
+ print(_format_human(r))
1080
+ print()
1081
+ else:
1082
+ print(json.dumps(batch_result, indent=2, default=str))
1083
+ return
1084
+
1085
+ # No action specified
1086
+ parser.print_help()
1087
+
1088
+ except (ValueError, FileNotFoundError) as exc:
1089
+ if args.json:
1090
+ print(json.dumps({"status": "error", "error": str(exc)}, indent=2))
1091
+ else:
1092
+ print(f"Error: {exc}")
1093
+ raise SystemExit(1)
1094
+
1095
+
1096
+ if __name__ == "__main__":
1097
+ main()