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,1709 @@
|
|
|
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
|
+
"""DB Init Generator - generates standalone database init scripts for child apps.
|
|
8
|
+
|
|
9
|
+
Decision D27: Minimal DB + migration. Core tables first, expand as capabilities activate.
|
|
10
|
+
|
|
11
|
+
Consumes a blueprint dict (from tools/builder/app_blueprint.py) and generates a
|
|
12
|
+
self-contained Python script that initializes the child app's SQLite database.
|
|
13
|
+
The generated script has zero ICDEV imports and creates only the tables needed
|
|
14
|
+
for the child app's enabled capabilities.
|
|
15
|
+
|
|
16
|
+
CLI:
|
|
17
|
+
python tools/builder/db_init_generator.py \\
|
|
18
|
+
--blueprint /path/to/blueprint.json \\
|
|
19
|
+
--output-dir /path/to/output \\
|
|
20
|
+
--json
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
import argparse
|
|
24
|
+
import json
|
|
25
|
+
import logging
|
|
26
|
+
import re
|
|
27
|
+
import sys
|
|
28
|
+
import textwrap
|
|
29
|
+
from datetime import datetime, timezone
|
|
30
|
+
from pathlib import Path
|
|
31
|
+
from typing import Any, Dict, List
|
|
32
|
+
from icdev._paths import get_project_root
|
|
33
|
+
|
|
34
|
+
BASE_DIR = get_project_root()
|
|
35
|
+
logger = logging.getLogger("icdev.db_init_generator")
|
|
36
|
+
|
|
37
|
+
try:
|
|
38
|
+
from icdev.tools.audit.audit_logger import log_event as audit_log_event
|
|
39
|
+
except ImportError:
|
|
40
|
+
def audit_log_event(**kwargs):
|
|
41
|
+
logger.debug("audit_logger unavailable — skipping audit event")
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# ============================================================
|
|
45
|
+
# TABLE DEFINITIONS (used to generate child app's init script)
|
|
46
|
+
# ============================================================
|
|
47
|
+
# Each dict maps table_name -> CREATE TABLE SQL.
|
|
48
|
+
# The SQL is standalone and uses CREATE TABLE IF NOT EXISTS
|
|
49
|
+
# so re-running is idempotent.
|
|
50
|
+
|
|
51
|
+
CORE_TABLES: Dict[str, str] = {
|
|
52
|
+
"projects": textwrap.dedent("""\
|
|
53
|
+
CREATE TABLE IF NOT EXISTS projects (
|
|
54
|
+
id TEXT PRIMARY KEY,
|
|
55
|
+
name TEXT NOT NULL,
|
|
56
|
+
type TEXT,
|
|
57
|
+
status TEXT DEFAULT 'active',
|
|
58
|
+
classification TEXT DEFAULT 'CUI',
|
|
59
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
60
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
61
|
+
);"""),
|
|
62
|
+
|
|
63
|
+
"agents": textwrap.dedent("""\
|
|
64
|
+
CREATE TABLE IF NOT EXISTS agents (
|
|
65
|
+
id TEXT PRIMARY KEY,
|
|
66
|
+
name TEXT NOT NULL,
|
|
67
|
+
agent_type TEXT NOT NULL,
|
|
68
|
+
port INTEGER,
|
|
69
|
+
status TEXT DEFAULT 'inactive',
|
|
70
|
+
last_health_check TIMESTAMP,
|
|
71
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
72
|
+
);"""),
|
|
73
|
+
|
|
74
|
+
"a2a_tasks": textwrap.dedent("""\
|
|
75
|
+
CREATE TABLE IF NOT EXISTS a2a_tasks (
|
|
76
|
+
id TEXT PRIMARY KEY,
|
|
77
|
+
source_agent TEXT,
|
|
78
|
+
target_agent TEXT,
|
|
79
|
+
task_type TEXT NOT NULL,
|
|
80
|
+
payload TEXT,
|
|
81
|
+
status TEXT DEFAULT 'pending',
|
|
82
|
+
result TEXT,
|
|
83
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
84
|
+
completed_at TIMESTAMP
|
|
85
|
+
);"""),
|
|
86
|
+
|
|
87
|
+
"audit_trail": textwrap.dedent("""\
|
|
88
|
+
CREATE TABLE IF NOT EXISTS audit_trail (
|
|
89
|
+
id TEXT PRIMARY KEY,
|
|
90
|
+
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
91
|
+
event_type TEXT NOT NULL,
|
|
92
|
+
actor TEXT,
|
|
93
|
+
action TEXT NOT NULL,
|
|
94
|
+
project_id TEXT,
|
|
95
|
+
details TEXT,
|
|
96
|
+
classification TEXT DEFAULT 'CUI'
|
|
97
|
+
);"""),
|
|
98
|
+
|
|
99
|
+
"knowledge_patterns": textwrap.dedent("""\
|
|
100
|
+
CREATE TABLE IF NOT EXISTS knowledge_patterns (
|
|
101
|
+
id TEXT PRIMARY KEY,
|
|
102
|
+
pattern_type TEXT NOT NULL,
|
|
103
|
+
pattern_signature TEXT NOT NULL,
|
|
104
|
+
description TEXT,
|
|
105
|
+
solution TEXT,
|
|
106
|
+
confidence REAL DEFAULT 0.0,
|
|
107
|
+
occurrences INTEGER DEFAULT 1,
|
|
108
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
109
|
+
);"""),
|
|
110
|
+
|
|
111
|
+
"self_healing_events": textwrap.dedent("""\
|
|
112
|
+
CREATE TABLE IF NOT EXISTS self_healing_events (
|
|
113
|
+
id TEXT PRIMARY KEY,
|
|
114
|
+
pattern_id TEXT REFERENCES knowledge_patterns(id),
|
|
115
|
+
trigger_type TEXT NOT NULL,
|
|
116
|
+
action_taken TEXT,
|
|
117
|
+
result TEXT,
|
|
118
|
+
confidence REAL,
|
|
119
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
120
|
+
);"""),
|
|
121
|
+
|
|
122
|
+
"tasks": textwrap.dedent("""\
|
|
123
|
+
CREATE TABLE IF NOT EXISTS tasks (
|
|
124
|
+
id TEXT PRIMARY KEY,
|
|
125
|
+
title TEXT NOT NULL,
|
|
126
|
+
status TEXT DEFAULT 'pending',
|
|
127
|
+
priority TEXT DEFAULT 'medium',
|
|
128
|
+
assigned_agent TEXT,
|
|
129
|
+
project_id TEXT,
|
|
130
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
131
|
+
completed_at TIMESTAMP
|
|
132
|
+
);"""),
|
|
133
|
+
|
|
134
|
+
"deployments": textwrap.dedent("""\
|
|
135
|
+
CREATE TABLE IF NOT EXISTS deployments (
|
|
136
|
+
id TEXT PRIMARY KEY,
|
|
137
|
+
project_id TEXT,
|
|
138
|
+
environment TEXT NOT NULL,
|
|
139
|
+
status TEXT DEFAULT 'pending',
|
|
140
|
+
artifacts TEXT,
|
|
141
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
142
|
+
);"""),
|
|
143
|
+
|
|
144
|
+
"metric_snapshots": textwrap.dedent("""\
|
|
145
|
+
CREATE TABLE IF NOT EXISTS metric_snapshots (
|
|
146
|
+
id TEXT PRIMARY KEY,
|
|
147
|
+
metric_type TEXT NOT NULL,
|
|
148
|
+
metric_value REAL,
|
|
149
|
+
project_id TEXT,
|
|
150
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
151
|
+
);"""),
|
|
152
|
+
|
|
153
|
+
"alerts": textwrap.dedent("""\
|
|
154
|
+
CREATE TABLE IF NOT EXISTS alerts (
|
|
155
|
+
id TEXT PRIMARY KEY,
|
|
156
|
+
alert_type TEXT NOT NULL,
|
|
157
|
+
severity TEXT DEFAULT 'info',
|
|
158
|
+
message TEXT,
|
|
159
|
+
project_id TEXT,
|
|
160
|
+
acknowledged INTEGER DEFAULT 0,
|
|
161
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
162
|
+
);"""),
|
|
163
|
+
|
|
164
|
+
"code_reviews": textwrap.dedent("""\
|
|
165
|
+
CREATE TABLE IF NOT EXISTS code_reviews (
|
|
166
|
+
id TEXT PRIMARY KEY,
|
|
167
|
+
project_id TEXT,
|
|
168
|
+
reviewer TEXT,
|
|
169
|
+
status TEXT DEFAULT 'pending',
|
|
170
|
+
findings TEXT,
|
|
171
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
172
|
+
);"""),
|
|
173
|
+
|
|
174
|
+
"maintenance_audits": textwrap.dedent("""\
|
|
175
|
+
CREATE TABLE IF NOT EXISTS maintenance_audits (
|
|
176
|
+
id TEXT PRIMARY KEY,
|
|
177
|
+
project_id TEXT,
|
|
178
|
+
audit_type TEXT NOT NULL,
|
|
179
|
+
score REAL,
|
|
180
|
+
findings TEXT,
|
|
181
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
182
|
+
);"""),
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
COMPLIANCE_TABLES: Dict[str, str] = {
|
|
187
|
+
"compliance_controls": textwrap.dedent("""\
|
|
188
|
+
CREATE TABLE IF NOT EXISTS compliance_controls (
|
|
189
|
+
id TEXT PRIMARY KEY,
|
|
190
|
+
family TEXT NOT NULL,
|
|
191
|
+
title TEXT NOT NULL,
|
|
192
|
+
description TEXT,
|
|
193
|
+
impact_level TEXT,
|
|
194
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
195
|
+
);"""),
|
|
196
|
+
|
|
197
|
+
"project_controls": textwrap.dedent("""\
|
|
198
|
+
CREATE TABLE IF NOT EXISTS project_controls (
|
|
199
|
+
id TEXT PRIMARY KEY,
|
|
200
|
+
project_id TEXT NOT NULL,
|
|
201
|
+
control_id TEXT NOT NULL REFERENCES compliance_controls(id),
|
|
202
|
+
implementation_status TEXT DEFAULT 'planned',
|
|
203
|
+
implementation_description TEXT,
|
|
204
|
+
evidence_path TEXT,
|
|
205
|
+
last_assessed TIMESTAMP,
|
|
206
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
207
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
208
|
+
UNIQUE(project_id, control_id)
|
|
209
|
+
);"""),
|
|
210
|
+
|
|
211
|
+
"ssp_documents": textwrap.dedent("""\
|
|
212
|
+
CREATE TABLE IF NOT EXISTS ssp_documents (
|
|
213
|
+
id TEXT PRIMARY KEY,
|
|
214
|
+
project_id TEXT NOT NULL,
|
|
215
|
+
version TEXT NOT NULL,
|
|
216
|
+
system_name TEXT NOT NULL,
|
|
217
|
+
content TEXT NOT NULL,
|
|
218
|
+
file_path TEXT,
|
|
219
|
+
classification TEXT DEFAULT 'CUI',
|
|
220
|
+
status TEXT DEFAULT 'draft',
|
|
221
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
222
|
+
);"""),
|
|
223
|
+
|
|
224
|
+
"poam_items": textwrap.dedent("""\
|
|
225
|
+
CREATE TABLE IF NOT EXISTS poam_items (
|
|
226
|
+
id TEXT PRIMARY KEY,
|
|
227
|
+
project_id TEXT NOT NULL,
|
|
228
|
+
weakness_id TEXT NOT NULL,
|
|
229
|
+
weakness_description TEXT NOT NULL,
|
|
230
|
+
severity TEXT NOT NULL,
|
|
231
|
+
control_id TEXT REFERENCES compliance_controls(id),
|
|
232
|
+
status TEXT DEFAULT 'open',
|
|
233
|
+
corrective_action TEXT,
|
|
234
|
+
milestone_date DATE,
|
|
235
|
+
responsible_party TEXT,
|
|
236
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
237
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
238
|
+
);"""),
|
|
239
|
+
|
|
240
|
+
"stig_findings": textwrap.dedent("""\
|
|
241
|
+
CREATE TABLE IF NOT EXISTS stig_findings (
|
|
242
|
+
id TEXT PRIMARY KEY,
|
|
243
|
+
project_id TEXT NOT NULL,
|
|
244
|
+
stig_id TEXT NOT NULL,
|
|
245
|
+
rule_id TEXT NOT NULL,
|
|
246
|
+
severity TEXT NOT NULL,
|
|
247
|
+
title TEXT NOT NULL,
|
|
248
|
+
description TEXT,
|
|
249
|
+
status TEXT DEFAULT 'Open',
|
|
250
|
+
assessed_by TEXT,
|
|
251
|
+
assessed_at TIMESTAMP,
|
|
252
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
253
|
+
);"""),
|
|
254
|
+
|
|
255
|
+
"sbom_records": textwrap.dedent("""\
|
|
256
|
+
CREATE TABLE IF NOT EXISTS sbom_records (
|
|
257
|
+
id TEXT PRIMARY KEY,
|
|
258
|
+
project_id TEXT NOT NULL,
|
|
259
|
+
version TEXT NOT NULL,
|
|
260
|
+
format TEXT DEFAULT 'cyclonedx',
|
|
261
|
+
file_path TEXT NOT NULL,
|
|
262
|
+
component_count INTEGER,
|
|
263
|
+
vulnerability_count INTEGER,
|
|
264
|
+
generated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
265
|
+
);"""),
|
|
266
|
+
|
|
267
|
+
"fedramp_assessments": textwrap.dedent("""\
|
|
268
|
+
CREATE TABLE IF NOT EXISTS fedramp_assessments (
|
|
269
|
+
id TEXT PRIMARY KEY,
|
|
270
|
+
project_id TEXT NOT NULL,
|
|
271
|
+
baseline TEXT NOT NULL,
|
|
272
|
+
control_id TEXT NOT NULL,
|
|
273
|
+
status TEXT DEFAULT 'not_assessed',
|
|
274
|
+
evidence_description TEXT,
|
|
275
|
+
evidence_path TEXT,
|
|
276
|
+
notes TEXT,
|
|
277
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
278
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
279
|
+
UNIQUE(project_id, baseline, control_id)
|
|
280
|
+
);"""),
|
|
281
|
+
|
|
282
|
+
"cmmc_assessments": textwrap.dedent("""\
|
|
283
|
+
CREATE TABLE IF NOT EXISTS cmmc_assessments (
|
|
284
|
+
id TEXT PRIMARY KEY,
|
|
285
|
+
project_id TEXT NOT NULL,
|
|
286
|
+
level INTEGER NOT NULL,
|
|
287
|
+
practice_id TEXT NOT NULL,
|
|
288
|
+
domain TEXT NOT NULL,
|
|
289
|
+
status TEXT DEFAULT 'not_assessed',
|
|
290
|
+
evidence_description TEXT,
|
|
291
|
+
evidence_path TEXT,
|
|
292
|
+
notes TEXT,
|
|
293
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
294
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
295
|
+
UNIQUE(project_id, practice_id)
|
|
296
|
+
);"""),
|
|
297
|
+
|
|
298
|
+
"oscal_artifacts": textwrap.dedent("""\
|
|
299
|
+
CREATE TABLE IF NOT EXISTS oscal_artifacts (
|
|
300
|
+
id TEXT PRIMARY KEY,
|
|
301
|
+
project_id TEXT NOT NULL,
|
|
302
|
+
artifact_type TEXT NOT NULL,
|
|
303
|
+
oscal_version TEXT DEFAULT '1.1.2',
|
|
304
|
+
format TEXT DEFAULT 'json',
|
|
305
|
+
file_path TEXT NOT NULL,
|
|
306
|
+
file_hash TEXT,
|
|
307
|
+
schema_valid INTEGER DEFAULT 0,
|
|
308
|
+
generated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
309
|
+
classification TEXT DEFAULT 'CUI',
|
|
310
|
+
UNIQUE(project_id, artifact_type, format)
|
|
311
|
+
);"""),
|
|
312
|
+
|
|
313
|
+
"cato_evidence": textwrap.dedent("""\
|
|
314
|
+
CREATE TABLE IF NOT EXISTS cato_evidence (
|
|
315
|
+
id TEXT PRIMARY KEY,
|
|
316
|
+
project_id TEXT NOT NULL,
|
|
317
|
+
control_id TEXT NOT NULL,
|
|
318
|
+
evidence_type TEXT NOT NULL,
|
|
319
|
+
evidence_source TEXT NOT NULL,
|
|
320
|
+
evidence_path TEXT,
|
|
321
|
+
evidence_hash TEXT,
|
|
322
|
+
collected_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
323
|
+
expires_at TIMESTAMP,
|
|
324
|
+
is_fresh INTEGER DEFAULT 1,
|
|
325
|
+
status TEXT DEFAULT 'current',
|
|
326
|
+
UNIQUE(project_id, control_id, evidence_type, evidence_source)
|
|
327
|
+
);"""),
|
|
328
|
+
|
|
329
|
+
"cssp_assessments": textwrap.dedent("""\
|
|
330
|
+
CREATE TABLE IF NOT EXISTS cssp_assessments (
|
|
331
|
+
id TEXT PRIMARY KEY,
|
|
332
|
+
project_id TEXT NOT NULL,
|
|
333
|
+
functional_area TEXT NOT NULL,
|
|
334
|
+
requirement_id TEXT NOT NULL,
|
|
335
|
+
status TEXT DEFAULT 'not_assessed',
|
|
336
|
+
evidence_description TEXT,
|
|
337
|
+
evidence_path TEXT,
|
|
338
|
+
notes TEXT,
|
|
339
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
340
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
341
|
+
UNIQUE(project_id, requirement_id)
|
|
342
|
+
);"""),
|
|
343
|
+
|
|
344
|
+
"ivv_assessments": textwrap.dedent("""\
|
|
345
|
+
CREATE TABLE IF NOT EXISTS ivv_assessments (
|
|
346
|
+
id TEXT PRIMARY KEY,
|
|
347
|
+
project_id TEXT NOT NULL,
|
|
348
|
+
process_area TEXT NOT NULL,
|
|
349
|
+
verification_type TEXT NOT NULL,
|
|
350
|
+
requirement_id TEXT NOT NULL,
|
|
351
|
+
status TEXT DEFAULT 'not_assessed',
|
|
352
|
+
evidence_description TEXT,
|
|
353
|
+
evidence_path TEXT,
|
|
354
|
+
notes TEXT,
|
|
355
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
356
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
357
|
+
UNIQUE(project_id, requirement_id)
|
|
358
|
+
);"""),
|
|
359
|
+
|
|
360
|
+
"sbd_assessments": textwrap.dedent("""\
|
|
361
|
+
CREATE TABLE IF NOT EXISTS sbd_assessments (
|
|
362
|
+
id TEXT PRIMARY KEY,
|
|
363
|
+
project_id TEXT NOT NULL,
|
|
364
|
+
domain TEXT NOT NULL,
|
|
365
|
+
requirement_id TEXT NOT NULL,
|
|
366
|
+
status TEXT DEFAULT 'not_assessed',
|
|
367
|
+
evidence_description TEXT,
|
|
368
|
+
evidence_path TEXT,
|
|
369
|
+
notes TEXT,
|
|
370
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
371
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
372
|
+
UNIQUE(project_id, requirement_id)
|
|
373
|
+
);"""),
|
|
374
|
+
|
|
375
|
+
"control_crosswalk": textwrap.dedent("""\
|
|
376
|
+
CREATE TABLE IF NOT EXISTS control_crosswalk (
|
|
377
|
+
id TEXT PRIMARY KEY,
|
|
378
|
+
nist_800_53_id TEXT NOT NULL,
|
|
379
|
+
framework_id TEXT NOT NULL,
|
|
380
|
+
framework_control_id TEXT NOT NULL,
|
|
381
|
+
mapping_type TEXT DEFAULT 'equivalent',
|
|
382
|
+
notes TEXT,
|
|
383
|
+
UNIQUE(nist_800_53_id, framework_id)
|
|
384
|
+
);"""),
|
|
385
|
+
|
|
386
|
+
"pi_compliance_tracking": textwrap.dedent("""\
|
|
387
|
+
CREATE TABLE IF NOT EXISTS pi_compliance_tracking (
|
|
388
|
+
id TEXT PRIMARY KEY,
|
|
389
|
+
project_id TEXT NOT NULL,
|
|
390
|
+
pi_number TEXT NOT NULL,
|
|
391
|
+
pi_start_date TEXT,
|
|
392
|
+
pi_end_date TEXT,
|
|
393
|
+
compliance_score_start REAL,
|
|
394
|
+
compliance_score_end REAL,
|
|
395
|
+
controls_implemented INTEGER DEFAULT 0,
|
|
396
|
+
controls_remaining INTEGER DEFAULT 0,
|
|
397
|
+
poam_items_closed INTEGER DEFAULT 0,
|
|
398
|
+
poam_items_opened INTEGER DEFAULT 0,
|
|
399
|
+
findings_remediated INTEGER DEFAULT 0,
|
|
400
|
+
notes TEXT,
|
|
401
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
402
|
+
UNIQUE(project_id, pi_number)
|
|
403
|
+
);"""),
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
MBSE_TABLES: Dict[str, str] = {
|
|
408
|
+
"sysml_elements": textwrap.dedent("""\
|
|
409
|
+
CREATE TABLE IF NOT EXISTS sysml_elements (
|
|
410
|
+
id TEXT PRIMARY KEY,
|
|
411
|
+
project_id TEXT NOT NULL,
|
|
412
|
+
xmi_id TEXT NOT NULL,
|
|
413
|
+
element_type TEXT NOT NULL,
|
|
414
|
+
name TEXT NOT NULL,
|
|
415
|
+
qualified_name TEXT,
|
|
416
|
+
parent_id TEXT REFERENCES sysml_elements(id),
|
|
417
|
+
stereotype TEXT,
|
|
418
|
+
description TEXT,
|
|
419
|
+
properties TEXT,
|
|
420
|
+
source_file TEXT NOT NULL,
|
|
421
|
+
source_hash TEXT NOT NULL,
|
|
422
|
+
imported_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
423
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
424
|
+
UNIQUE(project_id, xmi_id)
|
|
425
|
+
);"""),
|
|
426
|
+
|
|
427
|
+
"sysml_relationships": textwrap.dedent("""\
|
|
428
|
+
CREATE TABLE IF NOT EXISTS sysml_relationships (
|
|
429
|
+
id TEXT PRIMARY KEY,
|
|
430
|
+
project_id TEXT NOT NULL,
|
|
431
|
+
source_element_id TEXT NOT NULL REFERENCES sysml_elements(id),
|
|
432
|
+
target_element_id TEXT NOT NULL REFERENCES sysml_elements(id),
|
|
433
|
+
relationship_type TEXT NOT NULL,
|
|
434
|
+
name TEXT,
|
|
435
|
+
properties TEXT,
|
|
436
|
+
source_file TEXT,
|
|
437
|
+
UNIQUE(project_id, source_element_id, target_element_id, relationship_type)
|
|
438
|
+
);"""),
|
|
439
|
+
|
|
440
|
+
"doors_requirements": textwrap.dedent("""\
|
|
441
|
+
CREATE TABLE IF NOT EXISTS doors_requirements (
|
|
442
|
+
id TEXT PRIMARY KEY,
|
|
443
|
+
project_id TEXT NOT NULL,
|
|
444
|
+
doors_id TEXT NOT NULL,
|
|
445
|
+
module_name TEXT,
|
|
446
|
+
requirement_type TEXT,
|
|
447
|
+
title TEXT NOT NULL,
|
|
448
|
+
description TEXT,
|
|
449
|
+
priority TEXT,
|
|
450
|
+
status TEXT DEFAULT 'active',
|
|
451
|
+
source_file TEXT NOT NULL,
|
|
452
|
+
source_hash TEXT NOT NULL,
|
|
453
|
+
imported_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
454
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
455
|
+
UNIQUE(project_id, doors_id)
|
|
456
|
+
);"""),
|
|
457
|
+
|
|
458
|
+
"digital_thread_links": textwrap.dedent("""\
|
|
459
|
+
CREATE TABLE IF NOT EXISTS digital_thread_links (
|
|
460
|
+
id TEXT PRIMARY KEY,
|
|
461
|
+
project_id TEXT NOT NULL,
|
|
462
|
+
source_type TEXT NOT NULL,
|
|
463
|
+
source_id TEXT NOT NULL,
|
|
464
|
+
target_type TEXT NOT NULL,
|
|
465
|
+
target_id TEXT NOT NULL,
|
|
466
|
+
link_type TEXT NOT NULL,
|
|
467
|
+
confidence REAL DEFAULT 1.0,
|
|
468
|
+
evidence TEXT,
|
|
469
|
+
created_by TEXT DEFAULT 'system',
|
|
470
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
471
|
+
UNIQUE(project_id, source_type, source_id, target_type, target_id, link_type)
|
|
472
|
+
);"""),
|
|
473
|
+
|
|
474
|
+
"model_imports": textwrap.dedent("""\
|
|
475
|
+
CREATE TABLE IF NOT EXISTS model_imports (
|
|
476
|
+
id TEXT PRIMARY KEY,
|
|
477
|
+
project_id TEXT NOT NULL,
|
|
478
|
+
import_type TEXT NOT NULL,
|
|
479
|
+
source_file TEXT NOT NULL,
|
|
480
|
+
source_hash TEXT NOT NULL,
|
|
481
|
+
elements_imported INTEGER DEFAULT 0,
|
|
482
|
+
relationships_imported INTEGER DEFAULT 0,
|
|
483
|
+
errors INTEGER DEFAULT 0,
|
|
484
|
+
error_details TEXT,
|
|
485
|
+
status TEXT DEFAULT 'completed',
|
|
486
|
+
imported_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
487
|
+
);"""),
|
|
488
|
+
|
|
489
|
+
"model_snapshots": textwrap.dedent("""\
|
|
490
|
+
CREATE TABLE IF NOT EXISTS model_snapshots (
|
|
491
|
+
id TEXT PRIMARY KEY,
|
|
492
|
+
project_id TEXT NOT NULL,
|
|
493
|
+
pi_number TEXT,
|
|
494
|
+
snapshot_type TEXT NOT NULL,
|
|
495
|
+
element_count INTEGER DEFAULT 0,
|
|
496
|
+
relationship_count INTEGER DEFAULT 0,
|
|
497
|
+
requirement_count INTEGER DEFAULT 0,
|
|
498
|
+
thread_link_count INTEGER DEFAULT 0,
|
|
499
|
+
content_hash TEXT NOT NULL,
|
|
500
|
+
snapshot_data TEXT,
|
|
501
|
+
notes TEXT,
|
|
502
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
503
|
+
UNIQUE(project_id, pi_number, snapshot_type)
|
|
504
|
+
);"""),
|
|
505
|
+
|
|
506
|
+
"model_code_mappings": textwrap.dedent("""\
|
|
507
|
+
CREATE TABLE IF NOT EXISTS model_code_mappings (
|
|
508
|
+
id TEXT PRIMARY KEY,
|
|
509
|
+
project_id TEXT NOT NULL,
|
|
510
|
+
sysml_element_id TEXT NOT NULL REFERENCES sysml_elements(id),
|
|
511
|
+
code_path TEXT NOT NULL,
|
|
512
|
+
code_type TEXT NOT NULL,
|
|
513
|
+
mapping_direction TEXT DEFAULT 'model_to_code',
|
|
514
|
+
sync_status TEXT DEFAULT 'synced',
|
|
515
|
+
last_synced TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
516
|
+
model_hash TEXT,
|
|
517
|
+
code_hash TEXT,
|
|
518
|
+
UNIQUE(project_id, sysml_element_id, code_path)
|
|
519
|
+
);"""),
|
|
520
|
+
|
|
521
|
+
"des_compliance": textwrap.dedent("""\
|
|
522
|
+
CREATE TABLE IF NOT EXISTS des_compliance (
|
|
523
|
+
id TEXT PRIMARY KEY,
|
|
524
|
+
project_id TEXT NOT NULL,
|
|
525
|
+
requirement_id TEXT NOT NULL,
|
|
526
|
+
requirement_title TEXT NOT NULL,
|
|
527
|
+
category TEXT NOT NULL,
|
|
528
|
+
status TEXT DEFAULT 'not_assessed',
|
|
529
|
+
evidence TEXT,
|
|
530
|
+
automation_result TEXT,
|
|
531
|
+
assessed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
532
|
+
notes TEXT,
|
|
533
|
+
UNIQUE(project_id, requirement_id)
|
|
534
|
+
);"""),
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
|
|
538
|
+
# ============================================================
|
|
539
|
+
# D-CHILD-1: RICOAS TABLES
|
|
540
|
+
# ============================================================
|
|
541
|
+
|
|
542
|
+
RICOAS_TABLES: Dict[str, str] = {
|
|
543
|
+
"intake_sessions": textwrap.dedent("""\
|
|
544
|
+
CREATE TABLE IF NOT EXISTS intake_sessions (
|
|
545
|
+
id TEXT PRIMARY KEY,
|
|
546
|
+
project_id TEXT REFERENCES projects(id),
|
|
547
|
+
customer_name TEXT NOT NULL,
|
|
548
|
+
customer_org TEXT,
|
|
549
|
+
session_status TEXT DEFAULT 'active'
|
|
550
|
+
CHECK(session_status IN ('active', 'paused', 'completed', 'abandoned', 'approved')),
|
|
551
|
+
classification TEXT DEFAULT 'CUI',
|
|
552
|
+
impact_level TEXT DEFAULT 'IL5'
|
|
553
|
+
CHECK(impact_level IN ('IL2', 'IL4', 'IL5', 'IL6')),
|
|
554
|
+
readiness_score REAL DEFAULT 0.0,
|
|
555
|
+
readiness_breakdown TEXT,
|
|
556
|
+
gap_count INTEGER DEFAULT 0,
|
|
557
|
+
ambiguity_count INTEGER DEFAULT 0,
|
|
558
|
+
total_requirements INTEGER DEFAULT 0,
|
|
559
|
+
decomposed_count INTEGER DEFAULT 0,
|
|
560
|
+
context_summary TEXT,
|
|
561
|
+
source_documents TEXT,
|
|
562
|
+
resumed_from TEXT REFERENCES intake_sessions(id),
|
|
563
|
+
created_by TEXT,
|
|
564
|
+
created_at TEXT DEFAULT (datetime('now')),
|
|
565
|
+
updated_at TEXT DEFAULT (datetime('now'))
|
|
566
|
+
);"""),
|
|
567
|
+
|
|
568
|
+
"intake_requirements": textwrap.dedent("""\
|
|
569
|
+
CREATE TABLE IF NOT EXISTS intake_requirements (
|
|
570
|
+
id TEXT PRIMARY KEY,
|
|
571
|
+
session_id TEXT NOT NULL REFERENCES intake_sessions(id),
|
|
572
|
+
project_id TEXT REFERENCES projects(id),
|
|
573
|
+
source_turn INTEGER,
|
|
574
|
+
raw_text TEXT NOT NULL,
|
|
575
|
+
refined_text TEXT,
|
|
576
|
+
requirement_type TEXT DEFAULT 'functional'
|
|
577
|
+
CHECK(requirement_type IN ('functional', 'non_functional', 'interface',
|
|
578
|
+
'security', 'performance', 'compliance', 'data', 'constraint',
|
|
579
|
+
'operational', 'transitional')),
|
|
580
|
+
priority TEXT DEFAULT 'medium'
|
|
581
|
+
CHECK(priority IN ('critical', 'high', 'medium', 'low')),
|
|
582
|
+
status TEXT DEFAULT 'draft'
|
|
583
|
+
CHECK(status IN ('draft', 'clarified', 'validated', 'approved', 'rejected',
|
|
584
|
+
'decomposed', 'deferred')),
|
|
585
|
+
clarity_score REAL DEFAULT 0.0,
|
|
586
|
+
completeness_score REAL DEFAULT 0.0,
|
|
587
|
+
testability_score REAL DEFAULT 0.0,
|
|
588
|
+
feasibility_score REAL DEFAULT 0.0,
|
|
589
|
+
compliance_impact TEXT,
|
|
590
|
+
gaps TEXT,
|
|
591
|
+
ambiguities TEXT,
|
|
592
|
+
acceptance_criteria TEXT,
|
|
593
|
+
source_document TEXT,
|
|
594
|
+
source_section TEXT,
|
|
595
|
+
classification TEXT DEFAULT 'CUI',
|
|
596
|
+
created_at TEXT DEFAULT (datetime('now')),
|
|
597
|
+
updated_at TEXT DEFAULT (datetime('now'))
|
|
598
|
+
);"""),
|
|
599
|
+
|
|
600
|
+
"safe_decomposition": textwrap.dedent("""\
|
|
601
|
+
CREATE TABLE IF NOT EXISTS safe_decomposition (
|
|
602
|
+
id TEXT PRIMARY KEY,
|
|
603
|
+
session_id TEXT NOT NULL REFERENCES intake_sessions(id),
|
|
604
|
+
project_id TEXT REFERENCES projects(id),
|
|
605
|
+
parent_id TEXT REFERENCES safe_decomposition(id),
|
|
606
|
+
level TEXT NOT NULL
|
|
607
|
+
CHECK(level IN ('epic', 'capability', 'feature', 'story', 'enabler')),
|
|
608
|
+
title TEXT NOT NULL,
|
|
609
|
+
description TEXT,
|
|
610
|
+
acceptance_criteria TEXT,
|
|
611
|
+
story_points INTEGER,
|
|
612
|
+
t_shirt_size TEXT CHECK(t_shirt_size IN ('XS', 'S', 'M', 'L', 'XL', 'XXL')),
|
|
613
|
+
pi_target TEXT,
|
|
614
|
+
team TEXT,
|
|
615
|
+
wsjf_score REAL,
|
|
616
|
+
source_requirement_ids TEXT,
|
|
617
|
+
nist_controls TEXT,
|
|
618
|
+
ato_impact_tier TEXT CHECK(ato_impact_tier IN ('GREEN', 'YELLOW', 'ORANGE', 'RED')),
|
|
619
|
+
status TEXT DEFAULT 'draft'
|
|
620
|
+
CHECK(status IN ('draft', 'refined', 'approved', 'committed', 'in_progress', 'done', 'rejected')),
|
|
621
|
+
classification TEXT DEFAULT 'CUI',
|
|
622
|
+
created_at TEXT DEFAULT (datetime('now')),
|
|
623
|
+
updated_at TEXT DEFAULT (datetime('now'))
|
|
624
|
+
);"""),
|
|
625
|
+
|
|
626
|
+
"readiness_scores": textwrap.dedent("""\
|
|
627
|
+
CREATE TABLE IF NOT EXISTS readiness_scores (
|
|
628
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
629
|
+
session_id TEXT NOT NULL REFERENCES intake_sessions(id),
|
|
630
|
+
turn_number INTEGER,
|
|
631
|
+
overall_score REAL NOT NULL,
|
|
632
|
+
completeness REAL NOT NULL,
|
|
633
|
+
clarity REAL NOT NULL,
|
|
634
|
+
feasibility REAL NOT NULL,
|
|
635
|
+
compliance REAL NOT NULL,
|
|
636
|
+
testability REAL NOT NULL,
|
|
637
|
+
gap_count INTEGER DEFAULT 0,
|
|
638
|
+
ambiguity_count INTEGER DEFAULT 0,
|
|
639
|
+
requirement_count INTEGER DEFAULT 0,
|
|
640
|
+
scored_at TEXT DEFAULT (datetime('now'))
|
|
641
|
+
);"""),
|
|
642
|
+
|
|
643
|
+
"ato_system_registry": textwrap.dedent("""\
|
|
644
|
+
CREATE TABLE IF NOT EXISTS ato_system_registry (
|
|
645
|
+
id TEXT PRIMARY KEY,
|
|
646
|
+
project_id TEXT NOT NULL REFERENCES projects(id),
|
|
647
|
+
system_name TEXT NOT NULL,
|
|
648
|
+
system_acronym TEXT,
|
|
649
|
+
ato_type TEXT CHECK(ato_type IN ('ato', 'iato', 'dato', 'cato')),
|
|
650
|
+
ato_date TEXT,
|
|
651
|
+
ato_expiry TEXT,
|
|
652
|
+
authorizing_official TEXT,
|
|
653
|
+
accreditation_boundary TEXT,
|
|
654
|
+
impact_level TEXT CHECK(impact_level IN ('IL2', 'IL4', 'IL5', 'IL6')),
|
|
655
|
+
data_types TEXT,
|
|
656
|
+
interconnections TEXT,
|
|
657
|
+
baseline_controls TEXT,
|
|
658
|
+
component_inventory TEXT,
|
|
659
|
+
classification TEXT DEFAULT 'CUI',
|
|
660
|
+
created_at TEXT DEFAULT (datetime('now')),
|
|
661
|
+
updated_at TEXT DEFAULT (datetime('now')),
|
|
662
|
+
UNIQUE(project_id, system_name)
|
|
663
|
+
);"""),
|
|
664
|
+
|
|
665
|
+
"boundary_impact_assessments": textwrap.dedent("""\
|
|
666
|
+
CREATE TABLE IF NOT EXISTS boundary_impact_assessments (
|
|
667
|
+
id TEXT PRIMARY KEY,
|
|
668
|
+
session_id TEXT REFERENCES intake_sessions(id),
|
|
669
|
+
project_id TEXT NOT NULL REFERENCES projects(id),
|
|
670
|
+
system_id TEXT NOT NULL REFERENCES ato_system_registry(id),
|
|
671
|
+
requirement_id TEXT REFERENCES intake_requirements(id),
|
|
672
|
+
impact_tier TEXT NOT NULL CHECK(impact_tier IN ('GREEN', 'YELLOW', 'ORANGE', 'RED')),
|
|
673
|
+
impact_category TEXT NOT NULL,
|
|
674
|
+
impact_description TEXT NOT NULL,
|
|
675
|
+
affected_controls TEXT,
|
|
676
|
+
affected_components TEXT,
|
|
677
|
+
remediation_required TEXT,
|
|
678
|
+
alternative_approach TEXT,
|
|
679
|
+
risk_score REAL DEFAULT 0.0,
|
|
680
|
+
assessed_by TEXT DEFAULT 'icdev-requirements-analyst',
|
|
681
|
+
assessed_at TEXT DEFAULT (datetime('now'))
|
|
682
|
+
);"""),
|
|
683
|
+
|
|
684
|
+
"supply_chain_vendors": textwrap.dedent("""\
|
|
685
|
+
CREATE TABLE IF NOT EXISTS supply_chain_vendors (
|
|
686
|
+
id TEXT PRIMARY KEY,
|
|
687
|
+
project_id TEXT NOT NULL REFERENCES projects(id),
|
|
688
|
+
vendor_name TEXT NOT NULL,
|
|
689
|
+
vendor_type TEXT CHECK(vendor_type IN ('cots', 'gots', 'oss', 'saas', 'paas', 'iaas', 'contractor', 'subcontractor')),
|
|
690
|
+
country_of_origin TEXT,
|
|
691
|
+
scrm_risk_tier TEXT CHECK(scrm_risk_tier IN ('low', 'moderate', 'high', 'critical')),
|
|
692
|
+
section_889_status TEXT CHECK(section_889_status IN ('compliant', 'under_review', 'prohibited', 'exempt')),
|
|
693
|
+
dod_approved INTEGER DEFAULT 0,
|
|
694
|
+
contact_info TEXT,
|
|
695
|
+
isa_required INTEGER DEFAULT 0,
|
|
696
|
+
last_assessed TEXT,
|
|
697
|
+
classification TEXT DEFAULT 'CUI',
|
|
698
|
+
created_at TEXT DEFAULT (datetime('now')),
|
|
699
|
+
updated_at TEXT DEFAULT (datetime('now')),
|
|
700
|
+
UNIQUE(project_id, vendor_name)
|
|
701
|
+
);"""),
|
|
702
|
+
|
|
703
|
+
"supply_chain_dependencies": textwrap.dedent("""\
|
|
704
|
+
CREATE TABLE IF NOT EXISTS supply_chain_dependencies (
|
|
705
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
706
|
+
project_id TEXT NOT NULL REFERENCES projects(id),
|
|
707
|
+
source_type TEXT NOT NULL,
|
|
708
|
+
source_id TEXT NOT NULL,
|
|
709
|
+
target_type TEXT NOT NULL,
|
|
710
|
+
target_id TEXT NOT NULL,
|
|
711
|
+
dependency_type TEXT NOT NULL,
|
|
712
|
+
criticality TEXT DEFAULT 'medium'
|
|
713
|
+
CHECK(criticality IN ('critical', 'high', 'medium', 'low')),
|
|
714
|
+
isa_id TEXT,
|
|
715
|
+
metadata TEXT,
|
|
716
|
+
created_at TEXT DEFAULT (datetime('now'))
|
|
717
|
+
);"""),
|
|
718
|
+
|
|
719
|
+
"isa_agreements": textwrap.dedent("""\
|
|
720
|
+
CREATE TABLE IF NOT EXISTS isa_agreements (
|
|
721
|
+
id TEXT PRIMARY KEY,
|
|
722
|
+
project_id TEXT NOT NULL REFERENCES projects(id),
|
|
723
|
+
agreement_type TEXT NOT NULL CHECK(agreement_type IN ('isa', 'mou', 'moa', 'sla', 'ila')),
|
|
724
|
+
partner_system TEXT NOT NULL,
|
|
725
|
+
partner_org TEXT,
|
|
726
|
+
status TEXT DEFAULT 'draft'
|
|
727
|
+
CHECK(status IN ('draft', 'review', 'signed', 'active', 'expiring', 'expired', 'terminated')),
|
|
728
|
+
signed_date TEXT,
|
|
729
|
+
expiry_date TEXT,
|
|
730
|
+
data_types_shared TEXT,
|
|
731
|
+
ports_protocols TEXT,
|
|
732
|
+
security_controls TEXT,
|
|
733
|
+
poc_name TEXT,
|
|
734
|
+
poc_email TEXT,
|
|
735
|
+
review_cadence_days INTEGER DEFAULT 365,
|
|
736
|
+
next_review_date TEXT,
|
|
737
|
+
classification TEXT DEFAULT 'CUI',
|
|
738
|
+
created_at TEXT DEFAULT (datetime('now')),
|
|
739
|
+
updated_at TEXT DEFAULT (datetime('now'))
|
|
740
|
+
);"""),
|
|
741
|
+
|
|
742
|
+
"scrm_assessments": textwrap.dedent("""\
|
|
743
|
+
CREATE TABLE IF NOT EXISTS scrm_assessments (
|
|
744
|
+
id TEXT PRIMARY KEY,
|
|
745
|
+
project_id TEXT NOT NULL REFERENCES projects(id),
|
|
746
|
+
vendor_id TEXT REFERENCES supply_chain_vendors(id),
|
|
747
|
+
package_name TEXT,
|
|
748
|
+
assessment_type TEXT NOT NULL
|
|
749
|
+
CHECK(assessment_type IN ('vendor', 'component', 'aggregate', 'supply_chain_event')),
|
|
750
|
+
risk_score REAL DEFAULT 0.0,
|
|
751
|
+
likelihood TEXT CHECK(likelihood IN ('very_low', 'low', 'moderate', 'high', 'very_high')),
|
|
752
|
+
impact TEXT CHECK(impact IN ('very_low', 'low', 'moderate', 'high', 'very_high')),
|
|
753
|
+
mitigations TEXT,
|
|
754
|
+
residual_risk TEXT CHECK(residual_risk IN ('low', 'moderate', 'high', 'critical')),
|
|
755
|
+
assessed_by TEXT DEFAULT 'icdev-supply-chain-agent',
|
|
756
|
+
assessed_at TEXT DEFAULT (datetime('now'))
|
|
757
|
+
);"""),
|
|
758
|
+
|
|
759
|
+
"cve_triage": textwrap.dedent("""\
|
|
760
|
+
CREATE TABLE IF NOT EXISTS cve_triage (
|
|
761
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
762
|
+
project_id TEXT NOT NULL REFERENCES projects(id),
|
|
763
|
+
cve_id TEXT NOT NULL,
|
|
764
|
+
package_name TEXT NOT NULL,
|
|
765
|
+
package_version TEXT,
|
|
766
|
+
severity TEXT CHECK(severity IN ('critical', 'high', 'medium', 'low')),
|
|
767
|
+
cvss_score REAL,
|
|
768
|
+
triage_decision TEXT CHECK(triage_decision IN ('remediate', 'mitigate', 'accept_risk', 'defer', 'false_positive', 'not_applicable')),
|
|
769
|
+
triage_rationale TEXT,
|
|
770
|
+
sla_deadline TEXT,
|
|
771
|
+
triaged_by TEXT,
|
|
772
|
+
triaged_at TEXT DEFAULT (datetime('now')),
|
|
773
|
+
remediated_at TEXT,
|
|
774
|
+
UNIQUE(project_id, cve_id, package_name)
|
|
775
|
+
);"""),
|
|
776
|
+
|
|
777
|
+
"simulation_scenarios": textwrap.dedent("""\
|
|
778
|
+
CREATE TABLE IF NOT EXISTS simulation_scenarios (
|
|
779
|
+
id TEXT PRIMARY KEY,
|
|
780
|
+
project_id TEXT NOT NULL REFERENCES projects(id),
|
|
781
|
+
session_id TEXT REFERENCES intake_sessions(id),
|
|
782
|
+
scenario_name TEXT NOT NULL,
|
|
783
|
+
scenario_type TEXT DEFAULT 'what_if'
|
|
784
|
+
CHECK(scenario_type IN ('what_if', 'trade_study', 'risk_analysis', 'optimization', 'baseline')),
|
|
785
|
+
modifications TEXT,
|
|
786
|
+
status TEXT DEFAULT 'draft'
|
|
787
|
+
CHECK(status IN ('draft', 'running', 'completed', 'failed', 'archived')),
|
|
788
|
+
results TEXT,
|
|
789
|
+
classification TEXT DEFAULT 'CUI',
|
|
790
|
+
created_at TEXT DEFAULT (datetime('now')),
|
|
791
|
+
updated_at TEXT DEFAULT (datetime('now'))
|
|
792
|
+
);"""),
|
|
793
|
+
|
|
794
|
+
"coa_records": textwrap.dedent("""\
|
|
795
|
+
CREATE TABLE IF NOT EXISTS coa_records (
|
|
796
|
+
id TEXT PRIMARY KEY,
|
|
797
|
+
session_id TEXT NOT NULL REFERENCES intake_sessions(id),
|
|
798
|
+
project_id TEXT REFERENCES projects(id),
|
|
799
|
+
coa_type TEXT NOT NULL
|
|
800
|
+
CHECK(coa_type IN ('speed', 'balanced', 'comprehensive', 'alternative')),
|
|
801
|
+
title TEXT NOT NULL,
|
|
802
|
+
description TEXT,
|
|
803
|
+
scope TEXT,
|
|
804
|
+
estimated_pis TEXT,
|
|
805
|
+
estimated_cost TEXT,
|
|
806
|
+
risk_level TEXT CHECK(risk_level IN ('low', 'moderate', 'high', 'very_high')),
|
|
807
|
+
simulation_results TEXT,
|
|
808
|
+
selected INTEGER DEFAULT 0,
|
|
809
|
+
selected_by TEXT,
|
|
810
|
+
selection_rationale TEXT,
|
|
811
|
+
classification TEXT DEFAULT 'CUI',
|
|
812
|
+
created_at TEXT DEFAULT (datetime('now'))
|
|
813
|
+
);"""),
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
|
|
817
|
+
# ============================================================
|
|
818
|
+
# D-CHILD-1: AI SECURITY TABLES
|
|
819
|
+
# ============================================================
|
|
820
|
+
|
|
821
|
+
AI_SECURITY_TABLES: Dict[str, str] = {
|
|
822
|
+
"prompt_injection_log": textwrap.dedent("""\
|
|
823
|
+
CREATE TABLE IF NOT EXISTS prompt_injection_log (
|
|
824
|
+
id TEXT PRIMARY KEY,
|
|
825
|
+
source TEXT NOT NULL,
|
|
826
|
+
text_hash TEXT NOT NULL,
|
|
827
|
+
detected INTEGER NOT NULL DEFAULT 0,
|
|
828
|
+
confidence REAL DEFAULT 0.0,
|
|
829
|
+
action TEXT CHECK(action IN ('allow', 'warn', 'flag', 'block')),
|
|
830
|
+
findings TEXT,
|
|
831
|
+
project_id TEXT,
|
|
832
|
+
user_id TEXT,
|
|
833
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
834
|
+
);"""),
|
|
835
|
+
|
|
836
|
+
"ai_telemetry": textwrap.dedent("""\
|
|
837
|
+
CREATE TABLE IF NOT EXISTS ai_telemetry (
|
|
838
|
+
id TEXT PRIMARY KEY,
|
|
839
|
+
model_id TEXT NOT NULL,
|
|
840
|
+
provider TEXT NOT NULL,
|
|
841
|
+
prompt_hash TEXT NOT NULL,
|
|
842
|
+
response_hash TEXT,
|
|
843
|
+
input_tokens INTEGER DEFAULT 0,
|
|
844
|
+
output_tokens INTEGER DEFAULT 0,
|
|
845
|
+
latency_ms INTEGER DEFAULT 0,
|
|
846
|
+
agent_id TEXT,
|
|
847
|
+
user_id TEXT,
|
|
848
|
+
project_id TEXT,
|
|
849
|
+
function TEXT,
|
|
850
|
+
classification TEXT DEFAULT 'CUI',
|
|
851
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
852
|
+
);"""),
|
|
853
|
+
|
|
854
|
+
"ai_bom": textwrap.dedent("""\
|
|
855
|
+
CREATE TABLE IF NOT EXISTS ai_bom (
|
|
856
|
+
id TEXT PRIMARY KEY,
|
|
857
|
+
project_id TEXT NOT NULL,
|
|
858
|
+
model_id TEXT NOT NULL,
|
|
859
|
+
provider TEXT NOT NULL,
|
|
860
|
+
version TEXT,
|
|
861
|
+
purpose TEXT,
|
|
862
|
+
risk_classification TEXT,
|
|
863
|
+
data_categories TEXT,
|
|
864
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
865
|
+
);"""),
|
|
866
|
+
|
|
867
|
+
"atlas_assessments": textwrap.dedent("""\
|
|
868
|
+
CREATE TABLE IF NOT EXISTS atlas_assessments (
|
|
869
|
+
id TEXT PRIMARY KEY,
|
|
870
|
+
project_id TEXT NOT NULL,
|
|
871
|
+
framework_version TEXT DEFAULT 'v5.4.0',
|
|
872
|
+
overall_score REAL,
|
|
873
|
+
total_requirements INTEGER DEFAULT 0,
|
|
874
|
+
satisfied INTEGER DEFAULT 0,
|
|
875
|
+
partial INTEGER DEFAULT 0,
|
|
876
|
+
not_satisfied INTEGER DEFAULT 0,
|
|
877
|
+
not_applicable INTEGER DEFAULT 0,
|
|
878
|
+
results_json TEXT,
|
|
879
|
+
assessed_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
880
|
+
assessed_by TEXT DEFAULT 'automated',
|
|
881
|
+
classification TEXT DEFAULT 'CUI'
|
|
882
|
+
);"""),
|
|
883
|
+
|
|
884
|
+
"atlas_red_team_results": textwrap.dedent("""\
|
|
885
|
+
CREATE TABLE IF NOT EXISTS atlas_red_team_results (
|
|
886
|
+
id TEXT PRIMARY KEY,
|
|
887
|
+
project_id TEXT NOT NULL,
|
|
888
|
+
technique_id TEXT NOT NULL,
|
|
889
|
+
technique_name TEXT,
|
|
890
|
+
test_name TEXT NOT NULL,
|
|
891
|
+
result TEXT CHECK(result IN ('pass', 'fail', 'partial', 'error')),
|
|
892
|
+
severity TEXT CHECK(severity IN ('critical', 'high', 'medium', 'low', 'info')),
|
|
893
|
+
details TEXT,
|
|
894
|
+
evidence TEXT,
|
|
895
|
+
remediation TEXT,
|
|
896
|
+
tested_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
897
|
+
tested_by TEXT DEFAULT 'automated'
|
|
898
|
+
);"""),
|
|
899
|
+
|
|
900
|
+
"owasp_llm_assessments": textwrap.dedent("""\
|
|
901
|
+
CREATE TABLE IF NOT EXISTS owasp_llm_assessments (
|
|
902
|
+
id TEXT PRIMARY KEY,
|
|
903
|
+
project_id TEXT NOT NULL,
|
|
904
|
+
framework_version TEXT DEFAULT 'v2025',
|
|
905
|
+
overall_score REAL,
|
|
906
|
+
total_requirements INTEGER DEFAULT 0,
|
|
907
|
+
satisfied INTEGER DEFAULT 0,
|
|
908
|
+
partial INTEGER DEFAULT 0,
|
|
909
|
+
not_satisfied INTEGER DEFAULT 0,
|
|
910
|
+
not_applicable INTEGER DEFAULT 0,
|
|
911
|
+
results_json TEXT,
|
|
912
|
+
assessed_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
913
|
+
assessed_by TEXT DEFAULT 'automated',
|
|
914
|
+
classification TEXT DEFAULT 'CUI'
|
|
915
|
+
);"""),
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
|
|
919
|
+
# ============================================================
|
|
920
|
+
# D-CHILD-1: AI GOVERNANCE TABLES
|
|
921
|
+
# ============================================================
|
|
922
|
+
|
|
923
|
+
AI_GOVERNANCE_TABLES: Dict[str, str] = {
|
|
924
|
+
"model_cards": textwrap.dedent("""\
|
|
925
|
+
CREATE TABLE IF NOT EXISTS model_cards (
|
|
926
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
927
|
+
project_id TEXT NOT NULL,
|
|
928
|
+
model_name TEXT NOT NULL,
|
|
929
|
+
card_data TEXT NOT NULL,
|
|
930
|
+
card_hash TEXT,
|
|
931
|
+
version INTEGER DEFAULT 1,
|
|
932
|
+
created_at TEXT DEFAULT (datetime('now')),
|
|
933
|
+
UNIQUE(project_id, model_name, version)
|
|
934
|
+
);"""),
|
|
935
|
+
|
|
936
|
+
"system_cards": textwrap.dedent("""\
|
|
937
|
+
CREATE TABLE IF NOT EXISTS system_cards (
|
|
938
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
939
|
+
project_id TEXT NOT NULL,
|
|
940
|
+
card_data TEXT NOT NULL,
|
|
941
|
+
card_hash TEXT,
|
|
942
|
+
version INTEGER DEFAULT 1,
|
|
943
|
+
created_at TEXT DEFAULT (datetime('now'))
|
|
944
|
+
);"""),
|
|
945
|
+
|
|
946
|
+
"ai_use_case_inventory": textwrap.dedent("""\
|
|
947
|
+
CREATE TABLE IF NOT EXISTS ai_use_case_inventory (
|
|
948
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
949
|
+
project_id TEXT NOT NULL,
|
|
950
|
+
name TEXT NOT NULL,
|
|
951
|
+
purpose TEXT,
|
|
952
|
+
risk_level TEXT DEFAULT 'minimal_risk'
|
|
953
|
+
CHECK(risk_level IN ('minimal_risk', 'high_impact', 'safety_impacting')),
|
|
954
|
+
classification TEXT DEFAULT 'CUI',
|
|
955
|
+
deployment_status TEXT DEFAULT 'development',
|
|
956
|
+
responsible_official TEXT,
|
|
957
|
+
oversight_role TEXT,
|
|
958
|
+
last_assessed TEXT,
|
|
959
|
+
created_at TEXT DEFAULT (datetime('now')),
|
|
960
|
+
UNIQUE(project_id, name)
|
|
961
|
+
);"""),
|
|
962
|
+
|
|
963
|
+
"fairness_assessments": textwrap.dedent("""\
|
|
964
|
+
CREATE TABLE IF NOT EXISTS fairness_assessments (
|
|
965
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
966
|
+
project_id TEXT NOT NULL,
|
|
967
|
+
assessment_data TEXT NOT NULL,
|
|
968
|
+
overall_score REAL DEFAULT 0.0,
|
|
969
|
+
created_at TEXT DEFAULT (datetime('now'))
|
|
970
|
+
);"""),
|
|
971
|
+
|
|
972
|
+
"ai_oversight_plans": textwrap.dedent("""\
|
|
973
|
+
CREATE TABLE IF NOT EXISTS ai_oversight_plans (
|
|
974
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
975
|
+
project_id TEXT NOT NULL,
|
|
976
|
+
plan_name TEXT NOT NULL,
|
|
977
|
+
plan_data TEXT NOT NULL,
|
|
978
|
+
approval_status TEXT DEFAULT 'draft'
|
|
979
|
+
CHECK(approval_status IN ('draft', 'submitted', 'approved', 'rejected')),
|
|
980
|
+
approved_by TEXT,
|
|
981
|
+
classification TEXT DEFAULT 'CUI',
|
|
982
|
+
created_at TEXT DEFAULT (datetime('now'))
|
|
983
|
+
);"""),
|
|
984
|
+
|
|
985
|
+
"ai_caio_registry": textwrap.dedent("""\
|
|
986
|
+
CREATE TABLE IF NOT EXISTS ai_caio_registry (
|
|
987
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
988
|
+
project_id TEXT NOT NULL,
|
|
989
|
+
official_name TEXT NOT NULL,
|
|
990
|
+
official_role TEXT NOT NULL DEFAULT 'CAIO',
|
|
991
|
+
organization TEXT,
|
|
992
|
+
designation_date TEXT,
|
|
993
|
+
created_at TEXT DEFAULT (datetime('now'))
|
|
994
|
+
);"""),
|
|
995
|
+
|
|
996
|
+
"ai_incident_log": textwrap.dedent("""\
|
|
997
|
+
CREATE TABLE IF NOT EXISTS ai_incident_log (
|
|
998
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
999
|
+
project_id TEXT NOT NULL,
|
|
1000
|
+
incident_type TEXT NOT NULL,
|
|
1001
|
+
ai_system TEXT,
|
|
1002
|
+
severity TEXT DEFAULT 'medium'
|
|
1003
|
+
CHECK(severity IN ('critical', 'high', 'medium', 'low')),
|
|
1004
|
+
description TEXT NOT NULL,
|
|
1005
|
+
corrective_action TEXT,
|
|
1006
|
+
status TEXT DEFAULT 'open'
|
|
1007
|
+
CHECK(status IN ('open', 'investigating', 'mitigated', 'resolved', 'closed')),
|
|
1008
|
+
reported_by TEXT,
|
|
1009
|
+
created_at TEXT DEFAULT (datetime('now'))
|
|
1010
|
+
);"""),
|
|
1011
|
+
|
|
1012
|
+
"ai_ethics_reviews": textwrap.dedent("""\
|
|
1013
|
+
CREATE TABLE IF NOT EXISTS ai_ethics_reviews (
|
|
1014
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
1015
|
+
project_id TEXT NOT NULL,
|
|
1016
|
+
review_type TEXT NOT NULL,
|
|
1017
|
+
ai_system TEXT,
|
|
1018
|
+
findings TEXT,
|
|
1019
|
+
opt_out_policy INTEGER DEFAULT 0,
|
|
1020
|
+
legal_compliance_matrix INTEGER DEFAULT 0,
|
|
1021
|
+
pre_deployment_review INTEGER DEFAULT 0,
|
|
1022
|
+
reviewer TEXT,
|
|
1023
|
+
created_at TEXT DEFAULT (datetime('now'))
|
|
1024
|
+
);"""),
|
|
1025
|
+
|
|
1026
|
+
"ai_reassessment_schedule": textwrap.dedent("""\
|
|
1027
|
+
CREATE TABLE IF NOT EXISTS ai_reassessment_schedule (
|
|
1028
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
1029
|
+
project_id TEXT NOT NULL,
|
|
1030
|
+
ai_system TEXT NOT NULL,
|
|
1031
|
+
frequency TEXT NOT NULL DEFAULT 'annual'
|
|
1032
|
+
CHECK(frequency IN ('quarterly', 'semi_annual', 'annual', 'biennial')),
|
|
1033
|
+
next_due TEXT,
|
|
1034
|
+
last_completed TEXT,
|
|
1035
|
+
created_at TEXT DEFAULT (datetime('now')),
|
|
1036
|
+
UNIQUE(project_id, ai_system)
|
|
1037
|
+
);"""),
|
|
1038
|
+
}
|
|
1039
|
+
|
|
1040
|
+
|
|
1041
|
+
# ============================================================
|
|
1042
|
+
# D-CHILD-1: OBSERVABILITY & XAI TABLES
|
|
1043
|
+
# ============================================================
|
|
1044
|
+
|
|
1045
|
+
OBSERVABILITY_TABLES: Dict[str, str] = {
|
|
1046
|
+
"otel_spans": textwrap.dedent("""\
|
|
1047
|
+
CREATE TABLE IF NOT EXISTS otel_spans (
|
|
1048
|
+
id TEXT PRIMARY KEY,
|
|
1049
|
+
trace_id TEXT NOT NULL,
|
|
1050
|
+
parent_span_id TEXT,
|
|
1051
|
+
name TEXT NOT NULL,
|
|
1052
|
+
kind TEXT DEFAULT 'INTERNAL',
|
|
1053
|
+
start_time TEXT NOT NULL,
|
|
1054
|
+
end_time TEXT,
|
|
1055
|
+
duration_ms INTEGER DEFAULT 0,
|
|
1056
|
+
status_code TEXT DEFAULT 'UNSET',
|
|
1057
|
+
status_message TEXT,
|
|
1058
|
+
attributes TEXT,
|
|
1059
|
+
events TEXT,
|
|
1060
|
+
agent_id TEXT,
|
|
1061
|
+
project_id TEXT,
|
|
1062
|
+
classification TEXT DEFAULT 'CUI',
|
|
1063
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
1064
|
+
);"""),
|
|
1065
|
+
|
|
1066
|
+
"prov_entities": textwrap.dedent("""\
|
|
1067
|
+
CREATE TABLE IF NOT EXISTS prov_entities (
|
|
1068
|
+
id TEXT PRIMARY KEY,
|
|
1069
|
+
entity_type TEXT NOT NULL,
|
|
1070
|
+
label TEXT,
|
|
1071
|
+
content_hash TEXT,
|
|
1072
|
+
content TEXT,
|
|
1073
|
+
attributes TEXT,
|
|
1074
|
+
trace_id TEXT,
|
|
1075
|
+
span_id TEXT,
|
|
1076
|
+
agent_id TEXT,
|
|
1077
|
+
project_id TEXT,
|
|
1078
|
+
classification TEXT DEFAULT 'CUI',
|
|
1079
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
1080
|
+
);"""),
|
|
1081
|
+
|
|
1082
|
+
"prov_activities": textwrap.dedent("""\
|
|
1083
|
+
CREATE TABLE IF NOT EXISTS prov_activities (
|
|
1084
|
+
id TEXT PRIMARY KEY,
|
|
1085
|
+
activity_type TEXT NOT NULL,
|
|
1086
|
+
label TEXT,
|
|
1087
|
+
start_time TEXT,
|
|
1088
|
+
end_time TEXT,
|
|
1089
|
+
attributes TEXT,
|
|
1090
|
+
trace_id TEXT,
|
|
1091
|
+
span_id TEXT,
|
|
1092
|
+
agent_id TEXT,
|
|
1093
|
+
project_id TEXT,
|
|
1094
|
+
classification TEXT DEFAULT 'CUI',
|
|
1095
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
1096
|
+
);"""),
|
|
1097
|
+
|
|
1098
|
+
"prov_relations": textwrap.dedent("""\
|
|
1099
|
+
CREATE TABLE IF NOT EXISTS prov_relations (
|
|
1100
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
1101
|
+
relation_type TEXT NOT NULL,
|
|
1102
|
+
subject_id TEXT NOT NULL,
|
|
1103
|
+
object_id TEXT NOT NULL,
|
|
1104
|
+
attributes TEXT,
|
|
1105
|
+
trace_id TEXT,
|
|
1106
|
+
project_id TEXT,
|
|
1107
|
+
classification TEXT DEFAULT 'CUI',
|
|
1108
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
1109
|
+
);"""),
|
|
1110
|
+
|
|
1111
|
+
"shap_attributions": textwrap.dedent("""\
|
|
1112
|
+
CREATE TABLE IF NOT EXISTS shap_attributions (
|
|
1113
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
1114
|
+
trace_id TEXT NOT NULL,
|
|
1115
|
+
tool_name TEXT NOT NULL,
|
|
1116
|
+
shapley_value REAL NOT NULL,
|
|
1117
|
+
coalition_size INTEGER,
|
|
1118
|
+
confidence_low REAL,
|
|
1119
|
+
confidence_high REAL,
|
|
1120
|
+
outcome_metric TEXT DEFAULT 'success',
|
|
1121
|
+
outcome_value REAL,
|
|
1122
|
+
analysis_params TEXT,
|
|
1123
|
+
agent_id TEXT,
|
|
1124
|
+
project_id TEXT,
|
|
1125
|
+
classification TEXT DEFAULT 'CUI',
|
|
1126
|
+
analyzed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
1127
|
+
);"""),
|
|
1128
|
+
|
|
1129
|
+
"xai_assessments": textwrap.dedent("""\
|
|
1130
|
+
CREATE TABLE IF NOT EXISTS xai_assessments (
|
|
1131
|
+
id TEXT PRIMARY KEY,
|
|
1132
|
+
project_id TEXT NOT NULL,
|
|
1133
|
+
assessment_date TEXT NOT NULL,
|
|
1134
|
+
overall_status TEXT NOT NULL DEFAULT 'not_assessed',
|
|
1135
|
+
overall_score REAL DEFAULT 0.0,
|
|
1136
|
+
checks_json TEXT,
|
|
1137
|
+
findings_json TEXT,
|
|
1138
|
+
recommendations_json TEXT,
|
|
1139
|
+
framework_crosswalk TEXT,
|
|
1140
|
+
assessor_version TEXT,
|
|
1141
|
+
agent_id TEXT,
|
|
1142
|
+
classification TEXT DEFAULT 'CUI',
|
|
1143
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
1144
|
+
);"""),
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
|
|
1148
|
+
# ============================================================
|
|
1149
|
+
# D-CHILD-1: CODE INTELLIGENCE TABLES
|
|
1150
|
+
# ============================================================
|
|
1151
|
+
|
|
1152
|
+
CODE_INTELLIGENCE_TABLES: Dict[str, str] = {
|
|
1153
|
+
"code_quality_metrics": textwrap.dedent("""\
|
|
1154
|
+
CREATE TABLE IF NOT EXISTS code_quality_metrics (
|
|
1155
|
+
id TEXT PRIMARY KEY,
|
|
1156
|
+
project_id TEXT,
|
|
1157
|
+
file_path TEXT NOT NULL,
|
|
1158
|
+
function_name TEXT,
|
|
1159
|
+
class_name TEXT,
|
|
1160
|
+
language TEXT NOT NULL,
|
|
1161
|
+
cyclomatic_complexity INTEGER DEFAULT 0,
|
|
1162
|
+
cognitive_complexity INTEGER DEFAULT 0,
|
|
1163
|
+
loc INTEGER DEFAULT 0,
|
|
1164
|
+
loc_code INTEGER DEFAULT 0,
|
|
1165
|
+
loc_comment INTEGER DEFAULT 0,
|
|
1166
|
+
parameter_count INTEGER DEFAULT 0,
|
|
1167
|
+
nesting_depth INTEGER DEFAULT 0,
|
|
1168
|
+
import_count INTEGER DEFAULT 0,
|
|
1169
|
+
class_count INTEGER DEFAULT 0,
|
|
1170
|
+
function_count INTEGER DEFAULT 0,
|
|
1171
|
+
smells_json TEXT DEFAULT '[]',
|
|
1172
|
+
smell_count INTEGER DEFAULT 0,
|
|
1173
|
+
maintainability_score REAL DEFAULT 0.0,
|
|
1174
|
+
content_hash TEXT,
|
|
1175
|
+
scan_id TEXT,
|
|
1176
|
+
created_at TEXT DEFAULT (datetime('now'))
|
|
1177
|
+
);"""),
|
|
1178
|
+
|
|
1179
|
+
"runtime_feedback": textwrap.dedent("""\
|
|
1180
|
+
CREATE TABLE IF NOT EXISTS runtime_feedback (
|
|
1181
|
+
id TEXT PRIMARY KEY,
|
|
1182
|
+
project_id TEXT,
|
|
1183
|
+
source_file TEXT NOT NULL,
|
|
1184
|
+
source_function TEXT,
|
|
1185
|
+
test_file TEXT,
|
|
1186
|
+
test_function TEXT,
|
|
1187
|
+
test_passed INTEGER,
|
|
1188
|
+
test_duration_ms REAL,
|
|
1189
|
+
error_type TEXT,
|
|
1190
|
+
error_message TEXT,
|
|
1191
|
+
coverage_pct REAL,
|
|
1192
|
+
run_id TEXT,
|
|
1193
|
+
created_at TEXT DEFAULT (datetime('now'))
|
|
1194
|
+
);"""),
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
|
|
1198
|
+
# ============================================================
|
|
1199
|
+
# D-CHILD-1: DEVSECOPS/ZTA TABLES
|
|
1200
|
+
# ============================================================
|
|
1201
|
+
|
|
1202
|
+
DEVSECOPS_ZTA_TABLES: Dict[str, str] = {
|
|
1203
|
+
"devsecops_profiles": textwrap.dedent("""\
|
|
1204
|
+
CREATE TABLE IF NOT EXISTS devsecops_profiles (
|
|
1205
|
+
id TEXT PRIMARY KEY,
|
|
1206
|
+
project_id TEXT NOT NULL REFERENCES projects(id),
|
|
1207
|
+
maturity_level TEXT CHECK(maturity_level IN (
|
|
1208
|
+
'level_1_initial', 'level_2_managed', 'level_3_defined',
|
|
1209
|
+
'level_4_measured', 'level_5_optimized'
|
|
1210
|
+
)),
|
|
1211
|
+
active_stages TEXT,
|
|
1212
|
+
stage_configs TEXT,
|
|
1213
|
+
detected_at TEXT,
|
|
1214
|
+
confirmed_by TEXT,
|
|
1215
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
1216
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
1217
|
+
UNIQUE(project_id)
|
|
1218
|
+
);"""),
|
|
1219
|
+
|
|
1220
|
+
"zta_maturity_scores": textwrap.dedent("""\
|
|
1221
|
+
CREATE TABLE IF NOT EXISTS zta_maturity_scores (
|
|
1222
|
+
id TEXT PRIMARY KEY,
|
|
1223
|
+
project_id TEXT NOT NULL REFERENCES projects(id),
|
|
1224
|
+
pillar TEXT NOT NULL CHECK(pillar IN (
|
|
1225
|
+
'user_identity', 'device', 'network', 'application_workload',
|
|
1226
|
+
'data', 'visibility_analytics', 'automation_orchestration', 'overall'
|
|
1227
|
+
)),
|
|
1228
|
+
score REAL CHECK(score >= 0.0 AND score <= 1.0),
|
|
1229
|
+
maturity_level TEXT CHECK(maturity_level IN ('traditional', 'advanced', 'optimal')),
|
|
1230
|
+
evidence TEXT,
|
|
1231
|
+
assessed_by TEXT DEFAULT 'icdev-devsecops-agent',
|
|
1232
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
1233
|
+
);"""),
|
|
1234
|
+
|
|
1235
|
+
"zta_posture_evidence": textwrap.dedent("""\
|
|
1236
|
+
CREATE TABLE IF NOT EXISTS zta_posture_evidence (
|
|
1237
|
+
id TEXT PRIMARY KEY,
|
|
1238
|
+
project_id TEXT NOT NULL REFERENCES projects(id),
|
|
1239
|
+
evidence_type TEXT NOT NULL,
|
|
1240
|
+
evidence_data TEXT,
|
|
1241
|
+
status TEXT CHECK(status IN ('current', 'stale', 'expired', 'not_collected')),
|
|
1242
|
+
collected_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
1243
|
+
expires_at TIMESTAMP
|
|
1244
|
+
);"""),
|
|
1245
|
+
|
|
1246
|
+
"nist_800_207_assessments": textwrap.dedent("""\
|
|
1247
|
+
CREATE TABLE IF NOT EXISTS nist_800_207_assessments (
|
|
1248
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
1249
|
+
project_id TEXT NOT NULL,
|
|
1250
|
+
assessment_date TEXT,
|
|
1251
|
+
assessor TEXT DEFAULT 'icdev-devsecops-agent',
|
|
1252
|
+
requirement_id TEXT NOT NULL,
|
|
1253
|
+
requirement_title TEXT,
|
|
1254
|
+
family TEXT,
|
|
1255
|
+
status TEXT DEFAULT 'not_assessed' CHECK(status IN (
|
|
1256
|
+
'not_assessed', 'satisfied', 'partially_satisfied',
|
|
1257
|
+
'not_satisfied', 'not_applicable', 'risk_accepted'
|
|
1258
|
+
)),
|
|
1259
|
+
evidence_description TEXT,
|
|
1260
|
+
nist_800_53_crosswalk TEXT,
|
|
1261
|
+
automation_result TEXT,
|
|
1262
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
1263
|
+
updated_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
1264
|
+
UNIQUE(project_id, requirement_id)
|
|
1265
|
+
);"""),
|
|
1266
|
+
|
|
1267
|
+
"devsecops_pipeline_audit": textwrap.dedent("""\
|
|
1268
|
+
CREATE TABLE IF NOT EXISTS devsecops_pipeline_audit (
|
|
1269
|
+
id TEXT PRIMARY KEY,
|
|
1270
|
+
project_id TEXT NOT NULL,
|
|
1271
|
+
pipeline_run_id TEXT,
|
|
1272
|
+
stage TEXT NOT NULL,
|
|
1273
|
+
tool TEXT NOT NULL,
|
|
1274
|
+
status TEXT CHECK(status IN ('passed', 'failed', 'skipped', 'warning')),
|
|
1275
|
+
findings_count INTEGER DEFAULT 0,
|
|
1276
|
+
findings_data TEXT,
|
|
1277
|
+
duration_seconds REAL,
|
|
1278
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
1279
|
+
);"""),
|
|
1280
|
+
}
|
|
1281
|
+
|
|
1282
|
+
|
|
1283
|
+
# ============================================================
|
|
1284
|
+
# CAPABILITY → TABLE GROUP MAPPING
|
|
1285
|
+
# ============================================================
|
|
1286
|
+
|
|
1287
|
+
CAPABILITY_TABLE_MAP: Dict[str, Dict[str, str]] = {
|
|
1288
|
+
"compliance": COMPLIANCE_TABLES,
|
|
1289
|
+
"mbse": MBSE_TABLES,
|
|
1290
|
+
# D-CHILD-1: Enterprise capability table groups
|
|
1291
|
+
"ricoas": RICOAS_TABLES,
|
|
1292
|
+
"supply_chain": RICOAS_TABLES, # Supply chain uses RICOAS tables (shared schema)
|
|
1293
|
+
"simulation": RICOAS_TABLES, # Simulation uses RICOAS tables (shared schema)
|
|
1294
|
+
"ai_security": AI_SECURITY_TABLES,
|
|
1295
|
+
"ai_governance": AI_GOVERNANCE_TABLES,
|
|
1296
|
+
"observability": OBSERVABILITY_TABLES,
|
|
1297
|
+
"code_intelligence": CODE_INTELLIGENCE_TABLES,
|
|
1298
|
+
"devsecops_zta": DEVSECOPS_ZTA_TABLES,
|
|
1299
|
+
}
|
|
1300
|
+
|
|
1301
|
+
|
|
1302
|
+
# ============================================================
|
|
1303
|
+
# HELPER FUNCTIONS
|
|
1304
|
+
# ============================================================
|
|
1305
|
+
|
|
1306
|
+
def _sanitize_name(name: str) -> str:
|
|
1307
|
+
"""Sanitize app name for use as a Python identifier and filename."""
|
|
1308
|
+
return re.sub(r'[^a-z0-9_]', '_', name.lower().replace('-', '_')).strip('_')
|
|
1309
|
+
|
|
1310
|
+
|
|
1311
|
+
def _build_sql_block(tables: Dict[str, str], block_comment: str) -> str:
|
|
1312
|
+
"""Join table DDL statements into a single SQL string with a section comment."""
|
|
1313
|
+
lines = [f"-- {'=' * 60}", f"-- {block_comment}", f"-- {'=' * 60}"]
|
|
1314
|
+
for _table_name, ddl in tables.items():
|
|
1315
|
+
lines.append(ddl)
|
|
1316
|
+
lines.append("")
|
|
1317
|
+
return "\n".join(lines)
|
|
1318
|
+
|
|
1319
|
+
|
|
1320
|
+
def _indent(text: str, prefix: str = " ") -> str:
|
|
1321
|
+
"""Indent every line of *text* by *prefix*."""
|
|
1322
|
+
return "\n".join(prefix + line if line.strip() else line for line in text.splitlines())
|
|
1323
|
+
|
|
1324
|
+
|
|
1325
|
+
# ============================================================
|
|
1326
|
+
# MAIN GENERATOR
|
|
1327
|
+
# ============================================================
|
|
1328
|
+
|
|
1329
|
+
def generate_init_script(blueprint: Dict[str, Any]) -> str:
|
|
1330
|
+
"""Generate a complete, standalone Python init script for a child app.
|
|
1331
|
+
|
|
1332
|
+
Args:
|
|
1333
|
+
blueprint: Blueprint dict produced by app_blueprint.py. Expected keys:
|
|
1334
|
+
- app_name (str)
|
|
1335
|
+
- classification (str, e.g. 'CUI')
|
|
1336
|
+
- capabilities (dict[str, bool])
|
|
1337
|
+
|
|
1338
|
+
Returns:
|
|
1339
|
+
The full Python source code of the generated init script.
|
|
1340
|
+
"""
|
|
1341
|
+
app_name: str = blueprint.get("app_name", "child_app")
|
|
1342
|
+
classification: str = blueprint.get("classification", "CUI")
|
|
1343
|
+
capabilities: Dict[str, bool] = blueprint.get("capabilities", {})
|
|
1344
|
+
safe_name = _sanitize_name(app_name)
|
|
1345
|
+
|
|
1346
|
+
# --- Determine which capability SQL blocks to include -----------------
|
|
1347
|
+
enabled_caps: List[str] = sorted(
|
|
1348
|
+
cap for cap, enabled in capabilities.items()
|
|
1349
|
+
if enabled and cap in CAPABILITY_TABLE_MAP
|
|
1350
|
+
)
|
|
1351
|
+
|
|
1352
|
+
# --- Build the SQL constant strings that will live in the generated file
|
|
1353
|
+
core_sql = _build_sql_block(CORE_TABLES, "CORE TABLES")
|
|
1354
|
+
|
|
1355
|
+
capability_sql_constants: List[str] = [] # Python source fragments
|
|
1356
|
+
capability_init_calls: List[str] = [] # Lines inside init_db()
|
|
1357
|
+
migrate_cases: List[str] = [] # Cases for migrate_add_capability()
|
|
1358
|
+
|
|
1359
|
+
for cap_name in CAPABILITY_TABLE_MAP:
|
|
1360
|
+
var_name = f"{cap_name.upper()}_SQL"
|
|
1361
|
+
sql_block = _build_sql_block(CAPABILITY_TABLE_MAP[cap_name], f"{cap_name.upper()} TABLES")
|
|
1362
|
+
# Always emit the constant so migrate_add_capability can reference it
|
|
1363
|
+
capability_sql_constants.append(
|
|
1364
|
+
f'{var_name} = """\n{sql_block}\n"""'
|
|
1365
|
+
)
|
|
1366
|
+
migrate_cases.append(
|
|
1367
|
+
f' "{cap_name}": {var_name},'
|
|
1368
|
+
)
|
|
1369
|
+
# Only call it in init_db if this capability is currently enabled
|
|
1370
|
+
if cap_name in enabled_caps:
|
|
1371
|
+
capability_init_calls.append(
|
|
1372
|
+
f' conn.executescript({var_name})'
|
|
1373
|
+
)
|
|
1374
|
+
|
|
1375
|
+
capability_constants_src = "\n\n".join(capability_sql_constants)
|
|
1376
|
+
"\n".join(capability_init_calls) if capability_init_calls else " pass # No optional capabilities enabled at init time"
|
|
1377
|
+
migrate_map_src = "\n".join(migrate_cases) if migrate_cases else ' # No optional table groups defined'
|
|
1378
|
+
|
|
1379
|
+
# --- Enabled capabilities comment for the header ----------------------
|
|
1380
|
+
caps_comment = ", ".join(enabled_caps) if enabled_caps else "none"
|
|
1381
|
+
|
|
1382
|
+
# --- Classification banner --------------------------------------------
|
|
1383
|
+
if classification == "SECRET":
|
|
1384
|
+
cui_banner = (
|
|
1385
|
+
"# SECRET // NOFORN\n"
|
|
1386
|
+
"# Classified by: Department of Defense\n"
|
|
1387
|
+
"# Reason: 1.4(c)\n"
|
|
1388
|
+
"# Declassify on: 25X1"
|
|
1389
|
+
)
|
|
1390
|
+
else:
|
|
1391
|
+
cui_banner = (
|
|
1392
|
+
f"# {classification} // SP-CTI\n"
|
|
1393
|
+
"# Controlled by: Department of Defense\n"
|
|
1394
|
+
"# CUI Category: CTI\n"
|
|
1395
|
+
"# Distribution: D\n"
|
|
1396
|
+
"# POC: System Administrator"
|
|
1397
|
+
)
|
|
1398
|
+
|
|
1399
|
+
# --- Assemble the generated script ------------------------------------
|
|
1400
|
+
generated_at = datetime.now(tz=timezone.utc).isoformat()
|
|
1401
|
+
cap_names_literal = repr(list(CAPABILITY_TABLE_MAP.keys()))
|
|
1402
|
+
|
|
1403
|
+
parts: List[str] = []
|
|
1404
|
+
parts.append("#!/usr/bin/env python3")
|
|
1405
|
+
parts.append(cui_banner)
|
|
1406
|
+
parts.append(f'"""Initialize the {app_name} database.')
|
|
1407
|
+
parts.append("")
|
|
1408
|
+
parts.append(f"Auto-generated by ICDEV db_init_generator on {generated_at}.")
|
|
1409
|
+
parts.append("Decision D27: Minimal DB + migration -- core tables first, expand as capabilities activate.")
|
|
1410
|
+
parts.append("")
|
|
1411
|
+
parts.append(f"Enabled capabilities at generation time: {caps_comment}")
|
|
1412
|
+
parts.append("")
|
|
1413
|
+
parts.append("Usage:")
|
|
1414
|
+
parts.append(f' python init_{safe_name}_db.py [--db-path DATA/{safe_name}.db] [--reset]')
|
|
1415
|
+
parts.append('"""')
|
|
1416
|
+
parts.append("")
|
|
1417
|
+
parts.append("import argparse")
|
|
1418
|
+
parts.append("import sqlite3")
|
|
1419
|
+
parts.append("import sys")
|
|
1420
|
+
parts.append("from pathlib import Path")
|
|
1421
|
+
parts.append("")
|
|
1422
|
+
parts.append(f'DB_PATH = Path(__file__).resolve().parent / "data" / "{safe_name}.db"')
|
|
1423
|
+
parts.append("")
|
|
1424
|
+
parts.append("")
|
|
1425
|
+
parts.append("# " + "-" * 60)
|
|
1426
|
+
parts.append("# PATTERN: Define CHECK constraint values as Python constants")
|
|
1427
|
+
parts.append("# so SQL and Python stay in sync. Example:")
|
|
1428
|
+
parts.append("#")
|
|
1429
|
+
parts.append("# ENTITY_TYPES = ('person', 'organization', 'location')")
|
|
1430
|
+
parts.append("# _entity_check = ','.join(repr(t) for t in ENTITY_TYPES)")
|
|
1431
|
+
parts.append("#")
|
|
1432
|
+
parts.append("# Then in SQL:")
|
|
1433
|
+
parts.append(f"# CHECK (entity_type IN ({{_entity_check}}))")
|
|
1434
|
+
parts.append("#")
|
|
1435
|
+
parts.append("# This avoids CHECK constraint mismatches when adding new types.")
|
|
1436
|
+
parts.append("# " + "-" * 60)
|
|
1437
|
+
parts.append("")
|
|
1438
|
+
parts.append("")
|
|
1439
|
+
parts.append("# " + "=" * 60)
|
|
1440
|
+
parts.append("# CORE SQL -- always created")
|
|
1441
|
+
parts.append("# " + "=" * 60)
|
|
1442
|
+
parts.append(f'CORE_SQL = """\n{core_sql}\n"""')
|
|
1443
|
+
parts.append("")
|
|
1444
|
+
parts.append("")
|
|
1445
|
+
parts.append("# " + "=" * 60)
|
|
1446
|
+
parts.append("# OPTIONAL CAPABILITY SQL BLOCKS")
|
|
1447
|
+
parts.append("# " + "=" * 60)
|
|
1448
|
+
parts.append(capability_constants_src)
|
|
1449
|
+
parts.append("")
|
|
1450
|
+
parts.append("")
|
|
1451
|
+
parts.append("# Mapping from capability name to SQL constant")
|
|
1452
|
+
parts.append("_CAPABILITY_SQL_MAP = {")
|
|
1453
|
+
parts.append(migrate_map_src)
|
|
1454
|
+
parts.append("}")
|
|
1455
|
+
parts.append("")
|
|
1456
|
+
parts.append("")
|
|
1457
|
+
|
|
1458
|
+
# SCHEMA_SQL constant for test imports (BDD environment.py, conftest.py)
|
|
1459
|
+
parts.append("# Combined SQL for test setup (import this in features/environment.py)")
|
|
1460
|
+
if capability_init_calls:
|
|
1461
|
+
cap_refs = " + ".join(
|
|
1462
|
+
call_line.strip().replace("conn.executescript(", "").rstrip(")")
|
|
1463
|
+
for call_line in capability_init_calls
|
|
1464
|
+
)
|
|
1465
|
+
parts.append(f"SCHEMA_SQL = CORE_SQL + {cap_refs}")
|
|
1466
|
+
else:
|
|
1467
|
+
parts.append("SCHEMA_SQL = CORE_SQL")
|
|
1468
|
+
parts.append("")
|
|
1469
|
+
parts.append("")
|
|
1470
|
+
|
|
1471
|
+
# init_db function
|
|
1472
|
+
parts.append("def init_db(db_path=None):")
|
|
1473
|
+
parts.append(f' """Initialize the {app_name} database with core + enabled capability tables."""')
|
|
1474
|
+
parts.append(" path = Path(db_path) if db_path else DB_PATH")
|
|
1475
|
+
parts.append(" path.parent.mkdir(parents=True, exist_ok=True)")
|
|
1476
|
+
parts.append("")
|
|
1477
|
+
parts.append(" conn = sqlite3.connect(str(path))")
|
|
1478
|
+
parts.append(" try:")
|
|
1479
|
+
parts.append(" # Core tables -- always present")
|
|
1480
|
+
parts.append(" conn.executescript(CORE_SQL)")
|
|
1481
|
+
parts.append("")
|
|
1482
|
+
parts.append(" # Capability tables enabled at generation time")
|
|
1483
|
+
if capability_init_calls:
|
|
1484
|
+
for call_line in capability_init_calls:
|
|
1485
|
+
parts.append(f" {call_line.strip()}")
|
|
1486
|
+
else:
|
|
1487
|
+
parts.append(" pass # No optional capabilities enabled at init time")
|
|
1488
|
+
parts.append("")
|
|
1489
|
+
parts.append(" conn.commit()")
|
|
1490
|
+
parts.append(" finally:")
|
|
1491
|
+
parts.append(" conn.close()")
|
|
1492
|
+
parts.append("")
|
|
1493
|
+
parts.append(" # Verify")
|
|
1494
|
+
parts.append(" conn = sqlite3.connect(str(path))")
|
|
1495
|
+
parts.append(" try:")
|
|
1496
|
+
parts.append(" cur = conn.cursor()")
|
|
1497
|
+
parts.append(' cur.execute("SELECT name FROM sqlite_master WHERE type=\'table\' ORDER BY name")')
|
|
1498
|
+
parts.append(" tables = [row[0] for row in cur.fetchall()]")
|
|
1499
|
+
parts.append(" finally:")
|
|
1500
|
+
parts.append(" conn.close()")
|
|
1501
|
+
parts.append("")
|
|
1502
|
+
parts.append(' print(f"Database initialized at {path}")')
|
|
1503
|
+
parts.append(' print(f"Tables created ({len(tables)}): {\', \'.join(tables)}")')
|
|
1504
|
+
parts.append(" return tables")
|
|
1505
|
+
parts.append("")
|
|
1506
|
+
parts.append("")
|
|
1507
|
+
|
|
1508
|
+
# migrate_add_capability function
|
|
1509
|
+
parts.append("def migrate_add_capability(db_path, capability_name):")
|
|
1510
|
+
parts.append(' """Add tables for a capability that was not enabled at init time.')
|
|
1511
|
+
parts.append("")
|
|
1512
|
+
parts.append(" Args:")
|
|
1513
|
+
parts.append(" db_path: Path to the SQLite database file.")
|
|
1514
|
+
parts.append(f" capability_name: One of {cap_names_literal}.")
|
|
1515
|
+
parts.append("")
|
|
1516
|
+
parts.append(" Raises:")
|
|
1517
|
+
parts.append(" ValueError: If capability_name is not recognized.")
|
|
1518
|
+
parts.append(' """')
|
|
1519
|
+
parts.append(" if capability_name not in _CAPABILITY_SQL_MAP:")
|
|
1520
|
+
parts.append(" raise ValueError(")
|
|
1521
|
+
parts.append(' f"Unknown capability \'{capability_name}\'. "')
|
|
1522
|
+
parts.append(' f"Valid options: {list(_CAPABILITY_SQL_MAP.keys())}"')
|
|
1523
|
+
parts.append(" )")
|
|
1524
|
+
parts.append("")
|
|
1525
|
+
parts.append(" path = Path(db_path)")
|
|
1526
|
+
parts.append(" if not path.exists():")
|
|
1527
|
+
parts.append(' raise FileNotFoundError(f"Database not found: {path}")')
|
|
1528
|
+
parts.append("")
|
|
1529
|
+
parts.append(" sql = _CAPABILITY_SQL_MAP[capability_name]")
|
|
1530
|
+
parts.append(" conn = sqlite3.connect(str(path))")
|
|
1531
|
+
parts.append(" try:")
|
|
1532
|
+
parts.append(" conn.executescript(sql)")
|
|
1533
|
+
parts.append(" conn.commit()")
|
|
1534
|
+
parts.append(" finally:")
|
|
1535
|
+
parts.append(" conn.close()")
|
|
1536
|
+
parts.append("")
|
|
1537
|
+
parts.append(" # Verify new tables")
|
|
1538
|
+
parts.append(" conn = sqlite3.connect(str(path))")
|
|
1539
|
+
parts.append(" try:")
|
|
1540
|
+
parts.append(" cur = conn.cursor()")
|
|
1541
|
+
parts.append(' cur.execute("SELECT name FROM sqlite_master WHERE type=\'table\' ORDER BY name")')
|
|
1542
|
+
parts.append(" tables = [row[0] for row in cur.fetchall()]")
|
|
1543
|
+
parts.append(" finally:")
|
|
1544
|
+
parts.append(" conn.close()")
|
|
1545
|
+
parts.append("")
|
|
1546
|
+
parts.append(' print(f"Capability \'{capability_name}\' tables added to {path}")')
|
|
1547
|
+
parts.append(' print(f"Total tables ({len(tables)}): {\', \'.join(tables)}")')
|
|
1548
|
+
parts.append(" return tables")
|
|
1549
|
+
parts.append("")
|
|
1550
|
+
parts.append("")
|
|
1551
|
+
|
|
1552
|
+
# main function
|
|
1553
|
+
parts.append("def main():")
|
|
1554
|
+
parts.append(' """CLI entry point."""')
|
|
1555
|
+
parts.append(" parser = argparse.ArgumentParser(")
|
|
1556
|
+
parts.append(f' description="Initialize the {app_name} database"')
|
|
1557
|
+
parts.append(" )")
|
|
1558
|
+
parts.append(" parser.add_argument(")
|
|
1559
|
+
parts.append(' "--db-path", type=Path, default=DB_PATH,')
|
|
1560
|
+
parts.append(' help="Database file path (default: %(default)s)"')
|
|
1561
|
+
parts.append(" )")
|
|
1562
|
+
parts.append(" parser.add_argument(")
|
|
1563
|
+
parts.append(' "--reset", action="store_true",')
|
|
1564
|
+
parts.append(' help="Drop and recreate all tables"')
|
|
1565
|
+
parts.append(" )")
|
|
1566
|
+
parts.append(" parser.add_argument(")
|
|
1567
|
+
parts.append(' "--add-capability", type=str, default=None,')
|
|
1568
|
+
parts.append(" help=\"Add tables for a capability post-init (e.g. 'compliance', 'mbse')\"")
|
|
1569
|
+
parts.append(" )")
|
|
1570
|
+
parts.append(" args = parser.parse_args()")
|
|
1571
|
+
parts.append("")
|
|
1572
|
+
parts.append(" if args.add_capability:")
|
|
1573
|
+
parts.append(" migrate_add_capability(args.db_path, args.add_capability)")
|
|
1574
|
+
parts.append(" return")
|
|
1575
|
+
parts.append("")
|
|
1576
|
+
parts.append(" if args.reset and args.db_path.exists():")
|
|
1577
|
+
parts.append(" args.db_path.unlink()")
|
|
1578
|
+
parts.append(' print(f"Removed existing database: {args.db_path}")')
|
|
1579
|
+
parts.append("")
|
|
1580
|
+
parts.append(" init_db(args.db_path)")
|
|
1581
|
+
parts.append("")
|
|
1582
|
+
parts.append("")
|
|
1583
|
+
parts.append('if __name__ == "__main__":')
|
|
1584
|
+
parts.append(" main()")
|
|
1585
|
+
parts.append("")
|
|
1586
|
+
|
|
1587
|
+
script = "\n".join(parts)
|
|
1588
|
+
|
|
1589
|
+
return script
|
|
1590
|
+
|
|
1591
|
+
|
|
1592
|
+
def write_init_script(blueprint: Dict[str, Any], output_dir: Path) -> Path:
|
|
1593
|
+
"""Generate the init script and write it to *output_dir*.
|
|
1594
|
+
|
|
1595
|
+
Args:
|
|
1596
|
+
blueprint: Blueprint dict from app_blueprint.py.
|
|
1597
|
+
output_dir: Directory where the generated script will be placed.
|
|
1598
|
+
|
|
1599
|
+
Returns:
|
|
1600
|
+
Path to the written file.
|
|
1601
|
+
"""
|
|
1602
|
+
app_name: str = blueprint.get("app_name", "child_app")
|
|
1603
|
+
safe_name = _sanitize_name(app_name)
|
|
1604
|
+
filename = f"init_{safe_name}_db.py"
|
|
1605
|
+
|
|
1606
|
+
output_dir = Path(output_dir)
|
|
1607
|
+
output_dir.mkdir(parents=True, exist_ok=True)
|
|
1608
|
+
output_path = output_dir / filename
|
|
1609
|
+
|
|
1610
|
+
source = generate_init_script(blueprint)
|
|
1611
|
+
output_path.write_text(source, encoding="utf-8")
|
|
1612
|
+
|
|
1613
|
+
logger.info("Wrote init script: %s (%d bytes)", output_path, len(source))
|
|
1614
|
+
|
|
1615
|
+
# Audit trail
|
|
1616
|
+
audit_log_event(
|
|
1617
|
+
event_type="code_generated",
|
|
1618
|
+
actor="icdev-db-init-generator",
|
|
1619
|
+
action=f"Generated DB init script for {app_name}",
|
|
1620
|
+
details=json.dumps({
|
|
1621
|
+
"app_name": app_name,
|
|
1622
|
+
"output_path": str(output_path),
|
|
1623
|
+
"capabilities": {
|
|
1624
|
+
k: v for k, v in blueprint.get("capabilities", {}).items() if v
|
|
1625
|
+
},
|
|
1626
|
+
"classification": blueprint.get("classification", "CUI"),
|
|
1627
|
+
}),
|
|
1628
|
+
project_id=blueprint.get("blueprint_id", "unknown"),
|
|
1629
|
+
)
|
|
1630
|
+
|
|
1631
|
+
return output_path
|
|
1632
|
+
|
|
1633
|
+
|
|
1634
|
+
# ============================================================
|
|
1635
|
+
# CLI ENTRY POINT
|
|
1636
|
+
# ============================================================
|
|
1637
|
+
|
|
1638
|
+
def main():
|
|
1639
|
+
"""CLI entry point for the DB init generator."""
|
|
1640
|
+
parser = argparse.ArgumentParser(
|
|
1641
|
+
description="Generate a standalone database init script for a child app"
|
|
1642
|
+
)
|
|
1643
|
+
parser.add_argument(
|
|
1644
|
+
"--blueprint", required=True, type=Path,
|
|
1645
|
+
help="Path to blueprint JSON file (from app_blueprint.py)"
|
|
1646
|
+
)
|
|
1647
|
+
parser.add_argument(
|
|
1648
|
+
"--output-dir", required=True, type=Path,
|
|
1649
|
+
help="Directory to write the generated init script"
|
|
1650
|
+
)
|
|
1651
|
+
parser.add_argument(
|
|
1652
|
+
"--json", action="store_true", dest="json_output",
|
|
1653
|
+
help="Output result as JSON"
|
|
1654
|
+
)
|
|
1655
|
+
args = parser.parse_args()
|
|
1656
|
+
|
|
1657
|
+
# Configure logging
|
|
1658
|
+
logging.basicConfig(
|
|
1659
|
+
level=logging.INFO,
|
|
1660
|
+
format="%(asctime)s [%(name)s] %(levelname)s: %(message)s",
|
|
1661
|
+
)
|
|
1662
|
+
|
|
1663
|
+
# Load blueprint
|
|
1664
|
+
if not args.blueprint.exists():
|
|
1665
|
+
logger.error("Blueprint file not found: %s", args.blueprint)
|
|
1666
|
+
sys.exit(1)
|
|
1667
|
+
|
|
1668
|
+
try:
|
|
1669
|
+
blueprint = json.loads(args.blueprint.read_text(encoding="utf-8"))
|
|
1670
|
+
except (json.JSONDecodeError, OSError) as exc:
|
|
1671
|
+
logger.error("Failed to load blueprint: %s", exc)
|
|
1672
|
+
sys.exit(1)
|
|
1673
|
+
|
|
1674
|
+
# Generate and write
|
|
1675
|
+
output_path = write_init_script(blueprint, args.output_dir)
|
|
1676
|
+
|
|
1677
|
+
# Determine enabled capabilities for summary
|
|
1678
|
+
capabilities = blueprint.get("capabilities", {})
|
|
1679
|
+
enabled = sorted(k for k, v in capabilities.items() if v and k in CAPABILITY_TABLE_MAP)
|
|
1680
|
+
core_count = len(CORE_TABLES)
|
|
1681
|
+
cap_count = sum(len(CAPABILITY_TABLE_MAP[c]) for c in enabled)
|
|
1682
|
+
total_tables = core_count + cap_count
|
|
1683
|
+
|
|
1684
|
+
result = {
|
|
1685
|
+
"status": "success",
|
|
1686
|
+
"output_path": str(output_path),
|
|
1687
|
+
"app_name": blueprint.get("app_name", "child_app"),
|
|
1688
|
+
"classification": blueprint.get("classification", "CUI"),
|
|
1689
|
+
"core_tables": core_count,
|
|
1690
|
+
"capability_tables": cap_count,
|
|
1691
|
+
"total_tables": total_tables,
|
|
1692
|
+
"enabled_capabilities": enabled,
|
|
1693
|
+
"available_migrations": sorted(CAPABILITY_TABLE_MAP.keys()),
|
|
1694
|
+
}
|
|
1695
|
+
|
|
1696
|
+
if args.json_output:
|
|
1697
|
+
print(json.dumps(result, indent=2))
|
|
1698
|
+
else:
|
|
1699
|
+
print(f"Generated: {output_path}")
|
|
1700
|
+
print(f" App: {result['app_name']}")
|
|
1701
|
+
print(f" Classification: {result['classification']}")
|
|
1702
|
+
print(f" Core tables: {core_count}")
|
|
1703
|
+
print(f" Cap tables: {cap_count} ({', '.join(enabled) if enabled else 'none'})")
|
|
1704
|
+
print(f" Total tables: {total_tables}")
|
|
1705
|
+
print(f" Migrations: {', '.join(sorted(CAPABILITY_TABLE_MAP.keys()))}")
|
|
1706
|
+
|
|
1707
|
+
|
|
1708
|
+
if __name__ == "__main__":
|
|
1709
|
+
main()
|