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.
- args/agent_config.yaml +113 -0
- args/audit_regimes/cisa_sbd.json +381 -0
- args/audit_regimes/cmmc_l2.json +906 -0
- args/audit_regimes/dod_cssp.json +393 -0
- args/audit_regimes/dodi_5000_87.json +297 -0
- args/audit_regimes/fedramp_moderate.json +650 -0
- args/audit_regimes/ieee_1012.json +373 -0
- args/audit_regimes/nist_800_171.json +624 -0
- args/audit_regimes/nist_800_53.json +907 -0
- args/cloudforge_blueprints/aws_commercial.yaml +29 -0
- args/cloudforge_blueprints/aws_govcloud_il4.yaml +34 -0
- args/cloudforge_blueprints/aws_govcloud_il5.yaml +38 -0
- args/cloudforge_blueprints/azure_commercial.yaml +28 -0
- args/cloudforge_blueprints/azure_gov_il4.yaml +32 -0
- args/cloudforge_blueprints/azure_gov_il5.yaml +36 -0
- args/cloudforge_blueprints/gcp_commercial.yaml +28 -0
- args/cloudforge_blueprints/oci_commercial.yaml +28 -0
- args/cloudforge_config.yaml +231 -0
- args/cloudforge_runbook_templates/backup_verify.yaml +98 -0
- args/cloudforge_runbook_templates/dr_failover.yaml +107 -0
- args/cloudforge_runbook_templates/health_check.yaml +97 -0
- args/cloudforge_runbook_templates/incident_response.yaml +101 -0
- args/cloudforge_runbook_templates/migration_cutover.yaml +105 -0
- args/cloudforge_runbook_templates/patch_rollout.yaml +92 -0
- args/cloudforge_runbook_templates/zone_provision.yaml +93 -0
- args/code_pattern_config.yaml +151 -0
- args/code_quality_config.yaml +47 -0
- args/compliance_config.yaml +17 -0
- args/control_inheritance.yaml +177 -0
- args/csp_mcp_config.yaml +41 -0
- args/cui_markings.yaml +35 -0
- args/databridge_config.yaml +232 -0
- args/db_config.yaml +116 -0
- args/decision_tables/agent_trust_decision.yaml +143 -0
- args/decision_tables/ato_boundary_impact.yaml +132 -0
- args/decision_tables/deployment_approval.yaml +152 -0
- args/degradation_matrix.yaml +163 -0
- args/devsecops_config.yaml +286 -0
- args/endpoint_security_config.yaml +207 -0
- args/exit_criteria.yaml +102 -0
- args/feature_flags.yaml +235 -0
- args/file_access_tiers.yaml +88 -0
- args/forge_studio/blueprint_config.yaml +27 -0
- args/forge_studio/component_catalog.json +411 -0
- args/forge_studio/workflow_templates.yaml +103 -0
- args/govcon_config.yaml +41 -0
- args/harness_config.yaml +67 -0
- args/innovation_config.yaml +321 -0
- args/knowledge_graph_config.yaml +113 -0
- args/llm_config.yaml +222 -0
- args/marketplace_config.yaml +260 -0
- args/monitoring_config.yaml +127 -0
- args/mosa_config.yaml +190 -0
- args/observability_tracing_config.yaml +170 -0
- args/owasp_agentic_config.yaml +171 -0
- args/pipeline_gates.yaml +197 -0
- args/project_defaults.yaml +235 -0
- args/prompt_chains.yaml +163 -0
- args/rag_config.yaml +167 -0
- args/research_config.yaml +89 -0
- args/resilience_config.yaml +197 -0
- args/ricoas_config.yaml +191 -0
- args/security_gates.yaml +763 -0
- args/storage_config.yaml +63 -0
- args/writeguard_config.yaml +131 -0
- args/zta_config.yaml +247 -0
- context/__init__.py +6 -0
- context/agent/__init__.py +6 -0
- context/agent/response_schemas/__init__.py +6 -0
- context/agent/response_schemas/debate_position.json +46 -0
- context/agent/response_schemas/fitness_scorecard.json +74 -0
- context/agent/response_schemas/review_decision.json +39 -0
- context/agent/response_schemas/task_decomposition.json +82 -0
- context/agent/response_schemas/veto_decision.json +40 -0
- context/agentic/__init__.py +6 -0
- context/agentic/architecture_patterns.md +269 -0
- context/agentic/capability_registry.yaml +223 -0
- context/agentic/csp_integration.md +30 -0
- context/agentic/csp_mcp_registry.yaml +280 -0
- context/agentic/fitness_rubric.md +56 -0
- context/agentic/governance_baseline.md +205 -0
- context/ci/__init__.py +6 -0
- context/ci/worktree_templates.json +44 -0
- context/cloud/__init__.py +6 -0
- context/cloud/csp_service_registry.json +739 -0
- context/compliance/__init__.py +6 -0
- context/compliance/ai_rmf_crosswalk.yaml +226 -0
- context/compliance/atlas_mitigations.json +293 -0
- context/compliance/atlas_techniques.json +833 -0
- context/compliance/cisa_sbd_requirements.json +477 -0
- context/compliance/cjis_security_policy.json +522 -0
- context/compliance/cmmc_practices.json +2494 -0
- context/compliance/cmmc_report_template.md +142 -0
- context/compliance/cnssi_1253_overlay.json +109 -0
- context/compliance/control_crosswalk.json +1914 -0
- context/compliance/control_families/__init__.py +6 -0
- context/compliance/csp_certifications.json +251 -0
- context/compliance/cssp_report_template.md +193 -0
- context/compliance/cui_templates/__init__.py +6 -0
- context/compliance/cui_templates/banner_block.txt +4 -0
- context/compliance/cui_templates/code_header.txt +8 -0
- context/compliance/cui_templates/document_template.md +35 -0
- context/compliance/data_type_framework_map.json +321 -0
- context/compliance/data_type_registry.json +147 -0
- context/compliance/dod_cssp_8530.json +463 -0
- context/compliance/eu_ai_act_annex_iii.json +108 -0
- context/compliance/export_templates/__init__.py +6 -0
- context/compliance/export_templates/emass_controls.csv.j2 +4 -0
- context/compliance/export_templates/evidence_package.md.j2 +39 -0
- context/compliance/export_templates/executive_summary.md.j2 +55 -0
- context/compliance/export_templates/poam_tracking.csv.j2 +4 -0
- context/compliance/fedramp_20x_ksi_schemas.json +133 -0
- context/compliance/fedramp_high_baseline.json +4370 -0
- context/compliance/fedramp_moderate_baseline.json +2183 -0
- context/compliance/fedramp_report_template.md +181 -0
- context/compliance/fips_200_areas.json +362 -0
- context/compliance/gao_ai_accountability.json +262 -0
- context/compliance/hipaa_security_rule.json +720 -0
- context/compliance/hitrust_csf_v11.json +930 -0
- context/compliance/impact_level_profiles.json +251 -0
- context/compliance/incident_response_template.md +1110 -0
- context/compliance/iso27001_2022_controls.json +750 -0
- context/compliance/iso27001_nist_bridge.json +382 -0
- context/compliance/iso42001_controls.json +254 -0
- context/compliance/ivv_checklist_template.md +80 -0
- context/compliance/ivv_report_template.md +116 -0
- context/compliance/ivv_requirements.json +372 -0
- context/compliance/mosa_crosswalk.json +327 -0
- context/compliance/mosa_framework.json +250 -0
- context/compliance/narrative_templates/AC.md.j2 +101 -0
- context/compliance/narrative_templates/AU.md.j2 +106 -0
- context/compliance/narrative_templates/IA.md.j2 +104 -0
- context/compliance/narrative_templates/SC.md.j2 +102 -0
- context/compliance/narrative_templates/SI.md.j2 +111 -0
- context/compliance/narrative_templates/__init__.py +6 -0
- context/compliance/narrative_templates/default.md.j2 +50 -0
- context/compliance/narrative_templates/executive_summary.j2 +27 -0
- context/compliance/narrative_templates/poam_milestone.j2 +19 -0
- context/compliance/narrative_templates/ssp_section.j2 +11 -0
- context/compliance/nist_800_171_controls.json +1552 -0
- context/compliance/nist_800_207_crosswalk.json +399 -0
- context/compliance/nist_800_207_zta.json +258 -0
- context/compliance/nist_800_53.json +324 -0
- context/compliance/nist_ai_600_1_genai.json +326 -0
- context/compliance/nist_ai_rmf.json +206 -0
- context/compliance/nist_sp_800_60_types.json +1667 -0
- context/compliance/omb_m25_21_high_impact_ai.json +248 -0
- context/compliance/omb_m26_04_unbiased_ai.json +262 -0
- context/compliance/owasp_agentic_asi.json +133 -0
- context/compliance/owasp_agentic_threats.json +285 -0
- context/compliance/owasp_llm_top10.json +274 -0
- context/compliance/pci_dss_v4.json +510 -0
- context/compliance/poam_template.md +117 -0
- context/compliance/safeai_controls.json +512 -0
- context/compliance/sbd_report_template.md +77 -0
- context/compliance/siem_config_templates/__init__.py +6 -0
- context/compliance/siem_config_templates/filebeat.yml +213 -0
- context/compliance/siem_config_templates/log_sources.json +208 -0
- context/compliance/soc2_trust_criteria.json +661 -0
- context/compliance/ssp_template.md +432 -0
- context/compliance/stig_templates/__init__.py +6 -0
- context/compliance/stig_templates/webapp_stig.json +139 -0
- context/compliance/xai_requirements.json +108 -0
- context/dashboard/__init__.py +6 -0
- context/dashboard/nlq_examples.json +50 -0
- context/dashboard/schema_descriptions.json +23 -0
- context/icdev_methodology.md +100 -0
- context/integration/__init__.py +6 -0
- context/integration/approval_workflows.json +32 -0
- context/integration/gitlab_field_mappings.json +33 -0
- context/integration/jira_field_mappings.json +32 -0
- context/integration/reqif_export_schema.json +23 -0
- context/integration/servicenow_field_mappings.json +22 -0
- context/languages/__init__.py +6 -0
- context/languages/framework_patterns.json +205 -0
- context/languages/language_registry.json +279 -0
- context/llm/__init__.py +6 -0
- context/llm/example_provider.py +89 -0
- context/marketplace/assets/writeguard-core.yaml +100 -0
- context/marketplace/assets/writeguard-govcon.yaml +45 -0
- context/marketplace/assets/writeguard-style-guides.yaml +44 -0
- context/mbse/__init__.py +6 -0
- context/mbse/des_report_template.md +162 -0
- context/mbse/des_requirements.json +411 -0
- context/mbse/digital_thread_patterns.json +403 -0
- context/mbse/reqif_schema.json +280 -0
- context/mbse/sysml_element_types.json +432 -0
- context/oscal/NIST_SP-800-53_rev5_catalog.json +254987 -0
- context/oscal/README.md +43 -0
- context/patterns/__init__.py +6 -0
- context/profiles/__init__.py +6 -0
- context/profiles/dod_baseline_v1.yaml +145 -0
- context/profiles/fedramp_baseline_v1.yaml +143 -0
- context/profiles/financial_baseline_v1.yaml +142 -0
- context/profiles/healthcare_baseline_v1.yaml +135 -0
- context/profiles/law_enforcement_v1.yaml +129 -0
- context/profiles/startup_v1.yaml +134 -0
- context/rag/source_mappings.json +42 -0
- context/requirements/__init__.py +6 -0
- context/requirements/ambiguity_patterns.json +97 -0
- context/requirements/boundary_impact_rules.json +123 -0
- context/requirements/default_constitutions.json +67 -0
- context/requirements/document_extraction_rules.json +58 -0
- context/requirements/gap_patterns.json +108 -0
- context/requirements/readiness_rubric.json +78 -0
- context/requirements/red_alternative_patterns.json +210 -0
- context/requirements/safe_templates.json +72 -0
- context/requirements/spec_quality_checklist.json +122 -0
- context/research/regulatory_registry.json +114 -0
- context/research/verticals/cybersecurity.json +127 -0
- context/research/verticals/defense.json +104 -0
- context/research/verticals/fintech.json +125 -0
- context/research/verticals/healthcare.json +118 -0
- context/research/verticals/logistics.json +117 -0
- context/research/verticals/trading.json +145 -0
- context/simulation/__init__.py +6 -0
- context/simulation/architecture_patterns.json +36 -0
- context/simulation/coa_templates.json +38 -0
- context/simulation/cost_models.json +23 -0
- context/simulation/risk_categories.json +46 -0
- context/supply_chain/__init__.py +6 -0
- context/supply_chain/isa_templates.json +129 -0
- context/supply_chain/nist_800_161_controls.json +247 -0
- context/supply_chain/scrm_risk_matrix.json +147 -0
- context/templates/__init__.py +6 -0
- context/templates/ansible/__init__.py +6 -0
- context/templates/ansible/playbooks/__init__.py +6 -0
- context/templates/ansible/roles/__init__.py +6 -0
- context/templates/gitlab_ci/__init__.py +6 -0
- context/templates/grafana/__init__.py +6 -0
- context/templates/kubernetes/__init__.py +6 -0
- context/templates/project/__init__.py +6 -0
- context/templates/project/api/__init__.py +6 -0
- context/templates/project/cli/__init__.py +6 -0
- context/templates/project/data_pipeline/__init__.py +6 -0
- context/templates/project/iac/__init__.py +6 -0
- context/templates/project/javascript_frontend/__init__.py +6 -0
- context/templates/project/javascript_frontend/src/__init__.py +6 -0
- context/templates/project/javascript_frontend/tests/__init__.py +6 -0
- context/templates/project/microservice/__init__.py +6 -0
- context/templates/project/python_backend/__init__.py +6 -0
- context/templates/project/python_backend/src/__init__.py +6 -0
- context/templates/project/python_backend/tests/__init__.py +6 -0
- context/templates/project/python_backend/tests/features/__init__.py +6 -0
- context/templates/project/python_backend/tests/steps/__init__.py +6 -0
- context/templates/terraform/__init__.py +6 -0
- context/templates/terraform/govcloud_base/__init__.py +6 -0
- context/templates/terraform/modules/__init__.py +6 -0
- context/tone/__init__.py +6 -0
- context/writing/grammar_rules/common_errors.json +306 -0
- context/writing/grammar_rules/govcon_vocabulary.json +113 -0
- context/writing/style_guides/academic.yaml +43 -0
- context/writing/style_guides/business.yaml +42 -0
- context/writing/style_guides/government.yaml +59 -0
- context/writing/style_guides/proposal.yaml +58 -0
- context/writing/style_guides/technical.yaml +43 -0
- docs/adr/README.md +66 -0
- docs/adr/connector-forge-decisions.md +318 -0
- docs/adr/core-decisions.md +289 -0
- docs/adr/db-decisions.md +94 -0
- docs/adr/harness-decisions.md +122 -0
- docs/adr/innovation-decisions.md +262 -0
- docs/adr/marketplace-decisions.md +109 -0
- docs/adr/sbd-decisions.md +109 -0
- docs/adr/scale-engine-decisions.md +108 -0
- docs/adr/writeguard-decisions.md +136 -0
- docs/architecture/bounded-contexts.md +1032 -0
- docs/features/phase-65-writeguard.md +139 -0
- docs/features/phase-66-marketplace-commerce.md +79 -0
- docs/features/phase-67-knowledge-ingestion-rag-autodraft.md +97 -0
- docs/features/phase-68-enhanced-autodraft-pipeline.md +109 -0
- docs/features/phase-69-proposalai-marketplace-module.md +131 -0
- docs/features/phase-70-databridge.md +214 -0
- docs/features/phase-71-databridge-messaging.md +102 -0
- docs/implementation-plan-architecture-evolution.md +614 -0
- docs/marketplace/CONTRIBUTING.md +124 -0
- docs/marketplace/module_manifest_schema.yaml +83 -0
- docs/research/ai-architecture-patterns-2024-2026.md +1236 -0
- docs/research/app-builder-platform-analysis.md +582 -0
- docs/research/architecture-patterns-c4-ddd-agentic.md +871 -0
- docs/research/flowable-boat-competitive-analysis.md +426 -0
- docs/research/modern-dev-practices-2024-2026.md +1615 -0
- docs/research/secure-by-design-cloudyrion-adaptation.md +270 -0
- goals/agent_management.md +144 -0
- goals/ai_accountability.md +90 -0
- goals/ai_narratives.md +79 -0
- goals/ai_transparency.md +76 -0
- goals/ato_simulator.md +78 -0
- goals/audit_engine.md +177 -0
- goals/bite_sized_plans.md +225 -0
- goals/boundary_supply_chain.md +206 -0
- goals/brainstorming_gate.md +186 -0
- goals/build_app.md +604 -0
- goals/cato_live_evidence.md +77 -0
- goals/cloudforge.md +106 -0
- goals/code_intelligence.md +197 -0
- goals/compliance_workflow.md +858 -0
- goals/connector_forge.md +133 -0
- goals/databridge.md +128 -0
- goals/deploy_workflow.md +390 -0
- goals/developer_scorecard.md +78 -0
- goals/devsecops_workflow.md +408 -0
- goals/firmware_sbom.md +79 -0
- goals/forge_hub.md +78 -0
- goals/golden_path.md +77 -0
- goals/harness_engineering.md +91 -0
- goals/integration_testing.md +189 -0
- goals/knowledge_graph.md +128 -0
- goals/maintenance_audit.md +196 -0
- goals/manifest.md +50 -0
- goals/monitoring.md +126 -0
- goals/mosa_workflow.md +463 -0
- goals/multi_agent_orchestration.md +68 -0
- goals/observability_traceability_xai.md +154 -0
- goals/owasp_agentic_security.md +395 -0
- goals/pr_intelligence.md +78 -0
- goals/requirements_intake.md +213 -0
- goals/secure_by_design.md +135 -0
- goals/security_scan.md +381 -0
- goals/self_healing.md +120 -0
- goals/simulation_engine.md +111 -0
- goals/subagent_review.md +205 -0
- goals/systematic_debugging.md +257 -0
- goals/tdd_workflow.md +403 -0
- goals/template_exchange.md +77 -0
- goals/thread_heatmap.md +77 -0
- goals/threat_modeler.md +77 -0
- goals/verification_iron_law.md +192 -0
- goals/vsm_dashboard.md +76 -0
- goals/writeguard.md +89 -0
- goals/zero_trust_architecture.md +403 -0
- hardprompts/__init__.py +6 -0
- hardprompts/agent/__init__.py +6 -0
- hardprompts/agent/agentic_architect.md +100 -0
- hardprompts/agent/debate_prompt.md +32 -0
- hardprompts/agent/fitness_evaluation.md +48 -0
- hardprompts/agent/governance_review.md +214 -0
- hardprompts/agent/reviewer_prompt.md +34 -0
- hardprompts/agent/skill_design.md +172 -0
- hardprompts/agent/task_decomposition.md +275 -0
- hardprompts/agent/veto_check_prompt.md +33 -0
- hardprompts/architect/__init__.py +6 -0
- hardprompts/architect/api_design.md +283 -0
- hardprompts/architect/data_model.md +277 -0
- hardprompts/architect/system_design.md +180 -0
- hardprompts/builder/__init__.py +6 -0
- hardprompts/builder/code_generation.md +59 -0
- hardprompts/builder/refactor.md +58 -0
- hardprompts/builder/scaffold_project.md +69 -0
- hardprompts/builder/test_generation.md +87 -0
- hardprompts/ci/__init__.py +6 -0
- hardprompts/ci/worktree_setup.md +35 -0
- hardprompts/compliance/__init__.py +6 -0
- hardprompts/compliance/cmmc_assessment.md +63 -0
- hardprompts/compliance/cssp_assessment.md +75 -0
- hardprompts/compliance/cui_marking.md +86 -0
- hardprompts/compliance/fedramp_assessment.md +55 -0
- hardprompts/compliance/ivv_assessment.md +96 -0
- hardprompts/compliance/poam_generation.md +57 -0
- hardprompts/compliance/sbd_assessment.md +101 -0
- hardprompts/compliance/security_categorization.md +74 -0
- hardprompts/compliance/ssp_generation.md +56 -0
- hardprompts/compliance/stig_evaluation.md +63 -0
- hardprompts/dashboard/__init__.py +6 -0
- hardprompts/dashboard/nlq_system_prompt.md +26 -0
- hardprompts/infra/__init__.py +6 -0
- hardprompts/infra/k8s_manifests.md +118 -0
- hardprompts/infra/pipeline_generation.md +160 -0
- hardprompts/infra/terraform_generation.md +92 -0
- hardprompts/integration/__init__.py +6 -0
- hardprompts/integration/approval_review.md +17 -0
- hardprompts/integration/jira_mapping.md +25 -0
- hardprompts/integration/servicenow_mapping.md +14 -0
- hardprompts/knowledge/__init__.py +6 -0
- hardprompts/knowledge/pattern_detection.md +73 -0
- hardprompts/knowledge/recommendation_engine.md +90 -0
- hardprompts/knowledge/root_cause_analysis.md +91 -0
- hardprompts/maintenance/__init__.py +6 -0
- hardprompts/maintenance/maintenance_assessment.md +82 -0
- hardprompts/mbse/__init__.py +6 -0
- hardprompts/mbse/digital_thread.md +67 -0
- hardprompts/mbse/model_import.md +62 -0
- hardprompts/mbse/model_to_code.md +65 -0
- hardprompts/modernization/__init__.py +6 -0
- hardprompts/modernization/legacy_analysis.md +93 -0
- hardprompts/modernization/migration_planning.md +150 -0
- hardprompts/modernization/seven_r_assessment.md +107 -0
- hardprompts/proposal_draft.md +53 -0
- hardprompts/rag_citation.md +12 -0
- hardprompts/rag_rerank.md +31 -0
- hardprompts/requirements/__init__.py +6 -0
- hardprompts/requirements/bdd_generation.md +35 -0
- hardprompts/requirements/clarification_prioritization.md +29 -0
- hardprompts/requirements/decomposition.md +60 -0
- hardprompts/requirements/document_extraction.md +45 -0
- hardprompts/requirements/gap_detection.md +70 -0
- hardprompts/requirements/intake_conversation.md +101 -0
- hardprompts/requirements/readiness_assessment.md +39 -0
- hardprompts/requirements/spec_quality.md +33 -0
- hardprompts/requirements/traceability_analysis.md +23 -0
- hardprompts/security/__init__.py +6 -0
- hardprompts/security/endpoint_security.md +78 -0
- hardprompts/security/threat_model.md +70 -0
- hardprompts/security/vulnerability_assessment.md +81 -0
- hardprompts/simulation/__init__.py +6 -0
- hardprompts/simulation/architecture_impact.md +27 -0
- hardprompts/simulation/coa_alternative.md +27 -0
- hardprompts/simulation/coa_generation.md +25 -0
- hardprompts/simulation/compliance_impact.md +28 -0
- hardprompts/simulation/cost_estimation.md +33 -0
- hardprompts/simulation/risk_assessment.md +28 -0
- hardprompts/translation/code_translation.md +68 -0
- hardprompts/translation/dependency_suggestion.md +44 -0
- hardprompts/translation/test_translation.md +64 -0
- hardprompts/translation/translation_repair.md +59 -0
- icdev-0.0.3.dist-info/METADATA +909 -0
- icdev-0.0.3.dist-info/RECORD +1214 -0
- icdev-0.0.3.dist-info/WHEEL +5 -0
- icdev-0.0.3.dist-info/entry_points.txt +9 -0
- icdev-0.0.3.dist-info/licenses/LICENSE +201 -0
- icdev-0.0.3.dist-info/licenses/NOTICE +11 -0
- icdev-0.0.3.dist-info/top_level.txt +7 -0
- memory/MEMORY.md +52 -0
- memory/logs/2026-02-14.md +17 -0
- memory/logs/2026-03-03.md +2 -0
- memory/logs/__init__.py +1 -0
- tools/a2a/icdev_callback_client.py +210 -0
- tools/agent/cards/architect_card.json +29 -0
- tools/agent/cards/builder_card.json +34 -0
- tools/agent/cards/compliance_card.json +29 -0
- tools/agent/cards/connector_forge_card.json +49 -0
- tools/agent/cards/devsecops_zta_card.json +24 -0
- tools/agent/cards/knowledge_card.json +29 -0
- tools/agent/cards/monitor_card.json +29 -0
- tools/agent/cards/orchestrator_card.json +29 -0
- tools/agent/cards/requirements_analyst_card.json +24 -0
- tools/agent/cards/security_card.json +29 -0
- tools/agent/cards/simulation_card.json +24 -0
- tools/agent/cards/supply_chain_card.json +24 -0
- tools/analysis/__init__.py +1 -0
- tools/analysis/code_analyzer.py +770 -0
- tools/analysis/runtime_feedback.py +379 -0
- tools/analytics/__init__.py +2 -0
- tools/analytics/scorecard.py +538 -0
- tools/analytics/vsm_engine.py +612 -0
- tools/architecture/__init__.py +2 -0
- tools/architecture/adr_extractor.py +393 -0
- tools/audit/__init__.py +1 -0
- tools/audit/audit_logger.py +199 -0
- tools/audit/audit_query.py +153 -0
- tools/audit/decision_recorder.py +73 -0
- tools/audit_engine/__init__.py +12 -0
- tools/audit_engine/ai_advisor.py +906 -0
- tools/audit_engine/cli.py +286 -0
- tools/audit_engine/comparator.py +305 -0
- tools/audit_engine/eject_scaffolder.py +399 -0
- tools/audit_engine/engine.py +614 -0
- tools/audit_engine/git_fetcher.py +341 -0
- tools/audit_engine/regime_loader.py +200 -0
- tools/audit_engine/regime_updater.py +325 -0
- tools/audit_engine/report_card.py +289 -0
- tools/audit_engine/scanner.py +684 -0
- tools/audit_engine/self_heal.py +1042 -0
- tools/ci/__init__.py +2 -0
- tools/ci/connectors/__init__.py +2 -0
- tools/ci/connectors/base_connector.py +80 -0
- tools/ci/connectors/connector_registry.py +188 -0
- tools/ci/connectors/mattermost_connector.py +159 -0
- tools/ci/connectors/slack_connector.py +197 -0
- tools/ci/core/__init__.py +2 -0
- tools/ci/core/air_gap_detector.py +115 -0
- tools/ci/core/comment_handler.py +192 -0
- tools/ci/core/conversation_manager.py +480 -0
- tools/ci/core/event_envelope.py +500 -0
- tools/ci/core/event_router.py +444 -0
- tools/ci/core/failure_parser.py +397 -0
- tools/ci/core/recovery_engine.py +527 -0
- tools/ci/gate_enforcer.py +361 -0
- tools/ci/modules/__init__.py +2 -0
- tools/ci/modules/agent.py +271 -0
- tools/ci/modules/git_ops.py +175 -0
- tools/ci/modules/state.py +117 -0
- tools/ci/modules/vcs.py +303 -0
- tools/ci/modules/workflow_ops.py +295 -0
- tools/ci/modules/worktree.py +337 -0
- tools/ci/pipeline_config_generator.py +558 -0
- tools/ci/pr_intelligence.py +485 -0
- tools/ci/triggers/__init__.py +2 -0
- tools/ci/triggers/gitlab_task_monitor.py +327 -0
- tools/ci/triggers/poll_trigger.py +237 -0
- tools/ci/triggers/webhook_server.py +356 -0
- tools/ci/workflows/__init__.py +2 -0
- tools/ci/workflows/icdev_build.py +140 -0
- tools/ci/workflows/icdev_comply.py +284 -0
- tools/ci/workflows/icdev_document.py +152 -0
- tools/ci/workflows/icdev_e2e.py +188 -0
- tools/ci/workflows/icdev_patch.py +186 -0
- tools/ci/workflows/icdev_plan.py +202 -0
- tools/ci/workflows/icdev_plan_build.py +41 -0
- tools/ci/workflows/icdev_plan_build_test.py +46 -0
- tools/ci/workflows/icdev_plan_build_test_review.py +47 -0
- tools/ci/workflows/icdev_review.py +126 -0
- tools/ci/workflows/icdev_sdlc.py +261 -0
- tools/ci/workflows/icdev_test.py +240 -0
- tools/cli/__init__.py +1 -0
- tools/cli/output_formatter.py +756 -0
- tools/cloudforge/__init__.py +12 -0
- tools/cloudforge/airgap/__init__.py +2 -0
- tools/cloudforge/airgap/il_classifier.py +70 -0
- tools/cloudforge/airgap/offline_validator.py +42 -0
- tools/cloudforge/airgap/shift_emulator.py +155 -0
- tools/cloudforge/airgap/sneakernet.py +91 -0
- tools/cloudforge/cd_hub/__init__.py +2 -0
- tools/cloudforge/cd_hub/canary_deployer.py +88 -0
- tools/cloudforge/cd_hub/gitops_renderer.py +123 -0
- tools/cloudforge/cd_hub/hub_controller.py +143 -0
- tools/cloudforge/cd_hub/pipeline_bridge.py +30 -0
- tools/cloudforge/cd_hub/rollback_engine.py +29 -0
- tools/cloudforge/cd_hub/spoke_agent.py +51 -0
- tools/cloudforge/compliance/__init__.py +2 -0
- tools/cloudforge/compliance/ato_accelerator.py +272 -0
- tools/cloudforge/compliance/control_inheritor.py +127 -0
- tools/cloudforge/compliance/evidence_generator.py +129 -0
- tools/cloudforge/compliance/poam_bridge.py +41 -0
- tools/cloudforge/compliance/ssp_bridge.py +52 -0
- tools/cloudforge/compliance/stig_bridge.py +41 -0
- tools/cloudforge/container_forge/__init__.py +2 -0
- tools/cloudforge/container_forge/bigbang_renderer.py +85 -0
- tools/cloudforge/container_forge/hardener.py +169 -0
- tools/cloudforge/container_forge/image_scanner_bridge.py +33 -0
- tools/cloudforge/container_forge/runtime_policy.py +87 -0
- tools/cloudforge/container_forge/sbom_bridge.py +42 -0
- tools/cloudforge/finops/__init__.py +2 -0
- tools/cloudforge/finops/anomaly_detector.py +78 -0
- tools/cloudforge/finops/budget_tracker.py +96 -0
- tools/cloudforge/finops/chargeback.py +69 -0
- tools/cloudforge/finops/cost_collector.py +141 -0
- tools/cloudforge/finops/optimizer.py +55 -0
- tools/cloudforge/hybrid/__init__.py +2 -0
- tools/cloudforge/hybrid/connection_manager.py +141 -0
- tools/cloudforge/hybrid/dns_federator.py +56 -0
- tools/cloudforge/hybrid/health_monitor.py +108 -0
- tools/cloudforge/hybrid/identity_federator.py +53 -0
- tools/cloudforge/hybrid/network_bridge.py +68 -0
- tools/cloudforge/hybrid/topology_manager.py +147 -0
- tools/cloudforge/hybrid/workload_abstractor.py +92 -0
- tools/cloudforge/iac/__init__.py +2 -0
- tools/cloudforge/iac/drift_detector.py +154 -0
- tools/cloudforge/iac/module_library.py +265 -0
- tools/cloudforge/iac/opentofu_adapter.py +89 -0
- tools/cloudforge/iac/pulumi_renderer.py +292 -0
- tools/cloudforge/iac/state_backend.py +146 -0
- tools/cloudforge/iac/terraform_renderer.py +626 -0
- tools/cloudforge/landing_zone/__init__.py +2 -0
- tools/cloudforge/landing_zone/blueprint_loader.py +98 -0
- tools/cloudforge/landing_zone/blueprint_validator.py +113 -0
- tools/cloudforge/landing_zone/zone_provisioner.py +306 -0
- tools/cloudforge/landing_zone/zone_state.py +143 -0
- tools/cloudforge/mbse_thread/__init__.py +2 -0
- tools/cloudforge/mbse_thread/ato_thread_weaver.py +111 -0
- tools/cloudforge/mbse_thread/control_tracer.py +68 -0
- tools/cloudforge/mbse_thread/system_boundary.py +83 -0
- tools/cloudforge/metastore/__init__.py +2 -0
- tools/cloudforge/metastore/dependency_graph.py +202 -0
- tools/cloudforge/metastore/discovery.py +192 -0
- tools/cloudforge/metastore/registry.py +185 -0
- tools/cloudforge/metastore/rto_tracker.py +92 -0
- tools/cloudforge/metastore/runbook_linker.py +82 -0
- tools/cloudforge/migration/__init__.py +2 -0
- tools/cloudforge/migration/assessor.py +187 -0
- tools/cloudforge/migration/cutover_orchestrator.py +117 -0
- tools/cloudforge/migration/databridge_bridge.py +92 -0
- tools/cloudforge/migration/planner.py +98 -0
- tools/cloudforge/migration/risk_scorer.py +97 -0
- tools/cloudforge/migration/validation_runner.py +45 -0
- tools/cloudforge/migration/workload_inventory.py +107 -0
- tools/cloudforge/provider.py +319 -0
- tools/cloudforge/providers/__init__.py +2 -0
- tools/cloudforge/providers/aws_commercial.py +92 -0
- tools/cloudforge/providers/aws_govcloud.py +229 -0
- tools/cloudforge/providers/aws_secret.py +83 -0
- tools/cloudforge/providers/azure_commercial.py +80 -0
- tools/cloudforge/providers/azure_gov.py +91 -0
- tools/cloudforge/providers/azure_secret.py +71 -0
- tools/cloudforge/providers/gcp.py +102 -0
- tools/cloudforge/providers/oci.py +102 -0
- tools/cloudforge/registry.py +140 -0
- tools/cloudforge/runbooks/__init__.py +2 -0
- tools/cloudforge/runbooks/ai_generator.py +119 -0
- tools/cloudforge/runbooks/dag_validator.py +219 -0
- tools/cloudforge/runbooks/engine.py +470 -0
- tools/cloudforge/runbooks/models.py +99 -0
- tools/cloudforge/runbooks/snippet_library.py +158 -0
- tools/cloudforge/runbooks/template_loader.py +122 -0
- tools/cloudforge/runbooks/visualization.py +108 -0
- tools/cloudforge/siem/__init__.py +2 -0
- tools/cloudforge/siem/alert_rules.py +86 -0
- tools/cloudforge/siem/correlation_engine.py +61 -0
- tools/cloudforge/siem/log_aggregator.py +113 -0
- tools/cloudforge/siem/siem_dashboard_data.py +28 -0
- tools/cloudforge/supply_chain/__init__.py +2 -0
- tools/cloudforge/supply_chain/bridge.py +33 -0
- tools/cloudforge/supply_chain/iac_dependency_scanner.py +36 -0
- tools/cloudforge/supply_chain/provider_trust_scorer.py +54 -0
- tools/compat/__init__.py +21 -0
- tools/compat/cli_harmonizer.py +251 -0
- tools/compat/datetime_utils.py +18 -0
- tools/compat/db_utils.py +190 -0
- tools/compat/platform_utils.py +123 -0
- tools/compliance/__init__.py +1 -0
- tools/compliance/accountability_manager.py +391 -0
- tools/compliance/ai_accountability_audit.py +287 -0
- tools/compliance/ai_impact_assessor.py +267 -0
- tools/compliance/ai_incident_response.py +295 -0
- tools/compliance/ai_inventory_manager.py +233 -0
- tools/compliance/ai_reassessment_scheduler.py +250 -0
- tools/compliance/ai_transparency_audit.py +247 -0
- tools/compliance/atlas_assessor.py +276 -0
- tools/compliance/atlas_report_generator.py +1199 -0
- tools/compliance/base_assessor.py +591 -0
- tools/compliance/cato_live_engine.py +607 -0
- tools/compliance/cato_monitor.py +1371 -0
- tools/compliance/cato_scheduler.py +698 -0
- tools/compliance/cjis_assessor.py +76 -0
- tools/compliance/classification_manager.py +1340 -0
- tools/compliance/cmmc_assessor.py +1478 -0
- tools/compliance/cmmc_report_generator.py +1087 -0
- tools/compliance/compliance_detector.py +452 -0
- tools/compliance/compliance_exporter.py +418 -0
- tools/compliance/compliance_status.py +810 -0
- tools/compliance/control_mapper.py +488 -0
- tools/compliance/crosswalk_engine.py +1208 -0
- tools/compliance/cssp_assessor.py +1032 -0
- tools/compliance/cssp_evidence_collector.py +716 -0
- tools/compliance/cssp_report_generator.py +1103 -0
- tools/compliance/cui_marker.py +387 -0
- tools/compliance/diagram_validator.py +599 -0
- tools/compliance/emass/__init__.py +2 -0
- tools/compliance/emass/emass_client.py +822 -0
- tools/compliance/emass/emass_export.py +758 -0
- tools/compliance/emass/emass_sync.py +807 -0
- tools/compliance/eu_ai_act_classifier.py +193 -0
- tools/compliance/evidence_collector.py +459 -0
- tools/compliance/fairness_assessor.py +310 -0
- tools/compliance/fedramp_20x_ksi_emitter.py +692 -0
- tools/compliance/fedramp_assessor.py +1795 -0
- tools/compliance/fedramp_authorization_packager.py +137 -0
- tools/compliance/fedramp_ksi_generator.py +349 -0
- tools/compliance/fedramp_report_generator.py +1115 -0
- tools/compliance/fips199_categorizer.py +869 -0
- tools/compliance/fips200_validator.py +304 -0
- tools/compliance/firmware_sbom.py +646 -0
- tools/compliance/gao_ai_assessor.py +228 -0
- tools/compliance/gao_evidence_builder.py +302 -0
- tools/compliance/hipaa_assessor.py +78 -0
- tools/compliance/hitrust_assessor.py +49 -0
- tools/compliance/incident_response_plan.py +705 -0
- tools/compliance/inheritance_engine.py +693 -0
- tools/compliance/iso27001_assessor.py +92 -0
- tools/compliance/iso42001_assessor.py +114 -0
- tools/compliance/ivv_assessor.py +2314 -0
- tools/compliance/ivv_report_generator.py +1649 -0
- tools/compliance/model_card_generator.py +291 -0
- tools/compliance/mosa_assessor.py +117 -0
- tools/compliance/multi_regime_assessor.py +441 -0
- tools/compliance/narrative_generator.py +1012 -0
- tools/compliance/narrative_quality_gate.py +701 -0
- tools/compliance/narrative_workflow.py +814 -0
- tools/compliance/nist_800_207_assessor.py +191 -0
- tools/compliance/nist_ai_600_1_assessor.py +185 -0
- tools/compliance/nist_ai_rmf_assessor.py +110 -0
- tools/compliance/nist_lookup.py +244 -0
- tools/compliance/omb_m25_21_assessor.py +225 -0
- tools/compliance/omb_m26_04_assessor.py +185 -0
- tools/compliance/oscal_catalog_adapter.py +395 -0
- tools/compliance/oscal_generator.py +2157 -0
- tools/compliance/oscal_tools.py +1182 -0
- tools/compliance/oscal_validator.py +692 -0
- tools/compliance/owasp_agentic_assessor.py +227 -0
- tools/compliance/owasp_asi_assessor.py +197 -0
- tools/compliance/owasp_llm_assessor.py +245 -0
- tools/compliance/pci_dss_assessor.py +80 -0
- tools/compliance/pi_compliance_tracker.py +1447 -0
- tools/compliance/poam_generator.py +388 -0
- tools/compliance/resolve_marking.py +272 -0
- tools/compliance/sbd_assessor.py +2070 -0
- tools/compliance/sbd_report_generator.py +1223 -0
- tools/compliance/sbom_generator.py +993 -0
- tools/compliance/siem_config_generator.py +661 -0
- tools/compliance/slsa_attestation_generator.py +479 -0
- tools/compliance/soc2_assessor.py +77 -0
- tools/compliance/ssp_generator.py +556 -0
- tools/compliance/stig_checker.py +712 -0
- tools/compliance/swft_evidence_bundler.py +326 -0
- tools/compliance/system_card_generator.py +303 -0
- tools/compliance/template_exchange.py +513 -0
- tools/compliance/traceability_matrix.py +1268 -0
- tools/compliance/universal_classification_manager.py +1159 -0
- tools/compliance/xacta/__init__.py +2 -0
- tools/compliance/xacta/xacta_client.py +438 -0
- tools/compliance/xacta/xacta_export.py +546 -0
- tools/compliance/xacta/xacta_sync.py +322 -0
- tools/compliance/xai_assessor.py +231 -0
- tools/core/__init__.py +2 -0
- tools/core/circuit_breaker.py +353 -0
- tools/core/compliance_sidecar.py +344 -0
- tools/core/container.py +110 -0
- tools/core/errors.py +256 -0
- tools/core/feature_flags.py +311 -0
- tools/core/task_dlq.py +350 -0
- tools/dashboard/__init__.py +2 -0
- tools/dashboard/app.py +6288 -0
- tools/dashboard/templates/agent_evolution.html +287 -0
- tools/dashboard/templates/agents/list.html +71 -0
- tools/dashboard/templates/agents.html +132 -0
- tools/dashboard/templates/architecture.html +289 -0
- tools/dashboard/templates/ato_simulator.html +170 -0
- tools/dashboard/templates/audit_engine.html +844 -0
- tools/dashboard/templates/base.html +236 -0
- tools/dashboard/templates/cato_live.html +116 -0
- tools/dashboard/templates/cloudforge.html +195 -0
- tools/dashboard/templates/cloudforge_finops.html +111 -0
- tools/dashboard/templates/cloudforge_hybrid.html +122 -0
- tools/dashboard/templates/cloudforge_metastore.html +234 -0
- tools/dashboard/templates/cloudforge_migration.html +87 -0
- tools/dashboard/templates/cloudforge_runbooks.html +201 -0
- tools/dashboard/templates/cloudforge_siem.html +94 -0
- tools/dashboard/templates/compliance_accel.html +292 -0
- tools/dashboard/templates/crashes.html +122 -0
- tools/dashboard/templates/databridge.html +305 -0
- tools/dashboard/templates/databridge_analytics.html +195 -0
- tools/dashboard/templates/databridge_mapping.html +345 -0
- tools/dashboard/templates/databridge_messaging.html +321 -0
- tools/dashboard/templates/decisions.html +258 -0
- tools/dashboard/templates/devices.html +151 -0
- tools/dashboard/templates/devsecops_maturity.html +278 -0
- tools/dashboard/templates/edge_ai.html +128 -0
- tools/dashboard/templates/firmware.html +120 -0
- tools/dashboard/templates/firmware_sbom.html +193 -0
- tools/dashboard/templates/forge_hub.html +196 -0
- tools/dashboard/templates/forge_studio.html +379 -0
- tools/dashboard/templates/forge_studio_analytics.html +360 -0
- tools/dashboard/templates/forge_studio_builder.html +1637 -0
- tools/dashboard/templates/forge_studio_compliance.html +310 -0
- tools/dashboard/templates/forge_studio_deploy.html +573 -0
- tools/dashboard/templates/forge_studio_enterprise.html +888 -0
- tools/dashboard/templates/forge_studio_marketplace.html +502 -0
- tools/dashboard/templates/forge_studio_workflow.html +696 -0
- tools/dashboard/templates/golden_path.html +175 -0
- tools/dashboard/templates/govcon.html +280 -0
- tools/dashboard/templates/harness.html +148 -0
- tools/dashboard/templates/index.html +207 -0
- tools/dashboard/templates/intelligence.html +336 -0
- tools/dashboard/templates/knowledge/index.html +190 -0
- tools/dashboard/templates/knowledge_graph.html +739 -0
- tools/dashboard/templates/login.html +51 -0
- tools/dashboard/templates/marketplace.html +336 -0
- tools/dashboard/templates/marketplace_admin.html +247 -0
- tools/dashboard/templates/missions.html +403 -0
- tools/dashboard/templates/narratives.html +154 -0
- tools/dashboard/templates/pr_intelligence.html +151 -0
- tools/dashboard/templates/proposals/detail.html +300 -0
- tools/dashboard/templates/proposals/list.html +52 -0
- tools/dashboard/templates/proposals/sam_detail.html +132 -0
- tools/dashboard/templates/proposals/section_detail.html +375 -0
- tools/dashboard/templates/research.html +222 -0
- tools/dashboard/templates/resilience.html +300 -0
- tools/dashboard/templates/scorecard.html +162 -0
- tools/dashboard/templates/simulator.html +131 -0
- tools/dashboard/templates/template_exchange.html +147 -0
- tools/dashboard/templates/thread_heatmap.html +151 -0
- tools/dashboard/templates/threat_model.html +195 -0
- tools/dashboard/templates/vsm.html +141 -0
- tools/dashboard/templates/writeguard.html +277 -0
- tools/databridge/__init__.py +5 -0
- tools/databridge/agent/__init__.py +2 -0
- tools/databridge/agent/daemon.py +227 -0
- tools/databridge/agent/tunnel.py +101 -0
- tools/databridge/agent/ws_relay.py +91 -0
- tools/databridge/analytics.py +167 -0
- tools/databridge/arrow_pipeline.py +327 -0
- tools/databridge/connection_manager.py +424 -0
- tools/databridge/connector.py +331 -0
- tools/databridge/connectors/__init__.py +2 -0
- tools/databridge/connectors/argocd_connector.py +160 -0
- tools/databridge/connectors/avro_connector.py +203 -0
- tools/databridge/connectors/azure_blob.py +63 -0
- tools/databridge/connectors/cdc_connector.py +205 -0
- tools/databridge/connectors/csv_connector.py +172 -0
- tools/databridge/connectors/datadog_connector.py +153 -0
- tools/databridge/connectors/discord_messaging.py +215 -0
- tools/databridge/connectors/dynamics365.py +151 -0
- tools/databridge/connectors/elasticsearch_connector.py +145 -0
- tools/databridge/connectors/email_base.py +114 -0
- tools/databridge/connectors/excel_connector.py +175 -0
- tools/databridge/connectors/fsspec_base.py +300 -0
- tools/databridge/connectors/gcs.py +53 -0
- tools/databridge/connectors/github_connector.py +138 -0
- tools/databridge/connectors/gitlab_connector.py +132 -0
- tools/databridge/connectors/gmail_connector.py +182 -0
- tools/databridge/connectors/hdfs.py +57 -0
- tools/databridge/connectors/health_base.py +401 -0
- tools/databridge/connectors/hubspot.py +124 -0
- tools/databridge/connectors/imap_connector.py +171 -0
- tools/databridge/connectors/jenkins_connector.py +138 -0
- tools/databridge/connectors/jira_connector.py +86 -0
- tools/databridge/connectors/json_connector.py +184 -0
- tools/databridge/connectors/kafka_connector.py +246 -0
- tools/databridge/connectors/kinesis_connector.py +238 -0
- tools/databridge/connectors/local_fs.py +30 -0
- tools/databridge/connectors/matrix.py +197 -0
- tools/databridge/connectors/mattermost_messaging.py +184 -0
- tools/databridge/connectors/messaging_base.py +172 -0
- tools/databridge/connectors/mssql.py +63 -0
- tools/databridge/connectors/mysql.py +57 -0
- tools/databridge/connectors/netsuite.py +170 -0
- tools/databridge/connectors/o365_mail.py +196 -0
- tools/databridge/connectors/oracle.py +65 -0
- tools/databridge/connectors/pagerduty_connector.py +162 -0
- tools/databridge/connectors/parquet_connector.py +131 -0
- tools/databridge/connectors/postgresql.py +58 -0
- tools/databridge/connectors/s3.py +65 -0
- tools/databridge/connectors/saas_base.py +198 -0
- tools/databridge/connectors/salesforce.py +126 -0
- tools/databridge/connectors/sap.py +89 -0
- tools/databridge/connectors/servicenow.py +60 -0
- tools/databridge/connectors/signal_messaging.py +150 -0
- tools/databridge/connectors/slack_messaging.py +203 -0
- tools/databridge/connectors/smtp_connector.py +126 -0
- tools/databridge/connectors/soap_base.py +258 -0
- tools/databridge/connectors/splunk_connector.py +171 -0
- tools/databridge/connectors/sql_base.py +310 -0
- tools/databridge/connectors/sqlite_connector.py +76 -0
- tools/databridge/connectors/teams.py +148 -0
- tools/databridge/connectors/telegram.py +192 -0
- tools/databridge/connectors/whatsapp.py +137 -0
- tools/databridge/data_profiler.py +99 -0
- tools/databridge/forge/__init__.py +6 -0
- tools/databridge/forge/base_selector.py +150 -0
- tools/databridge/forge/code_generator.py +206 -0
- tools/databridge/forge/community_hub.py +539 -0
- tools/databridge/forge/forge_agent.py +306 -0
- tools/databridge/forge/import_handler.py +133 -0
- tools/databridge/forge/integration_tester.py +127 -0
- tools/databridge/forge/marketplace_publisher.py +164 -0
- tools/databridge/forge/promoter.py +159 -0
- tools/databridge/forge/sandbox_manager.py +257 -0
- tools/databridge/forge/spec_parser.py +358 -0
- tools/databridge/forge/static_validator.py +363 -0
- tools/databridge/forge/templates/__init__.py +591 -0
- tools/databridge/format_converter.py +188 -0
- tools/databridge/mapping_engine.py +348 -0
- tools/databridge/messaging/__init__.py +5 -0
- tools/databridge/messaging/agent_bridge.py +254 -0
- tools/databridge/messaging/message_envelope.py +111 -0
- tools/databridge/messaging/message_logger.py +204 -0
- tools/databridge/messaging/messaging_daemon.py +326 -0
- tools/databridge/messaging/oauth2_manager.py +411 -0
- tools/databridge/pii_detector.py +221 -0
- tools/databridge/registry.py +352 -0
- tools/databridge/relay_server.py +105 -0
- tools/databridge/scale/__init__.py +16 -0
- tools/databridge/scale/backpressure.py +134 -0
- tools/databridge/scale/chunked_pipeline.py +169 -0
- tools/databridge/scale/connection_pool.py +293 -0
- tools/databridge/scale/engine.py +492 -0
- tools/databridge/scale/worker_pool.py +140 -0
- tools/databridge/scale/write_batcher.py +250 -0
- tools/databridge/schema_engine.py +324 -0
- tools/databridge/stream_manager.py +225 -0
- tools/databridge/sync_engine.py +411 -0
- tools/databridge/transforms.py +302 -0
- tools/db/__init__.py +1 -0
- tools/db/backup.py +312 -0
- tools/db/backup_manager.py +832 -0
- tools/db/init_icdev_db.py +7753 -0
- tools/db/init_sparkpilot_db.py +431 -0
- tools/db/migrate.py +177 -0
- tools/db/migrate_innovation_audit.py +165 -0
- tools/db/migration_runner.py +548 -0
- tools/db/migrations/001_baseline/meta.json +9 -0
- tools/db/migrations/001_baseline/up.py +67 -0
- tools/db/migrations/002_memory_enhancements/down.sql +8 -0
- tools/db/migrations/002_memory_enhancements/meta.json +9 -0
- tools/db/migrations/002_memory_enhancements/up.py +119 -0
- tools/db/migrations/003_dev_profiles/meta.json +8 -0
- tools/db/migrations/003_dev_profiles/up.py +93 -0
- tools/db/migrations/004_innovation_engine/down.py +19 -0
- tools/db/migrations/004_innovation_engine/up.py +227 -0
- tools/db/migrations/005_phase_37_ai_security/down.py +19 -0
- tools/db/migrations/005_phase_37_ai_security/up.py +257 -0
- tools/db/migrations/006_phase_36_evolution/down.py +21 -0
- tools/db/migrations/006_phase_36_evolution/up.py +323 -0
- tools/db/migrations/007_phase_38_cloud/down.py +14 -0
- tools/db/migrations/007_phase_38_cloud/up.py +110 -0
- tools/db/migrations/008_phase36_37_integration/up.py +55 -0
- tools/db/migrations/__init__.py +2 -0
- tools/db/pg_migrate.py +642 -0
- tools/db/storage.py +1080 -0
- tools/decisions/__init__.py +2 -0
- tools/decisions/dmn_engine.py +695 -0
- tools/devsecops/__init__.py +2 -0
- tools/devsecops/attestation_manager.py +449 -0
- tools/devsecops/network_segmentation_generator.py +604 -0
- tools/devsecops/pdp_config_generator.py +1246 -0
- tools/devsecops/pipeline_security_generator.py +475 -0
- tools/devsecops/policy_generator.py +644 -0
- tools/devsecops/profile_manager.py +374 -0
- tools/devsecops/service_mesh_generator.py +1063 -0
- tools/devsecops/zta_maturity_scorer.py +355 -0
- tools/devsecops/zta_terraform_generator.py +1301 -0
- tools/edge_ai/__init__.py +2 -0
- tools/edge_ai/model_manager.py +200 -0
- tools/embedded/__init__.py +2 -0
- tools/embedded/cmake_generator.py +318 -0
- tools/embedded/crash_analyzer.py +191 -0
- tools/embedded/nl_to_firmware.py +277 -0
- tools/events/__init__.py +1 -0
- tools/events/event_bus.py +199 -0
- tools/finetune/pair_generator.py +832 -0
- tools/fleet/__init__.py +2 -0
- tools/fleet/device_registry.py +148 -0
- tools/fleet/ota_manager.py +153 -0
- tools/forge_studio/__init__.py +13 -0
- tools/forge_studio/analytics/__init__.py +0 -0
- tools/forge_studio/analytics/process_miner.py +383 -0
- tools/forge_studio/audit.py +183 -0
- tools/forge_studio/blueprint/__init__.py +2 -0
- tools/forge_studio/blueprint/build_tracker.py +317 -0
- tools/forge_studio/blueprint/export_engine.py +441 -0
- tools/forge_studio/blueprint/parent_client.py +335 -0
- tools/forge_studio/catalog/__init__.py +2 -0
- tools/forge_studio/catalog/component_registry.py +176 -0
- tools/forge_studio/catalog/schema_validator.py +193 -0
- tools/forge_studio/compliance/__init__.py +1 -0
- tools/forge_studio/compliance/compliance_wiring.py +554 -0
- tools/forge_studio/deploy/__init__.py +1 -0
- tools/forge_studio/deploy/airgap_packager.py +466 -0
- tools/forge_studio/deploy/deploy_engine.py +1792 -0
- tools/forge_studio/deploy/env_manager.py +431 -0
- tools/forge_studio/eject/__init__.py +2 -0
- tools/forge_studio/eject/docker_compose_generator.py +237 -0
- tools/forge_studio/eject/eject_engine.py +230 -0
- tools/forge_studio/eject/expo_scaffolder.py +303 -0
- tools/forge_studio/eject/nextjs_scaffolder.py +338 -0
- tools/forge_studio/enterprise/__init__.py +0 -0
- tools/forge_studio/enterprise/custom_frameworks.py +826 -0
- tools/forge_studio/enterprise/hardening_engine.py +1530 -0
- tools/forge_studio/enterprise/sso_manager.py +718 -0
- tools/forge_studio/enterprise/whitelabel_engine.py +887 -0
- tools/forge_studio/formula/__init__.py +0 -0
- tools/forge_studio/formula/expression_engine.py +562 -0
- tools/forge_studio/formula/formula_registry.py +265 -0
- tools/forge_studio/generator/__init__.py +2 -0
- tools/forge_studio/generator/app_generator.py +584 -0
- tools/forge_studio/generator/complexity_detector.py +368 -0
- tools/forge_studio/generator/prompt_templates.py +104 -0
- tools/forge_studio/generator/spec_builder.py +192 -0
- tools/forge_studio/intake_bridge.py +898 -0
- tools/forge_studio/marketplace/__init__.py +0 -0
- tools/forge_studio/marketplace/component_hub.py +428 -0
- tools/forge_studio/models.py +369 -0
- tools/forge_studio/renderer/__init__.py +2 -0
- tools/forge_studio/renderer/json_render_engine.py +623 -0
- tools/forge_studio/renderer/layout_engine.py +214 -0
- tools/forge_studio/renderer/rn_component_map.py +182 -0
- tools/forge_studio/supabase/__init__.py +2 -0
- tools/forge_studio/supabase/auth_generator.py +283 -0
- tools/forge_studio/supabase/migration_generator.py +93 -0
- tools/forge_studio/supabase/schema_generator.py +281 -0
- tools/forge_studio/tenant_manager.py +387 -0
- tools/forge_studio/workflow/__init__.py +2 -0
- tools/forge_studio/workflow/bpmn_adapter.py +489 -0
- tools/govcon/draft_orchestrator.py +1151 -0
- tools/govcon/engine_enrichment.py +373 -0
- tools/govcon/knowledge_base.py +487 -0
- tools/govcon/knowledge_ingestion.py +510 -0
- tools/govcon/sam_scanner.py +754 -0
- tools/harness/__init__.py +6 -0
- tools/harness/exit_criteria_evaluator.py +231 -0
- tools/harness/maturity_assessor.py +347 -0
- tools/harness/scaffold_harness.py +416 -0
- tools/harness/trace_analyzer.py +281 -0
- tools/infra/__init__.py +1 -0
- tools/infra/ansible_generator.py +867 -0
- tools/infra/dockerfile_generator.py +359 -0
- tools/infra/infra_status.py +384 -0
- tools/infra/ironbank_metadata_generator.py +403 -0
- tools/infra/k8s_generator.py +1000 -0
- tools/infra/pipeline_generator.py +830 -0
- tools/infra/rollback.py +389 -0
- tools/infra/terraform_generator.py +1140 -0
- tools/infra/terraform_generator_azure.py +1252 -0
- tools/infra/terraform_generator_gcp.py +951 -0
- tools/infra/terraform_generator_ibm.py +359 -0
- tools/infra/terraform_generator_oci.py +918 -0
- tools/infra/terraform_generator_onprem.py +318 -0
- tools/knowledge/__init__.py +1 -0
- tools/knowledge/knowledge_ingest.py +281 -0
- tools/knowledge/pattern_detector.py +681 -0
- tools/knowledge/recommendation_engine.py +449 -0
- tools/knowledge/self_heal_analyzer.py +492 -0
- tools/knowledge_graph/__init__.py +2 -0
- tools/knowledge_graph/graph_rag.py +498 -0
- tools/knowledge_graph/ingester.py +406 -0
- tools/knowledge_graph/insight_generator.py +369 -0
- tools/knowledge_graph/text_network.py +832 -0
- tools/llm/__init__.py +72 -0
- tools/llm/anthropic_provider.py +170 -0
- tools/llm/azure_openai_provider.py +338 -0
- tools/llm/bedrock_provider.py +315 -0
- tools/llm/embedding_provider.py +438 -0
- tools/llm/gemini_provider.py +381 -0
- tools/llm/ibm_watsonx_provider.py +231 -0
- tools/llm/oci_genai_provider.py +462 -0
- tools/llm/ollama_provider.py +350 -0
- tools/llm/openai_provider.py +225 -0
- tools/llm/prompt_registry.py +447 -0
- tools/llm/provider.py +355 -0
- tools/llm/provider_sdk.py +175 -0
- tools/llm/router.py +1124 -0
- tools/llm/semantic_cache.py +394 -0
- tools/llm/vertex_ai_provider.py +374 -0
- tools/maintenance/__init__.py +2 -0
- tools/maintenance/dependency_scanner.py +1016 -0
- tools/maintenance/maintenance_auditor.py +804 -0
- tools/maintenance/remediation_engine.py +957 -0
- tools/maintenance/vulnerability_checker.py +978 -0
- tools/manifest.md +1066 -0
- tools/marketplace/asset_installer.py +639 -0
- tools/marketplace/feedback_validator.py +359 -0
- tools/marketplace/license_client.py +458 -0
- tools/marketplace/module_crypto.py +544 -0
- tools/marketplace/module_runtime.py +236 -0
- tools/marketplace/token_store.py +264 -0
- tools/mbse/__init__.py +3 -0
- tools/mbse/des_assessor.py +1173 -0
- tools/mbse/des_report_generator.py +787 -0
- tools/mbse/diagram_extractor.py +792 -0
- tools/mbse/digital_thread.py +1650 -0
- tools/mbse/model_code_generator.py +1115 -0
- tools/mbse/model_control_mapper.py +410 -0
- tools/mbse/pi_model_tracker.py +1079 -0
- tools/mbse/reqif_parser.py +1468 -0
- tools/mbse/sync_engine.py +1789 -0
- tools/mbse/thread_heatmap.py +445 -0
- tools/mbse/xmi_parser.py +1558 -0
- tools/mcp/builder_server.py +64 -0
- tools/mcp/compliance_server.py +64 -0
- tools/mcp/connector_forge_server.py +155 -0
- tools/mcp/core_server.py +64 -0
- tools/mcp/devsecops_server.py +11 -0
- tools/mcp/devsecops_zta_server.py +64 -0
- tools/mcp/knowledge_server.py +64 -0
- tools/mcp/monitor_server.py +64 -0
- tools/mcp/ops_server.py +300 -0
- tools/mcp/requirements_analyst_server.py +64 -0
- tools/mcp/requirements_server.py +11 -0
- tools/mcp/security_server.py +64 -0
- tools/mcp/simulation_server.py +64 -0
- tools/mcp/supply_chain_server.py +64 -0
- tools/mcp/tool_registry.py +299 -0
- tools/memory/__init__.py +2 -0
- tools/memory/auto_capture.py +346 -0
- tools/memory/embed_memory.py +157 -0
- tools/memory/history_compressor.py +334 -0
- tools/memory/hybrid_search.py +235 -0
- tools/memory/maintenance_cron.py +288 -0
- tools/memory/memory_consolidation.py +439 -0
- tools/memory/memory_db.py +132 -0
- tools/memory/memory_read.py +101 -0
- tools/memory/memory_write.py +221 -0
- tools/memory/semantic_search.py +138 -0
- tools/memory/time_decay.py +434 -0
- tools/missions/__init__.py +2 -0
- tools/missions/mission_engine.py +459 -0
- tools/monitor/__init__.py +1 -0
- tools/monitor/alert_correlator.py +486 -0
- tools/monitor/auto_resolver.py +603 -0
- tools/monitor/health_checker.py +507 -0
- tools/monitor/heartbeat_daemon.py +779 -0
- tools/monitor/log_analyzer.py +507 -0
- tools/monitor/metric_collector.py +484 -0
- tools/mosa/__init__.py +10 -0
- tools/mosa/icd_generator.py +358 -0
- tools/mosa/modular_design_analyzer.py +682 -0
- tools/mosa/mosa_code_enforcer.py +348 -0
- tools/mosa/tsp_generator.py +265 -0
- tools/observability/__init__.py +100 -0
- tools/observability/genai_attributes.py +88 -0
- tools/observability/instrumentation.py +140 -0
- tools/observability/mlflow_exporter.py +193 -0
- tools/observability/otel_tracer.py +168 -0
- tools/observability/provenance/__init__.py +3 -0
- tools/observability/provenance/prov_recorder.py +322 -0
- tools/observability/shap/__init__.py +3 -0
- tools/observability/shap/agent_shap.py +274 -0
- tools/observability/sqlite_tracer.py +360 -0
- tools/observability/trace_context.py +205 -0
- tools/observability/tracer.py +230 -0
- tools/orchestration/__init__.py +1 -0
- tools/orchestration/peer_channels.py +254 -0
- tools/orchestration/saga_coordinator.py +390 -0
- tools/project/__init__.py +1 -0
- tools/project/manifest_loader.py +418 -0
- tools/project/project_create.py +350 -0
- tools/project/project_list.py +171 -0
- tools/project/project_scaffold.py +1715 -0
- tools/project/project_status.py +478 -0
- tools/project/session_context_builder.py +752 -0
- tools/project/validate_manifest.py +54 -0
- tools/rag/corrective_rag.py +582 -0
- tools/rag/source_registry.py +482 -0
- tools/requirements/__init__.py +1 -0
- tools/requirements/ai_governance_scorer.py +207 -0
- tools/requirements/boundary_analyzer.py +1281 -0
- tools/requirements/clarification_engine.py +605 -0
- tools/requirements/complexity_scorer.py +369 -0
- tools/requirements/consistency_analyzer.py +789 -0
- tools/requirements/constitution_manager.py +592 -0
- tools/requirements/decomposition_engine.py +764 -0
- tools/requirements/document_extractor.py +1002 -0
- tools/requirements/elicitation_techniques.py +508 -0
- tools/requirements/gap_detector.py +260 -0
- tools/requirements/intake_engine.py +2175 -0
- tools/requirements/prd_generator.py +839 -0
- tools/requirements/prd_validator.py +584 -0
- tools/requirements/readiness_scorer.py +302 -0
- tools/requirements/spec_organizer.py +1015 -0
- tools/requirements/spec_quality_checker.py +1083 -0
- tools/requirements/traceability_builder.py +566 -0
- tools/research/__init__.py +3 -0
- tools/research/academic_scanner.py +130 -0
- tools/research/build_buy_analyzer.py +229 -0
- tools/research/challenge_scorer.py +280 -0
- tools/research/community_scanner.py +174 -0
- tools/research/cross_engine_bridge.py +124 -0
- tools/research/dossier_generator.py +305 -0
- tools/research/landscape_scanner.py +315 -0
- tools/research/regulatory_scanner.py +248 -0
- tools/research/research_manager.py +469 -0
- tools/research/source_scanner.py +150 -0
- tools/research/vertical_loader.py +118 -0
- tools/saas/__init__.py +0 -0
- tools/saas/licensing/__init__.py +0 -0
- tools/saas/licensing/license_validator.py +345 -0
- tools/scaffold/__init__.py +2 -0
- tools/scaffold/golden_path.py +504 -0
- tools/security/__init__.py +1 -0
- tools/security/agent_output_validator.py +330 -0
- tools/security/agent_trust_scorer.py +652 -0
- tools/security/ai_bom_generator.py +718 -0
- tools/security/ai_telemetry_logger.py +469 -0
- tools/security/atlas_red_team.py +541 -0
- tools/security/code_pattern_scanner.py +382 -0
- tools/security/confabulation_detector.py +265 -0
- tools/security/container_scanner.py +489 -0
- tools/security/dependency_auditor.py +942 -0
- tools/security/endpoint_security_scanner.py +626 -0
- tools/security/mcp_tool_authorizer.py +242 -0
- tools/security/output_verifier.py +427 -0
- tools/security/prompt_injection_detector.py +737 -0
- tools/security/sast_runner.py +946 -0
- tools/security/secret_detector.py +376 -0
- tools/security/threat_modeler.py +678 -0
- tools/security/tool_chain_validator.py +357 -0
- tools/security/vuln_scanner.py +536 -0
- tools/simulation/__init__.py +2 -0
- tools/simulation/ato_simulator.py +517 -0
- tools/simulation/coa_generator.py +1539 -0
- tools/simulation/monte_carlo.py +745 -0
- tools/simulation/scenario_manager.py +1060 -0
- tools/simulation/simulation_engine.py +1091 -0
- tools/simulator/__init__.py +2 -0
- tools/simulator/sim_runner.py +272 -0
- tools/supply_chain/__init__.py +2 -0
- tools/supply_chain/cve_triager.py +690 -0
- tools/supply_chain/dependency_graph.py +630 -0
- tools/supply_chain/isa_manager.py +526 -0
- tools/supply_chain/scrm_assessor.py +531 -0
- tools/supply_chain/slsa_verifier.py +473 -0
- tools/testing/__init__.py +2 -0
- tools/testing/acceptance_validator.py +411 -0
- tools/testing/api_surface_extractor.py +749 -0
- tools/testing/claude_dir_validator.py +831 -0
- tools/testing/data_types.py +199 -0
- tools/testing/e2e_runner.py +715 -0
- tools/testing/fuzz_cli.py +306 -0
- tools/testing/health_check.py +483 -0
- tools/testing/platform_check.py +143 -0
- tools/testing/production_audit.py +1836 -0
- tools/testing/production_remediate.py +803 -0
- tools/testing/screenshot_validator.py +538 -0
- tools/testing/smoke_test.py +283 -0
- tools/testing/test_agent_models.py +117 -0
- tools/testing/test_orchestrator.py +957 -0
- tools/testing/utils.py +229 -0
- tools/writeguard/__init__.py +1 -0
- tools/writeguard/main.py +1 -0
- tools/writing/__init__.py +7 -0
- tools/writing/ai_content_detector.py +316 -0
- tools/writing/analysis_engine.py +454 -0
- tools/writing/batch_analyzer.py +276 -0
- tools/writing/coherence_analyzer.py +221 -0
- tools/writing/govcon_bridge.py +509 -0
- tools/writing/grammar_checker.py +270 -0
- tools/writing/plagiarism_detector.py +106 -0
- tools/writing/readability_scorer.py +201 -0
- tools/writing/rewriter.py +96 -0
- tools/writing/signal_registrar.py +167 -0
- tools/writing/snippet_manager.py +276 -0
- tools/writing/style_enforcer.py +220 -0
- tools/writing/style_guide_manager.py +438 -0
- tools/writing/tone_profiler.py +168 -0
|
@@ -0,0 +1,1615 @@
|
|
|
1
|
+
# CUI // SP-CTI
|
|
2
|
+
# Modern Software Development Best Practices (2024-2026)
|
|
3
|
+
# Applied to ICDEV: DoD/Federal Compliance Automation Platform
|
|
4
|
+
|
|
5
|
+
Classification: CUI // SP-CTI | Impact Level: IL4
|
|
6
|
+
Research Date: 2026-03-08
|
|
7
|
+
Scope: TDD/BDD for AI-Agentic Systems, DevSecOps Pipelines, Code Quality,
|
|
8
|
+
Configuration Management, Documentation-as-Code, Resilience Engineering
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Table of Contents
|
|
13
|
+
|
|
14
|
+
1. [TDD/BDD Best Practices for AI-Agentic Systems](#1-tddbdd-best-practices-for-ai-agentic-systems)
|
|
15
|
+
2. [DevSecOps Pipeline Best Practices](#2-devsecops-pipeline-best-practices)
|
|
16
|
+
3. [Code Quality and Maintainability](#3-code-quality-and-maintainability)
|
|
17
|
+
4. [Configuration Management](#4-configuration-management)
|
|
18
|
+
5. [Documentation-as-Code](#5-documentation-as-code)
|
|
19
|
+
6. [Resilience Engineering](#6-resilience-engineering)
|
|
20
|
+
7. [Priority Actions Summary](#7-priority-actions-summary)
|
|
21
|
+
8. [Sources](#8-sources)
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 1. TDD/BDD Best Practices for AI-Agentic Systems
|
|
26
|
+
|
|
27
|
+
### 1.1 Testing Non-Deterministic AI Outputs
|
|
28
|
+
|
|
29
|
+
**The Core Problem.** Traditional TDD expects deterministic outputs: given input X,
|
|
30
|
+
assert output Y. With LLMs, the same input produces different outputs on every run.
|
|
31
|
+
ICDEV's 12-agent architecture with a 4-tier LLM routing system (planner, worker,
|
|
32
|
+
scanner, default) through `tools/llm/router.py` makes this challenge pervasive.
|
|
33
|
+
|
|
34
|
+
**Industry Consensus (2025-2026).** The field has converged on a layered evaluation
|
|
35
|
+
strategy that replaces exact-match assertions with behavioral, structural, and
|
|
36
|
+
semantic validation:
|
|
37
|
+
|
|
38
|
+
| Evaluation Layer | What It Checks | When to Use | Example |
|
|
39
|
+
|-----------------|----------------|-------------|---------|
|
|
40
|
+
| Structural | Output schema, required fields, types | Always | SSP has `ssp_id`, `classification` |
|
|
41
|
+
| Semantic | Meaning similarity (cosine similarity) | LLM-generated text | Narrative covers AC-2 concepts |
|
|
42
|
+
| Behavioral | Tool selection, reasoning steps, decisions | Agent orchestration | Compliance agent chose correct framework |
|
|
43
|
+
| Property-based | Invariants that must always hold | Rule engines | Every NIST control maps to >= 1 framework |
|
|
44
|
+
| Rubric-based | LLM-as-judge with scoring criteria | Complex narratives | Narrative scores >= 7/10 for accuracy |
|
|
45
|
+
|
|
46
|
+
**Semantic Similarity Approach.** Embed both the expected reference output and
|
|
47
|
+
the actual output using a sentence transformer, then assert cosine similarity
|
|
48
|
+
exceeds a threshold (typically 0.75-0.85). This tolerates phrasing variation
|
|
49
|
+
while catching semantic drift. Research from Agent CI (2025) shows that cosine
|
|
50
|
+
similarity alone can miss cases where "wording is similar but meaning is
|
|
51
|
+
different," so it should be combined with structural checks:
|
|
52
|
+
|
|
53
|
+
```python
|
|
54
|
+
# tests/test_narrative_quality.py
|
|
55
|
+
from sentence_transformers import SentenceTransformer
|
|
56
|
+
import numpy as np
|
|
57
|
+
|
|
58
|
+
model = SentenceTransformer("all-MiniLM-L6-v2")
|
|
59
|
+
|
|
60
|
+
def cosine_sim(a: str, b: str) -> float:
|
|
61
|
+
emb = model.encode([a, b])
|
|
62
|
+
return float(np.dot(emb[0], emb[1]) / (np.linalg.norm(emb[0]) * np.linalg.norm(emb[1])))
|
|
63
|
+
|
|
64
|
+
def test_ac2_narrative_semantic_similarity():
|
|
65
|
+
reference = "AC-2 is implemented via centralized identity management..."
|
|
66
|
+
actual = generate_narrative(control="AC-2", project_id="test")
|
|
67
|
+
|
|
68
|
+
# Structural: must contain classification marking
|
|
69
|
+
assert "CUI //" in actual
|
|
70
|
+
|
|
71
|
+
# Semantic: must be conceptually similar to reference
|
|
72
|
+
sim = cosine_sim(reference, actual)
|
|
73
|
+
assert sim > 0.75, f"Semantic similarity {sim:.3f} below threshold"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**LLM-as-Judge Evaluation.** For complex narrative outputs (compliance SSP
|
|
77
|
+
narratives, AI-generated documentation), use an LLM evaluator with a scoring
|
|
78
|
+
rubric. The G-Eval framework (DeepEval, 2025) uses chain-of-thought prompting
|
|
79
|
+
with binary or 1-5 scale rubrics. Binary evaluations are more reliable:
|
|
80
|
+
|
|
81
|
+
```python
|
|
82
|
+
# tests/evals/test_ssp_narrative_eval.py
|
|
83
|
+
RUBRIC = """
|
|
84
|
+
Evaluate the SSP narrative for control {control_id}.
|
|
85
|
+
Score each criterion as PASS or FAIL:
|
|
86
|
+
1. ACCURACY: Narrative correctly describes the control implementation
|
|
87
|
+
2. COMPLETENESS: All required sub-controls are addressed
|
|
88
|
+
3. CLASSIFICATION: Contains appropriate CUI marking
|
|
89
|
+
4. SPECIFICITY: References project-specific implementation details
|
|
90
|
+
5. COMPLIANCE: Uses NIST 800-53 Rev 5 language and terminology
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
def test_ssp_narrative_with_llm_judge():
|
|
94
|
+
narrative = generate_ssp_narrative(control="AC-2", project_id="test")
|
|
95
|
+
judge_result = llm_evaluate(
|
|
96
|
+
rubric=RUBRIC.format(control_id="AC-2"),
|
|
97
|
+
output=narrative,
|
|
98
|
+
judge_model="claude-sonnet",
|
|
99
|
+
)
|
|
100
|
+
assert judge_result["ACCURACY"] == "PASS"
|
|
101
|
+
assert judge_result["CLASSIFICATION"] == "PASS"
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**Outlier Detection for Consistency.** When running the same prompt N times, compute
|
|
105
|
+
the centroid (mean embedding vector) and use Median Absolute Deviation (MAD) to
|
|
106
|
+
detect outliers. This catches cases where the model occasionally produces wildly
|
|
107
|
+
different outputs:
|
|
108
|
+
|
|
109
|
+
```python
|
|
110
|
+
def test_output_consistency(n_runs=5):
|
|
111
|
+
outputs = [generate_ssp_narrative("AC-2", "test") for _ in range(n_runs)]
|
|
112
|
+
embeddings = model.encode(outputs)
|
|
113
|
+
centroid = np.mean(embeddings, axis=0)
|
|
114
|
+
distances = [np.linalg.norm(e - centroid) for e in embeddings]
|
|
115
|
+
median_dist = np.median(distances)
|
|
116
|
+
mad = np.median([abs(d - median_dist) for d in distances])
|
|
117
|
+
# No output should be > 3 MADs from centroid
|
|
118
|
+
for i, d in enumerate(distances):
|
|
119
|
+
assert (d - median_dist) / (mad + 1e-8) < 3.0, f"Run {i} is an outlier"
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**ICDEV-Specific Recommendation.** Test at each LLM routing tier differently:
|
|
123
|
+
|
|
124
|
+
| Tier | Test Strategy | Rationale |
|
|
125
|
+
|------|--------------|-----------|
|
|
126
|
+
| Planner (Claude direct) | LLM-as-judge + semantic similarity | Complex reasoning; needs qualitative evaluation |
|
|
127
|
+
| Worker (qwen3.5 draft + Claude review) | Structural + semantic | Verify draft and review improve quality |
|
|
128
|
+
| Scanner (qwen3.5/llava only) | Structural + property-based | Deterministic schemas; verify format compliance |
|
|
129
|
+
| Default (fallback chain) | Structural only | Verify graceful degradation across providers |
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
### 1.2 Contract Testing for Agent-to-Agent Communication
|
|
133
|
+
|
|
134
|
+
**Why Contract Testing Matters for ICDEV.** ICDEV's 12 agents communicate via
|
|
135
|
+
JSON-RPC 2.0 over mTLS. Each publishes an Agent Card at `/.well-known/agent.json`.
|
|
136
|
+
When one agent's response schema changes, consumer agents break silently. Contract
|
|
137
|
+
testing catches this at build time, not in production.
|
|
138
|
+
|
|
139
|
+
**Consumer-Driven Contract Testing.** The industry standard (Pact, 2025) defines
|
|
140
|
+
contracts from the consumer's perspective. The consumer specifies what it expects,
|
|
141
|
+
and the provider verifies it can satisfy those expectations. For ICDEV:
|
|
142
|
+
|
|
143
|
+
- The **orchestrator** is the primary consumer of all 11 domain/support agents
|
|
144
|
+
- Each **domain agent** consumes the orchestrator's dispatch and status APIs
|
|
145
|
+
- **Compliance agent** consumes security agent scan results for evidence collection
|
|
146
|
+
|
|
147
|
+
**Implementation Pattern:**
|
|
148
|
+
|
|
149
|
+
```python
|
|
150
|
+
# tests/contracts/schemas/compliance_ssp_generate.json
|
|
151
|
+
{
|
|
152
|
+
"consumer": "orchestrator",
|
|
153
|
+
"provider": "compliance",
|
|
154
|
+
"method": "ssp_generate",
|
|
155
|
+
"request": {
|
|
156
|
+
"required": ["project_id"],
|
|
157
|
+
"properties": {
|
|
158
|
+
"project_id": {"type": "string"},
|
|
159
|
+
"baseline": {"type": "string", "enum": ["low", "moderate", "high"]}
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
"response": {
|
|
163
|
+
"required": ["ssp_id", "controls", "classification"],
|
|
164
|
+
"properties": {
|
|
165
|
+
"ssp_id": {"type": "string"},
|
|
166
|
+
"controls": {"type": "array"},
|
|
167
|
+
"classification": {"type": "string", "pattern": "^CUI //"}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Store contracts as JSON Schema files in `tests/contracts/schemas/`. Each agent's
|
|
174
|
+
CI pipeline validates both directions: "Do I produce what consumers expect?" and
|
|
175
|
+
"Do I receive what I need from providers?"
|
|
176
|
+
|
|
177
|
+
**Contract Versioning.** When a breaking change is necessary:
|
|
178
|
+
|
|
179
|
+
1. Add a new contract version (e.g., `v2/compliance_ssp_generate.json`)
|
|
180
|
+
2. Provider must satisfy both v1 and v2 during migration period
|
|
181
|
+
3. Consumers migrate to v2 on their own schedule
|
|
182
|
+
4. v1 contract deprecated after all consumers migrate
|
|
183
|
+
|
|
184
|
+
**ICDEV Already Has: `tests/contracts/test_agent_contracts.py`** (created during
|
|
185
|
+
this research). It defines contracts for 9 agent methods with structural validation,
|
|
186
|
+
type checking, and CUI classification enforcement.
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
### 1.3 Property-Based Testing for Compliance Rule Engines
|
|
190
|
+
|
|
191
|
+
**Research Evidence.** An empirical study presented at OOPSLA 2025 evaluated
|
|
192
|
+
property-based testing (PBT) across 7,125 Hypothesis tests in 426 Python projects.
|
|
193
|
+
Key finding: **each PBT test finds approximately 50x more mutants than the average
|
|
194
|
+
unit test**. This makes PBT exceptionally valuable for ICDEV's deterministic rule
|
|
195
|
+
engines.
|
|
196
|
+
|
|
197
|
+
**What to Test with Hypothesis.** ICDEV's compliance tools have rich invariants:
|
|
198
|
+
|
|
199
|
+
| Component | Properties to Test |
|
|
200
|
+
|-----------|-------------------|
|
|
201
|
+
| `crosswalk_engine.py` | Every valid NIST control maps to >= 1 framework; coverage percentages are 0.0-1.0; implementing a control never decreases coverage |
|
|
202
|
+
| `nist_lookup.py` | Control IDs follow pattern `[A-Z]{2}-[0-9]+`; every control has a family; enhancement IDs include parent |
|
|
203
|
+
| `zta_maturity_scorer.py` | Scores are 0.0-1.0; adding security measures never decreases score; all 7 pillars are always present |
|
|
204
|
+
| `sbd_assessor.py` | 35 SBD requirements are always evaluated; pillar mapping covers all 8 Cloudyrion pillars |
|
|
205
|
+
| `control_mapper.py` | Activity-to-control mappings are deterministic; same activity always maps to same controls |
|
|
206
|
+
| `agent_trust_scorer.py` | Trust scores are 0.0-1.0; violations always decrease score; trust levels correspond to score ranges |
|
|
207
|
+
|
|
208
|
+
**Example Hypothesis Tests:**
|
|
209
|
+
|
|
210
|
+
```python
|
|
211
|
+
# tests/test_compliance_properties.py
|
|
212
|
+
from hypothesis import given, strategies as st, assume
|
|
213
|
+
|
|
214
|
+
# Strategy for valid NIST 800-53 control IDs
|
|
215
|
+
nist_control_ids = st.from_regex(
|
|
216
|
+
r"(AC|AT|AU|CA|CM|CP|IA|IR|MA|MP|PE|PL|PM|PS|PT|RA|SA|SC|SI|SR)-[0-9]{1,2}",
|
|
217
|
+
fullmatch=True,
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
@given(control_id=nist_control_ids)
|
|
221
|
+
def test_crosswalk_coverage_is_bounded(control_id):
|
|
222
|
+
"""Coverage percentage must always be between 0.0 and 1.0."""
|
|
223
|
+
result = crosswalk_engine.get_coverage(control_id)
|
|
224
|
+
if result["found"]:
|
|
225
|
+
assert 0.0 <= result["coverage"] <= 1.0
|
|
226
|
+
|
|
227
|
+
@given(score=st.floats(min_value=0.0, max_value=1.0))
|
|
228
|
+
def test_trust_level_always_assigned(score):
|
|
229
|
+
"""Every valid score must map to exactly one trust level."""
|
|
230
|
+
level = AgentTrustScorer.score_to_level(score)
|
|
231
|
+
assert level in ("normal", "degraded", "untrusted", "blocked")
|
|
232
|
+
|
|
233
|
+
@given(
|
|
234
|
+
scores=st.lists(
|
|
235
|
+
st.floats(min_value=0.0, max_value=1.0),
|
|
236
|
+
min_size=7, max_size=7,
|
|
237
|
+
)
|
|
238
|
+
)
|
|
239
|
+
def test_zta_overall_is_weighted_average(scores):
|
|
240
|
+
"""Overall ZTA score must be a valid weighted average of pillar scores."""
|
|
241
|
+
pillars = dict(zip(
|
|
242
|
+
["identity", "device", "network", "application", "data",
|
|
243
|
+
"visibility", "automation"],
|
|
244
|
+
scores,
|
|
245
|
+
))
|
|
246
|
+
overall = zta_scorer.compute_overall(pillars)
|
|
247
|
+
assert min(scores) <= overall <= max(scores)
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
**Agentic Property-Based Testing.** A 2025 arXiv paper describes using Claude Code
|
|
251
|
+
as an agent that generates Hypothesis PBTs targeting Python functions, modules, or
|
|
252
|
+
entire codebases. This approach found novel bugs across the Python ecosystem. For
|
|
253
|
+
ICDEV, this means PBT generation can be partially automated:
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
# Use Claude Code to generate Hypothesis tests for a module
|
|
257
|
+
claude "Generate Hypothesis property-based tests for tools/compliance/crosswalk_engine.py
|
|
258
|
+
focusing on invariants: coverage bounds, monotonic mapping, idempotent lookups"
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
### 1.4 Snapshot Testing for Generated Artifacts
|
|
263
|
+
|
|
264
|
+
**When to Use Snapshots.** ICDEV generates structured compliance artifacts (SSP,
|
|
265
|
+
POAM, SBOM, OSCAL documents, CycloneDX JSON). These artifacts have stable structure
|
|
266
|
+
but dynamic content (timestamps, UUIDs, version numbers). Snapshot testing catches
|
|
267
|
+
unintended structural regressions while allowing expected dynamic fields to change.
|
|
268
|
+
|
|
269
|
+
**Syrupy Framework.** Syrupy is the standard pytest snapshot plugin (used by
|
|
270
|
+
Home Assistant, AWS CDK, and many large Python projects). It stores human-readable
|
|
271
|
+
snapshot files alongside tests, which are committed to version control:
|
|
272
|
+
|
|
273
|
+
```python
|
|
274
|
+
# tests/test_compliance_snapshots.py
|
|
275
|
+
import re
|
|
276
|
+
import json
|
|
277
|
+
|
|
278
|
+
def normalize(output: dict) -> dict:
|
|
279
|
+
"""Strip dynamic fields before snapshot comparison."""
|
|
280
|
+
s = json.dumps(output, indent=2, sort_keys=True)
|
|
281
|
+
# Normalize timestamps
|
|
282
|
+
s = re.sub(r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}", "TIMESTAMP", s)
|
|
283
|
+
# Normalize UUIDs
|
|
284
|
+
s = re.sub(r"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}",
|
|
285
|
+
"UUID", s)
|
|
286
|
+
return json.loads(s)
|
|
287
|
+
|
|
288
|
+
def test_ssp_structure(snapshot):
|
|
289
|
+
result = ssp_generator.generate(project_id="test-project", baseline="moderate")
|
|
290
|
+
assert normalize(result) == snapshot
|
|
291
|
+
|
|
292
|
+
def test_sbom_cyclonedx_structure(snapshot):
|
|
293
|
+
result = sbom_generator.generate(project_dir="/test", format="cyclonedx")
|
|
294
|
+
assert normalize(result) == snapshot
|
|
295
|
+
|
|
296
|
+
def test_oscal_assessment_results(snapshot):
|
|
297
|
+
result = cato_live_engine.generate_assessment(project_id="test")
|
|
298
|
+
assert normalize(result) == snapshot
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
Update snapshots intentionally: `pytest --snapshot-update`
|
|
302
|
+
|
|
303
|
+
**When NOT to Use Snapshots.** Avoid for LLM-generated narrative text (too
|
|
304
|
+
variable). Use semantic similarity + rubric evaluation instead.
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
### 1.5 Mutation Testing Applicability
|
|
308
|
+
|
|
309
|
+
**What Mutation Testing Reveals.** Mutation testing modifies source code (e.g.,
|
|
310
|
+
changing `>=` to `>`, removing a conditional branch) and checks whether tests
|
|
311
|
+
detect the mutation. Surviving mutants indicate weak test coverage.
|
|
312
|
+
|
|
313
|
+
**Tool Selection for Python.** `mutmut` (pure Python) and `cosmic-ray` (more
|
|
314
|
+
features, slower) are the primary options. For ICDEV's 410+ tool files, use
|
|
315
|
+
targeted mutation testing on high-value deterministic components:
|
|
316
|
+
|
|
317
|
+
| Component Category | Mutation Value | Rationale | Tool Files |
|
|
318
|
+
|-------------------|---------------|-----------|------------|
|
|
319
|
+
| Compliance rule engines | **High** | Pure deterministic logic; boundary conditions critical | `crosswalk_engine.py`, `nist_lookup.py`, `control_mapper.py` |
|
|
320
|
+
| Scoring algorithms | **High** | Threshold comparisons; weighted averages | `zta_maturity_scorer.py`, `agent_trust_scorer.py`, `readiness_scorer.py` |
|
|
321
|
+
| Security detectors | **High** | False negatives are security risks | `prompt_injection_detector.py`, `secret_detector.py` |
|
|
322
|
+
| LLM router logic | **Medium** | Routing decisions are deterministic; provider probing is not | `router.py` (routing logic only) |
|
|
323
|
+
| Data parsers | **Medium** | Schema validation, field extraction | `xmi_parser.py`, `reqif_parser.py` |
|
|
324
|
+
| LLM-dependent generators | **Low** | Output depends on model; mutations in prompt assembly hard to detect | `narrative_workflow.py`, `ssp_generator.py` |
|
|
325
|
+
| Dashboard/UI code | **Low** | Visual rendering; better tested with E2E | `app.py`, templates |
|
|
326
|
+
|
|
327
|
+
**Targeted Execution:**
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
# Mutate only the crosswalk engine
|
|
331
|
+
mutmut run --paths-to-mutate tools/compliance/crosswalk_engine.py \
|
|
332
|
+
--tests-dir tests/ --runner "pytest tests/test_crosswalk.py"
|
|
333
|
+
|
|
334
|
+
# View surviving mutants
|
|
335
|
+
mutmut results
|
|
336
|
+
mutmut show <mutant_id>
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
### 1.6 Testing Prompt Chains and LLM Routing
|
|
341
|
+
|
|
342
|
+
**ICDEV's Prompt Chains.** The `tools/agent/prompt_chain_executor.py` runs
|
|
343
|
+
multi-step LLM reasoning chains defined in `args/prompt_chains.yaml` (e.g.,
|
|
344
|
+
`plan_critique_refine`, `scout_analyze_recommend`). Testing at three levels:
|
|
345
|
+
|
|
346
|
+
**Level 1: Unit (Mock LLM, Test Orchestration).** Mock the LLM provider and
|
|
347
|
+
verify chain mechanics: step ordering, input/output threading, error handling,
|
|
348
|
+
early termination conditions:
|
|
349
|
+
|
|
350
|
+
```python
|
|
351
|
+
def test_chain_executes_all_steps():
|
|
352
|
+
with mock_llm(responses=["plan text", "critique text", "refined text"]):
|
|
353
|
+
result = execute_chain("plan_critique_refine", input="design auth flow")
|
|
354
|
+
assert result["steps_completed"] == 3
|
|
355
|
+
assert result["step_names"] == ["plan", "critique", "refine"]
|
|
356
|
+
# Verify output of step N is input to step N+1
|
|
357
|
+
assert "plan text" in result["steps"][1]["input"]
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
**Level 2: Integration (Deterministic Model Stub).** Use a local small model
|
|
361
|
+
(or canned responses) to verify end-to-end flow without cloud API calls:
|
|
362
|
+
|
|
363
|
+
```python
|
|
364
|
+
@pytest.mark.integration
|
|
365
|
+
def test_chain_with_local_model():
|
|
366
|
+
"""Run chain against Ollama qwen3.5 (requires Ollama running)."""
|
|
367
|
+
result = execute_chain(
|
|
368
|
+
"plan_critique_refine",
|
|
369
|
+
input="design a FedRAMP-compliant auth flow",
|
|
370
|
+
provider_override="ollama",
|
|
371
|
+
)
|
|
372
|
+
assert result["status"] == "completed"
|
|
373
|
+
assert len(result["final_output"]) > 100
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
**Level 3: Evaluation (Periodic, Real Models).** Run nightly in CI with real
|
|
377
|
+
models and score with rubrics. These are not pass/fail gates but quality
|
|
378
|
+
dashboards:
|
|
379
|
+
|
|
380
|
+
```python
|
|
381
|
+
@pytest.mark.nightly
|
|
382
|
+
def test_chain_quality_evaluation():
|
|
383
|
+
result = execute_chain("plan_critique_refine", input=STANDARD_PROMPT)
|
|
384
|
+
quality = evaluate_with_rubric(result["final_output"], QUALITY_RUBRIC)
|
|
385
|
+
# Log to metrics, don't hard-fail
|
|
386
|
+
assert quality["overall"] >= 6, f"Quality regression: {quality}"
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
**LLM Router Testing.** The router (`tools/llm/router.py`) has deterministic
|
|
390
|
+
routing logic (config-driven) and non-deterministic execution (LLM calls).
|
|
391
|
+
Test them separately:
|
|
392
|
+
|
|
393
|
+
```python
|
|
394
|
+
# Test routing logic (deterministic)
|
|
395
|
+
def test_scanner_tier_routes_to_ollama():
|
|
396
|
+
router = LLMRouter()
|
|
397
|
+
provider, model = router.resolve_provider("compliance_export")
|
|
398
|
+
assert provider == "ollama" # Scanner tier never uses Claude
|
|
399
|
+
|
|
400
|
+
def test_worker_tier_uses_two_tier():
|
|
401
|
+
router = LLMRouter()
|
|
402
|
+
provider, model = router.resolve_provider("code_generation")
|
|
403
|
+
# Worker tier should attempt qwen3.5 first
|
|
404
|
+
assert "qwen" in model.lower() or provider == "ollama"
|
|
405
|
+
|
|
406
|
+
# Test fallback behavior (mock providers)
|
|
407
|
+
def test_fallback_chain_on_provider_failure():
|
|
408
|
+
with mock_provider_unavailable("ollama"):
|
|
409
|
+
router = LLMRouter()
|
|
410
|
+
provider, model = router.resolve_provider("code_generation")
|
|
411
|
+
assert provider == "bedrock" # Falls back to Claude
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
**Evaluation Frameworks for 2025-2026.** Key tools:
|
|
415
|
+
|
|
416
|
+
| Framework | Best For | ICDEV Relevance |
|
|
417
|
+
|-----------|---------|-----------------|
|
|
418
|
+
| DeepEval | Pytest-integrated LLM evals; G-Eval rubrics | Testing narrative quality |
|
|
419
|
+
| RAGAS | RAG pipeline evaluation | Testing RAG subsystem (Phase 64) |
|
|
420
|
+
| Inspect AI | Multi-step agent behavior | Testing prompt chains |
|
|
421
|
+
| Promptfoo | Prompt regression testing | Detecting prompt template regressions |
|
|
422
|
+
| LangSmith | Tracing + evaluation combined | Development-time debugging |
|
|
423
|
+
|
|
424
|
+
---
|
|
425
|
+
|
|
426
|
+
## 2. DevSecOps Pipeline Best Practices
|
|
427
|
+
|
|
428
|
+
### 2.1 Shift-Left Security for Federal Systems
|
|
429
|
+
|
|
430
|
+
**Executive Order 14028 Compliance.** EO 14028 (May 2021) mandates SBOMs, secure
|
|
431
|
+
development practices, and attestation for all federal software suppliers. NIST
|
|
432
|
+
responded with SSDF v1.2 (draft 2025). In 2026, SBOM mandates are transitioning
|
|
433
|
+
from aspiration to enforcement.
|
|
434
|
+
|
|
435
|
+
**ICDEV's Current Position.** ICDEV already implements shift-left security:
|
|
436
|
+
- SAST: `tools/security/sast_runner.py`
|
|
437
|
+
- Dependency audit: `tools/security/dependency_auditor.py`
|
|
438
|
+
- Secret detection: `tools/security/secret_detector.py`
|
|
439
|
+
- Container scanning: `tools/security/container_scanner.py`
|
|
440
|
+
- SBOM generation: `tools/compliance/sbom_generator.py`
|
|
441
|
+
- Prompt injection detection: `tools/security/prompt_injection_detector.py`
|
|
442
|
+
|
|
443
|
+
**Gap: Pipeline Gate Orchestration.** The individual tools exist but need
|
|
444
|
+
declarative orchestration that enforces gate ordering and prevents skipping.
|
|
445
|
+
The `args/pipeline_gates.yaml` file (created during this research) addresses
|
|
446
|
+
this with 5 stages: pre_commit, build, integration, pre_deploy, post_deploy.
|
|
447
|
+
|
|
448
|
+
**Key Principle:** Every security gate must be:
|
|
449
|
+
1. **Automated** -- no manual approval steps for routine checks
|
|
450
|
+
2. **Immovable** -- blocking gates cannot be bypassed without documented exception
|
|
451
|
+
3. **Audited** -- every gate result (pass/fail/skip) logged to audit_trail
|
|
452
|
+
4. **Deterministic** -- same code + same config = same gate result
|
|
453
|
+
|
|
454
|
+
|
|
455
|
+
### 2.2 Continuous ATO (cATO) Pipeline Patterns
|
|
456
|
+
|
|
457
|
+
**DoD cATO Evaluation Criteria (2024).** The DoD CIO published formal cATO
|
|
458
|
+
evaluation criteria requiring:
|
|
459
|
+
|
|
460
|
+
1. **Active Cyber Defense** -- Continuous monitoring, automated response
|
|
461
|
+
2. **Secure Software Supply Chain** -- SBOM, provenance, attestation
|
|
462
|
+
3. **DevSecOps Pipelines** -- Automated security at every stage
|
|
463
|
+
4. **Continuous Monitoring** -- Real-time evidence collection
|
|
464
|
+
5. **Rapid Patch Management** -- Automated vulnerability remediation
|
|
465
|
+
|
|
466
|
+
**ICDEV Alignment:**
|
|
467
|
+
|
|
468
|
+
| cATO Requirement | ICDEV Implementation | Status |
|
|
469
|
+
|-----------------|---------------------|--------|
|
|
470
|
+
| Continuous monitoring | `cato_live_engine.py` OSCAL streaming | Implemented (F1) |
|
|
471
|
+
| SBOM on every build | `sbom_generator.py` + pipeline gate | Implemented |
|
|
472
|
+
| Automated scanning | SAST/DAST/SCA/container | Implemented |
|
|
473
|
+
| Immutable audit trail | Append-only audit_trail table | Implemented (D6) |
|
|
474
|
+
| Evidence freshness | 30-day threshold in cATO engine | Implemented (D-INV-2) |
|
|
475
|
+
| Provenance tracking | W3C PROV-AGENT (D287) | Implemented |
|
|
476
|
+
| Rapid patching | CVE triage with SLA (D-SC-*) | Implemented |
|
|
477
|
+
|
|
478
|
+
**cATO Pipeline Pattern (recommended for ICDEV):**
|
|
479
|
+
|
|
480
|
+
```
|
|
481
|
+
Code Commit
|
|
482
|
+
|
|
|
483
|
+
v
|
|
484
|
+
[Pre-commit Gates] -> Secret detection, lint, CUI marking
|
|
485
|
+
|
|
|
486
|
+
v
|
|
487
|
+
[Build] -> Compile, SAST, dep audit, SBOM generation
|
|
488
|
+
|
|
|
489
|
+
v
|
|
490
|
+
[Integration] -> Contract tests, prompt injection scan, AI BOM
|
|
491
|
+
|
|
|
492
|
+
v
|
|
493
|
+
[Pre-deploy] -> Container scan, STIG, SbD, ZTA maturity, SLSA provenance
|
|
494
|
+
|
|
|
495
|
+
v
|
|
496
|
+
[Deploy to Staging] -> Smoke tests, E2E, acceptance criteria
|
|
497
|
+
|
|
|
498
|
+
v
|
|
499
|
+
[cATO Evidence] -> OSCAL assessment-results streamed per-control
|
|
500
|
+
|
|
|
501
|
+
v
|
|
502
|
+
[Deploy to Production] -> Canary -> Full rollout
|
|
503
|
+
|
|
|
504
|
+
v
|
|
505
|
+
[Continuous Monitoring] -> Evidence freshness, trust scoring, telemetry
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
**The Software Factory Model.** DoD software factories (Platform One, Black Pearl,
|
|
509
|
+
Kessel Run) establish reusable DevSecOps platforms. ICDEV's architecture aligns
|
|
510
|
+
with this model: the GOTCHA framework provides the reusable platform, and child
|
|
511
|
+
applications inherit the pipeline, gates, and compliance posture.
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
### 2.3 SBOM-Driven Vulnerability Management
|
|
515
|
+
|
|
516
|
+
**Current State (2026).** SBOMs are no longer optional for federal suppliers.
|
|
517
|
+
Organizations that build with automated SBOM generation from day one have a
|
|
518
|
+
structural advantage in defense procurement.
|
|
519
|
+
|
|
520
|
+
**ICDEV's SBOM Capabilities:**
|
|
521
|
+
- Software SBOM: `sbom_generator.py` (CycloneDX)
|
|
522
|
+
- Firmware SBOM: `firmware_sbom.py` (CycloneDX 1.5 + VEX CSAF 2.0, D-INV-45/46)
|
|
523
|
+
- AI BOM: `ai_bom_generator.py` (AI component inventory)
|
|
524
|
+
- Dependency graph: `dependency_graph.py` (SQL adjacency list, D27)
|
|
525
|
+
|
|
526
|
+
**Recommended Enhancement: VEX-Driven Triage.** Vulnerability Exploitability
|
|
527
|
+
eXchange (VEX) documents contextualize SBOM vulnerabilities. Not every CVE in
|
|
528
|
+
a dependency is exploitable in your specific deployment. ICDEV's `cve_triager.py`
|
|
529
|
+
should consume VEX data to automatically downgrade non-exploitable findings:
|
|
530
|
+
|
|
531
|
+
```
|
|
532
|
+
SBOM (what we ship) + CVE feeds (what's vulnerable) + VEX (what's exploitable)
|
|
533
|
+
-> Actionable vulnerability list (what we must fix)
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
|
|
537
|
+
### 2.4 Policy-as-Code Maturity Model
|
|
538
|
+
|
|
539
|
+
ICDEV already generates Kyverno and OPA policies via `policy_generator.py`.
|
|
540
|
+
The maturity model for policy-as-code:
|
|
541
|
+
|
|
542
|
+
| Level | Description | ICDEV Status | Action |
|
|
543
|
+
|-------|-------------|-------------|--------|
|
|
544
|
+
| 1 - Manual | Policies in PDFs/wikis | Surpassed | -- |
|
|
545
|
+
| 2 - Coded | Policies in Rego/YAML | **Current** | `policy_generator.py` generates policies |
|
|
546
|
+
| 3 - Tested | Policy unit tests with conftest | **Gap** | Add `tests/test_policies.py` with conftest |
|
|
547
|
+
| 4 - Enforced | Admission controllers block violations | **Partial** | Kyverno generation exists; deployment needed |
|
|
548
|
+
| 5 - Continuous | Policy dashboards, drift detection | **Gap** | Add policy compliance to `vsm_engine.py` |
|
|
549
|
+
|
|
550
|
+
**Kyverno vs OPA for ICDEV:**
|
|
551
|
+
|
|
552
|
+
| Aspect | Kyverno | OPA/Gatekeeper |
|
|
553
|
+
|--------|---------|----------------|
|
|
554
|
+
| Language | YAML (developer-friendly) | Rego (learning curve) |
|
|
555
|
+
| K8s native | Yes (CRDs) | Via Gatekeeper |
|
|
556
|
+
| Mutation | Built-in | Separate webhook |
|
|
557
|
+
| Audit | Built-in reporting | External |
|
|
558
|
+
| ICDEV support | `policy_generator.py --engine kyverno` | `policy_generator.py --engine opa` |
|
|
559
|
+
| Recommendation | **Primary** for ICDEV | Secondary for complex rules |
|
|
560
|
+
|
|
561
|
+
|
|
562
|
+
### 2.5 GitOps for Infrastructure
|
|
563
|
+
|
|
564
|
+
**ArgoCD for Federal Deployments.** ArgoCD is the dominant GitOps tool for DoD
|
|
565
|
+
Kubernetes environments in 2025-2026, with widespread adoption in AWS GovCloud.
|
|
566
|
+
Key benefits for ICDEV:
|
|
567
|
+
|
|
568
|
+
- **Drift detection**: ArgoCD continuously compares Git state to cluster state,
|
|
569
|
+
aligning with ICDEV's `sync_engine.py` drift detection philosophy
|
|
570
|
+
- **Multi-cluster**: Manage IL4/IL5/IL6 clusters from a single control plane
|
|
571
|
+
with RBAC per clearance level
|
|
572
|
+
- **Audit**: Every sync logged with Git commit SHA, user, timestamp (NIST AU)
|
|
573
|
+
- **Self-heal**: Automatically reverts unauthorized manual changes
|
|
574
|
+
|
|
575
|
+
**ArgoCD + ICDEV Integration Pattern:**
|
|
576
|
+
|
|
577
|
+
```yaml
|
|
578
|
+
# argocd/applications/icdev-compliance-agent.yaml
|
|
579
|
+
apiVersion: argoproj.io/v1alpha1
|
|
580
|
+
kind: Application
|
|
581
|
+
metadata:
|
|
582
|
+
name: icdev-compliance-agent
|
|
583
|
+
namespace: argocd
|
|
584
|
+
spec:
|
|
585
|
+
project: icdev-agents
|
|
586
|
+
source:
|
|
587
|
+
repoURL: https://github.com/icdev-ai/icdev.git
|
|
588
|
+
targetRevision: main
|
|
589
|
+
path: k8s/agents/compliance
|
|
590
|
+
destination:
|
|
591
|
+
server: https://kubernetes.default.svc
|
|
592
|
+
namespace: icdev
|
|
593
|
+
syncPolicy:
|
|
594
|
+
automated:
|
|
595
|
+
prune: true
|
|
596
|
+
selfHeal: true
|
|
597
|
+
syncOptions:
|
|
598
|
+
- CreateNamespace=true
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
**Dual-Tool Strategy.** Many organizations use both: ArgoCD for application
|
|
602
|
+
delivery, Flux for cluster bootstrapping. For ICDEV, ArgoCD is sufficient
|
|
603
|
+
as the primary tool.
|
|
604
|
+
|
|
605
|
+
**Best Practices:**
|
|
606
|
+
- Separate app code and K8s manifests into different repos (or directories)
|
|
607
|
+
- Use Kustomize overlays for environments (dev/staging/production/air-gap)
|
|
608
|
+
- Pin image versions explicitly (never use `:latest` in production)
|
|
609
|
+
- Enable self-heal and prune features
|
|
610
|
+
- Never commit plain Secrets to Git (use sealed-secrets or external-secrets)
|
|
611
|
+
|
|
612
|
+
|
|
613
|
+
### 2.6 Supply Chain Security (SLSA Framework)
|
|
614
|
+
|
|
615
|
+
**SLSA Levels (v1.1/v1.2).** SLSA provides progressive security levels for
|
|
616
|
+
software supply chain integrity:
|
|
617
|
+
|
|
618
|
+
| Level | Requirements | ICDEV Status | Action |
|
|
619
|
+
|-------|-------------|-------------|--------|
|
|
620
|
+
| 0 | No provenance | Surpassed | -- |
|
|
621
|
+
| 1 | Build provenance generated | **Partial** | audit_trail captures builds; need SLSA-format provenance |
|
|
622
|
+
| 2 | Hosted build + authenticated contributors | **Available** | GitHub Actions with OIDC; sign with cosign/Sigstore |
|
|
623
|
+
| 3 | Isolated builds, tamper-evident logs, non-falsifiable provenance | **Not yet** | Ephemeral build containers needed |
|
|
624
|
+
|
|
625
|
+
**SLSA v1.2 Source Track (2025).** The new Source Track covers threats from
|
|
626
|
+
source code authoring, reviewing, and management. This aligns with ICDEV's
|
|
627
|
+
existing code review gates in `args/security_gates.yaml`.
|
|
628
|
+
|
|
629
|
+
**Achieving SLSA Level 2 (Weeks, Not Months):**
|
|
630
|
+
|
|
631
|
+
1. Use GitHub Actions with OIDC for build provenance
|
|
632
|
+
2. Sign artifacts with Sigstore/cosign
|
|
633
|
+
3. Generate SLSA provenance attestation via `slsa-github-generator`
|
|
634
|
+
4. Verify provenance in the pre-deploy pipeline gate
|
|
635
|
+
|
|
636
|
+
```yaml
|
|
637
|
+
# .github/workflows/slsa-build.yml
|
|
638
|
+
jobs:
|
|
639
|
+
build:
|
|
640
|
+
runs-on: ubuntu-latest
|
|
641
|
+
outputs:
|
|
642
|
+
digests: ${{ steps.hash.outputs.digests }}
|
|
643
|
+
steps:
|
|
644
|
+
- uses: actions/checkout@v4
|
|
645
|
+
- run: python -m build
|
|
646
|
+
- id: hash
|
|
647
|
+
run: sha256sum dist/* | base64 -w0 > digests.txt
|
|
648
|
+
|
|
649
|
+
provenance:
|
|
650
|
+
needs: build
|
|
651
|
+
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.1.0
|
|
652
|
+
with:
|
|
653
|
+
base64-subjects: ${{ needs.build.outputs.digests }}
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
**ICDEV Already Has:** `args/security_gates.yaml` includes `swft` gates that
|
|
657
|
+
check for SLSA provenance (`slsa_provenance_missing` blocks, `min_slsa_level: 2`).
|
|
658
|
+
|
|
659
|
+
---
|
|
660
|
+
|
|
661
|
+
## 3. Code Quality and Maintainability
|
|
662
|
+
|
|
663
|
+
### 3.1 Clean Architecture Applied to AI Agent Systems
|
|
664
|
+
|
|
665
|
+
**Principles (2025-2026).** Clean Architecture organizes software into concentric
|
|
666
|
+
layers where dependencies point inward toward core business logic. Python's
|
|
667
|
+
dynamic nature makes this straightforward without heavy frameworks. Sam Keen's
|
|
668
|
+
"Clean Architecture with Python" (Packt, 2025) is the definitive reference.
|
|
669
|
+
|
|
670
|
+
**How GOTCHA Aligns with Clean Architecture.** ICDEV's 6-layer GOTCHA framework
|
|
671
|
+
already embodies clean architecture principles:
|
|
672
|
+
|
|
673
|
+
| Clean Architecture Layer | GOTCHA Equivalent | Direction |
|
|
674
|
+
|-------------------------|-------------------|-----------|
|
|
675
|
+
| Entities (business rules) | Tools (`tools/`) | Inner (no outward deps) |
|
|
676
|
+
| Use Cases (orchestration) | Goals (`goals/`) + You (AI) | Middle |
|
|
677
|
+
| Interface Adapters | Args (`args/`), Context (`context/`) | Outer ring |
|
|
678
|
+
| Frameworks & Drivers | MCP servers, Dashboard, A2A | Outermost |
|
|
679
|
+
|
|
680
|
+
**Key Gap: Tool-to-Tool Dependencies.** Some tools import directly from other
|
|
681
|
+
tools (e.g., `crosswalk_engine.py` imports `get_connection` from `storage.py`).
|
|
682
|
+
This is acceptable for the storage layer (it's infrastructure) but problematic
|
|
683
|
+
when domain tools import from each other.
|
|
684
|
+
|
|
685
|
+
**Recommendation: Dependency Rule Enforcement.**
|
|
686
|
+
|
|
687
|
+
```python
|
|
688
|
+
# tools/linting/dep_check.py
|
|
689
|
+
# Verify that compliance tools don't import from security tools directly
|
|
690
|
+
# (they should communicate via the orchestrator or shared interfaces)
|
|
691
|
+
|
|
692
|
+
FORBIDDEN_IMPORTS = {
|
|
693
|
+
"tools/compliance/": ["tools/security/", "tools/devsecops/"],
|
|
694
|
+
"tools/security/": ["tools/compliance/", "tools/mbse/"],
|
|
695
|
+
"tools/mbse/": ["tools/security/", "tools/govcon/"],
|
|
696
|
+
}
|
|
697
|
+
```
|
|
698
|
+
|
|
699
|
+
### 3.2 SOLID Principles in Python Agent Code
|
|
700
|
+
|
|
701
|
+
**Single Responsibility.** Each of ICDEV's 410+ tool files follows SRP well --
|
|
702
|
+
one job per script. The `code_analyzer.py` enforces this with cyclomatic
|
|
703
|
+
complexity checks (gate: max avg complexity 25).
|
|
704
|
+
|
|
705
|
+
**Interface Segregation.** Python uses abstract base classes (ABCs) for
|
|
706
|
+
interfaces. ICDEV's `tools/llm/provider.py` defines `LLMProvider` and
|
|
707
|
+
`EmbeddingProvider` ABCs that all providers implement. Extend this pattern:
|
|
708
|
+
|
|
709
|
+
```python
|
|
710
|
+
# tools/core/interfaces.py
|
|
711
|
+
from abc import ABC, abstractmethod
|
|
712
|
+
|
|
713
|
+
class ComplianceScanner(ABC):
|
|
714
|
+
"""Interface for any compliance scanning tool."""
|
|
715
|
+
|
|
716
|
+
@abstractmethod
|
|
717
|
+
def scan(self, project_id: str) -> dict:
|
|
718
|
+
"""Run the scan and return findings."""
|
|
719
|
+
...
|
|
720
|
+
|
|
721
|
+
@abstractmethod
|
|
722
|
+
def gate_check(self, findings: dict) -> bool:
|
|
723
|
+
"""Return True if findings pass the gate."""
|
|
724
|
+
...
|
|
725
|
+
|
|
726
|
+
# Implemented by: stig_checker.py, sbd_assessor.py, fedramp_assessor.py, etc.
|
|
727
|
+
```
|
|
728
|
+
|
|
729
|
+
**Dependency Inversion.** High-level modules should not depend on low-level
|
|
730
|
+
modules; both should depend on abstractions. The DI container created in
|
|
731
|
+
`tools/core/container.py` enables this:
|
|
732
|
+
|
|
733
|
+
```python
|
|
734
|
+
# At startup:
|
|
735
|
+
container.register("storage", lambda: get_connection(), singleton=False)
|
|
736
|
+
container.register("llm_router", lambda: LLMRouter(), singleton=True)
|
|
737
|
+
container.register("audit", lambda: AuditTrail(container.resolve("storage")))
|
|
738
|
+
|
|
739
|
+
# In tests:
|
|
740
|
+
container.register("storage", lambda: sqlite3.connect(":memory:"))
|
|
741
|
+
container.register("llm_router", lambda: MockLLMRouter())
|
|
742
|
+
```
|
|
743
|
+
|
|
744
|
+
|
|
745
|
+
### 3.3 Error Handling Patterns for Distributed Agent Systems
|
|
746
|
+
|
|
747
|
+
**Problem.** When 12 agents communicate via JSON-RPC 2.0, error propagation
|
|
748
|
+
becomes complex. Without standardized errors, debugging requires string-matching
|
|
749
|
+
on exception messages across agent boundaries.
|
|
750
|
+
|
|
751
|
+
**Solution: Structured Error Hierarchy.** The `tools/core/errors.py` module
|
|
752
|
+
(created during this research) provides 14 exception classes across 5 domains:
|
|
753
|
+
|
|
754
|
+
```
|
|
755
|
+
ICDEVError (base)
|
|
756
|
+
├── AgentError
|
|
757
|
+
│ ├── AgentUnavailableError (retryable=True)
|
|
758
|
+
│ ├── AgentTimeoutError (retryable=True)
|
|
759
|
+
│ └── AgentContractError (retryable=False)
|
|
760
|
+
├── ComplianceError
|
|
761
|
+
│ ├── ComplianceGateError (retryable=False, carries findings)
|
|
762
|
+
│ └── ClassificationError (retryable=False)
|
|
763
|
+
├── LLMError
|
|
764
|
+
│ ├── LLMFallbackExhaustedError (retryable=False)
|
|
765
|
+
│ └── LLMProviderError (retryable=True)
|
|
766
|
+
├── StorageError
|
|
767
|
+
│ ├── StorageConnectionError (retryable=True)
|
|
768
|
+
│ └── StorageMigrationError (retryable=False)
|
|
769
|
+
└── SecurityError
|
|
770
|
+
├── PromptInjectionError (retryable=False)
|
|
771
|
+
└── TrustScoreError (retryable=False)
|
|
772
|
+
```
|
|
773
|
+
|
|
774
|
+
Every error carries:
|
|
775
|
+
- `retryable` flag: Enables programmatic retry/DLQ decisions
|
|
776
|
+
- `code`: Machine-readable identifier for JSON-RPC error responses
|
|
777
|
+
- `context`: Structured metadata dict for audit trail and OTel spans
|
|
778
|
+
- `to_dict()`: Serialization for JSON-RPC error responses
|
|
779
|
+
|
|
780
|
+
|
|
781
|
+
### 3.4 OpenTelemetry Observability Best Practices
|
|
782
|
+
|
|
783
|
+
**OpenTelemetry Maturity (2025-2026).** OTel is now CNCF-graduated with stable
|
|
784
|
+
APIs for traces, metrics, logs, and profiling (4th signal, stable March 2024).
|
|
785
|
+
Python has comprehensive auto-instrumentation and 100+ supported libraries.
|
|
786
|
+
|
|
787
|
+
**ICDEV Already Has:** Dual-mode tracer (D280: OTel production, SQLite air-gapped,
|
|
788
|
+
NullTracer fallback). The recommendations below mature this foundation.
|
|
789
|
+
|
|
790
|
+
**GenAI Semantic Conventions.** OpenTelemetry published experimental semantic
|
|
791
|
+
conventions specifically for AI agent systems (2025):
|
|
792
|
+
|
|
793
|
+
```python
|
|
794
|
+
# tools/observability/otel_conventions.py
|
|
795
|
+
# Following OTel GenAI semantic conventions (experimental, 2025)
|
|
796
|
+
|
|
797
|
+
# Agent span attributes
|
|
798
|
+
AGENT_NAME = "gen_ai.agent.name" # e.g., "compliance"
|
|
799
|
+
AGENT_DESCRIPTION = "gen_ai.agent.description"
|
|
800
|
+
|
|
801
|
+
# LLM invocation attributes
|
|
802
|
+
GEN_AI_SYSTEM = "gen_ai.system" # e.g., "anthropic", "ollama"
|
|
803
|
+
GEN_AI_REQUEST_MODEL = "gen_ai.request.model"
|
|
804
|
+
GEN_AI_RESPONSE_MODEL = "gen_ai.response.model"
|
|
805
|
+
GEN_AI_REQUEST_MAX_TOKENS = "gen_ai.request.max_tokens"
|
|
806
|
+
GEN_AI_USAGE_INPUT_TOKENS = "gen_ai.usage.input_tokens"
|
|
807
|
+
GEN_AI_USAGE_OUTPUT_TOKENS = "gen_ai.usage.output_tokens"
|
|
808
|
+
|
|
809
|
+
# ICDEV custom attributes (namespaced)
|
|
810
|
+
ICDEV_PROJECT_ID = "icdev.project_id"
|
|
811
|
+
ICDEV_CLASSIFICATION = "icdev.classification"
|
|
812
|
+
ICDEV_LLM_TIER = "icdev.llm.tier" # planner/worker/scanner
|
|
813
|
+
ICDEV_LLM_FUNCTION = "icdev.llm.function" # e.g., "code_generation"
|
|
814
|
+
ICDEV_GATE_NAME = "icdev.gate.name"
|
|
815
|
+
ICDEV_GATE_RESULT = "icdev.gate.result" # pass/fail/skip
|
|
816
|
+
```
|
|
817
|
+
|
|
818
|
+
**Baggage Propagation.** Pass `project_id`, `session_id`, `classification_level`
|
|
819
|
+
as OTel baggage across agent boundaries so that every span in a distributed trace
|
|
820
|
+
carries this context:
|
|
821
|
+
|
|
822
|
+
```python
|
|
823
|
+
from opentelemetry import baggage, context
|
|
824
|
+
|
|
825
|
+
ctx = baggage.set_baggage("icdev.project_id", project_id)
|
|
826
|
+
ctx = baggage.set_baggage("icdev.classification", "CUI // SP-CTI", context=ctx)
|
|
827
|
+
# All downstream spans inherit this context
|
|
828
|
+
```
|
|
829
|
+
|
|
830
|
+
**Metrics Export.** Export DORA metrics from `vsm_engine.py` as OTel metrics:
|
|
831
|
+
|
|
832
|
+
```python
|
|
833
|
+
from opentelemetry import metrics
|
|
834
|
+
|
|
835
|
+
meter = metrics.get_meter("icdev.vsm")
|
|
836
|
+
deployment_frequency = meter.create_counter("icdev.dora.deployment_frequency")
|
|
837
|
+
lead_time = meter.create_histogram("icdev.dora.lead_time_seconds")
|
|
838
|
+
mttr = meter.create_histogram("icdev.dora.mttr_seconds")
|
|
839
|
+
change_failure_rate = meter.create_gauge("icdev.dora.change_failure_rate")
|
|
840
|
+
```
|
|
841
|
+
|
|
842
|
+
**Best Practices from CNCF (2025):**
|
|
843
|
+
1. Start with auto-instrumentation, add manual spans for business logic
|
|
844
|
+
2. Use the OTel Collector (never send telemetry directly to vendors)
|
|
845
|
+
3. Follow semantic conventions consistently across all 12 agents
|
|
846
|
+
4. Sample intelligently: 100% in staging, head-based sampling in production
|
|
847
|
+
5. Correlate traces, metrics, and logs via trace_id
|
|
848
|
+
|
|
849
|
+
|
|
850
|
+
### 3.5 Technical Debt Management
|
|
851
|
+
|
|
852
|
+
**ICDEV-Specific Debt Items Identified:**
|
|
853
|
+
|
|
854
|
+
| Debt Item | Impact | Effort | Recommendation |
|
|
855
|
+
|-----------|--------|--------|---------------|
|
|
856
|
+
| Direct `sqlite3` import in `router.py` line 13 | Bypasses storage abstraction (D-DB-21) | Low | Replace with `get_connection()` |
|
|
857
|
+
| Logger names use `sparkpilot.*` (e.g., `sparkpilot.llm.router`) | Branding inconsistency after rename to ICDEV | Low | Global rename to `icdev.*` |
|
|
858
|
+
| Test fixtures create schemas inline (e.g., `test_metastore.py`) | Schema drift risk; inline DDL diverges from actual schema | Medium | Share DDL from canonical source or Alembic |
|
|
859
|
+
| 348 tables in a single database | Cognitive load; schema bloat | Medium | Group into PostgreSQL schemas: `core`, `compliance`, `fleet`, `govcon` |
|
|
860
|
+
| No type hints on many older tool files | IDE support degraded; mypy unusable | Medium | Incremental typing starting with `tools/core/` |
|
|
861
|
+
| Some tools still reference `sparkpilot.db` in error messages | Confusing after D-DB-20 migration | Low | Search-and-replace pass |
|
|
862
|
+
|
|
863
|
+
**Tracking Approach.** Use ICDEV's existing code quality infrastructure:
|
|
864
|
+
- `code_analyzer.py` tracks cyclomatic complexity, cognitive complexity, nesting
|
|
865
|
+
- Code quality gate: avg complexity > 25 blocks (D331)
|
|
866
|
+
- Track Technical Debt Ratio (TDR): estimated fix cost / total codebase cost
|
|
867
|
+
- Log debt items to a `technical_debt` table (append-only, NIST AU) with
|
|
868
|
+
priority, estimated effort, and linked ADR
|
|
869
|
+
|
|
870
|
+
**GitHub Debt Insights (2026).** GitHub's new AI-powered Debt Insights feature
|
|
871
|
+
can predict long-term costs of unresolved debt. Consider integrating with
|
|
872
|
+
ICDEV's `analytics/scorecard.py` for a unified health view.
|
|
873
|
+
|
|
874
|
+
---
|
|
875
|
+
|
|
876
|
+
## 4. Configuration Management
|
|
877
|
+
|
|
878
|
+
### 4.1 Feature Flags for Federal Compliance Features
|
|
879
|
+
|
|
880
|
+
**Why Feature Flags for ICDEV.** ICDEV has 12 innovation features (F1-F12),
|
|
881
|
+
optional modules (GovCon, marketplace), and operational modes (air-gap, debug).
|
|
882
|
+
Feature flags enable safe rollout, environment-specific configuration, and
|
|
883
|
+
graceful degradation.
|
|
884
|
+
|
|
885
|
+
**Tool Selection for Air-Gapped Environments.**
|
|
886
|
+
|
|
887
|
+
| Tool | Self-Hosted | Air-Gap | Python SDK | License | Recommendation |
|
|
888
|
+
|------|-----------|---------|-----------|---------|---------------|
|
|
889
|
+
| Unleash | Yes | Yes (FedRAMP/air-gap) | Yes | Open source | **Best for ICDEV** |
|
|
890
|
+
| Flagsmith | Yes | Yes (private cloud) | Yes | Open source | Strong alternative |
|
|
891
|
+
| LaunchDarkly | No | No | Yes | Proprietary | **Not suitable** (SaaS only) |
|
|
892
|
+
| GrowthBook | Yes | Partial | Yes | Open source | Viable |
|
|
893
|
+
| ConfigCat | Yes | Yes | Yes | Freemium | Viable |
|
|
894
|
+
| YAML-based (custom) | Yes | Yes | N/A | N/A | **Current ICDEV approach** |
|
|
895
|
+
|
|
896
|
+
**ICDEV Recommendation: YAML-Based + Unleash.**
|
|
897
|
+
|
|
898
|
+
For the MVP, the `args/feature_flags.yaml` file (created during this research)
|
|
899
|
+
provides zero-dependency feature flags with env var overrides. For production
|
|
900
|
+
multi-tenant deployment, adopt Unleash for dynamic toggling, gradual rollout,
|
|
901
|
+
and per-tenant configuration:
|
|
902
|
+
|
|
903
|
+
```python
|
|
904
|
+
# tools/core/feature_flags.py
|
|
905
|
+
import os
|
|
906
|
+
from pathlib import Path
|
|
907
|
+
|
|
908
|
+
def is_enabled(flag_name: str, environment: str = None) -> bool:
|
|
909
|
+
"""Check if a feature flag is enabled.
|
|
910
|
+
|
|
911
|
+
Resolution order:
|
|
912
|
+
1. Environment variable: ICDEV_FF_{FLAG_NAME_UPPER}
|
|
913
|
+
2. YAML config: args/feature_flags.yaml
|
|
914
|
+
3. Default: False
|
|
915
|
+
"""
|
|
916
|
+
env_var = f"ICDEV_FF_{flag_name.upper()}"
|
|
917
|
+
env_value = os.environ.get(env_var)
|
|
918
|
+
if env_value is not None:
|
|
919
|
+
return env_value.lower() in ("true", "1", "yes")
|
|
920
|
+
|
|
921
|
+
config = _load_flags_yaml()
|
|
922
|
+
flag = config.get("flags", {}).get(flag_name, {})
|
|
923
|
+
|
|
924
|
+
if not flag.get("enabled", False):
|
|
925
|
+
return False
|
|
926
|
+
|
|
927
|
+
# Check air-gap overrides
|
|
928
|
+
air_gap = config.get("flags", {}).get("air_gap_mode", {})
|
|
929
|
+
if air_gap.get("enabled", False):
|
|
930
|
+
overrides = air_gap.get("overrides", {})
|
|
931
|
+
if flag_name in overrides:
|
|
932
|
+
return overrides[flag_name]
|
|
933
|
+
|
|
934
|
+
# Check environment restriction
|
|
935
|
+
allowed_envs = flag.get("environments", [])
|
|
936
|
+
if environment and allowed_envs and environment not in allowed_envs:
|
|
937
|
+
return False
|
|
938
|
+
|
|
939
|
+
return True
|
|
940
|
+
```
|
|
941
|
+
|
|
942
|
+
|
|
943
|
+
### 4.2 Environment-Based Configuration
|
|
944
|
+
|
|
945
|
+
**Four Environments for ICDEV:**
|
|
946
|
+
|
|
947
|
+
| Environment | Storage | LLM | Network | Gates | Classification |
|
|
948
|
+
|------------|---------|-----|---------|-------|---------------|
|
|
949
|
+
| Production | PostgreSQL | Ollama + Bedrock | Full | Strict (all blocking) | CUI // SP-CTI |
|
|
950
|
+
| Staging | PostgreSQL | Ollama + Bedrock | Full | Strict (all blocking) | CUI // SP-CTI |
|
|
951
|
+
| Dev | SQLite | Ollama + Bedrock | Full | Relaxed (warnings only) | CUI // SP-CTI |
|
|
952
|
+
| Air-gap | SQLite | Ollama only | None | Strict + relaxed freshness | CUI // SP-CTI |
|
|
953
|
+
|
|
954
|
+
**Configuration Cascade:**
|
|
955
|
+
|
|
956
|
+
```
|
|
957
|
+
Environment variable (highest priority)
|
|
958
|
+
|
|
|
959
|
+
v
|
|
960
|
+
args/feature_flags.yaml (environment-specific)
|
|
961
|
+
|
|
|
962
|
+
v
|
|
963
|
+
args/<tool>_config.yaml (tool-specific)
|
|
964
|
+
|
|
|
965
|
+
v
|
|
966
|
+
Hardcoded defaults (lowest priority)
|
|
967
|
+
```
|
|
968
|
+
|
|
969
|
+
|
|
970
|
+
### 4.3 Secret Management Patterns
|
|
971
|
+
|
|
972
|
+
**ICDEV Target: AWS GovCloud (us-gov-west-1).**
|
|
973
|
+
|
|
974
|
+
| Environment | Secret Backend | Pattern |
|
|
975
|
+
|------------|---------------|---------|
|
|
976
|
+
| Production | AWS Secrets Manager | `ICDEV_PG_SECRET_REF=aws:secretsmanager:icdev/pg-creds` |
|
|
977
|
+
| Staging | AWS Secrets Manager | Same, different secret path |
|
|
978
|
+
| Dev/Local | `.env` file (gitignored) | `ICDEV_PG_PASSWORD=localdev` |
|
|
979
|
+
| Air-gap | HashiCorp Vault (on-prem) | `ICDEV_PG_SECRET_REF=vault:secret/icdev/pg` |
|
|
980
|
+
|
|
981
|
+
**Secret Resolver Enhancement.** ICDEV's `storage.py` already supports
|
|
982
|
+
`ICDEV_PG_SECRET_REF=env:PG_PASS`. Extend the resolver:
|
|
983
|
+
|
|
984
|
+
```python
|
|
985
|
+
# tools/db/secret_resolver.py
|
|
986
|
+
def resolve_secret(ref: str) -> str:
|
|
987
|
+
"""Resolve a secret reference to its value.
|
|
988
|
+
|
|
989
|
+
Supported schemes:
|
|
990
|
+
env:VAR_NAME -- Read from environment variable
|
|
991
|
+
aws:secretsmanager:ID -- Fetch from AWS Secrets Manager
|
|
992
|
+
vault:PATH -- Fetch from HashiCorp Vault
|
|
993
|
+
file:/path/to/secret -- Read from file (K8s mounted secrets)
|
|
994
|
+
"""
|
|
995
|
+
scheme, _, path = ref.partition(":")
|
|
996
|
+
|
|
997
|
+
if scheme == "env":
|
|
998
|
+
return os.environ[path]
|
|
999
|
+
elif scheme == "aws":
|
|
1000
|
+
_, service, secret_id = path.split(":", 2)
|
|
1001
|
+
return _fetch_aws_secret(secret_id)
|
|
1002
|
+
elif scheme == "vault":
|
|
1003
|
+
return _fetch_vault_secret(path)
|
|
1004
|
+
elif scheme == "file":
|
|
1005
|
+
return Path(path).read_text().strip()
|
|
1006
|
+
else:
|
|
1007
|
+
raise ValueError(f"Unknown secret scheme: {scheme}")
|
|
1008
|
+
```
|
|
1009
|
+
|
|
1010
|
+
**HashiCorp Vault vs AWS Secrets Manager:**
|
|
1011
|
+
|
|
1012
|
+
| Feature | Vault | AWS Secrets Manager |
|
|
1013
|
+
|---------|-------|-------------------|
|
|
1014
|
+
| Dynamic secrets | Yes (per-use credentials) | No (rotation only) |
|
|
1015
|
+
| Multi-cloud | Yes | AWS only |
|
|
1016
|
+
| Air-gap | Yes (self-hosted) | No |
|
|
1017
|
+
| Complexity | High (self-managed) | Low (managed service) |
|
|
1018
|
+
| Cost | Free (OSS) + infra | $0.40/secret/month |
|
|
1019
|
+
| **ICDEV recommendation** | Air-gap/on-prem | AWS GovCloud production |
|
|
1020
|
+
|
|
1021
|
+
|
|
1022
|
+
### 4.4 Schema Versioning with Alembic
|
|
1023
|
+
|
|
1024
|
+
**ICDEV's Current State.** D-DB-25 designates Alembic for PostgreSQL schema
|
|
1025
|
+
versioning. With 348 tables, migration management is critical.
|
|
1026
|
+
|
|
1027
|
+
**SQLite + PostgreSQL Dual-Backend Migrations.** Alembic's batch operations
|
|
1028
|
+
mode handles SQLite's ALTER TABLE limitations. The recommended pattern:
|
|
1029
|
+
|
|
1030
|
+
```python
|
|
1031
|
+
# alembic/env.py
|
|
1032
|
+
def run_migrations_online():
|
|
1033
|
+
connectable = engine_from_config(config.get_section("alembic"))
|
|
1034
|
+
|
|
1035
|
+
with connectable.connect() as connection:
|
|
1036
|
+
# Detect backend for appropriate migration strategy
|
|
1037
|
+
dialect = connection.dialect.name
|
|
1038
|
+
|
|
1039
|
+
context.configure(
|
|
1040
|
+
connection=connection,
|
|
1041
|
+
target_metadata=target_metadata,
|
|
1042
|
+
render_as_batch=(dialect == "sqlite"), # Batch mode for SQLite
|
|
1043
|
+
)
|
|
1044
|
+
|
|
1045
|
+
with context.begin_transaction():
|
|
1046
|
+
context.run_migrations()
|
|
1047
|
+
```
|
|
1048
|
+
|
|
1049
|
+
**Migration Best Practices for ICDEV:**
|
|
1050
|
+
|
|
1051
|
+
1. **One migration per change** -- never combine unrelated DDL
|
|
1052
|
+
2. **Always review autogenerated migrations** -- autogenerate is a starting point
|
|
1053
|
+
3. **Offline SQL generation for air-gap** -- `alembic upgrade head --sql > migration.sql`
|
|
1054
|
+
4. **Migration tests** -- run every migration up and down in CI
|
|
1055
|
+
5. **Never modify released migrations** -- create new migrations to fix issues
|
|
1056
|
+
6. **Tag milestones** -- `alembic stamp <revision>` for release versions
|
|
1057
|
+
|
|
1058
|
+
```bash
|
|
1059
|
+
# Generate offline SQL for DBA review (air-gap)
|
|
1060
|
+
alembic upgrade head --sql > migrations/offline/v1.2.0.sql
|
|
1061
|
+
|
|
1062
|
+
# Run migration tests
|
|
1063
|
+
pytest tests/test_migrations.py -v
|
|
1064
|
+
```
|
|
1065
|
+
|
|
1066
|
+
---
|
|
1067
|
+
|
|
1068
|
+
## 5. Documentation-as-Code
|
|
1069
|
+
|
|
1070
|
+
### 5.1 Architecture Decision Records (ADRs)
|
|
1071
|
+
|
|
1072
|
+
**ICDEV's Current State.** ICDEV already uses extensive D-* numbering (D1 through
|
|
1073
|
+
D-SBD-7+) embedded in `CLAUDE.md`. This is functional but has scaling issues:
|
|
1074
|
+
the CLAUDE.md file is very large, and individual decisions are hard to discover.
|
|
1075
|
+
|
|
1076
|
+
**AWS ADR Best Practices (2025).** AWS published formal ADR guidance recommending:
|
|
1077
|
+
|
|
1078
|
+
1. **One file per decision** in a dedicated directory
|
|
1079
|
+
2. **Immutable once accepted** (create new ADR to supersede)
|
|
1080
|
+
3. **Status lifecycle**: Proposed -> Accepted -> Deprecated/Superseded
|
|
1081
|
+
4. **Cross-referencing** via explicit `supersedes` and `depends_on` fields
|
|
1082
|
+
|
|
1083
|
+
**Recommended ADR Structure for ICDEV:**
|
|
1084
|
+
|
|
1085
|
+
```
|
|
1086
|
+
docs/adr/
|
|
1087
|
+
├── README.md # Index of all ADRs
|
|
1088
|
+
├── template.md # ADR template
|
|
1089
|
+
├── core/
|
|
1090
|
+
│ ├── D-DB-20.md # PostgreSQL primary backend
|
|
1091
|
+
│ ├── D-DB-21.md # Storage abstraction layer
|
|
1092
|
+
│ └── ...
|
|
1093
|
+
├── compliance/
|
|
1094
|
+
│ ├── D-INV-1.md # cATO OSCAL streaming
|
|
1095
|
+
│ ├── D-SBD-1.md # Cloudyrion 8-Pillar mapping
|
|
1096
|
+
│ └── ...
|
|
1097
|
+
├── security/
|
|
1098
|
+
│ ├── D215.md # Prompt injection categories
|
|
1099
|
+
│ └── ...
|
|
1100
|
+
└── resilience/
|
|
1101
|
+
├── D280.md # Pluggable tracer ABC
|
|
1102
|
+
└── ...
|
|
1103
|
+
```
|
|
1104
|
+
|
|
1105
|
+
**ADR Template:**
|
|
1106
|
+
|
|
1107
|
+
```markdown
|
|
1108
|
+
# D-{DOMAIN}-{NUMBER}: {Title}
|
|
1109
|
+
|
|
1110
|
+
**Status:** Accepted | Proposed | Deprecated | Superseded by D-XX
|
|
1111
|
+
**Date:** YYYY-MM-DD
|
|
1112
|
+
**Supersedes:** D-XX (if applicable)
|
|
1113
|
+
**Depends on:** D-XX, D-YY
|
|
1114
|
+
|
|
1115
|
+
## Context
|
|
1116
|
+
What is the issue? What forces are at play?
|
|
1117
|
+
|
|
1118
|
+
## Decision
|
|
1119
|
+
What we decided and why.
|
|
1120
|
+
|
|
1121
|
+
## Consequences
|
|
1122
|
+
Positive, negative, and risks.
|
|
1123
|
+
|
|
1124
|
+
## Compliance Impact
|
|
1125
|
+
Which frameworks are affected (NIST, FedRAMP, CMMC, etc.)
|
|
1126
|
+
|
|
1127
|
+
## Classification
|
|
1128
|
+
CUI // SP-CTI
|
|
1129
|
+
```
|
|
1130
|
+
|
|
1131
|
+
|
|
1132
|
+
### 5.2 API Documentation Automation
|
|
1133
|
+
|
|
1134
|
+
**ICDEV's 12 MCP Servers Expose 70+ Tools.** Each MCP server defines tools with
|
|
1135
|
+
name, description, and JSON Schema parameters. This is already machine-readable
|
|
1136
|
+
documentation.
|
|
1137
|
+
|
|
1138
|
+
**Recommendation: Auto-Generate OpenAPI Docs from MCP Tool Definitions.**
|
|
1139
|
+
|
|
1140
|
+
```python
|
|
1141
|
+
# tools/docs/mcp_doc_generator.py
|
|
1142
|
+
"""Generate API reference documentation from MCP server tool definitions.
|
|
1143
|
+
|
|
1144
|
+
Reads each MCP server module, extracts tool definitions, and produces:
|
|
1145
|
+
1. OpenAPI 3.0 spec (for Swagger UI)
|
|
1146
|
+
2. Markdown reference (for docs/api/)
|
|
1147
|
+
3. JSON Schema catalog (for contract testing)
|
|
1148
|
+
"""
|
|
1149
|
+
|
|
1150
|
+
def extract_tools_from_mcp(server_module) -> list:
|
|
1151
|
+
"""Import MCP server and extract tool definitions."""
|
|
1152
|
+
...
|
|
1153
|
+
|
|
1154
|
+
def generate_openapi_spec(all_tools: list) -> dict:
|
|
1155
|
+
"""Convert MCP tools to OpenAPI paths."""
|
|
1156
|
+
...
|
|
1157
|
+
|
|
1158
|
+
def generate_markdown(all_tools: list) -> str:
|
|
1159
|
+
"""Generate markdown API reference."""
|
|
1160
|
+
...
|
|
1161
|
+
```
|
|
1162
|
+
|
|
1163
|
+
**FastAPI Already Supports This.** If ICDEV's dashboard (`tools/dashboard/app.py`)
|
|
1164
|
+
uses Flask, the OpenAPI spec must be generated manually. If migrated to FastAPI,
|
|
1165
|
+
docs are auto-generated from type hints and Pydantic models.
|
|
1166
|
+
|
|
1167
|
+
|
|
1168
|
+
### 5.3 Living Documentation from Tests
|
|
1169
|
+
|
|
1170
|
+
**BDD Features as Compliance Evidence.** ICDEV's Gherkin/BDD tests in `features/`
|
|
1171
|
+
already serve as living documentation. Enhance with compliance tagging:
|
|
1172
|
+
|
|
1173
|
+
```gherkin
|
|
1174
|
+
@NIST-AC-2 @FedRAMP-Moderate @CUI @IL4
|
|
1175
|
+
Feature: User Account Provisioning
|
|
1176
|
+
As a system administrator
|
|
1177
|
+
I want user accounts to require approval
|
|
1178
|
+
So that NIST AC-2 account management controls are satisfied
|
|
1179
|
+
|
|
1180
|
+
Scenario: New account requires manager approval
|
|
1181
|
+
Given a pending account request for "analyst@dod.mil"
|
|
1182
|
+
When the account is submitted for provisioning
|
|
1183
|
+
Then the account status should be "pending_approval"
|
|
1184
|
+
And an audit trail entry should be created with action "account_requested"
|
|
1185
|
+
And the entry classification should contain "CUI // SP-CTI"
|
|
1186
|
+
```
|
|
1187
|
+
|
|
1188
|
+
**Auto-Generate Compliance Traceability from Feature Tags:**
|
|
1189
|
+
|
|
1190
|
+
```python
|
|
1191
|
+
# tools/docs/compliance_trace_from_bdd.py
|
|
1192
|
+
"""Parse @NIST-* tags from .feature files and generate a traceability matrix.
|
|
1193
|
+
|
|
1194
|
+
Maps BDD scenarios to NIST 800-53 controls, then feeds into the crosswalk
|
|
1195
|
+
engine to auto-populate FedRAMP/CMMC/800-171 coverage.
|
|
1196
|
+
"""
|
|
1197
|
+
```
|
|
1198
|
+
|
|
1199
|
+
**Test Results as cATO Evidence.** Feed BDD test results into
|
|
1200
|
+
`cato_live_engine.py` as evidence for the controls tagged in each scenario.
|
|
1201
|
+
A passing `@NIST-AC-2` scenario becomes evidence for AC-2 implementation.
|
|
1202
|
+
|
|
1203
|
+
|
|
1204
|
+
### 5.4 Compliance Documentation Generation
|
|
1205
|
+
|
|
1206
|
+
**ICDEV Already Excels Here.** The compliance toolchain is comprehensive:
|
|
1207
|
+
- SSP: `ssp_generator.py`
|
|
1208
|
+
- POAM: `poam_generator.py`
|
|
1209
|
+
- OSCAL: `oscal_generator.py`
|
|
1210
|
+
- SBOM: `sbom_generator.py`
|
|
1211
|
+
- CUI markings: `cui_marker.py`
|
|
1212
|
+
- Crosswalk: `crosswalk_engine.py`
|
|
1213
|
+
|
|
1214
|
+
**Enhancement: Docs-from-Gates.** Every pipeline gate execution generates
|
|
1215
|
+
structured data. Aggregate gate results into compliance documentation:
|
|
1216
|
+
|
|
1217
|
+
```
|
|
1218
|
+
Gate Results (pipeline_gates.yaml)
|
|
1219
|
+
|
|
|
1220
|
+
v
|
|
1221
|
+
Evidence Aggregator
|
|
1222
|
+
|
|
|
1223
|
+
+---> cATO OSCAL assessment-results
|
|
1224
|
+
+---> SSP appendix (automated test evidence)
|
|
1225
|
+
+---> POAM update (failed gates -> new findings)
|
|
1226
|
+
+---> CMMC evidence package
|
|
1227
|
+
```
|
|
1228
|
+
|
|
1229
|
+
---
|
|
1230
|
+
|
|
1231
|
+
## 6. Resilience Engineering
|
|
1232
|
+
|
|
1233
|
+
### 6.1 Chaos Engineering for Agent Systems
|
|
1234
|
+
|
|
1235
|
+
**Chaos Engineering Platforms (2025-2026).** Two CNCF-incubating projects
|
|
1236
|
+
dominate Kubernetes chaos engineering:
|
|
1237
|
+
|
|
1238
|
+
| Platform | Maturity | Key Feature | ICDEV Relevance |
|
|
1239
|
+
|----------|---------|-------------|----------------|
|
|
1240
|
+
| LitmusChaos | 106 releases | MCP Server for AI-driven chaos | Direct integration with Claude Code |
|
|
1241
|
+
| Chaos Mesh | 74 releases | Fine-grained fault injection | Comprehensive K8s fault simulation |
|
|
1242
|
+
|
|
1243
|
+
**LitmusChaos MCP Server (2025).** Litmus launched an MCP Server that exposes
|
|
1244
|
+
chaos engineering capabilities via the Model Context Protocol. This enables
|
|
1245
|
+
natural-language chaos experiments from Claude Code:
|
|
1246
|
+
|
|
1247
|
+
```
|
|
1248
|
+
"Run a network latency experiment on the compliance agent pod
|
|
1249
|
+
with 500ms delay for 60 seconds and observe the circuit breaker behavior"
|
|
1250
|
+
```
|
|
1251
|
+
|
|
1252
|
+
**Chaos Experiments for ICDEV's 12-Agent Architecture:**
|
|
1253
|
+
|
|
1254
|
+
| Experiment | Target | Expected Behavior | Validates |
|
|
1255
|
+
|-----------|--------|-------------------|-----------|
|
|
1256
|
+
| Agent pod kill | Any agent pod | K8s restarts pod; DLQ captures in-flight tasks | Auto-recovery, DLQ |
|
|
1257
|
+
| Network partition | Between orchestrator and domain agents | Circuit breaker trips; cached results served | Circuit breaker, fallback |
|
|
1258
|
+
| LLM provider timeout | Bedrock endpoint | Router falls back to Ollama | LLM fallback chain |
|
|
1259
|
+
| Database connection drop | PostgreSQL | Storage layer falls back to SQLite | Storage fallback (D-DB-20) |
|
|
1260
|
+
| Memory pressure | Any agent pod | K8s OOM kills; pod restarts with clean state | Resource limits, bulkhead |
|
|
1261
|
+
| Clock skew | Evidence collector | cATO freshness checks detect stale evidence | Evidence freshness (D-INV-2) |
|
|
1262
|
+
|
|
1263
|
+
**Implementation Approach:**
|
|
1264
|
+
|
|
1265
|
+
1. **Phase 1 (No New Tools):** Use ICDEV's existing circuit breaker + DLQ
|
|
1266
|
+
to inject failures in unit/integration tests
|
|
1267
|
+
2. **Phase 2 (Staging):** Deploy Chaos Mesh in staging K8s cluster; run
|
|
1268
|
+
experiments on non-production agents
|
|
1269
|
+
3. **Phase 3 (Production):** Graduate to production chaos with LitmusChaos;
|
|
1270
|
+
integrate with monitoring for automated experiment evaluation
|
|
1271
|
+
|
|
1272
|
+
|
|
1273
|
+
### 6.2 Graceful Degradation Patterns
|
|
1274
|
+
|
|
1275
|
+
**The Degradation Matrix.** The `args/degradation_matrix.yaml` (created during
|
|
1276
|
+
this research) defines fallback behavior for 9 components. The orchestrator
|
|
1277
|
+
consults this matrix when a circuit breaker trips or health check fails.
|
|
1278
|
+
|
|
1279
|
+
**Degradation Strategies:**
|
|
1280
|
+
|
|
1281
|
+
| Strategy | When Used | Example |
|
|
1282
|
+
|----------|----------|---------|
|
|
1283
|
+
| Provider chain | Primary provider down | Cloud LLM -> Ollama fallback |
|
|
1284
|
+
| Cloud escalation | Local provider down | Ollama down -> Claude-only |
|
|
1285
|
+
| SQLite fallback | PostgreSQL down | Switch to local SQLite |
|
|
1286
|
+
| Queue and cache | Agent down | Queue tasks to DLQ; serve cached results |
|
|
1287
|
+
| Cache only | Non-critical agent down | Return cached knowledge |
|
|
1288
|
+
| Air-gap mode | Network down | Disable all external calls |
|
|
1289
|
+
| Deterministic only | All LLMs down | Only run deterministic tools |
|
|
1290
|
+
| Graceful shutdown | No storage available | Flush state and exit |
|
|
1291
|
+
|
|
1292
|
+
**Cascading Failure Protection:**
|
|
1293
|
+
|
|
1294
|
+
```yaml
|
|
1295
|
+
# From args/degradation_matrix.yaml
|
|
1296
|
+
cascading_rules:
|
|
1297
|
+
- trigger: "postgresql AND sqlite both down"
|
|
1298
|
+
action: graceful_shutdown
|
|
1299
|
+
- trigger: "cloud_llm AND ollama both down"
|
|
1300
|
+
action: degrade_to_deterministic_only
|
|
1301
|
+
- trigger: "3+ agents down simultaneously"
|
|
1302
|
+
action: emergency_mode
|
|
1303
|
+
```
|
|
1304
|
+
|
|
1305
|
+
|
|
1306
|
+
### 6.3 Bulkhead Pattern for Agent Isolation
|
|
1307
|
+
|
|
1308
|
+
**ICDEV Already Has Bulkhead Config.** The `args/resilience_config.yaml` includes:
|
|
1309
|
+
|
|
1310
|
+
```yaml
|
|
1311
|
+
bulkhead:
|
|
1312
|
+
enabled: true
|
|
1313
|
+
default_max_concurrent: 10
|
|
1314
|
+
default_queue_size: 50
|
|
1315
|
+
overrides:
|
|
1316
|
+
bedrock_llm:
|
|
1317
|
+
max_concurrent: 5
|
|
1318
|
+
queue_size: 20
|
|
1319
|
+
sqlite_writes:
|
|
1320
|
+
max_concurrent: 3
|
|
1321
|
+
queue_size: 100
|
|
1322
|
+
```
|
|
1323
|
+
|
|
1324
|
+
**Kubernetes-Level Bulkheads.** Complement application-level bulkheads with
|
|
1325
|
+
K8s resource isolation:
|
|
1326
|
+
|
|
1327
|
+
```yaml
|
|
1328
|
+
# Per-agent resource quotas (prevent one agent from starving others)
|
|
1329
|
+
apiVersion: v1
|
|
1330
|
+
kind: ResourceQuota
|
|
1331
|
+
metadata:
|
|
1332
|
+
name: compliance-agent-quota
|
|
1333
|
+
namespace: icdev-compliance
|
|
1334
|
+
spec:
|
|
1335
|
+
hard:
|
|
1336
|
+
requests.cpu: "2"
|
|
1337
|
+
requests.memory: 2Gi
|
|
1338
|
+
limits.cpu: "4"
|
|
1339
|
+
limits.memory: 4Gi
|
|
1340
|
+
pods: "5"
|
|
1341
|
+
```
|
|
1342
|
+
|
|
1343
|
+
```yaml
|
|
1344
|
+
# NetworkPolicy: compliance agent can only reach orchestrator and DB
|
|
1345
|
+
apiVersion: networking.k8s.io/v1
|
|
1346
|
+
kind: NetworkPolicy
|
|
1347
|
+
metadata:
|
|
1348
|
+
name: compliance-agent-bulkhead
|
|
1349
|
+
spec:
|
|
1350
|
+
podSelector:
|
|
1351
|
+
matchLabels:
|
|
1352
|
+
app: icdev-compliance-agent
|
|
1353
|
+
policyTypes: [Ingress, Egress]
|
|
1354
|
+
ingress:
|
|
1355
|
+
- from:
|
|
1356
|
+
- podSelector:
|
|
1357
|
+
matchLabels:
|
|
1358
|
+
app: icdev-orchestrator
|
|
1359
|
+
egress:
|
|
1360
|
+
- to:
|
|
1361
|
+
- podSelector:
|
|
1362
|
+
matchLabels:
|
|
1363
|
+
app: icdev-db
|
|
1364
|
+
- to: # Allow DNS
|
|
1365
|
+
- namespaceSelector: {}
|
|
1366
|
+
ports:
|
|
1367
|
+
- port: 53
|
|
1368
|
+
protocol: UDP
|
|
1369
|
+
```
|
|
1370
|
+
|
|
1371
|
+
|
|
1372
|
+
### 6.4 Retry with Exponential Backoff
|
|
1373
|
+
|
|
1374
|
+
**ICDEV Already Has Retry Config.** The `args/resilience_config.yaml` defines:
|
|
1375
|
+
- Default: 3 retries, exponential backoff (base 1s, multiplier 2.0, max 30s)
|
|
1376
|
+
- Jitter: 0-25% of computed delay
|
|
1377
|
+
- Per-subsystem overrides (Bedrock: 5 retries, Ollama: 2 retries)
|
|
1378
|
+
|
|
1379
|
+
**Tenacity Library Integration.** While ICDEV's `task_dlq.py` implements custom
|
|
1380
|
+
retry logic, the `tenacity` library is the Python standard for production retries:
|
|
1381
|
+
|
|
1382
|
+
```python
|
|
1383
|
+
from tenacity import (
|
|
1384
|
+
retry, stop_after_attempt, wait_random_exponential,
|
|
1385
|
+
retry_if_exception_type, before_sleep_log,
|
|
1386
|
+
)
|
|
1387
|
+
|
|
1388
|
+
@retry(
|
|
1389
|
+
stop=stop_after_attempt(5),
|
|
1390
|
+
wait=wait_random_exponential(multiplier=1, max=60),
|
|
1391
|
+
retry=retry_if_exception_type((ConnectionError, TimeoutError)),
|
|
1392
|
+
before_sleep=before_sleep_log(logger, logging.WARNING),
|
|
1393
|
+
)
|
|
1394
|
+
def call_bedrock_llm(prompt: str) -> str:
|
|
1395
|
+
"""Call Bedrock with automatic retry and jitter."""
|
|
1396
|
+
return bedrock_client.invoke(prompt)
|
|
1397
|
+
```
|
|
1398
|
+
|
|
1399
|
+
**Key Insight: `wait_random_exponential` vs `wait_exponential`.**
|
|
1400
|
+
- `wait_exponential`: Fixed intervals (1, 2, 4, 8...) -- good for single-client retry
|
|
1401
|
+
- `wait_random_exponential`: Randomized within exponentially widening window --
|
|
1402
|
+
**required for multi-process/multi-agent systems** to avoid thundering herd
|
|
1403
|
+
- ICDEV should always use `wait_random_exponential` since 12 agents may retry
|
|
1404
|
+
simultaneously against the same backend
|
|
1405
|
+
|
|
1406
|
+
|
|
1407
|
+
### 6.5 Dead Letter Queue for Failed Agent Tasks
|
|
1408
|
+
|
|
1409
|
+
**Implementation.** The `tools/core/task_dlq.py` (created during this research)
|
|
1410
|
+
provides:
|
|
1411
|
+
|
|
1412
|
+
- **Dispatch with retry**: Exponential backoff + jitter, config-driven from
|
|
1413
|
+
`args/resilience_config.yaml`
|
|
1414
|
+
- **DLQ table**: `agent_task_dlq` (append-only, NIST AU compliant)
|
|
1415
|
+
- **Query API**: Filter by agent, resolved/unresolved, with limits
|
|
1416
|
+
- **Resolution tracking**: Mark entries resolved without deleting (audit trail)
|
|
1417
|
+
|
|
1418
|
+
**DLQ Lifecycle:**
|
|
1419
|
+
|
|
1420
|
+
```
|
|
1421
|
+
Task dispatched
|
|
1422
|
+
|
|
|
1423
|
+
v
|
|
1424
|
+
[Attempt 1] -- fail --> [Wait 1s + jitter]
|
|
1425
|
+
|
|
|
1426
|
+
v
|
|
1427
|
+
[Attempt 2] -- fail --> [Wait 2s + jitter]
|
|
1428
|
+
|
|
|
1429
|
+
v
|
|
1430
|
+
[Attempt 3] -- fail --> [Move to DLQ]
|
|
1431
|
+
|
|
|
1432
|
+
v
|
|
1433
|
+
DLQ entry created (append-only)
|
|
1434
|
+
|
|
|
1435
|
+
+---> Alert operator (if configured)
|
|
1436
|
+
+---> Dashboard DLQ widget
|
|
1437
|
+
+---> Manual review and resolution
|
|
1438
|
+
|
|
|
1439
|
+
v
|
|
1440
|
+
[Resolution] -- set resolved_at, resolved_by (no DELETE)
|
|
1441
|
+
```
|
|
1442
|
+
|
|
1443
|
+
**DLQ Monitoring Integration:**
|
|
1444
|
+
|
|
1445
|
+
```python
|
|
1446
|
+
# Add to health check endpoint
|
|
1447
|
+
def dlq_health() -> dict:
|
|
1448
|
+
entries = get_dlq_entries(unresolved_only=True)
|
|
1449
|
+
return {
|
|
1450
|
+
"dlq_unresolved_count": len(entries),
|
|
1451
|
+
"dlq_oldest_entry": entries[-1]["created_at"] if entries else None,
|
|
1452
|
+
"dlq_by_agent": _group_by_agent(entries),
|
|
1453
|
+
"status": "healthy" if len(entries) < 10 else "degraded",
|
|
1454
|
+
}
|
|
1455
|
+
```
|
|
1456
|
+
|
|
1457
|
+
---
|
|
1458
|
+
|
|
1459
|
+
## 7. Priority Actions Summary
|
|
1460
|
+
|
|
1461
|
+
### Tier 1: High Impact, Low Effort (Do First)
|
|
1462
|
+
|
|
1463
|
+
| # | Action | Files | Impact |
|
|
1464
|
+
|---|--------|-------|--------|
|
|
1465
|
+
| 1 | Property-based tests with Hypothesis for rule engines | `tests/test_compliance_properties.py` | Catches 50x more bugs per test |
|
|
1466
|
+
| 2 | Circuit breaker in LLM router | `tools/core/circuit_breaker.py` (done) | Prevents cascade failures |
|
|
1467
|
+
| 3 | Structured error hierarchy | `tools/core/errors.py` (done) | Consistent debugging across agents |
|
|
1468
|
+
| 4 | Pipeline gates YAML | `args/pipeline_gates.yaml` (done) | Enforces gate ordering |
|
|
1469
|
+
| 5 | Fix `sparkpilot` logger references | Global rename | Branding consistency |
|
|
1470
|
+
|
|
1471
|
+
### Tier 2: High Impact, Medium Effort
|
|
1472
|
+
|
|
1473
|
+
| # | Action | Files | Impact |
|
|
1474
|
+
|---|--------|-------|--------|
|
|
1475
|
+
| 6 | Contract tests for A2A schemas | `tests/contracts/` (done) | Prevents integration failures |
|
|
1476
|
+
| 7 | Dead letter queue for agent tasks | `tools/core/task_dlq.py` (done) | Prevents lost work |
|
|
1477
|
+
| 8 | Feature flags with env profiles | `args/feature_flags.yaml` (done) | Safer deployments |
|
|
1478
|
+
| 9 | SLSA Level 2 with Sigstore | `.github/workflows/slsa-build.yml` | Supply chain security |
|
|
1479
|
+
| 10 | Snapshot tests for compliance artifacts | `tests/test_compliance_snapshots.py` | Catches regressions |
|
|
1480
|
+
|
|
1481
|
+
### Tier 3: Medium Impact, Medium-High Effort
|
|
1482
|
+
|
|
1483
|
+
| # | Action | Files | Impact |
|
|
1484
|
+
|---|--------|-------|--------|
|
|
1485
|
+
| 11 | Extract ADRs from CLAUDE.md | `docs/adr/` directory | Improves discoverability |
|
|
1486
|
+
| 12 | DI container adoption | `tools/core/container.py` (done) | Test isolation |
|
|
1487
|
+
| 13 | Degradation matrix | `args/degradation_matrix.yaml` (done) | Documents failure modes |
|
|
1488
|
+
| 14 | OTel GenAI semantic conventions | `tools/observability/otel_conventions.py` | Standardized tracing |
|
|
1489
|
+
| 15 | LLM evaluation framework (DeepEval) | `tests/evals/` | Narrative quality assurance |
|
|
1490
|
+
|
|
1491
|
+
### Tier 4: Strategic (Plan and Execute Over Time)
|
|
1492
|
+
|
|
1493
|
+
| # | Action | Files | Impact |
|
|
1494
|
+
|---|--------|-------|--------|
|
|
1495
|
+
| 16 | Chaos engineering with LitmusChaos | K8s manifests | Production resilience validation |
|
|
1496
|
+
| 17 | ArgoCD GitOps deployment | `argocd/` directory | Drift detection, audit trail |
|
|
1497
|
+
| 18 | Secret resolver (AWS + Vault) | `tools/db/secret_resolver.py` | Multi-environment secrets |
|
|
1498
|
+
| 19 | Auto-generate API docs from MCP | `tools/docs/mcp_doc_generator.py` | Self-documenting system |
|
|
1499
|
+
| 20 | Mutation testing on rule engines | CI pipeline config | Test suite quality assurance |
|
|
1500
|
+
|
|
1501
|
+
### Already Delivered During This Research
|
|
1502
|
+
|
|
1503
|
+
| File | Purpose |
|
|
1504
|
+
|------|---------|
|
|
1505
|
+
| `tools/core/__init__.py` | Package init |
|
|
1506
|
+
| `tools/core/errors.py` | 14-class structured error hierarchy |
|
|
1507
|
+
| `tools/core/circuit_breaker.py` | Thread-safe circuit breaker with config |
|
|
1508
|
+
| `tools/core/container.py` | Lightweight DI container |
|
|
1509
|
+
| `tools/core/task_dlq.py` | Dead letter queue with retry |
|
|
1510
|
+
| `args/pipeline_gates.yaml` | Declarative pipeline gate definitions |
|
|
1511
|
+
| `args/feature_flags.yaml` | Feature flags with env profiles |
|
|
1512
|
+
| `args/degradation_matrix.yaml` | Graceful degradation rules |
|
|
1513
|
+
| `tests/test_core_errors.py` | 16 tests for error hierarchy |
|
|
1514
|
+
| `tests/test_circuit_breaker.py` | 17 tests for circuit breaker |
|
|
1515
|
+
| `tests/test_container.py` | 9 tests for DI container |
|
|
1516
|
+
| `tests/test_task_dlq.py` | 8 tests for DLQ |
|
|
1517
|
+
| `tests/contracts/__init__.py` | Contract tests package |
|
|
1518
|
+
| `tests/contracts/test_agent_contracts.py` | 27 tests for 9 agent contracts |
|
|
1519
|
+
|
|
1520
|
+
**Total: 14 files, 81 passing tests**
|
|
1521
|
+
|
|
1522
|
+
---
|
|
1523
|
+
|
|
1524
|
+
## 8. Sources
|
|
1525
|
+
|
|
1526
|
+
### Testing AI-Agentic Systems
|
|
1527
|
+
- [AI Agents, meet Test Driven Development (Latent Space)](https://www.latent.space/p/anita-tdd)
|
|
1528
|
+
- [Red/green TDD - Agentic Engineering Patterns (Simon Willison)](https://simonwillison.net/guides/agentic-engineering-patterns/red-green-tdd/)
|
|
1529
|
+
- [From Scenario to Finished: Domain-Driven TDD for AI Agents (LangWatch)](https://langwatch.ai/blog/from-scenario-to-finished-how-to-test-ai-agents-with-domain-driven-tdd)
|
|
1530
|
+
- [An Empirical Evaluation of Property-Based Testing in Python (OOPSLA 2025)](https://cseweb.ucsd.edu/~mcoblenz/assets/pdf/OOPSLA_2025_PBT.pdf)
|
|
1531
|
+
- [Agentic Property-Based Testing (arXiv 2025)](https://arxiv.org/html/2510.09907v1)
|
|
1532
|
+
- [Semantic Similarity is Nuanced but Not Difficult (Agent CI)](https://agent-ci.com/blog/2025/10/08/semantic-similarity-nuanced-not-difficult/)
|
|
1533
|
+
- [AI Agent Evaluation: 5 Lessons Learned (Monte Carlo Data)](https://www.montecarlodata.com/blog-ai-agent-evaluation/)
|
|
1534
|
+
- [Beyond Task Completion: Assessing Agentic AI Systems (arXiv 2025)](https://arxiv.org/html/2512.12791v1)
|
|
1535
|
+
|
|
1536
|
+
### LLM Evaluation Frameworks
|
|
1537
|
+
- [LLM Evaluation Landscape 2026 (AIM Research)](https://research.aimultiple.com/llm-eval-tools/)
|
|
1538
|
+
- [DeepEval: LLM Evaluation Framework (GitHub)](https://github.com/confident-ai/deepeval)
|
|
1539
|
+
- [G-Eval: LLM-as-a-Judge Guide (Confident AI)](https://www.confident-ai.com/blog/g-eval-the-definitive-guide)
|
|
1540
|
+
- [LLM-as-a-Judge Complete Guide (Langfuse)](https://langfuse.com/docs/evaluation/evaluation-methods/llm-as-a-judge)
|
|
1541
|
+
- [LLM Rubric Evaluation (Promptfoo)](https://www.promptfoo.dev/docs/configuration/expected-outputs/model-graded/llm-rubric/)
|
|
1542
|
+
- [OpenEvals by LangChain (GitHub)](https://github.com/langchain-ai/openevals)
|
|
1543
|
+
|
|
1544
|
+
### Contract Testing
|
|
1545
|
+
- [Contract Testing: Shifting Left with Confidence (Tweag)](https://www.tweag.io/blog/2025-01-23-contract-testing/)
|
|
1546
|
+
- [Contract Testing for Microservices Guide (HyperTest)](https://www.hypertest.co/contract-testing/contract-testing-for-microservices)
|
|
1547
|
+
- [Pact Testing Explained (BaseRock AI)](https://www.baserock.ai/blog/pact-testing)
|
|
1548
|
+
|
|
1549
|
+
### Snapshot Testing
|
|
1550
|
+
- [Snapshot Testing with Syrupy (Simon Willison TIL)](https://til.simonwillison.net/pytest/syrupy)
|
|
1551
|
+
- [Syrupy: Sweeter Pytest Snapshot Plugin (GitHub)](https://github.com/syrupy-project/syrupy)
|
|
1552
|
+
|
|
1553
|
+
### DevSecOps and cATO
|
|
1554
|
+
- [DoD cATO Evaluation Criteria (PDF)](https://dodcio.defense.gov/Portals/0/Documents/Library/cATO-EvaluationCriteria.pdf)
|
|
1555
|
+
- [DoD Continuous Authorization Implementation Guide (PDF)](https://dodcio.defense.gov/Portals/0/Documents/Library/DoDCIO-ContinuousAuthorizationImplementationGuide.pdf)
|
|
1556
|
+
- [cATO Needs a DevSecOps Platform (VMware Tanzu)](https://blogs.vmware.com/tanzu/continuous-authorization-to-operate-cato-needs-a-devsecops-platform/)
|
|
1557
|
+
- [Unpacking DoD cATO Part IV: SSSC and DevSecOps (BreakPoint Labs)](https://breakpoint-labs.com/unpacking-the-dod-continuous-authorization-to-operate-cato-evaluation-criteria-part-iv-secure-software-supply-chain-sssc-and-devsecops/)
|
|
1558
|
+
- [DevSecOps Trends 2026 (DebugLies)](https://debuglies.com/2026/01/07/devsecops-trends-2026-ai-agents-revolutionizing-secure-software-development/)
|
|
1559
|
+
- [DevSecOps for Defense (Lasting Dynamics)](https://www.lastingdynamics.com/blog/devsecops-agile-defense-military-software-development/)
|
|
1560
|
+
- [How MOSA Principles Will Reshape DoD RMF (Sonatype)](https://www.sonatype.com/blog/how-mosa-principles-will-reshape-the-dod-rmf)
|
|
1561
|
+
|
|
1562
|
+
### SLSA and Supply Chain Security
|
|
1563
|
+
- [SLSA Framework Guide (Practical DevSecOps)](https://www.practical-devsecops.com/slsa-framework-guide-software-supply-chain-security/)
|
|
1564
|
+
- [SLSA Security Levels (slsa.dev)](https://slsa.dev/spec/v0.1/levels)
|
|
1565
|
+
- [Supply Chain Security 2025: SBOMs, SLSA, Sigstore (Faith Forge Labs)](https://faithforgelabs.com/blog_supplychain_security_2025.php)
|
|
1566
|
+
- [Supply Chain Security Trifecta: SBOM, SLSA, SSDF (Petronella)](https://petronellatech.com/blog/the-supply-chain-security-trifecta-sbom-slsa-ssdf/)
|
|
1567
|
+
|
|
1568
|
+
### Clean Architecture and Code Quality
|
|
1569
|
+
- [Python Design Patterns for Clean Architecture 2025 (Glukhov)](https://www.glukhov.org/post/2025/11/python-design-patterns-for-clean-architecture/)
|
|
1570
|
+
- [Clean Architecture with Python (Packt/O'Reilly 2025)](https://www.oreilly.com/library/view/clean-architecture-with/9781836642893/)
|
|
1571
|
+
- [Pragmatic Clean Architecture in Python (Deep Engineering)](https://deepengineering.substack.com/p/pragmatic-clean-architecture-in-python)
|
|
1572
|
+
- [Technical Debt Management (DasRoot 2026)](https://dasroot.net/posts/2026/02/technical-debt-management-sonarqube-cicd/)
|
|
1573
|
+
- [How to Manage Tech Debt in the AI Era (MIT Sloan)](https://sloanreview.mit.edu/article/how-to-manage-tech-debt-in-the-ai-era/)
|
|
1574
|
+
|
|
1575
|
+
### OpenTelemetry
|
|
1576
|
+
- [OTel Semantic Conventions for GenAI Agent Spans](https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-agent-spans/)
|
|
1577
|
+
- [AI Agent Observability Standards (OTel Blog 2025)](https://opentelemetry.io/blog/2025/ai-agent-observability/)
|
|
1578
|
+
- [OTel Observability 2026 Complete Guide (CalmOps)](https://calmops.com/devops/opentelemetry-observability-2026-complete-guide/)
|
|
1579
|
+
- [OTel Best Practices (Better Stack)](https://betterstack.com/community/guides/observability/opentelemetry-best-practices/)
|
|
1580
|
+
- [OTel Python Instrumentation Guide](https://opentelemetry.io/docs/languages/python/instrumentation/)
|
|
1581
|
+
|
|
1582
|
+
### GitOps
|
|
1583
|
+
- [ArgoCD in the Federal Trenches (AlphaBravo)](https://blog.alphabravo.io/argocd-in-the-federal-trenches-when-uncle-sam-meets-gitops/)
|
|
1584
|
+
- [GitOps 2026 Complete Guide (CalmOps)](https://calmops.com/devops/gitops-2026-complete-guide/)
|
|
1585
|
+
- [ArgoCD vs FluxCD 2025 (AWS Plain English)](https://aws.plainenglish.io/argocd-vs-flux-in-2025-the-gitops-war-is-over-and-you-won-d22e084929a5)
|
|
1586
|
+
|
|
1587
|
+
### Resilience Engineering
|
|
1588
|
+
- [Building Resilient Systems: Circuit Breakers and Retry (DasRoot 2026)](https://dasroot.net/posts/2026/01/building-resilient-systems-circuit-breakers-retry-patterns/)
|
|
1589
|
+
- [Resilient Microservices: Recovery Patterns Survey (arXiv 2025)](https://arxiv.org/html/2512.16959v1)
|
|
1590
|
+
- [Circuit Breaker with Bulkhead Isolation (GeeksforGeeks)](https://www.geeksforgeeks.org/system-design/circuit-breaker-with-bulkhead-isolation-in-microservices/)
|
|
1591
|
+
- [Dead Letter Queues and Retry Queues (Medium)](https://medium.com/@vinay.georgiatech/dead-letter-queues-and-retry-queues-the-safety-net-for-distributed-systems-b961c718e6a0)
|
|
1592
|
+
- [Retry Logic with Exponential Backoff in Python (OneUptime)](https://oneuptime.com/blog/post/2025-01-06-python-retry-exponential-backoff/view)
|
|
1593
|
+
- [Tenacity: Jitter, Backoff, and Idempotency (Medium 2025)](https://medium.com/@hadiyolworld007/python-retry-policies-with-tenacity-jitter-backoff-and-idempotency-that-survives-chaos-12bba4fc8d32)
|
|
1594
|
+
- [Exponential Backoff with Jitter (Presidio)](https://www.presidio.com/technical-blog/exponential-backoff-with-jitter-a-powerful-tool-for-resilient-systems/)
|
|
1595
|
+
|
|
1596
|
+
### Chaos Engineering
|
|
1597
|
+
- [LitmusChaos (GitHub/CNCF)](https://github.com/litmuschaos/litmus)
|
|
1598
|
+
- [Chaos Mesh (GitHub/CNCF)](https://github.com/chaos-mesh/chaos-mesh)
|
|
1599
|
+
- [Chaos Engineering in the Wild (arXiv 2025)](https://arxiv.org/html/2505.13654v1)
|
|
1600
|
+
- [Chaos Mesh + Testkube Integration (Testkube)](https://testkube.io/blog/orchestrating-chaos-engineering-with-testkube-and-chaos-mesh)
|
|
1601
|
+
|
|
1602
|
+
### Configuration Management
|
|
1603
|
+
- [ADR Best Practices (AWS Architecture Blog 2025)](https://aws.amazon.com/blogs/architecture/master-architecture-decision-records-adrs-best-practices-for-effective-decision-making/)
|
|
1604
|
+
- [ADR Process (AWS Prescriptive Guidance)](https://docs.aws.amazon.com/prescriptive-guidance/latest/architectural-decision-records/adr-process.html)
|
|
1605
|
+
- [Maintain ADRs (Azure Well-Architected Framework)](https://learn.microsoft.com/en-us/azure/well-architected/architect-role/architecture-decision-record)
|
|
1606
|
+
- [Feature Flag Tools for Enterprises 2025 (Flagsmith)](https://www.flagsmith.com/blog/top-7-feature-flag-tools)
|
|
1607
|
+
- [Open-Source Feature Flag Tools (Unleash)](https://www.getunleash.io/blog/11-open-source-feature-flag-tools)
|
|
1608
|
+
- [HashiCorp Vault vs AWS Secrets Manager 2026 (Infisical)](https://infisical.com/blog/aws-secrets-manager-vs-hashicorp-vault)
|
|
1609
|
+
- [Alembic Schema Migration Best Practices (PingCAP)](https://www.pingcap.com/article/best-practices-alembic-schema-migration/)
|
|
1610
|
+
- [Alembic Batch Migrations for SQLite (Alembic Docs)](https://alembic.sqlalchemy.org/en/latest/batch.html)
|
|
1611
|
+
|
|
1612
|
+
### API Documentation
|
|
1613
|
+
- [OpenAPI Generator (GitHub)](https://github.com/OpenAPITools/openapi-generator)
|
|
1614
|
+
- [API Documentation Tools 2025 (Mintlify)](https://www.mintlify.com/blog/best-api-documentation-tools-of-2025)
|
|
1615
|
+
- [API Docs and SDK Generation (Fern 2025)](https://buildwithfern.com/post/api-documentation-sdk-generation-tools)
|