icdev 0.0.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1214) hide show
  1. args/agent_config.yaml +113 -0
  2. args/audit_regimes/cisa_sbd.json +381 -0
  3. args/audit_regimes/cmmc_l2.json +906 -0
  4. args/audit_regimes/dod_cssp.json +393 -0
  5. args/audit_regimes/dodi_5000_87.json +297 -0
  6. args/audit_regimes/fedramp_moderate.json +650 -0
  7. args/audit_regimes/ieee_1012.json +373 -0
  8. args/audit_regimes/nist_800_171.json +624 -0
  9. args/audit_regimes/nist_800_53.json +907 -0
  10. args/cloudforge_blueprints/aws_commercial.yaml +29 -0
  11. args/cloudforge_blueprints/aws_govcloud_il4.yaml +34 -0
  12. args/cloudforge_blueprints/aws_govcloud_il5.yaml +38 -0
  13. args/cloudforge_blueprints/azure_commercial.yaml +28 -0
  14. args/cloudforge_blueprints/azure_gov_il4.yaml +32 -0
  15. args/cloudforge_blueprints/azure_gov_il5.yaml +36 -0
  16. args/cloudforge_blueprints/gcp_commercial.yaml +28 -0
  17. args/cloudforge_blueprints/oci_commercial.yaml +28 -0
  18. args/cloudforge_config.yaml +231 -0
  19. args/cloudforge_runbook_templates/backup_verify.yaml +98 -0
  20. args/cloudforge_runbook_templates/dr_failover.yaml +107 -0
  21. args/cloudforge_runbook_templates/health_check.yaml +97 -0
  22. args/cloudforge_runbook_templates/incident_response.yaml +101 -0
  23. args/cloudforge_runbook_templates/migration_cutover.yaml +105 -0
  24. args/cloudforge_runbook_templates/patch_rollout.yaml +92 -0
  25. args/cloudforge_runbook_templates/zone_provision.yaml +93 -0
  26. args/code_pattern_config.yaml +151 -0
  27. args/code_quality_config.yaml +47 -0
  28. args/compliance_config.yaml +17 -0
  29. args/control_inheritance.yaml +177 -0
  30. args/csp_mcp_config.yaml +41 -0
  31. args/cui_markings.yaml +35 -0
  32. args/databridge_config.yaml +232 -0
  33. args/db_config.yaml +116 -0
  34. args/decision_tables/agent_trust_decision.yaml +143 -0
  35. args/decision_tables/ato_boundary_impact.yaml +132 -0
  36. args/decision_tables/deployment_approval.yaml +152 -0
  37. args/degradation_matrix.yaml +163 -0
  38. args/devsecops_config.yaml +286 -0
  39. args/endpoint_security_config.yaml +207 -0
  40. args/exit_criteria.yaml +102 -0
  41. args/feature_flags.yaml +235 -0
  42. args/file_access_tiers.yaml +88 -0
  43. args/forge_studio/blueprint_config.yaml +27 -0
  44. args/forge_studio/component_catalog.json +411 -0
  45. args/forge_studio/workflow_templates.yaml +103 -0
  46. args/govcon_config.yaml +41 -0
  47. args/harness_config.yaml +67 -0
  48. args/innovation_config.yaml +321 -0
  49. args/knowledge_graph_config.yaml +113 -0
  50. args/llm_config.yaml +222 -0
  51. args/marketplace_config.yaml +260 -0
  52. args/monitoring_config.yaml +127 -0
  53. args/mosa_config.yaml +190 -0
  54. args/observability_tracing_config.yaml +170 -0
  55. args/owasp_agentic_config.yaml +171 -0
  56. args/pipeline_gates.yaml +197 -0
  57. args/project_defaults.yaml +235 -0
  58. args/prompt_chains.yaml +163 -0
  59. args/rag_config.yaml +167 -0
  60. args/research_config.yaml +89 -0
  61. args/resilience_config.yaml +197 -0
  62. args/ricoas_config.yaml +191 -0
  63. args/security_gates.yaml +763 -0
  64. args/storage_config.yaml +63 -0
  65. args/writeguard_config.yaml +131 -0
  66. args/zta_config.yaml +247 -0
  67. context/__init__.py +6 -0
  68. context/agent/__init__.py +6 -0
  69. context/agent/response_schemas/__init__.py +6 -0
  70. context/agent/response_schemas/debate_position.json +46 -0
  71. context/agent/response_schemas/fitness_scorecard.json +74 -0
  72. context/agent/response_schemas/review_decision.json +39 -0
  73. context/agent/response_schemas/task_decomposition.json +82 -0
  74. context/agent/response_schemas/veto_decision.json +40 -0
  75. context/agentic/__init__.py +6 -0
  76. context/agentic/architecture_patterns.md +269 -0
  77. context/agentic/capability_registry.yaml +223 -0
  78. context/agentic/csp_integration.md +30 -0
  79. context/agentic/csp_mcp_registry.yaml +280 -0
  80. context/agentic/fitness_rubric.md +56 -0
  81. context/agentic/governance_baseline.md +205 -0
  82. context/ci/__init__.py +6 -0
  83. context/ci/worktree_templates.json +44 -0
  84. context/cloud/__init__.py +6 -0
  85. context/cloud/csp_service_registry.json +739 -0
  86. context/compliance/__init__.py +6 -0
  87. context/compliance/ai_rmf_crosswalk.yaml +226 -0
  88. context/compliance/atlas_mitigations.json +293 -0
  89. context/compliance/atlas_techniques.json +833 -0
  90. context/compliance/cisa_sbd_requirements.json +477 -0
  91. context/compliance/cjis_security_policy.json +522 -0
  92. context/compliance/cmmc_practices.json +2494 -0
  93. context/compliance/cmmc_report_template.md +142 -0
  94. context/compliance/cnssi_1253_overlay.json +109 -0
  95. context/compliance/control_crosswalk.json +1914 -0
  96. context/compliance/control_families/__init__.py +6 -0
  97. context/compliance/csp_certifications.json +251 -0
  98. context/compliance/cssp_report_template.md +193 -0
  99. context/compliance/cui_templates/__init__.py +6 -0
  100. context/compliance/cui_templates/banner_block.txt +4 -0
  101. context/compliance/cui_templates/code_header.txt +8 -0
  102. context/compliance/cui_templates/document_template.md +35 -0
  103. context/compliance/data_type_framework_map.json +321 -0
  104. context/compliance/data_type_registry.json +147 -0
  105. context/compliance/dod_cssp_8530.json +463 -0
  106. context/compliance/eu_ai_act_annex_iii.json +108 -0
  107. context/compliance/export_templates/__init__.py +6 -0
  108. context/compliance/export_templates/emass_controls.csv.j2 +4 -0
  109. context/compliance/export_templates/evidence_package.md.j2 +39 -0
  110. context/compliance/export_templates/executive_summary.md.j2 +55 -0
  111. context/compliance/export_templates/poam_tracking.csv.j2 +4 -0
  112. context/compliance/fedramp_20x_ksi_schemas.json +133 -0
  113. context/compliance/fedramp_high_baseline.json +4370 -0
  114. context/compliance/fedramp_moderate_baseline.json +2183 -0
  115. context/compliance/fedramp_report_template.md +181 -0
  116. context/compliance/fips_200_areas.json +362 -0
  117. context/compliance/gao_ai_accountability.json +262 -0
  118. context/compliance/hipaa_security_rule.json +720 -0
  119. context/compliance/hitrust_csf_v11.json +930 -0
  120. context/compliance/impact_level_profiles.json +251 -0
  121. context/compliance/incident_response_template.md +1110 -0
  122. context/compliance/iso27001_2022_controls.json +750 -0
  123. context/compliance/iso27001_nist_bridge.json +382 -0
  124. context/compliance/iso42001_controls.json +254 -0
  125. context/compliance/ivv_checklist_template.md +80 -0
  126. context/compliance/ivv_report_template.md +116 -0
  127. context/compliance/ivv_requirements.json +372 -0
  128. context/compliance/mosa_crosswalk.json +327 -0
  129. context/compliance/mosa_framework.json +250 -0
  130. context/compliance/narrative_templates/AC.md.j2 +101 -0
  131. context/compliance/narrative_templates/AU.md.j2 +106 -0
  132. context/compliance/narrative_templates/IA.md.j2 +104 -0
  133. context/compliance/narrative_templates/SC.md.j2 +102 -0
  134. context/compliance/narrative_templates/SI.md.j2 +111 -0
  135. context/compliance/narrative_templates/__init__.py +6 -0
  136. context/compliance/narrative_templates/default.md.j2 +50 -0
  137. context/compliance/narrative_templates/executive_summary.j2 +27 -0
  138. context/compliance/narrative_templates/poam_milestone.j2 +19 -0
  139. context/compliance/narrative_templates/ssp_section.j2 +11 -0
  140. context/compliance/nist_800_171_controls.json +1552 -0
  141. context/compliance/nist_800_207_crosswalk.json +399 -0
  142. context/compliance/nist_800_207_zta.json +258 -0
  143. context/compliance/nist_800_53.json +324 -0
  144. context/compliance/nist_ai_600_1_genai.json +326 -0
  145. context/compliance/nist_ai_rmf.json +206 -0
  146. context/compliance/nist_sp_800_60_types.json +1667 -0
  147. context/compliance/omb_m25_21_high_impact_ai.json +248 -0
  148. context/compliance/omb_m26_04_unbiased_ai.json +262 -0
  149. context/compliance/owasp_agentic_asi.json +133 -0
  150. context/compliance/owasp_agentic_threats.json +285 -0
  151. context/compliance/owasp_llm_top10.json +274 -0
  152. context/compliance/pci_dss_v4.json +510 -0
  153. context/compliance/poam_template.md +117 -0
  154. context/compliance/safeai_controls.json +512 -0
  155. context/compliance/sbd_report_template.md +77 -0
  156. context/compliance/siem_config_templates/__init__.py +6 -0
  157. context/compliance/siem_config_templates/filebeat.yml +213 -0
  158. context/compliance/siem_config_templates/log_sources.json +208 -0
  159. context/compliance/soc2_trust_criteria.json +661 -0
  160. context/compliance/ssp_template.md +432 -0
  161. context/compliance/stig_templates/__init__.py +6 -0
  162. context/compliance/stig_templates/webapp_stig.json +139 -0
  163. context/compliance/xai_requirements.json +108 -0
  164. context/dashboard/__init__.py +6 -0
  165. context/dashboard/nlq_examples.json +50 -0
  166. context/dashboard/schema_descriptions.json +23 -0
  167. context/icdev_methodology.md +100 -0
  168. context/integration/__init__.py +6 -0
  169. context/integration/approval_workflows.json +32 -0
  170. context/integration/gitlab_field_mappings.json +33 -0
  171. context/integration/jira_field_mappings.json +32 -0
  172. context/integration/reqif_export_schema.json +23 -0
  173. context/integration/servicenow_field_mappings.json +22 -0
  174. context/languages/__init__.py +6 -0
  175. context/languages/framework_patterns.json +205 -0
  176. context/languages/language_registry.json +279 -0
  177. context/llm/__init__.py +6 -0
  178. context/llm/example_provider.py +89 -0
  179. context/marketplace/assets/writeguard-core.yaml +100 -0
  180. context/marketplace/assets/writeguard-govcon.yaml +45 -0
  181. context/marketplace/assets/writeguard-style-guides.yaml +44 -0
  182. context/mbse/__init__.py +6 -0
  183. context/mbse/des_report_template.md +162 -0
  184. context/mbse/des_requirements.json +411 -0
  185. context/mbse/digital_thread_patterns.json +403 -0
  186. context/mbse/reqif_schema.json +280 -0
  187. context/mbse/sysml_element_types.json +432 -0
  188. context/oscal/NIST_SP-800-53_rev5_catalog.json +254987 -0
  189. context/oscal/README.md +43 -0
  190. context/patterns/__init__.py +6 -0
  191. context/profiles/__init__.py +6 -0
  192. context/profiles/dod_baseline_v1.yaml +145 -0
  193. context/profiles/fedramp_baseline_v1.yaml +143 -0
  194. context/profiles/financial_baseline_v1.yaml +142 -0
  195. context/profiles/healthcare_baseline_v1.yaml +135 -0
  196. context/profiles/law_enforcement_v1.yaml +129 -0
  197. context/profiles/startup_v1.yaml +134 -0
  198. context/rag/source_mappings.json +42 -0
  199. context/requirements/__init__.py +6 -0
  200. context/requirements/ambiguity_patterns.json +97 -0
  201. context/requirements/boundary_impact_rules.json +123 -0
  202. context/requirements/default_constitutions.json +67 -0
  203. context/requirements/document_extraction_rules.json +58 -0
  204. context/requirements/gap_patterns.json +108 -0
  205. context/requirements/readiness_rubric.json +78 -0
  206. context/requirements/red_alternative_patterns.json +210 -0
  207. context/requirements/safe_templates.json +72 -0
  208. context/requirements/spec_quality_checklist.json +122 -0
  209. context/research/regulatory_registry.json +114 -0
  210. context/research/verticals/cybersecurity.json +127 -0
  211. context/research/verticals/defense.json +104 -0
  212. context/research/verticals/fintech.json +125 -0
  213. context/research/verticals/healthcare.json +118 -0
  214. context/research/verticals/logistics.json +117 -0
  215. context/research/verticals/trading.json +145 -0
  216. context/simulation/__init__.py +6 -0
  217. context/simulation/architecture_patterns.json +36 -0
  218. context/simulation/coa_templates.json +38 -0
  219. context/simulation/cost_models.json +23 -0
  220. context/simulation/risk_categories.json +46 -0
  221. context/supply_chain/__init__.py +6 -0
  222. context/supply_chain/isa_templates.json +129 -0
  223. context/supply_chain/nist_800_161_controls.json +247 -0
  224. context/supply_chain/scrm_risk_matrix.json +147 -0
  225. context/templates/__init__.py +6 -0
  226. context/templates/ansible/__init__.py +6 -0
  227. context/templates/ansible/playbooks/__init__.py +6 -0
  228. context/templates/ansible/roles/__init__.py +6 -0
  229. context/templates/gitlab_ci/__init__.py +6 -0
  230. context/templates/grafana/__init__.py +6 -0
  231. context/templates/kubernetes/__init__.py +6 -0
  232. context/templates/project/__init__.py +6 -0
  233. context/templates/project/api/__init__.py +6 -0
  234. context/templates/project/cli/__init__.py +6 -0
  235. context/templates/project/data_pipeline/__init__.py +6 -0
  236. context/templates/project/iac/__init__.py +6 -0
  237. context/templates/project/javascript_frontend/__init__.py +6 -0
  238. context/templates/project/javascript_frontend/src/__init__.py +6 -0
  239. context/templates/project/javascript_frontend/tests/__init__.py +6 -0
  240. context/templates/project/microservice/__init__.py +6 -0
  241. context/templates/project/python_backend/__init__.py +6 -0
  242. context/templates/project/python_backend/src/__init__.py +6 -0
  243. context/templates/project/python_backend/tests/__init__.py +6 -0
  244. context/templates/project/python_backend/tests/features/__init__.py +6 -0
  245. context/templates/project/python_backend/tests/steps/__init__.py +6 -0
  246. context/templates/terraform/__init__.py +6 -0
  247. context/templates/terraform/govcloud_base/__init__.py +6 -0
  248. context/templates/terraform/modules/__init__.py +6 -0
  249. context/tone/__init__.py +6 -0
  250. context/writing/grammar_rules/common_errors.json +306 -0
  251. context/writing/grammar_rules/govcon_vocabulary.json +113 -0
  252. context/writing/style_guides/academic.yaml +43 -0
  253. context/writing/style_guides/business.yaml +42 -0
  254. context/writing/style_guides/government.yaml +59 -0
  255. context/writing/style_guides/proposal.yaml +58 -0
  256. context/writing/style_guides/technical.yaml +43 -0
  257. docs/adr/README.md +66 -0
  258. docs/adr/connector-forge-decisions.md +318 -0
  259. docs/adr/core-decisions.md +289 -0
  260. docs/adr/db-decisions.md +94 -0
  261. docs/adr/harness-decisions.md +122 -0
  262. docs/adr/innovation-decisions.md +262 -0
  263. docs/adr/marketplace-decisions.md +109 -0
  264. docs/adr/sbd-decisions.md +109 -0
  265. docs/adr/scale-engine-decisions.md +108 -0
  266. docs/adr/writeguard-decisions.md +136 -0
  267. docs/architecture/bounded-contexts.md +1032 -0
  268. docs/features/phase-65-writeguard.md +139 -0
  269. docs/features/phase-66-marketplace-commerce.md +79 -0
  270. docs/features/phase-67-knowledge-ingestion-rag-autodraft.md +97 -0
  271. docs/features/phase-68-enhanced-autodraft-pipeline.md +109 -0
  272. docs/features/phase-69-proposalai-marketplace-module.md +131 -0
  273. docs/features/phase-70-databridge.md +214 -0
  274. docs/features/phase-71-databridge-messaging.md +102 -0
  275. docs/implementation-plan-architecture-evolution.md +614 -0
  276. docs/marketplace/CONTRIBUTING.md +124 -0
  277. docs/marketplace/module_manifest_schema.yaml +83 -0
  278. docs/research/ai-architecture-patterns-2024-2026.md +1236 -0
  279. docs/research/app-builder-platform-analysis.md +582 -0
  280. docs/research/architecture-patterns-c4-ddd-agentic.md +871 -0
  281. docs/research/flowable-boat-competitive-analysis.md +426 -0
  282. docs/research/modern-dev-practices-2024-2026.md +1615 -0
  283. docs/research/secure-by-design-cloudyrion-adaptation.md +270 -0
  284. goals/agent_management.md +144 -0
  285. goals/ai_accountability.md +90 -0
  286. goals/ai_narratives.md +79 -0
  287. goals/ai_transparency.md +76 -0
  288. goals/ato_simulator.md +78 -0
  289. goals/audit_engine.md +177 -0
  290. goals/bite_sized_plans.md +225 -0
  291. goals/boundary_supply_chain.md +206 -0
  292. goals/brainstorming_gate.md +186 -0
  293. goals/build_app.md +604 -0
  294. goals/cato_live_evidence.md +77 -0
  295. goals/cloudforge.md +106 -0
  296. goals/code_intelligence.md +197 -0
  297. goals/compliance_workflow.md +858 -0
  298. goals/connector_forge.md +133 -0
  299. goals/databridge.md +128 -0
  300. goals/deploy_workflow.md +390 -0
  301. goals/developer_scorecard.md +78 -0
  302. goals/devsecops_workflow.md +408 -0
  303. goals/firmware_sbom.md +79 -0
  304. goals/forge_hub.md +78 -0
  305. goals/golden_path.md +77 -0
  306. goals/harness_engineering.md +91 -0
  307. goals/integration_testing.md +189 -0
  308. goals/knowledge_graph.md +128 -0
  309. goals/maintenance_audit.md +196 -0
  310. goals/manifest.md +50 -0
  311. goals/monitoring.md +126 -0
  312. goals/mosa_workflow.md +463 -0
  313. goals/multi_agent_orchestration.md +68 -0
  314. goals/observability_traceability_xai.md +154 -0
  315. goals/owasp_agentic_security.md +395 -0
  316. goals/pr_intelligence.md +78 -0
  317. goals/requirements_intake.md +213 -0
  318. goals/secure_by_design.md +135 -0
  319. goals/security_scan.md +381 -0
  320. goals/self_healing.md +120 -0
  321. goals/simulation_engine.md +111 -0
  322. goals/subagent_review.md +205 -0
  323. goals/systematic_debugging.md +257 -0
  324. goals/tdd_workflow.md +403 -0
  325. goals/template_exchange.md +77 -0
  326. goals/thread_heatmap.md +77 -0
  327. goals/threat_modeler.md +77 -0
  328. goals/verification_iron_law.md +192 -0
  329. goals/vsm_dashboard.md +76 -0
  330. goals/writeguard.md +89 -0
  331. goals/zero_trust_architecture.md +403 -0
  332. hardprompts/__init__.py +6 -0
  333. hardprompts/agent/__init__.py +6 -0
  334. hardprompts/agent/agentic_architect.md +100 -0
  335. hardprompts/agent/debate_prompt.md +32 -0
  336. hardprompts/agent/fitness_evaluation.md +48 -0
  337. hardprompts/agent/governance_review.md +214 -0
  338. hardprompts/agent/reviewer_prompt.md +34 -0
  339. hardprompts/agent/skill_design.md +172 -0
  340. hardprompts/agent/task_decomposition.md +275 -0
  341. hardprompts/agent/veto_check_prompt.md +33 -0
  342. hardprompts/architect/__init__.py +6 -0
  343. hardprompts/architect/api_design.md +283 -0
  344. hardprompts/architect/data_model.md +277 -0
  345. hardprompts/architect/system_design.md +180 -0
  346. hardprompts/builder/__init__.py +6 -0
  347. hardprompts/builder/code_generation.md +59 -0
  348. hardprompts/builder/refactor.md +58 -0
  349. hardprompts/builder/scaffold_project.md +69 -0
  350. hardprompts/builder/test_generation.md +87 -0
  351. hardprompts/ci/__init__.py +6 -0
  352. hardprompts/ci/worktree_setup.md +35 -0
  353. hardprompts/compliance/__init__.py +6 -0
  354. hardprompts/compliance/cmmc_assessment.md +63 -0
  355. hardprompts/compliance/cssp_assessment.md +75 -0
  356. hardprompts/compliance/cui_marking.md +86 -0
  357. hardprompts/compliance/fedramp_assessment.md +55 -0
  358. hardprompts/compliance/ivv_assessment.md +96 -0
  359. hardprompts/compliance/poam_generation.md +57 -0
  360. hardprompts/compliance/sbd_assessment.md +101 -0
  361. hardprompts/compliance/security_categorization.md +74 -0
  362. hardprompts/compliance/ssp_generation.md +56 -0
  363. hardprompts/compliance/stig_evaluation.md +63 -0
  364. hardprompts/dashboard/__init__.py +6 -0
  365. hardprompts/dashboard/nlq_system_prompt.md +26 -0
  366. hardprompts/infra/__init__.py +6 -0
  367. hardprompts/infra/k8s_manifests.md +118 -0
  368. hardprompts/infra/pipeline_generation.md +160 -0
  369. hardprompts/infra/terraform_generation.md +92 -0
  370. hardprompts/integration/__init__.py +6 -0
  371. hardprompts/integration/approval_review.md +17 -0
  372. hardprompts/integration/jira_mapping.md +25 -0
  373. hardprompts/integration/servicenow_mapping.md +14 -0
  374. hardprompts/knowledge/__init__.py +6 -0
  375. hardprompts/knowledge/pattern_detection.md +73 -0
  376. hardprompts/knowledge/recommendation_engine.md +90 -0
  377. hardprompts/knowledge/root_cause_analysis.md +91 -0
  378. hardprompts/maintenance/__init__.py +6 -0
  379. hardprompts/maintenance/maintenance_assessment.md +82 -0
  380. hardprompts/mbse/__init__.py +6 -0
  381. hardprompts/mbse/digital_thread.md +67 -0
  382. hardprompts/mbse/model_import.md +62 -0
  383. hardprompts/mbse/model_to_code.md +65 -0
  384. hardprompts/modernization/__init__.py +6 -0
  385. hardprompts/modernization/legacy_analysis.md +93 -0
  386. hardprompts/modernization/migration_planning.md +150 -0
  387. hardprompts/modernization/seven_r_assessment.md +107 -0
  388. hardprompts/proposal_draft.md +53 -0
  389. hardprompts/rag_citation.md +12 -0
  390. hardprompts/rag_rerank.md +31 -0
  391. hardprompts/requirements/__init__.py +6 -0
  392. hardprompts/requirements/bdd_generation.md +35 -0
  393. hardprompts/requirements/clarification_prioritization.md +29 -0
  394. hardprompts/requirements/decomposition.md +60 -0
  395. hardprompts/requirements/document_extraction.md +45 -0
  396. hardprompts/requirements/gap_detection.md +70 -0
  397. hardprompts/requirements/intake_conversation.md +101 -0
  398. hardprompts/requirements/readiness_assessment.md +39 -0
  399. hardprompts/requirements/spec_quality.md +33 -0
  400. hardprompts/requirements/traceability_analysis.md +23 -0
  401. hardprompts/security/__init__.py +6 -0
  402. hardprompts/security/endpoint_security.md +78 -0
  403. hardprompts/security/threat_model.md +70 -0
  404. hardprompts/security/vulnerability_assessment.md +81 -0
  405. hardprompts/simulation/__init__.py +6 -0
  406. hardprompts/simulation/architecture_impact.md +27 -0
  407. hardprompts/simulation/coa_alternative.md +27 -0
  408. hardprompts/simulation/coa_generation.md +25 -0
  409. hardprompts/simulation/compliance_impact.md +28 -0
  410. hardprompts/simulation/cost_estimation.md +33 -0
  411. hardprompts/simulation/risk_assessment.md +28 -0
  412. hardprompts/translation/code_translation.md +68 -0
  413. hardprompts/translation/dependency_suggestion.md +44 -0
  414. hardprompts/translation/test_translation.md +64 -0
  415. hardprompts/translation/translation_repair.md +59 -0
  416. icdev-0.0.3.dist-info/METADATA +909 -0
  417. icdev-0.0.3.dist-info/RECORD +1214 -0
  418. icdev-0.0.3.dist-info/WHEEL +5 -0
  419. icdev-0.0.3.dist-info/entry_points.txt +9 -0
  420. icdev-0.0.3.dist-info/licenses/LICENSE +201 -0
  421. icdev-0.0.3.dist-info/licenses/NOTICE +11 -0
  422. icdev-0.0.3.dist-info/top_level.txt +7 -0
  423. memory/MEMORY.md +52 -0
  424. memory/logs/2026-02-14.md +17 -0
  425. memory/logs/2026-03-03.md +2 -0
  426. memory/logs/__init__.py +1 -0
  427. tools/a2a/icdev_callback_client.py +210 -0
  428. tools/agent/cards/architect_card.json +29 -0
  429. tools/agent/cards/builder_card.json +34 -0
  430. tools/agent/cards/compliance_card.json +29 -0
  431. tools/agent/cards/connector_forge_card.json +49 -0
  432. tools/agent/cards/devsecops_zta_card.json +24 -0
  433. tools/agent/cards/knowledge_card.json +29 -0
  434. tools/agent/cards/monitor_card.json +29 -0
  435. tools/agent/cards/orchestrator_card.json +29 -0
  436. tools/agent/cards/requirements_analyst_card.json +24 -0
  437. tools/agent/cards/security_card.json +29 -0
  438. tools/agent/cards/simulation_card.json +24 -0
  439. tools/agent/cards/supply_chain_card.json +24 -0
  440. tools/analysis/__init__.py +1 -0
  441. tools/analysis/code_analyzer.py +770 -0
  442. tools/analysis/runtime_feedback.py +379 -0
  443. tools/analytics/__init__.py +2 -0
  444. tools/analytics/scorecard.py +538 -0
  445. tools/analytics/vsm_engine.py +612 -0
  446. tools/architecture/__init__.py +2 -0
  447. tools/architecture/adr_extractor.py +393 -0
  448. tools/audit/__init__.py +1 -0
  449. tools/audit/audit_logger.py +199 -0
  450. tools/audit/audit_query.py +153 -0
  451. tools/audit/decision_recorder.py +73 -0
  452. tools/audit_engine/__init__.py +12 -0
  453. tools/audit_engine/ai_advisor.py +906 -0
  454. tools/audit_engine/cli.py +286 -0
  455. tools/audit_engine/comparator.py +305 -0
  456. tools/audit_engine/eject_scaffolder.py +399 -0
  457. tools/audit_engine/engine.py +614 -0
  458. tools/audit_engine/git_fetcher.py +341 -0
  459. tools/audit_engine/regime_loader.py +200 -0
  460. tools/audit_engine/regime_updater.py +325 -0
  461. tools/audit_engine/report_card.py +289 -0
  462. tools/audit_engine/scanner.py +684 -0
  463. tools/audit_engine/self_heal.py +1042 -0
  464. tools/ci/__init__.py +2 -0
  465. tools/ci/connectors/__init__.py +2 -0
  466. tools/ci/connectors/base_connector.py +80 -0
  467. tools/ci/connectors/connector_registry.py +188 -0
  468. tools/ci/connectors/mattermost_connector.py +159 -0
  469. tools/ci/connectors/slack_connector.py +197 -0
  470. tools/ci/core/__init__.py +2 -0
  471. tools/ci/core/air_gap_detector.py +115 -0
  472. tools/ci/core/comment_handler.py +192 -0
  473. tools/ci/core/conversation_manager.py +480 -0
  474. tools/ci/core/event_envelope.py +500 -0
  475. tools/ci/core/event_router.py +444 -0
  476. tools/ci/core/failure_parser.py +397 -0
  477. tools/ci/core/recovery_engine.py +527 -0
  478. tools/ci/gate_enforcer.py +361 -0
  479. tools/ci/modules/__init__.py +2 -0
  480. tools/ci/modules/agent.py +271 -0
  481. tools/ci/modules/git_ops.py +175 -0
  482. tools/ci/modules/state.py +117 -0
  483. tools/ci/modules/vcs.py +303 -0
  484. tools/ci/modules/workflow_ops.py +295 -0
  485. tools/ci/modules/worktree.py +337 -0
  486. tools/ci/pipeline_config_generator.py +558 -0
  487. tools/ci/pr_intelligence.py +485 -0
  488. tools/ci/triggers/__init__.py +2 -0
  489. tools/ci/triggers/gitlab_task_monitor.py +327 -0
  490. tools/ci/triggers/poll_trigger.py +237 -0
  491. tools/ci/triggers/webhook_server.py +356 -0
  492. tools/ci/workflows/__init__.py +2 -0
  493. tools/ci/workflows/icdev_build.py +140 -0
  494. tools/ci/workflows/icdev_comply.py +284 -0
  495. tools/ci/workflows/icdev_document.py +152 -0
  496. tools/ci/workflows/icdev_e2e.py +188 -0
  497. tools/ci/workflows/icdev_patch.py +186 -0
  498. tools/ci/workflows/icdev_plan.py +202 -0
  499. tools/ci/workflows/icdev_plan_build.py +41 -0
  500. tools/ci/workflows/icdev_plan_build_test.py +46 -0
  501. tools/ci/workflows/icdev_plan_build_test_review.py +47 -0
  502. tools/ci/workflows/icdev_review.py +126 -0
  503. tools/ci/workflows/icdev_sdlc.py +261 -0
  504. tools/ci/workflows/icdev_test.py +240 -0
  505. tools/cli/__init__.py +1 -0
  506. tools/cli/output_formatter.py +756 -0
  507. tools/cloudforge/__init__.py +12 -0
  508. tools/cloudforge/airgap/__init__.py +2 -0
  509. tools/cloudforge/airgap/il_classifier.py +70 -0
  510. tools/cloudforge/airgap/offline_validator.py +42 -0
  511. tools/cloudforge/airgap/shift_emulator.py +155 -0
  512. tools/cloudforge/airgap/sneakernet.py +91 -0
  513. tools/cloudforge/cd_hub/__init__.py +2 -0
  514. tools/cloudforge/cd_hub/canary_deployer.py +88 -0
  515. tools/cloudforge/cd_hub/gitops_renderer.py +123 -0
  516. tools/cloudforge/cd_hub/hub_controller.py +143 -0
  517. tools/cloudforge/cd_hub/pipeline_bridge.py +30 -0
  518. tools/cloudforge/cd_hub/rollback_engine.py +29 -0
  519. tools/cloudforge/cd_hub/spoke_agent.py +51 -0
  520. tools/cloudforge/compliance/__init__.py +2 -0
  521. tools/cloudforge/compliance/ato_accelerator.py +272 -0
  522. tools/cloudforge/compliance/control_inheritor.py +127 -0
  523. tools/cloudforge/compliance/evidence_generator.py +129 -0
  524. tools/cloudforge/compliance/poam_bridge.py +41 -0
  525. tools/cloudforge/compliance/ssp_bridge.py +52 -0
  526. tools/cloudforge/compliance/stig_bridge.py +41 -0
  527. tools/cloudforge/container_forge/__init__.py +2 -0
  528. tools/cloudforge/container_forge/bigbang_renderer.py +85 -0
  529. tools/cloudforge/container_forge/hardener.py +169 -0
  530. tools/cloudforge/container_forge/image_scanner_bridge.py +33 -0
  531. tools/cloudforge/container_forge/runtime_policy.py +87 -0
  532. tools/cloudforge/container_forge/sbom_bridge.py +42 -0
  533. tools/cloudforge/finops/__init__.py +2 -0
  534. tools/cloudforge/finops/anomaly_detector.py +78 -0
  535. tools/cloudforge/finops/budget_tracker.py +96 -0
  536. tools/cloudforge/finops/chargeback.py +69 -0
  537. tools/cloudforge/finops/cost_collector.py +141 -0
  538. tools/cloudforge/finops/optimizer.py +55 -0
  539. tools/cloudforge/hybrid/__init__.py +2 -0
  540. tools/cloudforge/hybrid/connection_manager.py +141 -0
  541. tools/cloudforge/hybrid/dns_federator.py +56 -0
  542. tools/cloudforge/hybrid/health_monitor.py +108 -0
  543. tools/cloudforge/hybrid/identity_federator.py +53 -0
  544. tools/cloudforge/hybrid/network_bridge.py +68 -0
  545. tools/cloudforge/hybrid/topology_manager.py +147 -0
  546. tools/cloudforge/hybrid/workload_abstractor.py +92 -0
  547. tools/cloudforge/iac/__init__.py +2 -0
  548. tools/cloudforge/iac/drift_detector.py +154 -0
  549. tools/cloudforge/iac/module_library.py +265 -0
  550. tools/cloudforge/iac/opentofu_adapter.py +89 -0
  551. tools/cloudforge/iac/pulumi_renderer.py +292 -0
  552. tools/cloudforge/iac/state_backend.py +146 -0
  553. tools/cloudforge/iac/terraform_renderer.py +626 -0
  554. tools/cloudforge/landing_zone/__init__.py +2 -0
  555. tools/cloudforge/landing_zone/blueprint_loader.py +98 -0
  556. tools/cloudforge/landing_zone/blueprint_validator.py +113 -0
  557. tools/cloudforge/landing_zone/zone_provisioner.py +306 -0
  558. tools/cloudforge/landing_zone/zone_state.py +143 -0
  559. tools/cloudforge/mbse_thread/__init__.py +2 -0
  560. tools/cloudforge/mbse_thread/ato_thread_weaver.py +111 -0
  561. tools/cloudforge/mbse_thread/control_tracer.py +68 -0
  562. tools/cloudforge/mbse_thread/system_boundary.py +83 -0
  563. tools/cloudforge/metastore/__init__.py +2 -0
  564. tools/cloudforge/metastore/dependency_graph.py +202 -0
  565. tools/cloudforge/metastore/discovery.py +192 -0
  566. tools/cloudforge/metastore/registry.py +185 -0
  567. tools/cloudforge/metastore/rto_tracker.py +92 -0
  568. tools/cloudforge/metastore/runbook_linker.py +82 -0
  569. tools/cloudforge/migration/__init__.py +2 -0
  570. tools/cloudforge/migration/assessor.py +187 -0
  571. tools/cloudforge/migration/cutover_orchestrator.py +117 -0
  572. tools/cloudforge/migration/databridge_bridge.py +92 -0
  573. tools/cloudforge/migration/planner.py +98 -0
  574. tools/cloudforge/migration/risk_scorer.py +97 -0
  575. tools/cloudforge/migration/validation_runner.py +45 -0
  576. tools/cloudforge/migration/workload_inventory.py +107 -0
  577. tools/cloudforge/provider.py +319 -0
  578. tools/cloudforge/providers/__init__.py +2 -0
  579. tools/cloudforge/providers/aws_commercial.py +92 -0
  580. tools/cloudforge/providers/aws_govcloud.py +229 -0
  581. tools/cloudforge/providers/aws_secret.py +83 -0
  582. tools/cloudforge/providers/azure_commercial.py +80 -0
  583. tools/cloudforge/providers/azure_gov.py +91 -0
  584. tools/cloudforge/providers/azure_secret.py +71 -0
  585. tools/cloudforge/providers/gcp.py +102 -0
  586. tools/cloudforge/providers/oci.py +102 -0
  587. tools/cloudforge/registry.py +140 -0
  588. tools/cloudforge/runbooks/__init__.py +2 -0
  589. tools/cloudforge/runbooks/ai_generator.py +119 -0
  590. tools/cloudforge/runbooks/dag_validator.py +219 -0
  591. tools/cloudforge/runbooks/engine.py +470 -0
  592. tools/cloudforge/runbooks/models.py +99 -0
  593. tools/cloudforge/runbooks/snippet_library.py +158 -0
  594. tools/cloudforge/runbooks/template_loader.py +122 -0
  595. tools/cloudforge/runbooks/visualization.py +108 -0
  596. tools/cloudforge/siem/__init__.py +2 -0
  597. tools/cloudforge/siem/alert_rules.py +86 -0
  598. tools/cloudforge/siem/correlation_engine.py +61 -0
  599. tools/cloudforge/siem/log_aggregator.py +113 -0
  600. tools/cloudforge/siem/siem_dashboard_data.py +28 -0
  601. tools/cloudforge/supply_chain/__init__.py +2 -0
  602. tools/cloudforge/supply_chain/bridge.py +33 -0
  603. tools/cloudforge/supply_chain/iac_dependency_scanner.py +36 -0
  604. tools/cloudforge/supply_chain/provider_trust_scorer.py +54 -0
  605. tools/compat/__init__.py +21 -0
  606. tools/compat/cli_harmonizer.py +251 -0
  607. tools/compat/datetime_utils.py +18 -0
  608. tools/compat/db_utils.py +190 -0
  609. tools/compat/platform_utils.py +123 -0
  610. tools/compliance/__init__.py +1 -0
  611. tools/compliance/accountability_manager.py +391 -0
  612. tools/compliance/ai_accountability_audit.py +287 -0
  613. tools/compliance/ai_impact_assessor.py +267 -0
  614. tools/compliance/ai_incident_response.py +295 -0
  615. tools/compliance/ai_inventory_manager.py +233 -0
  616. tools/compliance/ai_reassessment_scheduler.py +250 -0
  617. tools/compliance/ai_transparency_audit.py +247 -0
  618. tools/compliance/atlas_assessor.py +276 -0
  619. tools/compliance/atlas_report_generator.py +1199 -0
  620. tools/compliance/base_assessor.py +591 -0
  621. tools/compliance/cato_live_engine.py +607 -0
  622. tools/compliance/cato_monitor.py +1371 -0
  623. tools/compliance/cato_scheduler.py +698 -0
  624. tools/compliance/cjis_assessor.py +76 -0
  625. tools/compliance/classification_manager.py +1340 -0
  626. tools/compliance/cmmc_assessor.py +1478 -0
  627. tools/compliance/cmmc_report_generator.py +1087 -0
  628. tools/compliance/compliance_detector.py +452 -0
  629. tools/compliance/compliance_exporter.py +418 -0
  630. tools/compliance/compliance_status.py +810 -0
  631. tools/compliance/control_mapper.py +488 -0
  632. tools/compliance/crosswalk_engine.py +1208 -0
  633. tools/compliance/cssp_assessor.py +1032 -0
  634. tools/compliance/cssp_evidence_collector.py +716 -0
  635. tools/compliance/cssp_report_generator.py +1103 -0
  636. tools/compliance/cui_marker.py +387 -0
  637. tools/compliance/diagram_validator.py +599 -0
  638. tools/compliance/emass/__init__.py +2 -0
  639. tools/compliance/emass/emass_client.py +822 -0
  640. tools/compliance/emass/emass_export.py +758 -0
  641. tools/compliance/emass/emass_sync.py +807 -0
  642. tools/compliance/eu_ai_act_classifier.py +193 -0
  643. tools/compliance/evidence_collector.py +459 -0
  644. tools/compliance/fairness_assessor.py +310 -0
  645. tools/compliance/fedramp_20x_ksi_emitter.py +692 -0
  646. tools/compliance/fedramp_assessor.py +1795 -0
  647. tools/compliance/fedramp_authorization_packager.py +137 -0
  648. tools/compliance/fedramp_ksi_generator.py +349 -0
  649. tools/compliance/fedramp_report_generator.py +1115 -0
  650. tools/compliance/fips199_categorizer.py +869 -0
  651. tools/compliance/fips200_validator.py +304 -0
  652. tools/compliance/firmware_sbom.py +646 -0
  653. tools/compliance/gao_ai_assessor.py +228 -0
  654. tools/compliance/gao_evidence_builder.py +302 -0
  655. tools/compliance/hipaa_assessor.py +78 -0
  656. tools/compliance/hitrust_assessor.py +49 -0
  657. tools/compliance/incident_response_plan.py +705 -0
  658. tools/compliance/inheritance_engine.py +693 -0
  659. tools/compliance/iso27001_assessor.py +92 -0
  660. tools/compliance/iso42001_assessor.py +114 -0
  661. tools/compliance/ivv_assessor.py +2314 -0
  662. tools/compliance/ivv_report_generator.py +1649 -0
  663. tools/compliance/model_card_generator.py +291 -0
  664. tools/compliance/mosa_assessor.py +117 -0
  665. tools/compliance/multi_regime_assessor.py +441 -0
  666. tools/compliance/narrative_generator.py +1012 -0
  667. tools/compliance/narrative_quality_gate.py +701 -0
  668. tools/compliance/narrative_workflow.py +814 -0
  669. tools/compliance/nist_800_207_assessor.py +191 -0
  670. tools/compliance/nist_ai_600_1_assessor.py +185 -0
  671. tools/compliance/nist_ai_rmf_assessor.py +110 -0
  672. tools/compliance/nist_lookup.py +244 -0
  673. tools/compliance/omb_m25_21_assessor.py +225 -0
  674. tools/compliance/omb_m26_04_assessor.py +185 -0
  675. tools/compliance/oscal_catalog_adapter.py +395 -0
  676. tools/compliance/oscal_generator.py +2157 -0
  677. tools/compliance/oscal_tools.py +1182 -0
  678. tools/compliance/oscal_validator.py +692 -0
  679. tools/compliance/owasp_agentic_assessor.py +227 -0
  680. tools/compliance/owasp_asi_assessor.py +197 -0
  681. tools/compliance/owasp_llm_assessor.py +245 -0
  682. tools/compliance/pci_dss_assessor.py +80 -0
  683. tools/compliance/pi_compliance_tracker.py +1447 -0
  684. tools/compliance/poam_generator.py +388 -0
  685. tools/compliance/resolve_marking.py +272 -0
  686. tools/compliance/sbd_assessor.py +2070 -0
  687. tools/compliance/sbd_report_generator.py +1223 -0
  688. tools/compliance/sbom_generator.py +993 -0
  689. tools/compliance/siem_config_generator.py +661 -0
  690. tools/compliance/slsa_attestation_generator.py +479 -0
  691. tools/compliance/soc2_assessor.py +77 -0
  692. tools/compliance/ssp_generator.py +556 -0
  693. tools/compliance/stig_checker.py +712 -0
  694. tools/compliance/swft_evidence_bundler.py +326 -0
  695. tools/compliance/system_card_generator.py +303 -0
  696. tools/compliance/template_exchange.py +513 -0
  697. tools/compliance/traceability_matrix.py +1268 -0
  698. tools/compliance/universal_classification_manager.py +1159 -0
  699. tools/compliance/xacta/__init__.py +2 -0
  700. tools/compliance/xacta/xacta_client.py +438 -0
  701. tools/compliance/xacta/xacta_export.py +546 -0
  702. tools/compliance/xacta/xacta_sync.py +322 -0
  703. tools/compliance/xai_assessor.py +231 -0
  704. tools/core/__init__.py +2 -0
  705. tools/core/circuit_breaker.py +353 -0
  706. tools/core/compliance_sidecar.py +344 -0
  707. tools/core/container.py +110 -0
  708. tools/core/errors.py +256 -0
  709. tools/core/feature_flags.py +311 -0
  710. tools/core/task_dlq.py +350 -0
  711. tools/dashboard/__init__.py +2 -0
  712. tools/dashboard/app.py +6288 -0
  713. tools/dashboard/templates/agent_evolution.html +287 -0
  714. tools/dashboard/templates/agents/list.html +71 -0
  715. tools/dashboard/templates/agents.html +132 -0
  716. tools/dashboard/templates/architecture.html +289 -0
  717. tools/dashboard/templates/ato_simulator.html +170 -0
  718. tools/dashboard/templates/audit_engine.html +844 -0
  719. tools/dashboard/templates/base.html +236 -0
  720. tools/dashboard/templates/cato_live.html +116 -0
  721. tools/dashboard/templates/cloudforge.html +195 -0
  722. tools/dashboard/templates/cloudforge_finops.html +111 -0
  723. tools/dashboard/templates/cloudforge_hybrid.html +122 -0
  724. tools/dashboard/templates/cloudforge_metastore.html +234 -0
  725. tools/dashboard/templates/cloudforge_migration.html +87 -0
  726. tools/dashboard/templates/cloudforge_runbooks.html +201 -0
  727. tools/dashboard/templates/cloudforge_siem.html +94 -0
  728. tools/dashboard/templates/compliance_accel.html +292 -0
  729. tools/dashboard/templates/crashes.html +122 -0
  730. tools/dashboard/templates/databridge.html +305 -0
  731. tools/dashboard/templates/databridge_analytics.html +195 -0
  732. tools/dashboard/templates/databridge_mapping.html +345 -0
  733. tools/dashboard/templates/databridge_messaging.html +321 -0
  734. tools/dashboard/templates/decisions.html +258 -0
  735. tools/dashboard/templates/devices.html +151 -0
  736. tools/dashboard/templates/devsecops_maturity.html +278 -0
  737. tools/dashboard/templates/edge_ai.html +128 -0
  738. tools/dashboard/templates/firmware.html +120 -0
  739. tools/dashboard/templates/firmware_sbom.html +193 -0
  740. tools/dashboard/templates/forge_hub.html +196 -0
  741. tools/dashboard/templates/forge_studio.html +379 -0
  742. tools/dashboard/templates/forge_studio_analytics.html +360 -0
  743. tools/dashboard/templates/forge_studio_builder.html +1637 -0
  744. tools/dashboard/templates/forge_studio_compliance.html +310 -0
  745. tools/dashboard/templates/forge_studio_deploy.html +573 -0
  746. tools/dashboard/templates/forge_studio_enterprise.html +888 -0
  747. tools/dashboard/templates/forge_studio_marketplace.html +502 -0
  748. tools/dashboard/templates/forge_studio_workflow.html +696 -0
  749. tools/dashboard/templates/golden_path.html +175 -0
  750. tools/dashboard/templates/govcon.html +280 -0
  751. tools/dashboard/templates/harness.html +148 -0
  752. tools/dashboard/templates/index.html +207 -0
  753. tools/dashboard/templates/intelligence.html +336 -0
  754. tools/dashboard/templates/knowledge/index.html +190 -0
  755. tools/dashboard/templates/knowledge_graph.html +739 -0
  756. tools/dashboard/templates/login.html +51 -0
  757. tools/dashboard/templates/marketplace.html +336 -0
  758. tools/dashboard/templates/marketplace_admin.html +247 -0
  759. tools/dashboard/templates/missions.html +403 -0
  760. tools/dashboard/templates/narratives.html +154 -0
  761. tools/dashboard/templates/pr_intelligence.html +151 -0
  762. tools/dashboard/templates/proposals/detail.html +300 -0
  763. tools/dashboard/templates/proposals/list.html +52 -0
  764. tools/dashboard/templates/proposals/sam_detail.html +132 -0
  765. tools/dashboard/templates/proposals/section_detail.html +375 -0
  766. tools/dashboard/templates/research.html +222 -0
  767. tools/dashboard/templates/resilience.html +300 -0
  768. tools/dashboard/templates/scorecard.html +162 -0
  769. tools/dashboard/templates/simulator.html +131 -0
  770. tools/dashboard/templates/template_exchange.html +147 -0
  771. tools/dashboard/templates/thread_heatmap.html +151 -0
  772. tools/dashboard/templates/threat_model.html +195 -0
  773. tools/dashboard/templates/vsm.html +141 -0
  774. tools/dashboard/templates/writeguard.html +277 -0
  775. tools/databridge/__init__.py +5 -0
  776. tools/databridge/agent/__init__.py +2 -0
  777. tools/databridge/agent/daemon.py +227 -0
  778. tools/databridge/agent/tunnel.py +101 -0
  779. tools/databridge/agent/ws_relay.py +91 -0
  780. tools/databridge/analytics.py +167 -0
  781. tools/databridge/arrow_pipeline.py +327 -0
  782. tools/databridge/connection_manager.py +424 -0
  783. tools/databridge/connector.py +331 -0
  784. tools/databridge/connectors/__init__.py +2 -0
  785. tools/databridge/connectors/argocd_connector.py +160 -0
  786. tools/databridge/connectors/avro_connector.py +203 -0
  787. tools/databridge/connectors/azure_blob.py +63 -0
  788. tools/databridge/connectors/cdc_connector.py +205 -0
  789. tools/databridge/connectors/csv_connector.py +172 -0
  790. tools/databridge/connectors/datadog_connector.py +153 -0
  791. tools/databridge/connectors/discord_messaging.py +215 -0
  792. tools/databridge/connectors/dynamics365.py +151 -0
  793. tools/databridge/connectors/elasticsearch_connector.py +145 -0
  794. tools/databridge/connectors/email_base.py +114 -0
  795. tools/databridge/connectors/excel_connector.py +175 -0
  796. tools/databridge/connectors/fsspec_base.py +300 -0
  797. tools/databridge/connectors/gcs.py +53 -0
  798. tools/databridge/connectors/github_connector.py +138 -0
  799. tools/databridge/connectors/gitlab_connector.py +132 -0
  800. tools/databridge/connectors/gmail_connector.py +182 -0
  801. tools/databridge/connectors/hdfs.py +57 -0
  802. tools/databridge/connectors/health_base.py +401 -0
  803. tools/databridge/connectors/hubspot.py +124 -0
  804. tools/databridge/connectors/imap_connector.py +171 -0
  805. tools/databridge/connectors/jenkins_connector.py +138 -0
  806. tools/databridge/connectors/jira_connector.py +86 -0
  807. tools/databridge/connectors/json_connector.py +184 -0
  808. tools/databridge/connectors/kafka_connector.py +246 -0
  809. tools/databridge/connectors/kinesis_connector.py +238 -0
  810. tools/databridge/connectors/local_fs.py +30 -0
  811. tools/databridge/connectors/matrix.py +197 -0
  812. tools/databridge/connectors/mattermost_messaging.py +184 -0
  813. tools/databridge/connectors/messaging_base.py +172 -0
  814. tools/databridge/connectors/mssql.py +63 -0
  815. tools/databridge/connectors/mysql.py +57 -0
  816. tools/databridge/connectors/netsuite.py +170 -0
  817. tools/databridge/connectors/o365_mail.py +196 -0
  818. tools/databridge/connectors/oracle.py +65 -0
  819. tools/databridge/connectors/pagerduty_connector.py +162 -0
  820. tools/databridge/connectors/parquet_connector.py +131 -0
  821. tools/databridge/connectors/postgresql.py +58 -0
  822. tools/databridge/connectors/s3.py +65 -0
  823. tools/databridge/connectors/saas_base.py +198 -0
  824. tools/databridge/connectors/salesforce.py +126 -0
  825. tools/databridge/connectors/sap.py +89 -0
  826. tools/databridge/connectors/servicenow.py +60 -0
  827. tools/databridge/connectors/signal_messaging.py +150 -0
  828. tools/databridge/connectors/slack_messaging.py +203 -0
  829. tools/databridge/connectors/smtp_connector.py +126 -0
  830. tools/databridge/connectors/soap_base.py +258 -0
  831. tools/databridge/connectors/splunk_connector.py +171 -0
  832. tools/databridge/connectors/sql_base.py +310 -0
  833. tools/databridge/connectors/sqlite_connector.py +76 -0
  834. tools/databridge/connectors/teams.py +148 -0
  835. tools/databridge/connectors/telegram.py +192 -0
  836. tools/databridge/connectors/whatsapp.py +137 -0
  837. tools/databridge/data_profiler.py +99 -0
  838. tools/databridge/forge/__init__.py +6 -0
  839. tools/databridge/forge/base_selector.py +150 -0
  840. tools/databridge/forge/code_generator.py +206 -0
  841. tools/databridge/forge/community_hub.py +539 -0
  842. tools/databridge/forge/forge_agent.py +306 -0
  843. tools/databridge/forge/import_handler.py +133 -0
  844. tools/databridge/forge/integration_tester.py +127 -0
  845. tools/databridge/forge/marketplace_publisher.py +164 -0
  846. tools/databridge/forge/promoter.py +159 -0
  847. tools/databridge/forge/sandbox_manager.py +257 -0
  848. tools/databridge/forge/spec_parser.py +358 -0
  849. tools/databridge/forge/static_validator.py +363 -0
  850. tools/databridge/forge/templates/__init__.py +591 -0
  851. tools/databridge/format_converter.py +188 -0
  852. tools/databridge/mapping_engine.py +348 -0
  853. tools/databridge/messaging/__init__.py +5 -0
  854. tools/databridge/messaging/agent_bridge.py +254 -0
  855. tools/databridge/messaging/message_envelope.py +111 -0
  856. tools/databridge/messaging/message_logger.py +204 -0
  857. tools/databridge/messaging/messaging_daemon.py +326 -0
  858. tools/databridge/messaging/oauth2_manager.py +411 -0
  859. tools/databridge/pii_detector.py +221 -0
  860. tools/databridge/registry.py +352 -0
  861. tools/databridge/relay_server.py +105 -0
  862. tools/databridge/scale/__init__.py +16 -0
  863. tools/databridge/scale/backpressure.py +134 -0
  864. tools/databridge/scale/chunked_pipeline.py +169 -0
  865. tools/databridge/scale/connection_pool.py +293 -0
  866. tools/databridge/scale/engine.py +492 -0
  867. tools/databridge/scale/worker_pool.py +140 -0
  868. tools/databridge/scale/write_batcher.py +250 -0
  869. tools/databridge/schema_engine.py +324 -0
  870. tools/databridge/stream_manager.py +225 -0
  871. tools/databridge/sync_engine.py +411 -0
  872. tools/databridge/transforms.py +302 -0
  873. tools/db/__init__.py +1 -0
  874. tools/db/backup.py +312 -0
  875. tools/db/backup_manager.py +832 -0
  876. tools/db/init_icdev_db.py +7753 -0
  877. tools/db/init_sparkpilot_db.py +431 -0
  878. tools/db/migrate.py +177 -0
  879. tools/db/migrate_innovation_audit.py +165 -0
  880. tools/db/migration_runner.py +548 -0
  881. tools/db/migrations/001_baseline/meta.json +9 -0
  882. tools/db/migrations/001_baseline/up.py +67 -0
  883. tools/db/migrations/002_memory_enhancements/down.sql +8 -0
  884. tools/db/migrations/002_memory_enhancements/meta.json +9 -0
  885. tools/db/migrations/002_memory_enhancements/up.py +119 -0
  886. tools/db/migrations/003_dev_profiles/meta.json +8 -0
  887. tools/db/migrations/003_dev_profiles/up.py +93 -0
  888. tools/db/migrations/004_innovation_engine/down.py +19 -0
  889. tools/db/migrations/004_innovation_engine/up.py +227 -0
  890. tools/db/migrations/005_phase_37_ai_security/down.py +19 -0
  891. tools/db/migrations/005_phase_37_ai_security/up.py +257 -0
  892. tools/db/migrations/006_phase_36_evolution/down.py +21 -0
  893. tools/db/migrations/006_phase_36_evolution/up.py +323 -0
  894. tools/db/migrations/007_phase_38_cloud/down.py +14 -0
  895. tools/db/migrations/007_phase_38_cloud/up.py +110 -0
  896. tools/db/migrations/008_phase36_37_integration/up.py +55 -0
  897. tools/db/migrations/__init__.py +2 -0
  898. tools/db/pg_migrate.py +642 -0
  899. tools/db/storage.py +1080 -0
  900. tools/decisions/__init__.py +2 -0
  901. tools/decisions/dmn_engine.py +695 -0
  902. tools/devsecops/__init__.py +2 -0
  903. tools/devsecops/attestation_manager.py +449 -0
  904. tools/devsecops/network_segmentation_generator.py +604 -0
  905. tools/devsecops/pdp_config_generator.py +1246 -0
  906. tools/devsecops/pipeline_security_generator.py +475 -0
  907. tools/devsecops/policy_generator.py +644 -0
  908. tools/devsecops/profile_manager.py +374 -0
  909. tools/devsecops/service_mesh_generator.py +1063 -0
  910. tools/devsecops/zta_maturity_scorer.py +355 -0
  911. tools/devsecops/zta_terraform_generator.py +1301 -0
  912. tools/edge_ai/__init__.py +2 -0
  913. tools/edge_ai/model_manager.py +200 -0
  914. tools/embedded/__init__.py +2 -0
  915. tools/embedded/cmake_generator.py +318 -0
  916. tools/embedded/crash_analyzer.py +191 -0
  917. tools/embedded/nl_to_firmware.py +277 -0
  918. tools/events/__init__.py +1 -0
  919. tools/events/event_bus.py +199 -0
  920. tools/finetune/pair_generator.py +832 -0
  921. tools/fleet/__init__.py +2 -0
  922. tools/fleet/device_registry.py +148 -0
  923. tools/fleet/ota_manager.py +153 -0
  924. tools/forge_studio/__init__.py +13 -0
  925. tools/forge_studio/analytics/__init__.py +0 -0
  926. tools/forge_studio/analytics/process_miner.py +383 -0
  927. tools/forge_studio/audit.py +183 -0
  928. tools/forge_studio/blueprint/__init__.py +2 -0
  929. tools/forge_studio/blueprint/build_tracker.py +317 -0
  930. tools/forge_studio/blueprint/export_engine.py +441 -0
  931. tools/forge_studio/blueprint/parent_client.py +335 -0
  932. tools/forge_studio/catalog/__init__.py +2 -0
  933. tools/forge_studio/catalog/component_registry.py +176 -0
  934. tools/forge_studio/catalog/schema_validator.py +193 -0
  935. tools/forge_studio/compliance/__init__.py +1 -0
  936. tools/forge_studio/compliance/compliance_wiring.py +554 -0
  937. tools/forge_studio/deploy/__init__.py +1 -0
  938. tools/forge_studio/deploy/airgap_packager.py +466 -0
  939. tools/forge_studio/deploy/deploy_engine.py +1792 -0
  940. tools/forge_studio/deploy/env_manager.py +431 -0
  941. tools/forge_studio/eject/__init__.py +2 -0
  942. tools/forge_studio/eject/docker_compose_generator.py +237 -0
  943. tools/forge_studio/eject/eject_engine.py +230 -0
  944. tools/forge_studio/eject/expo_scaffolder.py +303 -0
  945. tools/forge_studio/eject/nextjs_scaffolder.py +338 -0
  946. tools/forge_studio/enterprise/__init__.py +0 -0
  947. tools/forge_studio/enterprise/custom_frameworks.py +826 -0
  948. tools/forge_studio/enterprise/hardening_engine.py +1530 -0
  949. tools/forge_studio/enterprise/sso_manager.py +718 -0
  950. tools/forge_studio/enterprise/whitelabel_engine.py +887 -0
  951. tools/forge_studio/formula/__init__.py +0 -0
  952. tools/forge_studio/formula/expression_engine.py +562 -0
  953. tools/forge_studio/formula/formula_registry.py +265 -0
  954. tools/forge_studio/generator/__init__.py +2 -0
  955. tools/forge_studio/generator/app_generator.py +584 -0
  956. tools/forge_studio/generator/complexity_detector.py +368 -0
  957. tools/forge_studio/generator/prompt_templates.py +104 -0
  958. tools/forge_studio/generator/spec_builder.py +192 -0
  959. tools/forge_studio/intake_bridge.py +898 -0
  960. tools/forge_studio/marketplace/__init__.py +0 -0
  961. tools/forge_studio/marketplace/component_hub.py +428 -0
  962. tools/forge_studio/models.py +369 -0
  963. tools/forge_studio/renderer/__init__.py +2 -0
  964. tools/forge_studio/renderer/json_render_engine.py +623 -0
  965. tools/forge_studio/renderer/layout_engine.py +214 -0
  966. tools/forge_studio/renderer/rn_component_map.py +182 -0
  967. tools/forge_studio/supabase/__init__.py +2 -0
  968. tools/forge_studio/supabase/auth_generator.py +283 -0
  969. tools/forge_studio/supabase/migration_generator.py +93 -0
  970. tools/forge_studio/supabase/schema_generator.py +281 -0
  971. tools/forge_studio/tenant_manager.py +387 -0
  972. tools/forge_studio/workflow/__init__.py +2 -0
  973. tools/forge_studio/workflow/bpmn_adapter.py +489 -0
  974. tools/govcon/draft_orchestrator.py +1151 -0
  975. tools/govcon/engine_enrichment.py +373 -0
  976. tools/govcon/knowledge_base.py +487 -0
  977. tools/govcon/knowledge_ingestion.py +510 -0
  978. tools/govcon/sam_scanner.py +754 -0
  979. tools/harness/__init__.py +6 -0
  980. tools/harness/exit_criteria_evaluator.py +231 -0
  981. tools/harness/maturity_assessor.py +347 -0
  982. tools/harness/scaffold_harness.py +416 -0
  983. tools/harness/trace_analyzer.py +281 -0
  984. tools/infra/__init__.py +1 -0
  985. tools/infra/ansible_generator.py +867 -0
  986. tools/infra/dockerfile_generator.py +359 -0
  987. tools/infra/infra_status.py +384 -0
  988. tools/infra/ironbank_metadata_generator.py +403 -0
  989. tools/infra/k8s_generator.py +1000 -0
  990. tools/infra/pipeline_generator.py +830 -0
  991. tools/infra/rollback.py +389 -0
  992. tools/infra/terraform_generator.py +1140 -0
  993. tools/infra/terraform_generator_azure.py +1252 -0
  994. tools/infra/terraform_generator_gcp.py +951 -0
  995. tools/infra/terraform_generator_ibm.py +359 -0
  996. tools/infra/terraform_generator_oci.py +918 -0
  997. tools/infra/terraform_generator_onprem.py +318 -0
  998. tools/knowledge/__init__.py +1 -0
  999. tools/knowledge/knowledge_ingest.py +281 -0
  1000. tools/knowledge/pattern_detector.py +681 -0
  1001. tools/knowledge/recommendation_engine.py +449 -0
  1002. tools/knowledge/self_heal_analyzer.py +492 -0
  1003. tools/knowledge_graph/__init__.py +2 -0
  1004. tools/knowledge_graph/graph_rag.py +498 -0
  1005. tools/knowledge_graph/ingester.py +406 -0
  1006. tools/knowledge_graph/insight_generator.py +369 -0
  1007. tools/knowledge_graph/text_network.py +832 -0
  1008. tools/llm/__init__.py +72 -0
  1009. tools/llm/anthropic_provider.py +170 -0
  1010. tools/llm/azure_openai_provider.py +338 -0
  1011. tools/llm/bedrock_provider.py +315 -0
  1012. tools/llm/embedding_provider.py +438 -0
  1013. tools/llm/gemini_provider.py +381 -0
  1014. tools/llm/ibm_watsonx_provider.py +231 -0
  1015. tools/llm/oci_genai_provider.py +462 -0
  1016. tools/llm/ollama_provider.py +350 -0
  1017. tools/llm/openai_provider.py +225 -0
  1018. tools/llm/prompt_registry.py +447 -0
  1019. tools/llm/provider.py +355 -0
  1020. tools/llm/provider_sdk.py +175 -0
  1021. tools/llm/router.py +1124 -0
  1022. tools/llm/semantic_cache.py +394 -0
  1023. tools/llm/vertex_ai_provider.py +374 -0
  1024. tools/maintenance/__init__.py +2 -0
  1025. tools/maintenance/dependency_scanner.py +1016 -0
  1026. tools/maintenance/maintenance_auditor.py +804 -0
  1027. tools/maintenance/remediation_engine.py +957 -0
  1028. tools/maintenance/vulnerability_checker.py +978 -0
  1029. tools/manifest.md +1066 -0
  1030. tools/marketplace/asset_installer.py +639 -0
  1031. tools/marketplace/feedback_validator.py +359 -0
  1032. tools/marketplace/license_client.py +458 -0
  1033. tools/marketplace/module_crypto.py +544 -0
  1034. tools/marketplace/module_runtime.py +236 -0
  1035. tools/marketplace/token_store.py +264 -0
  1036. tools/mbse/__init__.py +3 -0
  1037. tools/mbse/des_assessor.py +1173 -0
  1038. tools/mbse/des_report_generator.py +787 -0
  1039. tools/mbse/diagram_extractor.py +792 -0
  1040. tools/mbse/digital_thread.py +1650 -0
  1041. tools/mbse/model_code_generator.py +1115 -0
  1042. tools/mbse/model_control_mapper.py +410 -0
  1043. tools/mbse/pi_model_tracker.py +1079 -0
  1044. tools/mbse/reqif_parser.py +1468 -0
  1045. tools/mbse/sync_engine.py +1789 -0
  1046. tools/mbse/thread_heatmap.py +445 -0
  1047. tools/mbse/xmi_parser.py +1558 -0
  1048. tools/mcp/builder_server.py +64 -0
  1049. tools/mcp/compliance_server.py +64 -0
  1050. tools/mcp/connector_forge_server.py +155 -0
  1051. tools/mcp/core_server.py +64 -0
  1052. tools/mcp/devsecops_server.py +11 -0
  1053. tools/mcp/devsecops_zta_server.py +64 -0
  1054. tools/mcp/knowledge_server.py +64 -0
  1055. tools/mcp/monitor_server.py +64 -0
  1056. tools/mcp/ops_server.py +300 -0
  1057. tools/mcp/requirements_analyst_server.py +64 -0
  1058. tools/mcp/requirements_server.py +11 -0
  1059. tools/mcp/security_server.py +64 -0
  1060. tools/mcp/simulation_server.py +64 -0
  1061. tools/mcp/supply_chain_server.py +64 -0
  1062. tools/mcp/tool_registry.py +299 -0
  1063. tools/memory/__init__.py +2 -0
  1064. tools/memory/auto_capture.py +346 -0
  1065. tools/memory/embed_memory.py +157 -0
  1066. tools/memory/history_compressor.py +334 -0
  1067. tools/memory/hybrid_search.py +235 -0
  1068. tools/memory/maintenance_cron.py +288 -0
  1069. tools/memory/memory_consolidation.py +439 -0
  1070. tools/memory/memory_db.py +132 -0
  1071. tools/memory/memory_read.py +101 -0
  1072. tools/memory/memory_write.py +221 -0
  1073. tools/memory/semantic_search.py +138 -0
  1074. tools/memory/time_decay.py +434 -0
  1075. tools/missions/__init__.py +2 -0
  1076. tools/missions/mission_engine.py +459 -0
  1077. tools/monitor/__init__.py +1 -0
  1078. tools/monitor/alert_correlator.py +486 -0
  1079. tools/monitor/auto_resolver.py +603 -0
  1080. tools/monitor/health_checker.py +507 -0
  1081. tools/monitor/heartbeat_daemon.py +779 -0
  1082. tools/monitor/log_analyzer.py +507 -0
  1083. tools/monitor/metric_collector.py +484 -0
  1084. tools/mosa/__init__.py +10 -0
  1085. tools/mosa/icd_generator.py +358 -0
  1086. tools/mosa/modular_design_analyzer.py +682 -0
  1087. tools/mosa/mosa_code_enforcer.py +348 -0
  1088. tools/mosa/tsp_generator.py +265 -0
  1089. tools/observability/__init__.py +100 -0
  1090. tools/observability/genai_attributes.py +88 -0
  1091. tools/observability/instrumentation.py +140 -0
  1092. tools/observability/mlflow_exporter.py +193 -0
  1093. tools/observability/otel_tracer.py +168 -0
  1094. tools/observability/provenance/__init__.py +3 -0
  1095. tools/observability/provenance/prov_recorder.py +322 -0
  1096. tools/observability/shap/__init__.py +3 -0
  1097. tools/observability/shap/agent_shap.py +274 -0
  1098. tools/observability/sqlite_tracer.py +360 -0
  1099. tools/observability/trace_context.py +205 -0
  1100. tools/observability/tracer.py +230 -0
  1101. tools/orchestration/__init__.py +1 -0
  1102. tools/orchestration/peer_channels.py +254 -0
  1103. tools/orchestration/saga_coordinator.py +390 -0
  1104. tools/project/__init__.py +1 -0
  1105. tools/project/manifest_loader.py +418 -0
  1106. tools/project/project_create.py +350 -0
  1107. tools/project/project_list.py +171 -0
  1108. tools/project/project_scaffold.py +1715 -0
  1109. tools/project/project_status.py +478 -0
  1110. tools/project/session_context_builder.py +752 -0
  1111. tools/project/validate_manifest.py +54 -0
  1112. tools/rag/corrective_rag.py +582 -0
  1113. tools/rag/source_registry.py +482 -0
  1114. tools/requirements/__init__.py +1 -0
  1115. tools/requirements/ai_governance_scorer.py +207 -0
  1116. tools/requirements/boundary_analyzer.py +1281 -0
  1117. tools/requirements/clarification_engine.py +605 -0
  1118. tools/requirements/complexity_scorer.py +369 -0
  1119. tools/requirements/consistency_analyzer.py +789 -0
  1120. tools/requirements/constitution_manager.py +592 -0
  1121. tools/requirements/decomposition_engine.py +764 -0
  1122. tools/requirements/document_extractor.py +1002 -0
  1123. tools/requirements/elicitation_techniques.py +508 -0
  1124. tools/requirements/gap_detector.py +260 -0
  1125. tools/requirements/intake_engine.py +2175 -0
  1126. tools/requirements/prd_generator.py +839 -0
  1127. tools/requirements/prd_validator.py +584 -0
  1128. tools/requirements/readiness_scorer.py +302 -0
  1129. tools/requirements/spec_organizer.py +1015 -0
  1130. tools/requirements/spec_quality_checker.py +1083 -0
  1131. tools/requirements/traceability_builder.py +566 -0
  1132. tools/research/__init__.py +3 -0
  1133. tools/research/academic_scanner.py +130 -0
  1134. tools/research/build_buy_analyzer.py +229 -0
  1135. tools/research/challenge_scorer.py +280 -0
  1136. tools/research/community_scanner.py +174 -0
  1137. tools/research/cross_engine_bridge.py +124 -0
  1138. tools/research/dossier_generator.py +305 -0
  1139. tools/research/landscape_scanner.py +315 -0
  1140. tools/research/regulatory_scanner.py +248 -0
  1141. tools/research/research_manager.py +469 -0
  1142. tools/research/source_scanner.py +150 -0
  1143. tools/research/vertical_loader.py +118 -0
  1144. tools/saas/__init__.py +0 -0
  1145. tools/saas/licensing/__init__.py +0 -0
  1146. tools/saas/licensing/license_validator.py +345 -0
  1147. tools/scaffold/__init__.py +2 -0
  1148. tools/scaffold/golden_path.py +504 -0
  1149. tools/security/__init__.py +1 -0
  1150. tools/security/agent_output_validator.py +330 -0
  1151. tools/security/agent_trust_scorer.py +652 -0
  1152. tools/security/ai_bom_generator.py +718 -0
  1153. tools/security/ai_telemetry_logger.py +469 -0
  1154. tools/security/atlas_red_team.py +541 -0
  1155. tools/security/code_pattern_scanner.py +382 -0
  1156. tools/security/confabulation_detector.py +265 -0
  1157. tools/security/container_scanner.py +489 -0
  1158. tools/security/dependency_auditor.py +942 -0
  1159. tools/security/endpoint_security_scanner.py +626 -0
  1160. tools/security/mcp_tool_authorizer.py +242 -0
  1161. tools/security/output_verifier.py +427 -0
  1162. tools/security/prompt_injection_detector.py +737 -0
  1163. tools/security/sast_runner.py +946 -0
  1164. tools/security/secret_detector.py +376 -0
  1165. tools/security/threat_modeler.py +678 -0
  1166. tools/security/tool_chain_validator.py +357 -0
  1167. tools/security/vuln_scanner.py +536 -0
  1168. tools/simulation/__init__.py +2 -0
  1169. tools/simulation/ato_simulator.py +517 -0
  1170. tools/simulation/coa_generator.py +1539 -0
  1171. tools/simulation/monte_carlo.py +745 -0
  1172. tools/simulation/scenario_manager.py +1060 -0
  1173. tools/simulation/simulation_engine.py +1091 -0
  1174. tools/simulator/__init__.py +2 -0
  1175. tools/simulator/sim_runner.py +272 -0
  1176. tools/supply_chain/__init__.py +2 -0
  1177. tools/supply_chain/cve_triager.py +690 -0
  1178. tools/supply_chain/dependency_graph.py +630 -0
  1179. tools/supply_chain/isa_manager.py +526 -0
  1180. tools/supply_chain/scrm_assessor.py +531 -0
  1181. tools/supply_chain/slsa_verifier.py +473 -0
  1182. tools/testing/__init__.py +2 -0
  1183. tools/testing/acceptance_validator.py +411 -0
  1184. tools/testing/api_surface_extractor.py +749 -0
  1185. tools/testing/claude_dir_validator.py +831 -0
  1186. tools/testing/data_types.py +199 -0
  1187. tools/testing/e2e_runner.py +715 -0
  1188. tools/testing/fuzz_cli.py +306 -0
  1189. tools/testing/health_check.py +483 -0
  1190. tools/testing/platform_check.py +143 -0
  1191. tools/testing/production_audit.py +1836 -0
  1192. tools/testing/production_remediate.py +803 -0
  1193. tools/testing/screenshot_validator.py +538 -0
  1194. tools/testing/smoke_test.py +283 -0
  1195. tools/testing/test_agent_models.py +117 -0
  1196. tools/testing/test_orchestrator.py +957 -0
  1197. tools/testing/utils.py +229 -0
  1198. tools/writeguard/__init__.py +1 -0
  1199. tools/writeguard/main.py +1 -0
  1200. tools/writing/__init__.py +7 -0
  1201. tools/writing/ai_content_detector.py +316 -0
  1202. tools/writing/analysis_engine.py +454 -0
  1203. tools/writing/batch_analyzer.py +276 -0
  1204. tools/writing/coherence_analyzer.py +221 -0
  1205. tools/writing/govcon_bridge.py +509 -0
  1206. tools/writing/grammar_checker.py +270 -0
  1207. tools/writing/plagiarism_detector.py +106 -0
  1208. tools/writing/readability_scorer.py +201 -0
  1209. tools/writing/rewriter.py +96 -0
  1210. tools/writing/signal_registrar.py +167 -0
  1211. tools/writing/snippet_manager.py +276 -0
  1212. tools/writing/style_enforcer.py +220 -0
  1213. tools/writing/style_guide_manager.py +438 -0
  1214. tools/writing/tone_profiler.py +168 -0
