icdev 1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- icdev/__init__.py +18 -0
- icdev/_paths.py +85 -0
- icdev/_version.py +3 -0
- icdev/data/__init__.py +1 -0
- icdev/data/args/__init__.py +1 -0
- icdev/data/args/agent_authority.yaml +61 -0
- icdev/data/args/agent_config.yaml +355 -0
- icdev/data/args/agentic_fitness.yaml +31 -0
- icdev/data/args/ai_governance_config.yaml +137 -0
- icdev/data/args/atlas_critique_config.yaml +66 -0
- icdev/data/args/bedrock_models.yaml +63 -0
- icdev/data/args/cicd_config.yaml +82 -0
- icdev/data/args/classification_config.yaml +232 -0
- icdev/data/args/cli_config.yaml +154 -0
- icdev/data/args/cloud_config.yaml +63 -0
- icdev/data/args/code_pattern_config.yaml +151 -0
- icdev/data/args/code_quality_config.yaml +47 -0
- icdev/data/args/companion_registry.yaml +202 -0
- icdev/data/args/context_config.yaml +82 -0
- icdev/data/args/csp_monitor_config.yaml +268 -0
- icdev/data/args/cui_markings.yaml +35 -0
- icdev/data/args/db_config.yaml +40 -0
- icdev/data/args/deployment_profiles.yaml +248 -0
- icdev/data/args/dev_profile_config.yaml +144 -0
- icdev/data/args/devsecops_config.yaml +286 -0
- icdev/data/args/endpoint_security_config.yaml +137 -0
- icdev/data/args/extension_config.yaml +79 -0
- icdev/data/args/file_access_tiers.yaml +88 -0
- icdev/data/args/framework_registry.yaml +415 -0
- icdev/data/args/innovation_config.yaml +431 -0
- icdev/data/args/installation_manifest.yaml +1087 -0
- icdev/data/args/llm_config.yaml +495 -0
- icdev/data/args/maintenance_config.yaml +55 -0
- icdev/data/args/memory_config.yaml +83 -0
- icdev/data/args/monitoring_config.yaml +127 -0
- icdev/data/args/mosa_config.yaml +190 -0
- icdev/data/args/nlq_config.yaml +35 -0
- icdev/data/args/observability_config.yaml +39 -0
- icdev/data/args/observability_tracing_config.yaml +170 -0
- icdev/data/args/oscal_tools_config.yaml +43 -0
- icdev/data/args/owasp_agentic_config.yaml +171 -0
- icdev/data/args/phase_registry.yaml +618 -0
- icdev/data/args/project_defaults.yaml +235 -0
- icdev/data/args/prompt_chains.yaml +163 -0
- icdev/data/args/resilience_config.yaml +50 -0
- icdev/data/args/ricoas_config.yaml +191 -0
- icdev/data/args/role_personas.yaml +362 -0
- icdev/data/args/scaling_config.yaml +176 -0
- icdev/data/args/security_gates.yaml +685 -0
- icdev/data/args/skill_injection_config.yaml +322 -0
- icdev/data/args/spec_config.yaml +53 -0
- icdev/data/args/supply_chain_config.yaml +76 -0
- icdev/data/args/translation_config.yaml +228 -0
- icdev/data/args/workflow_templates/ato_acceleration.yaml +54 -0
- icdev/data/args/workflow_templates/build_deploy.yaml +63 -0
- icdev/data/args/workflow_templates/full_compliance.yaml +43 -0
- icdev/data/args/workflow_templates/security_hardening.yaml +55 -0
- icdev/data/args/worktree_config.yaml +34 -0
- icdev/data/args/zta_config.yaml +247 -0
- icdev/data/context/__init__.py +1 -0
- icdev/data/context/agent/__init__.py +1 -0
- icdev/data/context/agent/response_schemas/__init__.py +1 -0
- icdev/data/context/agent/response_schemas/debate_position.json +46 -0
- icdev/data/context/agent/response_schemas/fitness_scorecard.json +74 -0
- icdev/data/context/agent/response_schemas/review_decision.json +39 -0
- icdev/data/context/agent/response_schemas/task_decomposition.json +82 -0
- icdev/data/context/agent/response_schemas/veto_decision.json +40 -0
- icdev/data/context/agentic/__init__.py +1 -0
- icdev/data/context/agentic/architecture_patterns.md +269 -0
- icdev/data/context/agentic/capability_registry.yaml +202 -0
- icdev/data/context/agentic/csp_mcp_registry.yaml +280 -0
- icdev/data/context/agentic/fitness_rubric.md +56 -0
- icdev/data/context/agentic/governance_baseline.md +205 -0
- icdev/data/context/ci/__init__.py +1 -0
- icdev/data/context/ci/worktree_templates.json +44 -0
- icdev/data/context/cloud/__init__.py +1 -0
- icdev/data/context/cloud/csp_service_registry.json +739 -0
- icdev/data/context/compliance/__init__.py +1 -0
- icdev/data/context/compliance/atlas_mitigations.json +293 -0
- icdev/data/context/compliance/atlas_techniques.json +833 -0
- icdev/data/context/compliance/cisa_sbd_requirements.json +432 -0
- icdev/data/context/compliance/cjis_security_policy.json +522 -0
- icdev/data/context/compliance/cmmc_practices.json +2494 -0
- icdev/data/context/compliance/cmmc_report_template.md +142 -0
- icdev/data/context/compliance/cnssi_1253_overlay.json +109 -0
- icdev/data/context/compliance/control_crosswalk.json +1914 -0
- icdev/data/context/compliance/control_families/__init__.py +1 -0
- icdev/data/context/compliance/csp_certifications.json +251 -0
- icdev/data/context/compliance/cssp_report_template.md +193 -0
- icdev/data/context/compliance/cui_templates/__init__.py +1 -0
- icdev/data/context/compliance/cui_templates/banner_block.txt +4 -0
- icdev/data/context/compliance/cui_templates/code_header.txt +8 -0
- icdev/data/context/compliance/cui_templates/document_template.md +35 -0
- icdev/data/context/compliance/data_type_framework_map.json +321 -0
- icdev/data/context/compliance/data_type_registry.json +147 -0
- icdev/data/context/compliance/dod_cssp_8530.json +463 -0
- icdev/data/context/compliance/eu_ai_act_annex_iii.json +108 -0
- icdev/data/context/compliance/export_templates/__init__.py +1 -0
- icdev/data/context/compliance/export_templates/emass_controls.csv.j2 +4 -0
- icdev/data/context/compliance/export_templates/evidence_package.md.j2 +39 -0
- icdev/data/context/compliance/export_templates/executive_summary.md.j2 +55 -0
- icdev/data/context/compliance/export_templates/poam_tracking.csv.j2 +4 -0
- icdev/data/context/compliance/fedramp_20x_ksi_schemas.json +133 -0
- icdev/data/context/compliance/fedramp_high_baseline.json +4370 -0
- icdev/data/context/compliance/fedramp_moderate_baseline.json +2183 -0
- icdev/data/context/compliance/fedramp_report_template.md +181 -0
- icdev/data/context/compliance/fips_200_areas.json +362 -0
- icdev/data/context/compliance/gao_ai_accountability.json +262 -0
- icdev/data/context/compliance/hipaa_security_rule.json +720 -0
- icdev/data/context/compliance/hitrust_csf_v11.json +930 -0
- icdev/data/context/compliance/impact_level_profiles.json +251 -0
- icdev/data/context/compliance/incident_response_template.md +1110 -0
- icdev/data/context/compliance/iso27001_2022_controls.json +750 -0
- icdev/data/context/compliance/iso27001_nist_bridge.json +382 -0
- icdev/data/context/compliance/iso42001_controls.json +254 -0
- icdev/data/context/compliance/ivv_checklist_template.md +80 -0
- icdev/data/context/compliance/ivv_report_template.md +116 -0
- icdev/data/context/compliance/ivv_requirements.json +372 -0
- icdev/data/context/compliance/mosa_crosswalk.json +327 -0
- icdev/data/context/compliance/mosa_framework.json +250 -0
- icdev/data/context/compliance/narrative_templates/AC.md.j2 +101 -0
- icdev/data/context/compliance/narrative_templates/AU.md.j2 +106 -0
- icdev/data/context/compliance/narrative_templates/IA.md.j2 +104 -0
- icdev/data/context/compliance/narrative_templates/SC.md.j2 +102 -0
- icdev/data/context/compliance/narrative_templates/SI.md.j2 +111 -0
- icdev/data/context/compliance/narrative_templates/__init__.py +1 -0
- icdev/data/context/compliance/narrative_templates/default.md.j2 +50 -0
- icdev/data/context/compliance/narrative_templates/executive_summary.j2 +27 -0
- icdev/data/context/compliance/narrative_templates/poam_milestone.j2 +19 -0
- icdev/data/context/compliance/narrative_templates/ssp_section.j2 +11 -0
- icdev/data/context/compliance/nist_800_171_controls.json +1552 -0
- icdev/data/context/compliance/nist_800_207_crosswalk.json +399 -0
- icdev/data/context/compliance/nist_800_207_zta.json +258 -0
- icdev/data/context/compliance/nist_800_53.json +324 -0
- icdev/data/context/compliance/nist_ai_600_1_genai.json +326 -0
- icdev/data/context/compliance/nist_ai_rmf.json +206 -0
- icdev/data/context/compliance/nist_sp_800_60_types.json +1667 -0
- icdev/data/context/compliance/omb_m25_21_high_impact_ai.json +248 -0
- icdev/data/context/compliance/omb_m26_04_unbiased_ai.json +262 -0
- icdev/data/context/compliance/owasp_agentic_asi.json +133 -0
- icdev/data/context/compliance/owasp_agentic_threats.json +285 -0
- icdev/data/context/compliance/owasp_llm_top10.json +274 -0
- icdev/data/context/compliance/pci_dss_v4.json +510 -0
- icdev/data/context/compliance/poam_template.md +117 -0
- icdev/data/context/compliance/safeai_controls.json +512 -0
- icdev/data/context/compliance/sbd_report_template.md +77 -0
- icdev/data/context/compliance/siem_config_templates/__init__.py +1 -0
- icdev/data/context/compliance/siem_config_templates/filebeat.yml +213 -0
- icdev/data/context/compliance/siem_config_templates/log_sources.json +208 -0
- icdev/data/context/compliance/soc2_trust_criteria.json +661 -0
- icdev/data/context/compliance/ssp_template.md +432 -0
- icdev/data/context/compliance/stig_templates/__init__.py +1 -0
- icdev/data/context/compliance/stig_templates/webapp_stig.json +139 -0
- icdev/data/context/compliance/xai_requirements.json +108 -0
- icdev/data/context/dashboard/__init__.py +1 -0
- icdev/data/context/dashboard/nlq_examples.json +50 -0
- icdev/data/context/dashboard/schema_descriptions.json +23 -0
- icdev/data/context/integration/__init__.py +1 -0
- icdev/data/context/integration/approval_workflows.json +32 -0
- icdev/data/context/integration/gitlab_field_mappings.json +33 -0
- icdev/data/context/integration/jira_field_mappings.json +32 -0
- icdev/data/context/integration/reqif_export_schema.json +23 -0
- icdev/data/context/integration/servicenow_field_mappings.json +22 -0
- icdev/data/context/languages/__init__.py +1 -0
- icdev/data/context/languages/framework_patterns.json +205 -0
- icdev/data/context/languages/language_registry.json +279 -0
- icdev/data/context/llm/__init__.py +1 -0
- icdev/data/context/llm/example_provider.py +86 -0
- icdev/data/context/mbse/__init__.py +1 -0
- icdev/data/context/mbse/des_report_template.md +162 -0
- icdev/data/context/mbse/des_requirements.json +411 -0
- icdev/data/context/mbse/digital_thread_patterns.json +403 -0
- icdev/data/context/mbse/reqif_schema.json +280 -0
- icdev/data/context/mbse/sysml_element_types.json +432 -0
- icdev/data/context/modernization/__init__.py +1 -0
- icdev/data/context/modernization/db_type_mappings.json +148 -0
- icdev/data/context/modernization/decomposition_patterns.json +284 -0
- icdev/data/context/modernization/framework_migration_patterns.json +359 -0
- icdev/data/context/modernization/migration_report_template.md +168 -0
- icdev/data/context/modernization/seven_rs_catalog.json +369 -0
- icdev/data/context/modernization/version_upgrade_rules.json +279 -0
- icdev/data/context/oscal/NIST_SP-800-53_rev5_catalog.json +254987 -0
- icdev/data/context/oscal/README.md +43 -0
- icdev/data/context/patterns/__init__.py +1 -0
- icdev/data/context/profiles/__init__.py +1 -0
- icdev/data/context/profiles/dod_baseline_v1.yaml +145 -0
- icdev/data/context/profiles/fedramp_baseline_v1.yaml +143 -0
- icdev/data/context/profiles/financial_baseline_v1.yaml +142 -0
- icdev/data/context/profiles/healthcare_baseline_v1.yaml +135 -0
- icdev/data/context/profiles/law_enforcement_v1.yaml +129 -0
- icdev/data/context/profiles/startup_v1.yaml +134 -0
- icdev/data/context/requirements/__init__.py +1 -0
- icdev/data/context/requirements/ambiguity_patterns.json +97 -0
- icdev/data/context/requirements/boundary_impact_rules.json +123 -0
- icdev/data/context/requirements/default_constitutions.json +67 -0
- icdev/data/context/requirements/document_extraction_rules.json +58 -0
- icdev/data/context/requirements/gap_patterns.json +108 -0
- icdev/data/context/requirements/readiness_rubric.json +78 -0
- icdev/data/context/requirements/red_alternative_patterns.json +210 -0
- icdev/data/context/requirements/safe_templates.json +72 -0
- icdev/data/context/requirements/spec_quality_checklist.json +122 -0
- icdev/data/context/simulation/__init__.py +1 -0
- icdev/data/context/simulation/architecture_patterns.json +36 -0
- icdev/data/context/simulation/coa_templates.json +38 -0
- icdev/data/context/simulation/cost_models.json +23 -0
- icdev/data/context/simulation/risk_categories.json +46 -0
- icdev/data/context/supply_chain/__init__.py +1 -0
- icdev/data/context/supply_chain/isa_templates.json +129 -0
- icdev/data/context/supply_chain/nist_800_161_controls.json +247 -0
- icdev/data/context/supply_chain/scrm_risk_matrix.json +147 -0
- icdev/data/context/templates/__init__.py +1 -0
- icdev/data/context/templates/ansible/__init__.py +1 -0
- icdev/data/context/templates/ansible/playbooks/__init__.py +1 -0
- icdev/data/context/templates/ansible/roles/__init__.py +1 -0
- icdev/data/context/templates/gitlab_ci/__init__.py +1 -0
- icdev/data/context/templates/grafana/__init__.py +1 -0
- icdev/data/context/templates/kubernetes/__init__.py +1 -0
- icdev/data/context/templates/project/__init__.py +1 -0
- icdev/data/context/templates/project/api/__init__.py +1 -0
- icdev/data/context/templates/project/cli/__init__.py +1 -0
- icdev/data/context/templates/project/data_pipeline/__init__.py +1 -0
- icdev/data/context/templates/project/iac/__init__.py +1 -0
- icdev/data/context/templates/project/javascript_frontend/__init__.py +1 -0
- icdev/data/context/templates/project/javascript_frontend/src/__init__.py +1 -0
- icdev/data/context/templates/project/javascript_frontend/tests/__init__.py +1 -0
- icdev/data/context/templates/project/microservice/__init__.py +1 -0
- icdev/data/context/templates/project/python_backend/__init__.py +1 -0
- icdev/data/context/templates/project/python_backend/src/__init__.py +1 -0
- icdev/data/context/templates/project/python_backend/tests/__init__.py +1 -0
- icdev/data/context/templates/project/python_backend/tests/features/__init__.py +1 -0
- icdev/data/context/templates/project/python_backend/tests/steps/__init__.py +1 -0
- icdev/data/context/templates/terraform/__init__.py +1 -0
- icdev/data/context/templates/terraform/govcloud_base/__init__.py +1 -0
- icdev/data/context/templates/terraform/modules/__init__.py +1 -0
- icdev/data/context/tone/__init__.py +1 -0
- icdev/data/context/translation/dependency_mappings.json +186 -0
- icdev/data/context/translation/type_mappings.json +149 -0
- icdev/data/docs/README.md +187 -0
- icdev/data/docs/__init__.py +1 -0
- icdev/data/docs/admin/gateway-guide.md +338 -0
- icdev/data/docs/admin/marketplace-guide.md +396 -0
- icdev/data/docs/admin/monitoring-guide.md +509 -0
- icdev/data/docs/architecture/compliance-framework.md +764 -0
- icdev/data/docs/architecture/database-schema.md +689 -0
- icdev/data/docs/architecture/gotcha-framework.md +518 -0
- icdev/data/docs/architecture/multi-agent-system.md +603 -0
- icdev/data/docs/dx/README.md +106 -0
- icdev/data/docs/dx/__init__.py +1 -0
- icdev/data/docs/dx/ci-cd-integration.md +378 -0
- icdev/data/docs/dx/claude-code-guide.md +213 -0
- icdev/data/docs/dx/companion-guide.md +232 -0
- icdev/data/docs/dx/dev-profiles.md +309 -0
- icdev/data/docs/dx/icdev-yaml-spec.md +219 -0
- icdev/data/docs/dx/integration-tiers.md +279 -0
- icdev/data/docs/dx/llm-routing-guide.md +456 -0
- icdev/data/docs/dx/quickstart.md +192 -0
- icdev/data/docs/dx/sdk-reference.md +356 -0
- icdev/data/docs/dx/unified-mcp-setup.md +525 -0
- icdev/data/docs/features/__init__.py +1 -0
- icdev/data/docs/features/phase-01-gotcha-framework.md +249 -0
- icdev/data/docs/features/phase-02-atlas-build-workflow.md +223 -0
- icdev/data/docs/features/phase-03-tdd-bdd-testing.md +261 -0
- icdev/data/docs/features/phase-04-nist-compliance.md +255 -0
- icdev/data/docs/features/phase-05-security-scanning.md +229 -0
- icdev/data/docs/features/phase-06-infrastructure-deployment.md +288 -0
- icdev/data/docs/features/phase-07-code-review-gates.md +276 -0
- icdev/data/docs/features/phase-08-self-healing.md +223 -0
- icdev/data/docs/features/phase-09-monitoring-observability.md +230 -0
- icdev/data/docs/features/phase-10-dashboard-web-ui.md +218 -0
- icdev/data/docs/features/phase-11-multi-agent-architecture.md +272 -0
- icdev/data/docs/features/phase-12-integration-testing.md +228 -0
- icdev/data/docs/features/phase-13-cicd-integration.md +257 -0
- icdev/data/docs/features/phase-14-secure-by-design-ivv.md +240 -0
- icdev/data/docs/features/phase-15-maintenance-audit.md +192 -0
- icdev/data/docs/features/phase-16-ato-acceleration.md +228 -0
- icdev/data/docs/features/phase-17-multi-framework-compliance.md +223 -0
- icdev/data/docs/features/phase-18-mbse-integration.md +242 -0
- icdev/data/docs/features/phase-19-agentic-generation.md +202 -0
- icdev/data/docs/features/phase-20-fips-security-categorization.md +198 -0
- icdev/data/docs/features/phase-21-saas-multi-tenancy.md +273 -0
- icdev/data/docs/features/phase-22-federated-gotcha-marketplace.md +242 -0
- icdev/data/docs/features/phase-23-universal-compliance-platform.md +238 -0
- icdev/data/docs/features/phase-24-devsecops-pipeline-security.md +198 -0
- icdev/data/docs/features/phase-25-zero-trust-architecture.md +220 -0
- icdev/data/docs/features/phase-26-dod-mosa.md +205 -0
- icdev/data/docs/features/phase-27-cli-capabilities.md +222 -0
- icdev/data/docs/features/phase-28-remote-command-gateway.md +235 -0
- icdev/data/docs/features/phase-29-proactive-monitoring.md +212 -0
- icdev/data/docs/features/phase-30-dashboard-auth.md +215 -0
- icdev/data/docs/features/phase-31-dashboard-ux-low-impact.md +188 -0
- icdev/data/docs/features/phase-32-dashboard-ux-medium-impact.md +223 -0
- icdev/data/docs/features/phase-33-modular-installation.md +218 -0
- icdev/data/docs/features/phase-34-dev-profiles.md +239 -0
- icdev/data/docs/features/phase-35-innovation-engine.md +257 -0
- icdev/data/docs/features/phase-36-evolutionary-intelligence.md +351 -0
- icdev/data/docs/features/phase-37-mitre-atlas-integration.md +485 -0
- icdev/data/docs/features/phase-38-cloud-agnostic-architecture.md +1033 -0
- icdev/data/docs/features/phase-39-observability-operations.md +178 -0
- icdev/data/docs/features/phase-40-nlq-compliance-queries.md +176 -0
- icdev/data/docs/features/phase-41-parallel-cicd.md +169 -0
- icdev/data/docs/features/phase-42-framework-planning.md +177 -0
- icdev/data/docs/features/phase-43-cross-language-translation.md +225 -0
- icdev/data/docs/features/phase-44-innovation-adaptation.md +227 -0
- icdev/data/docs/features/phase-45-owasp-agentic-security.md +239 -0
- icdev/data/docs/features/phase-46-observability-traceability-xai.md +240 -0
- icdev/data/docs/features/phase-47-unified-mcp-gateway.md +257 -0
- icdev/data/docs/features/phase-48-ai-transparency.md +203 -0
- icdev/data/docs/features/phase-49-ai-accountability.md +243 -0
- icdev/data/docs/features/phase-50-ai-governance-intake-chat.md +195 -0
- icdev/data/docs/features/phase-51-unified-chat-dashboard.md +240 -0
- icdev/data/docs/features/phase-52-code-intelligence.md +244 -0
- icdev/data/docs/features/phase-53-fedramp-20x-owasp-asi.md +359 -0
- icdev/data/docs/features/phase-54-slsa-swft-orchestration.md +379 -0
- icdev/data/docs/features/phase-55-a2a-v03-mcp-oauth.md +322 -0
- icdev/data/docs/features/phase-56-evidence-lineage.md +352 -0
- icdev/data/docs/features/phase-57-eu-ai-act-iron-bank.md +319 -0
- icdev/data/docs/features/phase-58-creative-engine.md +370 -0
- icdev/data/docs/features/phase-59-govcon-intelligence.md +535 -0
- icdev/data/docs/features/phase-60-cpmp.md +528 -0
- icdev/data/docs/features/phase-61-orchestration-improvements.md +534 -0
- icdev/data/docs/operations/dashboard-guide.md +354 -0
- icdev/data/docs/operations/deployment-guide.md +556 -0
- icdev/data/docs/operations/saas-admin-guide.md +439 -0
- icdev/data/docs/operations/security-operations-guide.md +733 -0
- icdev/data/docs/runbooks/backup-restore.md +412 -0
- icdev/data/docs/runbooks/troubleshooting.md +499 -0
- icdev/data/features/__init__.py +1 -0
- icdev/data/features/cicd_integration.feature +41 -0
- icdev/data/features/compliance_gates.feature +46 -0
- icdev/data/features/dashboard.feature +72 -0
- icdev/data/features/environment.py +25 -0
- icdev/data/features/project_management.feature +32 -0
- icdev/data/features/requirements_intake.feature +42 -0
- icdev/data/features/saas_platform.feature +53 -0
- icdev/data/features/security_scanning.feature +36 -0
- icdev/data/features/steps/__init__.py +1 -0
- icdev/data/features/steps/cicd_steps.py +465 -0
- icdev/data/features/steps/compliance_steps.py +308 -0
- icdev/data/features/steps/dashboard_steps.py +88 -0
- icdev/data/features/steps/project_steps.py +126 -0
- icdev/data/features/steps/requirements_intake_steps.py +689 -0
- icdev/data/features/steps/saas_platform_steps.py +572 -0
- icdev/data/features/steps/security_steps.py +236 -0
- icdev/data/features/steps/testing_steps.py +226 -0
- icdev/data/features/testing_pipeline.feature +42 -0
- icdev/data/goals/__init__.py +1 -0
- icdev/data/goals/agent_management.md +144 -0
- icdev/data/goals/agentic_generation.md +345 -0
- icdev/data/goals/agentic_threat_model.md +309 -0
- icdev/data/goals/ai_accountability.md +90 -0
- icdev/data/goals/ai_governance_intake.md +132 -0
- icdev/data/goals/ai_transparency.md +76 -0
- icdev/data/goals/atlas_integration.md +405 -0
- icdev/data/goals/ato_acceleration.md +139 -0
- icdev/data/goals/boundary_supply_chain.md +206 -0
- icdev/data/goals/build_app.md +544 -0
- icdev/data/goals/cicd_integration.md +86 -0
- icdev/data/goals/claude_dir_maintenance.md +77 -0
- icdev/data/goals/cli_capabilities.md +340 -0
- icdev/data/goals/cloud_agnostic.md +312 -0
- icdev/data/goals/code_intelligence.md +197 -0
- icdev/data/goals/code_review.md +94 -0
- icdev/data/goals/compliance_workflow.md +858 -0
- icdev/data/goals/continuous_harmonization.md +140 -0
- icdev/data/goals/cross_language_translation.md +171 -0
- icdev/data/goals/dashboard.md +142 -0
- icdev/data/goals/deploy_workflow.md +390 -0
- icdev/data/goals/devsecops_workflow.md +408 -0
- icdev/data/goals/evolutionary_intelligence.md +305 -0
- icdev/data/goals/external_integration.md +113 -0
- icdev/data/goals/framework_planning.md +63 -0
- icdev/data/goals/init_project.md +235 -0
- icdev/data/goals/innovation_engine.md +199 -0
- icdev/data/goals/integration_testing.md +189 -0
- icdev/data/goals/maintenance_audit.md +196 -0
- icdev/data/goals/manifest.md +56 -0
- icdev/data/goals/mbse_integration.md +504 -0
- icdev/data/goals/modernization_workflow.md +618 -0
- icdev/data/goals/monitoring.md +126 -0
- icdev/data/goals/mosa_workflow.md +463 -0
- icdev/data/goals/multi_agent_orchestration.md +68 -0
- icdev/data/goals/nlq_compliance.md +63 -0
- icdev/data/goals/observability.md +64 -0
- icdev/data/goals/observability_traceability_xai.md +154 -0
- icdev/data/goals/owasp_agentic_security.md +395 -0
- icdev/data/goals/parallel_cicd.md +61 -0
- icdev/data/goals/requirements_intake.md +213 -0
- icdev/data/goals/sbd_ivv_workflow.md +195 -0
- icdev/data/goals/security_categorization.md +133 -0
- icdev/data/goals/security_scan.md +381 -0
- icdev/data/goals/self_healing.md +120 -0
- icdev/data/goals/simulation_engine.md +111 -0
- icdev/data/goals/tdd_workflow.md +403 -0
- icdev/data/goals/zero_trust_architecture.md +403 -0
- icdev/data/hardprompts/__init__.py +1 -0
- icdev/data/hardprompts/agent/__init__.py +1 -0
- icdev/data/hardprompts/agent/agentic_architect.md +100 -0
- icdev/data/hardprompts/agent/debate_prompt.md +32 -0
- icdev/data/hardprompts/agent/fitness_evaluation.md +48 -0
- icdev/data/hardprompts/agent/governance_review.md +214 -0
- icdev/data/hardprompts/agent/reviewer_prompt.md +34 -0
- icdev/data/hardprompts/agent/skill_design.md +172 -0
- icdev/data/hardprompts/agent/task_decomposition.md +275 -0
- icdev/data/hardprompts/agent/veto_check_prompt.md +33 -0
- icdev/data/hardprompts/architect/__init__.py +1 -0
- icdev/data/hardprompts/architect/api_design.md +283 -0
- icdev/data/hardprompts/architect/data_model.md +277 -0
- icdev/data/hardprompts/architect/system_design.md +180 -0
- icdev/data/hardprompts/builder/__init__.py +1 -0
- icdev/data/hardprompts/builder/code_generation.md +59 -0
- icdev/data/hardprompts/builder/refactor.md +58 -0
- icdev/data/hardprompts/builder/scaffold_project.md +69 -0
- icdev/data/hardprompts/builder/test_generation.md +87 -0
- icdev/data/hardprompts/ci/__init__.py +1 -0
- icdev/data/hardprompts/ci/worktree_setup.md +35 -0
- icdev/data/hardprompts/compliance/__init__.py +1 -0
- icdev/data/hardprompts/compliance/cmmc_assessment.md +63 -0
- icdev/data/hardprompts/compliance/cssp_assessment.md +75 -0
- icdev/data/hardprompts/compliance/cui_marking.md +86 -0
- icdev/data/hardprompts/compliance/fedramp_assessment.md +55 -0
- icdev/data/hardprompts/compliance/ivv_assessment.md +96 -0
- icdev/data/hardprompts/compliance/poam_generation.md +57 -0
- icdev/data/hardprompts/compliance/sbd_assessment.md +101 -0
- icdev/data/hardprompts/compliance/security_categorization.md +74 -0
- icdev/data/hardprompts/compliance/ssp_generation.md +56 -0
- icdev/data/hardprompts/compliance/stig_evaluation.md +63 -0
- icdev/data/hardprompts/dashboard/__init__.py +1 -0
- icdev/data/hardprompts/dashboard/nlq_system_prompt.md +26 -0
- icdev/data/hardprompts/infra/__init__.py +1 -0
- icdev/data/hardprompts/infra/k8s_manifests.md +118 -0
- icdev/data/hardprompts/infra/pipeline_generation.md +160 -0
- icdev/data/hardprompts/infra/terraform_generation.md +92 -0
- icdev/data/hardprompts/integration/__init__.py +1 -0
- icdev/data/hardprompts/integration/approval_review.md +17 -0
- icdev/data/hardprompts/integration/jira_mapping.md +25 -0
- icdev/data/hardprompts/integration/servicenow_mapping.md +14 -0
- icdev/data/hardprompts/knowledge/__init__.py +1 -0
- icdev/data/hardprompts/knowledge/pattern_detection.md +73 -0
- icdev/data/hardprompts/knowledge/recommendation_engine.md +90 -0
- icdev/data/hardprompts/knowledge/root_cause_analysis.md +91 -0
- icdev/data/hardprompts/maintenance/__init__.py +1 -0
- icdev/data/hardprompts/maintenance/maintenance_assessment.md +82 -0
- icdev/data/hardprompts/mbse/__init__.py +1 -0
- icdev/data/hardprompts/mbse/digital_thread.md +67 -0
- icdev/data/hardprompts/mbse/model_import.md +62 -0
- icdev/data/hardprompts/mbse/model_to_code.md +65 -0
- icdev/data/hardprompts/modernization/__init__.py +1 -0
- icdev/data/hardprompts/modernization/legacy_analysis.md +93 -0
- icdev/data/hardprompts/modernization/migration_planning.md +150 -0
- icdev/data/hardprompts/modernization/seven_r_assessment.md +107 -0
- icdev/data/hardprompts/requirements/__init__.py +1 -0
- icdev/data/hardprompts/requirements/bdd_generation.md +35 -0
- icdev/data/hardprompts/requirements/clarification_prioritization.md +29 -0
- icdev/data/hardprompts/requirements/decomposition.md +60 -0
- icdev/data/hardprompts/requirements/document_extraction.md +45 -0
- icdev/data/hardprompts/requirements/gap_detection.md +70 -0
- icdev/data/hardprompts/requirements/intake_conversation.md +101 -0
- icdev/data/hardprompts/requirements/readiness_assessment.md +39 -0
- icdev/data/hardprompts/requirements/spec_quality.md +33 -0
- icdev/data/hardprompts/requirements/traceability_analysis.md +23 -0
- icdev/data/hardprompts/security/__init__.py +1 -0
- icdev/data/hardprompts/security/endpoint_security.md +78 -0
- icdev/data/hardprompts/security/threat_model.md +70 -0
- icdev/data/hardprompts/security/vulnerability_assessment.md +81 -0
- icdev/data/hardprompts/simulation/__init__.py +1 -0
- icdev/data/hardprompts/simulation/architecture_impact.md +27 -0
- icdev/data/hardprompts/simulation/coa_alternative.md +27 -0
- icdev/data/hardprompts/simulation/coa_generation.md +25 -0
- icdev/data/hardprompts/simulation/compliance_impact.md +28 -0
- icdev/data/hardprompts/simulation/cost_estimation.md +33 -0
- icdev/data/hardprompts/simulation/risk_assessment.md +28 -0
- icdev/data/hardprompts/translation/code_translation.md +68 -0
- icdev/data/hardprompts/translation/dependency_suggestion.md +44 -0
- icdev/data/hardprompts/translation/test_translation.md +64 -0
- icdev/data/hardprompts/translation/translation_repair.md +59 -0
- icdev/py.typed +0 -0
- icdev/tools/__init__.py +1 -0
- icdev/tools/_gen_formatter.py +12 -0
- icdev/tools/a2a/__init__.py +1 -0
- icdev/tools/a2a/agent_cards/architect.json +43 -0
- icdev/tools/a2a/agent_cards/builder.json +50 -0
- icdev/tools/a2a/agent_cards/compliance.json +57 -0
- icdev/tools/a2a/agent_cards/devsecops.json +71 -0
- icdev/tools/a2a/agent_cards/infra.json +57 -0
- icdev/tools/a2a/agent_cards/integration.json +57 -0
- icdev/tools/a2a/agent_cards/knowledge.json +43 -0
- icdev/tools/a2a/agent_cards/mbse.json +57 -0
- icdev/tools/a2a/agent_cards/modernization.json +50 -0
- icdev/tools/a2a/agent_cards/monitor.json +43 -0
- icdev/tools/a2a/agent_cards/orchestrator.json +36 -0
- icdev/tools/a2a/agent_cards/requirements_analyst.json +64 -0
- icdev/tools/a2a/agent_cards/security.json +50 -0
- icdev/tools/a2a/agent_cards/simulation.json +57 -0
- icdev/tools/a2a/agent_cards/supply_chain.json +50 -0
- icdev/tools/a2a/agent_client.py +349 -0
- icdev/tools/a2a/agent_registry.py +412 -0
- icdev/tools/a2a/agent_server.py +579 -0
- icdev/tools/a2a/task.py +200 -0
- icdev/tools/agent/__init__.py +2 -0
- icdev/tools/agent/a2a_agent_card_generator.py +285 -0
- icdev/tools/agent/a2a_discovery_server.py +250 -0
- icdev/tools/agent/agent_executor.py +529 -0
- icdev/tools/agent/agent_memory.py +557 -0
- icdev/tools/agent/agent_models.py +51 -0
- icdev/tools/agent/atlas_critique.py +908 -0
- icdev/tools/agent/authority.py +443 -0
- icdev/tools/agent/bedrock_client.py +1075 -0
- icdev/tools/agent/collaboration.py +871 -0
- icdev/tools/agent/dispatcher_mode.py +665 -0
- icdev/tools/agent/mailbox.py +575 -0
- icdev/tools/agent/prompt_chain_executor.py +1064 -0
- icdev/tools/agent/session_purpose.py +350 -0
- icdev/tools/agent/skill_router.py +638 -0
- icdev/tools/agent/skill_selector.py +486 -0
- icdev/tools/agent/team_orchestrator.py +1108 -0
- icdev/tools/agent/token_tracker.py +290 -0
- icdev/tools/analysis/__init__.py +1 -0
- icdev/tools/analysis/code_analyzer.py +780 -0
- icdev/tools/analysis/runtime_feedback.py +389 -0
- icdev/tools/audit/__init__.py +1 -0
- icdev/tools/audit/audit_logger.py +196 -0
- icdev/tools/audit/audit_query.py +157 -0
- icdev/tools/audit/decision_recorder.py +72 -0
- icdev/tools/builder/__init__.py +1 -0
- icdev/tools/builder/agentic_fitness.py +534 -0
- icdev/tools/builder/agentic_test_templates/test_a2a_callback.py +117 -0
- icdev/tools/builder/agentic_test_templates/test_a2a_lifecycle.feature +52 -0
- icdev/tools/builder/agentic_test_templates/test_agent_card.feature +37 -0
- icdev/tools/builder/agentic_test_templates/test_agent_health.py +128 -0
- icdev/tools/builder/agentic_test_templates/test_memory_system.feature +50 -0
- icdev/tools/builder/agentic_test_templates/test_skill_execution.feature +40 -0
- icdev/tools/builder/app_blueprint.py +1583 -0
- icdev/tools/builder/child_app_generator.py +2852 -0
- icdev/tools/builder/claude_md_generator.py +1734 -0
- icdev/tools/builder/code_generator.py +3703 -0
- icdev/tools/builder/db_init_generator.py +1709 -0
- icdev/tools/builder/dev_profile_manager.py +954 -0
- icdev/tools/builder/formatter.py +768 -0
- icdev/tools/builder/goal_adapter.py +592 -0
- icdev/tools/builder/gotcha_validator.py +812 -0
- icdev/tools/builder/language_support.py +441 -0
- icdev/tools/builder/linter.py +976 -0
- icdev/tools/builder/profile_detector.py +657 -0
- icdev/tools/builder/profile_md_generator.py +723 -0
- icdev/tools/builder/scaffolder.py +1590 -0
- icdev/tools/builder/scaffolder_extended.py +1771 -0
- icdev/tools/builder/test_writer.py +950 -0
- icdev/tools/ci/__init__.py +2 -0
- icdev/tools/ci/connectors/__init__.py +2 -0
- icdev/tools/ci/connectors/base_connector.py +80 -0
- icdev/tools/ci/connectors/connector_registry.py +188 -0
- icdev/tools/ci/connectors/mattermost_connector.py +159 -0
- icdev/tools/ci/connectors/slack_connector.py +197 -0
- icdev/tools/ci/core/__init__.py +2 -0
- icdev/tools/ci/core/air_gap_detector.py +115 -0
- icdev/tools/ci/core/comment_handler.py +192 -0
- icdev/tools/ci/core/conversation_manager.py +479 -0
- icdev/tools/ci/core/event_envelope.py +500 -0
- icdev/tools/ci/core/event_router.py +443 -0
- icdev/tools/ci/core/failure_parser.py +397 -0
- icdev/tools/ci/core/recovery_engine.py +527 -0
- icdev/tools/ci/modules/__init__.py +2 -0
- icdev/tools/ci/modules/agent.py +271 -0
- icdev/tools/ci/modules/git_ops.py +175 -0
- icdev/tools/ci/modules/state.py +117 -0
- icdev/tools/ci/modules/vcs.py +303 -0
- icdev/tools/ci/modules/workflow_ops.py +295 -0
- icdev/tools/ci/modules/worktree.py +340 -0
- icdev/tools/ci/pipeline_config_generator.py +558 -0
- icdev/tools/ci/triggers/__init__.py +2 -0
- icdev/tools/ci/triggers/gitlab_task_monitor.py +330 -0
- icdev/tools/ci/triggers/poll_trigger.py +237 -0
- icdev/tools/ci/triggers/webhook_server.py +356 -0
- icdev/tools/ci/workflows/__init__.py +2 -0
- icdev/tools/ci/workflows/icdev_build.py +140 -0
- icdev/tools/ci/workflows/icdev_comply.py +284 -0
- icdev/tools/ci/workflows/icdev_document.py +152 -0
- icdev/tools/ci/workflows/icdev_e2e.py +188 -0
- icdev/tools/ci/workflows/icdev_patch.py +186 -0
- icdev/tools/ci/workflows/icdev_plan.py +202 -0
- icdev/tools/ci/workflows/icdev_plan_build.py +41 -0
- icdev/tools/ci/workflows/icdev_plan_build_test.py +46 -0
- icdev/tools/ci/workflows/icdev_plan_build_test_review.py +47 -0
- icdev/tools/ci/workflows/icdev_review.py +126 -0
- icdev/tools/ci/workflows/icdev_sdlc.py +261 -0
- icdev/tools/ci/workflows/icdev_test.py +240 -0
- icdev/tools/cli/__init__.py +1 -0
- icdev/tools/cli/output_formatter.py +756 -0
- icdev/tools/cli_formatter.py +42 -0
- icdev/tools/cloud/__init__.py +11 -0
- icdev/tools/cloud/cloud_mode_manager.py +364 -0
- icdev/tools/cloud/csp_changelog.py +383 -0
- icdev/tools/cloud/csp_health_checker.py +268 -0
- icdev/tools/cloud/csp_monitor.py +951 -0
- icdev/tools/cloud/iam_provider.py +593 -0
- icdev/tools/cloud/kms_provider.py +346 -0
- icdev/tools/cloud/monitoring_provider.py +628 -0
- icdev/tools/cloud/provider_factory.py +376 -0
- icdev/tools/cloud/region_validator.py +345 -0
- icdev/tools/cloud/registry_provider.py +563 -0
- icdev/tools/cloud/secrets_provider.py +486 -0
- icdev/tools/cloud/storage_provider.py +446 -0
- icdev/tools/compat/__init__.py +21 -0
- icdev/tools/compat/cli_harmonizer.py +251 -0
- icdev/tools/compat/datetime_utils.py +18 -0
- icdev/tools/compat/db_utils.py +160 -0
- icdev/tools/compat/platform_utils.py +123 -0
- icdev/tools/compliance/__init__.py +1 -0
- icdev/tools/compliance/accountability_manager.py +397 -0
- icdev/tools/compliance/ai_accountability_audit.py +294 -0
- icdev/tools/compliance/ai_impact_assessor.py +273 -0
- icdev/tools/compliance/ai_incident_response.py +301 -0
- icdev/tools/compliance/ai_inventory_manager.py +239 -0
- icdev/tools/compliance/ai_reassessment_scheduler.py +256 -0
- icdev/tools/compliance/ai_transparency_audit.py +248 -0
- icdev/tools/compliance/atlas_assessor.py +278 -0
- icdev/tools/compliance/atlas_report_generator.py +1211 -0
- icdev/tools/compliance/base_assessor.py +597 -0
- icdev/tools/compliance/cato_monitor.py +1385 -0
- icdev/tools/compliance/cato_scheduler.py +699 -0
- icdev/tools/compliance/cjis_assessor.py +76 -0
- icdev/tools/compliance/classification_manager.py +1353 -0
- icdev/tools/compliance/cmmc_assessor.py +1491 -0
- icdev/tools/compliance/cmmc_report_generator.py +1100 -0
- icdev/tools/compliance/compliance_detector.py +463 -0
- icdev/tools/compliance/compliance_exporter.py +427 -0
- icdev/tools/compliance/compliance_status.py +825 -0
- icdev/tools/compliance/control_mapper.py +505 -0
- icdev/tools/compliance/crosswalk_engine.py +1203 -0
- icdev/tools/compliance/cssp_assessor.py +1045 -0
- icdev/tools/compliance/cssp_evidence_collector.py +729 -0
- icdev/tools/compliance/cssp_report_generator.py +1116 -0
- icdev/tools/compliance/cui_marker.py +388 -0
- icdev/tools/compliance/diagram_validator.py +600 -0
- icdev/tools/compliance/emass/__init__.py +2 -0
- icdev/tools/compliance/emass/emass_client.py +840 -0
- icdev/tools/compliance/emass/emass_export.py +777 -0
- icdev/tools/compliance/emass/emass_sync.py +826 -0
- icdev/tools/compliance/eu_ai_act_classifier.py +194 -0
- icdev/tools/compliance/evidence_collector.py +468 -0
- icdev/tools/compliance/fairness_assessor.py +316 -0
- icdev/tools/compliance/fedramp_assessor.py +1808 -0
- icdev/tools/compliance/fedramp_authorization_packager.py +137 -0
- icdev/tools/compliance/fedramp_ksi_generator.py +355 -0
- icdev/tools/compliance/fedramp_report_generator.py +1128 -0
- icdev/tools/compliance/fips199_categorizer.py +881 -0
- icdev/tools/compliance/fips200_validator.py +315 -0
- icdev/tools/compliance/gao_ai_assessor.py +231 -0
- icdev/tools/compliance/gao_evidence_builder.py +308 -0
- icdev/tools/compliance/hipaa_assessor.py +78 -0
- icdev/tools/compliance/hitrust_assessor.py +49 -0
- icdev/tools/compliance/incident_response_plan.py +718 -0
- icdev/tools/compliance/iso27001_assessor.py +92 -0
- icdev/tools/compliance/iso42001_assessor.py +114 -0
- icdev/tools/compliance/ivv_assessor.py +2327 -0
- icdev/tools/compliance/ivv_report_generator.py +1662 -0
- icdev/tools/compliance/model_card_generator.py +297 -0
- icdev/tools/compliance/mosa_assessor.py +117 -0
- icdev/tools/compliance/multi_regime_assessor.py +451 -0
- icdev/tools/compliance/narrative_generator.py +1013 -0
- icdev/tools/compliance/nist_800_207_assessor.py +191 -0
- icdev/tools/compliance/nist_ai_600_1_assessor.py +188 -0
- icdev/tools/compliance/nist_ai_rmf_assessor.py +110 -0
- icdev/tools/compliance/nist_lookup.py +245 -0
- icdev/tools/compliance/omb_m25_21_assessor.py +228 -0
- icdev/tools/compliance/omb_m26_04_assessor.py +188 -0
- icdev/tools/compliance/oscal_catalog_adapter.py +395 -0
- icdev/tools/compliance/oscal_generator.py +2170 -0
- icdev/tools/compliance/oscal_tools.py +1182 -0
- icdev/tools/compliance/owasp_agentic_assessor.py +226 -0
- icdev/tools/compliance/owasp_asi_assessor.py +200 -0
- icdev/tools/compliance/owasp_llm_assessor.py +244 -0
- icdev/tools/compliance/pci_dss_assessor.py +80 -0
- icdev/tools/compliance/pi_compliance_tracker.py +1461 -0
- icdev/tools/compliance/poam_generator.py +405 -0
- icdev/tools/compliance/resolve_marking.py +283 -0
- icdev/tools/compliance/sbd_assessor.py +2068 -0
- icdev/tools/compliance/sbd_report_generator.py +1236 -0
- icdev/tools/compliance/sbom_generator.py +1008 -0
- icdev/tools/compliance/siem_config_generator.py +674 -0
- icdev/tools/compliance/slsa_attestation_generator.py +490 -0
- icdev/tools/compliance/soc2_assessor.py +77 -0
- icdev/tools/compliance/ssp_generator.py +573 -0
- icdev/tools/compliance/stig_checker.py +727 -0
- icdev/tools/compliance/swft_evidence_bundler.py +337 -0
- icdev/tools/compliance/system_card_generator.py +309 -0
- icdev/tools/compliance/traceability_matrix.py +1281 -0
- icdev/tools/compliance/universal_classification_manager.py +1172 -0
- icdev/tools/compliance/xacta/__init__.py +2 -0
- icdev/tools/compliance/xacta/xacta_client.py +449 -0
- icdev/tools/compliance/xacta/xacta_export.py +557 -0
- icdev/tools/compliance/xacta/xacta_sync.py +333 -0
- icdev/tools/compliance/xai_assessor.py +231 -0
- icdev/tools/dashboard/__init__.py +1 -0
- icdev/tools/dashboard/api/__init__.py +1 -0
- icdev/tools/dashboard/api/_pipeline_state.py +17 -0
- icdev/tools/dashboard/api/activity.py +206 -0
- icdev/tools/dashboard/api/admin.py +176 -0
- icdev/tools/dashboard/api/agents.py +53 -0
- icdev/tools/dashboard/api/ai_accountability.py +163 -0
- icdev/tools/dashboard/api/ai_transparency.py +198 -0
- icdev/tools/dashboard/api/audit.py +58 -0
- icdev/tools/dashboard/api/batch.py +666 -0
- icdev/tools/dashboard/api/chat.py +241 -0
- icdev/tools/dashboard/api/cicd.py +219 -0
- icdev/tools/dashboard/api/code_quality.py +223 -0
- icdev/tools/dashboard/api/compliance.py +171 -0
- icdev/tools/dashboard/api/cpmp.py +915 -0
- icdev/tools/dashboard/api/diagrams.py +65 -0
- icdev/tools/dashboard/api/events.py +250 -0
- icdev/tools/dashboard/api/evidence.py +99 -0
- icdev/tools/dashboard/api/fedramp_20x.py +77 -0
- icdev/tools/dashboard/api/govcon.py +1095 -0
- icdev/tools/dashboard/api/intake.py +1171 -0
- icdev/tools/dashboard/api/lineage.py +163 -0
- icdev/tools/dashboard/api/metrics.py +155 -0
- icdev/tools/dashboard/api/nlq.py +72 -0
- icdev/tools/dashboard/api/orchestration.py +472 -0
- icdev/tools/dashboard/api/oscal.py +183 -0
- icdev/tools/dashboard/api/prod_audit.py +183 -0
- icdev/tools/dashboard/api/projects.py +191 -0
- icdev/tools/dashboard/api/proposals.py +1084 -0
- icdev/tools/dashboard/api/traces.py +363 -0
- icdev/tools/dashboard/api/usage.py +234 -0
- icdev/tools/dashboard/app.py +1986 -0
- icdev/tools/dashboard/auth.py +500 -0
- icdev/tools/dashboard/byok.py +245 -0
- icdev/tools/dashboard/chat_manager.py +675 -0
- icdev/tools/dashboard/config.py +116 -0
- icdev/tools/dashboard/diagram_definitions.py +642 -0
- icdev/tools/dashboard/nlq_processor.py +323 -0
- icdev/tools/dashboard/phase_loader.py +136 -0
- icdev/tools/dashboard/sse_manager.py +89 -0
- icdev/tools/dashboard/state_tracker.py +267 -0
- icdev/tools/dashboard/static/css/style.css +706 -0
- icdev/tools/dashboard/static/css/ux.css +2047 -0
- icdev/tools/dashboard/static/js/activity.js +322 -0
- icdev/tools/dashboard/static/js/api.js +161 -0
- icdev/tools/dashboard/static/js/batch.js +814 -0
- icdev/tools/dashboard/static/js/charts.js +618 -0
- icdev/tools/dashboard/static/js/chat.js +1514 -0
- icdev/tools/dashboard/static/js/kanban.js +113 -0
- icdev/tools/dashboard/static/js/live.js +569 -0
- icdev/tools/dashboard/static/js/mermaid-icdev.js +332 -0
- icdev/tools/dashboard/static/js/proposals.js +588 -0
- icdev/tools/dashboard/static/js/shortcuts.js +544 -0
- icdev/tools/dashboard/static/js/tables.js +652 -0
- icdev/tools/dashboard/static/js/tour.js +524 -0
- icdev/tools/dashboard/static/js/ux.js +942 -0
- icdev/tools/dashboard/templates/404.html +10 -0
- icdev/tools/dashboard/templates/activity.html +80 -0
- icdev/tools/dashboard/templates/admin/users.html +144 -0
- icdev/tools/dashboard/templates/ai_accountability.html +235 -0
- icdev/tools/dashboard/templates/ai_transparency.html +263 -0
- icdev/tools/dashboard/templates/base.html +104 -0
- icdev/tools/dashboard/templates/batch.html +23 -0
- icdev/tools/dashboard/templates/chat.html +332 -0
- icdev/tools/dashboard/templates/children.html +149 -0
- icdev/tools/dashboard/templates/cicd.html +253 -0
- icdev/tools/dashboard/templates/code_quality.html +214 -0
- icdev/tools/dashboard/templates/cpmp/cor_detail.html +220 -0
- icdev/tools/dashboard/templates/cpmp/cor_portal.html +91 -0
- icdev/tools/dashboard/templates/cpmp/deliverable_detail.html +197 -0
- icdev/tools/dashboard/templates/cpmp/detail.html +578 -0
- icdev/tools/dashboard/templates/cpmp/portfolio.html +202 -0
- icdev/tools/dashboard/templates/dev_profiles.html +304 -0
- icdev/tools/dashboard/templates/diagrams.html +224 -0
- icdev/tools/dashboard/templates/events/timeline.html +232 -0
- icdev/tools/dashboard/templates/evidence.html +134 -0
- icdev/tools/dashboard/templates/fedramp_20x.html +207 -0
- icdev/tools/dashboard/templates/gateway.html +244 -0
- icdev/tools/dashboard/templates/govcon/capabilities.html +135 -0
- icdev/tools/dashboard/templates/govcon/pipeline.html +214 -0
- icdev/tools/dashboard/templates/govcon/requirements.html +120 -0
- icdev/tools/dashboard/templates/index.html +254 -0
- icdev/tools/dashboard/templates/lineage.html +141 -0
- icdev/tools/dashboard/templates/login.html +51 -0
- icdev/tools/dashboard/templates/monitoring/overview.html +193 -0
- icdev/tools/dashboard/templates/orchestration/dashboard.html +545 -0
- icdev/tools/dashboard/templates/oscal.html +263 -0
- icdev/tools/dashboard/templates/phases.html +150 -0
- icdev/tools/dashboard/templates/prod_audit.html +280 -0
- icdev/tools/dashboard/templates/profile.html +183 -0
- icdev/tools/dashboard/templates/projects/detail.html +583 -0
- icdev/tools/dashboard/templates/projects/list.html +47 -0
- icdev/tools/dashboard/templates/proposals/detail.html +1253 -0
- icdev/tools/dashboard/templates/proposals/list.html +179 -0
- icdev/tools/dashboard/templates/proposals/section_detail.html +193 -0
- icdev/tools/dashboard/templates/provenance.html +181 -0
- icdev/tools/dashboard/templates/query/nlq.html +234 -0
- icdev/tools/dashboard/templates/quick_paths.html +69 -0
- icdev/tools/dashboard/templates/traces.html +155 -0
- icdev/tools/dashboard/templates/translation_detail.html +199 -0
- icdev/tools/dashboard/templates/translations.html +162 -0
- icdev/tools/dashboard/templates/usage.html +225 -0
- icdev/tools/dashboard/templates/wizard.html +539 -0
- icdev/tools/dashboard/templates/xai.html +208 -0
- icdev/tools/dashboard/ux_helpers.py +962 -0
- icdev/tools/dashboard/websocket.py +81 -0
- icdev/tools/db/__init__.py +1 -0
- icdev/tools/db/backup.py +312 -0
- icdev/tools/db/backup_manager.py +832 -0
- icdev/tools/db/init_icdev_db.py +5900 -0
- icdev/tools/db/migrate.py +178 -0
- icdev/tools/db/migration_runner.py +549 -0
- icdev/tools/db/migrations/001_baseline/meta.json +9 -0
- icdev/tools/db/migrations/001_baseline/up.py +68 -0
- icdev/tools/db/migrations/002_memory_enhancements/down.sql +8 -0
- icdev/tools/db/migrations/002_memory_enhancements/meta.json +9 -0
- icdev/tools/db/migrations/002_memory_enhancements/up.py +118 -0
- icdev/tools/db/migrations/003_dev_profiles/meta.json +8 -0
- icdev/tools/db/migrations/003_dev_profiles/up.py +93 -0
- icdev/tools/db/migrations/004_innovation_engine/down.py +19 -0
- icdev/tools/db/migrations/004_innovation_engine/up.py +227 -0
- icdev/tools/db/migrations/005_phase_37_ai_security/down.py +19 -0
- icdev/tools/db/migrations/005_phase_37_ai_security/up.py +258 -0
- icdev/tools/db/migrations/006_phase_36_evolution/down.py +21 -0
- icdev/tools/db/migrations/006_phase_36_evolution/up.py +323 -0
- icdev/tools/db/migrations/007_phase_38_cloud/down.py +14 -0
- icdev/tools/db/migrations/007_phase_38_cloud/up.py +110 -0
- icdev/tools/db/migrations/008_phase36_37_integration/up.py +55 -0
- icdev/tools/db/migrations/__init__.py +2 -0
- icdev/tools/devsecops/__init__.py +2 -0
- icdev/tools/devsecops/attestation_manager.py +458 -0
- icdev/tools/devsecops/network_segmentation_generator.py +614 -0
- icdev/tools/devsecops/pdp_config_generator.py +1256 -0
- icdev/tools/devsecops/pipeline_security_generator.py +484 -0
- icdev/tools/devsecops/policy_generator.py +653 -0
- icdev/tools/devsecops/profile_manager.py +388 -0
- icdev/tools/devsecops/service_mesh_generator.py +1073 -0
- icdev/tools/devsecops/zta_maturity_scorer.py +368 -0
- icdev/tools/devsecops/zta_terraform_generator.py +1303 -0
- icdev/tools/dx/__init__.py +3 -0
- icdev/tools/dx/companion.py +266 -0
- icdev/tools/dx/instruction_generator.py +753 -0
- icdev/tools/dx/mcp_config_generator.py +282 -0
- icdev/tools/dx/skill_translator.py +425 -0
- icdev/tools/dx/tool_detector.py +144 -0
- icdev/tools/extensions/__init__.py +21 -0
- icdev/tools/extensions/builtins/010_ai_governance_chat.py +277 -0
- icdev/tools/extensions/builtins/__init__.py +2 -0
- icdev/tools/extensions/extension_manager.py +455 -0
- icdev/tools/infra/__init__.py +1 -0
- icdev/tools/infra/ansible_generator.py +869 -0
- icdev/tools/infra/dockerfile_generator.py +361 -0
- icdev/tools/infra/infra_status.py +393 -0
- icdev/tools/infra/ironbank_metadata_generator.py +411 -0
- icdev/tools/infra/k8s_generator.py +1002 -0
- icdev/tools/infra/pipeline_generator.py +832 -0
- icdev/tools/infra/rollback.py +400 -0
- icdev/tools/infra/terraform_generator.py +1142 -0
- icdev/tools/infra/terraform_generator_azure.py +1254 -0
- icdev/tools/infra/terraform_generator_gcp.py +953 -0
- icdev/tools/infra/terraform_generator_ibm.py +360 -0
- icdev/tools/infra/terraform_generator_oci.py +919 -0
- icdev/tools/infra/terraform_generator_onprem.py +319 -0
- icdev/tools/innovation/__init__.py +8 -0
- icdev/tools/innovation/competitive_intel.py +492 -0
- icdev/tools/innovation/innovation_manager.py +681 -0
- icdev/tools/innovation/introspective_analyzer.py +774 -0
- icdev/tools/innovation/register_external_patterns.py +440 -0
- icdev/tools/innovation/signal_ranker.py +1038 -0
- icdev/tools/innovation/solution_generator.py +697 -0
- icdev/tools/innovation/standards_monitor.py +466 -0
- icdev/tools/innovation/trend_detector.py +1046 -0
- icdev/tools/innovation/triage_engine.py +1149 -0
- icdev/tools/innovation/web_scanner.py +894 -0
- icdev/tools/installer/__init__.py +1 -0
- icdev/tools/installer/compliance_configurator.py +637 -0
- icdev/tools/installer/installer.py +1711 -0
- icdev/tools/installer/module_registry.py +805 -0
- icdev/tools/installer/platform_setup.py +961 -0
- icdev/tools/integration/__init__.py +2 -0
- icdev/tools/integration/approval_manager.py +561 -0
- icdev/tools/integration/doors_exporter.py +627 -0
- icdev/tools/integration/gitlab_connector.py +784 -0
- icdev/tools/integration/jira_connector.py +774 -0
- icdev/tools/integration/servicenow_connector.py +693 -0
- icdev/tools/knowledge/__init__.py +1 -0
- icdev/tools/knowledge/knowledge_ingest.py +293 -0
- icdev/tools/knowledge/pattern_detector.py +693 -0
- icdev/tools/knowledge/recommendation_engine.py +461 -0
- icdev/tools/knowledge/self_heal_analyzer.py +504 -0
- icdev/tools/llm/__init__.py +72 -0
- icdev/tools/llm/anthropic_provider.py +170 -0
- icdev/tools/llm/azure_openai_provider.py +338 -0
- icdev/tools/llm/bedrock_provider.py +315 -0
- icdev/tools/llm/embedding_provider.py +438 -0
- icdev/tools/llm/gemini_provider.py +381 -0
- icdev/tools/llm/ibm_watsonx_provider.py +232 -0
- icdev/tools/llm/oci_genai_provider.py +462 -0
- icdev/tools/llm/ollama_provider.py +340 -0
- icdev/tools/llm/openai_provider.py +225 -0
- icdev/tools/llm/provider.py +355 -0
- icdev/tools/llm/provider_sdk.py +175 -0
- icdev/tools/llm/router.py +780 -0
- icdev/tools/llm/vertex_ai_provider.py +374 -0
- icdev/tools/maintenance/__init__.py +2 -0
- icdev/tools/maintenance/dependency_scanner.py +1030 -0
- icdev/tools/maintenance/maintenance_auditor.py +815 -0
- icdev/tools/maintenance/remediation_engine.py +966 -0
- icdev/tools/maintenance/vulnerability_checker.py +987 -0
- icdev/tools/mbse/__init__.py +3 -0
- icdev/tools/mbse/des_assessor.py +1186 -0
- icdev/tools/mbse/des_report_generator.py +800 -0
- icdev/tools/mbse/diagram_extractor.py +811 -0
- icdev/tools/mbse/digital_thread.py +1665 -0
- icdev/tools/mbse/model_code_generator.py +1122 -0
- icdev/tools/mbse/model_control_mapper.py +420 -0
- icdev/tools/mbse/pi_model_tracker.py +1093 -0
- icdev/tools/mbse/reqif_parser.py +1483 -0
- icdev/tools/mbse/sync_engine.py +1805 -0
- icdev/tools/mbse/xmi_parser.py +1573 -0
- icdev/tools/mcp/__init__.py +1 -0
- icdev/tools/mcp/base_server.py +535 -0
- icdev/tools/mcp/builder_server.py +725 -0
- icdev/tools/mcp/compliance_server.py +1407 -0
- icdev/tools/mcp/context_indexer.py +199 -0
- icdev/tools/mcp/context_server.py +305 -0
- icdev/tools/mcp/core_server.py +679 -0
- icdev/tools/mcp/devsecops_server.py +432 -0
- icdev/tools/mcp/gap_handlers.py +1079 -0
- icdev/tools/mcp/gateway_server.py +339 -0
- icdev/tools/mcp/generate_registry.py +623 -0
- icdev/tools/mcp/infra_server.py +264 -0
- icdev/tools/mcp/innovation_server.py +316 -0
- icdev/tools/mcp/integration_server.py +527 -0
- icdev/tools/mcp/knowledge_server.py +429 -0
- icdev/tools/mcp/maintenance_server.py +248 -0
- icdev/tools/mcp/marketplace_server.py +499 -0
- icdev/tools/mcp/mbse_server.py +398 -0
- icdev/tools/mcp/modernization_server.py +496 -0
- icdev/tools/mcp/observability_server.py +354 -0
- icdev/tools/mcp/requirements_server.py +415 -0
- icdev/tools/mcp/simulation_server.py +468 -0
- icdev/tools/mcp/standalone/__init__.py +2 -0
- icdev/tools/mcp/standalone/builder.py +59 -0
- icdev/tools/mcp/standalone/compliance.py +59 -0
- icdev/tools/mcp/standalone/core.py +59 -0
- icdev/tools/mcp/standalone/knowledge.py +59 -0
- icdev/tools/mcp/standalone/maintenance.py +59 -0
- icdev/tools/mcp/supply_chain_server.py +476 -0
- icdev/tools/mcp/tool_registry.py +2008 -0
- icdev/tools/mcp/unified_server.py +158 -0
- icdev/tools/memory/__init__.py +2 -0
- icdev/tools/memory/auto_capture.py +347 -0
- icdev/tools/memory/embed_memory.py +158 -0
- icdev/tools/memory/history_compressor.py +334 -0
- icdev/tools/memory/hybrid_search.py +236 -0
- icdev/tools/memory/maintenance_cron.py +289 -0
- icdev/tools/memory/memory_consolidation.py +444 -0
- icdev/tools/memory/memory_db.py +133 -0
- icdev/tools/memory/memory_read.py +102 -0
- icdev/tools/memory/memory_write.py +222 -0
- icdev/tools/memory/semantic_search.py +139 -0
- icdev/tools/memory/time_decay.py +435 -0
- icdev/tools/modernization/__init__.py +3 -0
- icdev/tools/modernization/architecture_extractor.py +734 -0
- icdev/tools/modernization/compliance_bridge.py +1499 -0
- icdev/tools/modernization/db_migration_planner.py +1385 -0
- icdev/tools/modernization/doc_generator.py +1428 -0
- icdev/tools/modernization/framework_migrator.py +1525 -0
- icdev/tools/modernization/legacy_analyzer.py +1948 -0
- icdev/tools/modernization/migration_code_generator.py +1639 -0
- icdev/tools/modernization/migration_report_generator.py +1653 -0
- icdev/tools/modernization/migration_tracker.py +1726 -0
- icdev/tools/modernization/monolith_decomposer.py +1508 -0
- icdev/tools/modernization/seven_r_assessor.py +1658 -0
- icdev/tools/modernization/strangler_fig_manager.py +1705 -0
- icdev/tools/modernization/ui_analyzer.py +771 -0
- icdev/tools/modernization/version_migrator.py +1392 -0
- icdev/tools/monitor/__init__.py +1 -0
- icdev/tools/monitor/alert_correlator.py +495 -0
- icdev/tools/monitor/auto_resolver.py +612 -0
- icdev/tools/monitor/health_checker.py +509 -0
- icdev/tools/monitor/heartbeat_daemon.py +792 -0
- icdev/tools/monitor/log_analyzer.py +516 -0
- icdev/tools/monitor/metric_collector.py +496 -0
- icdev/tools/mosa/__init__.py +10 -0
- icdev/tools/mosa/icd_generator.py +370 -0
- icdev/tools/mosa/modular_design_analyzer.py +683 -0
- icdev/tools/mosa/mosa_code_enforcer.py +349 -0
- icdev/tools/mosa/tsp_generator.py +265 -0
- icdev/tools/observability/__init__.py +100 -0
- icdev/tools/observability/genai_attributes.py +88 -0
- icdev/tools/observability/instrumentation.py +140 -0
- icdev/tools/observability/mlflow_exporter.py +194 -0
- icdev/tools/observability/otel_tracer.py +168 -0
- icdev/tools/observability/provenance/__init__.py +3 -0
- icdev/tools/observability/provenance/prov_recorder.py +324 -0
- icdev/tools/observability/shap/__init__.py +3 -0
- icdev/tools/observability/shap/agent_shap.py +275 -0
- icdev/tools/observability/sqlite_tracer.py +361 -0
- icdev/tools/observability/trace_context.py +205 -0
- icdev/tools/observability/tracer.py +230 -0
- icdev/tools/orchestration/__init__.py +2 -0
- icdev/tools/orchestration/workflow_composer.py +361 -0
- icdev/tools/project/__init__.py +1 -0
- icdev/tools/project/manifest_loader.py +418 -0
- icdev/tools/project/project_create.py +350 -0
- icdev/tools/project/project_list.py +174 -0
- icdev/tools/project/project_scaffold.py +1715 -0
- icdev/tools/project/project_status.py +479 -0
- icdev/tools/project/session_context_builder.py +757 -0
- icdev/tools/project/validate_manifest.py +55 -0
- icdev/tools/registry/__init__.py +10 -0
- icdev/tools/registry/absorption_engine.py +832 -0
- icdev/tools/registry/capability_evaluator.py +668 -0
- icdev/tools/registry/child_registry.py +617 -0
- icdev/tools/registry/cross_pollinator.py +1065 -0
- icdev/tools/registry/genome_manager.py +671 -0
- icdev/tools/registry/learning_collector.py +912 -0
- icdev/tools/registry/propagation_manager.py +942 -0
- icdev/tools/registry/staging_manager.py +742 -0
- icdev/tools/registry/telemetry_collector.py +423 -0
- icdev/tools/requirements/__init__.py +1 -0
- icdev/tools/requirements/ai_governance_scorer.py +208 -0
- icdev/tools/requirements/boundary_analyzer.py +1293 -0
- icdev/tools/requirements/clarification_engine.py +618 -0
- icdev/tools/requirements/complexity_scorer.py +387 -0
- icdev/tools/requirements/consistency_analyzer.py +803 -0
- icdev/tools/requirements/constitution_manager.py +605 -0
- icdev/tools/requirements/decomposition_engine.py +778 -0
- icdev/tools/requirements/document_extractor.py +1016 -0
- icdev/tools/requirements/elicitation_techniques.py +519 -0
- icdev/tools/requirements/gap_detector.py +271 -0
- icdev/tools/requirements/intake_engine.py +2188 -0
- icdev/tools/requirements/prd_generator.py +847 -0
- icdev/tools/requirements/prd_validator.py +595 -0
- icdev/tools/requirements/readiness_scorer.py +313 -0
- icdev/tools/requirements/spec_organizer.py +1029 -0
- icdev/tools/requirements/spec_quality_checker.py +1097 -0
- icdev/tools/requirements/traceability_builder.py +579 -0
- icdev/tools/resilience/__init__.py +34 -0
- icdev/tools/resilience/circuit_breaker.py +340 -0
- icdev/tools/resilience/correlation.py +150 -0
- icdev/tools/resilience/errors.py +81 -0
- icdev/tools/resilience/retry.py +95 -0
- icdev/tools/schemas/__init__.py +27 -0
- icdev/tools/schemas/chat.py +61 -0
- icdev/tools/schemas/compliance.py +56 -0
- icdev/tools/schemas/core.py +85 -0
- icdev/tools/schemas/innovation.py +37 -0
- icdev/tools/schemas/validation.py +109 -0
- icdev/tools/sdk/__init__.py +3 -0
- icdev/tools/sdk/icdev_client.py +218 -0
- icdev/tools/security/__init__.py +1 -0
- icdev/tools/security/agent_output_validator.py +330 -0
- icdev/tools/security/agent_trust_scorer.py +466 -0
- icdev/tools/security/ai_bom_generator.py +725 -0
- icdev/tools/security/ai_telemetry_logger.py +469 -0
- icdev/tools/security/atlas_red_team.py +543 -0
- icdev/tools/security/code_pattern_scanner.py +378 -0
- icdev/tools/security/confabulation_detector.py +271 -0
- icdev/tools/security/container_scanner.py +491 -0
- icdev/tools/security/dependency_auditor.py +944 -0
- icdev/tools/security/endpoint_security_scanner.py +579 -0
- icdev/tools/security/mcp_tool_authorizer.py +243 -0
- icdev/tools/security/prompt_injection_detector.py +737 -0
- icdev/tools/security/sast_runner.py +948 -0
- icdev/tools/security/secret_detector.py +378 -0
- icdev/tools/security/tool_chain_validator.py +357 -0
- icdev/tools/security/vuln_scanner.py +539 -0
- icdev/tools/simulation/__init__.py +2 -0
- icdev/tools/simulation/coa_generator.py +1552 -0
- icdev/tools/simulation/monte_carlo.py +758 -0
- icdev/tools/simulation/scenario_manager.py +1073 -0
- icdev/tools/simulation/simulation_engine.py +1104 -0
- icdev/tools/supply_chain/__init__.py +2 -0
- icdev/tools/supply_chain/cve_triager.py +705 -0
- icdev/tools/supply_chain/dependency_graph.py +645 -0
- icdev/tools/supply_chain/isa_manager.py +540 -0
- icdev/tools/supply_chain/scrm_assessor.py +546 -0
- icdev/tools/testing/__init__.py +2 -0
- icdev/tools/testing/acceptance_validator.py +411 -0
- icdev/tools/testing/claude_dir_validator.py +831 -0
- icdev/tools/testing/data_types.py +199 -0
- icdev/tools/testing/e2e_runner.py +715 -0
- icdev/tools/testing/fuzz_cli.py +306 -0
- icdev/tools/testing/health_check.py +483 -0
- icdev/tools/testing/platform_check.py +143 -0
- icdev/tools/testing/production_audit.py +1862 -0
- icdev/tools/testing/production_remediate.py +804 -0
- icdev/tools/testing/screenshot_validator.py +539 -0
- icdev/tools/testing/smoke_test.py +283 -0
- icdev/tools/testing/test_agent_models.py +117 -0
- icdev/tools/testing/test_orchestrator.py +957 -0
- icdev/tools/testing/utils.py +229 -0
- icdev/tools/translation/__init__.py +17 -0
- icdev/tools/translation/code_translator.py +550 -0
- icdev/tools/translation/dependency_mapper.py +277 -0
- icdev/tools/translation/feature_map.py +395 -0
- icdev/tools/translation/project_assembler.py +439 -0
- icdev/tools/translation/source_extractor.py +609 -0
- icdev/tools/translation/test_translator.py +333 -0
- icdev/tools/translation/translation_manager.py +582 -0
- icdev/tools/translation/translation_validator.py +662 -0
- icdev/tools/translation/type_checker.py +371 -0
- icdev-1.0.0.dist-info/METADATA +868 -0
- icdev-1.0.0.dist-info/RECORD +1105 -0
- icdev-1.0.0.dist-info/WHEEL +5 -0
- icdev-1.0.0.dist-info/entry_points.txt +9 -0
- icdev-1.0.0.dist-info/licenses/LICENSE +254 -0
- icdev-1.0.0.dist-info/licenses/NOTICE +268 -0
- icdev-1.0.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,697 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# CUI // SP-CTI
|
|
3
|
+
# Controlled by: Department of Defense
|
|
4
|
+
# CUI Category: CTI
|
|
5
|
+
# Distribution: D
|
|
6
|
+
# POC: ICDEV System Administrator
|
|
7
|
+
"""Solution Spec Generator — auto-generate solution specs from triaged innovation signals.
|
|
8
|
+
|
|
9
|
+
Takes triaged+approved signals and generates structured solution specifications that
|
|
10
|
+
feed into ICDEV's existing ATLAS build pipeline. Specs are deterministic (template-based,
|
|
11
|
+
not LLM) with GOTCHA layer mapping, BDD acceptance criteria, compliance impact, test
|
|
12
|
+
plans, and marketplace asset type classification.
|
|
13
|
+
|
|
14
|
+
Architecture:
|
|
15
|
+
- Template-based generation (no LLM, air-gap safe)
|
|
16
|
+
- Maps signal categories to GOTCHA layers (goal/tool/arg/context/hardprompt)
|
|
17
|
+
- Optional spec quality checking via spec_quality_checker.py (D156)
|
|
18
|
+
- Results stored in innovation_solutions table (append-only, D6)
|
|
19
|
+
|
|
20
|
+
Usage:
|
|
21
|
+
python tools/innovation/solution_generator.py --generate --signal-id "sig-xxx" --json
|
|
22
|
+
python tools/innovation/solution_generator.py --generate-all --json
|
|
23
|
+
python tools/innovation/solution_generator.py --status --solution-id "sol-xxx" --json
|
|
24
|
+
python tools/innovation/solution_generator.py --list --status generated --limit 20 --json
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
import argparse
|
|
28
|
+
import json
|
|
29
|
+
import os
|
|
30
|
+
import sqlite3
|
|
31
|
+
import sys
|
|
32
|
+
import uuid
|
|
33
|
+
from datetime import datetime, timezone
|
|
34
|
+
from pathlib import Path
|
|
35
|
+
from icdev._paths import get_project_root
|
|
36
|
+
|
|
37
|
+
# =========================================================================
|
|
38
|
+
# PATH SETUP
|
|
39
|
+
# =========================================================================
|
|
40
|
+
BASE_DIR = get_project_root()
|
|
41
|
+
if str(BASE_DIR) not in sys.path:
|
|
42
|
+
sys.path.insert(0, str(BASE_DIR))
|
|
43
|
+
|
|
44
|
+
DB_PATH = Path(os.environ.get("ICDEV_DB_PATH", str(BASE_DIR / "data" / "icdev.db")))
|
|
45
|
+
CONFIG_PATH = BASE_DIR / "args" / "innovation_config.yaml"
|
|
46
|
+
|
|
47
|
+
# =========================================================================
|
|
48
|
+
# GRACEFUL IMPORTS
|
|
49
|
+
# =========================================================================
|
|
50
|
+
try:
|
|
51
|
+
import yaml
|
|
52
|
+
_HAS_YAML = True
|
|
53
|
+
except ImportError:
|
|
54
|
+
_HAS_YAML = False
|
|
55
|
+
|
|
56
|
+
try:
|
|
57
|
+
from icdev.tools.audit.audit_logger import log_event as audit_log_event
|
|
58
|
+
_HAS_AUDIT = True
|
|
59
|
+
except ImportError:
|
|
60
|
+
_HAS_AUDIT = False
|
|
61
|
+
def audit_log_event(**kwargs):
|
|
62
|
+
return -1
|
|
63
|
+
|
|
64
|
+
try:
|
|
65
|
+
import jinja2 # noqa: F401
|
|
66
|
+
_HAS_JINJA2 = True
|
|
67
|
+
except ImportError:
|
|
68
|
+
_HAS_JINJA2 = False
|
|
69
|
+
|
|
70
|
+
try:
|
|
71
|
+
from icdev.tools.requirements.spec_quality_checker import check_spec_quality
|
|
72
|
+
_HAS_SPEC_CHECKER = True
|
|
73
|
+
except (ImportError, AttributeError):
|
|
74
|
+
_HAS_SPEC_CHECKER = False
|
|
75
|
+
|
|
76
|
+
# =========================================================================
|
|
77
|
+
# CONSTANTS & LAYER DEFINITIONS
|
|
78
|
+
# =========================================================================
|
|
79
|
+
VALID_STATUSES = ("generated", "building", "built", "published", "failed")
|
|
80
|
+
EFFORT_MAP = {
|
|
81
|
+
"S": {"label": "Small", "story_points": "1-3", "days": "1-2"},
|
|
82
|
+
"M": {"label": "Medium", "story_points": "5-8", "days": "3-5"},
|
|
83
|
+
"L": {"label": "Large", "story_points": "8-13", "days": "5-10"},
|
|
84
|
+
"XL": {"label": "Extra-Large", "story_points": "13-21", "days": "10-20"},
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
# GOTCHA layer info: description, proposed solution template, asset type, base effort, test templates
|
|
88
|
+
GOTCHA_LAYER_INFO = {
|
|
89
|
+
"goal": {
|
|
90
|
+
"description": "Process definitions -- what to achieve, which tools to use, expected outputs",
|
|
91
|
+
"proposed_template": ("Create a new goal workflow in `goals/` that defines:\n"
|
|
92
|
+
"1. Objective and success criteria\n2. Required tools and invocation order\n"
|
|
93
|
+
"3. Expected outputs and validation rules\n4. Error handling and edge cases\n"
|
|
94
|
+
"5. Integration with existing ATLAS/M-ATLAS phases"),
|
|
95
|
+
"asset_type": "goal", "effort": "M",
|
|
96
|
+
"test_unit": "Validate goal YAML/markdown structure, required sections present",
|
|
97
|
+
"test_bdd": ("Feature: {title} workflow\n Scenario: Execute {title} end-to-end\n"
|
|
98
|
+
" Given the goal file exists in goals/\n And all referenced tools are available\n"
|
|
99
|
+
" When the orchestrator executes the goal\n Then all expected outputs are generated\n"
|
|
100
|
+
" And no security gates are violated"),
|
|
101
|
+
},
|
|
102
|
+
"tool": {
|
|
103
|
+
"description": "Python scripts, one job each -- deterministic, don't think, just execute",
|
|
104
|
+
"proposed_template": ("Create a new deterministic Python script in `tools/` that:\n"
|
|
105
|
+
"1. Accepts CLI args via argparse with `--json` flag\n"
|
|
106
|
+
"2. Follows CUI header and PATH SETUP patterns\n"
|
|
107
|
+
"3. Uses `_get_db()`, `_now()`, `_audit()` helper pattern\n"
|
|
108
|
+
"4. Returns structured JSON output\n5. Graceful imports for optional deps\n"
|
|
109
|
+
"6. Add entry to `tools/manifest.md`"),
|
|
110
|
+
"asset_type": "tool", "effort": "L",
|
|
111
|
+
"test_unit": ("pytest unit tests: happy path, error handling, DB ops, JSON validation, "
|
|
112
|
+
"graceful degradation when optional deps missing"),
|
|
113
|
+
"test_bdd": ("Feature: {title} tool\n Scenario: Generate output with valid input\n"
|
|
114
|
+
" Given a valid input is provided\n When the tool is executed with --json\n"
|
|
115
|
+
" Then the output is valid JSON\n And the audit trail is updated\n"
|
|
116
|
+
" Scenario: Handle missing database gracefully\n"
|
|
117
|
+
" Given the database does not exist\n When the tool is executed\n"
|
|
118
|
+
" Then a clear error message is returned"),
|
|
119
|
+
},
|
|
120
|
+
"arg": {
|
|
121
|
+
"description": "YAML/JSON behavior settings -- change behavior without editing goals/tools",
|
|
122
|
+
"proposed_template": ("Create a new YAML configuration file in `args/` that:\n"
|
|
123
|
+
"1. Defines configurable parameters with sensible defaults\n"
|
|
124
|
+
"2. Inline comments explaining each setting\n3. CUI header marking\n"
|
|
125
|
+
"4. Follows existing args/ naming convention\n"
|
|
126
|
+
"5. Documents env var overrides (ICDEV_ prefix, D193)"),
|
|
127
|
+
"asset_type": "arg", "effort": "S",
|
|
128
|
+
"test_unit": "pytest: YAML parsing, required keys present, defaults sensible, env var override (D193)",
|
|
129
|
+
"test_bdd": ("Feature: {title} configuration\n"
|
|
130
|
+
" Scenario: Load configuration with defaults\n"
|
|
131
|
+
" Given no environment overrides are set\n"
|
|
132
|
+
" When the configuration is loaded\n Then all default values are populated\n"
|
|
133
|
+
" Scenario: Environment variable override\n"
|
|
134
|
+
" Given ICDEV_<KEY> is set in environment\n"
|
|
135
|
+
" When the configuration is loaded\n Then the env value takes precedence over YAML"),
|
|
136
|
+
},
|
|
137
|
+
"context": {
|
|
138
|
+
"description": "Static reference material -- tone rules, samples, standards, guidelines",
|
|
139
|
+
"proposed_template": ("Create a new context reference file in `context/` that:\n"
|
|
140
|
+
"1. Structured reference data (JSON or markdown)\n"
|
|
141
|
+
"2. Readable by goals and tools at runtime\n3. Provenance metadata (source, version)\n"
|
|
142
|
+
"4. CUI markings appropriate to content\n5. Self-contained (no external deps)"),
|
|
143
|
+
"asset_type": "context", "effort": "S",
|
|
144
|
+
"test_unit": "pytest: file loads, required fields present, no broken refs, UTF-8 encoding",
|
|
145
|
+
"test_bdd": ("Feature: {title} reference data\n"
|
|
146
|
+
" Scenario: Load context at runtime\n"
|
|
147
|
+
" Given the context file exists in context/\n When a tool reads the context\n"
|
|
148
|
+
" Then all entries are valid and accessible"),
|
|
149
|
+
},
|
|
150
|
+
"hardprompt": {
|
|
151
|
+
"description": "Reusable LLM instruction templates -- outline, rewrite, summarize",
|
|
152
|
+
"proposed_template": ("Create a new hardprompt template in `hardprompts/` that:\n"
|
|
153
|
+
"1. Reusable LLM instruction with clear input/output contract\n"
|
|
154
|
+
"2. Placeholder tokens for variable substitution\n"
|
|
155
|
+
"3. Expected response format (JSON, markdown, etc.)\n"
|
|
156
|
+
"4. Works with multiple LLM providers (Bedrock, Anthropic, OpenAI-compat)\n"
|
|
157
|
+
"5. CUI handling instructions when applicable"),
|
|
158
|
+
"asset_type": "hardprompt", "effort": "S",
|
|
159
|
+
"test_unit": "pytest: template renders, placeholders substituted, format instructions clear",
|
|
160
|
+
"test_bdd": ("Feature: {title} prompt template\n"
|
|
161
|
+
" Scenario: Render template with valid inputs\n"
|
|
162
|
+
" Given valid substitution values\n When the template is rendered\n"
|
|
163
|
+
" Then the output contains all expected sections"),
|
|
164
|
+
},
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
CATEGORY_LAYER_MAP = {
|
|
168
|
+
"security_vulnerability": "tool", "compliance_gap": "goal",
|
|
169
|
+
"developer_experience": "tool", "performance": "tool",
|
|
170
|
+
"modernization": "goal", "supply_chain": "tool",
|
|
171
|
+
"infrastructure": "arg", "testing": "tool", "ai_tooling": "hardprompt",
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
CATEGORY_FRAMEWORKS = {
|
|
175
|
+
"security_vulnerability": ["NIST 800-53 (SI, RA)", "FedRAMP", "CMMC"],
|
|
176
|
+
"compliance_gap": ["NIST 800-53", "FedRAMP", "CMMC", "CJIS", "HIPAA"],
|
|
177
|
+
"supply_chain": ["NIST 800-161", "CMMC (SC)", "FedRAMP (SA)"],
|
|
178
|
+
"modernization": ["FedRAMP (CM)", "CMMC (CM)", "NIST 800-53 (CM)"],
|
|
179
|
+
"infrastructure": ["NIST 800-53 (SC, AC)", "FedRAMP", "STIG"],
|
|
180
|
+
"testing": ["NIST 800-53 (SA)", "IEEE 1012 IV&V", "DoDI 5000.87 DES"],
|
|
181
|
+
"performance": ["NIST 800-53 (SC-5, SI-2)"],
|
|
182
|
+
"ai_tooling": ["NIST 800-53 (SA-15)", "FedRAMP"],
|
|
183
|
+
"developer_experience": [],
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
BOUNDARY_NOTES = {
|
|
187
|
+
"RED": "ATO-invalidating change. Full SSP revision required. Alternative COAs must be generated.",
|
|
188
|
+
"ORANGE": "Significant boundary change. SSP addendum and ISSO review required.",
|
|
189
|
+
"YELLOW": "Minor boundary adjustment. Possible POAM entry.",
|
|
190
|
+
"GREEN": "No boundary change anticipated. Standard compliance review.",
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
# =========================================================================
|
|
194
|
+
# DATABASE HELPERS
|
|
195
|
+
# =========================================================================
|
|
196
|
+
def _get_db(db_path=None):
|
|
197
|
+
"""Get database connection with dict-like row access."""
|
|
198
|
+
path = db_path or DB_PATH
|
|
199
|
+
if not path.exists():
|
|
200
|
+
raise FileNotFoundError(f"Database not found: {path}\nRun: python tools/db/init_icdev_db.py")
|
|
201
|
+
conn = sqlite3.connect(str(path))
|
|
202
|
+
conn.row_factory = sqlite3.Row
|
|
203
|
+
return conn
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
def _now():
|
|
207
|
+
"""ISO-8601 UTC timestamp."""
|
|
208
|
+
return datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
def _audit(event_type, actor, action, details=None, project_id=None):
|
|
212
|
+
"""Write audit trail entry (append-only, D6)."""
|
|
213
|
+
if _HAS_AUDIT:
|
|
214
|
+
try:
|
|
215
|
+
audit_log_event(event_type=event_type, actor=actor, action=action,
|
|
216
|
+
details=json.dumps(details) if details else None,
|
|
217
|
+
project_id=project_id or "innovation-engine")
|
|
218
|
+
except Exception:
|
|
219
|
+
pass
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
def _load_config():
|
|
223
|
+
"""Load innovation config from YAML."""
|
|
224
|
+
if not _HAS_YAML or not CONFIG_PATH.exists():
|
|
225
|
+
return {}
|
|
226
|
+
with open(CONFIG_PATH, "r", encoding="utf-8") as f:
|
|
227
|
+
return yaml.safe_load(f) or {}
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
def _ensure_solutions_table(conn):
|
|
231
|
+
"""Create innovation_solutions table if it does not exist (D6 append-only)."""
|
|
232
|
+
conn.execute("""CREATE TABLE IF NOT EXISTS innovation_solutions (
|
|
233
|
+
id TEXT PRIMARY KEY, signal_id TEXT NOT NULL, spec_content TEXT NOT NULL,
|
|
234
|
+
gotcha_layer TEXT NOT NULL, asset_type TEXT NOT NULL, estimated_effort TEXT NOT NULL,
|
|
235
|
+
status TEXT NOT NULL DEFAULT 'generated', spec_quality_score REAL,
|
|
236
|
+
created_at TEXT NOT NULL, updated_at TEXT NOT NULL,
|
|
237
|
+
FOREIGN KEY (signal_id) REFERENCES innovation_signals(id))""")
|
|
238
|
+
conn.execute("CREATE INDEX IF NOT EXISTS idx_solutions_signal ON innovation_solutions(signal_id)")
|
|
239
|
+
conn.execute("CREATE INDEX IF NOT EXISTS idx_solutions_status ON innovation_solutions(status)")
|
|
240
|
+
conn.commit()
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
# =========================================================================
|
|
244
|
+
# RESOLUTION HELPERS
|
|
245
|
+
# =========================================================================
|
|
246
|
+
def _resolve_gotcha_layer(signal):
|
|
247
|
+
"""Determine GOTCHA layer: explicit column > category map > keyword match > default 'tool'."""
|
|
248
|
+
explicit = signal.get("gotcha_layer")
|
|
249
|
+
if explicit and explicit in GOTCHA_LAYER_INFO:
|
|
250
|
+
return explicit
|
|
251
|
+
category = signal.get("category") or ""
|
|
252
|
+
if category in CATEGORY_LAYER_MAP:
|
|
253
|
+
return CATEGORY_LAYER_MAP[category]
|
|
254
|
+
config = _load_config()
|
|
255
|
+
layer_mapping = config.get("triage", {}).get("gotcha_fit", {}).get("layer_mapping", {})
|
|
256
|
+
text = (signal.get("title", "") + " " + signal.get("description", "")).lower()
|
|
257
|
+
for layer, keywords in layer_mapping.items():
|
|
258
|
+
if layer in GOTCHA_LAYER_INFO and any(kw.lower() in text for kw in keywords):
|
|
259
|
+
return layer
|
|
260
|
+
return "tool"
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
def _estimate_effort(gotcha_layer, signal):
|
|
264
|
+
"""Estimate effort (S/M/L/XL) from layer base + community score + boundary tier."""
|
|
265
|
+
base = GOTCHA_LAYER_INFO.get(gotcha_layer, {}).get("effort", "M")
|
|
266
|
+
order = ["S", "M", "L", "XL"]
|
|
267
|
+
idx = order.index(base)
|
|
268
|
+
if (signal.get("community_score") or 0.0) > 0.8:
|
|
269
|
+
idx = min(idx + 1, 3)
|
|
270
|
+
if (signal.get("boundary_tier") or "GREEN") in ("ORANGE", "RED"):
|
|
271
|
+
idx = min(idx + 1, 3)
|
|
272
|
+
return order[idx]
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
def _build_acceptance_criteria(gotcha_layer, signal):
|
|
276
|
+
"""Generate BDD-style Given/When/Then acceptance criteria."""
|
|
277
|
+
title = signal.get("title", "the feature")
|
|
278
|
+
category = signal.get("category") or ""
|
|
279
|
+
layer_criteria = {
|
|
280
|
+
"tool": [
|
|
281
|
+
f"- [ ] Given valid input, When `{title}` tool is invoked with `--json`, Then structured JSON is returned",
|
|
282
|
+
"- [ ] Given the tool is in `tools/manifest.md`, When checked, Then the entry exists",
|
|
283
|
+
"- [ ] Given DB unavailable, When invoked, Then a clear error without crash",
|
|
284
|
+
"- [ ] Given valid inputs, When completed, Then audit trail entry is written",
|
|
285
|
+
],
|
|
286
|
+
"goal": [
|
|
287
|
+
"- [ ] Given goal file in `goals/`, When orchestrator reads it, Then required sections present",
|
|
288
|
+
"- [ ] Given all referenced tools exist, When executed end-to-end, Then outputs produced",
|
|
289
|
+
"- [ ] Given a tool fails mid-workflow, When error handler runs, Then intermediates preserved",
|
|
290
|
+
"- [ ] Given goal in `goals/manifest.md`, When checked, Then entry exists",
|
|
291
|
+
],
|
|
292
|
+
"arg": [
|
|
293
|
+
"- [ ] Given YAML in `args/`, When loaded, Then all values parse correctly",
|
|
294
|
+
"- [ ] Given no env overrides, When defaults used, Then behavior correct",
|
|
295
|
+
"- [ ] Given `ICDEV_<KEY>` env var set, When loaded, Then env overrides YAML (D193)",
|
|
296
|
+
],
|
|
297
|
+
"context": [
|
|
298
|
+
"- [ ] Given context file in `context/`, When a tool reads it, Then entries valid",
|
|
299
|
+
"- [ ] Given context referenced by goal, When goal executes, Then data accessible",
|
|
300
|
+
"- [ ] Given UTF-8 content, When loaded, Then no encoding errors",
|
|
301
|
+
],
|
|
302
|
+
"hardprompt": [
|
|
303
|
+
"- [ ] Given valid substitution values, When rendered, Then all placeholders replaced",
|
|
304
|
+
"- [ ] Given template sent to LLM, When response received, Then matches expected format",
|
|
305
|
+
"- [ ] Given CUI content, When prompt includes CUI instructions, Then markings preserved",
|
|
306
|
+
],
|
|
307
|
+
}
|
|
308
|
+
criteria = list(layer_criteria.get(gotcha_layer, layer_criteria["tool"]))
|
|
309
|
+
if category == "security_vulnerability":
|
|
310
|
+
criteria.append("- [ ] Given SAST scanning, When solution code scanned, Then 0 critical/high findings")
|
|
311
|
+
elif category == "compliance_gap":
|
|
312
|
+
criteria.append("- [ ] Given crosswalk engine queried, When controls implemented, Then FedRAMP/CMMC auto-populated")
|
|
313
|
+
elif category == "supply_chain":
|
|
314
|
+
criteria.append("- [ ] Given SBOM regenerated, When solution built, Then new deps tracked")
|
|
315
|
+
criteria.append("- [ ] Given CUI markings required, When files generated, Then appropriate markings present")
|
|
316
|
+
return "\n".join(criteria)
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
# =========================================================================
|
|
320
|
+
# SPEC TEMPLATE & GENERATION
|
|
321
|
+
# =========================================================================
|
|
322
|
+
_SPEC_TEMPLATE = """\
|
|
323
|
+
# Solution: {title}
|
|
324
|
+
|
|
325
|
+
CUI // SP-CTI
|
|
326
|
+
|
|
327
|
+
## Problem Statement
|
|
328
|
+
{description}
|
|
329
|
+
|
|
330
|
+
## Source
|
|
331
|
+
- URL: {url}
|
|
332
|
+
- Community Score: {community_score:.2f}
|
|
333
|
+
- Innovation Score: {innovation_score:.2f}
|
|
334
|
+
- Category: {category}
|
|
335
|
+
|
|
336
|
+
## GOTCHA Layer
|
|
337
|
+
**{gotcha_layer}** -- {layer_description}
|
|
338
|
+
|
|
339
|
+
## Proposed Solution
|
|
340
|
+
{proposed_solution}
|
|
341
|
+
|
|
342
|
+
## Acceptance Criteria
|
|
343
|
+
{acceptance_criteria}
|
|
344
|
+
|
|
345
|
+
## Compliance Impact
|
|
346
|
+
- Boundary Tier: {boundary_tier}
|
|
347
|
+
- Frameworks Affected: {frameworks}
|
|
348
|
+
- Notes: {compliance_notes}
|
|
349
|
+
|
|
350
|
+
## Test Plan
|
|
351
|
+
### Unit Tests
|
|
352
|
+
{test_unit}
|
|
353
|
+
|
|
354
|
+
### BDD Scenarios
|
|
355
|
+
```gherkin
|
|
356
|
+
{test_bdd}
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
## Marketplace
|
|
360
|
+
- Asset Type: {asset_type}
|
|
361
|
+
- Estimated Effort: {effort} ({effort_label}, ~{effort_days} days, {effort_points} story points)
|
|
362
|
+
"""
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
def generate_solution_spec(signal_id, db_path=None):
|
|
366
|
+
"""Generate a full solution specification from an approved signal.
|
|
367
|
+
|
|
368
|
+
Reads signal from DB, resolves GOTCHA layer, generates structured spec with
|
|
369
|
+
acceptance criteria, compliance impact, test plan, marketplace classification.
|
|
370
|
+
Stores result in innovation_solutions table.
|
|
371
|
+
|
|
372
|
+
Args:
|
|
373
|
+
signal_id: The signal identifier (sig-xxx).
|
|
374
|
+
db_path: Optional database path override.
|
|
375
|
+
|
|
376
|
+
Returns:
|
|
377
|
+
dict with solution_id, spec_content, status, and metadata.
|
|
378
|
+
"""
|
|
379
|
+
conn = _get_db(db_path)
|
|
380
|
+
_ensure_solutions_table(conn)
|
|
381
|
+
try:
|
|
382
|
+
signal = conn.execute("SELECT * FROM innovation_signals WHERE id = ?",
|
|
383
|
+
(signal_id,)).fetchone()
|
|
384
|
+
if not signal:
|
|
385
|
+
return {"error": f"Signal not found: {signal_id}"}
|
|
386
|
+
signal = dict(signal)
|
|
387
|
+
|
|
388
|
+
if signal.get("status") != "approved":
|
|
389
|
+
return {"error": f"Signal {signal_id} not approved (status: {signal.get('status')})",
|
|
390
|
+
"signal_status": signal.get("status")}
|
|
391
|
+
|
|
392
|
+
existing = conn.execute("SELECT id, status FROM innovation_solutions WHERE signal_id = ?",
|
|
393
|
+
(signal_id,)).fetchone()
|
|
394
|
+
if existing:
|
|
395
|
+
return {"error": f"Solution already exists for signal {signal_id}",
|
|
396
|
+
"solution_id": existing["id"], "solution_status": existing["status"]}
|
|
397
|
+
|
|
398
|
+
gotcha_layer = _resolve_gotcha_layer(signal)
|
|
399
|
+
layer_info = GOTCHA_LAYER_INFO.get(gotcha_layer, GOTCHA_LAYER_INFO["tool"])
|
|
400
|
+
effort = _estimate_effort(gotcha_layer, signal)
|
|
401
|
+
effort_details = EFFORT_MAP.get(effort, EFFORT_MAP["M"])
|
|
402
|
+
boundary_tier = signal.get("boundary_tier") or "GREEN"
|
|
403
|
+
category = signal.get("category") or "uncategorized"
|
|
404
|
+
frameworks = CATEGORY_FRAMEWORKS.get(category, [])
|
|
405
|
+
metadata = {}
|
|
406
|
+
try:
|
|
407
|
+
metadata = json.loads(signal.get("metadata", "{}") or "{}")
|
|
408
|
+
except (json.JSONDecodeError, TypeError):
|
|
409
|
+
pass
|
|
410
|
+
compliance_notes = metadata.get("compliance_notes") or BOUNDARY_NOTES.get(boundary_tier, BOUNDARY_NOTES["GREEN"])
|
|
411
|
+
innovation_score = signal.get("innovation_score") if signal.get("innovation_score") is not None else (signal.get("community_score") or 0.0)
|
|
412
|
+
asset_type = layer_info.get("asset_type", "tool")
|
|
413
|
+
|
|
414
|
+
spec_content = _SPEC_TEMPLATE.format(
|
|
415
|
+
title=signal.get("title", "Untitled"),
|
|
416
|
+
description=signal.get("description", "No description provided."),
|
|
417
|
+
url=signal.get("url", "N/A"),
|
|
418
|
+
community_score=float(signal.get("community_score") or 0.0),
|
|
419
|
+
innovation_score=float(innovation_score),
|
|
420
|
+
category=category, gotcha_layer=gotcha_layer,
|
|
421
|
+
layer_description=layer_info.get("description", ""),
|
|
422
|
+
proposed_solution=layer_info.get("proposed_template", ""),
|
|
423
|
+
acceptance_criteria=_build_acceptance_criteria(gotcha_layer, signal),
|
|
424
|
+
boundary_tier=boundary_tier,
|
|
425
|
+
frameworks=", ".join(frameworks) if frameworks else "None identified",
|
|
426
|
+
compliance_notes=compliance_notes,
|
|
427
|
+
test_unit=layer_info.get("test_unit", "Standard unit tests required."),
|
|
428
|
+
test_bdd=layer_info.get("test_bdd", "").format(title=signal.get("title", "Feature")),
|
|
429
|
+
asset_type=asset_type, effort=effort,
|
|
430
|
+
effort_label=effort_details["label"],
|
|
431
|
+
effort_days=effort_details["days"], effort_points=effort_details["story_points"])
|
|
432
|
+
|
|
433
|
+
spec_quality_score = None
|
|
434
|
+
if _HAS_SPEC_CHECKER:
|
|
435
|
+
try:
|
|
436
|
+
spec_quality_score = check_spec_quality(spec_content).get("score")
|
|
437
|
+
except Exception:
|
|
438
|
+
pass
|
|
439
|
+
|
|
440
|
+
sol_id = f"sol-{uuid.uuid4().hex[:12]}"
|
|
441
|
+
now = _now()
|
|
442
|
+
conn.execute("""INSERT INTO innovation_solutions
|
|
443
|
+
(id, signal_id, spec_content, gotcha_layer, asset_type, estimated_effort,
|
|
444
|
+
status, spec_quality_score, created_at, updated_at)
|
|
445
|
+
VALUES (?, ?, ?, ?, ?, ?, 'generated', ?, ?, ?)""",
|
|
446
|
+
(sol_id, signal_id, spec_content, gotcha_layer, asset_type, effort,
|
|
447
|
+
spec_quality_score, now, now))
|
|
448
|
+
conn.commit()
|
|
449
|
+
|
|
450
|
+
_audit("innovation.solution_generated", "innovation-agent",
|
|
451
|
+
f"Generated solution {sol_id} from signal {signal_id}",
|
|
452
|
+
{"solution_id": sol_id, "signal_id": signal_id, "gotcha_layer": gotcha_layer,
|
|
453
|
+
"asset_type": asset_type, "effort": effort, "boundary_tier": boundary_tier})
|
|
454
|
+
|
|
455
|
+
# Phase 36 integration: propagation metadata for capability evaluator
|
|
456
|
+
propagation_metadata = {
|
|
457
|
+
"target_child_ids": [], # Populated during propagation planning
|
|
458
|
+
"security_assessment": {
|
|
459
|
+
"injection_scanned": False,
|
|
460
|
+
"trust_level": "system",
|
|
461
|
+
"boundary_tier": boundary_tier,
|
|
462
|
+
},
|
|
463
|
+
"compliance_frameworks": frameworks,
|
|
464
|
+
"source_signal_id": signal_id,
|
|
465
|
+
"gotcha_layer": gotcha_layer,
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
return {"solution_id": sol_id, "signal_id": signal_id, "gotcha_layer": gotcha_layer,
|
|
469
|
+
"asset_type": asset_type, "estimated_effort": effort, "effort_details": effort_details,
|
|
470
|
+
"boundary_tier": boundary_tier, "frameworks_affected": frameworks,
|
|
471
|
+
"spec_quality_score": spec_quality_score, "status": "generated",
|
|
472
|
+
"spec_content": spec_content, "created_at": now,
|
|
473
|
+
"propagation_metadata": propagation_metadata}
|
|
474
|
+
finally:
|
|
475
|
+
conn.close()
|
|
476
|
+
|
|
477
|
+
|
|
478
|
+
def generate_all_approved(db_path=None):
|
|
479
|
+
"""Generate specs for all approved signals without existing solutions.
|
|
480
|
+
|
|
481
|
+
Respects max_auto_solutions_per_pi budget from innovation_config.yaml.
|
|
482
|
+
|
|
483
|
+
Args:
|
|
484
|
+
db_path: Optional database path override.
|
|
485
|
+
|
|
486
|
+
Returns:
|
|
487
|
+
dict with generated count, errors, and per-solution results.
|
|
488
|
+
"""
|
|
489
|
+
config = _load_config()
|
|
490
|
+
max_solutions = config.get("scoring", {}).get("max_auto_solutions_per_pi", 10)
|
|
491
|
+
conn = _get_db(db_path)
|
|
492
|
+
_ensure_solutions_table(conn)
|
|
493
|
+
try:
|
|
494
|
+
signals = [dict(r) for r in conn.execute("""
|
|
495
|
+
SELECT s.* FROM innovation_signals s
|
|
496
|
+
LEFT JOIN innovation_solutions sol ON s.id = sol.signal_id
|
|
497
|
+
WHERE s.status = 'approved' AND sol.id IS NULL
|
|
498
|
+
ORDER BY s.community_score DESC""").fetchall()]
|
|
499
|
+
finally:
|
|
500
|
+
conn.close()
|
|
501
|
+
|
|
502
|
+
if not signals:
|
|
503
|
+
return {"generated": 0, "errors": 0, "skipped": 0,
|
|
504
|
+
"message": "No approved signals pending solution generation.", "results": []}
|
|
505
|
+
|
|
506
|
+
to_process = signals[:max_solutions]
|
|
507
|
+
skipped = max(0, len(signals) - max_solutions)
|
|
508
|
+
results, generated, errors = [], 0, 0
|
|
509
|
+
for sig in to_process:
|
|
510
|
+
result = generate_solution_spec(sig["id"], db_path)
|
|
511
|
+
if "error" in result:
|
|
512
|
+
errors += 1
|
|
513
|
+
else:
|
|
514
|
+
generated += 1
|
|
515
|
+
results.append({"signal_id": sig["id"], "signal_title": sig.get("title", ""),
|
|
516
|
+
"result": result.get("solution_id") or result.get("error"),
|
|
517
|
+
"status": "generated" if "solution_id" in result else "error"})
|
|
518
|
+
|
|
519
|
+
_audit("innovation.batch_generation", "innovation-agent",
|
|
520
|
+
f"Batch: {generated} generated, {errors} errors, {skipped} skipped",
|
|
521
|
+
{"generated": generated, "errors": errors, "skipped": skipped, "budget": max_solutions})
|
|
522
|
+
return {"generated": generated, "errors": errors, "skipped": skipped,
|
|
523
|
+
"budget": max_solutions, "total_approved": len(signals), "results": results}
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
def get_solution_status(solution_id=None, db_path=None):
|
|
527
|
+
"""Get detailed status of a specific solution.
|
|
528
|
+
|
|
529
|
+
Args:
|
|
530
|
+
solution_id: The solution identifier (sol-xxx).
|
|
531
|
+
db_path: Optional database path override.
|
|
532
|
+
|
|
533
|
+
Returns:
|
|
534
|
+
dict with solution details or error.
|
|
535
|
+
"""
|
|
536
|
+
if not solution_id:
|
|
537
|
+
return {"error": "solution_id is required"}
|
|
538
|
+
conn = _get_db(db_path)
|
|
539
|
+
_ensure_solutions_table(conn)
|
|
540
|
+
try:
|
|
541
|
+
row = conn.execute("SELECT * FROM innovation_solutions WHERE id = ?",
|
|
542
|
+
(solution_id,)).fetchone()
|
|
543
|
+
if not row:
|
|
544
|
+
return {"error": f"Solution not found: {solution_id}"}
|
|
545
|
+
sol = dict(row)
|
|
546
|
+
sig_row = conn.execute("SELECT title, source, category, community_score, url "
|
|
547
|
+
"FROM innovation_signals WHERE id = ?",
|
|
548
|
+
(sol["signal_id"],)).fetchone()
|
|
549
|
+
sig_summary = dict(sig_row) if sig_row else {}
|
|
550
|
+
return {"solution_id": sol["id"], "signal_id": sol["signal_id"],
|
|
551
|
+
"signal_summary": sig_summary, "gotcha_layer": sol["gotcha_layer"],
|
|
552
|
+
"asset_type": sol["asset_type"], "estimated_effort": sol["estimated_effort"],
|
|
553
|
+
"effort_details": EFFORT_MAP.get(sol["estimated_effort"], {}),
|
|
554
|
+
"status": sol["status"], "spec_quality_score": sol["spec_quality_score"],
|
|
555
|
+
"spec_content": sol["spec_content"],
|
|
556
|
+
"created_at": sol["created_at"], "updated_at": sol["updated_at"]}
|
|
557
|
+
finally:
|
|
558
|
+
conn.close()
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
def list_solutions(status=None, limit=20, db_path=None):
|
|
562
|
+
"""List generated solutions with optional status filter.
|
|
563
|
+
|
|
564
|
+
Args:
|
|
565
|
+
status: Filter by status (generated/building/built/published/failed).
|
|
566
|
+
limit: Maximum number of results (default 20).
|
|
567
|
+
db_path: Optional database path override.
|
|
568
|
+
|
|
569
|
+
Returns:
|
|
570
|
+
dict with solutions list and counts.
|
|
571
|
+
"""
|
|
572
|
+
conn = _get_db(db_path)
|
|
573
|
+
_ensure_solutions_table(conn)
|
|
574
|
+
try:
|
|
575
|
+
query = ("SELECT sol.id, sol.signal_id, sol.gotcha_layer, sol.asset_type, "
|
|
576
|
+
"sol.estimated_effort, sol.status, sol.spec_quality_score, "
|
|
577
|
+
"sol.created_at, sol.updated_at, s.title as signal_title, "
|
|
578
|
+
"s.source as signal_source, s.category as signal_category "
|
|
579
|
+
"FROM innovation_solutions sol "
|
|
580
|
+
"LEFT JOIN innovation_signals s ON sol.signal_id = s.id")
|
|
581
|
+
params = []
|
|
582
|
+
if status:
|
|
583
|
+
if status not in VALID_STATUSES:
|
|
584
|
+
return {"error": f"Invalid status: {status}. Valid: {', '.join(VALID_STATUSES)}"}
|
|
585
|
+
query += " WHERE sol.status = ?"
|
|
586
|
+
params.append(status)
|
|
587
|
+
query += " ORDER BY sol.created_at DESC LIMIT ?"
|
|
588
|
+
params.append(limit)
|
|
589
|
+
|
|
590
|
+
solutions = [{"solution_id": r["id"], "signal_id": r["signal_id"],
|
|
591
|
+
"signal_title": r["signal_title"] or "", "signal_source": r["signal_source"] or "",
|
|
592
|
+
"signal_category": r["signal_category"] or "", "gotcha_layer": r["gotcha_layer"],
|
|
593
|
+
"asset_type": r["asset_type"], "estimated_effort": r["estimated_effort"],
|
|
594
|
+
"status": r["status"], "spec_quality_score": r["spec_quality_score"],
|
|
595
|
+
"created_at": r["created_at"], "updated_at": r["updated_at"]}
|
|
596
|
+
for r in conn.execute(query, params).fetchall()]
|
|
597
|
+
|
|
598
|
+
counts = {r["status"]: r["cnt"] for r in conn.execute(
|
|
599
|
+
"SELECT status, COUNT(*) as cnt FROM innovation_solutions GROUP BY status").fetchall()}
|
|
600
|
+
return {"solutions": solutions, "returned": len(solutions), "total": sum(counts.values()),
|
|
601
|
+
"filter_status": status, "counts_by_status": counts}
|
|
602
|
+
finally:
|
|
603
|
+
conn.close()
|
|
604
|
+
|
|
605
|
+
|
|
606
|
+
# =========================================================================
|
|
607
|
+
# CLI
|
|
608
|
+
# =========================================================================
|
|
609
|
+
def _print_human(args, result):
|
|
610
|
+
"""Print human-readable output."""
|
|
611
|
+
if "error" in result:
|
|
612
|
+
print(f"ERROR: {result['error']}")
|
|
613
|
+
return
|
|
614
|
+
if args.generate:
|
|
615
|
+
q = result.get("spec_quality_score")
|
|
616
|
+
print(f"Solution generated: {result.get('solution_id')}\n"
|
|
617
|
+
f" Signal: {result.get('signal_id')} GOTCHA: {result.get('gotcha_layer')}\n"
|
|
618
|
+
f" Asset: {result.get('asset_type')} Effort: {result.get('estimated_effort')}\n"
|
|
619
|
+
f" Boundary: {result.get('boundary_tier')} Quality: {f'{q:.2f}' if q else 'N/A'}\n"
|
|
620
|
+
f" Frameworks: {', '.join(result.get('frameworks_affected', [])) or 'None'}\n\n"
|
|
621
|
+
f"--- Spec Content ---\n{result.get('spec_content', '')}")
|
|
622
|
+
elif args.generate_all:
|
|
623
|
+
print(f"Batch: {result.get('generated', 0)} generated, {result.get('errors', 0)} errors, "
|
|
624
|
+
f"{result.get('skipped', 0)} skipped (budget: {result.get('budget')})")
|
|
625
|
+
for r in result.get("results", []):
|
|
626
|
+
icon = "OK" if r["status"] == "generated" else "FAIL"
|
|
627
|
+
print(f" [{icon}] {r['signal_id']}: {r['signal_title'][:60]} -> {r['result']}")
|
|
628
|
+
elif args.status:
|
|
629
|
+
sig = result.get("signal_summary", {})
|
|
630
|
+
q = result.get("spec_quality_score")
|
|
631
|
+
print(f"Solution: {result.get('solution_id')}\n"
|
|
632
|
+
f" Signal: {result.get('signal_id')} ({sig.get('title', 'N/A')})\n"
|
|
633
|
+
f" GOTCHA: {result.get('gotcha_layer')} Asset: {result.get('asset_type')}\n"
|
|
634
|
+
f" Effort: {result.get('estimated_effort')} Status: {result.get('status')}\n"
|
|
635
|
+
f" Quality: {f'{q:.2f}' if q else 'N/A'}")
|
|
636
|
+
elif args.list:
|
|
637
|
+
counts = result.get("counts_by_status", {})
|
|
638
|
+
print(f"Solutions ({result.get('returned', 0)} of {result.get('total', 0)})"
|
|
639
|
+
f" Status: {', '.join(f'{k}={v}' for k, v in counts.items())}")
|
|
640
|
+
for s in result.get("solutions", []):
|
|
641
|
+
q = s.get("spec_quality_score")
|
|
642
|
+
print(f" {s['solution_id']} [{s['status']:10s}] {s['gotcha_layer']:10s} "
|
|
643
|
+
f"{s['asset_type']:12s} effort={s['estimated_effort']} "
|
|
644
|
+
f"quality={f'{q:.2f}' if q else 'N/A'}\n"
|
|
645
|
+
f" Signal: {s['signal_title'][:70]}")
|
|
646
|
+
|
|
647
|
+
|
|
648
|
+
def main():
|
|
649
|
+
parser = argparse.ArgumentParser(
|
|
650
|
+
description="ICDEV Solution Spec Generator -- generate specs from triaged innovation signals")
|
|
651
|
+
parser.add_argument("--json", action="store_true", help="JSON output")
|
|
652
|
+
parser.add_argument("--db-path", type=Path, default=None, help="Database path override")
|
|
653
|
+
|
|
654
|
+
group = parser.add_mutually_exclusive_group(required=True)
|
|
655
|
+
group.add_argument("--generate", action="store_true", help="Generate spec for a single signal")
|
|
656
|
+
group.add_argument("--generate-all", action="store_true", help="Generate specs for all approved signals")
|
|
657
|
+
group.add_argument("--status", action="store_true", help="Check status of a specific solution")
|
|
658
|
+
group.add_argument("--list", action="store_true", help="List generated solutions")
|
|
659
|
+
|
|
660
|
+
parser.add_argument("--signal-id", type=str, help="Signal ID (with --generate)")
|
|
661
|
+
parser.add_argument("--solution-id", type=str, help="Solution ID (with --status)")
|
|
662
|
+
parser.add_argument("--status-filter", type=str, dest="filter_status",
|
|
663
|
+
choices=VALID_STATUSES, help="Filter by status (with --list)")
|
|
664
|
+
parser.add_argument("--limit", type=int, default=20, help="Max results (with --list)")
|
|
665
|
+
|
|
666
|
+
args = parser.parse_args()
|
|
667
|
+
try:
|
|
668
|
+
if args.generate:
|
|
669
|
+
if not args.signal_id:
|
|
670
|
+
parser.error("--generate requires --signal-id")
|
|
671
|
+
result = generate_solution_spec(args.signal_id, args.db_path)
|
|
672
|
+
elif args.generate_all:
|
|
673
|
+
result = generate_all_approved(args.db_path)
|
|
674
|
+
elif args.status:
|
|
675
|
+
if not args.solution_id:
|
|
676
|
+
parser.error("--status requires --solution-id")
|
|
677
|
+
result = get_solution_status(args.solution_id, args.db_path)
|
|
678
|
+
elif args.list:
|
|
679
|
+
result = list_solutions(args.filter_status, args.limit, args.db_path)
|
|
680
|
+
else:
|
|
681
|
+
result = {"error": "No action specified"}
|
|
682
|
+
|
|
683
|
+
if args.json:
|
|
684
|
+
print(json.dumps(result, indent=2, default=str))
|
|
685
|
+
else:
|
|
686
|
+
_print_human(args, result)
|
|
687
|
+
except Exception as e:
|
|
688
|
+
err = {"error": str(e)}
|
|
689
|
+
if args.json:
|
|
690
|
+
print(json.dumps(err, indent=2))
|
|
691
|
+
else:
|
|
692
|
+
print(f"ERROR: {e}", file=sys.stderr)
|
|
693
|
+
sys.exit(1)
|
|
694
|
+
|
|
695
|
+
|
|
696
|
+
if __name__ == "__main__":
|
|
697
|
+
main()
|