@@ -0,0 +1,957 @@
1
+ # [TEMPLATE: CUI // SP-CTI]
2
+ # SPARKPILOT Test Orchestrator
3
+ # Adapted from ADW adw_test.py — retry logic, resolution, E2E coordination
4
+
5
+ """
6
+ SPARKPILOT Test Orchestrator — runs unit, BDD, E2E, security, and compliance tests
7
+ with automatic retry and failure resolution.
8
+
9
+ Usage:
10
+ python tools/testing/test_orchestrator.py --project-dir <path> [--project-id <id>] [--skip-e2e] [--skip-security]
11
+
12
+ Workflow (adapted from ADW adw_test.py):
13
+ 1. Health check — validate environment
14
+ 2. Unit tests (pytest) with retry + resolution
15
+ 3. BDD tests (behave) with retry + resolution
16
+ 4. E2E tests (Playwright MCP) with retry + resolution
17
+ 5. Security gate evaluation
18
+ 6. Compliance gate evaluation
19
+ 7. Acceptance criteria validation (V&V) — plan criteria + DOM content checks
20
+ 8. Summary report with audit trail
21
+
22
+ Retry logic:
23
+ - Unit/BDD: max 4 attempts (MAX_TEST_RETRY_ATTEMPTS)
24
+ - E2E: max 2 attempts (MAX_E2E_TEST_RETRY_ATTEMPTS)
25
+ - Resolution: attempt to fix failing tests between retries
26
+ """
27
+
28
+ import argparse
29
+ import json
30
+ import os
31
+ import subprocess
32
+ import sys
33
+ from pathlib import Path
34
+ from typing import Tuple, Optional, List
35
+
36
+ # Add project root to path
37
+ PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent
38
+ sys.path.insert(0, str(PROJECT_ROOT))
39
+
40
+ from tools.testing.data_types import (
41
+ TestResult,
42
+ E2ETestResult,
43
+ GateResult,
44
+ GateEvaluation,
45
+ TestRunState,
46
+ )
47
+ from tools.testing.utils import (
48
+ make_run_id,
49
+ setup_logger,
50
+ get_safe_subprocess_env,
51
+ timestamp_iso,
52
+ ensure_run_dir,
53
+ )
54
+
55
+ # Constants (adapted from ADW)
56
+ MAX_TEST_RETRY_ATTEMPTS = 4
57
+ MAX_E2E_TEST_RETRY_ATTEMPTS = 2
58
+
59
+
60
+ # --- Syntax & Quality Checks (adapted from ADW test.md) ---
61
+
62
+ def run_py_compile(project_dir: str, logger) -> TestResult:
63
+ """Run py_compile syntax check on Python source files.
64
+
65
+ Adapted from ADW test.md Step 1: Python Syntax Check.
66
+ Catches syntax errors before running full test suite.
67
+ """
68
+ logger.info("Running Python syntax check (py_compile)...")
69
+ env = get_safe_subprocess_env()
70
+
71
+ # Find the source directory
72
+ src_dir = None
73
+ for candidate in ["src", "app", "lib", project_dir]:
74
+ check_dir = os.path.join(project_dir, candidate) if candidate != project_dir else candidate
75
+ if os.path.isdir(check_dir):
76
+ py_files = [f for f in os.listdir(check_dir) if f.endswith(".py")]
77
+ if py_files:
78
+ src_dir = check_dir
79
+ break
80
+
81
+ if not src_dir:
82
+ return TestResult(
83
+ test_name="python_syntax_check",
84
+ passed=True,
85
+ execution_command="python -m py_compile (no source files found)",
86
+ test_purpose="Validates Python syntax by compiling source files to bytecode",
87
+ test_type="unit",
88
+ )
89
+
90
+ # Compile each .py file
91
+ py_files = []
92
+ for root, dirs, files in os.walk(src_dir):
93
+ for f in files:
94
+ if f.endswith(".py"):
95
+ py_files.append(os.path.join(root, f))
96
+
97
+ errors = []
98
+ for py_file in py_files[:50]: # Limit to prevent timeout
99
+ try:
100
+ cmd = [sys.executable, "-m", "py_compile", py_file]
101
+ proc = subprocess.run(cmd, capture_output=True, text=True, env=env, timeout=10)
102
+ if proc.returncode != 0:
103
+ errors.append(f"{py_file}: {proc.stderr.strip()}")
104
+ except subprocess.TimeoutExpired:
105
+ errors.append(f"{py_file}: compilation timed out")
106
+
107
+ passed = len(errors) == 0
108
+ logger.info(f"py_compile: {len(py_files)} files checked, {len(errors)} errors")
109
+
110
+ return TestResult(
111
+ test_name="python_syntax_check",
112
+ passed=passed,
113
+ execution_command=f"python -m py_compile {src_dir}/*.py",
114
+ test_purpose="Validates Python syntax by compiling source files to bytecode, catching syntax errors like missing colons, invalid indentation, or malformed statements",
115
+ error="; ".join(errors[:5]) if errors else None,
116
+ test_type="unit",
117
+ nist_controls=["SA-11"],
118
+ )
119
+
120
+
121
+ def run_ruff(project_dir: str, logger) -> TestResult:
122
+ """Run Ruff linter for code quality checks.
123
+
124
+ Adapted from ADW test.md Step 2: Backend Code Quality Check.
125
+ Ruff is an extremely fast Python linter written in Rust that replaces
126
+ flake8, isort, and parts of pylint.
127
+ """
128
+ logger.info("Running Ruff code quality check...")
129
+ env = get_safe_subprocess_env()
130
+
131
+ # Try ruff directly, then via python -m
132
+ for cmd_variant in [["ruff", "check", project_dir], [sys.executable, "-m", "ruff", "check", project_dir]]:
133
+ try:
134
+ proc = subprocess.run(
135
+ cmd_variant, capture_output=True, text=True, env=env,
136
+ timeout=60, cwd=project_dir
137
+ )
138
+
139
+ # Ruff returns 0 if no issues, 1 if issues found
140
+ if proc.returncode == 0:
141
+ logger.info("Ruff: no issues found")
142
+ return TestResult(
143
+ test_name="code_quality_ruff",
144
+ passed=True,
145
+ execution_command=" ".join(cmd_variant),
146
+ test_purpose="Validates Python code quality using Ruff — identifies unused imports, style violations, security issues, and potential bugs",
147
+ test_type="unit",
148
+ nist_controls=["SA-11", "SA-15"],
149
+ )
150
+
151
+ # Issues found
152
+ output = proc.stdout.strip() or proc.stderr.strip()
153
+ # Count issues
154
+ issue_lines = [line for line in output.splitlines() if line.strip() and ":" in line and not line.startswith("Found")]
155
+ logger.info(f"Ruff: {len(issue_lines)} issues found")
156
+
157
+ return TestResult(
158
+ test_name="code_quality_ruff",
159
+ passed=False,
160
+ execution_command=" ".join(cmd_variant),
161
+ test_purpose="Validates Python code quality using Ruff — identifies unused imports, style violations, security issues, and potential bugs",
162
+ error=output[:500],
163
+ test_type="unit",
164
+ nist_controls=["SA-11", "SA-15"],
165
+ )
166
+
167
+ except FileNotFoundError:
168
+ continue
169
+ except subprocess.TimeoutExpired:
170
+ return TestResult(
171
+ test_name="code_quality_ruff",
172
+ passed=False,
173
+ execution_command=" ".join(cmd_variant),
174
+ test_purpose="Validates Python code quality using Ruff",
175
+ error="Ruff check timed out after 60 seconds",
176
+ test_type="unit",
177
+ )
178
+
179
+ # Ruff not installed
180
+ logger.warning("Ruff not installed, skipping code quality check (pip install ruff)")
181
+ return TestResult(
182
+ test_name="code_quality_ruff",
183
+ passed=True,
184
+ execution_command="ruff check .",
185
+ test_purpose="Validates Python code quality using Ruff (SKIPPED — ruff not installed)",
186
+ test_type="unit",
187
+ )
188
+
189
+
190
+ def run_bandit(project_dir: str, logger) -> TestResult:
191
+ """Run Bandit SAST security scan.
192
+
193
+ Adapted from ADW test.md security scan step + SPARKPILOT security tools.
194
+ """
195
+ logger.info("Running Bandit SAST scan...")
196
+ env = get_safe_subprocess_env()
197
+
198
+ src_dir = os.path.join(project_dir, "src")
199
+ if not os.path.isdir(src_dir):
200
+ src_dir = project_dir
201
+
202
+ try:
203
+ cmd = [sys.executable, "-m", "bandit", "-r", src_dir, "-f", "json", "--severity-level", "medium"]
204
+ proc = subprocess.run(
205
+ cmd, capture_output=True, text=True, env=env,
206
+ timeout=120, cwd=project_dir
207
+ )
208
+
209
+ # Parse JSON output
210
+ try:
211
+ bandit_data = json.loads(proc.stdout) if proc.stdout.strip() else {}
212
+ results = bandit_data.get("results", [])
213
+ high_issues = [r for r in results if r.get("issue_severity") == "HIGH"]
214
+ medium_issues = [r for r in results if r.get("issue_severity") == "MEDIUM"]
215
+
216
+ passed = len(high_issues) == 0
217
+ error_msg = None
218
+ if not passed:
219
+ error_msg = f"{len(high_issues)} HIGH severity issues: " + "; ".join(
220
+ f"{r.get('test_id')}: {r.get('issue_text', '')} ({r.get('filename', '')}:{r.get('line_number', '')})"
221
+ for r in high_issues[:3]
222
+ )
223
+
224
+ logger.info(f"Bandit: {len(high_issues)} HIGH, {len(medium_issues)} MEDIUM issues")
225
+ return TestResult(
226
+ test_name="security_sast_bandit",
227
+ passed=passed,
228
+ execution_command=" ".join(cmd),
229
+ test_purpose="Static application security testing — identifies common vulnerabilities like SQL injection, XSS, hardcoded secrets, and insecure function calls",
230
+ error=error_msg,
231
+ test_type="security",
232
+ nist_controls=["SA-11", "RA-5"],
233
+ )
234
+ except json.JSONDecodeError:
235
+ return TestResult(
236
+ test_name="security_sast_bandit",
237
+ passed=proc.returncode == 0,
238
+ execution_command=" ".join(cmd),
239
+ test_purpose="Static application security testing",
240
+ error=proc.stderr[:300] if proc.returncode != 0 else None,
241
+ test_type="security",
242
+ nist_controls=["SA-11", "RA-5"],
243
+ )
244
+
245
+ except FileNotFoundError:
246
+ logger.warning("Bandit not installed, skipping SAST scan (pip install bandit)")
247
+ return TestResult(
248
+ test_name="security_sast_bandit",
249
+ passed=True,
250
+ execution_command="bandit -r src/",
251
+ test_purpose="Static application security testing (SKIPPED — bandit not installed)",
252
+ test_type="security",
253
+ )
254
+ except subprocess.TimeoutExpired:
255
+ return TestResult(
256
+ test_name="security_sast_bandit",
257
+ passed=False,
258
+ execution_command="bandit -r src/",
259
+ test_purpose="Static application security testing",
260
+ error="Bandit scan timed out after 120 seconds",
261
+ test_type="security",
262
+ )
263
+
264
+
265
+ # --- Unit / BDD Test Execution ---
266
+
267
+ def run_pytest(project_dir: str, logger) -> Tuple[List[TestResult], int, int]:
268
+ """Run pytest and parse results into TestResult objects."""
269
+ logger.info("Running pytest...")
270
+ env = get_safe_subprocess_env()
271
+ results = []
272
+
273
+ try:
274
+ # Run pytest with JSON output
275
+ cmd = [
276
+ sys.executable, "-m", "pytest",
277
+ os.path.join(project_dir, "tests"),
278
+ "-v", "--tb=short",
279
+ f"--junitxml={project_dir}/test-results.xml",
280
+ "--no-header",
281
+ ]
282
+
283
+ proc = subprocess.run(
284
+ cmd, capture_output=True, text=True, env=env,
285
+ timeout=300, cwd=project_dir
286
+ )
287
+
288
+ # Parse verbose output for test results
289
+ for line in proc.stdout.splitlines():
290
+ if "PASSED" in line or "FAILED" in line or "ERROR" in line:
291
+ passed = "PASSED" in line
292
+ test_name = line.split("::")[1].split(" ")[0] if "::" in line else line.strip()
293
+ error_msg = None
294
+ if not passed:
295
+ # Extract error from output
296
+ error_msg = line.strip()
297
+
298
+ results.append(TestResult(
299
+ test_name=test_name,
300
+ passed=passed,
301
+ execution_command=" ".join(cmd),
302
+ test_purpose="Unit test",
303
+ error=error_msg,
304
+ test_type="unit",
305
+ nist_controls=["SA-11"],
306
+ ))
307
+
308
+ passed = sum(1 for r in results if r.passed)
309
+ failed = len(results) - passed
310
+
311
+ logger.info(f"pytest: {passed} passed, {failed} failed")
312
+ return results, passed, failed
313
+
314
+ except subprocess.TimeoutExpired:
315
+ logger.error("pytest timed out after 300 seconds")
316
+ return [], 0, 0
317
+ except FileNotFoundError:
318
+ logger.warning("pytest not installed, skipping unit tests")
319
+ return [], 0, 0
320
+ except Exception as e:
321
+ logger.error(f"pytest error: {e}")
322
+ return [], 0, 0
323
+
324
+
325
+ def run_behave(project_dir: str, logger) -> Tuple[List[TestResult], int, int]:
326
+ """Run behave BDD tests and parse results."""
327
+ logger.info("Running behave BDD tests...")
328
+ env = get_safe_subprocess_env()
329
+ results = []
330
+
331
+ features_dir = os.path.join(project_dir, "features")
332
+ if not os.path.isdir(features_dir):
333
+ logger.info("No features/ directory found, skipping BDD tests")
334
+ return [], 0, 0
335
+
336
+ try:
337
+ cmd = [
338
+ sys.executable, "-m", "behave",
339
+ features_dir,
340
+ "--format", "json",
341
+ "--outfile", os.path.join(project_dir, "behave-results.json"),
342
+ "--no-capture",
343
+ ]
344
+
345
+ subprocess.run(
346
+ cmd, capture_output=True, text=True, env=env,
347
+ timeout=300, cwd=project_dir
348
+ )
349
+
350
+ # Parse JSON results if available
351
+ results_file = os.path.join(project_dir, "behave-results.json")
352
+ if os.path.exists(results_file):
353
+ with open(results_file) as f:
354
+ behave_data = json.load(f)
355
+
356
+ for feature in behave_data:
357
+ for scenario in feature.get("elements", []):
358
+ scenario_name = scenario.get("name", "unknown")
359
+ steps = scenario.get("steps", [])
360
+ all_passed = all(
361
+ s.get("result", {}).get("status") == "passed"
362
+ for s in steps if "result" in s
363
+ )
364
+ error = None
365
+ if not all_passed:
366
+ failed_steps = [
367
+ s for s in steps
368
+ if s.get("result", {}).get("status") != "passed"
369
+ ]
370
+ if failed_steps:
371
+ error = failed_steps[0].get("result", {}).get("error_message", "Step failed")
372
+
373
+ results.append(TestResult(
374
+ test_name=scenario_name,
375
+ passed=all_passed,
376
+ execution_command=" ".join(cmd),
377
+ test_purpose=f"BDD: {feature.get('name', 'unknown')}",
378
+ error=error,
379
+ test_type="bdd",
380
+ nist_controls=["SA-11"],
381
+ ))
382
+
383
+ passed = sum(1 for r in results if r.passed)
384
+ failed = len(results) - passed
385
+
386
+ logger.info(f"behave: {passed} passed, {failed} failed")
387
+ return results, passed, failed
388
+
389
+ except subprocess.TimeoutExpired:
390
+ logger.error("behave timed out after 300 seconds")
391
+ return [], 0, 0
392
+ except FileNotFoundError:
393
+ logger.warning("behave not installed, skipping BDD tests")
394
+ return [], 0, 0
395
+ except Exception as e:
396
+ logger.error(f"behave error: {e}")
397
+ return [], 0, 0
398
+
399
+
400
+ # --- Test Retry + Resolution (adapted from ADW pattern) ---
401
+
402
+ def run_tests_with_resolution(
403
+ project_dir: str,
404
+ run_id: str,
405
+ logger,
406
+ max_attempts: int = MAX_TEST_RETRY_ATTEMPTS,
407
+ ) -> Tuple[List[TestResult], int, int]:
408
+ """Run unit + BDD tests with automatic retry logic.
409
+
410
+ Adapted from ADW run_tests_with_resolution:
411
+ - Run tests
412
+ - If failures, attempt resolution
413
+ - Retry up to max_attempts
414
+ - Stop early if no progress
415
+ """
416
+ attempt = 0
417
+ all_results = []
418
+ total_passed = 0
419
+ total_failed = 0
420
+
421
+ while attempt < max_attempts:
422
+ attempt += 1
423
+ logger.info(f"\n=== Test Run Attempt {attempt}/{max_attempts} ===")
424
+
425
+ # Step 1: Syntax check (py_compile) — from ADW test.md pattern
426
+ syntax_result = run_py_compile(project_dir, logger)
427
+
428
+ # Step 2: Code quality (Ruff) — from ADW test.md pattern
429
+ ruff_result = run_ruff(project_dir, logger)
430
+
431
+ # Step 3: Unit tests (pytest)
432
+ unit_results, unit_passed, unit_failed = run_pytest(project_dir, logger)
433
+
434
+ # Step 4: BDD tests (behave)
435
+ bdd_results, bdd_passed, bdd_failed = run_behave(project_dir, logger)
436
+
437
+ # Step 5: SAST security scan (Bandit)
438
+ bandit_result = run_bandit(project_dir, logger)
439
+
440
+ # Combine all results
441
+ quality_results = [syntax_result, ruff_result, bandit_result]
442
+ all_results = quality_results + unit_results + bdd_results
443
+ total_passed = sum(1 for r in all_results if r.passed)
444
+ total_failed = len(all_results) - total_passed
445
+
446
+ if total_failed == 0:
447
+ logger.info("All tests passed!")
448
+ break
449
+
450
+ if attempt == max_attempts:
451
+ logger.info(f"Reached maximum retry attempts ({max_attempts})")
452
+ break
453
+
454
+ # Log failures for potential resolution
455
+ failed_tests = [t for t in all_results if not t.passed]
456
+ logger.info(f"Found {total_failed} failures, logging for resolution...")
457
+
458
+ for ft in failed_tests:
459
+ logger.info(f" FAILED: {ft.test_name} - {ft.error or 'no error message'}")
460
+
461
+ # In SPARKPILOT, resolution would invoke the builder agent to fix code
462
+ # For now, just retry (the fix may come from external intervention)
463
+ logger.info(f"Retrying tests (attempt {attempt + 1}/{max_attempts})...")
464
+
465
+ return all_results, total_passed, total_failed
466
+
467
+
468
+ # --- E2E Test Execution (native Playwright + MCP fallback) ---
469
+
470
+ def _detect_e2e_mode() -> str:
471
+ """Detect best available E2E execution mode.
472
+
473
+ Prefers native Playwright (tests/e2e/*.spec.ts) over MCP (.claude/commands/e2e/*.md).
474
+ """
475
+ from tools.testing.e2e_runner import check_playwright_installed, discover_native_tests
476
+ if check_playwright_installed() and discover_native_tests():
477
+ return "native"
478
+ return "mcp"
479
+
480
+
481
+ def discover_e2e_tests() -> List[str]:
482
+ """Discover E2E test files (native .spec.ts preferred, MCP .md fallback)."""
483
+ from tools.testing.e2e_runner import discover_e2e_tests as _discover
484
+ return _discover(mode="auto")
485
+
486
+
487
+ def run_e2e_tests(
488
+ run_id: str,
489
+ logger,
490
+ attempt: int = 1,
491
+ ) -> List[E2ETestResult]:
492
+ """Run all E2E tests via native Playwright or MCP fallback.
493
+
494
+ Native mode: Invokes `npx playwright test` against tests/e2e/*.spec.ts.
495
+ MCP mode: Runs .claude/commands/e2e/*.md specs via Claude Code + Playwright MCP.
496
+ """
497
+ mode = _detect_e2e_mode()
498
+ logger.info(f"E2E execution mode: {mode}")
499
+
500
+ if mode == "native":
501
+ from tools.testing.e2e_runner import run_playwright_native
502
+ results = run_playwright_native(run_id, logger, project="chromium")
503
+ return results
504
+ else:
505
+ # MCP / validation fallback
506
+ from tools.testing.e2e_runner import discover_mcp_tests, execute_e2e_test
507
+ test_files = discover_mcp_tests()
508
+ logger.info(f"Found {len(test_files)} E2E test specs (MCP mode)")
509
+
510
+ if not test_files:
511
+ logger.info("No E2E test files found")
512
+ return []
513
+
514
+ results = []
515
+ for idx, test_file in enumerate(test_files):
516
+ result = execute_e2e_test(test_file, run_id, logger)
517
+ if result:
518
+ results.append(result)
519
+ if not result.passed:
520
+ logger.info(f"E2E test failed: {result.test_name}, stopping (fail-fast)")
521
+ break
522
+
523
+ return results
524
+
525
+
526
+ def run_e2e_tests_with_resolution(
527
+ run_id: str,
528
+ logger,
529
+ max_attempts: int = MAX_E2E_TEST_RETRY_ATTEMPTS,
530
+ ) -> Tuple[List[E2ETestResult], int, int]:
531
+ """Run E2E tests with retry logic.
532
+
533
+ Uses native Playwright when available, falls back to MCP mode.
534
+ """
535
+ attempt = 0
536
+ results = []
537
+ passed_count = 0
538
+ failed_count = 0
539
+
540
+ while attempt < max_attempts:
541
+ attempt += 1
542
+ logger.info(f"\n=== E2E Test Run Attempt {attempt}/{max_attempts} ===")
543
+
544
+ results = run_e2e_tests(run_id, logger, attempt)
545
+
546
+ if not results:
547
+ break
548
+
549
+ passed_count = sum(1 for r in results if r.passed)
550
+ failed_count = len(results) - passed_count
551
+
552
+ if failed_count == 0:
553
+ logger.info("All E2E tests passed!")
554
+ break
555
+
556
+ if attempt == max_attempts:
557
+ logger.info(f"Reached maximum E2E retry attempts ({max_attempts})")
558
+ break
559
+
560
+ # Log failures
561
+ failed = [r for r in results if not r.passed]
562
+ for ft in failed:
563
+ logger.info(f" E2E FAILED: {ft.test_name} - {ft.error or 'unknown'}")
564
+
565
+ logger.info(f"Retrying E2E tests (attempt {attempt + 1}/{max_attempts})...")
566
+
567
+ return results, passed_count, failed_count
568
+
569
+
570
+ # --- Security & Compliance Gates ---
571
+
572
+ def evaluate_security_gate(project_dir: str, logger) -> GateEvaluation:
573
+ """Evaluate security gate by running SPARKPILOT security scans."""
574
+ logger.info("Evaluating security gate...")
575
+ gates = []
576
+
577
+ # SAST check
578
+ try:
579
+ from tools.security.sast_runner import run_sast
580
+ sast_result = run_sast(project_dir)
581
+ high_findings = sast_result.get("high_count", 0) if isinstance(sast_result, dict) else 0
582
+ gates.append(GateResult(
583
+ gate_name="SAST (Bandit)",
584
+ passed=high_findings == 0,
585
+ severity="blocking",
586
+ details=f"{high_findings} HIGH findings",
587
+ nist_control="SA-11",
588
+ ))
589
+ except (ImportError, Exception) as e:
590
+ gates.append(GateResult(
591
+ gate_name="SAST (Bandit)",
592
+ passed=False,
593
+ severity="warning",
594
+ details=f"SAST unavailable: {e}",
595
+ nist_control="SA-11",
596
+ ))
597
+
598
+ # Secret detection check
599
+ try:
600
+ from tools.security.secret_detector import scan_directory
601
+ secrets = scan_directory(project_dir)
602
+ secret_count = len(secrets) if isinstance(secrets, list) else 0
603
+ gates.append(GateResult(
604
+ gate_name="Secret Detection",
605
+ passed=secret_count == 0,
606
+ severity="blocking",
607
+ details=f"{secret_count} secrets detected",
608
+ nist_control="IA-5",
609
+ ))
610
+ except (ImportError, Exception) as e:
611
+ gates.append(GateResult(
612
+ gate_name="Secret Detection",
613
+ passed=False,
614
+ severity="warning",
615
+ details=f"Secret detection unavailable: {e}",
616
+ nist_control="IA-5",
617
+ ))
618
+
619
+ overall = all(g.passed for g in gates if g.severity == "blocking")
620
+
621
+ return GateEvaluation(
622
+ gate_type="code_review",
623
+ overall_pass=overall,
624
+ gates=gates,
625
+ timestamp=timestamp_iso(),
626
+ evaluated_by="sparkpilot-test-orchestrator",
627
+ )
628
+
629
+
630
+ def evaluate_compliance_gate(project_id: str, project_dir: str, logger) -> GateEvaluation:
631
+ """Evaluate compliance gate (STIG, CUI markings, SBOM)."""
632
+ logger.info("Evaluating compliance gate...")
633
+ gates = []
634
+
635
+ # CUI marking check
636
+ try:
637
+ from tools.compliance.cui_marker import verify_directory
638
+ cui_result = verify_directory(project_dir)
639
+ unmarked = cui_result.get("unmarked_count", 0) if isinstance(cui_result, dict) else 0
640
+ gates.append(GateResult(
641
+ gate_name="CUI Markings",
642
+ passed=unmarked == 0,
643
+ severity="blocking",
644
+ details=f"{unmarked} files missing CUI markings",
645
+ nist_control="SC-16",
646
+ ))
647
+ except (ImportError, Exception) as e:
648
+ gates.append(GateResult(
649
+ gate_name="CUI Markings",
650
+ passed=False,
651
+ severity="warning",
652
+ details=f"CUI checker unavailable: {e}",
653
+ nist_control="SC-16",
654
+ ))
655
+
656
+ overall = all(g.passed for g in gates if g.severity == "blocking")
657
+
658
+ return GateEvaluation(
659
+ gate_type="merge",
660
+ overall_pass=overall,
661
+ gates=gates,
662
+ timestamp=timestamp_iso(),
663
+ project_id=project_id,
664
+ evaluated_by="sparkpilot-test-orchestrator",
665
+ )
666
+
667
+
668
+ # --- Summary Report ---
669
+
670
+ def generate_summary(
671
+ unit_results: List[TestResult],
672
+ bdd_results: List[TestResult],
673
+ e2e_results: List[E2ETestResult],
674
+ security_gate: Optional[GateEvaluation],
675
+ compliance_gate: Optional[GateEvaluation],
676
+ logger,
677
+ ) -> str:
678
+ """Generate comprehensive test summary report.
679
+
680
+ Follows ADW log_test_results pattern for structured reporting.
681
+ """
682
+ unit_passed = sum(1 for r in unit_results if r.passed)
683
+ unit_failed = len(unit_results) - unit_passed
684
+ bdd_passed = sum(1 for r in bdd_results if r.passed)
685
+ bdd_failed = len(bdd_results) - bdd_passed
686
+ e2e_passed = sum(1 for r in e2e_results if r.passed)
687
+ e2e_failed = len(e2e_results) - e2e_passed
688
+
689
+ lines = [
690
+ "CUI // SP-CTI",
691
+ "",
692
+ "## SPARKPILOT Test Run Summary",
693
+ "",
694
+ "### Unit Tests",
695
+ f" Total: {len(unit_results)} | Passed: {unit_passed} | Failed: {unit_failed}",
696
+ "",
697
+ "### BDD Tests",
698
+ f" Total: {len(bdd_results)} | Passed: {bdd_passed} | Failed: {bdd_failed}",
699
+ "",
700
+ "### E2E Tests",
701
+ f" Total: {len(e2e_results)} | Passed: {e2e_passed} | Failed: {e2e_failed}",
702
+ "",
703
+ ]
704
+
705
+ if security_gate:
706
+ sg_status = "PASS" if security_gate.overall_pass else "FAIL"
707
+ lines.append(f"### Security Gate: {sg_status}")
708
+ for g in security_gate.gates:
709
+ g_status = "PASS" if g.passed else "FAIL"
710
+ lines.append(f" [{g_status}] {g.gate_name}: {g.details}")
711
+ lines.append("")
712
+
713
+ if compliance_gate:
714
+ cg_status = "PASS" if compliance_gate.overall_pass else "FAIL"
715
+ lines.append(f"### Compliance Gate: {cg_status}")
716
+ for g in compliance_gate.gates:
717
+ g_status = "PASS" if g.passed else "FAIL"
718
+ lines.append(f" [{g_status}] {g.gate_name}: {g.details}")
719
+ lines.append("")
720
+
721
+ total_failures = unit_failed + bdd_failed + e2e_failed
722
+ overall = "PASSED" if total_failures == 0 else "FAILED"
723
+ lines.append(f"### Overall: {overall}")
724
+ lines.append("")
725
+ lines.append("CUI // SP-CTI")
726
+
727
+ summary = "\n".join(lines)
728
+ logger.info(summary)
729
+ return summary
730
+
731
+
732
+ # --- Main Entry Point ---
733
+
734
+ def main():
735
+ """Main entry point for the test orchestrator."""
736
+ parser = argparse.ArgumentParser(description="SPARKPILOT Test Orchestrator")
737
+ parser.add_argument("--project-dir", required=True, help="Path to project under test")
738
+ parser.add_argument("--project-id", help="SPARKPILOT project UUID")
739
+ parser.add_argument("--skip-e2e", action="store_true", help="Skip E2E browser tests")
740
+ parser.add_argument("--skip-security", action="store_true", help="Skip security gate")
741
+ parser.add_argument("--skip-compliance", action="store_true", help="Skip compliance gate")
742
+ parser.add_argument("--skip-acceptance", action="store_true", help="Skip acceptance V&V gate")
743
+ parser.add_argument("--plan", help="Plan file for acceptance criteria validation (V&V)")
744
+ parser.add_argument("--base-url", help="Base URL for page content checks (e.g., http://localhost:5000)")
745
+ parser.add_argument("--pages", nargs="*", help="Page paths to check for acceptance V&V")
746
+ parser.add_argument("--json", action="store_true", help="Output results as JSON")
747
+ args = parser.parse_args()
748
+
749
+ # Initialize run
750
+ run_id = make_run_id()
751
+ logger = setup_logger(run_id, "test_orchestrator")
752
+ run_dir = ensure_run_dir(run_id)
753
+
754
+ logger.info(f"SPARKPILOT Test Orchestrator starting — Run ID: {run_id}")
755
+ logger.info(f"Project directory: {args.project_dir}")
756
+
757
+ # Initialize state
758
+ state = TestRunState(
759
+ run_id=run_id,
760
+ project_id=args.project_id,
761
+ project_dir=args.project_dir,
762
+ started_at=timestamp_iso(),
763
+ )
764
+
765
+ # Step 1: Health check
766
+ logger.info("\n=== Step 1: Health Check ===")
767
+ from tools.testing.health_check import run_health_check
768
+ health = run_health_check()
769
+ if not health.success:
770
+ logger.warning(f"Health check warnings: {health.errors}")
771
+ # Continue anyway — non-critical issues shouldn't block testing
772
+
773
+ # Step 2: Unit + BDD tests with retry
774
+ logger.info("\n=== Step 2: Unit + BDD Tests ===")
775
+ all_results, total_passed, total_failed = run_tests_with_resolution(
776
+ args.project_dir, run_id, logger
777
+ )
778
+
779
+ unit_results = [r for r in all_results if r.test_type == "unit"]
780
+ bdd_results = [r for r in all_results if r.test_type == "bdd"]
781
+ [r for r in all_results if r.test_type == "security"]
782
+
783
+ state.unit_passed = sum(1 for r in unit_results if r.passed)
784
+ state.unit_failed = len(unit_results) - state.unit_passed
785
+ state.bdd_passed = sum(1 for r in bdd_results if r.passed)
786
+ state.bdd_failed = len(bdd_results) - state.bdd_passed
787
+
788
+ # Step 3: E2E tests (skip if unit tests failed or --skip-e2e)
789
+ e2e_results = []
790
+ if total_failed > 0:
791
+ logger.info("Skipping E2E tests due to unit/BDD test failures")
792
+ elif args.skip_e2e:
793
+ logger.info("Skipping E2E tests (--skip-e2e flag)")
794
+ else:
795
+ logger.info("\n=== Step 3: E2E Tests ===")
796
+ e2e_results, e2e_passed, e2e_failed = run_e2e_tests_with_resolution(
797
+ run_id, logger
798
+ )
799
+ state.e2e_passed = e2e_passed
800
+ state.e2e_failed = e2e_failed
801
+
802
+ # Step 4: Security gate
803
+ security_gate = None
804
+ if not args.skip_security:
805
+ logger.info("\n=== Step 4: Security Gate ===")
806
+ security_gate = evaluate_security_gate(args.project_dir, logger)
807
+ state.security_gate_passed = security_gate.overall_pass
808
+
809
+ # Step 5: Compliance gate
810
+ compliance_gate = None
811
+ if not args.skip_compliance and args.project_id:
812
+ logger.info("\n=== Step 5: Compliance Gate ===")
813
+ compliance_gate = evaluate_compliance_gate(
814
+ args.project_id, args.project_dir, logger
815
+ )
816
+ state.compliance_gate_passed = compliance_gate.overall_pass
817
+
818
+ # Step 6: Agentic tests (conditional — only if agent infrastructure exists)
819
+ agentic_results = []
820
+ project_dir_path = Path(args.project_dir)
821
+ if (project_dir_path / "tools" / "agent" / "cards").exists():
822
+ logger.info("\n=== Step 6: Agentic Tests ===")
823
+ agentic_tests_dir = project_dir_path / "tools" / "builder" / "agentic_test_templates"
824
+ if agentic_tests_dir.exists():
825
+ logger.info(f"Found agentic test templates: {agentic_tests_dir}")
826
+ # Run agentic pytest files
827
+ agentic_py_tests = list(agentic_tests_dir.glob("test_*.py"))
828
+ if agentic_py_tests:
829
+ try:
830
+ cmd = [
831
+ sys.executable, "-m", "pytest",
832
+ str(agentic_tests_dir),
833
+ "-v", "--tb=short", "--no-header",
834
+ ]
835
+ proc = subprocess.run(
836
+ cmd, capture_output=True, text=True,
837
+ env=get_safe_subprocess_env(),
838
+ timeout=120, cwd=args.project_dir,
839
+ )
840
+ for line in proc.stdout.splitlines():
841
+ if "PASSED" in line or "FAILED" in line:
842
+ passed_flag = "PASSED" in line
843
+ t_name = line.split("::")[1].split(" ")[0] if "::" in line else line.strip()
844
+ agentic_results.append(TestResult(
845
+ test_name=f"agentic:{t_name}",
846
+ passed=passed_flag,
847
+ execution_command=" ".join(cmd),
848
+ test_purpose="Agentic infrastructure test",
849
+ error=None if passed_flag else line.strip(),
850
+ test_type="unit",
851
+ nist_controls=["SA-11", "SC-7"],
852
+ ))
853
+ a_passed = sum(1 for r in agentic_results if r.passed)
854
+ a_failed = len(agentic_results) - a_passed
855
+ logger.info(f"Agentic tests: {a_passed} passed, {a_failed} failed")
856
+ except subprocess.TimeoutExpired:
857
+ logger.warning("Agentic tests timed out after 120 seconds")
858
+ except Exception as e:
859
+ logger.warning(f"Agentic tests error: {e}")
860
+
861
+ # Discover agentic BDD feature files
862
+ agentic_features = list(agentic_tests_dir.glob("*.feature"))
863
+ if agentic_features:
864
+ logger.info(f"Found {len(agentic_features)} agentic BDD feature templates")
865
+ agentic_results.append(TestResult(
866
+ test_name="agentic_bdd_templates",
867
+ passed=True,
868
+ execution_command="glob tools/builder/agentic_test_templates/*.feature",
869
+ test_purpose="Agentic BDD test templates discovered",
870
+ test_type="bdd",
871
+ nist_controls=["SA-11"],
872
+ ))
873
+ else:
874
+ logger.info("No agentic test templates directory found, skipping")
875
+ else:
876
+ logger.info("No agent cards directory found, skipping agentic tests")
877
+
878
+ # Step 7: Acceptance Criteria Validation (V&V)
879
+ acceptance_report = None
880
+ if not args.skip_acceptance:
881
+ logger.info("\n=== Step 7: Acceptance Criteria Validation (V&V) ===")
882
+ try:
883
+ from tools.testing.acceptance_validator import validate_acceptance
884
+ state_file_for_vv = run_dir / "state.json"
885
+ # Save interim state so acceptance validator can reference it
886
+ with open(state_file_for_vv, "w") as f:
887
+ json.dump(state.model_dump(), f, indent=2, default=str)
888
+
889
+ acceptance_report = validate_acceptance(
890
+ plan_path=args.plan,
891
+ test_results_path=str(state_file_for_vv) if args.plan else None,
892
+ base_url=args.base_url,
893
+ pages=args.pages,
894
+ )
895
+ if acceptance_report.overall_pass:
896
+ logger.info(
897
+ f"Acceptance V&V: PASS — {acceptance_report.criteria_verified} criteria verified, "
898
+ f"{acceptance_report.pages_checked} pages checked"
899
+ )
900
+ else:
901
+ logger.warning(
902
+ f"Acceptance V&V: FAIL — {acceptance_report.criteria_failed} criteria failed, "
903
+ f"{acceptance_report.pages_with_errors} pages with errors"
904
+ )
905
+ except (ImportError, Exception) as e:
906
+ logger.warning(f"Acceptance validation unavailable: {e}")
907
+ else:
908
+ logger.info("Skipping acceptance validation (--skip-acceptance flag)")
909
+
910
+ # Step 8: Summary
911
+ logger.info("\n=== Step 8: Summary ===")
912
+ state.completed_at = timestamp_iso()
913
+
914
+ # Merge agentic results into unit/bdd buckets for summary
915
+ agentic_unit = [r for r in agentic_results if r.test_type == "unit"]
916
+ agentic_bdd = [r for r in agentic_results if r.test_type == "bdd"]
917
+ all_unit_for_summary = unit_results + agentic_unit
918
+ all_bdd_for_summary = bdd_results + agentic_bdd
919
+
920
+ summary = generate_summary(
921
+ all_unit_for_summary, all_bdd_for_summary, e2e_results,
922
+ security_gate, compliance_gate, logger,
923
+ )
924
+
925
+ # Save state
926
+ state_file = run_dir / "state.json"
927
+ with open(state_file, "w") as f:
928
+ json.dump(state.model_dump(), f, indent=2, default=str)
929
+
930
+ # Save summary
931
+ summary_file = run_dir / "summary.md"
932
+ with open(summary_file, "w") as f:
933
+ f.write(summary)
934
+
935
+ logger.info(f"\nResults saved to: {run_dir}")
936
+
937
+ # Record in audit trail
938
+ try:
939
+ from tools.audit.audit_logger import log_event
940
+ log_event(
941
+ event_type="test.complete",
942
+ actor="test-orchestrator",
943
+ action=f"Test run {run_id}: {state.unit_passed + state.bdd_passed + state.e2e_passed} passed, "
944
+ f"{state.unit_failed + state.bdd_failed + state.e2e_failed} failed",
945
+ project_id=args.project_id,
946
+ )
947
+ except (ImportError, Exception):
948
+ pass # Audit logging is best-effort
949
+
950
+ # Exit code (include agentic test failures)
951
+ agentic_failed = sum(1 for r in agentic_results if not r.passed)
952
+ total_failures = state.unit_failed + state.bdd_failed + state.e2e_failed + agentic_failed
953
+ sys.exit(0 if total_failures == 0 else 1)
954
+
955
+
956
+ if __name__ == "__main__":
957
+ main()